From a33d65dcdad75b37426908afe34c81e72ccc5ef8 Mon Sep 17 00:00:00 2001 From: Chips Date: Sat, 25 Jun 2016 09:23:49 +0000 Subject: [PATCH] Merge latest TomB version as of 12 Mai 06 --- Makefile | 2 +- src/cfgfile.cpp | 1 - src/cpuemu_0.cpp | 39 +- src/custom.cpp | 28 +- src/drawing.cpp | 12 +- src/gencpu.cpp | 16 + src/include/drawing.h | 1 + src/include/options.h | 4 + src/jit/codegen_arm.cpp | 2862 +- src/jit/codegen_arm.h | 73 +- src/jit/compemu.cpp | 48846 +++++++++------------------- src/jit/compemu.h | 64 +- src/jit/compemu_midfunc_arm.cpp | 2024 +- src/jit/compemu_midfunc_arm.h | 121 - src/jit/compemu_midfunc_arm2.cpp | 5266 +++ src/jit/compemu_midfunc_arm2.h | 385 + src/jit/compemu_support.cpp | 838 +- src/jit/compstbl.cpp | 722 +- src/jit/comptbl.h | 169 +- src/jit/gencomp.cpp | 3133 -- src/jit/gencomp_arm.cpp | 5643 ++-- src/main.cpp | 4 +- src/md-pandora/m68k.h | 2 +- src/newcpu.cpp | 2 +- src/od-gles/gles_gfx.cpp | 4 +- src/od-pandora/gui/Navigation.cpp | 7 +- src/od-pandora/gui/PanelMisc.cpp | 14 + src/od-pandora/pandora.cpp | 73 +- src/od-pandora/pandora_gfx.cpp | 4 +- src/od-pandora/pandora_mem.cpp | 11 +- src/od-pandora/pandora_rp9.cpp | 3 + src/od-rasp/rasp_gfx.cpp | 4 +- 32 files changed, 25926 insertions(+), 44451 deletions(-) create mode 100644 src/jit/compemu_midfunc_arm2.cpp create mode 100644 src/jit/compemu_midfunc_arm2.h delete mode 100644 src/jit/gencomp.cpp diff --git a/Makefile b/Makefile index d1226d01..0facae16 100644 --- a/Makefile +++ b/Makefile @@ -226,8 +226,8 @@ OBJS += src/cpuemu_0.o OBJS += src/cpuemu_4.o OBJS += src/cpuemu_11.o OBJS += src/jit/compemu.o -OBJS += src/jit/compemu_fpp.o OBJS += src/jit/compstbl.o +OBJS += src/jit/compemu_fpp.o OBJS += src/jit/compemu_support.o src/osdep/neon_helper.o: src/osdep/neon_helper.s diff --git a/src/cfgfile.cpp b/src/cfgfile.cpp index a0f64381..73e8207a 100644 --- a/src/cfgfile.cpp +++ b/src/cfgfile.cpp @@ -1965,7 +1965,6 @@ int bip_a4000 (struct uae_prefs *p, int rom) roms[2] = 11; roms[3] = -1; - p->immediate_blits = 1; p->bogomem_size = 0; p->chipmem_size = 0x200000; p->cpu_model = 68030; diff --git a/src/cpuemu_0.cpp b/src/cpuemu_0.cpp index f28a2271..bc9e8cbc 100644 --- a/src/cpuemu_0.cpp +++ b/src/cpuemu_0.cpp @@ -1667,7 +1667,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_02d0_0)(uae_u32 opcode, struct regstruct ®s) if ((extra & 0x800) && GET_CFLG ()) { Exception (6, regs); return 8 * CYCLE_UNIT / 2; } -}}}} m68k_incpc (4); +} +}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } @@ -1686,7 +1687,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_02e8_0)(uae_u32 opcode, struct regstruct ®s) if ((extra & 0x800) && GET_CFLG ()) { Exception (6, regs); return 12 * CYCLE_UNIT / 2; } -}}}} m68k_incpc (6); +} +}}} m68k_incpc (6); return 33 * CYCLE_UNIT / 2; } @@ -1706,7 +1708,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_02f0_0)(uae_u32 opcode, struct regstruct ®s) if ((extra & 0x800) && GET_CFLG ()) { Exception (6, regs); return 8 * CYCLE_UNIT / 2; } -}}}}}return 29 * CYCLE_UNIT / 2; +} +}}}}return 29 * CYCLE_UNIT / 2; } /* CHK2.W #.W,(xxx).W */ @@ -1723,7 +1726,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_02f8_0)(uae_u32 opcode, struct regstruct ®s) if ((extra & 0x800) && GET_CFLG ()) { Exception (6, regs); return 12 * CYCLE_UNIT / 2; } -}}}} m68k_incpc (6); +} +}}} m68k_incpc (6); return 25 * CYCLE_UNIT / 2; } @@ -1741,7 +1745,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_02f9_0)(uae_u32 opcode, struct regstruct ®s) if ((extra & 0x800) && GET_CFLG ()) { Exception (6, regs); return 16 * CYCLE_UNIT / 2; } -}}}} m68k_incpc (8); +} +}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } @@ -1761,7 +1766,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_02fa_0)(uae_u32 opcode, struct regstruct ®s) if ((extra & 0x800) && GET_CFLG ()) { Exception (6, regs); return 12 * CYCLE_UNIT / 2; } -}}}} m68k_incpc (6); +} +}}} m68k_incpc (6); return 33 * CYCLE_UNIT / 2; } @@ -1783,7 +1789,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_02fb_0)(uae_u32 opcode, struct regstruct ®s) if ((extra & 0x800) && GET_CFLG ()) { Exception (6, regs); return 8 * CYCLE_UNIT / 2; } -}}}}}return 29 * CYCLE_UNIT / 2; +} +}}}}return 29 * CYCLE_UNIT / 2; } /* SUB.B #.B,Dn */ @@ -15159,15 +15166,15 @@ uae_u32 REGPARAM2 CPUFUNC(op_4c3c_0)(uae_u32 opcode, struct regstruct ®s) /* DIVL.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4c40_0)(uae_u32 opcode, struct regstruct ®s) { - uae_u32 cyc = 0; uae_u32 dstreg = opcode & 7; + uae_u32 cyc = 0; {{ uae_s16 extra = get_iword (2); if (extra & 0x800) cyc = 12 * CYCLE_UNIT / 2; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst == 0) { Exception (5, regs); - return 4 * CYCLE_UNIT / 2;; + return 4 * CYCLE_UNIT / 2; } m68k_divl(opcode, dst, extra); }}}return 82 * CYCLE_UNIT / 2 + cyc; @@ -15176,8 +15183,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_4c40_0)(uae_u32 opcode, struct regstruct ®s) /* DIVL.L #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4c50_0)(uae_u32 opcode, struct regstruct ®s) { - uae_u32 cyc = 0; uae_u32 dstreg = opcode & 7; + uae_u32 cyc = 0; {{ uae_s16 extra = get_iword (2); if (extra & 0x800) cyc = 12 * CYCLE_UNIT / 2; { uaecptr dsta; @@ -15195,8 +15202,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_4c50_0)(uae_u32 opcode, struct regstruct ®s) /* DIVL.L #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4c58_0)(uae_u32 opcode, struct regstruct ®s) { - uae_u32 cyc = 0; uae_u32 dstreg = opcode & 7; + uae_u32 cyc = 0; {{ uae_s16 extra = get_iword (2); if (extra & 0x800) cyc = 12 * CYCLE_UNIT / 2; { uaecptr dsta; @@ -15215,8 +15222,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_4c58_0)(uae_u32 opcode, struct regstruct ®s) /* DIVL.L #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4c60_0)(uae_u32 opcode, struct regstruct ®s) { - uae_u32 cyc = 0; uae_u32 dstreg = opcode & 7; + uae_u32 cyc = 0; {{ uae_s16 extra = get_iword (2); if (extra & 0x800) cyc = 12 * CYCLE_UNIT / 2; { uaecptr dsta; @@ -15235,8 +15242,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_4c60_0)(uae_u32 opcode, struct regstruct ®s) /* DIVL.L #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4c68_0)(uae_u32 opcode, struct regstruct ®s) { - uae_u32 cyc = 0; uae_u32 dstreg = opcode & 7; + uae_u32 cyc = 0; {{ uae_s16 extra = get_iword (2); if (extra & 0x800) cyc = 12 * CYCLE_UNIT / 2; { uaecptr dsta; @@ -15254,8 +15261,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_4c68_0)(uae_u32 opcode, struct regstruct ®s) /* DIVL.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4c70_0)(uae_u32 opcode, struct regstruct ®s) { - uae_u32 cyc = 0; uae_u32 dstreg = opcode & 7; + uae_u32 cyc = 0; {{ uae_s16 extra = get_iword (2); if (extra & 0x800) cyc = 12 * CYCLE_UNIT / 2; { uaecptr dsta; @@ -15309,8 +15316,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_4c79_0)(uae_u32 opcode, struct regstruct ®s) /* DIVL.L #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4c7a_0)(uae_u32 opcode, struct regstruct ®s) { - uae_u32 cyc = 0; uae_u32 dstreg = 2; + uae_u32 cyc = 0; {{ uae_s16 extra = get_iword (2); if (extra & 0x800) cyc = 12 * CYCLE_UNIT / 2; { uaecptr dsta; @@ -15329,8 +15336,8 @@ uae_u32 REGPARAM2 CPUFUNC(op_4c7a_0)(uae_u32 opcode, struct regstruct ®s) /* DIVL.L #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4c7b_0)(uae_u32 opcode, struct regstruct ®s) { - uae_u32 cyc = 0; uae_u32 dstreg = 3; + uae_u32 cyc = 0; {{ uae_s16 extra = get_iword (2); if (extra & 0x800) cyc = 12 * CYCLE_UNIT / 2; { uaecptr tmppc; diff --git a/src/custom.cpp b/src/custom.cpp index 22e1f1f6..fc278b67 100644 --- a/src/custom.cpp +++ b/src/custom.cpp @@ -47,8 +47,10 @@ static int frh_count = 0; #define LAST_SPEEDUP_LINE 30 #define SPEEDUP_CYCLES_JIT 3000 #define SPEEDUP_CYCLES_NONJIT 600 +#define SPEEDUP_CYCLES_HAM 1000 #define SPEEDUP_TIMELIMIT_JIT -1000 #define SPEEDUP_TIMELIMIT_NONJIT -2000 +#define SPEEDUP_TIMELIMIT_HAM -6500 int pissoff_value = SPEEDUP_CYCLES_JIT * CYCLE_UNIT; int speedup_timelimit = SPEEDUP_TIMELIMIT_JIT; @@ -4110,17 +4112,27 @@ static void vsync_handler_post (void) if (currprefs.cachesize) { vsyncmintime = last_synctime; frh_count = 0; - pissoff_value = SPEEDUP_CYCLES_JIT * CYCLE_UNIT; - speedup_timelimit = SPEEDUP_TIMELIMIT_JIT; + if(ham_drawn) { + pissoff_value = SPEEDUP_CYCLES_HAM * CYCLE_UNIT; + speedup_timelimit = SPEEDUP_TIMELIMIT_HAM; + } else { + pissoff_value = SPEEDUP_CYCLES_JIT * CYCLE_UNIT; + speedup_timelimit = SPEEDUP_TIMELIMIT_JIT; + } } else #endif { - vsyncmintime = last_synctime + vsynctimebase * (maxvpos - LAST_SPEEDUP_LINE) / maxvpos; + vsyncmintime = last_synctime + vsynctimebase * (maxvpos_nom - LAST_SPEEDUP_LINE) / maxvpos_nom; pissoff_value = SPEEDUP_CYCLES_NONJIT * CYCLE_UNIT; - speedup_timelimit = SPEEDUP_TIMELIMIT_NONJIT; + if(ham_drawn) { + speedup_timelimit = SPEEDUP_TIMELIMIT_HAM; + } else { + speedup_timelimit = SPEEDUP_TIMELIMIT_NONJIT; + } } - + ham_drawn = false; + if ((beamcon0 & (0x20 | 0x80)) != (new_beamcon0 & (0x20 | 0x80)) || abs (vpos_count - vpos_count_diff) > 1 || lof_changed) { init_hz (); } @@ -4327,13 +4339,13 @@ static void hsync_handler_post (bool onvsync) #ifdef JIT if (currprefs.cachesize) { frh_count++; - if (trigger_frh(frh_count) && vpos < maxvpos - LAST_SPEEDUP_LINE) { + if (trigger_frh(frh_count) && vpos < maxvpos_nom - LAST_SPEEDUP_LINE) { frh_handler(); } - is_syncline = trigger_frh(frh_count+1) && vpos < maxvpos - LAST_SPEEDUP_LINE + 1 && ! rpt_did_reset; + is_syncline = trigger_frh(frh_count+1) && vpos < maxvpos_nom - LAST_SPEEDUP_LINE + 1 && ! rpt_did_reset; } else { #endif - is_syncline = vpos + 1 == maxvpos + lof_store - LAST_SPEEDUP_LINE; + is_syncline = vpos + 1 == maxvpos_nom + lof_store - LAST_SPEEDUP_LINE; #ifdef JIT } #endif diff --git a/src/drawing.cpp b/src/drawing.cpp index a6846929..267276f1 100644 --- a/src/drawing.cpp +++ b/src/drawing.cpp @@ -57,6 +57,7 @@ static void lores_reset (void) } bool aga_mode; /* mirror of chipset_mask & CSMASK_AGA */ +bool ham_drawn = false; #ifdef PANDORA #define OFFSET_Y_ADJUST 15 @@ -529,6 +530,7 @@ static void init_ham_decoding (void) static void decode_ham (int pix, int stoppos) { int todraw_amiga = res_shift_from_window (stoppos - pix); + ham_drawn = true; if (!bplham) { while (todraw_amiga-- > 0) { @@ -1848,7 +1850,11 @@ static void draw_status_line (int line) } buf = xlinebuffer; - x+=100 - (TD_WIDTH*(currprefs.nr_floppies-1)) - TD_WIDTH; + x += 100 - (TD_WIDTH * (currprefs.nr_floppies - 1)) - TD_WIDTH; + if(nr_units() < 1) + x += TD_WIDTH; + if(currprefs.pandora_hide_idle_led) + x += TD_WIDTH; #ifdef PICASSO96 if(picasso_on) memset (buf + (x - 4) * 2, 0, (picasso_vidinfo.width - x + 4) * 2); @@ -1856,8 +1862,10 @@ static void draw_status_line (int line) #endif memset (buf + (x - 4) * gfxvidinfo.pixbytes, 0, (gfxvidinfo.outwidth - x + 4) * gfxvidinfo.pixbytes); - for (led = -2; led < (currprefs.nr_floppies+1); led++) { + for (led = (currprefs.pandora_hide_idle_led == 0) ? -2 : -1; led < (currprefs.nr_floppies+1); led++) { int track; + if(led == 0 && nr_units() < 1) + continue; // skip led for HD if not in use if (led > 0) { /* Floppy */ track = gui_data.drive_track[led-1]; diff --git a/src/gencpu.cpp b/src/gencpu.cpp index f41ed5ce..b2d3790f 100644 --- a/src/gencpu.cpp +++ b/src/gencpu.cpp @@ -2330,8 +2330,12 @@ static void genmovemle_ce (uae_u16 opcode) if (table68k[opcode].size == sz_long) { if (table68k[opcode].dmode == Apdi) { printf ("\tuae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff;\n"); + if(cpu_level >= 2) + printf ("\tint type = get_cpu_model() >= 68020;\n"); printf ("\twhile (amask) {\n"); printf ("\t\tsrca -= %d;\n", size); + if(cpu_level >= 2) + printf ("\t\tif (type) m68k_areg (regs, dstreg) = srca;\n"); //printf ("\t\t%s (srca, m68k_areg (regs, movem_index2[amask]) >> 16);\n", dstw); //printf ("\t\t%s (srca + 2, m68k_areg (regs, movem_index2[amask]));\n", dstw); printf ("\t\t%s (srca, m68k_areg (regs, movem_index2[amask]));\n", dstl); @@ -2369,8 +2373,12 @@ static void genmovemle_ce (uae_u16 opcode) } else { if (table68k[opcode].dmode == Apdi) { printf ("\tuae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff;\n"); + if(cpu_level >= 2) + printf ("\tint type = get_cpu_model() >= 68020;\n"); printf ("\twhile (amask) {\n"); printf ("\t\tsrca -= %d;\n", size); + if(cpu_level >= 2) + printf ("\t\tif (type) m68k_areg (regs, dstreg) = srca;\n"); printf ("\t\t%s (srca, m68k_areg (regs, movem_index2[amask]));\n", dstw); printf ("\tamask = movem_next[amask];\n"); addcycles000_nonce("\t\t", cpu_level > 1 ? 3 : 4); @@ -3061,6 +3069,9 @@ static void gen_opcode (unsigned int opcode) resetvars (); + if(curi->mnemo == i_DIVL) + printf ("\tuae_u32 cyc = 0;\n"); + start_brace (); m68k_pc_offset = 2; @@ -5070,8 +5081,13 @@ bccl_not68020: break; case i_DIVL: genamode (curi, curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); + printf ("\tif (extra & 0x800) cyc = 12 * CYCLE_UNIT / 2;\n"); genamode (curi, curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); sync_m68k_pc (); + printf ("\tif (dst == 0) {\n"); + printf ("\t\tException (5, regs);\n"); + printf ("\t\treturn 4 * CYCLE_UNIT / 2;\n"); + printf ("\t}\n"); printf ("\tm68k_divl(opcode, dst, extra);\n"); break; case i_MULL: diff --git a/src/include/drawing.h b/src/include/drawing.h index 7b8da4c7..1664c789 100644 --- a/src/include/drawing.h +++ b/src/include/drawing.h @@ -23,6 +23,7 @@ #define lores_shift 0 extern bool aga_mode; +extern bool ham_drawn; STATIC_INLINE int coord_hw_to_window_x (int x) { diff --git a/src/include/options.h b/src/include/options.h index 397bfc64..7d33506c 100644 --- a/src/include/options.h +++ b/src/include/options.h @@ -136,6 +136,7 @@ struct uae_prefs { int pandora_horizontal_offset; int pandora_vertical_offset; int pandora_cpu_speed; + int pandora_hide_idle_led; int pandora_joyConf; int pandora_joyPort; @@ -162,6 +163,9 @@ struct uae_prefs { int key_for_menu; int key_for_input_switching; + int Port1_selection; + int Port2_selection; + /* input */ int input_joymouse_multiplier; diff --git a/src/jit/codegen_arm.cpp b/src/jit/codegen_arm.cpp index 65a9a79a..f5a88736 100644 --- a/src/jit/codegen_arm.cpp +++ b/src/jit/codegen_arm.cpp @@ -84,17 +84,14 @@ extern void __clear_cache (char*, char*); #define REG_PC_PRE R0_INDEX /* The register we use for preloading regs.pc_p */ #define REG_PC_TMP R1_INDEX /* Another register that is not the above */ -#define SHIFTCOUNT_NREG R1_INDEX /* Register that can be used for shiftcount. - -1 if any reg will do. Normally this can be set to -1 but compemu_support is tied to 1 */ #define MUL_NREG1 R0_INDEX /* %r4 will hold the low 32 bits after a 32x32 mul */ #define MUL_NREG2 R1_INDEX /* %r5 will hold the high 32 bits */ #define STACK_ALIGN 4 #define STACK_OFFSET sizeof(void *) -uae_u8 always_used[]={2,3,0xff}; -uae_u8 can_byte[]={0,1,4,5,6,7,8,9,10,11,12,0xff}; -uae_u8 can_word[]={0,1,4,5,6,7,8,9,10,11,12,0xff}; +#define R_REGSTRUCT 11 +uae_s8 always_used[]={2,3,R_REGSTRUCT,12,-1}; // r12 is scratch register in C functions calls, I don't think it's save to use it here... uae_u8 call_saved[]={0,0,0,0, 1,1,1,1, 1,1,1,1, 0,1,1,1}; @@ -109,539 +106,96 @@ static const uae_u8 need_to_preserve[]={0,0,0,0, 1,1,1,1, 1,1,1,1, 1,0,0,0}; static const uae_u32 PRESERVE_MASK = ((1<=-128 && x<=127); +static inline void UNSIGNED8_IMM_2_REG(W4 r, IMM v) { + MOV_ri8(r, (uae_u8) v); } -STATIC_INLINE int is8bit(uae_s32 x) -{ - return (x>=-255 && x<=255); +static inline void SIGNED8_IMM_2_REG(W4 r, IMM v) { + if (v & 0x80) { + MVN_ri8(r, (uae_u8) ~v); + } else { + MOV_ri8(r, (uae_u8) v); + } } -STATIC_INLINE int isword(uae_s32 x) -{ - return (x>=-32768 && x<=32767); +static inline void UNSIGNED16_IMM_2_REG(W4 r, IMM v) { + MOV_ri8(r, (uae_u8) v); + ORR_rri8RORi(r, r, (uae_u8)(v >> 8), 24); } +static inline void SIGNED16_IMM_2_REG(W4 r, IMM v) { + uae_s32 offs = data_long_offs((uae_s32)(uae_s16) v); + LDR_rRI(r, RPC_INDEX, offs); +} + +static inline void UNSIGNED8_REG_2_REG(W4 d, RR4 s) { + UXTB_rr(d, s); +} + +static inline void SIGNED8_REG_2_REG(W4 d, RR4 s) { + SXTB_rr(d, s); +} + +static inline void UNSIGNED16_REG_2_REG(W4 d, RR4 s) { + UXTH_rr(d, s); +} + +static inline void SIGNED16_REG_2_REG(W4 d, RR4 s) { + SXTH_rr(d, s); +} + +#define ZERO_EXTEND_8_REG_2_REG(d,s) UNSIGNED8_REG_2_REG(d,s) +#define ZERO_EXTEND_16_REG_2_REG(d,s) UNSIGNED16_REG_2_REG(d,s) +#define SIGN_EXTEND_8_REG_2_REG(d,s) SIGNED8_REG_2_REG(d,s) +#define SIGN_EXTEND_16_REG_2_REG(d,s) SIGNED16_REG_2_REG(d,s) + + #define jit_unimplemented(fmt, ...) do{ panicbug("**** Unimplemented ****\n"); panicbug(fmt, ## __VA_ARGS__); abort(); }while (0) -static void jit_fail(const char *msg, const char *file, int line, const char *function) -{ - panicbug("JIT failure in function %s from file %s at line %d: %s\n", - function, file, line, msg); - abort(); -} - -LOWFUNC(NONE,WRITE,1,raw_push_l_r,(RR4 r)) -{ - PUSH(r); -} -LENDFUNC(NONE,WRITE,1,raw_push_l_r,(RR4 r)) - -LOWFUNC(NONE,READ,1,raw_pop_l_r,(RR4 r)) -{ - POP(r); -} -LENDFUNC(NONE,READ,1,raw_pop_l_r,(RR4 r)) - -LOWFUNC(RMW,NONE,2,raw_adc_b,(RW1 d, RR1 s)) -{ - MVN_ri(REG_WORK1, 0); // mvn r2,#0 - LSL_rri(REG_WORK2, d, 24); // lsl r3, %[d], #24 - ORR_rrrLSRi(REG_WORK2, REG_WORK2, REG_WORK1, 8); // orr r3, r3, r2, lsr #8 - ADCS_rrrLSLi(REG_WORK2, REG_WORK2, s, 24); // adcs r3, r3, %[s], lsl #24 - - BIC_rri(d, d, 0xFF); // bic %[d],%[d],#0xFF - ORR_rrrLSRi(d, d, REG_WORK2, 24); // orr %[d],%[d], R3 LSR #24 -} -LENDFUNC(RMW,NONE,2,raw_adc_b,(RW1 d, RR1 s)) - -LOWFUNC(RMW,NONE,2,raw_adc_w,(RW2 d, RR2 s)) -{ - MVN_ri(REG_WORK1, 0); // mvn r2,#0 - LSL_rri(REG_WORK2, d, 16); // lsl r3, %[d], #16 - ORR_rrrLSRi(REG_WORK2, REG_WORK2, REG_WORK1, 16); // orr r3, r3, r2, lsr #16 - ADCS_rrrLSLi(REG_WORK2, REG_WORK2, s, 16); // adds r3, r3, %[s], lsl #16 - -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(d, d, REG_WORK2, 16); // pkhtb %d, %d, r3, asr #16 -#else - BIC_rri(d, d, 0xff); // bic %[d],%[d],#0xff - BIC_rri(d, d, 0xff00); // bic %[d],%[d],#0xff00 - ORR_rrrLSRi(d, d, REG_WORK2, 16); // orr %[d], %[d], r3, lsr #16 -#endif -} -LENDFUNC(RMW,NONE,2,raw_adc_w,(RW2 d, RR2 s)) - -LOWFUNC(RMW,NONE,2,raw_adc_l,(RW4 d, RR4 s)) -{ - ADCS_rrr(d, d, s); // adcs %[d],%[d],%[s] -} -LENDFUNC(RMW,NONE,2,raw_adc_l,(RW4 d, RR4 s)) - -LOWFUNC(WRITE,NONE,2,raw_add_b,(RW1 d, RR1 s)) -{ - LSL_rri(REG_WORK2, d, 24); // lsl r3, %[d], #24 - ADDS_rrrLSLi(REG_WORK2, REG_WORK2, s, 24); // adds r3, r3, %[s], lsl #24 - - BIC_rri(d, d, 0xFF); // bic %[d],%[d],#0xFF - ORR_rrrLSRi(d, d, REG_WORK2, 24); // orr %[d],%[d], r3 LSR #24 -} -LENDFUNC(WRITE,NONE,2,raw_add_b,(RW1 d, RR1 s)) - -LOWFUNC(WRITE,NONE,2,raw_add_w,(RW2 d, RR2 s)) -{ - LSL_rri(REG_WORK1, s, 16); // lsl r2, %[s], #16 - ADDS_rrrLSLi(REG_WORK2, REG_WORK1, d, 16); // adds r3, r2, %[d], lsl #16 - -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(d, d, REG_WORK2, 16); // pkhtb %r, %r, r3, asr #16 -#else - BIC_rri(d, d, 0xff); // bic %[d],%[d],#0xff - BIC_rri(d, d, 0xff00); // bic %[d],%[d],#0xff00 - ORR_rrrLSRi(d, d, REG_WORK2, 16); // orr r7, r7, r3, LSR #16 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_add_w,(RW2 d, RR2 s)) - LOWFUNC(WRITE,NONE,2,raw_add_l,(RW4 d, RR4 s)) { - ADDS_rrr(d, d, s); // adds %[d], %[d], %[s] + ADD_rrr(d, d, s); } LENDFUNC(WRITE,NONE,2,raw_add_l,(RW4 d, RR4 s)) -LOWFUNC(WRITE,NONE,2,raw_add_w_ri,(RW2 d, IMM i)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_word_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldrh r2, [pc, #offs] -#else - LDRH_rRI(REG_WORK1, RPC_INDEX, 24); // ldrh r2, [pc, #24] ; -#endif - - LSL_rri(REG_WORK2, d, 16); // lsl r2, %[d], #16 - ADDS_rrrLSLi(REG_WORK2, REG_WORK2, REG_WORK1, 16); // adds r3, r3, r2, LSL #16 - -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(d, d, REG_WORK2, 16); // pkhtb %[d], %[d], r3, asr #16 -#else - BIC_rri(d, d, 0xff); // bic %[d],%[d],#0xff - BIC_rri(d, d, 0xff00); // bic %[d],%[d],#0xff00 - ORR_rrrLSRi(d, d, REG_WORK2, 16); // orr %[d],%[d], r3, LSR #16 -#endif - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_word(i); - emit_word(0); - //: -#endif -} -LENDFUNC(WRITE,NONE,2,raw_add_w_ri,(RW2 d, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_add_b_ri,(RW1 d, IMM i)) -{ - LSL_rri(REG_WORK2, d, 24); // lsl r3, %[d], #24 - - ADDS_rri(REG_WORK2, REG_WORK2, i << 24); // adds r3, r3, #0x12000000 - - BIC_rri(d, d, 0xFF); // bic %[d],%[d], #0xFF - ORR_rrrLSRi(d, d, REG_WORK2, 24); // orr %[d],%[d], r3, lsr #24 -} -LENDFUNC(WRITE,NONE,2,raw_add_b_ri,(RW1 d, IMM i)) - LOWFUNC(WRITE,NONE,2,raw_add_l_ri,(RW4 d, IMM i)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] - ADDS_rrr(d, d, REG_WORK1); // adds %[d], %[d], r2 -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - ADDS_rrr(d, d, REG_WORK1); // adds %[d], %[d], r2 - - B_i(0); // b - //: - emit_long(i); - //: -#endif + if(i >= 0 && i < 256) { + ADD_rri(d, d, i); + } else { + uae_s32 offs = data_long_offs(i); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + ADD_rrr(d, d, REG_WORK1); + } } LENDFUNC(WRITE,NONE,2,raw_add_l_ri,(RW4 d, IMM i)) -LOWFUNC(WRITE,NONE,2,raw_and_b,(RW1 d, RR1 s)) -{ - MVN_rrLSLi(REG_WORK1, s, 24); // mvn r2, %[s], lsl #24 - MVN_rrLSRi(REG_WORK1, REG_WORK1, 24); // mvn r2, r2, lsr #24 - AND_rrr(d, d, REG_WORK1); // and %[d], %[d], r2 - - LSLS_rri(REG_WORK1, d, 24); // lsls r2, %[d], #24 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_and_b,(RW1 d, RR1 s)) - -LOWFUNC(WRITE,NONE,2,raw_and_w,(RW2 d, RR2 s)) -{ - MVN_rrLSLi(REG_WORK1, s, 16); // mvn r2, %[s], lsl #16 - MVN_rrLSRi(REG_WORK1, REG_WORK1, 16); // mvn r2, r2, lsr #16 - AND_rrr(d, d, REG_WORK1); // and %[d], %[d], r2 - - LSLS_rri(REG_WORK1, d, 16); // lsls r2, %[d], #16 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_and_w,(RW2 d, RR2 s)) - -LOWFUNC(WRITE,NONE,2,raw_and_l,(RW4 d, RR4 s)) -{ - ANDS_rrr(d, d, s); // ands %[d], %[d], %[s] - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_and_l,(RW4 d, RR4 s)) - -LOWFUNC(WRITE,NONE,2,raw_and_l_ri,(RW4 d, IMM i)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 16); // ldr r2, [pc, #16] ; -#endif - - ANDS_rrr(d, d, REG_WORK1); // ands %[d], %[d], r2 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(i); - //: -#endif -} -LENDFUNC(WRITE,NONE,2,raw_and_l_ri,(RW4 d, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_bsf_l_rr,(W4 d, RR4 s)) -{ - MOV_rr(REG_WORK1, s); // mov r2,%[s] - RSB_rri(REG_WORK2, REG_WORK1, 0); // rsb r3,r2,#0 - AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); // and r2,r2,r3 - CLZ_rr(REG_WORK2, REG_WORK1); // clz r3,r2 - MOV_ri(d, 32); // mov %[d],#32 - SUB_rrr(d, d, REG_WORK2); // sub %[d],%[d],r3 - - MRS_CPSR(REG_WORK2); // mrs r3,cpsr - TEQ_ri(d, 0); // teq %[d],#0 - CC_SUBS_rri(NATIVE_CC_NE, d,d,1); // sub %[d],%[d],#1 - CC_BIC_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_Z_FLAG); // bic r3,r3,#0x40000000 - CC_ORR_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_Z_FLAG); // orr r3,r3,#0x40000000 - MSR_CPSR_r(REG_WORK2); // msr cpsr,r3 -} -LENDFUNC(WRITE,NONE,2,raw_bsf_l_rr,(W4 d, RR4 s)) - -LOWFUNC(WRITE,NONE,1,raw_bswap_16,(RW2 r)) -{ -#if defined(ARMV6_ASSEMBLY) - REV_rr(REG_WORK1, r); // rev r2, %r - PKHTB_rrrASRi(r, r, REG_WORK1, 16); // pkhtb %r, %r, r2, asr #16 -#else - MOV_rr(REG_WORK1, r); // mov r2, r6 - BIC_rri(REG_WORK1, REG_WORK1, 0xff0000); // bic r2, r2, #0xff0000 - BIC_rri(REG_WORK1, REG_WORK1, 0xff000000); // bic r2, r2, #0xff000000 - - EOR_rrr(r, r, REG_WORK1); // eor r6, r6, r2 - - ORR_rrrLSRi(r, r, REG_WORK1, 8); // orr r6, r6, r2, lsr #8 - BIC_rri(REG_WORK1, REG_WORK1, 0xff00); // bic r2, r2, #0xff00 - ORR_rrrLSLi(r,r,REG_WORK1, 8); // orr r6, r6, r2, lsl #8 -#endif -} -LENDFUNC(WRITE,NONE,1,raw_bswap_16,(RW2 r)) - -LOWFUNC(NONE,NONE,1,raw_bswap_32,(RW4 r)) -{ -#if defined(ARMV6_ASSEMBLY) - REV_rr(r,r); // rev %[r],%[r] -#else - EOR_rrrRORi(REG_WORK1, r, r, 16); // eor r2, r6, r6, ror #16 - BIC_rri(REG_WORK1, REG_WORK1, 0xff0000); // bic r2, r2, #0xff0000 - ROR_rri(r, r, 8); // ror r6, r6, #8 - EOR_rrrLSRi(r, r, REG_WORK1, 8); // eor r6, r6, r2, lsr #8 -#endif -} -LENDFUNC(NONE,NONE,1,raw_bswap_32,(RW4 r)) - -LOWFUNC(WRITE,NONE,2,raw_bt_l_ri,(RR4 r, IMM i)) -{ - int imm = (1 << (i & 0x1f)); - - MRS_CPSR(REG_WORK2); // mrs r3, CPSR - TST_ri(r, imm); // tst r6, #0x1000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3, r3, #0x20000000 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3, r3, #0x20000000 - MSR_CPSR_r(REG_WORK2); // msr CPSR_fc, r3 -} -LENDFUNC(WRITE,NONE,2,raw_bt_l_ri,(RR4 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_bt_l_rr,(RR4 r, RR4 b)) -{ - AND_rri(REG_WORK2, b, 0x1f); // and r3, r7, #0x1f - LSR_rrr(REG_WORK1, r, REG_WORK2); // lsr r2, r6, r3 - - MRS_CPSR(REG_WORK2); // mrs r3, CPSR - TST_ri(REG_WORK1, 1); // tst r2, #1 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3, r3, #0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3, r3, #0x20000000 - MSR_CPSR_r(REG_WORK2); // msr CPSR_fc, r3 -} -LENDFUNC(WRITE,NONE,2,raw_bt_l_rr,(RR4 r, RR4 b)) - -LOWFUNC(WRITE,NONE,2,raw_btc_l_rr,(RW4 r, RR4 b)) -{ - MOV_ri(REG_WORK1, 1); // mov r2, #1 - AND_rri(REG_WORK2, b, 0x1f); // and r3, r7, #0x1f - LSL_rrr(REG_WORK1, REG_WORK1, REG_WORK2); // lsl r2, r2, r3 - - MRS_CPSR(REG_WORK2); // mrs r3, CPSR - TST_rr(r, REG_WORK1); // tst r6, r2 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3, r3, #0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3, r3, #0x20000000 - EOR_rrr(r, r, REG_WORK1); // eor r6, r6, r2 - MSR_CPSR_r(REG_WORK2); // msr CPSR_fc, r3 -} -LENDFUNC(WRITE,NONE,2,raw_btc_l_rr,(RW4 r, RR4 b)) - -LOWFUNC(WRITE,NONE,2,raw_btr_l_rr,(RW4 r, RR4 b)) -{ - MOV_ri(REG_WORK1, 1); // mov r2, #1 - AND_rri(REG_WORK2, b, 0x1f); // and r3, r7, #0x1f - LSL_rrr(REG_WORK1, REG_WORK1, REG_WORK2); // lsl r2, r2, r3 - - MRS_CPSR(REG_WORK2); // mrs r3, CPSR - TST_rr(r, REG_WORK1); // tst r6, r2 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3, r3, #0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3, r3, #0x20000000 - BIC_rrr(r, r, REG_WORK1); // bic r6, r6, r2 - MSR_CPSR_r(REG_WORK2); // msr CPSR_fc, r3 -} -LENDFUNC(WRITE,NONE,2,raw_btr_l_rr,(RW4 r, RR4 b)) - -LOWFUNC(WRITE,NONE,2,raw_bts_l_rr,(RW4 r, RR4 b)) -{ - MOV_ri(REG_WORK1, 1); // mov r2, #1 - AND_rri(REG_WORK2, b, 0x1f); // and r3, r7, #0x1f - LSL_rrr(REG_WORK1, REG_WORK1, REG_WORK2); // lsl r2, r2, r3 - - MRS_CPSR(REG_WORK2); // mrs r3, CPSR - TST_rr(r, REG_WORK1); // tst r6, r2 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3, r3, #0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3, r3, #0x20000000 - ORR_rrr(r, r, REG_WORK1); // orr r6, r6, r2 - MSR_CPSR_r(REG_WORK2); // msr CPSR_fc, r3 -} -LENDFUNC(WRITE,NONE,2,raw_bts_l_rr,(RW4 r, RR4 b)) - -LOWFUNC(READ,NONE,3,raw_cmov_l_rr,(RW4 d, RR4 s, IMM cc)) -{ - switch (cc) { - case 9: // LS - BEQ_i(0); // beq Z != 0 - BCC_i(0); // bcc C == 0 - - //: - MOV_rr(d, s); // mov r7,r6 - break; - - case 8: // HI - BEQ_i(1); // beq Z != 0 - BCS_i(0); // bcs C != 0 - MOV_rr(d, s); // mov r7,#0 - break; - - default: - CC_MOV_rr(cc, d, s); // MOVcc R7,#1 - break; - } - //: -} -LENDFUNC(READ,NONE,3,raw_cmov_l_rr,(RW4 d, RR4 s, IMM cc)) - -LOWFUNC(WRITE,NONE,2,raw_cmp_b,(RR1 d, RR1 s)) -{ - LSL_rri(REG_WORK1, d, 24); // lsl r2,r6,#24 - LSL_rri(REG_WORK2, s, 24); // lsl r3,r7,#24 - - CMP_rr(REG_WORK1, REG_WORK2); // cmp r2, r3 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_cmp_b,(RR1 d, RR1 s)) - -LOWFUNC(WRITE,NONE,2,raw_cmp_w,(RR2 d, RR2 s)) -{ - LSL_rri(REG_WORK1, d, 16); // lsl r6, r1, #16 - LSL_rri(REG_WORK2, s, 16); // lsl r7, r2, #16 - - CMP_rr(REG_WORK1, REG_WORK2); // cmp r7, r6, asr #16 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_cmp_w,(RR2 d, RR2 s)) - -LOWFUNC(WRITE,NONE,2,raw_cmp_l,(RR4 d, RR4 s)) -{ - CMP_rr(d, s); // cmp r7, r6 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_cmp_l,(RR4 d, RR4 s)) - -LOWFUNC(NONE,NONE,2,raw_imul_32_32,(RW4 d, RR4 s)) -{ - SMULL_rrrr(REG_WORK1, REG_WORK2, d, s); // smull r2,r3,r7,r6 - MOV_rr(d, REG_WORK1); // mov r7,r2 -} -LENDFUNC(NONE,NONE,2,raw_imul_32_32,(RW4 d, RR4 s)) - -LOWFUNC(NONE,NONE,2,raw_imul_64_32,(RW4 d, RW4 s)) -{ - SMULL_rrrr(REG_WORK1, REG_WORK2, d, s); // smull r2,r3,r7,r6 - MOV_rr(MUL_NREG1, REG_WORK1); // mov r7,r2 - MOV_rr(MUL_NREG2, REG_WORK2); -} -LENDFUNC(NONE,NONE,2,raw_imul_64_32,(RW4 d, RW4 s)) - LOWFUNC(NONE,NONE,3,raw_lea_l_brr,(W4 d, RR4 s, IMM offset)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); + uae_s32 offs = data_long_offs(offset); LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ADD_rrr(d, s, REG_WORK1); // add r7, r6, r2 -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - ADD_rrr(d, s, REG_WORK1); // add r7, r6, r2 - - B_i(0); // b - //: - emit_long(offset); - //: -#endif } LENDFUNC(NONE,NONE,3,raw_lea_l_brr,(W4 d, RR4 s, IMM offset)) -LOWFUNC(NONE,NONE,3,raw_lea_l_brr24,(W4 d, RR4 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] - BIC_rri(REG_WORK2, s, 0xff000000); // bic r3, r6, 0xff000000 - ADD_rrr(d, REG_WORK2, REG_WORK1); // add r7, r3, r2 -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - BIC_rri(REG_WORK2, s, 0xff000000); // bic r3, r6, 0xff000000 - ADD_rrr(d, REG_WORK2, REG_WORK1); // add r7, r3, r2 - - B_i(0); // b - //: - emit_long(offset); - //: -#endif -} -LENDFUNC(NONE,NONE,3,raw_lea_l_brr24,(W4 d, RR4 s, IMM offset)) - LOWFUNC(NONE,NONE,5,raw_lea_l_brr_indexed,(W4 d, RR4 s, RR4 index, IMM factor, IMM offset)) { int shft; switch(factor) { - case 1: shft=0; break; - case 2: shft=1; break; - case 4: shft=2; break; - case 8: shft=3; break; - default: abort(); + case 1: shft=0; break; + case 2: shft=1; break; + case 4: shft=2; break; + case 8: shft=3; break; + default: abort(); } -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // LDR R2,[PC, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 8); // LDR R2,[PC, #8] -#endif - - ADD_rrr(REG_WORK1, s, REG_WORK1); // ADD R7,R6,R2 - ADD_rrrLSLi(d, REG_WORK1, index, shft); // ADD R7,R7,R5,LSL #2 - -#if !defined(USE_DATA_BUFFER) - B_i(0); // B jp - emit_long(offset); - //; -#endif + SIGNED8_IMM_2_REG(REG_WORK1, offset); + + ADD_rrr(REG_WORK1, s, REG_WORK1); + ADD_rrrLSLi(d, REG_WORK1, index, shft); } LENDFUNC(NONE,NONE,5,raw_lea_l_brr_indexed,(W4 d, RR4 s, RR4 index, IMM factor, IMM offset)) @@ -649,150 +203,17 @@ LOWFUNC(NONE,NONE,4,raw_lea_l_rr_indexed,(W4 d, RR4 s, RR4 index, IMM factor)) { int shft; switch(factor) { - case 1: shft=0; break; - case 2: shft=1; break; - case 4: shft=2; break; - case 8: shft=3; break; - default: abort(); + case 1: shft=0; break; + case 2: shft=1; break; + case 4: shft=2; break; + case 8: shft=3; break; + default: abort(); } - ADD_rrrLSLi(d, s, index, shft); // ADD R7,R6,R5,LSL #2 + ADD_rrrLSLi(d, s, index, shft); } LENDFUNC(NONE,NONE,4,raw_lea_l_rr_indexed,(W4 d, RR4 s, RR4 index, IMM factor)) -LOWFUNC(NONE,READ,3,raw_mov_b_brR,(W1 d, RR4 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 12); // ldr r2, [pc, #12] ; -#endif - - LDRB_rRR(REG_WORK1, REG_WORK1, s); // ldrb r2, [r2, r6] - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(d, REG_WORK1, 0, 7); // bfi r7, r2, 0, 7 -#else - BIC_rri(d, d, 0xff); // bic r7, r7, #0xff - ORR_rrr(d, d, REG_WORK1); // orr r7, r7, r2 -#endif - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(offset); - //: -#endif -} -LENDFUNC(NONE,READ,3,raw_mov_b_brR,(W1 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,READ,3,raw_mov_b_brR24,(W1 d, RR4 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 12); // ldr r2, [pc, #12] ; -#endif - - BIC_rri(REG_WORK2, s, 0xff000000); // bic r3, r6, 0xff000000 - LDRB_rRR(REG_WORK1, REG_WORK1, REG_WORK2); // ldrb r2, [r2, r3] - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(d, REG_WORK1, 0, 7); // bfi r7, r2, 0, 7 -#else - BIC_rri(d, d, 0xff); // bic r7, r7, #0xff - ORR_rrr(d, d, REG_WORK1); // orr r7, r7, r2 -#endif - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(offset); - //: -#endif -} -LENDFUNC(NONE,READ,3,raw_mov_b_brR24,(W1 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,WRITE,3,raw_mov_b_bRr,(RR4 d, RR1 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2,[pc, #offs] - STRB_rRR(s, d, REG_WORK1); // strb r6,[r7, r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2,[pc,#4] - STRB_rRR(s, d, REG_WORK1); // strb r6,[r7, r2] - - B_i(0); // b - //: - emit_long(offset); - //: -#endif -} -LENDFUNC(NONE,WRITE,3,raw_mov_b_bRr,(RR4 d, RR1 s, IMM offset)) - -LOWFUNC(NONE,WRITE,3,raw_mov_b_bRr24,(RR4 d, RR1 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2,[pc, #offs] - - BIC_rri(REG_WORK2, d, 0xff000000); // bic r3, r7, 0xff000000 - STRB_rRR(s, REG_WORK2, REG_WORK1); // strb r6,[r3, r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2,[pc,#4] - BIC_rri(REG_WORK2, d, 0xff000000); // bic r3, r7, 0xff000000 - STRB_rRR(s, REG_WORK2, REG_WORK1); // strb r6,[r3, r2] - - B_i(0); // b - //: - emit_long(offset); - //: -#endif -} -LENDFUNC(NONE,WRITE,3,raw_mov_b_bRr24,(RR4 d, RR1 s, IMM offset)) - -LOWFUNC(NONE,WRITE,2,raw_mov_b_mi,(MEMW d, IMM s)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 8); // ldr r2, [pc, #8] ; -#endif - - MOV_ri(REG_WORK2, s & 0xFF); // mov r3, #0x34 - STRB_rR(REG_WORK2, REG_WORK1); // strb r3, [r2] - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //d: - emit_long(d); - //: -#endif -} -LENDFUNC(NONE,WRITE,2,raw_mov_b_mi,(MEMW d, IMM s)) - -LOWFUNC(NONE,WRITE,2,raw_mov_b_mr,(IMM d, RR1 s)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] - STRB_rR(s, REG_WORK1); // strb r6, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - STRB_rR(s, REG_WORK1); // strb r6, [r2] - - B_i(0); // b - //: - emit_long(d); - //: -#endif -} -LENDFUNC(NONE,WRITE,2,raw_mov_b_mr,(IMM d, RR1 s)) - LOWFUNC(NONE,NONE,2,raw_mov_b_ri,(W1 d, IMM s)) { BIC_rri(d, d, 0xff); // bic %[d], %[d], #0xff @@ -800,1457 +221,132 @@ LOWFUNC(NONE,NONE,2,raw_mov_b_ri,(W1 d, IMM s)) } LENDFUNC(NONE,NONE,2,raw_mov_b_ri,(W1 d, IMM s)) -LOWFUNC(NONE,READ,2,raw_mov_b_rm,(W1 d, IMM s)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(s); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 12); // ldr r2, [pc, #12] ; -#endif - - LDRB_rR(REG_WORK2, REG_WORK1); // ldrb r3, [r2] - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(d, REG_WORK2, 0, 7); // bfi r7, r3, 0, 7 -#else - BIC_rri(d, d, 0xff); // bic r7, r7, #0xff - ORR_rrr(d, REG_WORK2, d); // orr r7, r3, r7 -#endif - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(s); - //: -#endif -} -LENDFUNC(NONE,READ,2,raw_mov_b_rm,(W1 d, IMM s)) - LOWFUNC(NONE,NONE,2,raw_mov_b_rr,(W1 d, RR1 s)) { -#if defined(ARMV6_ASSEMBLY) BFI_rrii(d, s, 0, 7); // bfi %[d], %[s], 0, 7 -#else - AND_rri(REG_WORK1, s, 0xff); // and r2,r2, #0xff - BIC_rri(d, d, 0x0ff); // bic %[d], %[d], #0xff - ORR_rrr(d, d, REG_WORK1); // orr %[d], %[d], r2 -#endif } LENDFUNC(NONE,NONE,2,raw_mov_b_rr,(W1 d, RR1 s)) -LOWFUNC(NONE,READ,3,raw_mov_l_brR,(W4 d, RR4 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] - LDR_rRR(d, REG_WORK1, s); // ldr r7, [r2, r6] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - LDR_rRR(d, REG_WORK1, s); // ldr r7, [r2, r6] - - B_i(0); // b - emit_long(offset); //: - //: -#endif -} -LENDFUNC(NONE,READ,3,raw_mov_l_brR,(W4 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,READ,3,raw_mov_l_brR24,(W4 d, RR4 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] - BIC_rri(REG_WORK2, s, 0xff000000); // bic r3, r6, 0xff000000 - LDR_rRR(d, REG_WORK1, REG_WORK2); // ldr r7, [r2, r3] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - BIC_rri(REG_WORK2, s, 0xff000000); // bic r3, r6, 0xff000000 - LDR_rRR(d, REG_WORK1, REG_WORK2); // ldr r7, [r2, r3] - - B_i(0); // b - emit_long(offset); //: - //: -#endif -} -LENDFUNC(NONE,READ,3,raw_mov_l_brR24,(W4 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,WRITE,3,raw_mov_l_bRr,(RR4 d, RR4 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2,[pc, #offs] - STR_rRR(s, d, REG_WORK1); // str R6,[R7, r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2,[pc,#4] ; - STR_rRR(s, d, REG_WORK1); // str R6,[R7, r2] - - B_i(0); // b - //: - emit_long(offset); - //: -#endif -} -LENDFUNC(NONE,WRITE,3,raw_mov_l_bRr,(RR4 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,WRITE,3,raw_mov_l_bRr24,(RR4 d, RR4 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2,[pc, #offs] - BIC_rri(REG_WORK2, d, 0xff000000); // bic r3, r7, 0xff000000 - STR_rRR(s, REG_WORK2, REG_WORK1); // str R6,[R3, r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2,[pc,#4] ; - BIC_rri(REG_WORK2, d, 0xff000000); // bic r3, r7, 0xff000000 - STR_rRR(s, REG_WORK2, REG_WORK1); // str R6,[R3, r2] - - B_i(0); // b - //: - emit_long(offset); - //: -#endif -} -LENDFUNC(NONE,WRITE,3,raw_mov_l_bRr24,(RR4 d, RR4 s, IMM offset)) - LOWFUNC(NONE,WRITE,2,raw_mov_l_mi,(MEMW d, IMM s)) { - // TODO: optimize imm - -#if defined(USE_DATA_BUFFER) - data_check_end(8, 12); - long offs = data_long_offs(d); - - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; d - - offs = data_long_offs(s); - LDR_rRI(REG_WORK2, RPC_INDEX, offs); // ldr r3, [pc, #offs] ; s - - STR_rR(REG_WORK2, REG_WORK1); // str r3, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 8); // ldr r2, [pc, #8] ; - LDR_rRI(REG_WORK2, RPC_INDEX, 8); // ldr r3, [pc, #8] ; - STR_rR(REG_WORK2, REG_WORK1); // str r3, [r2] - - B_i(1); // b - emit_long(d); //: - emit_long(s); //: - //: -#endif + if(d >= (uae_u32) ®s && d < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 offs = data_long_offs(s); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + uae_s32 idx = d - (uae_u32) & regs; + STR_rRI(REG_WORK2, R_REGSTRUCT, idx); + } else { + data_check_end(8, 12); + uae_s32 offs = data_long_offs(d); + + LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; d + + offs = data_long_offs(s); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); // ldr r3, [pc, #offs] ; s + + STR_rR(REG_WORK2, REG_WORK1); // str r3, [r2] + } } LENDFUNC(NONE,WRITE,2,raw_mov_l_mi,(MEMW d, IMM s)) -LOWFUNC(NONE,READ,3,raw_mov_w_brR,(W2 d, RR4 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 16); // ldr r2, [pc, #16] ; -#endif - - LDRH_rRR(REG_WORK1, REG_WORK1, s); // ldrh r2, [r2, r6] - -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(d, REG_WORK1, d); // pkhbt r7, r2, r7 -#else - BIC_rri(d, d, 0xff); // bic r7, r7, #0xff - BIC_rri(d, d, 0xff00); // bic r7, r7, #0xff00 - ORR_rrr(d, d, REG_WORK1); // orr r7, r7, r2 -#endif - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - emit_long(offset); //: - //: -#endif -} -LENDFUNC(NONE,READ,3,raw_mov_w_brR,(W2 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,READ,3,raw_mov_w_brR24,(W2 d, RR4 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 16); // ldr r2, [pc, #16] ; -#endif - - BIC_rri(REG_WORK2, s, 0xff000000); // bic r3, r6, 0xff000000 - LDRH_rRR(REG_WORK1, REG_WORK1, REG_WORK2); // ldrh r2, [r2, r3] - -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(d, REG_WORK1, d); // pkhbt r7, r2, r7 -#else - BIC_rri(d, d, 0xff); // bic r7, r7, #0xff - BIC_rri(d, d, 0xff00); // bic r7, r7, #0xff00 - ORR_rrr(d, d, REG_WORK1); // orr r7, r7, r2 -#endif - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - emit_long(offset); //: - //: -#endif -} -LENDFUNC(NONE,READ,3,raw_mov_w_brR24,(W2 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,WRITE,3,raw_mov_w_bRr,(RR4 d, RR2 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2,[pc, #offs] - STRH_rRR(s, d, REG_WORK1); // strh r6,[r7, r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2,[pc,#4] - STRH_rRR(s, d, REG_WORK1); // strh r6,[r7, r2] - - B_i(0); // b - //: - emit_long(offset); - //: -#endif -} -LENDFUNC(NONE,WRITE,3,raw_mov_w_bRr,(RR4 d, RR2 s, IMM offset)) - -LOWFUNC(NONE,WRITE,3,raw_mov_w_bRr24,(RR4 d, RR2 s, IMM offset)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2,[pc, #offs] - BIC_rri(REG_WORK2, d, 0xff000000); // bic r3, r7, 0xff000000 - STRH_rRR(s, REG_WORK2, REG_WORK1); // strh r6,[r3, r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2,[pc,#4] - BIC_rri(REG_WORK2, d, 0xff000000); // bic r3, r7, 0xff000000 - STRH_rRR(s, REG_WORK2, REG_WORK1); // strh r6,[r3, r2] - - B_i(0); // b - //: - emit_long(offset); - //: -#endif -} -LENDFUNC(NONE,WRITE,3,raw_mov_w_bRr24,(RR4 d, RR2 s, IMM offset)) - -LOWFUNC(NONE,WRITE,2,raw_mov_w_mr,(IMM d, RR2 s)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc,#offs] - STRH_rR(s, REG_WORK1); // strh r3, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - STRH_rR(s, REG_WORK1); // strh r3, [r2] - - B_i(0); // b - //: - emit_long(d); - //: -#endif -} -LENDFUNC(NONE,WRITE,2,raw_mov_w_mr,(IMM d, RR2 s)) - LOWFUNC(NONE,NONE,2,raw_mov_w_ri,(W2 d, IMM s)) { -#if defined(USE_DATA_BUFFER) - long offs = data_word_offs(s); - LDR_rRI(REG_WORK2, RPC_INDEX, offs); // ldrh r3, [pc, #offs] -#else - LDRH_rRI(REG_WORK2, RPC_INDEX, 12); // ldrh r3, [pc, #12] ; -#endif + uae_s32 offs = data_word_offs(s); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(d, REG_WORK2, d); // pkhbt %[d], r3, %[d] -#else - BIC_rri(REG_WORK1, d, 0xff); // bic r2, r7, #0xff - BIC_rri(REG_WORK1, REG_WORK1, 0xff00); // bic r2, r2, #0xff00 - ORR_rrr(d, REG_WORK2, REG_WORK1); // orr r7, r3, r2 -#endif - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_word(s); - emit_word(0); - //: -#endif + PKHBT_rrr(d, REG_WORK2, d); } LENDFUNC(NONE,NONE,2,raw_mov_w_ri,(W2 d, IMM s)) -LOWFUNC(NONE,WRITE,2,raw_mov_w_mi,(MEMW d, IMM s)) -{ - // TODO: optimize imm - -#if defined(USE_DATA_BUFFER) - data_check_end(8, 12); - long offs = data_long_offs(d); - - LDR_rRI(REG_WORK2, RPC_INDEX, offs); // ldr r3, [pc, #offs] ; - - offs = data_word_offs(s); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; - - STRH_rR(REG_WORK1, REG_WORK2); // strh r2, [r3] -#else - LDR_rRI(REG_WORK2, RPC_INDEX, 8); // ldr r3, [pc, #8] ; - LDRH_rRI(REG_WORK1, RPC_INDEX, 8); // ldrh r2, [pc, #8] ; - STRH_rR(REG_WORK1, REG_WORK2); // strh r2, [r3] - - B_i(1); // b - //mem: - emit_long(d); - //imm: - emit_word(s); - emit_word(0); // Alignment - //: -#endif -} -LENDFUNC(NONE,WRITE,2,raw_mov_w_mi,(MEMW d, IMM s)) - LOWFUNC(NONE,WRITE,2,raw_mov_l_mr,(IMM d, RR4 s)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] - STR_rR(s, REG_WORK1); // str r3, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - STR_rR(s, REG_WORK1); // str r3, [r2] - - B_i(0); // b - //: - emit_long(d); - //: -#endif + if(d >= (uae_u32) ®s && d < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 idx = d - (uae_u32) ®s; + STR_rRI(s, R_REGSTRUCT, idx); + } else { + uae_s32 offs = data_long_offs(d); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] + STR_rR(s, REG_WORK1); // str r3, [r2] + } } LENDFUNC(NONE,WRITE,2,raw_mov_l_mr,(IMM d, RR4 s)) -LOWFUNC(NONE,WRITE,3,raw_mov_w_Ri,(RR4 d, IMM i, IMM offset)) -{ - Dif(!isbyte(offset)) abort(); - -#if defined(USE_DATA_BUFFER) - long offs = data_word_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDRH_rRI(REG_WORK1, RPC_INDEX, 4); // ldrh r2, [pc, #4] ; -#endif - - if (offset >= 0) - STRH_rRI(REG_WORK1, d, offset); // strh r2, [r7, #0x54] - else - STRH_rRi(REG_WORK1, d, -offset);// strh r2, [r7, #-0x54] - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_word(i); - emit_word(0); - //: -#endif -} -LENDFUNC(NONE,WRITE,3,raw_mov_w_Ri,(RR4 d, IMM i, IMM offset)) - -LOWFUNC(NONE,READ,2,raw_mov_w_rm,(W2 d, IMM s)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(s); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 12); // ldr r2, [pc, #12] ; -#endif - - LDRH_rR(REG_WORK1, REG_WORK1); // ldrh r2, [r2] -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(d, REG_WORK1, d); // pkhbt %[d], r2, %[d] -#else - LSR_rri(d, d, 16); // lsr r7, r7, #16 - ORR_rrrLSLi(d, REG_WORK1, d, 16); // orr r7, r2, r7, lsl #16 -#endif - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(s); - //: -#endif -} -LENDFUNC(NONE,READ,2,raw_mov_w_rm,(W2 d, IMM s)) - LOWFUNC(NONE,NONE,2,raw_mov_w_rr,(W2 d, RR2 s)) { -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(d, s, d); // pkhbt %[d], %[s], %[d] -#else - LSL_rri(REG_WORK1, s, 16); // lsl r2, r6, #16 - ORR_rrrLSRi(d, REG_WORK1, d, 16); // orr r7, r2, r7, lsr #16 - ROR_rri(d, d, 16); // ror r7, r7, #16 -#endif + PKHBT_rrr(d, s, d); } LENDFUNC(NONE,NONE,2,raw_mov_w_rr,(W2 d, RR2 s)) -LOWFUNC(NONE,READ,3,raw_mov_w_rR,(W2 d, RR4 s, IMM offset)) -{ - Dif(!isbyte(offset)) abort(); - - if (offset >= 0) - LDRH_rRI(REG_WORK1, s, offset); // ldrh r2, [r6, #12] - else - LDRH_rRi(REG_WORK1, s, -offset); // ldrh r2, [r6, #-12] - -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(d, REG_WORK1, d); // pkhbt %[d], r2, %[d] -#else - BIC_rri(d, d, 0xff); // bic r7, r7, #0xff - BIC_rri(d, d, 0xff00); // bic r7, r7, #0xff00 - ORR_rrr(d, d, REG_WORK1); // orr r7, r7, r2 -#endif -} -LENDFUNC(NONE,READ,3,raw_mov_w_rR,(W2 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,WRITE,3,raw_mov_w_Rr,(RR4 d, RR2 s, IMM offset)) -{ - Dif(!isbyte(offset)) abort(); - - if (offset >= 0) - STRH_rRI(s, d, offset); // strh r6, [r7, #0x7f] - else - STRH_rRi(s, d, -offset);// strh r6, [r7, #-0x7f] -} -LENDFUNC(NONE,WRITE,3,raw_mov_w_Rr,(RR4 d, RR2 s, IMM offset)) - -LOWFUNC(NONE,READ,2,raw_mov_l_rm,(W4 d, MEMR s)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(s); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [r10, #offs] - LDR_rR(d, REG_WORK1); // ldr r7, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - LDR_rR(d, REG_WORK1); // ldr r7, [r2] - - B_i(0); // b - emit_long(s); //: - //: -#endif -} -LENDFUNC(NONE,READ,2,raw_mov_l_rm,(W4 d, MEMR s)) - -LOWFUNC(NONE,READ,4,raw_mov_l_rm_indexed,(W4 d, MEMR base, RR4 index, IMM factor)) -{ - int shft; - switch(factor) { - case 1: shft=0; break; - case 2: shft=1; break; - case 4: shft=2; break; - case 8: shft=3; break; - default: abort(); - } - -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(base); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] - LDR_rRR_LSLi(d, REG_WORK1, index, shft); // ldr %[d], [r2, %[index], lsl #[shift]] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - LDR_rRR_LSLi(d, REG_WORK1, index, shft); // ldr %[d], [r2, %[index], lsl #[shift]] - - B_i(0); // b - emit_long(base); //: - //: -#endif -} -LENDFUNC(NONE,READ,4,raw_mov_l_rm_indexed,(W4 d, MEMR base, RR4 index, IMM factor)) - -LOWFUNC(NONE,WRITE,3,raw_mov_l_Ri,(RR4 d, IMM i, IMM offset8)) -{ - Dif(!isbyte(offset8)) abort(); - -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; -#endif - - if (offset8 >= 0) - STR_rRI(REG_WORK1, d, offset8); // str r2, [r7, #0x54] - else - STR_rRi(REG_WORK1, d, -offset8); // str r2, [r7, #-0x54] - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(i); - //: -#endif -} -LENDFUNC(NONE,WRITE,3,raw_mov_l_Ri,(RR4 d, IMM i, IMM offset)) - -LOWFUNC(NONE,READ,3,raw_mov_l_rR,(W4 d, RR4 s, IMM offset)) -{ - Dif(!isbyte(offset)) abort(); - - if (offset >= 0) { - LDR_rRI(d, s, offset); // ldr r2, [r1, #-12] - } else - LDR_rRi(d, s, -offset); // ldr r2, [r1, #12] -} -LENDFUNC(NONE,READ,3,raw_mov_l_rR,(W4 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,NONE,2,raw_mov_l_rr,(W4 d, RR4 s)) -{ - MOV_rr(d, s); // mov %[d], %[s] -} -LENDFUNC(NONE,NONE,2,raw_mov_l_rr,(W4 d, RR4 s)) - -LOWFUNC(NONE,WRITE,3,raw_mov_l_Rr,(RR4 d, RR4 s, IMM offset)) -{ - Dif(!isbyte(offset)) abort(); - - if (offset >= 0) - STR_rRI(s, d, offset); // str r6, [r7, #12] - else - STR_rRi(s, d, -offset); // str r6, [r7, #-12] -} -LENDFUNC(NONE,WRITE,3,raw_mov_l_Rr,(RR4 d, RR4 s, IMM offset)) - -LOWFUNC(NONE,NONE,2,raw_mul_64_32,(RW4 d, RW4 s)) -{ - UMULL_rrrr(REG_WORK1, REG_WORK2, d, s); // umull r2,r3,r7,r6 - MOV_rr(MUL_NREG1, REG_WORK1); // mov r7,r2 - MOV_rr(MUL_NREG2, REG_WORK2); -} -LENDFUNC(NONE,NONE,2,raw_mul_64_32,(RW4 d, RW4 s)) - -LOWFUNC(WRITE,NONE,2,raw_or_b,(RW1 d, RR1 s)) -{ - AND_rri(REG_WORK1, s, 0xFF); // and r2, %[s], 0xFF - ORR_rrr(d, d, REG_WORK1); // orr %[d], %[d], r2 - LSLS_rri(REG_WORK1, d, 24); // lsls r2, %[d], #24 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_or_b,(RW1 d, RR1 s)) - -LOWFUNC(WRITE,NONE,2,raw_or_w,(RW2 d, RR2 s)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTH_rr(REG_WORK1, s); // UXTH r2, %[s] -#else - BIC_rri(REG_WORK1, s, 0xff000000); // bic r2, %[s], #0xff000000 - BIC_rri(REG_WORK1, REG_WORK1, 0x00ff0000); // bic r2, r2, #0x00ff0000 -#endif - ORR_rrr(d, d, REG_WORK1); // orr %[d], %[d], r2 - LSLS_rri(REG_WORK1, d, 16); // lsls r2, %[d], #16 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_or_w,(RW2 d, RR2 s)) - -LOWFUNC(WRITE,NONE,2,raw_or_l,(RW4 d, RR4 s)) -{ - ORRS_rrr(d, d, s); // orrs r7, r7, r6 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_or_l,(RW4 d, RR4 s)) - -LOWFUNC(WRITE,NONE,2,raw_or_l_ri,(RW4 d, IMM i)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // LDR r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 16); // LDR r2, [pc,#16] ; -#endif - - ORRS_rrr(d, d, REG_WORK1); // ORRS r7,r7,r2 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - // value: - emit_long(i); - //jp: -#endif -} -LENDFUNC(WRITE,NONE,2,raw_or_l_ri,(RW4 d, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_rol_b_ri,(RW1 r, IMM i)) -{ - // TODO: Check if the Bittest is necessary. compemu.c seems to do it itself, but meanwhile make sure, that carry is set correctly - int imm = 32 - (i & 0x1f); - - MOV_rrLSLi(REG_WORK1, r, 24); // mov r2,r7,lsl #24 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 16); // orr r2,r2,r2,lsr #16 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 8); // orr r2,r2,r2,lsr #8 - - RORS_rri(REG_WORK1, REG_WORK1, imm); // rors r2,r2,#(32 - (i & 0x1f)) - - MRS_CPSR(REG_WORK2); // mrs r3,cpsr - TST_ri(REG_WORK1, 1); // tst r2,#1 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3,r3,#0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3,r3,#0x20000000 - MSR_CPSR_r(REG_WORK2); - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(r, REG_WORK1, 0, 7); // bfi %[r], r2, 0, 7 -#else - AND_rri(REG_WORK1, REG_WORK1, 0xff); // and r2,r2,#0xff - BIC_rri(r, r, 0xff); // bic r7,r7,#0xff - ORR_rrr(r, r, REG_WORK1); // orr r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_rol_b_ri,(RW1 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_rol_b_rr,(RW1 d, RR1 r)) -{ - // TODO: Check if the Bittest is necessary. compemu.c seems to do it itself, but meanwhile make sure, that carry is set correctly - - AND_rri(REG_WORK1, r, 0x1f); // and r2,r6,#0x1f - RSB_rri(REG_WORK2, REG_WORK1, 32); // rsb r3, r2, #32 - - MOV_rrLSLi(REG_WORK1, d, 24); // mov r2,r7,lsl #24 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 16); // orr r2,r2,r2,lsr #16 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 8); // orr r2,r2,r2,lsr #8 - - RORS_rrr(REG_WORK1, REG_WORK1, REG_WORK2); // rors r2,r2,r3 - - MRS_CPSR(REG_WORK2); // mrs r3,cpsr - TST_ri(REG_WORK1, 1); // tst r2,#1 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3,r3,#0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3,r3,#0x20000000 - MSR_CPSR_r(REG_WORK2); - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(d, REG_WORK1, 0, 7); // bfi %[d], r2, 0, 7 -#else - AND_rri(REG_WORK1, REG_WORK1, 0xff); // and r2,r2,#0xff - BIC_rri(d, d, 0xff); // bic r7,r7,#0xff - ORR_rrr(d, d, REG_WORK1); // orr r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_rol_b_rr,(RW1 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_rol_w_ri,(RW2 r, IMM i)) -{ - // TODO: Check if the Bittest is necessary. compemu.c seems to do it itself, but meanwhile make sure, that carry is set correctly - int imm = 32 - (i & 0x1f); - - MOV_rrLSLi(REG_WORK1, r, 16); // mov r2,r7,lsl #16 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 16); // orr r2,r2,r2,lsr #16 - - RORS_rri(REG_WORK1, REG_WORK1, imm); // rors r2,r2,#(32 - (i & 0x1f)) - - MRS_CPSR(REG_WORK2); // mrs r3,cpsr - TST_ri(REG_WORK1, 1); // tst r2,#1 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3,r3,#0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3,r3,#0x20000000 - MSR_CPSR_r(REG_WORK2); - -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(r, r, REG_WORK1, 16); // pkhtb %[r], %[r], r2, asr #16 -#else - BIC_rri(r, r, 0xff00); // bic r2,r2,#0xff00 - BIC_rri(r, r, 0xff); // bic r2,r2,#0xff - ORR_rrrLSRi(r, r, REG_WORK1, 16); // orr r7,r7,r2,lsr #16 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_rol_w_ri,(RW2 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_rol_w_rr,(RW2 d, RR1 r)) -{ - // TODO: Check if the Bittest is necessary. compemu.c seems to do it itself, but meanwhile make sure, that carry is set correctly - - AND_rri(REG_WORK1, r, 0x1f); // and r2,r6,#0x1f - RSB_rri(REG_WORK2, REG_WORK1, 32); // rsb r3, r3, #32 - - MOV_rrLSLi(REG_WORK1, d, 16); // mov r2,r7,lsl #16 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 16); // orr r2,r2,r2,lsr #16 - - RORS_rrr(REG_WORK1, REG_WORK1, REG_WORK2); // rors r2,r2,r3 - - MRS_CPSR(REG_WORK2); // mrs r3,cpsr - TST_ri(REG_WORK1, 1); // tst r2,#1 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3,r3,#0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3,r3,#0x20000000 - MSR_CPSR_r(REG_WORK2); - -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(d, d, REG_WORK1, 16); // pkhtb %[d], %[d], r2, asr #16 -#else - BIC_rri(d, d, 0xff00); // bic r2,r2,#0xff00 - BIC_rri(d, d, 0xff); // bic r2,r2,#0xff - ORR_rrrLSRi(d, d, REG_WORK1, 16); // orr r2,r2,r7,lsr #16 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_rol_w_rr,(RW2 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_rol_l_ri,(RW4 r, IMM i)) -{ - // TODO: Check if the Bittest is necessary. compemu.c seems to do it itself, but meanwhile make sure, that carry is set correctly - int imm = 32 - (i & 0x1f); - - RORS_rri(r, r, imm); // rors r7,r7,#(32 - (i & 0x1f)) - - MRS_CPSR(REG_WORK2); // mrs r3,cpsr - TST_ri(r, 1); // tst r7,#1 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3,r3,#0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3,r3,#0x20000000 - MSR_CPSR_r(REG_WORK2); -} -LENDFUNC(WRITE,NONE,2,raw_rol_l_ri,(RW4 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_ror_l_ri,(RW4 r, IMM i)) -{ - RORS_rri(r, r, i & 0x1F); // RORS r7,r7,#12 -} -LENDFUNC(WRITE,NONE,2,raw_ror_l_ri,(RW4 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_rol_l_rr,(RW4 d, RR1 r)) -{ - // TODO: Check if the Bittest is necessary. compemu.c seems to do it itself, but meanwhile make sure, that carry is set correctly - - AND_rri(REG_WORK2, r, 0x1f); // and r3,r6,#0x1f - RSB_rri(REG_WORK1, REG_WORK2, 32); // rsb r2, r3, #32 - - RORS_rrr(d, d, REG_WORK1); // rors r7,r7,r2 - - MRS_CPSR(REG_WORK2); // mrs r3,cpsr - TST_ri(d, 1); // tst r7,#1 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3,r3,#0x20000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3,r3,#0x20000000 - MSR_CPSR_r(REG_WORK2); -} -LENDFUNC(WRITE,NONE,2,raw_rol_l_rr,(RW4 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_ror_l_rr,(RW4 d, RR1 r)) -{ - RORS_rrr(d, d, r); // RORS r7,r7,r6 -} -LENDFUNC(WRITE,NONE,2,raw_ror_l_rr,(RW4 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_ror_b_ri,(RW1 r, IMM i)) -{ - MOV_rrLSLi(REG_WORK1, r, 24); // mov r2,r7,lsl #24 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 16); // orr r2,r2,r2,lsr #16 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 8); // orr r2,r2,r2,lsr #8 - - RORS_rri(REG_WORK1, REG_WORK1, i & 0x1f); // rors r2,r2,#12 - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(r, REG_WORK1, 0, 7); // bfi %[r],r2, 0, 7 -#else - AND_rri(REG_WORK1, REG_WORK1, 0xff); // and r2,r2,#0xff - BIC_rri(r, r, 0xff); // bic r7,r7,#0xff - ORR_rrr(r, r, REG_WORK1); // orr r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_ror_b_ri,(RW1 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_ror_b_rr,(RW1 d, RR1 r)) -{ - MOV_rrLSLi(REG_WORK1, d, 24); // mov r2,r7,lsl #24 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 16); // orr r2,r2,r2,lsr #16 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 8); // orr r2,r2,r2,lsr #8 - - RORS_rrr(REG_WORK1, REG_WORK1, r); // rors r2,r2,r6 - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(d, REG_WORK1, 0, 7); // bfi %[d], r2, 0, 7 -#else - AND_rri(REG_WORK1, REG_WORK1, 0xff); // and r2,r2,#0xff - BIC_rri(d, d, 0xff); // bic r7,r7,#0xff - ORR_rrr(d, d, REG_WORK1); // orr r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_ror_b_rr,(RW1 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_ror_w_ri,(RW2 r, IMM i)) -{ - MOV_rrLSLi(REG_WORK1, r, 16); // mov r2,r7,lsl #16 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 16); // orr r2,r2,r2,lsr #16 - - RORS_rri(REG_WORK1, REG_WORK1, i & 0x1f); // RORS r2,r2,#12 - -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(r, r, REG_WORK1, 16); // pkhtb %[r], %[r], r2, asr #16 -#else - BIC_rri(r, r, 0xff00); // bic r7,r7,#0xff00 - BIC_rri(r, r, 0xff); // bic r7,r7,#0xff - ORR_rrrLSRi(r, r, REG_WORK1, 16); // orr r7,r7,r2,lsr #16 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_ror_w_ri,(RW2 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_ror_w_rr,(RW2 d, RR1 r)) -{ - MOV_rrLSLi(REG_WORK1, d, 16); // mov r2,r7,lsl #16 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, REG_WORK1, 16); // orr r2,r2,r2,lsr #16 - - RORS_rrr(REG_WORK1, REG_WORK1, r); // RORS r2,r2,r6 - -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(d, d, REG_WORK1, 16); // pkhtb %[d], %[d], r2, asr #16 -#else - BIC_rri(d, d, 0xff00); // bic r7,r7,#0xff00 - BIC_rri(d, d, 0xff); // bic r7,r7,#0xff - ORR_rrrLSRi(d, d, REG_WORK1, 16); // orr r7,r7,r2,lsr #16 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_ror_w_rr,(RW2 d, RR1 r)) - -LOWFUNC(RMW,NONE,2,raw_sbb_b,(RW1 d, RR1 s)) -{ - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 - - LSL_rri(REG_WORK2, d, 24); // lsl r3, %[d], #24 - LSL_rri(REG_WORK1, s, 24); // lsl r2, r6, #24 - - SBCS_rrr(REG_WORK2, REG_WORK2, REG_WORK1); // subs r3, r3, r2 - BIC_rri(d, d, 0xFF); - ORR_rrrLSRi(d, d, REG_WORK2, 24); // orr r7, r7, r3 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(RMW,NONE,2,raw_sbb_b,(RW1 d, RR1 s)) - -LOWFUNC(RMW,NONE,2,raw_sbb_l,(RW4 d, RR4 s)) -{ - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 - - SBCS_rrr(d, d, s); // sbcs r7, r7, r6 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(RMW,NONE,2,raw_sbb_l,(RW4 d, RR4 s)) - -LOWFUNC(RMW,NONE,2,raw_sbb_w,(RW2 d, RR2 s)) -{ - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 - - LSL_rri(REG_WORK2, d, 16); // lsl r3, %[d], #24 - LSL_rri(REG_WORK1, s, 16); // lsl r2, r6, #16 - - SBCS_rrr(REG_WORK2, REG_WORK2, REG_WORK1); // subs r3, r3, r2 -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(d, d, REG_WORK2, 16); // pkhtb %[d], %[d], r2, asr #16 -#else - BIC_rri(d,d, 0xff); - BIC_rri(d,d, 0xff00); - ORR_rrrLSRi(d, d, REG_WORK2, 16); // orr r7, r7, r3 -#endif - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(RMW,NONE,2,raw_sbb_w,(RW2 d, RR2 s)) - -LOWFUNC(READ,NONE,2,raw_setcc,(W1 d, IMM cc)) -{ - switch (cc) { - case 9: // LS - BEQ_i(0); // beq - BCC_i(1); // bcs - - MOV_ri(d, 1); // mov r7,#0 - B_i(0); // b - - //: - MOV_ri(d, 0); // mov r7,#1 - break; - - case 8: // HI - BEQ_i(2); // beq Z != 0 - BCS_i(1); // bcc C = 0 - - //: - MOV_ri(d, 1); // mov r7,#0 - B_i(0); // b - - //: - MOV_ri(d, 0); // mov r7,#1 - break; - - default: - CC_MOV_ri(cc, d, 1); // MOVcc R7,#1 - CC_MOV_ri(cc^1, d, 0); // MOVcc^1 R7,#0 - break; - } - //: -} -LENDFUNC(READ,NONE,2,raw_setcc,(W1 d, IMM cc)) - -LOWFUNC(READ,WRITE,2,raw_setcc_m,(MEMW d, IMM cc)) -{ - switch (cc) { - case 9: // LS - BEQ_i(0); // beq - BCC_i(1); // bcs - - MOV_ri(REG_WORK1, 1); // mov r2,#0 - B_i(0); // b - - //: - MOV_ri(REG_WORK1, 0); // mov r2,#1 - break; - - case 8: // HI - BEQ_i(2); // beq Z != 0 - BCS_i(1); // bcc C = 0 - - MOV_ri(REG_WORK1, 1); // mov r2,#0 - B_i(0); // b - - //: - MOV_ri(REG_WORK1, 0); // mov r2,#1 - break; - - default: - CC_MOV_ri(cc, REG_WORK1, 1); // MOVcc R2,#1 - CC_MOV_ri(cc^1, REG_WORK1, 0); // MOVcc^1 R2,#0 - break; - } - //: -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(d); - LDR_rRI(REG_WORK2, RPC_INDEX, offs); // LDR R3,[PC, #offs] -#else - LDR_rRI(REG_WORK2, RPC_INDEX, 4); // LDR R3,[PC, #4] -#endif - STRB_rR(REG_WORK1, REG_WORK2); // STRB R2,[R3] - -#if !defined(USE_DATA_BUFFER) - B_i(0); // B - emit_long(d); - //: -#endif -} -LENDFUNC(READ,WRITE,2,raw_setcc_m,(MEMW d, IMM cc)) - -LOWFUNC(WRITE,NONE,2,raw_shll_b_ri,(RW1 r, IMM i)) -{ - LSL_rri(REG_WORK1, r, 24); // LSL r2,r7,#24 - - LSLS_rri(REG_WORK1, REG_WORK1, i & 0x1f); // LSLS r2,r2,#12 - - BIC_rri(r, r, 0xff); // BIC r7,r7,0xff - ORR_rrrLSRi(r, r, REG_WORK1, 24); // ORR r7,r7,r2,lsr #24 -} -LENDFUNC(WRITE,NONE,2,raw_shll_b_ri,(RW1 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_shll_b_rr,(RW1 d, RR1 r)) -{ - LSL_rri(REG_WORK1, d, 24); // LSL r2,r7,#24 - LSLS_rrr(REG_WORK1, REG_WORK1, r); // LSLS r2,r2,r6 - BIC_rri(d, d, 0xff); // BIC r7,r7,#0xff - ORR_rrrLSRi(d, d, REG_WORK1, 24); // ORR r7,r7,r2,lsr #24 -} -LENDFUNC(WRITE,NONE,2,raw_shll_b_rr,(RW1 d, RR1 r)) - LOWFUNC(WRITE,NONE,2,raw_shll_l_ri,(RW4 r, IMM i)) { - LSLS_rri(r,r, i & 0x1f); // lsls r7,r7,#12 + LSL_rri(r,r, i & 0x1f); } LENDFUNC(WRITE,NONE,2,raw_shll_l_ri,(RW4 r, IMM i)) -LOWFUNC(WRITE,NONE,2,raw_shll_l_rr,(RW4 d, RR1 r)) -{ - LSLS_rrr(d, d, r); -} -LENDFUNC(WRITE,NONE,2,raw_shll_l_rr,(RW4 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_shll_w_ri,(RW2 r, IMM i)) -{ - LSL_rri(REG_WORK1, r, 16); // LSL r2,r7,#16 - LSLS_rri(REG_WORK1, REG_WORK1, i&0x1f); // LSLS r2,r2,#12 - - ORR_rrrLSRi(REG_WORK1, REG_WORK1, r, 16); // ORR r2,r2,r7,lsr #16 - - ROR_rri(r, REG_WORK1, 16); // ROR r7,r2,#16 -} -LENDFUNC(WRITE,NONE,2,raw_shll_w_ri,(RW2 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_shll_w_rr,(RW2 d, RR1 r)) -{ - LSL_rri(REG_WORK1, d, 16); // LSL r2,r7,#16 - LSLS_rrr(REG_WORK1, REG_WORK1, r); // LSLS r2,r2,r6 - ORR_rrrLSRi(REG_WORK1, REG_WORK1, d, 16); // ORR r2,r2,r7,lsr #16 - ROR_rri(d, REG_WORK1, 16); // ROR r7,r2,#16 -} -LENDFUNC(WRITE,NONE,2,raw_shll_w_rr,(RW2 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_shra_b_ri,(RW1 r, IMM i)) -{ - LSL_rri(REG_WORK1, r, 24); // lsl r2,r7,#24 - ASR_rri(REG_WORK1, REG_WORK1, 24); // asr r2,r2,#24 - - ASRS_rri(REG_WORK1, REG_WORK1, i & 0x1f); // asrs r2,r2,#12 - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(r, REG_WORK1, 0, 7); // bfi %[r], r2, 0, 7 -#else - AND_rri(REG_WORK1, REG_WORK1, 0xff); // and r2,r2,#0xff - BIC_rri(r,r, 0xff); // bic r7,r7,#0xff - ORR_rrr(r,r,REG_WORK1); // orr r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_shra_b_ri,(RW1 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_shra_b_rr,(RW1 d, RR1 r)) -{ - LSL_rri(REG_WORK1, d, 24); // lsl r2,r7,#24 - ASR_rri(REG_WORK1, REG_WORK1, 24); // asr r2,r2,#24 - - ASRS_rrr(REG_WORK1, REG_WORK1, r); // asrs r2,r2,r6 - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(d, REG_WORK1, 0, 7); // bfi %[d], r2, 0, 7 -#else - AND_rri(REG_WORK1, REG_WORK1, 0xff); // and r2,r2,#0xff - BIC_rri(d,d, 0xff); // bic r7,r7,#0xff - ORR_rrr(d,d,REG_WORK1); // orr r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_shra_b_rr,(RW1 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_shra_w_ri,(RW2 r, IMM i)) -{ - LSL_rri(REG_WORK1, r, 16); // lsl r2,r7,#16 - ASR_rri(REG_WORK1, REG_WORK1, 16); // asr r2,r2,#16 - - ASRS_rri(REG_WORK1, REG_WORK1, i & 0x1f); // asrs r2,r2,#12 - -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(r, REG_WORK1, r); // pkhbt %[r], r2, %[r] -#else - BIC_rri(REG_WORK1, REG_WORK1, 0xff000000); - BIC_rri(REG_WORK1, REG_WORK1, 0xff0000); - - BIC_rri(r,r,0xff00); // bic r7,r7,#0xff00 - BIC_rri(r,r,0xff); // bic r7,r7,#0xff - ORR_rrr(r,r,REG_WORK1); // orr r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_shra_w_ri,(RW2 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_shra_w_rr,(RW2 d, RR1 r)) -{ - LSL_rri(REG_WORK1, d, 16); // lsl r2,r7,#16 - ASR_rri(REG_WORK1, REG_WORK1, 16); // asr r2,r2,#16 - - ASRS_rrr(REG_WORK1, REG_WORK1, r); // asrs r2,r2,r6 - -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(d, REG_WORK1, d); // pkhbt %[d], r2, %[d] -#else - BIC_rri(REG_WORK1, REG_WORK1, 0xff000000); // bic r2,r2,#0xff000000 - BIC_rri(REG_WORK1, REG_WORK1, 0xff0000); // bic r2,r2,#0xff0000 - - BIC_rri(d,d, 0xff00); // bic r7,r7,#0xff00 - BIC_rri(d,d, 0xff); // bic r7,r7,#0xff - ORR_rrr(d,d,REG_WORK1); // orr r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_shra_w_rr,(RW2 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_shra_l_ri,(RW4 r, IMM i)) -{ - ASRS_rri(r, r, i & 0x1f); // ASRS r7,r7,#12 -} -LENDFUNC(WRITE,NONE,2,raw_shra_l_ri,(RW4 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_shra_l_rr,(RW4 d, RR1 r)) -{ - ASRS_rrr(d, d, r); // ASRS r7,r7,r6 -} -LENDFUNC(WRITE,NONE,2,raw_shra_l_rr,(RW4 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_shrl_b_ri,(RW1 r, IMM i)) -{ - AND_rri(REG_WORK1, r, 0xff); // AND r2,r7,#0xFF - - LSRS_rri(REG_WORK1, REG_WORK1, i & 0x1f); // LSRS r2,r2,r6 - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(r, REG_WORK1, 0, 7); // bfi %[r], r2, 0, 7 -#else - BIC_rri(r, r, 0xFF); // BIC r7,r7,#0xff - ORR_rrr(r, r, REG_WORK1); // ORR r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_shrl_b_ri,(RW1 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_shrl_b_rr,(RW1 d, RR1 r)) -{ - AND_rri(REG_WORK1, d, 0xff); // AND r2,r7,#0xFF - - LSRS_rrr(REG_WORK1, REG_WORK1, r); // LSRS r2,r2,r6 - -#if defined(ARMV6_ASSEMBLY) - BFI_rrii(d, REG_WORK1, 0, 7); // bfi %[d], r2, 0, 7 -#else - BIC_rri(d, d, 0xFF); // BIC r7,r7,#0xff - ORR_rrr(d, d, REG_WORK1); // ORR r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_shrl_b_rr,(RW1 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_shrl_l_ri,(RW4 r, IMM i)) -{ - LSRS_rri(r, r, i & 0x1f); // LSRS r7,r7,#12 -} -LENDFUNC(WRITE,NONE,2,raw_shrl_l_ri,(RW4 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_shrl_w_ri,(RW2 r, IMM i)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTH_rr(REG_WORK1, r); -#else - BIC_rri(REG_WORK1, r, 0xff0000); // BIC r2,r7,#0xff0000 - BIC_rri(REG_WORK1, REG_WORK1, 0xff000000); // BIC r2,r2,#0xff000000 -#endif - - LSRS_rri(REG_WORK1, REG_WORK1, i & 0x1f); // LSRS r2,r2,#12 - -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(r, REG_WORK1, r); // pkhbt %[r], r2, %[r] -#else - BIC_rri(r, r, 0xFF); // BIC r7,r7,#0xff - BIC_rri(r, r, 0xFF00); // BIC r7,r7,#0xff00 - ORR_rrr(r, r, REG_WORK1); // ORR r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_shrl_w_ri,(RW2 r, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_shrl_w_rr,(RW2 d, RR1 r)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTH_rr(REG_WORK1, d); -#else - BIC_rri(REG_WORK1, d, 0xff0000); // BIC r2,r7,#0xff0000 - BIC_rri(REG_WORK1, REG_WORK1, 0xff000000); // BIC r2,r2,#0xff000000 -#endif - - LSRS_rrr(REG_WORK1, REG_WORK1, r); // LSRS r2,r2,r6 - -#if defined(ARMV6_ASSEMBLY) - PKHBT_rrr(d, REG_WORK1, d); // pkhbt %[d], r2, %[d] -#else - BIC_rri(d, d, 0xFF); // BIC r7,r7,#0xff - BIC_rri(d, d, 0xFF00); // BIC r7,r7,#0xff00 - ORR_rrr(d, d, REG_WORK1); // ORR r7,r7,r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_shrl_w_rr,(RW2 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_shrl_l_rr,(RW4 d, RR1 r)) -{ - LSRS_rrr(d, d, r); -} -LENDFUNC(WRITE,NONE,2,raw_shrl_l_rr,(RW4 d, RR1 r)) - -LOWFUNC(WRITE,NONE,2,raw_sub_b,(RW1 d, RR1 s)) -{ - LSL_rri(REG_WORK2, d, 24); // lsl r3, r7, #24 - - SUBS_rrrLSLi(REG_WORK2, REG_WORK2, s, 24); // subs r3, r3, %[s], lsl #24 - BIC_rri(d, d, 0xFF); - ORR_rrrLSRi(d, d, REG_WORK2, 24); // orr r7, r7, r3 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_sub_b,(RW1 d, RR1 s)) - -LOWFUNC(WRITE,NONE,2,raw_sub_b_ri,(RW1 d, IMM i)) -{ - LSL_rri(REG_WORK2, d, 24); // lsl r3, r7, #24 - - SUBS_rri(REG_WORK2, REG_WORK2, i << 24); // subs r3, r3, #0x12000000 - BIC_rri(d, d, 0xFF); // bic r7, r7, #0xFF - ORR_rrrLSRi(d, d, REG_WORK2, 24); // orr r7, r7, r3, lsr #24 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_sub_b_ri,(RW1 d, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_sub_l,(RW4 d, RR4 s)) -{ - SUBS_rrr(d, d, s); // subs r7, r7, r6 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_sub_l,(RW4 d, RR4 s)) - LOWFUNC(WRITE,NONE,2,raw_sub_l_ri,(RW4 d, IMM i)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 16); // ldr r2, [pc, #16] ; -#endif + if(i >= 0 && i<256) { + SUB_rri(d, d, i); + } else { + uae_s32 offs = data_long_offs(i); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); - SUBS_rrr(d, d, REG_WORK1); // subs r7, r7, r2 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(i); - //: -#endif + SUB_rrr(d, d, REG_WORK1); + } } LENDFUNC(WRITE,NONE,2,raw_sub_l_ri,(RW4 d, IMM i)) -LOWFUNC(WRITE,NONE,2,raw_sub_w,(RW2 d, RR2 s)) -{ - LSL_rri(REG_WORK2, d, 16); // lsl r3, r7, #16 - - SUBS_rrrLSLi(REG_WORK2, REG_WORK2, s, 16); // subs r3, r3, %[s], LSL #16 - -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(d, d, REG_WORK2, 16); // pkhtb %[d], %[d], r3, asr #16 -#else - BIC_rri(d, d, 0xff); - BIC_rri(d, d, 0xff00); - ORR_rrrLSRi(d, d, REG_WORK2, 16); // orr r7, r7, r3 -#endif - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_sub_w,(RW2 d, RR2 s)) - LOWFUNC(WRITE,NONE,2,raw_sub_w_ri,(RW2 d, IMM i)) { - // TODO: optimize_imm + // This function is only called with i = 1 + // Caller needs flags... + + LSL_rri(REG_WORK2, d, 16); -#if defined(USE_DATA_BUFFER) - long offs = data_word_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; -#else - LDRH_rRI(REG_WORK1, RPC_INDEX, 36); // ldrh r2, [pc, #36] ; -#endif - - LSL_rri(REG_WORK2, d, 16); // lsl r3, r6, #16 - - SUBS_rrrLSLi(REG_WORK2, REG_WORK2, REG_WORK1, 16); // subs r3, r3, r2, LSL #16 -#if defined(ARMV6_ASSEMBLY) - PKHTB_rrrASRi(d, d, REG_WORK2, 16); // pkhtb %[d], %[d], r3, asr #16 -#else - BIC_rri(d, d, 0xff); - BIC_rri(d, d, 0xff00); - ORR_rrrLSRi(d, d, REG_WORK2, 16); // orr r6, r3, r6, lsr #16 -#endif + SUBS_rri(REG_WORK2, REG_WORK2, (i & 0xff) << 16); + PKHTB_rrrASRi(d, d, REG_WORK2, 16); MRS_CPSR(REG_WORK1); // mrs r2, CPSR EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); // eor r2, r2, #0x20000000 MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - emit_word(i); - emit_word(0); //: - //: -#endif } LENDFUNC(WRITE,NONE,2,raw_sub_w_ri,(RW2 d, IMM i)) -LOWFUNC(WRITE,NONE,2,raw_test_b_rr,(RR1 d, RR1 s)) +LOWFUNC(WRITE,NONE,2,raw_test_eq_w_rr,(RR2 d, RR2 s)) { - LSL_rri(REG_WORK1, s, 24); // lsl r2, r6, #24 - LSL_rri(REG_WORK2, d, 24); // lsl r3, r7, #24 - - TST_rr(REG_WORK2, REG_WORK1); // tst r3, r2 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 + // Only EQ/NE relevant for caller -> compare without handle carry + LSL_rri(REG_WORK2, d, 16); + TST_rrLSLi(REG_WORK2, s, 16); } -LENDFUNC(WRITE,NONE,2,raw_test_b_rr,(RR1 d, RR1 s)) +LENDFUNC(WRITE,NONE,2,raw_test_eq_w_rr,(RR2 d, RR2 s)) -LOWFUNC(WRITE,NONE,2,raw_test_l_ri,(RR4 d, IMM i)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 16); // ldr r2, [pc, #16] ; -#endif - - TST_rr(d, REG_WORK1); // tst r7, r2 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(i); - //: -#endif -} -LENDFUNC(WRITE,NONE,2,raw_test_l_ri,(RR4 d, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_test_l_rr,(RR4 d, RR4 s)) -{ - TST_rr(d, s); // tst r7, r6 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_test_l_rr,(RR4 d, RR4 s)) - -LOWFUNC(WRITE,NONE,2,raw_test_w_rr,(RR2 d, RR2 s)) -{ - LSL_rri(REG_WORK1, s, 16); // lsl r2, r6, #16 - LSL_rri(REG_WORK2, d, 16); // lsl r3, r7, #16 - - TST_rr(REG_WORK2, REG_WORK1); // tst r3, r2 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_test_w_rr,(RR2 d, RR2 s)) - -LOWFUNC(WRITE,NONE,2,raw_xor_b,(RW1 d, RR1 s)) -{ - AND_rri(REG_WORK1, s, 0xFF); // and r2, %[s], 0xFF - EOR_rrr(d, d, REG_WORK1); // eor %[d], %[d], r2 - LSLS_rri(REG_WORK1, d, 24); // lsls r2, %[d], #24 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_xor_b,(RW1 d, RR1 s)) - -LOWFUNC(WRITE,NONE,2,raw_xor_w,(RW2 d, RR2 s)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTH_rr(REG_WORK1, s); // UXTH r2, %[s] -#else - BIC_rri(REG_WORK1, s, 0xff000000); // bic r2, %[s], #0xff000000 - BIC_rri(REG_WORK1, REG_WORK1, 0x00ff0000); // bic r2, r2, #0x00ff0000 -#endif - EOR_rrr(d, d, REG_WORK1); // eor %[d], %[d], r2 - LSLS_rri(REG_WORK1, d, 16); // lsls r2, %[d], #16 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_xor_w,(RW2 d, RR2 s)) - -LOWFUNC(WRITE,NONE,2,raw_xor_l,(RW4 d, RR4 s)) -{ - EORS_rrr(d, d, s); // eors r7, r7, r6 - - MRS_CPSR(REG_WORK1); // mrs r2, CPSR - BIC_rri(REG_WORK1, REG_WORK1, ARM_CV_FLAGS); // bic r2, r2, #0x30000000 - MSR_CPSR_r(REG_WORK1); // msr CPSR_fc, r2 -} -LENDFUNC(WRITE,NONE,2,raw_xor_l,(RW4 d, RR4 s)) - -LOWFUNC(NONE,NONE,2,raw_sign_extend_16_rr,(W4 d, RR2 s)) -{ -//#if defined(ARMV6_ASSEMBLY) -// SXTH_rr(d, s); // sxth %[d],%[s] there is something wrong with SXTH... -//#else - LSL_rri(d, s, 16); // lsl r6, r7, #16 - ASR_rri(d, d, 16); // asr r6, r6, #16 -//#endif -} -LENDFUNC(NONE,NONE,2,raw_sign_extend_16_rr,(W4 d, RR2 s)) - -LOWFUNC(NONE,NONE,2,raw_sign_extend_8_rr,(W4 d, RR1 s)) -{ -//#if defined(ARMV6_ASSEMBLY) there is something wrong with SXTB... -// SXTB_rr(d, s); // SXTB %[d],%[s] -//#else - ROR_rri(d, s, 8); // ror r6, r7, #8 - ASR_rri(d, d, 24); // asr r6, r6, #24 -//#endif -} -LENDFUNC(NONE,NONE,2,raw_sign_extend_8_rr,(W4 d, RR1 s)) - -LOWFUNC(NONE,NONE,2,raw_zero_extend_8_rr,(W4 d, RR1 s)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTB_rr(d, s); // UXTB %[d], %[s] -#else - ROR_rri(d, s, 8); // ror r2, r1, #8 - LSR_rri(d, d, 24); // lsr r2, r2, #24 -#endif -} -LENDFUNC(NONE,NONE,2,raw_zero_extend_8_rr,(W4 d, RR1 s)) - -LOWFUNC(NONE,NONE,2,raw_zero_extend_16_rr,(W4 d, RR2 s)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTH_rr(d, s); // UXTH %[d], %[s] -#else - BIC_rri(d, s, 0xff000000); // bic %[d], %[s], #0xff000000 - BIC_rri(d, d, 0x00ff0000); // bic %[d], %[d], #0x00ff0000 -#endif -} -LENDFUNC(NONE,NONE,2,raw_zero_extend_16_rr,(W4 d, RR2 s)) static inline void raw_dec_sp(int off) { if (off) { - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - SUB_rrr(RSP_INDEX, RSP_INDEX, REG_WORK1); // sub r7, r7, r2 - B_i(0); // b - //: - emit_long(off); + if(off >= 0 && off < 256) { + SUB_rri(RSP_INDEX, RSP_INDEX, off); + } else { + LDR_rRI(REG_WORK1, RPC_INDEX, 4); + SUB_rrr(RSP_INDEX, RSP_INDEX, REG_WORK1); + B_i(0); + //: + emit_long(off); + } } } static inline void raw_inc_sp(int off) { if (off) { - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - ADD_rrr(RSP_INDEX, RSP_INDEX, REG_WORK1); // sub r7, r7, r2 - B_i(0); // b - //: - emit_long(off); + if(off >= 0 && off < 256) { + ADD_rri(RSP_INDEX, RSP_INDEX, off); + } else { + LDR_rRI(REG_WORK1, RPC_INDEX, 4); + ADD_rrr(RSP_INDEX, RSP_INDEX, REG_WORK1); + B_i(0); + //: + emit_long(off); + } } } @@ -2262,61 +358,45 @@ static inline void raw_pop_preserved_regs(void) { POP_REGS(PRESERVE_MASK); } -// Verify!!! -/* FLAGX is byte sized, and we *do* write it at that size */ static inline void raw_load_flagx(uae_u32 t, uae_u32 r) { - raw_mov_l_rm(t,(uintptr)live.state[r].mem); + LDR_rRI(t, R_REGSTRUCT, 17 * 4); // X flag are next to 8 Dregs, 8 Aregs and CPSR in struct regstruct } static inline void raw_flags_evicted(int r) { - //live.state[FLAGTMP].status=CLEAN; - live.state[FLAGTMP].status=INMEM; - live.state[FLAGTMP].realreg=-1; + live.state[FLAGTMP].status = INMEM; + live.state[FLAGTMP].realreg = -1; /* We just "evicted" FLAGTMP. */ - if (live.nat[r].nholds!=1) { + if (live.nat[r].nholds != 1) { /* Huh? */ abort(); } - live.nat[r].nholds=0; + live.nat[r].nholds = 0; } static inline void raw_flags_init(void) { } -static __inline__ void raw_flags_set_zero(int s, int tmp) -{ - raw_mov_l_rr(tmp,s); - MRS_CPSR(s); - BIC_rri(s,s,ARM_Z_FLAG); - AND_rri(tmp,tmp,ARM_Z_FLAG); - EOR_rri(tmp,tmp,ARM_Z_FLAG); - ORR_rrr(s,s,tmp); - MSR_CPSR_r(s); -} - static inline void raw_flags_to_reg(int r) { MRS_CPSR(r); - raw_mov_l_mr((uintptr)live.state[FLAGTMP].mem,r); + STR_rRI(r, R_REGSTRUCT, 16 * 4); raw_flags_evicted(r); } static inline void raw_reg_to_flags(int r) { - MSR_CPSR_r(r); // msr CPSR_fc, %r + MSR_CPSR_r(r); } -/* Apparently, there are enough instructions between flag store and - flag reload to avoid the partial memory stall */ static inline void raw_load_flagreg(uae_u32 t, uae_u32 r) { - raw_mov_l_rm(t,(uintptr)live.state[r].mem); + LDR_rRI(t, R_REGSTRUCT, 16 * 4); // Flags are next to 8 Dregs and 8 Aregs in struct regstruct } /* %eax register is clobbered if target processor doesn't support fucomi */ -#define FFLAG_NREG_CLOBBER_CONDITION !have_cmov +#define FFLAG_NREG_CLOBBER_CONDITION 0 #define FFLAG_NREG R0_INDEX #define FLAG_NREG2 -1 #define FLAG_NREG1 -1 @@ -2393,19 +473,8 @@ static inline void raw_emit_nop(void) NOP(); } -// -// ARM doesn't have bsf, but clz is a good alternative instruction for it -// -static bool target_check_bsf(void) -{ - return false; -} - static void raw_init_cpu(void) { - /* Have CMOV support, because ARM support conditions for all instructions */ - have_cmov = true; - align_loops = 0; align_jumps = 0; @@ -2433,126 +502,21 @@ LOWFUNC(WRITE,NONE,2,raw_SUB_l_rri,(RW4 d, RR4 s, IMM i)) } LENDFUNC(WRITE,NONE,2,raw_SUB_l_rri,(RW4 d, RR4 s, IMM i)) -LOWFUNC(WRITE,NONE,2,raw_AND_b_rr,(RW1 d, RR1 s)) -{ - MVN_rrLSLi(REG_WORK1, s, 24); // mvn r2, %[s], lsl #24 - MVN_rrLSRi(REG_WORK1, REG_WORK1, 24); // mvn r2, %[s], lsr #24 - AND_rrr(d, d, REG_WORK1); // and %[d], %[d], r2 -} -LENDFUNC(WRITE,NONE,2,raw_AND_b_rr,(RW1 d, RR1 s)) - -LOWFUNC(WRITE,NONE,2,raw_AND_l_rr,(RW4 d, RR4 s)) -{ - AND_rrr(d, d, s); -} -LENDFUNC(WRITE,NONE,2,raw_AND_l_rr,(RW4 d, RR4 s)) - -LOWFUNC(WRITE,NONE,2,raw_AND_l_ri,(RW4 d, IMM i)) -{ - AND_rri(d, d, i); -} -LENDFUNC(WRITE,NONE,2,raw_AND_l_ri,(RW4 d, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_AND_w_rr,(RW2 d, RR2 s)) -{ - MVN_rrLSLi(REG_WORK1, s, 16); // mvn r2, %[s], lsl #16 - MVN_rrLSRi(REG_WORK1, REG_WORK1, 16); // mvn r2, %[s], lsr #16 - AND_rrr(d, d, REG_WORK1); // and %[d], %[d], r2 -} -LENDFUNC(WRITE,NONE,2,raw_AND_w_rr,(RW2 d, RR2 s)) - -LOWFUNC(WRITE,NONE,2,raw_EOR_b_rr,(RW1 d, RR1 s)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTB_rr(REG_WORK1, s); // UXTH r2, %[s] -#else - AND_rri(REG_WORK1, s, 0xFF); // and r2, %[s], 0xFF -#endif - EOR_rrr(d, d, REG_WORK1); // eor %[d], %[d], r2 -} -LENDFUNC(WRITE,NONE,2,raw_EOR_b_rr,(RW1 d, RR1 s)) - -LOWFUNC(WRITE,NONE,2,raw_EOR_l_rr,(RW4 d, RR4 s)) -{ - EOR_rrr(d, d, s); // eors r7, r7, r6 -} -LENDFUNC(WRITE,NONE,2,raw_EOR_l_rr,(RW4 d, RR4 s)) - -LOWFUNC(WRITE,NONE,2,raw_EOR_w_rr,(RW2 d, RR2 s)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTH_rr(REG_WORK1, s); // UXTH r2, %[s] - EOR_rrr(d, d, REG_WORK1); // eor %[d], %[d], r2 -#else - LSL_rri(REG_WORK1, s, 16); // bic r2, %[s], #0xff000000 - EOR_rrrLSRi(d, d, REG_WORK1, 16); // orr %[d], %[d], r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_EOR_w_rr,(RW2 d, RR2 s)) - LOWFUNC(WRITE,NONE,2,raw_LDR_l_ri,(RW4 d, IMM i)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(i); - LDR_rRI(d, RPC_INDEX, offs); // ldr r2, [pc, #offs] -#else - LDR_rR(d, RPC_INDEX); - B_i(0); - emit_long(i); -#endif + uae_s32 offs = data_long_offs(i); + LDR_rRI(d, RPC_INDEX, offs); } -LENDFUNC(WRITE,NONE,2,raw_LDR_l_rr,(RW4 d, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_MOV_l_ri8,(RW4 d, IMM i)) -{ - MOV_ri(d, i); -} -LENDFUNC(WRITE,NONE,2,raw_MOV_l_ri8,(RW4 d, IMM i)) - -LOWFUNC(WRITE,NONE,2,raw_ORR_b_rr,(RW1 d, RR1 s)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTB_rr(REG_WORK1, s); // UXTH r2, %[s] -#else - AND_rri(REG_WORK1, s, 0xFF); // and r2, %[s], 0xFF -#endif - ORR_rrr(d, d, REG_WORK1); // orr %[d], %[d], r2 -} -LENDFUNC(WRITE,NONE,2,raw_ORR_b_rr,(RW1 d, RR1 s)) - -LOWFUNC(WRITE,NONE,2,raw_ORR_l_rr,(RW4 d, RR4 s)) -{ - ORR_rrr(d, d, s); -} -LENDFUNC(WRITE,NONE,2,raw_ORR_l_rr,(RW4 d, RR4 s)) - -LOWFUNC(WRITE,NONE,2,raw_ORR_w_rr,(RW2 d, RR2 s)) -{ -#if defined(ARMV6_ASSEMBLY) - UXTH_rr(REG_WORK1, s); // UXTH r2, %[s] - ORR_rrr(d, d, REG_WORK1); // orr %[d], %[d], r2 -#else - LSL_rri(REG_WORK1, s, 16); // bic r2, %[s], #0xff000000 - ORR_rrrLSRi(d, d, REG_WORK1, 16); // orr %[d], %[d], r2 -#endif -} -LENDFUNC(WRITE,NONE,2,raw_ORR_w_rr,(RW2 d, RR2 s)) - -LOWFUNC(WRITE,NONE,2,raw_ROR_l_ri,(RW4 r, IMM i)) -{ - ROR_rri(r, r, i); -} -LENDFUNC(WRITE,NONE,2,raw_ROR_l_ri,(RW4 r, IMM i)) +LENDFUNC(WRITE,NONE,2,raw_LDR_l_ri,(RW4 d, IMM i)) // // compuemu_support used raw calls // LOWFUNC(WRITE,RMW,2,compemu_raw_add_l_mi,(IMM d, IMM s)) { -#if defined(USE_DATA_BUFFER) data_check_end(8, 24); - long target = data_long(d, 24); - long offs = get_data_offset(target); + uae_s32 target = data_long(d, 24); + uae_s32 offs = get_data_offset(target); LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; d LDR_rR(REG_WORK2, REG_WORK1); // ldr r3, [r2] @@ -2565,172 +529,53 @@ LOWFUNC(WRITE,RMW,2,compemu_raw_add_l_mi,(IMM d, IMM s)) offs = get_data_offset(target); LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; d STR_rR(REG_WORK2, REG_WORK1); // str r3, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 20); // ldr r2, [pc, #20] ; - LDR_rR(REG_WORK2, REG_WORK1); // ldr r3, [r2] - - LDR_rRI(REG_WORK1, RPC_INDEX, 16); // ldr r2, [pc, #16] ; - - ADD_rrr(REG_WORK2, REG_WORK2, REG_WORK1); // adds r3, r3, r2 - - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - STR_rR(REG_WORK2, REG_WORK1); // str r3, [r2] - - B_i(1); // b - //: - emit_long(d); - //: - emit_long(s); - //: -#endif } LENDFUNC(WRITE,RMW,2,compemu_raw_add_l_mi,(IMM d, IMM s)) -LOWFUNC(WRITE,NONE,2,compemu_raw_and_l_ri,(RW4 d, IMM i)) +LOWFUNC(WRITE,NONE,2,compemu_raw_and_TAGMASK,(RW4 d)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(i); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; - AND_rrr(d, d, REG_WORK1); // ands %[d], %[d], r2 -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #16] ; - AND_rrr(d, d, REG_WORK1); // ands %[d], %[d], r2 - B_i(0); - emit_long(i); -#endif - + // TAGMASK is 0x0000ffff + BFC_rii(d, 16, 31); } -LENDFUNC(WRITE,NONE,2,compemu_raw_and_l_ri,(RW4 d, IMM i)) +LENDFUNC(WRITE,NONE,2,compemu_raw_and_TAGMASK,(RW4 d)) LOWFUNC(NONE,NONE,1,compemu_raw_bswap_32,(RW4 r)) { -#if defined(ARMV6_ASSEMBLY) REV_rr(r,r); // rev %[r],%[r] -#else - EOR_rrrRORi(REG_WORK1, r, r, 16); // eor r2, r6, r6, ror #16 - BIC_rri(REG_WORK1, REG_WORK1, 0xff0000); // bic r2, r2, #0xff0000 - ROR_rri(r, r, 8); // ror r6, r6, #8 - EOR_rrrLSRi(r, r, REG_WORK1, 8); // eor r6, r6, r2, lsr #8 -#endif } LENDFUNC(NONE,NONE,1,compemu_raw_bswap_32,(RW4 r)) -LOWFUNC(WRITE,NONE,2,compemu_raw_bt_l_ri,(RR4 r, IMM i)) -{ - int imm = (1 << (i & 0x1f)); - - MRS_CPSR(REG_WORK2); // mrs r3, CPSR - TST_ri(r, imm); // tst r6, #0x1000000 - CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); // bic r3, r3, #0x20000000 - CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); // orr r3, r3, #0x20000000 - MSR_CPSR_r(REG_WORK2); // msr CPSR_fc, r3 -} -LENDFUNC(WRITE,NONE,2,compemu_raw_bt_l_ri,(RR4 r, IMM i)) - -LOWFUNC(NONE,READ,5,compemu_raw_cmov_l_rm_indexed,(W4 d, IMM base, RR4 index, IMM factor, IMM cond)) -{ - int shft; - switch(factor) { - case 1: shft=0; break; - case 2: shft=1; break; - case 4: shft=2; break; - case 8: shft=3; break; - default: abort(); - } - - switch (cond) { - case 9: // LS - jit_unimplemented("cmov LS not implemented"); - abort(); - case 8: // HI - jit_unimplemented("cmov HI not implemented"); - abort(); - default: -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(base); - CC_LDR_rRI(cond, REG_WORK1, RPC_INDEX, offs); // ldrcc r2, [pc, #offs] ; - CC_LDR_rRR_LSLi(cond, d, REG_WORK1, index, shft); // ldrcc %[d], [r2, %[index], lsl #[shift]] -#else - CC_LDR_rRI(cond, REG_WORK1, RPC_INDEX, 4); // ldrcc r2, [pc, #4] ; - CC_LDR_rRR_LSLi(cond, d, REG_WORK1, index, shft); // ldrcc %[d], [r2, %[index], lsl #[shift]] - B_i(0); // b -#endif - break; - } -#if !defined(USE_DATA_BUFFER) - emit_long(base); // : - //: -#endif -} -LENDFUNC(NONE,READ,5,compemu_raw_cmov_l_rm_indexed,(W4 d, IMM base, RR4 index, IMM factor, IMM cond)) - LOWFUNC(WRITE,READ,2,compemu_raw_cmp_l_mi,(MEMR d, IMM s)) { -#if defined(USE_DATA_BUFFER) - data_check_end(8, 16); - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; d - LDR_rR(REG_WORK1, REG_WORK1); // ldr r2, [r2] + clobber_flags(); + + if(d >= (uae_u32) ®s && d < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 offs = data_long_offs(s); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + uae_s32 idx = d - (uae_u32) & regs; + LDR_rRI(REG_WORK1, R_REGSTRUCT, idx); + } else { + data_check_end(8, 16); + uae_s32 offs = data_long_offs(d); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + LDR_rR(REG_WORK1, REG_WORK1); - offs = data_long_offs(s); - LDR_rRI(REG_WORK2, RPC_INDEX, offs); // ldr r3, [pc, #offs] ; s - - CMP_rr(REG_WORK1, REG_WORK2); // cmp r2, r3 - -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 12); // ldr r2, [pc, #24] ; - LDR_rR(REG_WORK1, REG_WORK1); // ldr r2, [r2] - - LDR_rRI(REG_WORK2, RPC_INDEX, 8); // ldr r3, [pc, #20] ; - - CMP_rr(REG_WORK1, REG_WORK2); // cmp r2, r3 - - B_i(1); // b - //: - emit_long(d); - //: - emit_long(s); - //: -#endif + offs = data_long_offs(s); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + } + CMP_rr(REG_WORK1, REG_WORK2); } LENDFUNC(WRITE,READ,2,compemu_raw_cmp_l_mi,(MEMR d, IMM s)) -LOWFUNC(WRITE,READ,2,compemu_raw_cmp_l_mi8,(MEMR d, IMM s)) -{ -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 8); // ldr r2, [pc, #8] ; -#endif - - LDR_rR(REG_WORK1, REG_WORK1); // ldr r2, [r2] - CMP_ri(REG_WORK1, s); // cmp r2, r3 - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(d); - //: -#endif -} -LENDFUNC(WRITE,READ,2,compemu_raw_cmp_l_mi8,(MEMR d, IMM s)) - LOWFUNC(NONE,NONE,3,compemu_raw_lea_l_brr,(W4 d, RR4 s, IMM offset)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(offset); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; - ADD_rrr(d, s, REG_WORK1); // add r7, r6, r2 -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - ADD_rrr(d, s, REG_WORK1); // add r7, r6, r2 - - B_i(0); // b - //: - emit_long(offset); - //: -#endif + if(offset >= 0 && offset < 256) { + ADD_rri(d, s, offset); + } else { + uae_s32 offs = data_long_offs(offset); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + ADD_rrr(d, s, REG_WORK1); + } } LENDFUNC(NONE,NONE,3,compemu_raw_lea_l_brr,(W4 d, RR4 s, IMM offset)) @@ -2738,214 +583,174 @@ LOWFUNC(NONE,NONE,4,compemu_raw_lea_l_rr_indexed,(W4 d, RR4 s, RR4 index, IMM fa { int shft; switch(factor) { - case 1: shft=0; break; - case 2: shft=1; break; - case 4: shft=2; break; - case 8: shft=3; break; - default: abort(); + case 1: shft=0; break; + case 2: shft=1; break; + case 4: shft=2; break; + case 8: shft=3; break; + default: abort(); } - ADD_rrrLSLi(d, s, index, shft); // ADD R7,R6,R5,LSL #2 + ADD_rrrLSLi(d, s, index, shft); } LENDFUNC(NONE,NONE,4,compemu_raw_lea_l_rr_indexed,(W4 d, RR4 s, RR4 index, IMM factor)) LOWFUNC(NONE,WRITE,2,compemu_raw_mov_b_mr,(IMM d, RR1 s)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; - STRB_rR(s, REG_WORK1); // strb r6, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - STRB_rR(s, REG_WORK1); // strb r6, [r2] - - B_i(0); // b - //: - emit_long(d); - //: -#endif + if(d >= (uae_u32) ®s && d < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 idx = d - (uae_u32) & regs; + STRB_rRI(s, R_REGSTRUCT, idx); + } else { + uae_s32 offs = data_long_offs(d); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + STRB_rR(s, REG_WORK1); + } } LENDFUNC(NONE,WRITE,2,compemu_raw_mov_b_mr,(IMM d, RR1 s)) LOWFUNC(NONE,WRITE,2,compemu_raw_mov_l_mi,(MEMW d, IMM s)) { - // TODO: optimize imm - -#if defined(USE_DATA_BUFFER) - data_check_end(8, 12); - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; d - offs = data_long_offs(s); - LDR_rRI(REG_WORK2, RPC_INDEX, offs); // ldr r3, [pc, #offs] ; s - STR_rR(REG_WORK2, REG_WORK1); // str r3, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 8); // ldr r2, [pc, #8] ; - LDR_rRI(REG_WORK2, RPC_INDEX, 8); // ldr r3, [pc, #8] ; - STR_rR(REG_WORK2, REG_WORK1); // str r3, [r2] - - B_i(1); // b - emit_long(d); //: - emit_long(s); //: - //: -#endif + if(d >= (uae_u32) ®s && d < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 offs = data_long_offs(s); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + uae_s32 idx = d - (uae_u32) & regs; + STR_rRI(REG_WORK2, R_REGSTRUCT, idx); + } else { + data_check_end(8, 12); + uae_s32 offs = data_long_offs(d); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + offs = data_long_offs(s); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + STR_rR(REG_WORK2, REG_WORK1); + } } LENDFUNC(NONE,WRITE,2,compemu_raw_mov_l_mi,(MEMW d, IMM s)) LOWFUNC(NONE,WRITE,2,compemu_raw_mov_l_mr,(IMM d, RR4 s)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; - STR_rR(s, REG_WORK1); // str r3, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - STR_rR(s, REG_WORK1); // str r3, [r2] - - B_i(0); // b - //: - emit_long(d); - //: -#endif + if(d >= (uae_u32) ®s && d < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 idx = d - (uae_u32) & regs; + STR_rRI(s, R_REGSTRUCT, idx); + } else { + uae_s32 offs = data_long_offs(d); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + STR_rR(s, REG_WORK1); + } } LENDFUNC(NONE,WRITE,2,compemu_raw_mov_l_mr,(IMM d, RR4 s)) LOWFUNC(NONE,NONE,2,compemu_raw_mov_l_ri,(W4 d, IMM s)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(s); - LDR_rRI(d, RPC_INDEX, offs); // ldr %[d], [pc, #offs] ; -#else - LDR_rR(d, RPC_INDEX); // ldr %[d], [pc] ; - - B_i(0); // b - //: - emit_long(s); - //: -#endif + uae_s32 offs = data_long_offs(s); + LDR_rRI(d, RPC_INDEX, offs); } LENDFUNC(NONE,NONE,2,compemu_raw_mov_l_ri,(W4 d, IMM s)) LOWFUNC(NONE,READ,2,compemu_raw_mov_l_rm,(W4 d, MEMR s)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(s); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; - LDR_rR(d, REG_WORK1); // ldr r7, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - LDR_rR(d, REG_WORK1); // ldr r7, [r2] - - B_i(0); // b - emit_long(s); //: - //: -#endif + if(s >= (uae_u32) ®s && s < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 idx = s - (uae_u32) & regs; + LDR_rRI(d, R_REGSTRUCT, idx); + } else { + uae_s32 offs = data_long_offs(s); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + LDR_rR(d, REG_WORK1); + } } LENDFUNC(NONE,READ,2,compemu_raw_mov_l_rm,(W4 d, MEMR s)) LOWFUNC(NONE,NONE,2,compemu_raw_mov_l_rr,(W4 d, RR4 s)) { - MOV_rr(d, s); // mov %[d], %[s] + MOV_rr(d, s); } LENDFUNC(NONE,NONE,2,compemu_raw_mov_l_rr,(W4 d, RR4 s)) LOWFUNC(NONE,WRITE,2,compemu_raw_mov_w_mr,(IMM d, RR2 s)) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(d); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; - STRH_rR(s, REG_WORK1); // strh r3, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #4] ; - STRH_rR(s, REG_WORK1); // strh r3, [r2] - - B_i(0); // b - //: - emit_long(d); - //: -#endif + if(d >= (uae_u32) ®s && d < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 idx = d - (uae_u32) & regs; + STRH_rRI(s, R_REGSTRUCT, idx); + } else { + uae_s32 offs = data_long_offs(d); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + STRH_rR(s, REG_WORK1); + } } LENDFUNC(NONE,WRITE,2,compemu_raw_mov_w_mr,(IMM d, RR2 s)) LOWFUNC(WRITE,RMW,2,compemu_raw_sub_l_mi,(MEMRW d, IMM s)) { -#if defined(USE_DATA_BUFFER) - data_check_end(8, 24); - long target = data_long(d, 24); - long offs = get_data_offset(target); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; d - LDR_rR(REG_WORK2, REG_WORK1); // ldr r3, [r2] + clobber_flags(); - offs = data_long_offs(s); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; s - - SUBS_rrr(REG_WORK2, REG_WORK2, REG_WORK1); // subs r3, r3, r2 - - offs = get_data_offset(target); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; d - STR_rR(REG_WORK2, REG_WORK1); // str r3, [r2] -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 20); // ldr r2, [pc, #32] ; - LDR_rR(REG_WORK2, REG_WORK1); // ldr r3, [r2] - - LDR_rRI(REG_WORK1, RPC_INDEX, 16); // ldr r2, [pc, #28] ; - - SUBS_rrr(REG_WORK2, REG_WORK2, REG_WORK1); // subs r3, r3, r2 - - LDR_rRI(REG_WORK1, RPC_INDEX, 4); // ldr r2, [pc, #16] ; - STR_rR(REG_WORK2, REG_WORK1); // str r3, [r2] - - B_i(1); // b - //: - emit_long(d); - //: - emit_long(s); - //: -#endif + if(s >= 0 && s < 254) { + if(d >= (uae_u32) ®s && d < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 idx = d - (uae_u32) & regs; + LDR_rRI(REG_WORK2, R_REGSTRUCT, idx); + SUBS_rri(REG_WORK2, REG_WORK2, s); + STR_rRI(REG_WORK2, R_REGSTRUCT, idx); + } else { + uae_s32 offs = data_long_offs(d); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + LDR_rR(REG_WORK2, REG_WORK1); + SUBS_rri(REG_WORK2, REG_WORK2, s); + STR_rR(REG_WORK2, REG_WORK1); + } + } else { + if(d >= (uae_u32) ®s && d < ((uae_u32) ®s) + sizeof(struct regstruct)) { + uae_s32 idx = d - (uae_u32) & regs; + LDR_rRI(REG_WORK2, R_REGSTRUCT, idx); + + uae_s32 offs = data_long_offs(s); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + SUBS_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + STR_rRI(REG_WORK2, R_REGSTRUCT, idx); + } else { + data_check_end(8, 24); + uae_s32 target = data_long(d, 24); + uae_s32 offs = get_data_offset(target); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + LDR_rR(REG_WORK2, REG_WORK1); + + offs = data_long_offs(s); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + + SUBS_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + offs = get_data_offset(target); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + STR_rR(REG_WORK2, REG_WORK1); + } + } } LENDFUNC(WRITE,RMW,2,compemu_raw_sub_l_mi,(MEMRW d, IMM s)) LOWFUNC(WRITE,NONE,2,compemu_raw_test_l_rr,(RR4 d, RR4 s)) { - TST_rr(d, s); // tst r7, r6 + clobber_flags(); + TST_rr(d, s); } LENDFUNC(WRITE,NONE,2,compemu_raw_test_l_rr,(RR4 d, RR4 s)) LOWFUNC(NONE,NONE,2,compemu_raw_zero_extend_16_rr,(W4 d, RR2 s)) { -#if defined(ARMV6_ASSEMBLY) - UXTH_rr(d, s); // UXTH %[d], %[s] -#else - BIC_rri(d, s, 0xff000000); // bic %[d], %[s], #0xff000000 - BIC_rri(d, d, 0x00ff0000); // bic %[d], %[d], #0x00ff0000 -#endif + UXTH_rr(d, s); } LENDFUNC(NONE,NONE,2,compemu_raw_zero_extend_16_rr,(W4 d, RR2 s)) static inline void compemu_raw_call(uae_u32 t) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(t); - LDR_rRI(REG_WORK1, RPC_INDEX, offs); // ldr r2, [pc, #offs] ; -#else - LDR_rRI(REG_WORK1, RPC_INDEX, 12); // ldr r2, [pc, #12] ; -#endif - PUSH(RLR_INDEX); // push {lr} - BLX_r(REG_WORK1); // blx r2 - POP(RLR_INDEX); // pop {lr} - -#if !defined(USE_DATA_BUFFER) - B_i(0); // b - //: - emit_long(t); - //: -#endif + uae_s32 offs = data_long_offs(t); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + PUSH(RLR_INDEX); + BLX_r(REG_WORK1); + POP(RLR_INDEX); } static inline void compemu_raw_call_r(RR4 r) { - PUSH(RLR_INDEX); // push {lr} - BLX_r(r); // blx r0 - POP(RLR_INDEX); // pop {lr} + PUSH(RLR_INDEX); + BLX_r(r); + POP(RLR_INDEX); } static inline void compemu_raw_jcc_l_oponly(int cc) @@ -2980,23 +785,14 @@ static inline void compemu_raw_jcc_l_oponly(int cc) static inline void compemu_raw_jl(uae_u32 t) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(t); - CC_LDR_rRI(NATIVE_CC_LT, RPC_INDEX, RPC_INDEX, offs); // ldrlt pc, [pc, offs] -#else - CC_LDR_rR(NATIVE_CC_LT, RPC_INDEX, RPC_INDEX); // ldrlt pc, [pc] - - B_i(0); // b - //: - emit_long(t); - //: -#endif + uae_s32 offs = data_long_offs(t); + CC_LDR_rRI(NATIVE_CC_LT, RPC_INDEX, RPC_INDEX, offs); } static inline void compemu_raw_jmp(uae_u32 t) { - LDR_rR(REG_WORK1, RPC_INDEX); // ldr r2, [pc] - BX_r(REG_WORK1); // bx r2 + LDR_rR(REG_WORK1, RPC_INDEX); + BX_r(REG_WORK1); emit_long(t); } @@ -3004,15 +800,15 @@ static inline void compemu_raw_jmp_m_indexed(uae_u32 base, uae_u32 r, uae_u32 m) { int shft; switch(m) { - case 1: shft=0; break; - case 2: shft=1; break; - case 4: shft=2; break; - case 8: shft=3; break; - default: abort(); + case 1: shft=0; break; + case 2: shft=1; break; + case 4: shft=2; break; + case 8: shft=3; break; + default: abort(); } - LDR_rR(REG_WORK1, RPC_INDEX); // ldr r2, [pc] ; - LDR_rRR_LSLi(RPC_INDEX, REG_WORK1, r, shft); // ldr pc, [r2, r6, lsl #3] + LDR_rR(REG_WORK1, RPC_INDEX); + LDR_rRR_LSLi(RPC_INDEX, REG_WORK1, r, shft); emit_long(base); } @@ -3023,16 +819,8 @@ static inline void compemu_raw_jmp_r(RR4 r) static inline void compemu_raw_jnz(uae_u32 t) { -#if defined(USE_DATA_BUFFER) - long offs = data_long_offs(t); + uae_s32 offs = data_long_offs(t); CC_LDR_rRI(NATIVE_CC_NE, RPC_INDEX, RPC_INDEX, offs); // ldrne pc, [pc, offs] -#else - CC_LDR_rR(NATIVE_CC_NE, RPC_INDEX, RPC_INDEX); // ldrne pc, [pc] - - B_i(0); // b - emit_long(t); - //: -#endif } static inline void compemu_raw_jz_b_oponly(void) @@ -3052,3 +840,77 @@ static inline void compemu_raw_branch(IMM d) { B_i((d >> 2) - 1); } + + +// Optimize access to struct regstruct with r11 + +LOWFUNC(NONE,NONE,1,compemu_raw_init_r_regstruct,(IMM s)) +{ + uae_s32 offs = data_long_offs(s); + LDR_rRI(R_REGSTRUCT, RPC_INDEX, offs); +} +LENDFUNC(NONE,NONE,1,compemu_raw_init_r_regstruct,(IMM s)) + + +// Handle end of compiled block +LOWFUNC(NONE,NONE,2,compemu_raw_endblock_pc_inreg,(RR4 rr_pc, IMM cycles)) +{ + clobber_flags(); + + // countdown -= scaled_cycles(totcycles); + uae_s32 offs = (uae_u32)&countdown - (uae_u32)®s; + LDR_rRI(REG_WORK1, R_REGSTRUCT, offs); + if(cycles >= 0 && cycles < 256) { + SUBS_rri(REG_WORK1, REG_WORK1, cycles); + } else { + int offs2 = data_long_offs(cycles); + LDR_rRI(REG_WORK2, RPC_INDEX, offs2); + SUBS_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + } + STR_rRI(REG_WORK1, R_REGSTRUCT, offs); + CC_B_i(NATIVE_CC_MI, 3); + + BFC_rii(rr_pc, 16, 31); // apply TAGMASK + offs = data_long_offs((uintptr)cache_tags); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + LDR_rRR_LSLi(REG_WORK1, REG_WORK1, rr_pc, 2); + BX_r(REG_WORK1); + + offs = data_long_offs((uintptr)popall_do_nothing); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + BX_r(REG_WORK1); +} +LENDFUNC(NONE,NONE,2,compemu_raw_endblock_pc_inreg,(RR4 rr_pc, IMM cycles)) + + +LOWFUNC(NONE,NONE,2,compemu_raw_endblock_pc_isconst,(IMM cycles, IMM v)) +{ + clobber_flags(); + + // countdown -= scaled_cycles(totcycles); + uae_s32 offs = (uae_u32)&countdown - (uae_u32)®s; + LDR_rRI(REG_WORK1, R_REGSTRUCT, offs); + if(cycles >= 0 && cycles < 256) { + SUBS_rri(REG_WORK1, REG_WORK1, cycles); + } else { + int offs2 = data_long_offs(cycles); + LDR_rRI(REG_WORK2, RPC_INDEX, offs2); + SUBS_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + } + STR_rRI(REG_WORK1, R_REGSTRUCT, offs); + CC_B_i(NATIVE_CC_MI, 1); + + LDR_rRI(REG_WORK1, RPC_INDEX, 16); // get target + BX_r(REG_WORK1); + + offs = data_long_offs(v); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + offs = (uae_u32)®s.pc_p - (uae_u32)®s; + STR_rRI(REG_WORK1, R_REGSTRUCT, offs); + offs = data_long_offs((uintptr)popall_do_nothing); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + BX_r(REG_WORK1); + + // +} +LENDFUNC(NONE,NONE,2,compemu_raw_endblock_pc_isconst,(IMM cycles, IMM v)) diff --git a/src/jit/codegen_arm.h b/src/jit/codegen_arm.h index 660f28f3..491a9514 100644 --- a/src/jit/codegen_arm.h +++ b/src/jit/codegen_arm.h @@ -87,6 +87,9 @@ #define SHIFT_IMM(c) (0x02000000 | (IMM32((c)))) +#define UNSHIFTED_IMM8(c) (0x02000000 | (c)) +#define SHIFT_IMM8_ROR(c,r) (0x02000000 | (c) | ((r >> 1) << 8)) + #define SHIFT_REG(Rm) (Rm) #define SHIFT_LSL_i(Rm,s) ((Rm) | ((s) << 7)) #define SHIFT_LSL_r(Rm,Rs) ((Rm) | ((Rs) << 8) | 0x10) @@ -97,6 +100,7 @@ #define SHIFT_ROR_i(Rm,s) ((Rm) | ((s) << 7) | 0x60) #define SHIFT_ROR_r(Rm,Rs) ((Rm) | ((Rs) << 8) | 0x70) #define SHIFT_RRX(Rm) ((Rm) | 0x60) +#define SHIFT_PK(Rm,s) ((Rm) | ((s) << 7)) // Load/Store addressings #define ADR_ADD(v) ((1 << 23) | (v)) @@ -201,10 +205,16 @@ enum { /* ========================================================================= */ #define NOP() _W(0xe1a00000) +#define SETEND_BE() _W(0xf1010200) +#define SETEND_LE() _W(0xf1010000) /* Data processing instructions */ /* Opcodes Type 1 */ +// MOVcc rd,#i +#define CC_MOV_ri8(cc,Rd,i) _OP1(cc,_MOV,0,Rd,UNSHIFTED_IMM8(i)) +// MOVcc Rd,#i ROR #s +#define CC_MOV_ri8RORi(cc,Rd,i,s) _OP1(cc,_MOV,0,Rd,SHIFT_IMM8_ROR(i,s)) #define CC_MOV_ri(cc,Rd,i) _OP1(cc,_MOV,0,Rd,SHIFT_IMM(i)) #define CC_MOV_rr(cc,Rd,Rm) _OP1(cc,_MOV,0,Rd,SHIFT_REG(Rm)) #define CC_MOV_rrLSLi(cc,Rd,Rm,i) _OP1(cc,_MOV,0,Rd,SHIFT_LSL_i(Rm,i)) @@ -217,6 +227,10 @@ enum { #define CC_MOV_rrRORr(cc,Rd,Rm,Rs) _OP1(cc,_MOV,0,Rd,SHIFT_ROR_r(Rm,Rs)) #define CC_MOV_rrRRX(cc,Rd,Rm) _OP1(cc,_MOV,0,Rd,SHIFT_RRX(Rm)) +// MOV rd,#i +#define MOV_ri8(Rd,i) CC_MOV_ri8(NATIVE_CC_AL,Rd,i) +// MOV Rd,#i ROR #s +#define MOV_ri8RORi(Rd,i,s) CC_MOV_ri8RORi(NATIVE_CC_AL,Rd,i,s) #define MOV_ri(Rd,i) CC_MOV_ri(NATIVE_CC_AL,Rd,i) #define MOV_rr(Rd,Rm) CC_MOV_rr(NATIVE_CC_AL,Rd,Rm) #define MOV_rrLSLi(Rd,Rm,i) CC_MOV_rrLSLi(NATIVE_CC_AL,Rd,Rm,i) @@ -253,6 +267,10 @@ enum { #define MOVS_rrRORr(Rd,Rm,Rs) CC_MOVS_rrRORr(NATIVE_CC_AL,Rd,Rm,Rs) #define MOVS_rrRRX(Rd,Rm) CC_MOVS_rrRRX(NATIVE_CC_AL,Rd,Rm) +// MVNcc rd,#i +#define CC_MVN_ri8(cc,Rd,i) _OP1(cc,_MVN,0,Rd,UNSHIFTED_IMM8(i)) +// MVNcc Rd,#i ROR #s +#define CC_MVN_ri8RORi(cc,Rd,i,s) _OP1(cc,_MVN,0,Rd,SHIFT_IMM8_ROR(i,s)) #define CC_MVN_ri(cc,Rd,i) _OP1(cc,_MVN,0,Rd,SHIFT_IMM(i)) #define CC_MVN_rr(cc,Rd,Rm) _OP1(cc,_MVN,0,Rd,SHIFT_REG(Rm)) #define CC_MVN_rrLSLi(cc,Rd,Rm,i) _OP1(cc,_MVN,0,Rd,SHIFT_LSL_i(Rm,i)) @@ -265,6 +283,10 @@ enum { #define CC_MVN_rrRORr(cc,Rd,Rm,Rs) _OP1(cc,_MVN,0,Rd,SHIFT_ROR_r(Rm,Rs)) #define CC_MVN_rrRRX(cc,Rd,Rm) _OP1(cc,_MVN,0,Rd,SHIFT_RRX(Rm)) +// MVN rd,#i +#define MVN_ri8(Rd,i) CC_MVN_ri8(NATIVE_CC_AL,Rd,i) +// MVN Rd,#i ROR #s +#define MVN_ri8RORi(Rd,i,s) CC_MVN_ri8RORi(NATIVE_CC_AL,Rd,i,s) #define MVN_ri(Rd,i) CC_MVN_ri(NATIVE_CC_AL,Rd,i) #define MVN_rr(Rd,Rm) CC_MVN_rr(NATIVE_CC_AL,Rd,Rm) #define MVN_rrLSLi(Rd,Rm,i) CC_MVN_rrLSLi(NATIVE_CC_AL,Rd,Rm,i) @@ -591,6 +613,9 @@ enum { #define RSBS_rrrRORr(Rd,Rn,Rm,Rs) CC_RSBS_rrrRORr(NATIVE_CC_AL,Rd,Rn,Rm,Rs) #define RSBS_rrrRRX(Rd,Rn,Rm) CC_RSBS_rrrRRX(NATIVE_CC_AL,Rd,Rn,Rm) +#define CC_ADD_rri8(cc,Rd,Rn,i) _OP3(cc,_ADD,0,Rd,Rn,UNSHIFT_IMM8(i)) +#define CC_ADD_rri8RORi(cc,Rd,Rn,Rm,i) _OP3(cc,_ADD,0,Rd,Rn,SHIFT_IMM8_ROR(Rm,i)) + #define CC_ADD_rri(cc,Rd,Rn,i) _OP3(cc,_ADD,0,Rd,Rn,SHIFT_IMM(i)) #define CC_ADD_rrr(cc,Rd,Rn,Rm) _OP3(cc,_ADD,0,Rd,Rn,SHIFT_REG(Rm)) #define CC_ADD_rrrLSLi(cc,Rd,Rn,Rm,i) _OP3(cc,_ADD,0,Rd,Rn,SHIFT_LSL_i(Rm,i)) @@ -603,6 +628,9 @@ enum { #define CC_ADD_rrrRORr(cc,Rd,Rn,Rm,Rs) _OP3(cc,_ADD,0,Rd,Rn,SHIFT_ROR_r(Rm,Rs)) #define CC_ADD_rrrRRX(cc,Rd,Rn,Rm) _OP3(cc,_ADD,0,Rd,Rn,SHIFT_RRX(Rm)) +#define ADD_rri8(cc,Rd,Rn,i) CC_ADD_rri8(NATIVE_CC_AL,Rd,Rn,i) +#define ADD_rri8RORi(cc,Rd,Rn,Rm,i) CC_ADD_rri8RORi(NATIVE_CC_AL,Rd,Rn,Rm,i) + #define ADD_rri(Rd,Rn,i) CC_ADD_rri(NATIVE_CC_AL,Rd,Rn,i) #define ADD_rrr(Rd,Rn,Rm) CC_ADD_rrr(NATIVE_CC_AL,Rd,Rn,Rm) #define ADD_rrrLSLi(Rd,Rn,Rm,i) CC_ADD_rrrLSLi(NATIVE_CC_AL,Rd,Rn,Rm,i) @@ -783,6 +811,11 @@ enum { #define RSCS_rrrRORr(Rd,Rn,Rm,Rs) CC_RSCS_rrrRORr(NATIVE_CC_AL,Rd,Rn,Rm,Rs) #define RSCS_rrrRRX(Rd,Rn,Rm) CC_RSCS_rrrRRX(NATIVE_CC_AL,Rd,Rn,Rm) +// ORRcc Rd,Rn,#i +#define CC_ORR_rri8(cc,Rd,Rn,i) _OP3(cc,_ORR,0,Rd,Rn,UNSHIFTED_IMM8(i)) +// ORRcc Rd,Rn,#i ROR #s +#define CC_ORR_rri8RORi(cc,Rd,Rn,i,s) _OP3(cc,_ORR,0,Rd,Rn,SHIFT_IMM8_ROR(i,s)) + #define CC_ORR_rri(cc,Rd,Rn,i) _OP3(cc,_ORR,0,Rd,Rn,SHIFT_IMM(i)) #define CC_ORR_rrr(cc,Rd,Rn,Rm) _OP3(cc,_ORR,0,Rd,Rn,SHIFT_REG(Rm)) #define CC_ORR_rrrLSLi(cc,Rd,Rn,Rm,i) _OP3(cc,_ORR,0,Rd,Rn,SHIFT_LSL_i(Rm,i)) @@ -795,6 +828,11 @@ enum { #define CC_ORR_rrrRORr(cc,Rd,Rn,Rm,Rs) _OP3(cc,_ORR,0,Rd,Rn,SHIFT_ROR_r(Rm,Rs)) #define CC_ORR_rrrRRX(cc,Rd,Rn,Rm) _OP3(cc,_ORR,0,Rd,Rn,SHIFT_RRX(Rm)) +// ORR Rd,Rn,#i +#define ORR_rri8(Rd,Rn,i) CC_ORR_rri8(NATIVE_CC_AL,Rd,Rn,i) +// ORR Rd,Rn,#i ROR #s +#define ORR_rri8RORi(Rd,Rn,i,s) CC_ORR_rri8RORi(NATIVE_CC_AL,Rd,Rn,i,s) + #define ORR_rri(Rd,Rn,i) CC_ORR_rri(NATIVE_CC_AL,Rd,Rn,i) #define ORR_rrr(Rd,Rn,Rm) CC_ORR_rrr(NATIVE_CC_AL,Rd,Rn,Rm) #define ORR_rrrLSLi(Rd,Rn,Rm,i) CC_ORR_rrrLSLi(NATIVE_CC_AL,Rd,Rn,Rm,i) @@ -1153,6 +1191,8 @@ enum { #define SMULLS_rrrr(RdLo,RdHi,Rm,Rs) CC_SMULLS_rrrr(NATIVE_CC_AL,RdLo,RdHi,Rm,Rs) #define CC_MUL_rrr(cc, Rd, Rm, Rs) _W(((cc) << 28) | (0x00 << 20) | ((Rd) << 16) | ((Rs) << 8) | (0x9 << 4) | (Rm)) #define MUL_rrr(Rd, Rm, Rs) CC_MUL_rrr(NATIVE_CC_AL, Rd, Rm, Rs) +#define CC_MULS_rrr(cc, Rd, Rm, Rs) _W(((cc) << 28) | (0x01 << 20) | ((Rd) << 16) | ((Rs) << 8) | (0x9 << 4) | (Rm)) +#define MULS_rrr(Rd, Rm, Rs) CC_MULS_rrr(NATIVE_CC_AL, Rd, Rm, Rs) #define CC_UMULL_rrrr(cc, RdLo, RdHi, Rm, Rs) _W(((cc) << 28) | (0x08 << 20) | ((RdHi) << 16) | ((RdLo) << 12) | ((Rs) << 8) | (0x9 << 4) | (Rm)) #define UMULL_rrrr(RdLo,RdHi,Rm,Rs) CC_UMULL_rrrr(NATIVE_CC_AL,RdLo,RdHi,Rm,Rs) @@ -1181,6 +1221,7 @@ enum { #define ASRS_rrr(Rd,Rm,Rs) MOVS_rrASRr(Rd,Rm,Rs) #define RORS_rri(Rd,Rm,i) MOVS_rrRORi(Rd,Rm,i) #define RORS_rrr(Rd,Rm,Rs) MOVS_rrRORr(Rd,Rm,Rs) +#define RRXS_rr(Rd,Rm) MOVS_rrRRX(Rd,Rm) /* ARMV6 ops */ #define CC_SXTB_rr(cc,Rd,Rm) _W(((cc) << 28) | (0x6a << 20) | (0xf << 16) | ((Rd) << 12) | (0x7 << 4) | SHIFT_REG(Rm)) @@ -1241,10 +1282,14 @@ enum { #define REVSH_rr(Rd,Rm) CC_REVSH_rr(NATIVE_CC_AL,Rd,Rm) #define CC_PKHBT_rrr(cc,Rd,Rn,Rm) _W(((cc) << 28) | (0x68 << 20) | (Rn << 16) | (Rd << 12) | (0x1 << 4) | (Rm)) +#define CC_PKHBT_rrrLSLi(cc,Rd,Rn,Rm,s) _W(((cc) << 28) | (0x68 << 20) | (Rn << 16) | (Rd << 12) | (0x1 << 4) | SHIFT_PK(Rm, s)) #define PKHBT_rrr(Rd,Rn,Rm) CC_PKHBT_rrr(NATIVE_CC_AL,Rd,Rn,Rm) +#define PKHBT_rrrLSLi(Rd,Rn,Rm,s) CC_PKHBT_rrrLSLi(NATIVE_CC_AL,Rd,Rn,Rm,s) -#define CC_PKHTB_rrrASRi(cc,Rd,Rn,Rm,i) _W(((cc) << 28) | (0x68 << 20) | (Rn << 16) | (Rd << 12) | (0x5 << 4) | SHIFT_ASR_i(Rm,i)) -#define PKHTB_rrrASRi(Rd,Rn,Rm,i) CC_PKHTB_rrrASRi(NATIVE_CC_AL,Rd,Rn,Rm,i) +#define CC_PKHTB_rrrASRi(cc,Rd,Rn,Rm,s) _W(((cc) << 28) | (0x68 << 20) | (Rn << 16) | (Rd << 12) | (0x5 << 4) | SHIFT_PK(Rm, s)) +#define PKHTB_rrrASRi(Rd,Rn,Rm,s) CC_PKHTB_rrrASRi(NATIVE_CC_AL,Rd,Rn,Rm,s) +#define CC_PKHTB_rrr(cc,Rd,Rn,Rm) _W(((cc) << 28) | (0x68 << 20) | (Rn << 16) | (Rd << 12) | (0x5 << 4) | (Rm)) +#define PKHTB_rrr(Rd,Rn,Rm) CC_PKHTB_rrr(NATIVE_CC_AL,Rd,Rn,Rm) #define CC_SADD16_rrr(cc,Rd,Rn,Rm) _W(((cc) << 28) | (0x61 << 20) | (Rn << 16) | (Rd << 12) | (0xf1 << 4) | (Rm)) #define SADD16_rrr(Rd,Rn,Rm) CC_SADD16_rrr(NATIVE_CC_AL,Rd,Rn,Rm) @@ -1252,4 +1297,28 @@ enum { #define CC_BFI_rrii(cc,Rd,Rn,lsb,msb) _W(((cc) << 28) | (0x3e << 21) | ((msb) << 16) | (Rd << 12) | ((lsb) << 7) | (0x1 << 4) | (Rn)) #define BFI_rrii(Rd,Rn,lsb,msb) CC_BFI_rrii(NATIVE_CC_AL,Rd,Rn,lsb,msb) +#define CC_BFC_rii(cc,Rd,lsb,msb) _W(((cc) << 28) | (0x3e << 21) | ((msb) << 16) | (Rd << 12) | ((lsb) << 7) | (0x1 << 4) | 15) +#define BFC_rii(Rd,lsb,msb) CC_BFC_rii(NATIVE_CC_AL,Rd,lsb,msb) + +#define CC_UBFX_rrii(cc,Rd,Rn,lsb,width) _W(((cc) << 28) | (0x3f << 21) | ((width-1) << 16) | (Rd << 12) | ((lsb) << 7) | (0x5 << 4) | (Rn)) +#define UBFX_rrii(Rd,Rn,lsb,width) CC_UBFX_rrii(NATIVE_CC_AL,Rd,Rn,lsb,width) + + +// Floatingpoint + +#define CC_VMOV_sr(cc,Sd,Rn) _W(((cc) << 28) | (0x70 << 21) | (0 << 20) | (Sd << 16) | (Rn << 12) | (0x0a << 8) | (0x10)) +#define VMOV_sr(Sd,Rn) CC_VMOV_sr(NATIVE_CC_AL,Sd,Rn) + +#define CC_VMOV_rs(cc,Rd,Sn) _W(((cc) << 28) | (0x70 << 21) | (1 << 20) | (Sn << 16) | (Rd << 12) | (0x0a << 8) | (0x10)) +#define VMOV_rs(Rd,Sn) CC_VMOV_rs(NATIVE_CC_AL,Rd,Sn) + +#define CC_VCVT_f64_u32(cc,Dd,Sn) _W(((cc) << 28) | (0x1d << 23) | (0x7 << 19) | (0x0 << 16) | (Dd << 12) | (0xb << 8) | (0x4 << 4) | (Sn)) +#define VCVT_f64_u32(Dd,Sn) CC_VCVT_f64_u32(NATIVE_CC_AL,Dd,Sn) + +#define CC_VCVT_u32_f64(cc,Sd,Dn) _W(((cc) << 28) | (0x1d << 23) | (0x7 << 19) | (0x4 << 16) | (Sd << 12) | (0xb << 8) | (0xc << 4) | (Dn)) +#define VCVT_u32_f64(Sd,Dn) CC_VCVT_u32_f64(NATIVE_CC_AL,Sd,Dn) + +#define CC_VDIV_ddd(cc,Dd,Dn,Dm) _W(((cc) << 28) | (0x1d << 23) | (0x0 << 20) | (Dn << 16) | (Dd << 12) | (0xb << 8) | (0x0 << 4) | (Dm)) +#define VDIV_ddd(Dd,Dn,Dm) CC_VDIV_ddd(NATIVE_CC_AL,Dd,Dn,Dm) + #endif /* ARM_RTASM_H */ diff --git a/src/jit/compemu.cpp b/src/jit/compemu.cpp index 5e10745e..4f9f9c4f 100644 --- a/src/jit/compemu.cpp +++ b/src/jit/compemu.cpp @@ -27,11 +27,7 @@ extern void comp_fbcc_opp(); #ifdef PART_1 unsigned long REGPARAM2 op_0_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39,23 +35,18 @@ unsigned long REGPARAM2 op_0_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67,22 +58,17 @@ unsigned long REGPARAM2 op_10_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_18_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -93,23 +79,18 @@ unsigned long REGPARAM2 op_18_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -117,27 +98,22 @@ unsigned long REGPARAM2 op_20_0_comp_ff(uae_u32 opcode) /* OR */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_28_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -149,22 +125,17 @@ unsigned long REGPARAM2 op_28_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -175,13 +146,12 @@ unsigned long REGPARAM2 op_30_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_38_0_comp_ff(uae_u32 opcode) /* OR */ @@ -196,13 +166,12 @@ unsigned long REGPARAM2 op_38_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_39_0_comp_ff(uae_u32 opcode) /* OR */ @@ -217,22 +186,31 @@ unsigned long REGPARAM2 op_39_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_3c_0_comp_ff(uae_u32 opcode) /* ORSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int src = scratchie++; + mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + make_flags_live(); + jff_ORSR(ARM_CCR_MAP[src & 0xF], ((src & 0x10) >> 4)); + live_flags(); +}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_40_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -240,23 +218,18 @@ unsigned long REGPARAM2 op_40_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -268,22 +241,17 @@ unsigned long REGPARAM2 op_50_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_58_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -294,23 +262,18 @@ unsigned long REGPARAM2 op_58_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_60_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -318,27 +281,22 @@ unsigned long REGPARAM2 op_60_0_comp_ff(uae_u32 opcode) /* OR */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_68_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -350,22 +308,17 @@ unsigned long REGPARAM2 op_68_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_70_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -376,13 +329,12 @@ unsigned long REGPARAM2 op_70_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_78_0_comp_ff(uae_u32 opcode) /* OR */ @@ -397,13 +349,12 @@ unsigned long REGPARAM2 op_78_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_79_0_comp_ff(uae_u32 opcode) /* OR */ @@ -418,22 +369,17 @@ unsigned long REGPARAM2 op_79_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -441,23 +387,18 @@ unsigned long REGPARAM2 op_80_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -469,22 +410,17 @@ unsigned long REGPARAM2 op_90_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_98_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -495,23 +431,18 @@ unsigned long REGPARAM2 op_98_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a0_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -519,27 +450,22 @@ unsigned long REGPARAM2 op_a0_0_comp_ff(uae_u32 opcode) /* OR */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a8_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -551,22 +477,17 @@ unsigned long REGPARAM2 op_a8_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -577,13 +498,12 @@ unsigned long REGPARAM2 op_b0_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b8_0_comp_ff(uae_u32 opcode) /* OR */ @@ -598,13 +518,12 @@ unsigned long REGPARAM2 op_b8_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b9_0_comp_ff(uae_u32 opcode) /* OR */ @@ -619,60 +538,34 @@ unsigned long REGPARAM2 op_b9_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_100_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); +{ make_flags_live(); + jff_BTST_l(dst,src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_110_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -683,33 +576,16 @@ unsigned long REGPARAM2 op_110_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_118_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -719,72 +595,38 @@ unsigned long REGPARAM2 op_118_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_120_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_128_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -795,33 +637,16 @@ unsigned long REGPARAM2 op_128_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_130_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -831,28 +656,15 @@ unsigned long REGPARAM2 op_130_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_138_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -862,28 +674,15 @@ unsigned long REGPARAM2 op_138_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_139_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -893,28 +692,15 @@ unsigned long REGPARAM2 op_139_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13a_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -927,28 +713,15 @@ unsigned long REGPARAM2 op_13a_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13b_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -962,28 +735,15 @@ unsigned long REGPARAM2 op_13b_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13c_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -991,51 +751,25 @@ unsigned long REGPARAM2 op_13c_0_comp_ff(uae_u32 opcode) /* BTST */ { 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_140_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); +{ make_flags_live(); + jff_BCHG_l(dst,src); + live_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -1043,16 +777,8 @@ return 0; } unsigned long REGPARAM2 op_150_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1063,34 +789,17 @@ unsigned long REGPARAM2 op_150_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_158_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1100,74 +809,40 @@ unsigned long REGPARAM2 op_158_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_160_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_168_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1178,34 +853,17 @@ unsigned long REGPARAM2 op_168_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_170_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1215,29 +873,16 @@ unsigned long REGPARAM2 op_170_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_178_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef 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; @@ -1247,29 +892,16 @@ unsigned long REGPARAM2 op_178_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_179_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef 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; @@ -1279,123 +911,26 @@ unsigned long REGPARAM2 op_179_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_17a_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ -#ifdef 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_17b_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ -#ifdef 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=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); - 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; -} unsigned long REGPARAM2 op_180_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); +{ make_flags_live(); + jff_BCLR_l(dst,src); + live_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -1403,16 +938,8 @@ return 0; } unsigned long REGPARAM2 op_190_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1423,34 +950,17 @@ unsigned long REGPARAM2 op_190_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_198_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1460,74 +970,40 @@ unsigned long REGPARAM2 op_198_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1a0_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1a8_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1538,34 +1014,17 @@ unsigned long REGPARAM2 op_1a8_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1b0_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1575,29 +1034,16 @@ unsigned long REGPARAM2 op_1b0_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1b8_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef 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; @@ -1607,29 +1053,16 @@ unsigned long REGPARAM2 op_1b8_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1b9_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef 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; @@ -1639,123 +1072,26 @@ unsigned long REGPARAM2 op_1b9_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_1ba_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ -#ifdef 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_1bb_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ -#ifdef 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=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); - 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; -} unsigned long REGPARAM2 op_1c0_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); +{ make_flags_live(); + jff_BSET_l(dst,src); + live_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -1763,16 +1099,8 @@ return 0; } unsigned long REGPARAM2 op_1d0_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1783,34 +1111,17 @@ unsigned long REGPARAM2 op_1d0_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1d8_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1820,74 +1131,40 @@ unsigned long REGPARAM2 op_1d8_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1e0_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1e8_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1898,34 +1175,17 @@ unsigned long REGPARAM2 op_1e8_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1f0_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -1935,29 +1195,16 @@ unsigned long REGPARAM2 op_1f0_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1f8_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef 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; @@ -1967,29 +1214,16 @@ unsigned long REGPARAM2 op_1f8_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1f9_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef 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; @@ -1999,100 +1233,16 @@ unsigned long REGPARAM2 op_1f9_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_1fa_0_comp_ff(uae_u32 opcode) /* BSET */ -{ -#ifdef 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_1fb_0_comp_ff(uae_u32 opcode) /* BSET */ -{ -#ifdef 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=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); - 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; -} unsigned long REGPARAM2 op_200_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2100,23 +1250,18 @@ unsigned long REGPARAM2 op_200_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_210_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2128,22 +1273,17 @@ unsigned long REGPARAM2 op_210_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_218_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2154,23 +1294,18 @@ unsigned long REGPARAM2 op_218_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_220_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2178,27 +1313,22 @@ unsigned long REGPARAM2 op_220_0_comp_ff(uae_u32 opcode) /* AND */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_228_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2210,22 +1340,17 @@ unsigned long REGPARAM2 op_228_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_230_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2236,13 +1361,12 @@ unsigned long REGPARAM2 op_230_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_238_0_comp_ff(uae_u32 opcode) /* AND */ @@ -2257,13 +1381,12 @@ unsigned long REGPARAM2 op_238_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_239_0_comp_ff(uae_u32 opcode) /* AND */ @@ -2278,22 +1401,31 @@ unsigned long REGPARAM2 op_239_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_23c_0_comp_ff(uae_u32 opcode) /* ANDSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int src = scratchie++; + mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + make_flags_live(); + jff_ANDSR(ARM_CCR_MAP[src & 0xF], (src & 0x10)); + live_flags(); +}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_240_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2301,23 +1433,18 @@ unsigned long REGPARAM2 op_240_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_250_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2329,22 +1456,17 @@ unsigned long REGPARAM2 op_250_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_258_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2355,23 +1477,18 @@ unsigned long REGPARAM2 op_258_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_260_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2379,27 +1496,22 @@ unsigned long REGPARAM2 op_260_0_comp_ff(uae_u32 opcode) /* AND */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_268_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2411,22 +1523,17 @@ unsigned long REGPARAM2 op_268_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_270_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2437,13 +1544,12 @@ unsigned long REGPARAM2 op_270_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_278_0_comp_ff(uae_u32 opcode) /* AND */ @@ -2458,13 +1564,12 @@ unsigned long REGPARAM2 op_278_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_279_0_comp_ff(uae_u32 opcode) /* AND */ @@ -2479,22 +1584,17 @@ unsigned long REGPARAM2 op_279_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_280_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2502,23 +1602,18 @@ unsigned long REGPARAM2 op_280_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_290_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2530,22 +1625,17 @@ unsigned long REGPARAM2 op_290_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_298_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2556,23 +1646,18 @@ unsigned long REGPARAM2 op_298_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2a0_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2580,27 +1665,22 @@ unsigned long REGPARAM2 op_2a0_0_comp_ff(uae_u32 opcode) /* AND */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2a8_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2612,22 +1692,17 @@ unsigned long REGPARAM2 op_2a8_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2b0_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2638,13 +1713,12 @@ unsigned long REGPARAM2 op_2b0_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2b8_0_comp_ff(uae_u32 opcode) /* AND */ @@ -2659,13 +1733,12 @@ unsigned long REGPARAM2 op_2b8_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2b9_0_comp_ff(uae_u32 opcode) /* AND */ @@ -2680,22 +1753,17 @@ unsigned long REGPARAM2 op_2b9_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_400_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2703,25 +1771,19 @@ unsigned long REGPARAM2 op_400_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_410_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2733,24 +1795,18 @@ unsigned long REGPARAM2 op_410_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_418_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2761,25 +1817,19 @@ unsigned long REGPARAM2 op_418_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_420_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2787,29 +1837,23 @@ unsigned long REGPARAM2 op_420_0_comp_ff(uae_u32 opcode) /* SUB */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_428_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2821,24 +1865,18 @@ unsigned long REGPARAM2 op_428_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_430_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2849,15 +1887,13 @@ unsigned long REGPARAM2 op_430_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_438_0_comp_ff(uae_u32 opcode) /* SUB */ @@ -2872,15 +1908,13 @@ unsigned long REGPARAM2 op_438_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_439_0_comp_ff(uae_u32 opcode) /* SUB */ @@ -2895,24 +1929,18 @@ unsigned long REGPARAM2 op_439_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_440_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2920,25 +1948,19 @@ unsigned long REGPARAM2 op_440_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_450_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2950,24 +1972,18 @@ unsigned long REGPARAM2 op_450_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_458_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -2978,25 +1994,19 @@ unsigned long REGPARAM2 op_458_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_460_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3004,29 +2014,23 @@ unsigned long REGPARAM2 op_460_0_comp_ff(uae_u32 opcode) /* SUB */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_468_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3038,24 +2042,18 @@ unsigned long REGPARAM2 op_468_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_470_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3066,15 +2064,13 @@ unsigned long REGPARAM2 op_470_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_478_0_comp_ff(uae_u32 opcode) /* SUB */ @@ -3089,15 +2085,13 @@ unsigned long REGPARAM2 op_478_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_479_0_comp_ff(uae_u32 opcode) /* SUB */ @@ -3112,24 +2106,18 @@ unsigned long REGPARAM2 op_479_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_480_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3137,25 +2125,19 @@ unsigned long REGPARAM2 op_480_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_490_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3167,24 +2149,18 @@ unsigned long REGPARAM2 op_490_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_498_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3195,25 +2171,19 @@ unsigned long REGPARAM2 op_498_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a0_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3221,29 +2191,23 @@ unsigned long REGPARAM2 op_4a0_0_comp_ff(uae_u32 opcode) /* SUB */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a8_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3255,24 +2219,18 @@ unsigned long REGPARAM2 op_4a8_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4b0_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3283,15 +2241,13 @@ unsigned long REGPARAM2 op_4b0_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4b8_0_comp_ff(uae_u32 opcode) /* SUB */ @@ -3306,15 +2262,13 @@ unsigned long REGPARAM2 op_4b8_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4b9_0_comp_ff(uae_u32 opcode) /* SUB */ @@ -3329,24 +2283,18 @@ unsigned long REGPARAM2 op_4b9_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_600_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3354,25 +2302,19 @@ unsigned long REGPARAM2 op_600_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_610_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3384,24 +2326,18 @@ unsigned long REGPARAM2 op_610_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_618_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3412,25 +2348,19 @@ unsigned long REGPARAM2 op_618_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_620_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3438,29 +2368,23 @@ unsigned long REGPARAM2 op_620_0_comp_ff(uae_u32 opcode) /* ADD */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_628_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3472,24 +2396,18 @@ unsigned long REGPARAM2 op_628_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_630_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3500,15 +2418,13 @@ unsigned long REGPARAM2 op_630_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_638_0_comp_ff(uae_u32 opcode) /* ADD */ @@ -3523,15 +2439,13 @@ unsigned long REGPARAM2 op_638_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_639_0_comp_ff(uae_u32 opcode) /* ADD */ @@ -3546,24 +2460,18 @@ unsigned long REGPARAM2 op_639_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_640_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3571,25 +2479,19 @@ unsigned long REGPARAM2 op_640_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_650_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3601,24 +2503,18 @@ unsigned long REGPARAM2 op_650_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_658_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3629,25 +2525,19 @@ unsigned long REGPARAM2 op_658_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_660_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3655,29 +2545,23 @@ unsigned long REGPARAM2 op_660_0_comp_ff(uae_u32 opcode) /* ADD */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_668_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3689,24 +2573,18 @@ unsigned long REGPARAM2 op_668_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_670_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3717,15 +2595,13 @@ unsigned long REGPARAM2 op_670_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_678_0_comp_ff(uae_u32 opcode) /* ADD */ @@ -3740,15 +2616,13 @@ unsigned long REGPARAM2 op_678_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_679_0_comp_ff(uae_u32 opcode) /* ADD */ @@ -3763,24 +2637,18 @@ unsigned long REGPARAM2 op_679_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_680_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3788,25 +2656,19 @@ unsigned long REGPARAM2 op_680_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_690_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3818,24 +2680,18 @@ unsigned long REGPARAM2 op_690_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_698_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3846,25 +2702,19 @@ unsigned long REGPARAM2 op_698_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6a0_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3872,29 +2722,23 @@ unsigned long REGPARAM2 op_6a0_0_comp_ff(uae_u32 opcode) /* ADD */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6a8_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3906,24 +2750,18 @@ unsigned long REGPARAM2 op_6a8_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6b0_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -3934,15 +2772,13 @@ unsigned long REGPARAM2 op_6b0_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6b8_0_comp_ff(uae_u32 opcode) /* ADD */ @@ -3957,15 +2793,13 @@ unsigned long REGPARAM2 op_6b8_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6b9_0_comp_ff(uae_u32 opcode) /* ADD */ @@ -3980,24 +2814,18 @@ unsigned long REGPARAM2 op_6b9_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_800_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4005,28 +2833,15 @@ unsigned long REGPARAM2 op_800_0_comp_ff(uae_u32 opcode) /* BTST */ { 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(); +{ make_flags_live(); + jff_BTST_l(dst,src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_810_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4038,28 +2853,15 @@ unsigned long REGPARAM2 op_810_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_818_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4070,29 +2872,16 @@ unsigned long REGPARAM2 op_818_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_820_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4100,33 +2889,20 @@ unsigned long REGPARAM2 op_820_0_comp_ff(uae_u32 opcode) /* BTST */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_828_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4138,28 +2914,15 @@ unsigned long REGPARAM2 op_828_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_830_0_comp_ff(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4170,18 +2933,9 @@ unsigned long REGPARAM2 op_830_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -4197,18 +2951,9 @@ unsigned long REGPARAM2 op_838_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -4224,18 +2969,9 @@ unsigned long REGPARAM2 op_839_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -4254,18 +2990,9 @@ unsigned long REGPARAM2 op_83a_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -4285,18 +3012,9 @@ unsigned long REGPARAM2 op_83b_0_comp_ff(uae_u32 opcode) /* BTST */ 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -4310,28 +3028,15 @@ unsigned long REGPARAM2 op_83c_0_comp_ff(uae_u32 opcode) /* BTST */ mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { 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(); +{ make_flags_live(); + jff_BTST_b(dst,src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_840_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4339,18 +3044,9 @@ unsigned long REGPARAM2 op_840_0_comp_ff(uae_u32 opcode) /* BCHG */ { 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(); +{ make_flags_live(); + jff_BCHG_l(dst,src); + live_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -4358,11 +3054,7 @@ return 0; } unsigned long REGPARAM2 op_850_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4374,29 +3066,16 @@ unsigned long REGPARAM2 op_850_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_858_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4407,30 +3086,17 @@ unsigned long REGPARAM2 op_858_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_860_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4438,34 +3104,21 @@ unsigned long REGPARAM2 op_860_0_comp_ff(uae_u32 opcode) /* BCHG */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_868_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4477,29 +3130,16 @@ unsigned long REGPARAM2 op_868_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_870_0_comp_ff(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4510,18 +3150,9 @@ unsigned long REGPARAM2 op_870_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -4538,18 +3169,9 @@ unsigned long REGPARAM2 op_878_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -4566,92 +3188,16 @@ unsigned long REGPARAM2 op_879_0_comp_ff(uae_u32 opcode) /* BCHG */ 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(); +{ make_flags_live(); + jff_BCHG_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_87a_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_87b_0_comp_ff(uae_u32 opcode) /* BCHG */ -{ - 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=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); - 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; -} unsigned long REGPARAM2 op_880_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4659,18 +3205,9 @@ unsigned long REGPARAM2 op_880_0_comp_ff(uae_u32 opcode) /* BCLR */ { 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(); +{ make_flags_live(); + jff_BCLR_l(dst,src); + live_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -4678,11 +3215,7 @@ return 0; } unsigned long REGPARAM2 op_890_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4694,29 +3227,16 @@ unsigned long REGPARAM2 op_890_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_898_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4727,30 +3247,17 @@ unsigned long REGPARAM2 op_898_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8a0_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4758,34 +3265,21 @@ unsigned long REGPARAM2 op_8a0_0_comp_ff(uae_u32 opcode) /* BCLR */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8a8_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4797,29 +3291,16 @@ unsigned long REGPARAM2 op_8a8_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8b0_0_comp_ff(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4830,18 +3311,9 @@ unsigned long REGPARAM2 op_8b0_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -4858,18 +3330,9 @@ unsigned long REGPARAM2 op_8b8_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -4886,92 +3349,16 @@ unsigned long REGPARAM2 op_8b9_0_comp_ff(uae_u32 opcode) /* BCLR */ 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(); +{ make_flags_live(); + jff_BCLR_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_8ba_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_8bb_0_comp_ff(uae_u32 opcode) /* BCLR */ -{ - 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=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); - 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; -} unsigned long REGPARAM2 op_8c0_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -4979,18 +3366,9 @@ unsigned long REGPARAM2 op_8c0_0_comp_ff(uae_u32 opcode) /* BSET */ { 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(); +{ make_flags_live(); + jff_BSET_l(dst,src); + live_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -4998,11 +3376,7 @@ return 0; } unsigned long REGPARAM2 op_8d0_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5014,29 +3388,16 @@ unsigned long REGPARAM2 op_8d0_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8d8_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5047,30 +3408,17 @@ unsigned long REGPARAM2 op_8d8_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8e0_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5078,34 +3426,21 @@ unsigned long REGPARAM2 op_8e0_0_comp_ff(uae_u32 opcode) /* BSET */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8e8_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5117,29 +3452,16 @@ unsigned long REGPARAM2 op_8e8_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8f0_0_comp_ff(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5150,18 +3472,9 @@ unsigned long REGPARAM2 op_8f0_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -5178,18 +3491,9 @@ unsigned long REGPARAM2 op_8f8_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -5206,92 +3510,16 @@ unsigned long REGPARAM2 op_8f9_0_comp_ff(uae_u32 opcode) /* BSET */ 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(); +{ make_flags_live(); + jff_BSET_b(dst,src); + live_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_8fa_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_8fb_0_comp_ff(uae_u32 opcode) /* BSET */ -{ - 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=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); - 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; -} unsigned long REGPARAM2 op_a00_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5299,23 +3527,18 @@ unsigned long REGPARAM2 op_a00_0_comp_ff(uae_u32 opcode) /* EOR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a10_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5327,22 +3550,17 @@ unsigned long REGPARAM2 op_a10_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a18_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5353,23 +3571,18 @@ unsigned long REGPARAM2 op_a18_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a20_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5377,27 +3590,22 @@ unsigned long REGPARAM2 op_a20_0_comp_ff(uae_u32 opcode) /* EOR */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a28_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5409,22 +3617,17 @@ unsigned long REGPARAM2 op_a28_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a30_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5435,13 +3638,12 @@ unsigned long REGPARAM2 op_a30_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a38_0_comp_ff(uae_u32 opcode) /* EOR */ @@ -5456,13 +3658,12 @@ unsigned long REGPARAM2 op_a38_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a39_0_comp_ff(uae_u32 opcode) /* EOR */ @@ -5477,22 +3678,31 @@ unsigned long REGPARAM2 op_a39_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_a3c_0_comp_ff(uae_u32 opcode) /* EORSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int src = scratchie++; + mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); + make_flags_live(); + jff_EORSR(ARM_CCR_MAP[src & 0xF], ((src & 0x10) >> 4)); + live_flags(); +}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a40_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5500,23 +3710,18 @@ unsigned long REGPARAM2 op_a40_0_comp_ff(uae_u32 opcode) /* EOR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a50_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5528,22 +3733,17 @@ unsigned long REGPARAM2 op_a50_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a58_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5554,23 +3754,18 @@ unsigned long REGPARAM2 op_a58_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a60_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5578,27 +3773,22 @@ unsigned long REGPARAM2 op_a60_0_comp_ff(uae_u32 opcode) /* EOR */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a68_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5610,22 +3800,17 @@ unsigned long REGPARAM2 op_a68_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a70_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5636,13 +3821,12 @@ unsigned long REGPARAM2 op_a70_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a78_0_comp_ff(uae_u32 opcode) /* EOR */ @@ -5657,13 +3841,12 @@ unsigned long REGPARAM2 op_a78_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a79_0_comp_ff(uae_u32 opcode) /* EOR */ @@ -5678,22 +3861,17 @@ unsigned long REGPARAM2 op_a79_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a80_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5701,23 +3879,18 @@ unsigned long REGPARAM2 op_a80_0_comp_ff(uae_u32 opcode) /* EOR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a90_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5729,25 +3902,17 @@ unsigned long REGPARAM2 op_a90_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -#endif - -#ifdef PART_2 unsigned long REGPARAM2 op_a98_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5758,23 +3923,18 @@ unsigned long REGPARAM2 op_a98_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_aa0_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5782,27 +3942,22 @@ unsigned long REGPARAM2 op_aa0_0_comp_ff(uae_u32 opcode) /* EOR */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_aa8_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5814,22 +3969,17 @@ unsigned long REGPARAM2 op_aa8_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ab0_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5840,13 +3990,12 @@ unsigned long REGPARAM2 op_ab0_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ab8_0_comp_ff(uae_u32 opcode) /* EOR */ @@ -5861,13 +4010,12 @@ unsigned long REGPARAM2 op_ab8_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ab9_0_comp_ff(uae_u32 opcode) /* EOR */ @@ -5882,22 +4030,20 @@ unsigned long REGPARAM2 op_ab9_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } +#endif + +#ifdef PART_2 unsigned long REGPARAM2 op_c00_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5905,22 +4051,16 @@ unsigned long REGPARAM2 op_c00_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c10_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5932,22 +4072,16 @@ unsigned long REGPARAM2 op_c10_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c18_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5958,23 +4092,17 @@ unsigned long REGPARAM2 op_c18_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c20_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -5982,27 +4110,21 @@ unsigned long REGPARAM2 op_c20_0_comp_ff(uae_u32 opcode) /* CMP */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c28_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6014,22 +4136,16 @@ unsigned long REGPARAM2 op_c28_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c30_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6040,12 +4156,10 @@ unsigned long REGPARAM2 op_c30_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6061,12 +4175,10 @@ unsigned long REGPARAM2 op_c38_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6082,12 +4194,10 @@ unsigned long REGPARAM2 op_c39_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6106,12 +4216,10 @@ unsigned long REGPARAM2 op_c3a_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6131,22 +4239,16 @@ unsigned long REGPARAM2 op_c3b_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c40_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6154,22 +4256,16 @@ unsigned long REGPARAM2 op_c40_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c50_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6181,22 +4277,16 @@ unsigned long REGPARAM2 op_c50_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c58_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6207,23 +4297,17 @@ unsigned long REGPARAM2 op_c58_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); + arm_ADD_l_ri8(dstreg+8,2); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c60_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6231,27 +4315,21 @@ unsigned long REGPARAM2 op_c60_0_comp_ff(uae_u32 opcode) /* CMP */ { 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); + arm_SUB_l_ri8(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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c68_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6263,22 +4341,16 @@ unsigned long REGPARAM2 op_c68_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c70_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6289,12 +4361,10 @@ unsigned long REGPARAM2 op_c70_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6310,12 +4380,10 @@ unsigned long REGPARAM2 op_c78_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6331,12 +4399,10 @@ unsigned long REGPARAM2 op_c79_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6355,12 +4421,10 @@ unsigned long REGPARAM2 op_c7a_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6380,22 +4444,16 @@ unsigned long REGPARAM2 op_c7b_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c80_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6403,22 +4461,16 @@ unsigned long REGPARAM2 op_c80_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c90_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6430,22 +4482,16 @@ unsigned long REGPARAM2 op_c90_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c98_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6456,23 +4502,17 @@ unsigned long REGPARAM2 op_c98_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); + arm_ADD_l_ri8(dstreg+8,4); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ca0_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6480,27 +4520,21 @@ unsigned long REGPARAM2 op_ca0_0_comp_ff(uae_u32 opcode) /* CMP */ { 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); + arm_SUB_l_ri8(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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ca8_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6512,22 +4546,16 @@ unsigned long REGPARAM2 op_ca8_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_cb0_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6538,12 +4566,10 @@ unsigned long REGPARAM2 op_cb0_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6559,12 +4585,10 @@ unsigned long REGPARAM2 op_cb8_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6580,12 +4604,10 @@ unsigned long REGPARAM2 op_cb9_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6604,12 +4626,10 @@ unsigned long REGPARAM2 op_cba_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -6629,61 +4649,36 @@ unsigned long REGPARAM2 op_cbb_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1000_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1010_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6694,34 +4689,19 @@ unsigned long REGPARAM2 op_1010_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1018_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6730,75 +4710,45 @@ unsigned long REGPARAM2 op_1018_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1020_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1028_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6809,34 +4759,19 @@ unsigned long REGPARAM2 op_1028_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1030_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6846,29 +4781,18 @@ unsigned long REGPARAM2 op_1030_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1038_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6878,29 +4802,18 @@ unsigned long REGPARAM2 op_1038_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1039_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6910,29 +4823,18 @@ unsigned long REGPARAM2 op_1039_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_103a_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6944,29 +4846,18 @@ unsigned long REGPARAM2 op_103a_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_103b_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -6979,29 +4870,18 @@ unsigned long REGPARAM2 op_103b_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_103c_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7009,34 +4889,19 @@ unsigned long REGPARAM2 op_103c_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_b(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1080_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7045,27 +4910,17 @@ unsigned long REGPARAM2 op_1080_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1090_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7078,27 +4933,17 @@ unsigned long REGPARAM2 op_1090_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1098_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7107,37 +4952,27 @@ unsigned long REGPARAM2 op_1098_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -7145,27 +4980,17 @@ unsigned long REGPARAM2 op_10a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7178,27 +5003,17 @@ unsigned long REGPARAM2 op_10a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7210,22 +5025,16 @@ unsigned long REGPARAM2 op_10b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7237,22 +5046,16 @@ unsigned long REGPARAM2 op_10b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7264,22 +5067,16 @@ unsigned long REGPARAM2 op_10b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7293,22 +5090,16 @@ unsigned long REGPARAM2 op_10ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7323,22 +5114,16 @@ unsigned long REGPARAM2 op_10bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7348,27 +5133,17 @@ unsigned long REGPARAM2 op_10bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7376,28 +5151,18 @@ unsigned long REGPARAM2 op_10c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7409,28 +5174,18 @@ unsigned long REGPARAM2 op_10d0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7439,65 +5194,45 @@ unsigned long REGPARAM2 op_10d8_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7509,28 +5244,18 @@ unsigned long REGPARAM2 op_10e8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7541,23 +5266,17 @@ unsigned long REGPARAM2 op_10f0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7568,23 +5287,17 @@ unsigned long REGPARAM2 op_10f8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7595,23 +5308,17 @@ unsigned long REGPARAM2 op_10f9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7624,23 +5331,17 @@ unsigned long REGPARAM2 op_10fa_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7654,23 +5355,17 @@ unsigned long REGPARAM2 op_10fb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7679,58 +5374,38 @@ unsigned long REGPARAM2 op_10fc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1100_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1110_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7741,30 +5416,20 @@ unsigned long REGPARAM2 op_1110_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1118_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7773,67 +5438,47 @@ unsigned long REGPARAM2 op_1118_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1120_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1128_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7844,30 +5489,20 @@ unsigned long REGPARAM2 op_1128_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1130_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7877,25 +5512,19 @@ unsigned long REGPARAM2 op_1130_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1138_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7905,25 +5534,19 @@ unsigned long REGPARAM2 op_1138_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1139_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7933,25 +5556,19 @@ unsigned long REGPARAM2 op_1139_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_113a_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7963,25 +5580,19 @@ unsigned long REGPARAM2 op_113a_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_113b_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -7994,25 +5605,19 @@ unsigned long REGPARAM2 op_113b_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_113c_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8020,30 +5625,20 @@ unsigned long REGPARAM2 op_113c_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1140_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8052,27 +5647,17 @@ unsigned long REGPARAM2 op_1140_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1150_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8085,27 +5670,17 @@ unsigned long REGPARAM2 op_1150_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1158_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8114,37 +5689,27 @@ unsigned long REGPARAM2 op_1158_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1160_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -8152,27 +5717,17 @@ unsigned long REGPARAM2 op_1160_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1168_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8185,27 +5740,17 @@ unsigned long REGPARAM2 op_1168_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1170_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8217,22 +5762,16 @@ unsigned long REGPARAM2 op_1170_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1178_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8244,22 +5783,16 @@ unsigned long REGPARAM2 op_1178_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1179_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8271,22 +5804,16 @@ unsigned long REGPARAM2 op_1179_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_117a_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8300,22 +5827,16 @@ unsigned long REGPARAM2 op_117a_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_117b_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8330,22 +5851,16 @@ unsigned long REGPARAM2 op_117b_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_117c_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8355,27 +5870,17 @@ unsigned long REGPARAM2 op_117c_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1180_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8383,27 +5888,17 @@ unsigned long REGPARAM2 op_1180_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1190_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8415,27 +5910,17 @@ unsigned long REGPARAM2 op_1190_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1198_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8444,63 +5929,43 @@ unsigned long REGPARAM2 op_1198_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8512,27 +5977,17 @@ unsigned long REGPARAM2 op_11a8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8543,22 +5998,16 @@ unsigned long REGPARAM2 op_11b0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8569,22 +6018,16 @@ unsigned long REGPARAM2 op_11b8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8595,22 +6038,16 @@ unsigned long REGPARAM2 op_11b9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8623,22 +6060,16 @@ unsigned long REGPARAM2 op_11ba_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8652,22 +6083,16 @@ unsigned long REGPARAM2 op_11bb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8676,22 +6101,16 @@ unsigned long REGPARAM2 op_11bc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8699,22 +6118,16 @@ unsigned long REGPARAM2 op_11c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8726,22 +6139,16 @@ unsigned long REGPARAM2 op_11d0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8750,53 +6157,41 @@ unsigned long REGPARAM2 op_11d8_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8808,22 +6203,16 @@ unsigned long REGPARAM2 op_11e8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8834,13 +6223,11 @@ unsigned long REGPARAM2 op_11f0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11f8_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -8855,13 +6242,11 @@ unsigned long REGPARAM2 op_11f8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11f9_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -8876,13 +6261,11 @@ unsigned long REGPARAM2 op_11f9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11fa_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -8899,13 +6282,11 @@ unsigned long REGPARAM2 op_11fa_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11fb_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -8923,13 +6304,11 @@ unsigned long REGPARAM2 op_11fb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11fc_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -8942,22 +6321,16 @@ unsigned long REGPARAM2 op_11fc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8965,22 +6338,16 @@ unsigned long REGPARAM2 op_13c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -8992,22 +6359,16 @@ unsigned long REGPARAM2 op_13d0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9016,53 +6377,41 @@ unsigned long REGPARAM2 op_13d8_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9074,22 +6423,16 @@ unsigned long REGPARAM2 op_13e8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9100,13 +6443,11 @@ unsigned long REGPARAM2 op_13f0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13f8_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -9121,13 +6462,11 @@ unsigned long REGPARAM2 op_13f8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13f9_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -9142,13 +6481,11 @@ unsigned long REGPARAM2 op_13f9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13fa_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -9165,13 +6502,11 @@ unsigned long REGPARAM2 op_13fa_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13fb_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -9189,13 +6524,11 @@ unsigned long REGPARAM2 op_13fb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13fc_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -9208,61 +6541,36 @@ unsigned long REGPARAM2 op_13fc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); + writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2000_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2008_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9271,34 +6579,19 @@ unsigned long REGPARAM2 op_2008_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2010_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9309,34 +6602,19 @@ unsigned long REGPARAM2 op_2010_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2018_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9345,75 +6623,45 @@ unsigned long REGPARAM2 op_2018_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2020_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2028_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9424,34 +6672,19 @@ unsigned long REGPARAM2 op_2028_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2030_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9461,29 +6694,18 @@ unsigned long REGPARAM2 op_2030_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2038_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9493,29 +6715,18 @@ unsigned long REGPARAM2 op_2038_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2039_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9525,29 +6736,18 @@ unsigned long REGPARAM2 op_2039_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_203a_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9559,29 +6759,18 @@ unsigned long REGPARAM2 op_203a_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_203b_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9594,29 +6783,18 @@ unsigned long REGPARAM2 op_203b_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_203c_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9624,42 +6802,26 @@ unsigned long REGPARAM2 op_203c_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2040_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9667,16 +6829,8 @@ return 0; } unsigned long REGPARAM2 op_2048_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9685,8 +6839,7 @@ unsigned long REGPARAM2 op_2048_0_comp_ff(uae_u32 opcode) /* MOVEA */ if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9694,16 +6847,8 @@ return 0; } unsigned long REGPARAM2 op_2050_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9714,8 +6859,7 @@ unsigned long REGPARAM2 op_2050_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9723,16 +6867,8 @@ return 0; } unsigned long REGPARAM2 op_2058_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9741,10 +6877,9 @@ unsigned long REGPARAM2 op_2058_0_comp_ff(uae_u32 opcode) /* MOVEA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9752,29 +6887,20 @@ return 0; } unsigned long REGPARAM2 op_2060_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9782,16 +6908,8 @@ return 0; } unsigned long REGPARAM2 op_2068_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9802,8 +6920,7 @@ unsigned long REGPARAM2 op_2068_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9811,16 +6928,8 @@ return 0; } unsigned long REGPARAM2 op_2070_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9830,8 +6939,7 @@ unsigned long REGPARAM2 op_2070_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9839,11 +6947,7 @@ return 0; } unsigned long REGPARAM2 op_2078_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9853,8 +6957,7 @@ unsigned long REGPARAM2 op_2078_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9862,11 +6965,7 @@ return 0; } unsigned long REGPARAM2 op_2079_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9876,8 +6975,7 @@ unsigned long REGPARAM2 op_2079_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9885,11 +6983,7 @@ return 0; } unsigned long REGPARAM2 op_207a_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9901,8 +6995,7 @@ unsigned long REGPARAM2 op_207a_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9910,11 +7003,7 @@ return 0; } unsigned long REGPARAM2 op_207b_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9927,8 +7016,7 @@ unsigned long REGPARAM2 op_207b_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9936,11 +7024,7 @@ return 0; } unsigned long REGPARAM2 op_207c_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9948,8 +7032,7 @@ unsigned long REGPARAM2 op_207c_0_comp_ff(uae_u32 opcode) /* MOVEA */ { 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); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -9957,16 +7040,8 @@ return 0; } unsigned long REGPARAM2 op_2080_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -9975,27 +7050,17 @@ unsigned long REGPARAM2 op_2080_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2088_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10006,27 +7071,17 @@ unsigned long REGPARAM2 op_2088_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2090_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10039,27 +7094,17 @@ unsigned long REGPARAM2 op_2090_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2098_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10068,37 +7113,27 @@ unsigned long REGPARAM2 op_2098_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -10106,27 +7141,17 @@ unsigned long REGPARAM2 op_20a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10139,27 +7164,17 @@ unsigned long REGPARAM2 op_20a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10171,22 +7186,16 @@ unsigned long REGPARAM2 op_20b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10198,22 +7207,16 @@ unsigned long REGPARAM2 op_20b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10225,22 +7228,16 @@ unsigned long REGPARAM2 op_20b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10254,22 +7251,16 @@ unsigned long REGPARAM2 op_20ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10284,22 +7275,16 @@ unsigned long REGPARAM2 op_20bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10309,27 +7294,17 @@ unsigned long REGPARAM2 op_20bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10337,28 +7312,18 @@ unsigned long REGPARAM2 op_20c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10368,28 +7333,18 @@ unsigned long REGPARAM2 op_20c8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10401,28 +7356,18 @@ unsigned long REGPARAM2 op_20d0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10431,65 +7376,45 @@ unsigned long REGPARAM2 op_20d8_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10501,28 +7426,18 @@ unsigned long REGPARAM2 op_20e8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10533,23 +7448,17 @@ unsigned long REGPARAM2 op_20f0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10560,23 +7469,17 @@ unsigned long REGPARAM2 op_20f8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10587,23 +7490,17 @@ unsigned long REGPARAM2 op_20f9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10616,23 +7513,17 @@ unsigned long REGPARAM2 op_20fa_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10646,23 +7537,17 @@ unsigned long REGPARAM2 op_20fb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10671,58 +7556,38 @@ unsigned long REGPARAM2 op_20fc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2100_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2108_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10731,30 +7596,20 @@ unsigned long REGPARAM2 op_2108_0_comp_ff(uae_u32 opcode) /* MOVE */ if (dodgy) mov_l_rr(src,srcreg+8); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2110_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10765,30 +7620,20 @@ unsigned long REGPARAM2 op_2110_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2118_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10797,67 +7642,47 @@ unsigned long REGPARAM2 op_2118_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2120_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2128_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10868,30 +7693,20 @@ unsigned long REGPARAM2 op_2128_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2130_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10901,25 +7716,19 @@ unsigned long REGPARAM2 op_2130_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2138_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10929,25 +7738,19 @@ unsigned long REGPARAM2 op_2138_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2139_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10957,25 +7760,19 @@ unsigned long REGPARAM2 op_2139_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_213a_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -10987,25 +7784,19 @@ unsigned long REGPARAM2 op_213a_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_213b_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11018,25 +7809,19 @@ unsigned long REGPARAM2 op_213b_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_213c_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11044,30 +7829,20 @@ unsigned long REGPARAM2 op_213c_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2140_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11076,27 +7851,17 @@ unsigned long REGPARAM2 op_2140_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2148_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11107,27 +7872,17 @@ unsigned long REGPARAM2 op_2148_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2150_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11140,27 +7895,17 @@ unsigned long REGPARAM2 op_2150_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2158_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11169,37 +7914,27 @@ unsigned long REGPARAM2 op_2158_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2160_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -11207,27 +7942,17 @@ unsigned long REGPARAM2 op_2160_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2168_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11240,27 +7965,17 @@ unsigned long REGPARAM2 op_2168_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2170_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11272,22 +7987,16 @@ unsigned long REGPARAM2 op_2170_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2178_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11299,199 +8008,145 @@ unsigned long REGPARAM2 op_2178_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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=start_pc+((char *)comp_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(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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=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(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_2180_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=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(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_2188_0_comp_ff(uae_u32 opcode) /* MOVE */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dstreg = (opcode >> 9) & 7; + uae_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(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } #endif #ifdef PART_3 -unsigned long REGPARAM2 op_2179_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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 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; -} -unsigned long REGPARAM2 op_217a_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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 srca=scratchie++; - uae_u32 address=start_pc+((char *)comp_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; -} -unsigned long REGPARAM2 op_217b_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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 pctmp=scratchie++; - int srca=scratchie++; - uae_u32 address=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; -} -unsigned long REGPARAM2 op_217c_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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,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; -} -unsigned long REGPARAM2 op_2180_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else - uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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++; - 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; -} -unsigned long REGPARAM2 op_2188_0_comp_ff(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else - uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (opcode >> 9) & 7; -#endif - uae_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; -} unsigned long REGPARAM2 op_2190_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11503,27 +8158,17 @@ unsigned long REGPARAM2 op_2190_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2198_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11532,63 +8177,43 @@ unsigned long REGPARAM2 op_2198_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11600,27 +8225,17 @@ unsigned long REGPARAM2 op_21a8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11631,22 +8246,16 @@ unsigned long REGPARAM2 op_21b0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11657,22 +8266,16 @@ unsigned long REGPARAM2 op_21b8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11683,22 +8286,16 @@ unsigned long REGPARAM2 op_21b9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11711,22 +8308,16 @@ unsigned long REGPARAM2 op_21ba_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11740,22 +8331,16 @@ unsigned long REGPARAM2 op_21bb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11764,22 +8349,16 @@ unsigned long REGPARAM2 op_21bc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11787,22 +8366,16 @@ unsigned long REGPARAM2 op_21c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11812,22 +8385,16 @@ unsigned long REGPARAM2 op_21c8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11839,22 +8406,16 @@ unsigned long REGPARAM2 op_21d0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11863,53 +8424,41 @@ unsigned long REGPARAM2 op_21d8_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11921,22 +8470,16 @@ unsigned long REGPARAM2 op_21e8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -11947,13 +8490,11 @@ unsigned long REGPARAM2 op_21f0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21f8_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -11968,13 +8509,11 @@ unsigned long REGPARAM2 op_21f8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21f9_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -11989,13 +8528,11 @@ unsigned long REGPARAM2 op_21f9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21fa_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -12012,13 +8549,11 @@ unsigned long REGPARAM2 op_21fa_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21fb_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -12036,13 +8571,11 @@ unsigned long REGPARAM2 op_21fb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21fc_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -12055,22 +8588,16 @@ unsigned long REGPARAM2 op_21fc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12078,22 +8605,16 @@ unsigned long REGPARAM2 op_23c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12103,22 +8624,16 @@ unsigned long REGPARAM2 op_23c8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12130,22 +8645,16 @@ unsigned long REGPARAM2 op_23d0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12154,53 +8663,41 @@ unsigned long REGPARAM2 op_23d8_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12212,22 +8709,16 @@ unsigned long REGPARAM2 op_23e8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12238,13 +8729,11 @@ unsigned long REGPARAM2 op_23f0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23f8_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -12259,13 +8748,11 @@ unsigned long REGPARAM2 op_23f8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23f9_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -12280,13 +8767,11 @@ unsigned long REGPARAM2 op_23f9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23fa_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -12303,13 +8788,11 @@ unsigned long REGPARAM2 op_23fa_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23fb_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -12327,13 +8810,11 @@ unsigned long REGPARAM2 op_23fb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23fc_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -12346,61 +8827,36 @@ unsigned long REGPARAM2 op_23fc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); + writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3000_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3008_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12409,34 +8865,19 @@ unsigned long REGPARAM2 op_3008_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3010_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12447,34 +8888,19 @@ unsigned long REGPARAM2 op_3010_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3018_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12483,75 +8909,45 @@ unsigned long REGPARAM2 op_3018_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3020_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3028_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12562,34 +8958,19 @@ unsigned long REGPARAM2 op_3028_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3030_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12599,29 +8980,18 @@ unsigned long REGPARAM2 op_3030_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3038_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12631,29 +9001,18 @@ unsigned long REGPARAM2 op_3038_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3039_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12663,29 +9022,18 @@ unsigned long REGPARAM2 op_3039_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_303a_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12697,29 +9045,18 @@ unsigned long REGPARAM2 op_303a_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_303b_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12732,29 +9069,18 @@ unsigned long REGPARAM2 op_303b_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_303c_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12762,42 +9088,26 @@ unsigned long REGPARAM2 op_303c_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_w(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3040_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -12805,16 +9115,8 @@ return 0; } unsigned long REGPARAM2 op_3048_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12823,8 +9125,7 @@ unsigned long REGPARAM2 op_3048_0_comp_ff(uae_u32 opcode) /* MOVEA */ if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -12832,16 +9133,8 @@ return 0; } unsigned long REGPARAM2 op_3050_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12852,8 +9145,7 @@ unsigned long REGPARAM2 op_3050_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -12861,16 +9153,8 @@ return 0; } unsigned long REGPARAM2 op_3058_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12879,10 +9163,9 @@ unsigned long REGPARAM2 op_3058_0_comp_ff(uae_u32 opcode) /* MOVEA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -12890,29 +9173,20 @@ return 0; } unsigned long REGPARAM2 op_3060_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -12920,16 +9194,8 @@ return 0; } unsigned long REGPARAM2 op_3068_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12940,8 +9206,7 @@ unsigned long REGPARAM2 op_3068_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -12949,16 +9214,8 @@ return 0; } unsigned long REGPARAM2 op_3070_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12968,8 +9225,7 @@ unsigned long REGPARAM2 op_3070_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -12977,11 +9233,7 @@ return 0; } unsigned long REGPARAM2 op_3078_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -12991,8 +9243,7 @@ unsigned long REGPARAM2 op_3078_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -13000,11 +9251,7 @@ return 0; } unsigned long REGPARAM2 op_3079_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13014,8 +9261,7 @@ unsigned long REGPARAM2 op_3079_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -13023,11 +9269,7 @@ return 0; } unsigned long REGPARAM2 op_307a_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13039,8 +9281,7 @@ unsigned long REGPARAM2 op_307a_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -13048,11 +9289,7 @@ return 0; } unsigned long REGPARAM2 op_307b_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13065,8 +9302,7 @@ unsigned long REGPARAM2 op_307b_0_comp_ff(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -13074,11 +9310,7 @@ return 0; } unsigned long REGPARAM2 op_307c_0_comp_ff(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13086,8 +9318,7 @@ unsigned long REGPARAM2 op_307c_0_comp_ff(uae_u32 opcode) /* MOVEA */ { 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); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -13095,16 +9326,8 @@ return 0; } unsigned long REGPARAM2 op_3080_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13113,27 +9336,17 @@ unsigned long REGPARAM2 op_3080_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3088_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13144,27 +9357,17 @@ unsigned long REGPARAM2 op_3088_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3090_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13177,27 +9380,17 @@ unsigned long REGPARAM2 op_3090_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3098_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13206,37 +9399,27 @@ unsigned long REGPARAM2 op_3098_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -13244,27 +9427,17 @@ unsigned long REGPARAM2 op_30a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13277,27 +9450,17 @@ unsigned long REGPARAM2 op_30a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13309,22 +9472,16 @@ unsigned long REGPARAM2 op_30b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13336,22 +9493,16 @@ unsigned long REGPARAM2 op_30b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13363,22 +9514,16 @@ unsigned long REGPARAM2 op_30b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13392,22 +9537,16 @@ unsigned long REGPARAM2 op_30ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13422,22 +9561,16 @@ unsigned long REGPARAM2 op_30bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13447,27 +9580,17 @@ unsigned long REGPARAM2 op_30bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13475,28 +9598,18 @@ unsigned long REGPARAM2 op_30c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13506,28 +9619,18 @@ unsigned long REGPARAM2 op_30c8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13539,28 +9642,18 @@ unsigned long REGPARAM2 op_30d0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13569,65 +9662,45 @@ unsigned long REGPARAM2 op_30d8_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13639,28 +9712,18 @@ unsigned long REGPARAM2 op_30e8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13671,23 +9734,17 @@ unsigned long REGPARAM2 op_30f0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13698,23 +9755,17 @@ unsigned long REGPARAM2 op_30f8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13725,23 +9776,17 @@ unsigned long REGPARAM2 op_30f9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13754,23 +9799,17 @@ unsigned long REGPARAM2 op_30fa_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13784,23 +9823,17 @@ unsigned long REGPARAM2 op_30fb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13809,58 +9842,38 @@ unsigned long REGPARAM2 op_30fc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3100_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3108_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13869,30 +9882,20 @@ unsigned long REGPARAM2 op_3108_0_comp_ff(uae_u32 opcode) /* MOVE */ if (dodgy) mov_l_rr(src,srcreg+8); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3110_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13903,30 +9906,20 @@ unsigned long REGPARAM2 op_3110_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3118_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -13935,67 +9928,47 @@ unsigned long REGPARAM2 op_3118_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(srcreg+8,2); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3120_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3128_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14006,30 +9979,20 @@ unsigned long REGPARAM2 op_3128_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3130_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14039,25 +10002,19 @@ unsigned long REGPARAM2 op_3130_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3138_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14067,25 +10024,19 @@ unsigned long REGPARAM2 op_3138_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3139_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14095,25 +10046,19 @@ unsigned long REGPARAM2 op_3139_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_313a_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14125,25 +10070,19 @@ unsigned long REGPARAM2 op_313a_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_313b_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14156,25 +10095,19 @@ unsigned long REGPARAM2 op_313b_0_comp_ff(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_313c_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14182,30 +10115,20 @@ unsigned long REGPARAM2 op_313c_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3140_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14214,27 +10137,17 @@ unsigned long REGPARAM2 op_3140_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3148_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14245,27 +10158,17 @@ unsigned long REGPARAM2 op_3148_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3150_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14278,27 +10181,17 @@ unsigned long REGPARAM2 op_3150_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3158_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14307,37 +10200,27 @@ unsigned long REGPARAM2 op_3158_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3160_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -14345,27 +10228,17 @@ unsigned long REGPARAM2 op_3160_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3168_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14378,27 +10251,17 @@ unsigned long REGPARAM2 op_3168_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3170_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14410,22 +10273,16 @@ unsigned long REGPARAM2 op_3170_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3178_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14437,22 +10294,16 @@ unsigned long REGPARAM2 op_3178_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3179_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14464,22 +10315,16 @@ unsigned long REGPARAM2 op_3179_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_317a_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14493,22 +10338,16 @@ unsigned long REGPARAM2 op_317a_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_317b_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14523,22 +10362,16 @@ unsigned long REGPARAM2 op_317b_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_317c_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14548,27 +10381,17 @@ unsigned long REGPARAM2 op_317c_0_comp_ff(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3180_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14576,27 +10399,17 @@ unsigned long REGPARAM2 op_3180_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3188_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14606,27 +10419,17 @@ unsigned long REGPARAM2 op_3188_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3190_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14638,27 +10441,17 @@ unsigned long REGPARAM2 op_3190_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3198_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14667,63 +10460,43 @@ unsigned long REGPARAM2 op_3198_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14735,27 +10508,17 @@ unsigned long REGPARAM2 op_31a8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14766,22 +10529,16 @@ unsigned long REGPARAM2 op_31b0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14792,22 +10549,16 @@ unsigned long REGPARAM2 op_31b8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14818,22 +10569,16 @@ unsigned long REGPARAM2 op_31b9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14846,22 +10591,16 @@ unsigned long REGPARAM2 op_31ba_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14875,22 +10614,16 @@ unsigned long REGPARAM2 op_31bb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14899,22 +10632,16 @@ unsigned long REGPARAM2 op_31bc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14922,22 +10649,16 @@ unsigned long REGPARAM2 op_31c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14947,22 +10668,16 @@ unsigned long REGPARAM2 op_31c8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14974,22 +10689,16 @@ unsigned long REGPARAM2 op_31d0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -14998,53 +10707,41 @@ unsigned long REGPARAM2 op_31d8_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15056,22 +10753,16 @@ unsigned long REGPARAM2 op_31e8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15082,13 +10773,11 @@ unsigned long REGPARAM2 op_31f0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31f8_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15103,13 +10792,11 @@ unsigned long REGPARAM2 op_31f8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31f9_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15124,13 +10811,11 @@ unsigned long REGPARAM2 op_31f9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31fa_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15147,13 +10832,11 @@ unsigned long REGPARAM2 op_31fa_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31fb_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15171,13 +10854,11 @@ unsigned long REGPARAM2 op_31fb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31fc_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15190,22 +10871,16 @@ unsigned long REGPARAM2 op_31fc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15213,22 +10888,16 @@ unsigned long REGPARAM2 op_33c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15238,22 +10907,16 @@ unsigned long REGPARAM2 op_33c8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15265,22 +10928,16 @@ unsigned long REGPARAM2 op_33d0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15289,53 +10946,41 @@ unsigned long REGPARAM2 op_33d8_0_comp_ff(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15347,22 +10992,16 @@ unsigned long REGPARAM2 op_33e8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15373,13 +11012,11 @@ unsigned long REGPARAM2 op_33f0_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33f8_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15394,13 +11031,11 @@ unsigned long REGPARAM2 op_33f8_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33f9_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15415,13 +11050,11 @@ unsigned long REGPARAM2 op_33f9_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33fa_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15438,13 +11071,11 @@ unsigned long REGPARAM2 op_33fa_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33fb_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15462,13 +11093,11 @@ unsigned long REGPARAM2 op_33fb_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33fc_0_comp_ff(uae_u32 opcode) /* MOVE */ @@ -15481,62 +11110,34 @@ unsigned long REGPARAM2 op_33fc_0_comp_ff(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); + writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4000_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_b(dst,src); + live_flags(); + 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(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4010_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15546,40 +11147,18 @@ unsigned long REGPARAM2 op_4010_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4018_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15588,85 +11167,41 @@ unsigned long REGPARAM2 op_4018_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4020_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); -}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4028_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15676,40 +11211,18 @@ unsigned long REGPARAM2 op_4028_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4030_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15718,31 +11231,13 @@ unsigned long REGPARAM2 op_4030_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4038_0_comp_ff(uae_u32 opcode) /* NEGX */ @@ -15755,31 +11250,13 @@ unsigned long REGPARAM2 op_4038_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4039_0_comp_ff(uae_u32 opcode) /* NEGX */ @@ -15792,80 +11269,36 @@ unsigned long REGPARAM2 op_4039_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4040_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_w(dst,src); + live_flags(); + 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(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4050_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15875,40 +11308,18 @@ unsigned long REGPARAM2 op_4050_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4058_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -15917,85 +11328,41 @@ unsigned long REGPARAM2 op_4058_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + arm_ADD_l_ri8(srcreg+8,2); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4060_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); -}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4068_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16005,40 +11372,18 @@ unsigned long REGPARAM2 op_4068_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4070_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16047,31 +11392,13 @@ unsigned long REGPARAM2 op_4070_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4078_0_comp_ff(uae_u32 opcode) /* NEGX */ @@ -16084,31 +11411,13 @@ unsigned long REGPARAM2 op_4078_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4079_0_comp_ff(uae_u32 opcode) /* NEGX */ @@ -16121,80 +11430,36 @@ unsigned long REGPARAM2 op_4079_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4080_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_l(dst,src); + live_flags(); + 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(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4090_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16204,40 +11469,18 @@ unsigned long REGPARAM2 op_4090_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4098_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16246,85 +11489,41 @@ unsigned long REGPARAM2 op_4098_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + arm_ADD_l_ri8(srcreg+8,4); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_40a0_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); -}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_40a8_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16334,40 +11533,18 @@ unsigned long REGPARAM2 op_40a8_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_40b0_0_comp_ff(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16376,31 +11553,13 @@ unsigned long REGPARAM2 op_40b0_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_40b8_0_comp_ff(uae_u32 opcode) /* NEGX */ @@ -16413,31 +11572,13 @@ unsigned long REGPARAM2 op_40b8_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_40b9_0_comp_ff(uae_u32 opcode) /* NEGX */ @@ -16450,45 +11591,19 @@ unsigned long REGPARAM2 op_40b9_0_comp_ff(uae_u32 opcode) /* NEGX */ 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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ int dst=scratchie++; + make_flags_live(); + jff_NEGX_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_41d0_0_comp_ff(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16504,16 +11619,8 @@ return 0; } unsigned long REGPARAM2 op_41e8_0_comp_ff(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16529,16 +11636,8 @@ return 0; } unsigned long REGPARAM2 op_41f0_0_comp_ff(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16553,11 +11652,7 @@ return 0; } unsigned long REGPARAM2 op_41f8_0_comp_ff(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16572,11 +11667,7 @@ return 0; } unsigned long REGPARAM2 op_41f9_0_comp_ff(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16591,11 +11682,7 @@ return 0; } unsigned long REGPARAM2 op_41fa_0_comp_ff(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16612,11 +11699,7 @@ return 0; } unsigned long REGPARAM2 op_41fb_0_comp_ff(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16634,35 +11717,24 @@ return 0; } unsigned long REGPARAM2 op_4200_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + if(srcreg!=tmp) + mov_b_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4210_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16670,75 +11742,54 @@ unsigned long REGPARAM2 op_4210_0_comp_ff(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4218_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4220_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4228_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16746,38 +11797,28 @@ unsigned long REGPARAM2 op_4228_0_comp_ff(uae_u32 opcode) /* CLR */ { int srca=scratchie++; 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4230_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -16789,14 +11830,11 @@ unsigned long REGPARAM2 op_4238_0_comp_ff(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -16808,48 +11846,34 @@ unsigned long REGPARAM2 op_4239_0_comp_ff(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4240_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + if(srcreg!=tmp) + mov_w_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4250_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16857,75 +11881,54 @@ unsigned long REGPARAM2 op_4250_0_comp_ff(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4258_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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); + arm_ADD_l_ri8(srcreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4260_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4268_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -16933,38 +11936,28 @@ unsigned long REGPARAM2 op_4268_0_comp_ff(uae_u32 opcode) /* CLR */ { int srca=scratchie++; 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4270_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -16976,14 +11969,11 @@ unsigned long REGPARAM2 op_4278_0_comp_ff(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -16995,48 +11985,34 @@ unsigned long REGPARAM2 op_4279_0_comp_ff(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4280_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4290_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17044,75 +12020,54 @@ unsigned long REGPARAM2 op_4290_0_comp_ff(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4298_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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); + arm_ADD_l_ri8(srcreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_42a0_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_42a8_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17120,38 +12075,28 @@ unsigned long REGPARAM2 op_42a8_0_comp_ff(uae_u32 opcode) /* CLR */ { int srca=scratchie++; 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_42b0_0_comp_ff(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -17163,14 +12108,11 @@ unsigned long REGPARAM2 op_42b8_0_comp_ff(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -17182,14 +12124,11 @@ unsigned long REGPARAM2 op_42b9_0_comp_ff(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_CLR(tmp); + live_flags(); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -17198,37 +12137,24 @@ return 0; #ifdef PART_4 unsigned long REGPARAM2 op_4400_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); +{ int tmp=scratchie++; + jff_NEG_b(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg!=tmp) + mov_b_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4410_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17238,26 +12164,17 @@ unsigned long REGPARAM2 op_4410_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_b(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4418_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17266,57 +12183,39 @@ unsigned long REGPARAM2 op_4418_0_comp_ff(uae_u32 opcode) /* NEG */ 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); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); +{ int tmp=scratchie++; + jff_NEG_b(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4420_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); +{ int tmp=scratchie++; + jff_NEG_b(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4428_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17326,26 +12225,17 @@ unsigned long REGPARAM2 op_4428_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_b(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4430_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17354,16 +12244,11 @@ unsigned long REGPARAM2 op_4430_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_b(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -17377,16 +12262,11 @@ unsigned long REGPARAM2 op_4438_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_b(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -17400,52 +12280,34 @@ unsigned long REGPARAM2 op_4439_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_b(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4440_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); +{ int tmp=scratchie++; + jff_NEG_w(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg!=tmp) + mov_w_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4450_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17455,26 +12317,17 @@ unsigned long REGPARAM2 op_4450_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_w(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4458_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17483,57 +12336,39 @@ unsigned long REGPARAM2 op_4458_0_comp_ff(uae_u32 opcode) /* NEG */ 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); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp=scratchie++; + jff_NEG_w(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4460_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); +{ int tmp=scratchie++; + jff_NEG_w(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4468_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17543,26 +12378,17 @@ unsigned long REGPARAM2 op_4468_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_w(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4470_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17571,16 +12397,11 @@ unsigned long REGPARAM2 op_4470_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_w(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -17594,16 +12415,11 @@ unsigned long REGPARAM2 op_4478_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_w(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -17617,52 +12433,34 @@ unsigned long REGPARAM2 op_4479_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_w(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4480_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); +{ int tmp=scratchie++; + jff_NEG_l(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4490_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17672,26 +12470,17 @@ unsigned long REGPARAM2 op_4490_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_l(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4498_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17700,57 +12489,39 @@ unsigned long REGPARAM2 op_4498_0_comp_ff(uae_u32 opcode) /* NEG */ 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); + arm_ADD_l_ri8(srcreg+8,4); +{ int tmp=scratchie++; + jff_NEG_l(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_44a0_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); +{ int tmp=scratchie++; + jff_NEG_l(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_44a8_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17760,26 +12531,17 @@ unsigned long REGPARAM2 op_44a8_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_l(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_44b0_0_comp_ff(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17788,16 +12550,11 @@ unsigned long REGPARAM2 op_44b0_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_l(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -17811,16 +12568,11 @@ unsigned long REGPARAM2 op_44b8_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_l(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -17834,50 +12586,34 @@ unsigned long REGPARAM2 op_44b9_0_comp_ff(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jff_NEG_l(tmp,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4600_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_b(tmp,src); + live_flags(); + if(srcreg!=tmp) + mov_b_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4610_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17887,24 +12623,17 @@ unsigned long REGPARAM2 op_4610_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_b(tmp,src); + live_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4618_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17913,53 +12642,39 @@ unsigned long REGPARAM2 op_4618_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_b(tmp,src); + live_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4620_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_b(tmp,src); + live_flags(); + writebyte(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4628_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17969,24 +12684,17 @@ unsigned long REGPARAM2 op_4628_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_b(tmp,src); + live_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4630_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -17995,14 +12703,11 @@ unsigned long REGPARAM2 op_4630_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_b(tmp,src); + live_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -18016,14 +12721,11 @@ unsigned long REGPARAM2 op_4638_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_b(tmp,src); + live_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -18037,48 +12739,34 @@ unsigned long REGPARAM2 op_4639_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_b(tmp,src); + live_flags(); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4640_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_w(tmp,src); + live_flags(); + if(srcreg!=tmp) + mov_w_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4650_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18088,24 +12776,17 @@ unsigned long REGPARAM2 op_4650_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_w(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4658_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18114,53 +12795,39 @@ unsigned long REGPARAM2 op_4658_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + arm_ADD_l_ri8(srcreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_w(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4660_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_w(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4668_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18170,24 +12837,17 @@ unsigned long REGPARAM2 op_4668_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_w(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4670_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18196,14 +12856,11 @@ unsigned long REGPARAM2 op_4670_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_w(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -18217,14 +12874,11 @@ unsigned long REGPARAM2 op_4678_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_w(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -18238,48 +12892,34 @@ unsigned long REGPARAM2 op_4679_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_w(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4680_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_l(tmp,src); + live_flags(); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4690_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18289,24 +12929,17 @@ unsigned long REGPARAM2 op_4690_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_l(tmp,src); + live_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4698_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18315,53 +12948,39 @@ unsigned long REGPARAM2 op_4698_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + arm_ADD_l_ri8(srcreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_l(tmp,src); + live_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_46a0_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_l(tmp,src); + live_flags(); + writelong(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_46a8_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18371,24 +12990,17 @@ unsigned long REGPARAM2 op_46a8_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_l(tmp,src); + live_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_46b0_0_comp_ff(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18397,14 +13009,11 @@ unsigned long REGPARAM2 op_46b0_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_l(tmp,src); + live_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -18418,14 +13027,11 @@ unsigned long REGPARAM2 op_46b8_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_l(tmp,src); + live_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -18439,24 +13045,17 @@ unsigned long REGPARAM2 op_46b9_0_comp_ff(uae_u32 opcode) /* NOT */ 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_NOT_l(tmp,src); + live_flags(); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4808_0_comp_ff(uae_u32 opcode) /* LINK */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18477,35 +13076,24 @@ return 0; } unsigned long REGPARAM2 op_4840_0_comp_ff(uae_u32 opcode) /* SWAP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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(); - arm_ROR_l_ri8(src,16); - dont_care_flags(); -{ start_needflags(); - test_l_rr(src,src); - live_flags(); - end_needflags(); -} if(srcreg!=src) + dont_care_flags(); +{ jff_SWAP(src); + live_flags(); +if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(srcreg!=src) mov_l_rr(srcreg,src); -}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4850_0_comp_ff(uae_u32 opcode) /* PEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18515,7 +13103,7 @@ if (srcreg==7) dodgy=1; if (dodgy) mov_l_rr(srca,srcreg+8); {{ int dsta=dodgy?scratchie++:7+8; - lea_l_brr(7+8,7+8,-4); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -18524,11 +13112,7 @@ return 0; } unsigned long REGPARAM2 op_4868_0_comp_ff(uae_u32 opcode) /* PEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18538,7 +13122,7 @@ if (srcreg==7) dodgy=1; 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -18547,11 +13131,7 @@ return 0; } unsigned long REGPARAM2 op_4870_0_comp_ff(uae_u32 opcode) /* PEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18560,7 +13140,7 @@ 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -18576,7 +13156,7 @@ unsigned long REGPARAM2 op_4878_0_comp_ff(uae_u32 opcode) /* PEA */ { 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -18592,7 +13172,7 @@ unsigned long REGPARAM2 op_4879_0_comp_ff(uae_u32 opcode) /* PEA */ { 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -18610,7 +13190,7 @@ unsigned long REGPARAM2 op_487a_0_comp_ff(uae_u32 opcode) /* PEA */ 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -18629,7 +13209,7 @@ unsigned long REGPARAM2 op_487b_0_comp_ff(uae_u32 opcode) /* PEA */ { 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -18638,36 +13218,24 @@ return 0; } unsigned long REGPARAM2 op_4880_0_comp_ff(uae_u32 opcode) /* EXT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EXT_w(tmp,src); + live_flags(); + if(srcreg!=tmp) + mov_w_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4890_0_comp_ff(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18680,13 +13248,11 @@ unsigned long REGPARAM2 op_4890_0_comp_ff(uae_u32 opcode) /* MVMLE */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -18702,11 +13268,7 @@ return 0; } unsigned long REGPARAM2 op_48a0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18719,14 +13281,12 @@ unsigned long REGPARAM2 op_48a0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,8+dstreg); - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { offset-=2; - mov_l_rr(tmp,15-i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,15-i,offset); } } lea_l_brr(8+dstreg,srca,(uae_s32)offset); } else { @@ -18742,11 +13302,7 @@ return 0; } unsigned long REGPARAM2 op_48a8_0_comp_ff(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18759,13 +13315,11 @@ unsigned long REGPARAM2 op_48a8_0_comp_ff(uae_u32 opcode) /* MVMLE */ { 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -18781,11 +13335,7 @@ return 0; } unsigned long REGPARAM2 op_48b0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18797,13 +13347,11 @@ unsigned long REGPARAM2 op_48b0_0_comp_ff(uae_u32 opcode) /* MVMLE */ 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -18830,13 +13378,11 @@ unsigned long REGPARAM2 op_48b8_0_comp_ff(uae_u32 opcode) /* MVMLE */ 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -18863,13 +13409,11 @@ unsigned long REGPARAM2 op_48b9_0_comp_ff(uae_u32 opcode) /* MVMLE */ signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -18885,36 +13429,24 @@ return 0; } unsigned long REGPARAM2 op_48c0_0_comp_ff(uae_u32 opcode) /* EXT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EXT_l(tmp,src); + live_flags(); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_48d0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18927,13 +13459,11 @@ unsigned long REGPARAM2 op_48d0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -18949,11 +13479,7 @@ return 0; } unsigned long REGPARAM2 op_48e0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -18966,14 +13492,12 @@ unsigned long REGPARAM2 op_48e0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,8+dstreg); - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { offset-=4; - mov_l_rr(tmp,15-i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,15-i,offset); } } lea_l_brr(8+dstreg,srca,(uae_s32)offset); } else { @@ -18989,11 +13513,7 @@ return 0; } unsigned long REGPARAM2 op_48e8_0_comp_ff(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19006,13 +13526,11 @@ unsigned long REGPARAM2 op_48e8_0_comp_ff(uae_u32 opcode) /* MVMLE */ { 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -19028,11 +13546,7 @@ return 0; } unsigned long REGPARAM2 op_48f0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19044,13 +13558,11 @@ unsigned long REGPARAM2 op_48f0_0_comp_ff(uae_u32 opcode) /* MVMLE */ 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -19077,13 +13589,11 @@ unsigned long REGPARAM2 op_48f8_0_comp_ff(uae_u32 opcode) /* MVMLE */ 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -19110,13 +13620,11 @@ unsigned long REGPARAM2 op_48f9_0_comp_ff(uae_u32 opcode) /* MVMLE */ signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -19132,56 +13640,38 @@ return 0; } unsigned long REGPARAM2 op_49c0_0_comp_ff(uae_u32 opcode) /* EXT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EXT_b(tmp,src); + live_flags(); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a00_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a10_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19191,21 +13681,15 @@ unsigned long REGPARAM2 op_4a10_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a18_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19214,47 +13698,35 @@ unsigned long REGPARAM2 op_4a18_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a20_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a28_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19264,21 +13736,15 @@ unsigned long REGPARAM2 op_4a28_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a30_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19287,11 +13753,9 @@ unsigned long REGPARAM2 op_4a30_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19305,11 +13769,9 @@ unsigned long REGPARAM2 op_4a38_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19323,11 +13785,9 @@ unsigned long REGPARAM2 op_4a39_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19343,11 +13803,9 @@ unsigned long REGPARAM2 op_4a3a_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19364,11 +13822,9 @@ unsigned long REGPARAM2 op_4a3b_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19380,41 +13836,29 @@ unsigned long REGPARAM2 op_4a3c_0_comp_ff(uae_u32 opcode) /* TST */ { 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(); + dont_care_flags(); +{ jff_TST_b(src); + live_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a40_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a48_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19422,21 +13866,15 @@ unsigned long REGPARAM2 op_4a48_0_comp_ff(uae_u32 opcode) /* TST */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a50_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19446,21 +13884,15 @@ unsigned long REGPARAM2 op_4a50_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a58_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19469,47 +13901,35 @@ unsigned long REGPARAM2 op_4a58_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + arm_ADD_l_ri8(srcreg+8,2); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a60_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a68_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19519,21 +13939,15 @@ unsigned long REGPARAM2 op_4a68_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a70_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19542,11 +13956,9 @@ unsigned long REGPARAM2 op_4a70_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19560,11 +13972,9 @@ unsigned long REGPARAM2 op_4a78_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19578,11 +13988,9 @@ unsigned long REGPARAM2 op_4a79_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19598,11 +14006,9 @@ unsigned long REGPARAM2 op_4a7a_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19619,11 +14025,9 @@ unsigned long REGPARAM2 op_4a7b_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19635,41 +14039,29 @@ unsigned long REGPARAM2 op_4a7c_0_comp_ff(uae_u32 opcode) /* TST */ { 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(); + dont_care_flags(); +{ jff_TST_w(src); + live_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a80_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a88_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19677,21 +14069,15 @@ unsigned long REGPARAM2 op_4a88_0_comp_ff(uae_u32 opcode) /* TST */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a90_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19701,21 +14087,15 @@ unsigned long REGPARAM2 op_4a90_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a98_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19724,47 +14104,35 @@ unsigned long REGPARAM2 op_4a98_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + arm_ADD_l_ri8(srcreg+8,4); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4aa0_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4aa8_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19774,21 +14142,15 @@ unsigned long REGPARAM2 op_4aa8_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4ab0_0_comp_ff(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19797,11 +14159,9 @@ unsigned long REGPARAM2 op_4ab0_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19815,11 +14175,9 @@ unsigned long REGPARAM2 op_4ab8_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19833,11 +14191,9 @@ unsigned long REGPARAM2 op_4ab9_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19853,11 +14209,9 @@ unsigned long REGPARAM2 op_4aba_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19874,11 +14228,9 @@ unsigned long REGPARAM2 op_4abb_0_comp_ff(uae_u32 opcode) /* TST */ 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -19890,21 +14242,380 @@ unsigned long REGPARAM2 op_4abc_0_comp_ff(uae_u32 opcode) /* TST */ { 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(); + dont_care_flags(); +{ jff_TST_l(src); + live_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } +unsigned long REGPARAM2 op_4c00_0_comp_ff(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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c10_0_comp_ff(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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c18_0_comp_ff(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); + arm_ADD_l_ri8(dstreg+8,4); + if (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c20_0_comp_ff(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; + arm_SUB_l_ri8(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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c28_0_comp_ff(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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c30_0_comp_ff(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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c38_0_comp_ff(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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c39_0_comp_ff(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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c3a_0_comp_ff(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=start_pc+((char *)comp_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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c3b_0_comp_ff(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=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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_4c3c_0_comp_ff(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) { + jff_MULS64(r2,r3); + } else { + jff_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jff_MULS32(r2,dst); + } else { + jff_MULU32(r2,dst); + } + } + live_flags(); +}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} unsigned long REGPARAM2 op_4c90_0_comp_ff(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19916,34 +14627,29 @@ unsigned long REGPARAM2 op_4c90_0_comp_ff(uae_u32 opcode) /* MVMEL */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4c98_0_comp_ff(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19954,36 +14660,31 @@ unsigned long REGPARAM2 op_4c98_0_comp_ff(uae_u32 opcode) /* MVMEL */ signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); offset+=2; } - } lea_l_brr(8+dstreg,srca,offset); + } jnf_ADD_im8(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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } mov_l_rr(8+dstreg,tmp); + mov_l_rr(8+dstreg,tmp); } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4ca8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -19995,34 +14696,29 @@ unsigned long REGPARAM2 op_4ca8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { 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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4cb0_0_comp_ff(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20033,24 +14729,23 @@ unsigned long REGPARAM2 op_4cb0_0_comp_ff(uae_u32 opcode) /* MVMEL */ 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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -20066,24 +14761,23 @@ unsigned long REGPARAM2 op_4cb8_0_comp_ff(uae_u32 opcode) /* MVMEL */ 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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -20099,24 +14793,23 @@ unsigned long REGPARAM2 op_4cb9_0_comp_ff(uae_u32 opcode) /* MVMEL */ signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -20135,24 +14828,23 @@ unsigned long REGPARAM2 op_4cba_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u32 address=start_pc+((char *)comp_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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -20172,34 +14864,29 @@ unsigned long REGPARAM2 op_4cbb_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u32 address=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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4cd0_0_comp_ff(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20211,33 +14898,29 @@ unsigned long REGPARAM2 op_4cd0_0_comp_ff(uae_u32 opcode) /* MVMEL */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4cd8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20248,35 +14931,31 @@ unsigned long REGPARAM2 op_4cd8_0_comp_ff(uae_u32 opcode) /* MVMEL */ signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); offset+=4; } - } lea_l_brr(8+dstreg,srca,offset); + } jnf_ADD_im8(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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } mov_l_rr(8+dstreg,tmp); + mov_l_rr(8+dstreg,tmp); } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4ce8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20288,33 +14967,29 @@ unsigned long REGPARAM2 op_4ce8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { 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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4cf0_0_comp_ff(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20325,23 +15000,23 @@ unsigned long REGPARAM2 op_4cf0_0_comp_ff(uae_u32 opcode) /* MVMEL */ 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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -20357,23 +15032,23 @@ unsigned long REGPARAM2 op_4cf8_0_comp_ff(uae_u32 opcode) /* MVMEL */ 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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -20389,23 +15064,23 @@ unsigned long REGPARAM2 op_4cf9_0_comp_ff(uae_u32 opcode) /* MVMEL */ signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -20424,23 +15099,23 @@ unsigned long REGPARAM2 op_4cfa_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u32 address=start_pc+((char *)comp_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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -20460,33 +15135,29 @@ unsigned long REGPARAM2 op_4cfb_0_comp_ff(uae_u32 opcode) /* MVMEL */ uae_u32 address=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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4e50_0_comp_ff(uae_u32 opcode) /* LINK */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20499,7 +15170,6 @@ unsigned long REGPARAM2 op_4e50_0_comp_ff(uae_u32 opcode) /* LINK */ sub_l_ri(15,4); writelong_clobber(15,src,scratchie); mov_l_rr(src,15); - sign_extend_16_rr(offs,offs); arm_ADD_l(15,offs); if(srcreg+8!=src) mov_l_rr(srcreg+8,src); @@ -20508,11 +15178,7 @@ return 0; } unsigned long REGPARAM2 op_4e58_0_comp_ff(uae_u32 opcode) /* UNLK */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20568,17 +15234,13 @@ unsigned long REGPARAM2 op_4e75_0_comp_ff(uae_u32 opcode) /* RTS */ get_n_addr_jmp(newad,PC_P,scratchie); mov_l_mr((uintptr)®s.pc_oldp,PC_P); m68k_pc_offset=0; - lea_l_brr(15,15,4); + arm_ADD_l_ri8(15,4); } if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4e90_0_comp_ff(uae_u32 opcode) /* JSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20600,11 +15262,7 @@ return 0; } unsigned long REGPARAM2 op_4ea8_0_comp_ff(uae_u32 opcode) /* JSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20626,11 +15284,7 @@ return 0; } unsigned long REGPARAM2 op_4eb0_0_comp_ff(uae_u32 opcode) /* JSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20736,11 +15390,7 @@ return 0; } unsigned long REGPARAM2 op_4ed0_0_comp_ff(uae_u32 opcode) /* JMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20757,11 +15407,7 @@ return 0; } unsigned long REGPARAM2 op_4ee8_0_comp_ff(uae_u32 opcode) /* JMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20778,11 +15424,7 @@ return 0; } unsigned long REGPARAM2 op_4ef0_0_comp_ff(uae_u32 opcode) /* JMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20863,16 +15505,8 @@ return 0; } unsigned long REGPARAM2 op_5000_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20880,30 +15514,20 @@ unsigned long REGPARAM2 op_5000_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5010_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20915,29 +15539,19 @@ unsigned long REGPARAM2 op_5010_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5018_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20948,30 +15562,20 @@ unsigned long REGPARAM2 op_5018_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5020_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -20979,34 +15583,24 @@ unsigned long REGPARAM2 op_5020_0_comp_ff(uae_u32 opcode) /* ADD */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5028_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21018,29 +15612,19 @@ unsigned long REGPARAM2 op_5028_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5030_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21051,24 +15635,18 @@ unsigned long REGPARAM2 op_5030_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5038_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -21079,24 +15657,18 @@ unsigned long REGPARAM2 op_5038_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5039_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -21107,29 +15679,19 @@ unsigned long REGPARAM2 op_5039_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5040_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21137,30 +15699,20 @@ unsigned long REGPARAM2 op_5040_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5048_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21170,9 +15722,7 @@ unsigned long REGPARAM2 op_5048_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -21180,16 +15730,8 @@ return 0; } unsigned long REGPARAM2 op_5050_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21201,29 +15743,19 @@ unsigned long REGPARAM2 op_5050_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5058_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21234,30 +15766,20 @@ unsigned long REGPARAM2 op_5058_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5060_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21265,34 +15787,24 @@ unsigned long REGPARAM2 op_5060_0_comp_ff(uae_u32 opcode) /* ADD */ { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5068_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21304,29 +15816,19 @@ unsigned long REGPARAM2 op_5068_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5070_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21337,24 +15839,18 @@ unsigned long REGPARAM2 op_5070_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5078_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -21365,24 +15861,18 @@ unsigned long REGPARAM2 op_5078_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5079_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -21393,29 +15883,19 @@ unsigned long REGPARAM2 op_5079_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5080_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21423,33 +15903,20 @@ unsigned long REGPARAM2 op_5080_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -#endif - -#ifdef PART_5 unsigned long REGPARAM2 op_5088_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21459,26 +15926,19 @@ unsigned long REGPARAM2 op_5088_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } +#endif + +#ifdef PART_5 unsigned long REGPARAM2 op_5090_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21490,29 +15950,19 @@ unsigned long REGPARAM2 op_5090_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5098_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21523,30 +15973,20 @@ unsigned long REGPARAM2 op_5098_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50a0_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21554,34 +15994,24 @@ unsigned long REGPARAM2 op_50a0_0_comp_ff(uae_u32 opcode) /* ADD */ { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50a8_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21593,29 +16023,19 @@ unsigned long REGPARAM2 op_50a8_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50b0_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21626,24 +16046,18 @@ unsigned long REGPARAM2 op_50b0_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50b8_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -21654,24 +16068,18 @@ unsigned long REGPARAM2 op_50b8_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50b9_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -21682,32 +16090,25 @@ unsigned long REGPARAM2 op_50b9_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50c0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + mov_l_ri(val, 0xff); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -21715,11 +16116,7 @@ return 0; } unsigned long REGPARAM2 op_50c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21727,13 +16124,12 @@ unsigned long REGPARAM2 op_50c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ int nsrc = scratchie++; if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -21741,11 +16137,7 @@ return 0; } unsigned long REGPARAM2 op_50d0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21754,62 +16146,47 @@ unsigned long REGPARAM2 op_50d0_0_comp_ff(uae_u32 opcode) /* Scc */ if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50d8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50e0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50e8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21818,19 +16195,14 @@ unsigned long REGPARAM2 op_50e8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50f0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21838,8 +16210,7 @@ unsigned long REGPARAM2 op_50f0_0_comp_ff(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -21853,8 +16224,7 @@ unsigned long REGPARAM2 op_50f8_0_comp_ff(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -21868,24 +16238,15 @@ unsigned long REGPARAM2 op_50f9_0_comp_ff(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5100_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21893,30 +16254,20 @@ unsigned long REGPARAM2 op_5100_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5110_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21928,29 +16279,19 @@ unsigned long REGPARAM2 op_5110_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5118_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21961,30 +16302,20 @@ unsigned long REGPARAM2 op_5118_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5120_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -21992,34 +16323,24 @@ unsigned long REGPARAM2 op_5120_0_comp_ff(uae_u32 opcode) /* SUB */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5128_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22031,29 +16352,19 @@ unsigned long REGPARAM2 op_5128_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5130_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22064,24 +16375,18 @@ unsigned long REGPARAM2 op_5130_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5138_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -22092,24 +16397,18 @@ unsigned long REGPARAM2 op_5138_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5139_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -22120,29 +16419,19 @@ unsigned long REGPARAM2 op_5139_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5140_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22150,30 +16439,20 @@ unsigned long REGPARAM2 op_5140_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5148_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22183,9 +16462,7 @@ unsigned long REGPARAM2 op_5148_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -22193,16 +16470,8 @@ return 0; } unsigned long REGPARAM2 op_5150_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22214,29 +16483,19 @@ unsigned long REGPARAM2 op_5150_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5158_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22247,30 +16506,20 @@ unsigned long REGPARAM2 op_5158_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5160_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22278,34 +16527,24 @@ unsigned long REGPARAM2 op_5160_0_comp_ff(uae_u32 opcode) /* SUB */ { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5168_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22317,29 +16556,19 @@ unsigned long REGPARAM2 op_5168_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5170_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22350,24 +16579,18 @@ unsigned long REGPARAM2 op_5170_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5178_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -22378,24 +16601,18 @@ unsigned long REGPARAM2 op_5178_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5179_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -22406,29 +16623,19 @@ unsigned long REGPARAM2 op_5179_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5180_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22436,30 +16643,20 @@ unsigned long REGPARAM2 op_5180_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5188_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22469,9 +16666,7 @@ unsigned long REGPARAM2 op_5188_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -22479,16 +16674,8 @@ return 0; } unsigned long REGPARAM2 op_5190_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22500,29 +16687,19 @@ unsigned long REGPARAM2 op_5190_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5198_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22533,30 +16710,20 @@ unsigned long REGPARAM2 op_5198_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51a0_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22564,34 +16731,24 @@ unsigned long REGPARAM2 op_51a0_0_comp_ff(uae_u32 opcode) /* SUB */ { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51a8_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22603,29 +16760,19 @@ unsigned long REGPARAM2 op_51a8_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51b0_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22636,24 +16783,18 @@ unsigned long REGPARAM2 op_51b0_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51b8_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -22664,24 +16805,18 @@ unsigned long REGPARAM2 op_51b8_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51b9_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -22692,32 +16827,25 @@ unsigned long REGPARAM2 op_51b9_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51c0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + mov_l_ri(val, 0); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -22725,11 +16853,7 @@ return 0; } unsigned long REGPARAM2 op_51c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22737,20 +16861,17 @@ unsigned long REGPARAM2 op_51c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; - start_needflags(); - sub_w_ri(src,1); - end_needflags(); +{ int nsrc = scratchie++; + sub_w_ri(src, 1); { uae_u32 v2; uae_u32 v1=get_const(PC_P); v2=get_const(offs); - register_branch(v1,v2,3); + register_branch(v1, v2, 3); if(srcreg!=src) mov_w_rr(srcreg,src); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -22758,11 +16879,7 @@ return 0; } unsigned long REGPARAM2 op_51d0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22771,62 +16888,47 @@ unsigned long REGPARAM2 op_51d0_0_comp_ff(uae_u32 opcode) /* Scc */ if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51d8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51e0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51e8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22835,19 +16937,14 @@ unsigned long REGPARAM2 op_51e8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51f0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22855,8 +16952,7 @@ unsigned long REGPARAM2 op_51f0_0_comp_ff(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -22870,8 +16966,7 @@ unsigned long REGPARAM2 op_51f8_0_comp_ff(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -22885,19 +16980,14 @@ unsigned long REGPARAM2 op_51f9_0_comp_ff(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52c0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22905,8 +16995,7 @@ unsigned long REGPARAM2 op_52c0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); + jnf_SCC(val, 8); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -22914,11 +17003,7 @@ return 0; } unsigned long REGPARAM2 op_52c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22926,23 +17011,17 @@ unsigned long REGPARAM2 op_52c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 8); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -22950,11 +17029,7 @@ return 0; } unsigned long REGPARAM2 op_52d0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -22964,64 +17039,49 @@ unsigned long REGPARAM2 op_52d0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52d8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52e0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52e8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23031,19 +17091,14 @@ unsigned long REGPARAM2 op_52e8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52f0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23052,8 +17107,7 @@ unsigned long REGPARAM2 op_52f0_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23068,8 +17122,7 @@ unsigned long REGPARAM2 op_52f8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23084,19 +17137,14 @@ unsigned long REGPARAM2 op_52f9_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53c0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23104,8 +17152,7 @@ unsigned long REGPARAM2 op_53c0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); + jnf_SCC(val, 9); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23113,11 +17160,7 @@ return 0; } unsigned long REGPARAM2 op_53c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23125,23 +17168,17 @@ unsigned long REGPARAM2 op_53c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 9); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23149,11 +17186,7 @@ return 0; } unsigned long REGPARAM2 op_53d0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23163,64 +17196,49 @@ unsigned long REGPARAM2 op_53d0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53d8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53e0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53e8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23230,19 +17248,14 @@ unsigned long REGPARAM2 op_53e8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53f0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23251,8 +17264,7 @@ unsigned long REGPARAM2 op_53f0_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23267,8 +17279,7 @@ unsigned long REGPARAM2 op_53f8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23283,19 +17294,14 @@ unsigned long REGPARAM2 op_53f9_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54c0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23303,8 +17309,7 @@ unsigned long REGPARAM2 op_54c0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); + jnf_SCC(val, 3); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23312,11 +17317,7 @@ return 0; } unsigned long REGPARAM2 op_54c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23324,23 +17325,17 @@ unsigned long REGPARAM2 op_54c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 3); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23348,11 +17343,7 @@ return 0; } unsigned long REGPARAM2 op_54d0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23362,64 +17353,49 @@ unsigned long REGPARAM2 op_54d0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54d8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54e0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54e8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23429,19 +17405,14 @@ unsigned long REGPARAM2 op_54e8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54f0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23450,8 +17421,7 @@ unsigned long REGPARAM2 op_54f0_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23466,8 +17436,7 @@ unsigned long REGPARAM2 op_54f8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23482,19 +17451,14 @@ unsigned long REGPARAM2 op_54f9_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55c0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23502,8 +17466,7 @@ unsigned long REGPARAM2 op_55c0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); + jnf_SCC(val, 2); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23511,11 +17474,7 @@ return 0; } unsigned long REGPARAM2 op_55c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23523,23 +17482,17 @@ unsigned long REGPARAM2 op_55c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 2); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23547,11 +17500,7 @@ return 0; } unsigned long REGPARAM2 op_55d0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23561,64 +17510,49 @@ unsigned long REGPARAM2 op_55d0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55d8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55e0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55e8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23628,19 +17562,14 @@ unsigned long REGPARAM2 op_55e8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55f0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23649,8 +17578,7 @@ unsigned long REGPARAM2 op_55f0_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23665,8 +17593,7 @@ unsigned long REGPARAM2 op_55f8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23681,19 +17608,14 @@ unsigned long REGPARAM2 op_55f9_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56c0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23701,8 +17623,7 @@ unsigned long REGPARAM2 op_56c0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23710,11 +17631,7 @@ return 0; } unsigned long REGPARAM2 op_56c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23722,23 +17639,17 @@ unsigned long REGPARAM2 op_56c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); - cmov_l_rr(src,nsrc,1); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 1); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23746,11 +17657,7 @@ return 0; } unsigned long REGPARAM2 op_56d0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23760,64 +17667,49 @@ unsigned long REGPARAM2 op_56d0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56d8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56e0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56e8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23827,19 +17719,14 @@ unsigned long REGPARAM2 op_56e8_0_comp_ff(uae_u32 opcode) /* Scc */ 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,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56f0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23848,8 +17735,7 @@ unsigned long REGPARAM2 op_56f0_0_comp_ff(uae_u32 opcode) /* Scc */ calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23864,8 +17750,7 @@ unsigned long REGPARAM2 op_56f8_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -23880,19 +17765,14 @@ unsigned long REGPARAM2 op_56f9_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57c0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23900,8 +17780,7 @@ unsigned long REGPARAM2 op_57c0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23909,11 +17788,7 @@ return 0; } unsigned long REGPARAM2 op_57c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23921,23 +17796,17 @@ unsigned long REGPARAM2 op_57c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,0); - cmov_l_rr(src,nsrc,0); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 0); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -23945,11 +17814,7 @@ return 0; } unsigned long REGPARAM2 op_57d0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -23959,64 +17824,49 @@ unsigned long REGPARAM2 op_57d0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57d8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57e0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57e8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24026,19 +17876,14 @@ unsigned long REGPARAM2 op_57e8_0_comp_ff(uae_u32 opcode) /* Scc */ 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,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57f0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24047,8 +17892,7 @@ unsigned long REGPARAM2 op_57f0_0_comp_ff(uae_u32 opcode) /* Scc */ calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24063,8 +17907,7 @@ unsigned long REGPARAM2 op_57f8_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24079,19 +17922,14 @@ unsigned long REGPARAM2 op_57f9_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ac0_0_comp_ff(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58c0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24099,20 +17937,15 @@ unsigned long REGPARAM2 op_5ac0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); + jnf_SCC(val, 7); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ac8_0_comp_ff(uae_u32 opcode) /* DBcc */ +unsigned long REGPARAM2 op_58c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24120,35 +17953,25 @@ unsigned long REGPARAM2 op_5ac8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 7); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ad0_0_comp_ff(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58d0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24158,64 +17981,49 @@ unsigned long REGPARAM2 op_5ad0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); + jnf_SCC(val, 7); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ad8_0_comp_ff(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58d8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); + jnf_SCC(val, 7); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ae0_0_comp_ff(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58e0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 7); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ae8_0_comp_ff(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58e8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24225,19 +18033,14 @@ unsigned long REGPARAM2 op_5ae8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 7); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5af0_0_comp_ff(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58f0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24246,8 +18049,321 @@ unsigned long REGPARAM2 op_5af0_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 7); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_58f8_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(); + jnf_SCC(val, 7); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_58f9_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(); + jnf_SCC(val, 7); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59c0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_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(); + jnf_SCC(val, 6); + if(srcreg!=val) + mov_b_rr(srcreg,val); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59c8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_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)); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset=0; +{ int nsrc = scratchie++; + make_flags_live(); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 6); + register_branch(v1, v2, 2); + if(srcreg!=src) + mov_w_rr(srcreg,src); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59d0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 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 val = scratchie++; + make_flags_live(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59d8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int srca=scratchie++; + mov_l_rr(srca,srcreg+8); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); +{ int val = scratchie++; + make_flags_live(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59e0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 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; + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int val = scratchie++; + make_flags_live(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59e8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int srca=scratchie++; + 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(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59f0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + 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(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59f8_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(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59f9_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(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ac0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_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(); + jnf_SCC(val, 5); + if(srcreg!=val) + mov_b_rr(srcreg,val); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ac8_0_comp_ff(uae_u32 opcode) /* DBcc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_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)); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset=0; +{ int nsrc = scratchie++; + make_flags_live(); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 5); + register_branch(v1, v2, 2); + if(srcreg!=src) + mov_w_rr(srcreg,src); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ad0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 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 val = scratchie++; + make_flags_live(); + jnf_SCC(val, 5); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ad8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int srca=scratchie++; + mov_l_rr(srca,srcreg+8); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); +{ int val = scratchie++; + make_flags_live(); + jnf_SCC(val, 5); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ae0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 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; + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int val = scratchie++; + make_flags_live(); + jnf_SCC(val, 5); + writebyte(srca,val,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ae8_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int srca=scratchie++; + 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(); + jnf_SCC(val, 5); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5af0_0_comp_ff(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + 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(); + jnf_SCC(val, 5); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24262,8 +18378,7 @@ unsigned long REGPARAM2 op_5af8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 5); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24278,19 +18393,14 @@ unsigned long REGPARAM2 op_5af9_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 5); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5bc0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24298,8 +18408,7 @@ unsigned long REGPARAM2 op_5bc0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); + jnf_SCC(val, 4); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -24307,11 +18416,7 @@ return 0; } unsigned long REGPARAM2 op_5bc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24319,23 +18424,17 @@ unsigned long REGPARAM2 op_5bc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 4); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -24343,11 +18442,7 @@ return 0; } unsigned long REGPARAM2 op_5bd0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24357,64 +18452,49 @@ unsigned long REGPARAM2 op_5bd0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5bd8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5be0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5be8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24424,19 +18504,14 @@ unsigned long REGPARAM2 op_5be8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5bf0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24445,8 +18520,7 @@ unsigned long REGPARAM2 op_5bf0_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24461,8 +18535,7 @@ unsigned long REGPARAM2 op_5bf8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24477,19 +18550,14 @@ unsigned long REGPARAM2 op_5bf9_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5cc0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24497,8 +18565,7 @@ unsigned long REGPARAM2 op_5cc0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -24506,11 +18573,7 @@ return 0; } unsigned long REGPARAM2 op_5cc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24518,23 +18581,17 @@ unsigned long REGPARAM2 op_5cc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,10); - cmov_l_rr(src,nsrc,10); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 10); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -24542,11 +18599,7 @@ return 0; } unsigned long REGPARAM2 op_5cd0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24556,64 +18609,49 @@ unsigned long REGPARAM2 op_5cd0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5cd8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ce0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ce8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24623,19 +18661,14 @@ unsigned long REGPARAM2 op_5ce8_0_comp_ff(uae_u32 opcode) /* Scc */ 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,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5cf0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24644,8 +18677,7 @@ unsigned long REGPARAM2 op_5cf0_0_comp_ff(uae_u32 opcode) /* Scc */ calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24660,8 +18692,7 @@ unsigned long REGPARAM2 op_5cf8_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24676,19 +18707,14 @@ unsigned long REGPARAM2 op_5cf9_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5dc0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24696,8 +18722,7 @@ unsigned long REGPARAM2 op_5dc0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -24705,11 +18730,7 @@ return 0; } unsigned long REGPARAM2 op_5dc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24717,23 +18738,17 @@ unsigned long REGPARAM2 op_5dc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,11); - cmov_l_rr(src,nsrc,11); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 11); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -24741,11 +18756,7 @@ return 0; } unsigned long REGPARAM2 op_5dd0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24755,64 +18766,49 @@ unsigned long REGPARAM2 op_5dd0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5dd8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5de0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5de8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24822,19 +18818,14 @@ unsigned long REGPARAM2 op_5de8_0_comp_ff(uae_u32 opcode) /* Scc */ 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,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5df0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24843,8 +18834,7 @@ unsigned long REGPARAM2 op_5df0_0_comp_ff(uae_u32 opcode) /* Scc */ calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24859,8 +18849,7 @@ unsigned long REGPARAM2 op_5df8_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -24875,19 +18864,14 @@ unsigned long REGPARAM2 op_5df9_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ec0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24895,8 +18879,7 @@ unsigned long REGPARAM2 op_5ec0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); + jnf_SCC(val, 12); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -24904,11 +18887,7 @@ return 0; } unsigned long REGPARAM2 op_5ec8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24916,23 +18895,17 @@ unsigned long REGPARAM2 op_5ec8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 12); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -24940,11 +18913,7 @@ return 0; } unsigned long REGPARAM2 op_5ed0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -24954,64 +18923,49 @@ unsigned long REGPARAM2 op_5ed0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ed8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ee0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ee8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -25021,19 +18975,14 @@ unsigned long REGPARAM2 op_5ee8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ef0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -25042,8 +18991,7 @@ unsigned long REGPARAM2 op_5ef0_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25058,8 +19006,7 @@ unsigned long REGPARAM2 op_5ef8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25074,19 +19021,14 @@ unsigned long REGPARAM2 op_5ef9_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5fc0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -25094,8 +19036,7 @@ unsigned long REGPARAM2 op_5fc0_0_comp_ff(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); + jnf_SCC(val, 13); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -25103,11 +19044,7 @@ return 0; } unsigned long REGPARAM2 op_5fc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -25115,23 +19052,17 @@ unsigned long REGPARAM2 op_5fc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 13); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -25139,11 +19070,7 @@ return 0; } unsigned long REGPARAM2 op_5fd0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -25153,64 +19080,49 @@ unsigned long REGPARAM2 op_5fd0_0_comp_ff(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5fd8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5fe0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5fe8_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -25220,19 +19132,14 @@ unsigned long REGPARAM2 op_5fe8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ff0_0_comp_ff(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -25241,8 +19148,7 @@ unsigned long REGPARAM2 op_5ff0_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25257,8 +19163,7 @@ unsigned long REGPARAM2 op_5ff8_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25273,8 +19178,7 @@ unsigned long REGPARAM2 op_5ff9_0_comp_ff(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25285,44 +19189,38 @@ unsigned long REGPARAM2 op_6000_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_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; } unsigned long REGPARAM2 op_6001_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_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; } @@ -25332,17 +19230,17 @@ unsigned long REGPARAM2 op_60ff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_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; } @@ -25362,17 +19260,13 @@ unsigned long REGPARAM2 op_6100_0_comp_ff(uae_u32 opcode) /* BSR */ arm_ADD_l_ri(src,m68k_pc_offset_thisinst+2); m68k_pc_offset=0; arm_ADD_l(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6101_0_comp_ff(uae_u32 opcode) /* BSR */ { -#ifdef 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; @@ -25387,7 +19281,27 @@ unsigned long REGPARAM2 op_6101_0_comp_ff(uae_u32 opcode) /* BSR */ arm_ADD_l_ri(src,m68k_pc_offset_thisinst+2); m68k_pc_offset=0; arm_ADD_l(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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)); +{ uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(15,4); + writelong_clobber(15,ret,scratchie); + arm_ADD_l_ri(src,m68k_pc_offset_thisinst+2); + m68k_pc_offset=0; + arm_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; } @@ -25397,69 +19311,66 @@ unsigned long REGPARAM2 op_6200_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,8); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 8); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6201_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,8); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 8); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } +#endif + +#ifdef PART_6 unsigned long 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,8); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 8); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25470,50 +19381,41 @@ unsigned long REGPARAM2 op_6300_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,9); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 9); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -#endif - -#ifdef PART_6 unsigned long REGPARAM2 op_6301_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,9); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 9); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25524,18 +19426,18 @@ unsigned long REGPARAM2 op_63ff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,9); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 9); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25546,47 +19448,41 @@ unsigned long REGPARAM2 op_6400_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,3); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 3); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6401_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,3); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 3); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25597,18 +19493,18 @@ unsigned long REGPARAM2 op_64ff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,3); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 3); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25619,47 +19515,41 @@ unsigned long REGPARAM2 op_6500_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,2); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 2); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6501_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,2); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 2); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25670,18 +19560,18 @@ unsigned long REGPARAM2 op_65ff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,2); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 2); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25692,47 +19582,41 @@ unsigned long REGPARAM2 op_6600_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,1); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 1); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6601_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,1); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 1); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25743,18 +19627,18 @@ unsigned long REGPARAM2 op_66ff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,1); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 1); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25765,47 +19649,41 @@ unsigned long REGPARAM2 op_6700_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,0); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 0); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6701_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,0); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 0); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25816,18 +19694,18 @@ unsigned long REGPARAM2 op_67ff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,0); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 0); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25838,47 +19716,41 @@ unsigned long REGPARAM2 op_6a00_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,5); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 5); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6a01_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,5); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 5); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25889,18 +19761,18 @@ unsigned long REGPARAM2 op_6aff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,5); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 5); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25911,47 +19783,41 @@ unsigned long REGPARAM2 op_6b00_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,4); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 4); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6b01_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,4); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 4); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25962,18 +19828,18 @@ unsigned long REGPARAM2 op_6bff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,4); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 4); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -25984,47 +19850,41 @@ unsigned long REGPARAM2 op_6c00_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,10); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 10); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6c01_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,10); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 10); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -26035,18 +19895,18 @@ unsigned long REGPARAM2 op_6cff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,10); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 10); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -26057,47 +19917,41 @@ unsigned long REGPARAM2 op_6d00_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,11); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 11); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6d01_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,11); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 11); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -26108,18 +19962,18 @@ unsigned long REGPARAM2 op_6dff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,11); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 11); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -26130,47 +19984,41 @@ unsigned long REGPARAM2 op_6e00_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,12); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 12); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6e01_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,12); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 12); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -26181,18 +20029,18 @@ unsigned long REGPARAM2 op_6eff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,12); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 12); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -26203,47 +20051,41 @@ unsigned long REGPARAM2 op_6f00_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,13); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 13); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6f01_0_comp_ff(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,13); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 13); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -26254,34 +20096,26 @@ unsigned long REGPARAM2 op_6fff_0_comp_ff(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,13); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 13); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_7000_0_comp_ff(uae_u32 opcode) /* MOVE */ { -#ifdef 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 -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26289,62 +20123,38 @@ unsigned long REGPARAM2 op_7000_0_comp_ff(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_MOVE_l(tmp, src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8000_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8010_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26355,28 +20165,19 @@ unsigned long REGPARAM2 op_8010_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8018_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26385,63 +20186,45 @@ unsigned long REGPARAM2 op_8018_0_comp_ff(uae_u32 opcode) /* OR */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8020_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8028_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26452,28 +20235,19 @@ unsigned long REGPARAM2 op_8028_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8030_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26483,23 +20257,18 @@ unsigned long REGPARAM2 op_8030_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8038_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26509,23 +20278,18 @@ unsigned long REGPARAM2 op_8038_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8039_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26535,23 +20299,18 @@ unsigned long REGPARAM2 op_8039_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_803a_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26563,23 +20322,18 @@ unsigned long REGPARAM2 op_803a_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_803b_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26592,23 +20346,18 @@ unsigned long REGPARAM2 op_803b_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_803c_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26616,56 +20365,38 @@ unsigned long REGPARAM2 op_803c_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8040_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8050_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26676,28 +20407,19 @@ unsigned long REGPARAM2 op_8050_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8058_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26706,63 +20428,45 @@ unsigned long REGPARAM2 op_8058_0_comp_ff(uae_u32 opcode) /* OR */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8060_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8068_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26773,28 +20477,19 @@ unsigned long REGPARAM2 op_8068_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8070_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26804,23 +20499,18 @@ unsigned long REGPARAM2 op_8070_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8078_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26830,23 +20520,18 @@ unsigned long REGPARAM2 op_8078_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8079_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26856,23 +20541,18 @@ unsigned long REGPARAM2 op_8079_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_807a_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26884,23 +20564,18 @@ unsigned long REGPARAM2 op_807a_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_807b_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26913,23 +20588,18 @@ unsigned long REGPARAM2 op_807b_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_807c_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26937,56 +20607,38 @@ unsigned long REGPARAM2 op_807c_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8080_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8090_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -26997,28 +20649,19 @@ unsigned long REGPARAM2 op_8090_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8098_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27027,63 +20670,45 @@ unsigned long REGPARAM2 op_8098_0_comp_ff(uae_u32 opcode) /* OR */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80a0_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80a8_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27094,28 +20719,19 @@ unsigned long REGPARAM2 op_80a8_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80b0_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27125,23 +20741,18 @@ unsigned long REGPARAM2 op_80b0_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80b8_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27151,23 +20762,18 @@ unsigned long REGPARAM2 op_80b8_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80b9_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27177,23 +20783,18 @@ unsigned long REGPARAM2 op_80b9_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80ba_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27205,23 +20806,18 @@ unsigned long REGPARAM2 op_80ba_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80bb_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27234,23 +20830,18 @@ unsigned long REGPARAM2 op_80bb_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80bc_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27258,28 +20849,19 @@ unsigned long REGPARAM2 op_80bc_0_comp_ff(uae_u32 opcode) /* OR */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8110_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27290,27 +20872,18 @@ unsigned long REGPARAM2 op_8110_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8118_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27320,60 +20893,42 @@ unsigned long REGPARAM2 op_8118_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8120_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8128_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27384,27 +20939,18 @@ unsigned long REGPARAM2 op_8128_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8130_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27414,22 +20960,17 @@ unsigned long REGPARAM2 op_8130_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8138_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -27439,22 +20980,17 @@ unsigned long REGPARAM2 op_8138_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8139_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -27464,27 +21000,18 @@ unsigned long REGPARAM2 op_8139_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_b(tmp, dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8150_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27495,27 +21022,18 @@ unsigned long REGPARAM2 op_8150_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8158_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27525,60 +21043,42 @@ unsigned long REGPARAM2 op_8158_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8160_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8168_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27589,27 +21089,18 @@ unsigned long REGPARAM2 op_8168_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8170_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27619,22 +21110,17 @@ unsigned long REGPARAM2 op_8170_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8178_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -27644,22 +21130,17 @@ unsigned long REGPARAM2 op_8178_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8179_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -27669,27 +21150,18 @@ unsigned long REGPARAM2 op_8179_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_w(tmp, dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8190_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27700,27 +21172,18 @@ unsigned long REGPARAM2 op_8190_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8198_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27730,60 +21193,42 @@ unsigned long REGPARAM2 op_8198_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81a0_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81a8_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27794,27 +21239,18 @@ unsigned long REGPARAM2 op_81a8_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81b0_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27824,22 +21260,17 @@ unsigned long REGPARAM2 op_81b0_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81b8_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -27849,22 +21280,17 @@ unsigned long REGPARAM2 op_81b8_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81b9_0_comp_ff(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -27874,57 +21300,38 @@ unsigned long REGPARAM2 op_81b9_0_comp_ff(uae_u32 opcode) /* OR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_OR_l(tmp, dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9000_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9010_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27935,30 +21342,20 @@ unsigned long REGPARAM2 op_9010_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9018_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -27967,67 +21364,47 @@ unsigned long REGPARAM2 op_9018_0_comp_ff(uae_u32 opcode) /* SUB */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9020_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9028_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28038,30 +21415,20 @@ unsigned long REGPARAM2 op_9028_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9030_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28071,25 +21438,19 @@ unsigned long REGPARAM2 op_9030_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9038_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28099,25 +21460,19 @@ unsigned long REGPARAM2 op_9038_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9039_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28127,25 +21482,19 @@ unsigned long REGPARAM2 op_9039_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_903a_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28157,25 +21506,19 @@ unsigned long REGPARAM2 op_903a_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_903b_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28188,25 +21531,19 @@ unsigned long REGPARAM2 op_903b_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_903c_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28214,60 +21551,40 @@ unsigned long REGPARAM2 op_903c_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9040_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9048_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28276,30 +21593,20 @@ unsigned long REGPARAM2 op_9048_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9050_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28310,30 +21617,20 @@ unsigned long REGPARAM2 op_9050_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9058_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28342,67 +21639,47 @@ unsigned long REGPARAM2 op_9058_0_comp_ff(uae_u32 opcode) /* SUB */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9060_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9068_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28413,30 +21690,20 @@ unsigned long REGPARAM2 op_9068_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9070_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28446,25 +21713,19 @@ unsigned long REGPARAM2 op_9070_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9078_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28474,25 +21735,19 @@ unsigned long REGPARAM2 op_9078_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9079_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28502,25 +21757,19 @@ unsigned long REGPARAM2 op_9079_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_907a_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28532,25 +21781,19 @@ unsigned long REGPARAM2 op_907a_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_907b_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28563,25 +21806,19 @@ unsigned long REGPARAM2 op_907b_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_907c_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28589,60 +21826,40 @@ unsigned long REGPARAM2 op_907c_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9080_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9088_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28651,30 +21868,20 @@ unsigned long REGPARAM2 op_9088_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9090_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28685,30 +21892,20 @@ unsigned long REGPARAM2 op_9090_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9098_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28717,67 +21914,47 @@ unsigned long REGPARAM2 op_9098_0_comp_ff(uae_u32 opcode) /* SUB */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90a0_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90a8_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28788,30 +21965,20 @@ unsigned long REGPARAM2 op_90a8_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90b0_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28821,25 +21988,19 @@ unsigned long REGPARAM2 op_90b0_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90b8_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28849,25 +22010,19 @@ unsigned long REGPARAM2 op_90b8_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90b9_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28877,25 +22032,19 @@ unsigned long REGPARAM2 op_90b9_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90ba_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28907,25 +22056,19 @@ unsigned long REGPARAM2 op_90ba_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90bb_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28938,25 +22081,19 @@ unsigned long REGPARAM2 op_90bb_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90bc_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28964,30 +22101,20 @@ unsigned long REGPARAM2 op_90bc_0_comp_ff(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90c0_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -28996,9 +22123,7 @@ unsigned long REGPARAM2 op_90c0_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29006,16 +22131,8 @@ return 0; } unsigned long REGPARAM2 op_90c8_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29026,9 +22143,7 @@ unsigned long REGPARAM2 op_90c8_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29036,16 +22151,8 @@ return 0; } unsigned long REGPARAM2 op_90d0_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29058,9 +22165,7 @@ unsigned long REGPARAM2 op_90d0_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29068,16 +22173,8 @@ return 0; } unsigned long REGPARAM2 op_90d8_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29086,13 +22183,11 @@ unsigned long REGPARAM2 op_90d8_0_comp_ff(uae_u32 opcode) /* SUBA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29100,22 +22195,14 @@ return 0; } unsigned long REGPARAM2 op_90e0_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -29123,9 +22210,7 @@ unsigned long REGPARAM2 op_90e0_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29133,16 +22218,8 @@ return 0; } unsigned long REGPARAM2 op_90e8_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29155,9 +22232,7 @@ unsigned long REGPARAM2 op_90e8_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29165,16 +22240,8 @@ return 0; } unsigned long REGPARAM2 op_90f0_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29186,9 +22253,7 @@ unsigned long REGPARAM2 op_90f0_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29196,11 +22261,7 @@ return 0; } unsigned long REGPARAM2 op_90f8_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29212,9 +22273,7 @@ unsigned long REGPARAM2 op_90f8_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29222,11 +22281,7 @@ return 0; } unsigned long REGPARAM2 op_90f9_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29238,9 +22293,7 @@ unsigned long REGPARAM2 op_90f9_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29248,11 +22301,7 @@ return 0; } unsigned long REGPARAM2 op_90fa_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29266,9 +22315,7 @@ unsigned long REGPARAM2 op_90fa_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29276,11 +22323,7 @@ return 0; } unsigned long REGPARAM2 op_90fb_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29295,9 +22338,7 @@ unsigned long REGPARAM2 op_90fb_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29305,11 +22346,7 @@ return 0; } unsigned long REGPARAM2 op_90fc_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29319,9 +22356,7 @@ unsigned long REGPARAM2 op_90fc_0_comp_ff(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -29329,113 +22364,59 @@ return 0; } unsigned long REGPARAM2 op_9100_0_comp_ff(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; +{ int tmp=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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); + make_flags_live(); + jff_SUBX_b(tmp,dst,src); + live_flags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9108_0_comp_ff(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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]); + arm_SUB_l_ri8(dstreg+8,areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); +{ int tmp=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,1); - } - restore_carry(); - start_needflags(); - sbb_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); + make_flags_live(); + jff_SUBX_b(tmp,dst,src); + live_flags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writebyte(dsta,dst,scratchie); + writebyte(dsta,tmp,scratchie); }}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9110_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29446,29 +22427,19 @@ unsigned long REGPARAM2 op_9110_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9118_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29478,64 +22449,44 @@ unsigned long REGPARAM2 op_9118_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9120_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9128_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29546,29 +22497,19 @@ unsigned long REGPARAM2 op_9128_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9130_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29578,24 +22519,18 @@ unsigned long REGPARAM2 op_9130_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9138_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -29605,24 +22540,18 @@ unsigned long REGPARAM2 op_9138_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9139_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -29632,126 +22561,70 @@ unsigned long REGPARAM2 op_9139_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9140_0_comp_ff(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; +{ int tmp=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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); + make_flags_live(); + jff_SUBX_w(tmp,dst,src); + live_flags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9148_0_comp_ff(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(dstreg+8,2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); +{ int tmp=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,1); - } - restore_carry(); - start_needflags(); - sbb_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); + make_flags_live(); + jff_SUBX_w(tmp,dst,src); + live_flags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writeword(dsta,dst,scratchie); + writeword(dsta,tmp,scratchie); }}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9150_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29762,29 +22635,19 @@ unsigned long REGPARAM2 op_9150_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9158_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29794,64 +22657,44 @@ unsigned long REGPARAM2 op_9158_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9160_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9168_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29862,29 +22705,19 @@ unsigned long REGPARAM2 op_9168_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9170_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -29894,24 +22727,18 @@ unsigned long REGPARAM2 op_9170_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9178_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -29921,24 +22748,18 @@ unsigned long REGPARAM2 op_9178_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9179_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -29948,126 +22769,70 @@ unsigned long REGPARAM2 op_9179_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9180_0_comp_ff(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; +{ int tmp=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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); + make_flags_live(); + jff_SUBX_l(tmp,dst,src); + live_flags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9188_0_comp_ff(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(dstreg+8,4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); +{ int tmp=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,1); - } - restore_carry(); - start_needflags(); - sbb_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - set_zero(zero, one); - live_flags(); - } - end_needflags(); - if (needed_flags&FLAG_X) duplicate_carry(); + make_flags_live(); + jff_SUBX_l(tmp,dst,src); + live_flags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - writelong(dsta,dst,scratchie); + writelong(dsta,tmp,scratchie); }}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9190_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30078,29 +22843,19 @@ unsigned long REGPARAM2 op_9190_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9198_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30110,64 +22865,44 @@ unsigned long REGPARAM2 op_9198_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91a0_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91a8_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30178,29 +22913,19 @@ unsigned long REGPARAM2 op_91a8_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91b0_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30210,24 +22935,18 @@ unsigned long REGPARAM2 op_91b0_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91b8_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -30237,24 +22956,18 @@ unsigned long REGPARAM2 op_91b8_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91b9_0_comp_ff(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -30264,29 +22977,19 @@ unsigned long REGPARAM2 op_91b9_0_comp_ff(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_SUB_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91c0_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30295,9 +22998,7 @@ unsigned long REGPARAM2 op_91c0_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30305,16 +23006,8 @@ return 0; } unsigned long REGPARAM2 op_91c8_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30325,9 +23018,7 @@ unsigned long REGPARAM2 op_91c8_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30335,16 +23026,8 @@ return 0; } unsigned long REGPARAM2 op_91d0_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30357,9 +23040,7 @@ unsigned long REGPARAM2 op_91d0_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30367,16 +23048,8 @@ return 0; } unsigned long REGPARAM2 op_91d8_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30385,13 +23058,11 @@ unsigned long REGPARAM2 op_91d8_0_comp_ff(uae_u32 opcode) /* SUBA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30399,22 +23070,14 @@ return 0; } unsigned long REGPARAM2 op_91e0_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -30422,9 +23085,7 @@ unsigned long REGPARAM2 op_91e0_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30432,16 +23093,8 @@ return 0; } unsigned long REGPARAM2 op_91e8_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30454,9 +23107,7 @@ unsigned long REGPARAM2 op_91e8_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30464,16 +23115,8 @@ return 0; } unsigned long REGPARAM2 op_91f0_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30485,9 +23128,7 @@ unsigned long REGPARAM2 op_91f0_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30495,11 +23136,7 @@ return 0; } unsigned long REGPARAM2 op_91f8_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30511,9 +23148,7 @@ unsigned long REGPARAM2 op_91f8_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30521,11 +23156,7 @@ return 0; } unsigned long REGPARAM2 op_91f9_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30537,9 +23168,7 @@ unsigned long REGPARAM2 op_91f9_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30547,11 +23176,7 @@ return 0; } unsigned long REGPARAM2 op_91fa_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30565,9 +23190,7 @@ unsigned long REGPARAM2 op_91fa_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30575,11 +23198,7 @@ return 0; } unsigned long REGPARAM2 op_91fb_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30594,9 +23213,7 @@ unsigned long REGPARAM2 op_91fb_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30604,11 +23221,7 @@ return 0; } unsigned long REGPARAM2 op_91fc_0_comp_ff(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30618,9 +23231,7 @@ unsigned long REGPARAM2 op_91fc_0_comp_ff(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -30628,43 +23239,25 @@ return 0; } unsigned long REGPARAM2 op_b000_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; -{ dont_care_flags(); - start_needflags(); - cmp_b(dst,src); - live_flags(); - end_needflags(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b010_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30675,27 +23268,17 @@ unsigned long REGPARAM2 op_b010_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b018_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30704,61 +23287,41 @@ unsigned long REGPARAM2 op_b018_0_comp_ff(uae_u32 opcode) /* CMP */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b020_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b028_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30769,27 +23332,17 @@ unsigned long REGPARAM2 op_b028_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b030_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30799,22 +23352,16 @@ unsigned long REGPARAM2 op_b030_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b038_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30824,22 +23371,16 @@ unsigned long REGPARAM2 op_b038_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b039_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30849,22 +23390,16 @@ unsigned long REGPARAM2 op_b039_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b03a_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30876,22 +23411,16 @@ unsigned long REGPARAM2 op_b03a_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b03b_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30904,22 +23433,16 @@ unsigned long REGPARAM2 op_b03b_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b03c_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30927,54 +23450,34 @@ unsigned long REGPARAM2 op_b03c_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b040_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; -{ dont_care_flags(); - start_needflags(); - cmp_w(dst,src); - live_flags(); - end_needflags(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b048_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -30983,27 +23486,17 @@ unsigned long REGPARAM2 op_b048_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b050_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31014,27 +23507,17 @@ unsigned long REGPARAM2 op_b050_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b058_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31043,61 +23526,41 @@ unsigned long REGPARAM2 op_b058_0_comp_ff(uae_u32 opcode) /* CMP */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b060_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b068_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31108,27 +23571,17 @@ unsigned long REGPARAM2 op_b068_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b070_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31138,22 +23591,16 @@ unsigned long REGPARAM2 op_b070_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b078_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31163,22 +23610,16 @@ unsigned long REGPARAM2 op_b078_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b079_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31188,22 +23629,16 @@ unsigned long REGPARAM2 op_b079_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b07a_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31215,22 +23650,16 @@ unsigned long REGPARAM2 op_b07a_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b07b_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31243,22 +23672,16 @@ unsigned long REGPARAM2 op_b07b_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b07c_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31266,54 +23689,34 @@ unsigned long REGPARAM2 op_b07c_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b080_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; -{ dont_care_flags(); - start_needflags(); - cmp_l(dst,src); - live_flags(); - end_needflags(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b088_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31322,27 +23725,20 @@ unsigned long REGPARAM2 op_b088_0_comp_ff(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } +#endif + +#ifdef PART_7 unsigned long REGPARAM2 op_b090_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31353,27 +23749,17 @@ unsigned long REGPARAM2 op_b090_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b098_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31382,61 +23768,41 @@ unsigned long REGPARAM2 op_b098_0_comp_ff(uae_u32 opcode) /* CMP */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0a0_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0a8_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31447,30 +23813,17 @@ unsigned long REGPARAM2 op_b0a8_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -#endif - -#ifdef PART_7 unsigned long REGPARAM2 op_b0b0_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31480,22 +23833,16 @@ unsigned long REGPARAM2 op_b0b0_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0b8_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31505,22 +23852,16 @@ unsigned long REGPARAM2 op_b0b8_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0b9_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31530,22 +23871,16 @@ unsigned long REGPARAM2 op_b0b9_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0ba_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31557,22 +23892,16 @@ unsigned long REGPARAM2 op_b0ba_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0bb_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31585,22 +23914,16 @@ unsigned long REGPARAM2 op_b0bb_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0bc_0_comp_ff(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31608,27 +23931,17 @@ unsigned long REGPARAM2 op_b0bc_0_comp_ff(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0c0_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31637,29 +23950,17 @@ unsigned long REGPARAM2 op_b0c0_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0c8_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31670,29 +23971,17 @@ unsigned long REGPARAM2 op_b0c8_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0d0_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31705,29 +23994,17 @@ unsigned long REGPARAM2 op_b0d0_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0d8_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31736,39 +24013,27 @@ unsigned long REGPARAM2 op_b0d8_0_comp_ff(uae_u32 opcode) /* CMPA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0e0_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -31776,29 +24041,17 @@ unsigned long REGPARAM2 op_b0e0_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0e8_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31811,29 +24064,17 @@ unsigned long REGPARAM2 op_b0e8_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0f0_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31845,24 +24086,16 @@ unsigned long REGPARAM2 op_b0f0_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0f8_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31874,24 +24107,16 @@ unsigned long REGPARAM2 op_b0f8_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0f9_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31903,24 +24128,16 @@ unsigned long REGPARAM2 op_b0f9_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0fa_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31934,24 +24151,16 @@ unsigned long REGPARAM2 op_b0fa_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0fb_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31966,24 +24175,16 @@ unsigned long REGPARAM2 op_b0fb_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0fc_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -31993,57 +24194,36 @@ unsigned long REGPARAM2 op_b0fc_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b100_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b108_0_comp_ff(uae_u32 opcode) /* CMPM */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32052,33 +24232,23 @@ unsigned long REGPARAM2 op_b108_0_comp_ff(uae_u32 opcode) /* CMPM */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ dont_care_flags(); + jff_CMP_b(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b110_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32089,27 +24259,18 @@ unsigned long REGPARAM2 op_b110_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b118_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32119,60 +24280,42 @@ unsigned long REGPARAM2 op_b118_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b120_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b128_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32183,27 +24326,18 @@ unsigned long REGPARAM2 op_b128_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b130_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32213,22 +24347,17 @@ unsigned long REGPARAM2 op_b130_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b138_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -32238,22 +24367,17 @@ unsigned long REGPARAM2 op_b138_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b139_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -32263,55 +24387,37 @@ unsigned long REGPARAM2 op_b139_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b140_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b148_0_comp_ff(uae_u32 opcode) /* CMPM */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32320,33 +24426,23 @@ unsigned long REGPARAM2 op_b148_0_comp_ff(uae_u32 opcode) /* CMPM */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,2); +{ dont_care_flags(); + jff_CMP_w(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b150_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32357,27 +24453,18 @@ unsigned long REGPARAM2 op_b150_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b158_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32387,60 +24474,42 @@ unsigned long REGPARAM2 op_b158_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b160_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b168_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32451,27 +24520,18 @@ unsigned long REGPARAM2 op_b168_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b170_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32481,22 +24541,17 @@ unsigned long REGPARAM2 op_b170_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b178_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -32506,22 +24561,17 @@ unsigned long REGPARAM2 op_b178_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b179_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -32531,55 +24581,37 @@ unsigned long REGPARAM2 op_b179_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b180_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b188_0_comp_ff(uae_u32 opcode) /* CMPM */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32588,33 +24620,23 @@ unsigned long REGPARAM2 op_b188_0_comp_ff(uae_u32 opcode) /* CMPM */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,4); +{ dont_care_flags(); + jff_CMP_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b190_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32625,27 +24647,18 @@ unsigned long REGPARAM2 op_b190_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b198_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32655,60 +24668,42 @@ unsigned long REGPARAM2 op_b198_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1a0_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1a8_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32719,27 +24714,18 @@ unsigned long REGPARAM2 op_b1a8_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1b0_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32749,22 +24735,17 @@ unsigned long REGPARAM2 op_b1b0_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1b8_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -32774,22 +24755,17 @@ unsigned long REGPARAM2 op_b1b8_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1b9_0_comp_ff(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -32799,27 +24775,18 @@ unsigned long REGPARAM2 op_b1b9_0_comp_ff(uae_u32 opcode) /* EOR */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_EOR_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1c0_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32828,29 +24795,17 @@ unsigned long REGPARAM2 op_b1c0_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1c8_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32861,29 +24816,17 @@ unsigned long REGPARAM2 op_b1c8_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1d0_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32896,29 +24839,17 @@ unsigned long REGPARAM2 op_b1d0_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1d8_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -32927,39 +24858,27 @@ unsigned long REGPARAM2 op_b1d8_0_comp_ff(uae_u32 opcode) /* CMPA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1e0_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -32967,29 +24886,17 @@ unsigned long REGPARAM2 op_b1e0_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1e8_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33002,29 +24909,17 @@ unsigned long REGPARAM2 op_b1e8_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1f0_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33036,24 +24931,16 @@ unsigned long REGPARAM2 op_b1f0_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1f8_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33065,24 +24952,16 @@ unsigned long REGPARAM2 op_b1f8_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1f9_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33094,24 +24973,16 @@ unsigned long REGPARAM2 op_b1f9_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1fa_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33125,24 +24996,16 @@ unsigned long REGPARAM2 op_b1fa_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1fb_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33157,24 +25020,16 @@ unsigned long REGPARAM2 op_b1fb_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1fc_0_comp_ff(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33184,57 +25039,36 @@ unsigned long REGPARAM2 op_b1fc_0_comp_ff(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); + jff_CMPA_l(dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c000_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c010_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33245,28 +25079,19 @@ unsigned long REGPARAM2 op_c010_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c018_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33275,63 +25100,45 @@ unsigned long REGPARAM2 op_c018_0_comp_ff(uae_u32 opcode) /* AND */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c020_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c028_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33342,28 +25149,19 @@ unsigned long REGPARAM2 op_c028_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c030_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33373,23 +25171,18 @@ unsigned long REGPARAM2 op_c030_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c038_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33399,23 +25192,18 @@ unsigned long REGPARAM2 op_c038_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c039_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33425,23 +25213,18 @@ unsigned long REGPARAM2 op_c039_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c03a_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33453,23 +25236,18 @@ unsigned long REGPARAM2 op_c03a_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c03b_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33482,23 +25260,18 @@ unsigned long REGPARAM2 op_c03b_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c03c_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33506,56 +25279,38 @@ unsigned long REGPARAM2 op_c03c_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c040_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c050_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33566,28 +25321,19 @@ unsigned long REGPARAM2 op_c050_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c058_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33596,63 +25342,45 @@ unsigned long REGPARAM2 op_c058_0_comp_ff(uae_u32 opcode) /* AND */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c060_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c068_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33663,28 +25391,19 @@ unsigned long REGPARAM2 op_c068_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c070_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33694,23 +25413,18 @@ unsigned long REGPARAM2 op_c070_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c078_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33720,23 +25434,18 @@ unsigned long REGPARAM2 op_c078_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c079_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33746,23 +25455,18 @@ unsigned long REGPARAM2 op_c079_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c07a_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33774,23 +25478,18 @@ unsigned long REGPARAM2 op_c07a_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c07b_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33803,23 +25502,18 @@ unsigned long REGPARAM2 op_c07b_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c07c_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33827,56 +25521,38 @@ unsigned long REGPARAM2 op_c07c_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c080_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c090_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33887,28 +25563,19 @@ unsigned long REGPARAM2 op_c090_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c098_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33917,63 +25584,45 @@ unsigned long REGPARAM2 op_c098_0_comp_ff(uae_u32 opcode) /* AND */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0a0_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0a8_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -33984,28 +25633,19 @@ unsigned long REGPARAM2 op_c0a8_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0b0_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34015,23 +25655,18 @@ unsigned long REGPARAM2 op_c0b0_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0b8_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34041,23 +25676,18 @@ unsigned long REGPARAM2 op_c0b8_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0b9_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34067,23 +25697,18 @@ unsigned long REGPARAM2 op_c0b9_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0ba_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34095,23 +25720,18 @@ unsigned long REGPARAM2 op_c0ba_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0bb_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34124,23 +25744,18 @@ unsigned long REGPARAM2 op_c0bb_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0bc_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34148,300 +25763,191 @@ unsigned long REGPARAM2 op_c0bc_0_comp_ff(uae_u32 opcode) /* AND */ { 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0c0_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0d0_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0d8_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); + arm_ADD_l_ri8(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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0e0_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); {{ int srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0e8_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0f0_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0f8_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0f9_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0fa_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); @@ -34449,31 +25955,21 @@ unsigned long REGPARAM2 op_c0fa_0_comp_ff(uae_u32 opcode) /* MULU */ { 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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0fb_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; @@ -34482,59 +25978,35 @@ unsigned long REGPARAM2 op_c0fb_0_comp_ff(uae_u32 opcode) /* MULU */ { 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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0fc_0_comp_ff(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULU(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c110_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34545,27 +26017,18 @@ unsigned long REGPARAM2 op_c110_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c118_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34575,60 +26038,42 @@ unsigned long REGPARAM2 op_c118_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c120_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c128_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34639,27 +26084,18 @@ unsigned long REGPARAM2 op_c128_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c130_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34669,22 +26105,17 @@ unsigned long REGPARAM2 op_c130_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c138_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -34694,22 +26125,17 @@ unsigned long REGPARAM2 op_c138_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c139_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -34719,27 +26145,18 @@ unsigned long REGPARAM2 op_c139_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_b(tmp,dst,src); + live_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c140_0_comp_ff(uae_u32 opcode) /* EXG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34757,16 +26174,8 @@ return 0; } unsigned long REGPARAM2 op_c148_0_comp_ff(uae_u32 opcode) /* EXG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34788,16 +26197,8 @@ return 0; } unsigned long REGPARAM2 op_c150_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34808,27 +26209,18 @@ unsigned long REGPARAM2 op_c150_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c158_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34838,60 +26230,42 @@ unsigned long REGPARAM2 op_c158_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c160_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c168_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34902,27 +26276,18 @@ unsigned long REGPARAM2 op_c168_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c170_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -34932,22 +26297,17 @@ unsigned long REGPARAM2 op_c170_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c178_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -34957,22 +26317,17 @@ unsigned long REGPARAM2 op_c178_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c179_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -34982,27 +26337,18 @@ unsigned long REGPARAM2 op_c179_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_w(tmp,dst,src); + live_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c188_0_comp_ff(uae_u32 opcode) /* EXG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35022,16 +26368,8 @@ return 0; } unsigned long REGPARAM2 op_c190_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35042,27 +26380,18 @@ unsigned long REGPARAM2 op_c190_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c198_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35072,60 +26401,42 @@ unsigned long REGPARAM2 op_c198_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1a0_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1a8_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35136,27 +26447,18 @@ unsigned long REGPARAM2 op_c1a8_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1b0_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35166,22 +26468,17 @@ unsigned long REGPARAM2 op_c1b0_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1b8_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -35191,22 +26488,17 @@ unsigned long REGPARAM2 op_c1b8_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1b9_0_comp_ff(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -35216,299 +26508,190 @@ unsigned long REGPARAM2 op_c1b9_0_comp_ff(uae_u32 opcode) /* AND */ 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(); + dont_care_flags(); + int tmp=scratchie++; +{ jff_AND_l(tmp,dst,src); + live_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1c0_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1d0_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1d8_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); + arm_ADD_l_ri8(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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1e0_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); {{ int srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1e8_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1f0_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1f8_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1f9_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1fa_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); @@ -35516,31 +26699,21 @@ unsigned long REGPARAM2 op_c1fa_0_comp_ff(uae_u32 opcode) /* MULS */ { 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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1fb_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; @@ -35549,89 +26722,55 @@ unsigned long REGPARAM2 op_c1fb_0_comp_ff(uae_u32 opcode) /* MULS */ { 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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1fc_0_comp_ff(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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) +{ jff_MULS(dst,src); + live_flags(); + if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d000_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d010_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35642,30 +26781,20 @@ unsigned long REGPARAM2 op_d010_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d018_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35674,67 +26803,47 @@ unsigned long REGPARAM2 op_d018_0_comp_ff(uae_u32 opcode) /* ADD */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d020_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d028_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35745,30 +26854,20 @@ unsigned long REGPARAM2 op_d028_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d030_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35778,25 +26877,19 @@ unsigned long REGPARAM2 op_d030_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d038_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35806,25 +26899,19 @@ unsigned long REGPARAM2 op_d038_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d039_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35834,25 +26921,19 @@ unsigned long REGPARAM2 op_d039_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d03a_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35864,25 +26945,19 @@ unsigned long REGPARAM2 op_d03a_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d03b_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35895,25 +26970,19 @@ unsigned long REGPARAM2 op_d03b_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d03c_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35921,60 +26990,40 @@ unsigned long REGPARAM2 op_d03c_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d040_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d048_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -35983,30 +27032,20 @@ unsigned long REGPARAM2 op_d048_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d050_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36017,30 +27056,20 @@ unsigned long REGPARAM2 op_d050_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d058_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36049,67 +27078,47 @@ unsigned long REGPARAM2 op_d058_0_comp_ff(uae_u32 opcode) /* ADD */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d060_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d068_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36120,30 +27129,20 @@ unsigned long REGPARAM2 op_d068_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d070_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36153,25 +27152,19 @@ unsigned long REGPARAM2 op_d070_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d078_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36181,25 +27174,19 @@ unsigned long REGPARAM2 op_d078_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d079_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36209,25 +27196,19 @@ unsigned long REGPARAM2 op_d079_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d07a_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36239,25 +27220,19 @@ unsigned long REGPARAM2 op_d07a_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d07b_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36270,25 +27245,19 @@ unsigned long REGPARAM2 op_d07b_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d07c_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36296,60 +27265,40 @@ unsigned long REGPARAM2 op_d07c_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d080_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d088_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36358,30 +27307,20 @@ unsigned long REGPARAM2 op_d088_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d090_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36392,30 +27331,20 @@ unsigned long REGPARAM2 op_d090_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d098_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36424,67 +27353,47 @@ unsigned long REGPARAM2 op_d098_0_comp_ff(uae_u32 opcode) /* ADD */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0a0_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0a8_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36495,30 +27404,20 @@ unsigned long REGPARAM2 op_d0a8_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0b0_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36528,25 +27427,19 @@ unsigned long REGPARAM2 op_d0b0_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0b8_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36556,25 +27449,19 @@ unsigned long REGPARAM2 op_d0b8_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0b9_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36584,25 +27471,19 @@ unsigned long REGPARAM2 op_d0b9_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0ba_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36614,25 +27495,19 @@ unsigned long REGPARAM2 op_d0ba_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0bb_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36645,25 +27520,19 @@ unsigned long REGPARAM2 op_d0bb_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0bc_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36671,30 +27540,20 @@ unsigned long REGPARAM2 op_d0bc_0_comp_ff(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0c0_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36703,9 +27562,7 @@ unsigned long REGPARAM2 op_d0c0_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36713,16 +27570,8 @@ return 0; } unsigned long REGPARAM2 op_d0c8_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36733,9 +27582,7 @@ unsigned long REGPARAM2 op_d0c8_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36743,16 +27590,8 @@ return 0; } unsigned long REGPARAM2 op_d0d0_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36765,9 +27604,7 @@ unsigned long REGPARAM2 op_d0d0_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36775,16 +27612,8 @@ return 0; } unsigned long REGPARAM2 op_d0d8_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36793,13 +27622,11 @@ unsigned long REGPARAM2 op_d0d8_0_comp_ff(uae_u32 opcode) /* ADDA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36807,22 +27634,14 @@ return 0; } unsigned long REGPARAM2 op_d0e0_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -36830,9 +27649,7 @@ unsigned long REGPARAM2 op_d0e0_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36840,16 +27657,8 @@ return 0; } unsigned long REGPARAM2 op_d0e8_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36862,9 +27671,7 @@ unsigned long REGPARAM2 op_d0e8_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36872,16 +27679,8 @@ return 0; } unsigned long REGPARAM2 op_d0f0_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36893,9 +27692,7 @@ unsigned long REGPARAM2 op_d0f0_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36903,11 +27700,7 @@ return 0; } unsigned long REGPARAM2 op_d0f8_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36919,9 +27712,7 @@ unsigned long REGPARAM2 op_d0f8_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36929,11 +27720,7 @@ return 0; } unsigned long REGPARAM2 op_d0f9_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36945,9 +27732,7 @@ unsigned long REGPARAM2 op_d0f9_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36955,11 +27740,7 @@ return 0; } unsigned long REGPARAM2 op_d0fa_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -36973,9 +27754,7 @@ unsigned long REGPARAM2 op_d0fa_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -36983,11 +27762,7 @@ return 0; } unsigned long REGPARAM2 op_d0fb_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37002,9 +27777,7 @@ unsigned long REGPARAM2 op_d0fb_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -37012,11 +27785,7 @@ return 0; } unsigned long REGPARAM2 op_d0fc_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37026,9 +27795,7 @@ unsigned long REGPARAM2 op_d0fc_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -37036,113 +27803,59 @@ return 0; } unsigned long REGPARAM2 op_d100_0_comp_ff(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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,1); - } - restore_carry(); - start_needflags(); - adc_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - 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(); +{ dont_care_flags(); + int tmp=scratchie++; + make_flags_live(); + jff_ADDX_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d108_0_comp_ff(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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]); + arm_SUB_l_ri8(dstreg+8,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,1); - } - restore_carry(); - start_needflags(); - adc_b(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - 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(); +{ dont_care_flags(); + int tmp=scratchie++; + make_flags_live(); + jff_ADDX_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d110_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37153,29 +27866,19 @@ unsigned long REGPARAM2 op_d110_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d118_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37185,64 +27888,44 @@ unsigned long REGPARAM2 op_d118_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d120_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d128_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37253,29 +27936,19 @@ unsigned long REGPARAM2 op_d128_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d130_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37285,24 +27958,18 @@ unsigned long REGPARAM2 op_d130_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d138_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -37312,24 +27979,18 @@ unsigned long REGPARAM2 op_d138_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d139_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -37339,126 +28000,70 @@ unsigned long REGPARAM2 op_d139_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_b(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d140_0_comp_ff(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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,1); - } - restore_carry(); - start_needflags(); - adc_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - 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(); +{ dont_care_flags(); + int tmp=scratchie++; + make_flags_live(); + jff_ADDX_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d148_0_comp_ff(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(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,1); - } - restore_carry(); - start_needflags(); - adc_w(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - 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(); +{ dont_care_flags(); + int tmp=scratchie++; + make_flags_live(); + jff_ADDX_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d150_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37469,29 +28074,19 @@ unsigned long REGPARAM2 op_d150_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d158_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37501,64 +28096,44 @@ unsigned long REGPARAM2 op_d158_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d160_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d168_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37569,29 +28144,19 @@ unsigned long REGPARAM2 op_d168_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d170_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37601,24 +28166,18 @@ unsigned long REGPARAM2 op_d170_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d178_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -37628,24 +28187,18 @@ unsigned long REGPARAM2 op_d178_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d179_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -37655,126 +28208,70 @@ unsigned long REGPARAM2 op_d179_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_w(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d180_0_comp_ff(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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,1); - } - restore_carry(); - start_needflags(); - adc_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - 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(); +{ dont_care_flags(); + int tmp=scratchie++; + make_flags_live(); + jff_ADDX_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d188_0_comp_ff(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(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,1); - } - restore_carry(); - start_needflags(); - adc_l(dst,src); - live_flags(); - if (needed_flags&FLAG_Z) { - cmov_l_rr(zero,one,1); - 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(); +{ dont_care_flags(); + int tmp=scratchie++; + make_flags_live(); + jff_ADDX_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d190_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37785,29 +28282,19 @@ unsigned long REGPARAM2 op_d190_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d198_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37817,64 +28304,44 @@ unsigned long REGPARAM2 op_d198_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1a0_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1a8_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37885,29 +28352,19 @@ unsigned long REGPARAM2 op_d1a8_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1b0_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -37917,24 +28374,18 @@ unsigned long REGPARAM2 op_d1b0_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1b8_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -37944,24 +28395,18 @@ unsigned long REGPARAM2 op_d1b8_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1b9_0_comp_ff(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -37971,29 +28416,19 @@ unsigned long REGPARAM2 op_d1b9_0_comp_ff(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jff_ADD_l(tmp,dst,src); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1c0_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38002,9 +28437,7 @@ unsigned long REGPARAM2 op_d1c0_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38012,16 +28445,8 @@ return 0; } unsigned long REGPARAM2 op_d1c8_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38032,9 +28457,7 @@ unsigned long REGPARAM2 op_d1c8_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38042,16 +28465,8 @@ return 0; } unsigned long REGPARAM2 op_d1d0_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38064,9 +28479,7 @@ unsigned long REGPARAM2 op_d1d0_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38074,16 +28487,8 @@ return 0; } unsigned long REGPARAM2 op_d1d8_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38092,13 +28497,11 @@ unsigned long REGPARAM2 op_d1d8_0_comp_ff(uae_u32 opcode) /* ADDA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38106,22 +28509,14 @@ return 0; } unsigned long REGPARAM2 op_d1e0_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -38129,9 +28524,7 @@ unsigned long REGPARAM2 op_d1e0_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38139,16 +28532,8 @@ return 0; } unsigned long REGPARAM2 op_d1e8_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38161,9 +28546,7 @@ unsigned long REGPARAM2 op_d1e8_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38171,16 +28554,8 @@ return 0; } unsigned long REGPARAM2 op_d1f0_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38192,9 +28567,7 @@ unsigned long REGPARAM2 op_d1f0_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38202,11 +28575,7 @@ return 0; } unsigned long REGPARAM2 op_d1f8_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38218,9 +28587,7 @@ unsigned long REGPARAM2 op_d1f8_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38228,11 +28595,7 @@ return 0; } unsigned long REGPARAM2 op_d1f9_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38244,9 +28607,7 @@ unsigned long REGPARAM2 op_d1f9_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38254,11 +28615,7 @@ return 0; } unsigned long REGPARAM2 op_d1fa_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38272,9 +28629,7 @@ unsigned long REGPARAM2 op_d1fa_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38282,11 +28637,7 @@ return 0; } unsigned long REGPARAM2 op_d1fb_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38301,9 +28652,7 @@ unsigned long REGPARAM2 op_d1fb_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38311,11 +28660,7 @@ return 0; } unsigned long REGPARAM2 op_d1fc_0_comp_ff(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38325,9 +28670,7 @@ unsigned long REGPARAM2 op_d1fc_0_comp_ff(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -38335,127 +28678,73 @@ return 0; } unsigned long REGPARAM2 op_e000_0_comp_ff(uae_u32 opcode) /* ASR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shra_b_ri(data,srcreg); - bp=srcreg-1; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(tmp,bp); +{ int tmp=scratchie++; + jff_ASR_b_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e008_0_comp_ff(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shrl_b_ri(data,srcreg); - bp=srcreg-1; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(tmp,bp); + int tmp=scratchie++; +{ jff_LSR_b_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e018_0_comp_ff(uae_u32 opcode) /* ROR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ ror_b_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(data,0x07); +{ int tmp=scratchie++; + jff_ROR_b(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_b_rr(dstreg,data); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e020_0_comp_ff(uae_u32 opcode) /* ASR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38464,262 +28753,26 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int width; - int cdata=scratchie++; - int tmpcnt=scratchie++; - int highshift=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shra_b_rr(data,cnt); - highmask=0x38; - width=8; -test_l_ri(cnt,highmask); -mov_l_ri(highshift,0); -mov_l_ri(scratchie,width/2); -cmov_l_rr(highshift,scratchie,1); - shra_b_rr(data,highshift); - shra_b_rr(data,highshift); - sub_l_ri(tmpcnt,1); - shra_b_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -cmov_l_rr(cdata,data,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(cdata,0); +{ int tmp=scratchie++; + jff_ASR_b_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_b_rr(dstreg,data); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } -unsigned long REGPARAM2 op_e028_0_comp_ff(uae_u32 opcode) /* LSR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else - uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = 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 ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; -} -{ dont_care_flags(); -{ int cnt=srcreg; -{ int data=dstreg; -{ int highmask; - int cdata=scratchie++; - int tmpcnt=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shrl_b_rr(data,cnt); - highmask=0x38; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_b_rr(data,scratchie); - sub_l_ri(tmpcnt,1); - shrl_b_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(cdata,scratchie,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(cdata,0); - 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; -} -unsigned long REGPARAM2 op_e038_0_comp_ff(uae_u32 opcode) /* ROR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else - uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = 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 ((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(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(data,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; -} -unsigned long REGPARAM2 op_e040_0_comp_ff(uae_u32 opcode) /* ASR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = opcode & 7; -#endif - 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; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shra_w_ri(data,srcreg); - bp=srcreg-1; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(tmp,bp); - 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; -} -unsigned long REGPARAM2 op_e048_0_comp_ff(uae_u32 opcode) /* LSR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = opcode & 7; -#endif - 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; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shrl_w_ri(data,srcreg); - bp=srcreg-1; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(tmp,bp); - 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; -} -unsigned long REGPARAM2 op_e058_0_comp_ff(uae_u32 opcode) /* ROR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = opcode & 7; -#endif - 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(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(data,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; -} #endif #ifdef PART_8 -unsigned long REGPARAM2 op_e060_0_comp_ff(uae_u32 opcode) /* ASR */ +unsigned long REGPARAM2 op_e028_0_comp_ff(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38728,57 +28781,137 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int width; - int cdata=scratchie++; - int tmpcnt=scratchie++; - int highshift=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shra_w_rr(data,cnt); - highmask=0x30; - width=16; -test_l_ri(cnt,highmask); -mov_l_ri(highshift,0); -mov_l_ri(scratchie,width/2); -cmov_l_rr(highshift,scratchie,1); - shra_w_rr(data,highshift); - shra_w_rr(data,highshift); - sub_l_ri(tmpcnt,1); - shra_w_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -cmov_l_rr(cdata,data,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(cdata,0); + int tmp=scratchie++; +{ jff_LSR_b_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_w_rr(dstreg,data); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e038_0_comp_ff(uae_u32 opcode) /* ROR */ +{ + uae_s32 srcreg = ((opcode >> 9) & 7); + uae_u32 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 tmp=scratchie++; + jff_ROR_b(tmp,data,cnt); + live_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e040_0_comp_ff(uae_u32 opcode) /* ASR */ +{ + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + uae_u32 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; +{ int tmp=scratchie++; + jff_ASR_w_imm(tmp,data,srcreg); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e048_0_comp_ff(uae_u32 opcode) /* LSR */ +{ + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + uae_u32 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; + int tmp=scratchie++; +{ jff_LSR_w_imm(tmp,data,srcreg); + live_flags(); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e058_0_comp_ff(uae_u32 opcode) /* ROR */ +{ + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + uae_u32 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; +{ int tmp=scratchie++; + jff_ROR_w(tmp,data,cnt); + live_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e060_0_comp_ff(uae_u32 opcode) /* ASR */ +{ + uae_s32 srcreg = ((opcode >> 9) & 7); + uae_u32 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 tmp=scratchie++; + jff_ASR_w_reg(tmp,data,cnt); + live_flags(); +if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e068_0_comp_ff(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38787,53 +28920,23 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int cdata=scratchie++; - int tmpcnt=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shrl_w_rr(data,cnt); - highmask=0x30; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_w_rr(data,scratchie); - sub_l_ri(tmpcnt,1); - shrl_w_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(cdata,scratchie,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(cdata,0); + int tmp=scratchie++; +{ jff_LSR_w_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_w_rr(dstreg,data); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e078_0_comp_ff(uae_u32 opcode) /* ROR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38842,145 +28945,87 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ ror_w_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(data,0x0f); +{ int tmp=scratchie++; + jff_ROR_w(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_w_rr(dstreg,data); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e080_0_comp_ff(uae_u32 opcode) /* ASR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shra_l_ri(data,srcreg); - bp=srcreg-1; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(tmp,bp); +{ int tmp=scratchie++; + jff_ASR_l_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e088_0_comp_ff(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shrl_l_ri(data,srcreg); - bp=srcreg-1; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(tmp,bp); + int tmp=scratchie++; +{ jff_LSR_l_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e098_0_comp_ff(uae_u32 opcode) /* ROR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ ror_l_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(data,0x1f); +{ int tmp=scratchie++; + jff_ROR_l(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_l_rr(dstreg,data); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e0a0_0_comp_ff(uae_u32 opcode) /* ASR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -38989,57 +29034,23 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int width; - int cdata=scratchie++; - int tmpcnt=scratchie++; - int highshift=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shra_l_rr(data,cnt); - highmask=0x20; - width=32; -test_l_ri(cnt,highmask); -mov_l_ri(highshift,0); -mov_l_ri(scratchie,width/2); -cmov_l_rr(highshift,scratchie,1); - shra_l_rr(data,highshift); - shra_l_rr(data,highshift); - sub_l_ri(tmpcnt,1); - shra_l_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -cmov_l_rr(cdata,data,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(cdata,0); +{ int tmp=scratchie++; + jff_ASR_l_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_l_rr(dstreg,data); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e0a8_0_comp_ff(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39048,53 +29059,23 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int cdata=scratchie++; - int tmpcnt=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shrl_l_rr(data,cnt); - highmask=0x20; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_l_rr(data,scratchie); - sub_l_ri(tmpcnt,1); - shrl_l_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(cdata,scratchie,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(cdata,0); + int tmp=scratchie++; +{ jff_LSR_l_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_l_rr(dstreg,data); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e0b8_0_comp_ff(uae_u32 opcode) /* ROR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39103,77 +29084,180 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ ror_l_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(data,0x1f); +{ int tmp=scratchie++; + jff_ROR_l(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_l_rr(dstreg,data); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } -unsigned long REGPARAM2 op_e100_0_comp_ff(uae_u32 opcode) /* ASL */ +unsigned long REGPARAM2 op_e0d0_0_comp_ff(uae_u32 opcode) /* ASRW */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = opcode & 7; -#endif + uae_s32 srcreg = (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; -} + 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 tmp = scratchie++; + jff_ASRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0d8_0_comp_ff(uae_u32 opcode) /* ASRW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp = scratchie++; + jff_ASRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0e0_0_comp_ff(uae_u32 opcode) /* ASRW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jff_ASRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0e8_0_comp_ff(uae_u32 opcode) /* ASRW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp = scratchie++; + jff_ASRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0f0_0_comp_ff(uae_u32 opcode) /* ASRW */ +{ + uae_s32 srcreg = (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 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 tmp = scratchie++; + jff_ASRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0f8_0_comp_ff(uae_u32 opcode) /* ASRW */ +{ + 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 tmp = scratchie++; + jff_ASRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0f9_0_comp_ff(uae_u32 opcode) /* ASRW */ +{ + 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 tmp = scratchie++; + jff_ASRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e100_0_comp_ff(uae_u32 opcode) /* ASL */ +{ + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + uae_u32 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 tmp=scratchie++; { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_b_ri(data,srcreg); - bp=8-srcreg; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(tmp,bp); +{ jff_ASL_b_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e108_0_comp_ff(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39182,70 +29266,41 @@ unsigned long REGPARAM2 op_e108_0_comp_ff(uae_u32 opcode) /* LSL */ { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_b_ri(data,srcreg); - bp=8-srcreg; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(tmp,bp); + int tmp=scratchie++; +{ jff_LSL_b_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e118_0_comp_ff(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ rol_b_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(data,0x00); +{ int tmp=scratchie++; + jff_ROL_b(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_b_rr(dstreg,data); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e120_0_comp_ff(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39254,57 +29309,23 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); -if (needed_flags & FLAG_V) { - FAIL(1); - return 0; -} +{ dont_care_flags(); + int tmp=scratchie++; { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int cdata=scratchie++; - int tmpcnt=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shll_b_rr(data,cnt); - highmask=0x38; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_b_rr(data,scratchie); - sub_l_ri(tmpcnt,1); - shll_b_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(cdata,scratchie,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(cdata,7); +{ jff_ASL_b_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_b_rr(dstreg,data); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e128_0_comp_ff(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39316,50 +29337,20 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int cdata=scratchie++; - int tmpcnt=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shll_b_rr(data,cnt); - highmask=0x38; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_b_rr(data,scratchie); - sub_l_ri(tmpcnt,1); - shll_b_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(cdata,scratchie,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(cdata,7); + int tmp=scratchie++; +{ jff_LSL_b_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_b_rr(dstreg,data); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e138_0_comp_ff(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39368,77 +29359,44 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ rol_b_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_b_rr(data,data); - bt_l_ri(data,0x00); +{ int tmp=scratchie++; + jff_ROL_b(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_b_rr(dstreg,data); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e140_0_comp_ff(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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; -} + dont_care_flags(); + int tmp=scratchie++; { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_w_ri(data,srcreg); - bp=16-srcreg; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(tmp,bp); +{ jff_ASL_w_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e148_0_comp_ff(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39447,70 +29405,41 @@ unsigned long REGPARAM2 op_e148_0_comp_ff(uae_u32 opcode) /* LSL */ { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_w_ri(data,srcreg); - bp=16-srcreg; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(tmp,bp); + int tmp=scratchie++; +{ jff_LSL_w_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e158_0_comp_ff(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ rol_w_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(data,0x00); +{ int tmp=scratchie++; + jff_ROL_w(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_w_rr(dstreg,data); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e160_0_comp_ff(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39519,57 +29448,23 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); -if (needed_flags & FLAG_V) { - FAIL(1); - return 0; -} +{ dont_care_flags(); + int tmp=scratchie++; { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int cdata=scratchie++; - int tmpcnt=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shll_w_rr(data,cnt); - highmask=0x30; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_w_rr(data,scratchie); - sub_l_ri(tmpcnt,1); - shll_w_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(cdata,scratchie,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(cdata,15); +{ jff_ASL_w_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_w_rr(dstreg,data); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e168_0_comp_ff(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39581,50 +29476,20 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int cdata=scratchie++; - int tmpcnt=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shll_w_rr(data,cnt); - highmask=0x30; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_w_rr(data,scratchie); - sub_l_ri(tmpcnt,1); - shll_w_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(cdata,scratchie,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(cdata,15); + int tmp=scratchie++; +{ jff_LSL_w_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_w_rr(dstreg,data); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e178_0_comp_ff(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39633,77 +29498,44 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ rol_w_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_w_rr(data,data); - bt_l_ri(data,0x00); +{ int tmp=scratchie++; + jff_ROL_w(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_w_rr(dstreg,data); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e180_0_comp_ff(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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; -} + dont_care_flags(); + int tmp=scratchie++; { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_l_ri(data,srcreg); - bp=32-srcreg; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(tmp,bp); +{ jff_ASL_l_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e188_0_comp_ff(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39712,70 +29544,41 @@ unsigned long REGPARAM2 op_e188_0_comp_ff(uae_u32 opcode) /* LSL */ { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_l_ri(data,srcreg); - bp=32-srcreg; - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(tmp,bp); + int tmp=scratchie++; +{ jff_LSL_l_imm(tmp,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 (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e198_0_comp_ff(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ rol_l_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(data,0x00); +{ int tmp=scratchie++; + jff_ROL_l(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_l_rr(dstreg,data); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e1a0_0_comp_ff(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39784,57 +29587,23 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); -if (needed_flags & FLAG_V) { - FAIL(1); - return 0; -} +{ dont_care_flags(); + int tmp=scratchie++; { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int cdata=scratchie++; - int tmpcnt=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shll_l_rr(data,cnt); - highmask=0x20; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_l_rr(data,scratchie); - sub_l_ri(tmpcnt,1); - shll_l_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(cdata,scratchie,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(cdata,31); +{ jff_ASL_l_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_l_rr(dstreg,data); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e1a8_0_comp_ff(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39846,50 +29615,20 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int cdata=scratchie++; - int tmpcnt=scratchie++; - mov_l_rr(tmpcnt,cnt); - and_l_ri(tmpcnt,63); - mov_l_ri(cdata,0); - cmov_l_rr(cdata,data,1); - shll_l_rr(data,cnt); - highmask=0x20; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_l_rr(data,scratchie); - sub_l_ri(tmpcnt,1); - shll_l_rr(cdata,tmpcnt); -test_l_ri(tmpcnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(cdata,scratchie,1); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(cdata,31); + int tmp=scratchie++; +{ jff_LSL_l_reg(tmp,data,cnt); live_flags(); - end_needflags(); - duplicate_carry(); -if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); - if(dstreg!=data) - mov_l_rr(dstreg,data); + if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e1b8_0_comp_ff(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -39898,149 +29637,755 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ rol_l_rr(data,cnt); - start_needflags(); - if (needed_flags & FLAG_ZNV) - test_l_rr(data,data); - bt_l_ri(data,0x00); +{ int tmp=scratchie++; + jff_ROL_l(tmp,data,cnt); live_flags(); - end_needflags(); - if(dstreg!=data) - mov_l_rr(dstreg,data); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } -unsigned long REGPARAM2 op_f600_0_comp_ff(uae_u32 opcode) /* MOVE16 */ +unsigned long REGPARAM2 op_e1d0_0_comp_ff(uae_u32 opcode) /* ASLW */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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 tmp=scratchie++; + jff_ASLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1d8_0_comp_ff(uae_u32 opcode) /* ASLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp=scratchie++; + jff_ASLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1e0_0_comp_ff(uae_u32 opcode) /* ASLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp=scratchie++; + jff_ASLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1e8_0_comp_ff(uae_u32 opcode) /* ASLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp=scratchie++; + jff_ASLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1f0_0_comp_ff(uae_u32 opcode) /* ASLW */ +{ + uae_s32 srcreg = (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 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 tmp=scratchie++; + jff_ASLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1f8_0_comp_ff(uae_u32 opcode) /* ASLW */ +{ + 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 tmp=scratchie++; + jff_ASLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1f9_0_comp_ff(uae_u32 opcode) /* ASLW */ +{ + 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 tmp=scratchie++; + jff_ASLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2d0_0_comp_ff(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + if (dodgy) + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jff_LSRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2d8_0_comp_ff(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp = scratchie++; + jff_LSRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2e0_0_comp_ff(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jff_LSRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2e8_0_comp_ff(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp = scratchie++; + jff_LSRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2f0_0_comp_ff(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 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 tmp = scratchie++; + jff_LSRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2f8_0_comp_ff(uae_u32 opcode) /* LSRW */ +{ + 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 tmp = scratchie++; + jff_LSRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2f9_0_comp_ff(uae_u32 opcode) /* LSRW */ +{ + 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 tmp = scratchie++; + jff_LSRW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3d0_0_comp_ff(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + if (dodgy) + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp=scratchie++; + jff_LSLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3d8_0_comp_ff(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp=scratchie++; + jff_LSLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3e0_0_comp_ff(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp=scratchie++; + jff_LSLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3e8_0_comp_ff(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp=scratchie++; + jff_LSLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3f0_0_comp_ff(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 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 tmp=scratchie++; + jff_LSLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3f8_0_comp_ff(uae_u32 opcode) /* LSLW */ +{ + 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 tmp=scratchie++; + jff_LSLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3f9_0_comp_ff(uae_u32 opcode) /* LSLW */ +{ + 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 tmp=scratchie++; + jff_LSLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6d0_0_comp_ff(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + if (dodgy) + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jff_RORW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6d8_0_comp_ff(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp = scratchie++; + jff_RORW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6e0_0_comp_ff(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jff_RORW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6e8_0_comp_ff(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp = scratchie++; + jff_RORW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6f0_0_comp_ff(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 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 tmp = scratchie++; + jff_RORW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6f8_0_comp_ff(uae_u32 opcode) /* RORW */ +{ + 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 tmp = scratchie++; + jff_RORW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6f9_0_comp_ff(uae_u32 opcode) /* RORW */ +{ + 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 tmp = scratchie++; + jff_RORW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7d0_0_comp_ff(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + if (dodgy) + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jff_ROLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7d8_0_comp_ff(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp = scratchie++; + jff_ROLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7e0_0_comp_ff(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jff_ROLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7e8_0_comp_ff(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp = scratchie++; + jff_ROLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7f0_0_comp_ff(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 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 tmp = scratchie++; + jff_ROLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7f8_0_comp_ff(uae_u32 opcode) /* ROLW */ +{ + 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 tmp = scratchie++; + jff_ROLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7f9_0_comp_ff(uae_u32 opcode) /* ROLW */ +{ + 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 tmp = scratchie++; + jff_ROLW(tmp,src); + live_flags(); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_f600_0_comp_ff(uae_u32 opcode) /* MOVE16 */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +if (special_mem) { + FAIL(1); + return 0; +} 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); - arm_ADD_l_ri8(srcreg+8,16); - if (special_mem) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + jnf_ADD_im8(srcreg + 8, srcreg + 8, 16); + jnf_MOVE16(dst, src); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_f608_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = 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 (special_mem) { + FAIL(1); + return 0; +} 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); - arm_ADD_l_ri8(dstreg+8,16); - if (special_mem) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + jnf_ADD_im8(dstreg + 8, dstreg + 8, 16); + jnf_MOVE16(dst, src); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_f610_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (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 (special_mem) { + FAIL(1); + return 0; +} int src=scratchie++; int dst=scratchie++; { int srca=dodgy?scratchie++:srcreg+8; @@ -40048,57 +30393,22 @@ unsigned long REGPARAM2 op_f610_0_comp_ff(uae_u32 opcode) /* MOVE16 */ 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) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + jnf_MOVE16(dst, src); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_f618_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = 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 (special_mem) { + FAIL(1); + return 0; +} int src=scratchie++; int dst=scratchie++; { int srca = scratchie++; @@ -40106,102 +30416,34 @@ unsigned long REGPARAM2 op_f618_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { 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) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + jnf_MOVE16(dst, src); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_f620_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { -#ifdef 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; +if (special_mem) { + FAIL(1); + return 0; +} 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) - arm_ADD_l_ri8(srcreg+8,16); - arm_ADD_l_ri8(dstreg+8,16); - if (special_mem) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + uae_u16 dstreg = ((comp_get_iword((m68k_pc_offset+=2)-2))>>12) & 0x07; + jnf_MOVE(src, srcreg + 8); + jnf_MOVE(dst, dstreg + 8); + if (srcreg != dstreg) + jnf_ADD_im8(srcreg + 8, srcreg + 8, 16); + jnf_ADD_im8(dstreg + 8, dstreg + 8, 16); + jnf_MOVE16(dst, src); } if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } #endif @@ -40225,11 +30467,7 @@ extern void comp_fbcc_opp(); #ifdef PART_1 unsigned long REGPARAM2 op_0_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40237,25 +30475,17 @@ unsigned long REGPARAM2 op_0_0_comp_nf(uae_u32 opcode) /* OR */ { 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40267,24 +30497,16 @@ unsigned long REGPARAM2 op_10_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_18_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40295,25 +30517,17 @@ unsigned long REGPARAM2 op_18_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40321,29 +30535,21 @@ unsigned long REGPARAM2 op_20_0_comp_nf(uae_u32 opcode) /* OR */ { 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]); + arm_SUB_l_ri8(dstreg+8,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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_28_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40355,24 +30561,16 @@ unsigned long REGPARAM2 op_28_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40383,15 +30581,11 @@ unsigned long REGPARAM2 op_30_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_38_0_comp_nf(uae_u32 opcode) /* OR */ @@ -40406,15 +30600,11 @@ unsigned long REGPARAM2 op_38_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_39_0_comp_nf(uae_u32 opcode) /* OR */ @@ -40429,24 +30619,27 @@ unsigned long REGPARAM2 op_39_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_3c_0_comp_nf(uae_u32 opcode) /* ORSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=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; } unsigned long REGPARAM2 op_40_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40454,25 +30647,17 @@ unsigned long REGPARAM2 op_40_0_comp_nf(uae_u32 opcode) /* OR */ { 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40484,24 +30669,16 @@ unsigned long REGPARAM2 op_50_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_58_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40512,25 +30689,17 @@ unsigned long REGPARAM2 op_58_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_60_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40538,29 +30707,21 @@ unsigned long REGPARAM2 op_60_0_comp_nf(uae_u32 opcode) /* OR */ { 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); + arm_SUB_l_ri8(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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_68_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40572,24 +30733,16 @@ unsigned long REGPARAM2 op_68_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_70_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40600,15 +30753,11 @@ unsigned long REGPARAM2 op_70_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_78_0_comp_nf(uae_u32 opcode) /* OR */ @@ -40623,15 +30772,11 @@ unsigned long REGPARAM2 op_78_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_79_0_comp_nf(uae_u32 opcode) /* OR */ @@ -40646,24 +30791,16 @@ unsigned long REGPARAM2 op_79_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40671,20 +30808,17 @@ unsigned long REGPARAM2 op_80_0_comp_nf(uae_u32 opcode) /* OR */ { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40696,19 +30830,16 @@ unsigned long REGPARAM2 op_90_0_comp_nf(uae_u32 opcode) /* OR */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_98_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40719,20 +30850,17 @@ unsigned long REGPARAM2 op_98_0_comp_nf(uae_u32 opcode) /* OR */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - lea_l_brr(dstreg+8,dstreg+8,4); - dont_care_flags(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a0_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40740,24 +30868,21 @@ unsigned long REGPARAM2 op_a0_0_comp_nf(uae_u32 opcode) /* OR */ { 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); + arm_SUB_l_ri8(dstreg+8,4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a8_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40769,19 +30894,16 @@ unsigned long REGPARAM2 op_a8_0_comp_nf(uae_u32 opcode) /* OR */ 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(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40792,10 +30914,11 @@ unsigned long REGPARAM2 op_b0_0_comp_nf(uae_u32 opcode) /* OR */ 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(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b8_0_comp_nf(uae_u32 opcode) /* OR */ @@ -40810,10 +30933,11 @@ unsigned long REGPARAM2 op_b8_0_comp_nf(uae_u32 opcode) /* OR */ 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(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b9_0_comp_nf(uae_u32 opcode) /* OR */ @@ -40828,53 +30952,31 @@ unsigned long REGPARAM2 op_b9_0_comp_nf(uae_u32 opcode) /* OR */ mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_100_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); +{ dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_110_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40885,29 +30987,14 @@ unsigned long REGPARAM2 op_110_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_118_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40917,64 +31004,34 @@ unsigned long REGPARAM2 op_118_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_120_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_128_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -40985,29 +31042,14 @@ unsigned long REGPARAM2 op_128_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_130_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41017,24 +31059,13 @@ unsigned long REGPARAM2 op_130_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_138_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -41044,24 +31075,13 @@ unsigned long REGPARAM2 op_138_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_139_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -41071,24 +31091,13 @@ unsigned long REGPARAM2 op_139_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13a_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -41101,24 +31110,13 @@ unsigned long REGPARAM2 op_13a_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13b_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -41132,24 +31130,13 @@ unsigned long REGPARAM2 op_13b_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13c_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef 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; @@ -41157,43 +31144,22 @@ unsigned long REGPARAM2 op_13c_0_comp_nf(uae_u32 opcode) /* BTST */ { 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(); +{ dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_140_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); +{ jnf_BCHG_l(dst,src); + dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -41201,16 +31167,8 @@ return 0; } unsigned long REGPARAM2 op_150_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41221,30 +31179,16 @@ unsigned long REGPARAM2 op_150_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_158_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41254,66 +31198,38 @@ unsigned long REGPARAM2 op_158_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_160_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_168_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41324,30 +31240,16 @@ unsigned long REGPARAM2 op_168_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_170_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41357,25 +31259,15 @@ unsigned long REGPARAM2 op_170_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_178_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef 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; @@ -41385,25 +31277,15 @@ unsigned long REGPARAM2 op_178_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_179_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef 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; @@ -41413,107 +31295,24 @@ unsigned long REGPARAM2 op_179_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_17a_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ -#ifdef 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_17b_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ -#ifdef 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=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); - 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; -} unsigned long REGPARAM2 op_180_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); +{ jnf_BCLR_l(dst,src); + dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -41521,16 +31320,8 @@ return 0; } unsigned long REGPARAM2 op_190_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41541,30 +31332,16 @@ unsigned long REGPARAM2 op_190_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_198_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41574,66 +31351,38 @@ unsigned long REGPARAM2 op_198_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1a0_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1a8_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41644,30 +31393,16 @@ unsigned long REGPARAM2 op_1a8_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1b0_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41677,25 +31412,15 @@ unsigned long REGPARAM2 op_1b0_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1b8_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef 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; @@ -41705,25 +31430,15 @@ unsigned long REGPARAM2 op_1b8_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1b9_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef 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; @@ -41733,107 +31448,24 @@ unsigned long REGPARAM2 op_1b9_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_1ba_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ -#ifdef 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_1bb_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ -#ifdef 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=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); - 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; -} unsigned long REGPARAM2 op_1c0_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); +{ jnf_BSET_l(dst,src); + dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -41841,16 +31473,8 @@ return 0; } unsigned long REGPARAM2 op_1d0_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41861,30 +31485,16 @@ unsigned long REGPARAM2 op_1d0_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1d8_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41894,66 +31504,38 @@ unsigned long REGPARAM2 op_1d8_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1e0_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1e8_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41964,30 +31546,16 @@ unsigned long REGPARAM2 op_1e8_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1f0_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -41997,25 +31565,15 @@ unsigned long REGPARAM2 op_1f0_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1f8_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef 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; @@ -42025,25 +31583,15 @@ unsigned long REGPARAM2 op_1f8_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1f9_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef 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; @@ -42053,88 +31601,15 @@ unsigned long REGPARAM2 op_1f9_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_1fa_0_comp_nf(uae_u32 opcode) /* BSET */ -{ -#ifdef 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_1fb_0_comp_nf(uae_u32 opcode) /* BSET */ -{ -#ifdef 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=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); - 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; -} unsigned long REGPARAM2 op_200_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42142,26 +31617,17 @@ unsigned long REGPARAM2 op_200_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_210_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42173,25 +31639,16 @@ unsigned long REGPARAM2 op_210_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_218_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42202,26 +31659,17 @@ unsigned long REGPARAM2 op_218_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_220_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42229,30 +31677,21 @@ unsigned long REGPARAM2 op_220_0_comp_nf(uae_u32 opcode) /* AND */ { 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]); + arm_SUB_l_ri8(dstreg+8,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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_228_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42264,25 +31703,16 @@ unsigned long REGPARAM2 op_228_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_230_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42293,16 +31723,11 @@ unsigned long REGPARAM2 op_230_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_238_0_comp_nf(uae_u32 opcode) /* AND */ @@ -42317,16 +31742,11 @@ unsigned long REGPARAM2 op_238_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_239_0_comp_nf(uae_u32 opcode) /* AND */ @@ -42341,25 +31761,27 @@ unsigned long REGPARAM2 op_239_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_23c_0_comp_nf(uae_u32 opcode) /* ANDSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=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; } unsigned long REGPARAM2 op_240_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42367,26 +31789,17 @@ unsigned long REGPARAM2 op_240_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_250_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42398,25 +31811,16 @@ unsigned long REGPARAM2 op_250_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_258_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42427,26 +31831,17 @@ unsigned long REGPARAM2 op_258_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_260_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42454,30 +31849,21 @@ unsigned long REGPARAM2 op_260_0_comp_nf(uae_u32 opcode) /* AND */ { 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); + arm_SUB_l_ri8(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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_268_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42489,25 +31875,16 @@ unsigned long REGPARAM2 op_268_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_270_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42518,16 +31895,11 @@ unsigned long REGPARAM2 op_270_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_278_0_comp_nf(uae_u32 opcode) /* AND */ @@ -42542,16 +31914,11 @@ unsigned long REGPARAM2 op_278_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_279_0_comp_nf(uae_u32 opcode) /* AND */ @@ -42566,25 +31933,16 @@ unsigned long REGPARAM2 op_279_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_280_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42592,20 +31950,17 @@ unsigned long REGPARAM2 op_280_0_comp_nf(uae_u32 opcode) /* AND */ { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_290_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42617,19 +31972,16 @@ unsigned long REGPARAM2 op_290_0_comp_nf(uae_u32 opcode) /* AND */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_298_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42640,20 +31992,17 @@ unsigned long REGPARAM2 op_298_0_comp_nf(uae_u32 opcode) /* AND */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - lea_l_brr(dstreg+8,dstreg+8,4); - dont_care_flags(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2a0_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42661,24 +32010,21 @@ unsigned long REGPARAM2 op_2a0_0_comp_nf(uae_u32 opcode) /* AND */ { 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); + arm_SUB_l_ri8(dstreg+8,4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2a8_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42690,19 +32036,16 @@ unsigned long REGPARAM2 op_2a8_0_comp_nf(uae_u32 opcode) /* AND */ 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(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2b0_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42713,10 +32056,11 @@ unsigned long REGPARAM2 op_2b0_0_comp_nf(uae_u32 opcode) /* AND */ 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(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2b8_0_comp_nf(uae_u32 opcode) /* AND */ @@ -42731,10 +32075,11 @@ unsigned long REGPARAM2 op_2b8_0_comp_nf(uae_u32 opcode) /* AND */ 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(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2b9_0_comp_nf(uae_u32 opcode) /* AND */ @@ -42749,19 +32094,16 @@ unsigned long REGPARAM2 op_2b9_0_comp_nf(uae_u32 opcode) /* AND */ mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_400_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42769,20 +32111,17 @@ unsigned long REGPARAM2 op_400_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_410_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42794,19 +32133,16 @@ unsigned long REGPARAM2 op_410_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_418_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42817,20 +32153,17 @@ unsigned long REGPARAM2 op_418_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_420_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42838,24 +32171,21 @@ unsigned long REGPARAM2 op_420_0_comp_nf(uae_u32 opcode) /* SUB */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_428_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42867,19 +32197,16 @@ unsigned long REGPARAM2 op_428_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_430_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42890,10 +32217,11 @@ unsigned long REGPARAM2 op_430_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_438_0_comp_nf(uae_u32 opcode) /* SUB */ @@ -42908,10 +32236,11 @@ unsigned long REGPARAM2 op_438_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_439_0_comp_nf(uae_u32 opcode) /* SUB */ @@ -42926,19 +32255,16 @@ unsigned long REGPARAM2 op_439_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_440_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42946,20 +32272,17 @@ unsigned long REGPARAM2 op_440_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_450_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42971,19 +32294,16 @@ unsigned long REGPARAM2 op_450_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_458_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -42994,20 +32314,17 @@ unsigned long REGPARAM2 op_458_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_460_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43015,24 +32332,21 @@ unsigned long REGPARAM2 op_460_0_comp_nf(uae_u32 opcode) /* SUB */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_468_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43044,19 +32358,16 @@ unsigned long REGPARAM2 op_468_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_470_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43067,10 +32378,11 @@ unsigned long REGPARAM2 op_470_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_478_0_comp_nf(uae_u32 opcode) /* SUB */ @@ -43085,10 +32397,11 @@ unsigned long REGPARAM2 op_478_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_479_0_comp_nf(uae_u32 opcode) /* SUB */ @@ -43103,19 +32416,16 @@ unsigned long REGPARAM2 op_479_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_480_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43123,20 +32433,17 @@ unsigned long REGPARAM2 op_480_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_490_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43148,19 +32455,16 @@ unsigned long REGPARAM2 op_490_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_498_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43171,20 +32475,17 @@ unsigned long REGPARAM2 op_498_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a0_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43192,24 +32493,21 @@ unsigned long REGPARAM2 op_4a0_0_comp_nf(uae_u32 opcode) /* SUB */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a8_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43221,19 +32519,16 @@ unsigned long REGPARAM2 op_4a8_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4b0_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43244,10 +32539,11 @@ unsigned long REGPARAM2 op_4b0_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4b8_0_comp_nf(uae_u32 opcode) /* SUB */ @@ -43262,10 +32558,11 @@ unsigned long REGPARAM2 op_4b8_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4b9_0_comp_nf(uae_u32 opcode) /* SUB */ @@ -43280,19 +32577,16 @@ unsigned long REGPARAM2 op_4b9_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_600_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43300,20 +32594,17 @@ unsigned long REGPARAM2 op_600_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_610_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43325,19 +32616,16 @@ unsigned long REGPARAM2 op_610_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_618_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43348,20 +32636,17 @@ unsigned long REGPARAM2 op_618_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_620_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43369,24 +32654,21 @@ unsigned long REGPARAM2 op_620_0_comp_nf(uae_u32 opcode) /* ADD */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_628_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43398,19 +32680,16 @@ unsigned long REGPARAM2 op_628_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_630_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43421,10 +32700,11 @@ unsigned long REGPARAM2 op_630_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_638_0_comp_nf(uae_u32 opcode) /* ADD */ @@ -43439,10 +32719,11 @@ unsigned long REGPARAM2 op_638_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_639_0_comp_nf(uae_u32 opcode) /* ADD */ @@ -43457,19 +32738,16 @@ unsigned long REGPARAM2 op_639_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_640_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43477,20 +32755,17 @@ unsigned long REGPARAM2 op_640_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_650_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43502,19 +32777,16 @@ unsigned long REGPARAM2 op_650_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_658_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43525,20 +32797,17 @@ unsigned long REGPARAM2 op_658_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_660_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43546,24 +32815,21 @@ unsigned long REGPARAM2 op_660_0_comp_nf(uae_u32 opcode) /* ADD */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_668_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43575,19 +32841,16 @@ unsigned long REGPARAM2 op_668_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_670_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43598,10 +32861,11 @@ unsigned long REGPARAM2 op_670_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_678_0_comp_nf(uae_u32 opcode) /* ADD */ @@ -43616,10 +32880,11 @@ unsigned long REGPARAM2 op_678_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_679_0_comp_nf(uae_u32 opcode) /* ADD */ @@ -43634,19 +32899,16 @@ unsigned long REGPARAM2 op_679_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_680_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43654,20 +32916,17 @@ unsigned long REGPARAM2 op_680_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_690_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43679,19 +32938,16 @@ unsigned long REGPARAM2 op_690_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_698_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43702,20 +32958,17 @@ unsigned long REGPARAM2 op_698_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6a0_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43723,24 +32976,21 @@ unsigned long REGPARAM2 op_6a0_0_comp_nf(uae_u32 opcode) /* ADD */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6a8_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43752,19 +33002,16 @@ unsigned long REGPARAM2 op_6a8_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6b0_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43775,10 +33022,11 @@ unsigned long REGPARAM2 op_6b0_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6b8_0_comp_nf(uae_u32 opcode) /* ADD */ @@ -43793,10 +33041,11 @@ unsigned long REGPARAM2 op_6b8_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6b9_0_comp_nf(uae_u32 opcode) /* ADD */ @@ -43811,19 +33060,16 @@ unsigned long REGPARAM2 op_6b9_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_800_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43831,24 +33077,13 @@ unsigned long REGPARAM2 op_800_0_comp_nf(uae_u32 opcode) /* BTST */ { 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(); +{ dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_810_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43860,24 +33095,13 @@ unsigned long REGPARAM2 op_810_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_818_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43888,25 +33112,14 @@ unsigned long REGPARAM2 op_818_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_820_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43914,29 +33127,18 @@ unsigned long REGPARAM2 op_820_0_comp_nf(uae_u32 opcode) /* BTST */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_828_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43948,24 +33150,13 @@ unsigned long REGPARAM2 op_828_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_830_0_comp_nf(uae_u32 opcode) /* BTST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -43976,14 +33167,7 @@ unsigned long REGPARAM2 op_830_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -43999,14 +33183,7 @@ unsigned long REGPARAM2 op_838_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -44022,14 +33199,7 @@ unsigned long REGPARAM2 op_839_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -44048,14 +33218,7 @@ unsigned long REGPARAM2 op_83a_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -44075,14 +33238,7 @@ unsigned long REGPARAM2 op_83b_0_comp_nf(uae_u32 opcode) /* BTST */ 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(); +{ dont_care_flags(); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -44096,24 +33252,13 @@ unsigned long REGPARAM2 op_83c_0_comp_nf(uae_u32 opcode) /* BTST */ mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { 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(); +{ dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_840_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44121,14 +33266,8 @@ unsigned long REGPARAM2 op_840_0_comp_nf(uae_u32 opcode) /* BCHG */ { 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(); +{ jnf_BCHG_l(dst,src); + dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -44136,11 +33275,7 @@ return 0; } unsigned long REGPARAM2 op_850_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44152,25 +33287,15 @@ unsigned long REGPARAM2 op_850_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_858_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44181,26 +33306,16 @@ unsigned long REGPARAM2 op_858_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_860_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44208,30 +33323,20 @@ unsigned long REGPARAM2 op_860_0_comp_nf(uae_u32 opcode) /* BCHG */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_868_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44243,25 +33348,15 @@ unsigned long REGPARAM2 op_868_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_870_0_comp_nf(uae_u32 opcode) /* BCHG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44272,14 +33367,8 @@ unsigned long REGPARAM2 op_870_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -44296,14 +33385,8 @@ unsigned long REGPARAM2 op_878_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -44320,80 +33403,15 @@ unsigned long REGPARAM2 op_879_0_comp_nf(uae_u32 opcode) /* BCHG */ 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(); +{ jnf_BCHG_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_87a_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_87b_0_comp_nf(uae_u32 opcode) /* BCHG */ -{ - 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=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); - 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; -} unsigned long REGPARAM2 op_880_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44401,14 +33419,8 @@ unsigned long REGPARAM2 op_880_0_comp_nf(uae_u32 opcode) /* BCLR */ { 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(); +{ jnf_BCLR_l(dst,src); + dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -44416,11 +33428,7 @@ return 0; } unsigned long REGPARAM2 op_890_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44432,25 +33440,15 @@ unsigned long REGPARAM2 op_890_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_898_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44461,26 +33459,16 @@ unsigned long REGPARAM2 op_898_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8a0_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44488,30 +33476,20 @@ unsigned long REGPARAM2 op_8a0_0_comp_nf(uae_u32 opcode) /* BCLR */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8a8_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44523,25 +33501,15 @@ unsigned long REGPARAM2 op_8a8_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8b0_0_comp_nf(uae_u32 opcode) /* BCLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44552,14 +33520,8 @@ unsigned long REGPARAM2 op_8b0_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -44576,14 +33538,8 @@ unsigned long REGPARAM2 op_8b8_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -44600,80 +33556,15 @@ unsigned long REGPARAM2 op_8b9_0_comp_nf(uae_u32 opcode) /* BCLR */ 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(); +{ jnf_BCLR_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_8ba_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_8bb_0_comp_nf(uae_u32 opcode) /* BCLR */ -{ - 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=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); - 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; -} unsigned long REGPARAM2 op_8c0_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44681,14 +33572,8 @@ unsigned long REGPARAM2 op_8c0_0_comp_nf(uae_u32 opcode) /* BSET */ { 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(); +{ jnf_BSET_l(dst,src); + dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -44696,11 +33581,7 @@ return 0; } unsigned long REGPARAM2 op_8d0_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44712,25 +33593,15 @@ unsigned long REGPARAM2 op_8d0_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8d8_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44741,26 +33612,16 @@ unsigned long REGPARAM2 op_8d8_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8e0_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44768,30 +33629,20 @@ unsigned long REGPARAM2 op_8e0_0_comp_nf(uae_u32 opcode) /* BSET */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8e8_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44803,25 +33654,15 @@ unsigned long REGPARAM2 op_8e8_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8f0_0_comp_nf(uae_u32 opcode) /* BSET */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44832,14 +33673,8 @@ unsigned long REGPARAM2 op_8f0_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -44856,14 +33691,8 @@ unsigned long REGPARAM2 op_8f8_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -44880,80 +33709,15 @@ unsigned long REGPARAM2 op_8f9_0_comp_nf(uae_u32 opcode) /* BSET */ 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(); +{ jnf_BSET_b(dst,src); + dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_8fa_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - 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=start_pc+((char *)comp_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); - 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; -} -unsigned long REGPARAM2 op_8fb_0_comp_nf(uae_u32 opcode) /* BSET */ -{ - 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=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); - 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; -} unsigned long REGPARAM2 op_a00_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44961,25 +33725,17 @@ unsigned long REGPARAM2 op_a00_0_comp_nf(uae_u32 opcode) /* EOR */ { 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a10_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -44991,24 +33747,16 @@ unsigned long REGPARAM2 op_a10_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a18_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45019,25 +33767,17 @@ unsigned long REGPARAM2 op_a18_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a20_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45045,29 +33785,21 @@ unsigned long REGPARAM2 op_a20_0_comp_nf(uae_u32 opcode) /* EOR */ { 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]); + arm_SUB_l_ri8(dstreg+8,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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a28_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45079,24 +33811,16 @@ unsigned long REGPARAM2 op_a28_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a30_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45107,15 +33831,11 @@ unsigned long REGPARAM2 op_a30_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a38_0_comp_nf(uae_u32 opcode) /* EOR */ @@ -45130,15 +33850,11 @@ unsigned long REGPARAM2 op_a38_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a39_0_comp_nf(uae_u32 opcode) /* EOR */ @@ -45153,24 +33869,27 @@ unsigned long REGPARAM2 op_a39_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_a3c_0_comp_nf(uae_u32 opcode) /* EORSR */ +{ + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=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; } unsigned long REGPARAM2 op_a40_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45178,25 +33897,17 @@ unsigned long REGPARAM2 op_a40_0_comp_nf(uae_u32 opcode) /* EOR */ { 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a50_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45208,24 +33919,16 @@ unsigned long REGPARAM2 op_a50_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a58_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45236,25 +33939,17 @@ unsigned long REGPARAM2 op_a58_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a60_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45262,29 +33957,21 @@ unsigned long REGPARAM2 op_a60_0_comp_nf(uae_u32 opcode) /* EOR */ { 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); + arm_SUB_l_ri8(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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a68_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45296,24 +33983,16 @@ unsigned long REGPARAM2 op_a68_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a70_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45324,15 +34003,11 @@ unsigned long REGPARAM2 op_a70_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a78_0_comp_nf(uae_u32 opcode) /* EOR */ @@ -45347,15 +34022,11 @@ unsigned long REGPARAM2 op_a78_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a79_0_comp_nf(uae_u32 opcode) /* EOR */ @@ -45370,24 +34041,16 @@ unsigned long REGPARAM2 op_a79_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a80_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45395,20 +34058,17 @@ unsigned long REGPARAM2 op_a80_0_comp_nf(uae_u32 opcode) /* EOR */ { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; - dont_care_flags(); -{ arm_EOR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_a90_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45420,22 +34080,16 @@ unsigned long REGPARAM2 op_a90_0_comp_nf(uae_u32 opcode) /* EOR */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -#endif - -#ifdef PART_2 unsigned long REGPARAM2 op_a98_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45446,20 +34100,17 @@ unsigned long REGPARAM2 op_a98_0_comp_nf(uae_u32 opcode) /* EOR */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - lea_l_brr(dstreg+8,dstreg+8,4); - dont_care_flags(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_aa0_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45467,24 +34118,21 @@ unsigned long REGPARAM2 op_aa0_0_comp_nf(uae_u32 opcode) /* EOR */ { 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); + arm_SUB_l_ri8(dstreg+8,4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_aa8_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45496,19 +34144,16 @@ unsigned long REGPARAM2 op_aa8_0_comp_nf(uae_u32 opcode) /* EOR */ 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(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ab0_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45519,10 +34164,11 @@ unsigned long REGPARAM2 op_ab0_0_comp_nf(uae_u32 opcode) /* EOR */ 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(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ab8_0_comp_nf(uae_u32 opcode) /* EOR */ @@ -45537,10 +34183,11 @@ unsigned long REGPARAM2 op_ab8_0_comp_nf(uae_u32 opcode) /* EOR */ 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(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ab9_0_comp_nf(uae_u32 opcode) /* EOR */ @@ -45555,19 +34202,19 @@ unsigned long REGPARAM2 op_ab9_0_comp_nf(uae_u32 opcode) /* EOR */ mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } +#endif + +#ifdef PART_2 unsigned long REGPARAM2 op_c00_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45575,18 +34222,14 @@ unsigned long REGPARAM2 op_c00_0_comp_nf(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c10_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45598,18 +34241,14 @@ unsigned long REGPARAM2 op_c10_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c18_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45620,19 +34259,15 @@ unsigned long REGPARAM2 op_c18_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c20_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45640,23 +34275,19 @@ unsigned long REGPARAM2 op_c20_0_comp_nf(uae_u32 opcode) /* CMP */ { 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]); + arm_SUB_l_ri8(dstreg+8,areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c28_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45668,18 +34299,14 @@ unsigned long REGPARAM2 op_c28_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c30_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45690,7 +34317,7 @@ unsigned long REGPARAM2 op_c30_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -45707,7 +34334,7 @@ unsigned long REGPARAM2 op_c38_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -45724,7 +34351,7 @@ unsigned long REGPARAM2 op_c39_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -45744,7 +34371,7 @@ unsigned long REGPARAM2 op_c3a_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -45765,18 +34392,14 @@ unsigned long REGPARAM2 op_c3b_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c40_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45784,18 +34407,14 @@ unsigned long REGPARAM2 op_c40_0_comp_nf(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c50_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45807,18 +34426,14 @@ unsigned long REGPARAM2 op_c50_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c58_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45829,19 +34444,15 @@ unsigned long REGPARAM2 op_c58_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); - lea_l_brr(dstreg+8,dstreg+8,2); -{ dont_care_flags(); + arm_ADD_l_ri8(dstreg+8,2); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c60_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45849,23 +34460,19 @@ unsigned long REGPARAM2 op_c60_0_comp_nf(uae_u32 opcode) /* CMP */ { 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); + arm_SUB_l_ri8(dstreg+8,2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c68_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45877,18 +34484,14 @@ unsigned long REGPARAM2 op_c68_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c70_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45899,7 +34502,7 @@ unsigned long REGPARAM2 op_c70_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -45916,7 +34519,7 @@ unsigned long REGPARAM2 op_c78_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -45933,7 +34536,7 @@ unsigned long REGPARAM2 op_c79_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -45953,7 +34556,7 @@ unsigned long REGPARAM2 op_c7a_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readword(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -45974,18 +34577,14 @@ unsigned long REGPARAM2 op_c7b_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c80_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -45993,18 +34592,14 @@ unsigned long REGPARAM2 op_c80_0_comp_nf(uae_u32 opcode) /* CMP */ { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c90_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46016,18 +34611,14 @@ unsigned long REGPARAM2 op_c90_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c98_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46038,19 +34629,15 @@ unsigned long REGPARAM2 op_c98_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - lea_l_brr(dstreg+8,dstreg+8,4); -{ dont_care_flags(); + arm_ADD_l_ri8(dstreg+8,4); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ca0_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46058,23 +34645,19 @@ unsigned long REGPARAM2 op_ca0_0_comp_nf(uae_u32 opcode) /* CMP */ { 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); + arm_SUB_l_ri8(dstreg+8,4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_ca8_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46086,18 +34669,14 @@ unsigned long REGPARAM2 op_ca8_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_cb0_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46108,7 +34687,7 @@ unsigned long REGPARAM2 op_cb0_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -46125,7 +34704,7 @@ unsigned long REGPARAM2 op_cb8_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -46142,7 +34721,7 @@ unsigned long REGPARAM2 op_cb9_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -46162,7 +34741,7 @@ unsigned long REGPARAM2 op_cba_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readlong(dsta,dst,scratchie); -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -46183,54 +34762,33 @@ unsigned long REGPARAM2 op_cbb_0_comp_nf(uae_u32 opcode) /* CMP */ 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1000_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; - dont_care_flags(); -if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - and_l_ri(dst,0xffffff00); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1010_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46241,31 +34799,18 @@ unsigned long REGPARAM2 op_1010_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1018_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46274,69 +34819,43 @@ unsigned long REGPARAM2 op_1018_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1020_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1028_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46347,31 +34866,18 @@ unsigned long REGPARAM2 op_1028_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1030_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46381,26 +34887,17 @@ unsigned long REGPARAM2 op_1030_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1038_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46410,26 +34907,17 @@ unsigned long REGPARAM2 op_1038_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1039_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46439,26 +34927,17 @@ unsigned long REGPARAM2 op_1039_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_103a_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46470,26 +34949,17 @@ unsigned long REGPARAM2 op_103a_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_103b_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46502,26 +34972,17 @@ unsigned long REGPARAM2 op_103b_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_103c_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46529,31 +34990,18 @@ unsigned long REGPARAM2 op_103c_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1080_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46562,22 +35010,15 @@ unsigned long REGPARAM2 op_1080_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1090_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46590,22 +35031,15 @@ unsigned long REGPARAM2 op_1090_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1098_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46614,32 +35048,25 @@ unsigned long REGPARAM2 op_1098_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -46647,22 +35074,15 @@ unsigned long REGPARAM2 op_10a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46675,22 +35095,15 @@ unsigned long REGPARAM2 op_10a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46702,17 +35115,14 @@ unsigned long REGPARAM2 op_10b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46724,17 +35134,14 @@ unsigned long REGPARAM2 op_10b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46746,17 +35153,14 @@ unsigned long REGPARAM2 op_10b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46770,17 +35174,14 @@ unsigned long REGPARAM2 op_10ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46795,17 +35196,14 @@ unsigned long REGPARAM2 op_10bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46815,22 +35213,15 @@ unsigned long REGPARAM2 op_10bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46838,23 +35229,16 @@ unsigned long REGPARAM2 op_10c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46866,23 +35250,16 @@ unsigned long REGPARAM2 op_10d0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46891,55 +35268,41 @@ unsigned long REGPARAM2 op_10d8_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46951,23 +35314,16 @@ unsigned long REGPARAM2 op_10e8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -46978,18 +35334,15 @@ unsigned long REGPARAM2 op_10f0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47000,18 +35353,15 @@ unsigned long REGPARAM2 op_10f8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47022,18 +35372,15 @@ unsigned long REGPARAM2 op_10f9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47046,18 +35393,15 @@ unsigned long REGPARAM2 op_10fa_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47071,18 +35415,15 @@ unsigned long REGPARAM2 op_10fb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_10fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47091,48 +35432,34 @@ unsigned long REGPARAM2 op_10fc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1100_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1110_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47143,25 +35470,18 @@ unsigned long REGPARAM2 op_1110_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1118_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47170,57 +35490,43 @@ unsigned long REGPARAM2 op_1118_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1120_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1128_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47231,25 +35537,18 @@ unsigned long REGPARAM2 op_1128_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1130_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47259,20 +35558,17 @@ unsigned long REGPARAM2 op_1130_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1138_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47282,20 +35578,17 @@ unsigned long REGPARAM2 op_1138_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1139_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47305,20 +35598,17 @@ unsigned long REGPARAM2 op_1139_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_113a_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47330,20 +35620,17 @@ unsigned long REGPARAM2 op_113a_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_113b_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47356,20 +35643,17 @@ unsigned long REGPARAM2 op_113b_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_113c_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47377,25 +35661,18 @@ unsigned long REGPARAM2 op_113c_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1140_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47404,22 +35681,15 @@ unsigned long REGPARAM2 op_1140_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1150_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47432,22 +35702,15 @@ unsigned long REGPARAM2 op_1150_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1158_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47456,32 +35719,25 @@ unsigned long REGPARAM2 op_1158_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1160_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -47489,22 +35745,15 @@ unsigned long REGPARAM2 op_1160_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1168_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47517,22 +35766,15 @@ unsigned long REGPARAM2 op_1168_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1170_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47544,17 +35786,14 @@ unsigned long REGPARAM2 op_1170_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1178_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47566,17 +35805,14 @@ unsigned long REGPARAM2 op_1178_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1179_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47588,17 +35824,14 @@ unsigned long REGPARAM2 op_1179_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_117a_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47612,17 +35845,14 @@ unsigned long REGPARAM2 op_117a_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_117b_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47637,17 +35867,14 @@ unsigned long REGPARAM2 op_117b_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_117c_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47657,22 +35884,15 @@ unsigned long REGPARAM2 op_117c_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1180_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47680,22 +35900,15 @@ unsigned long REGPARAM2 op_1180_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1190_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47707,22 +35920,15 @@ unsigned long REGPARAM2 op_1190_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_1198_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47731,53 +35937,39 @@ unsigned long REGPARAM2 op_1198_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47789,22 +35981,15 @@ unsigned long REGPARAM2 op_11a8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47815,17 +36000,14 @@ unsigned long REGPARAM2 op_11b0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47836,17 +36018,14 @@ unsigned long REGPARAM2 op_11b8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47857,17 +36036,14 @@ unsigned long REGPARAM2 op_11b9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47880,17 +36056,14 @@ unsigned long REGPARAM2 op_11ba_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47904,17 +36077,14 @@ unsigned long REGPARAM2 op_11bb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47923,17 +36093,14 @@ unsigned long REGPARAM2 op_11bc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47941,17 +36108,14 @@ unsigned long REGPARAM2 op_11c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47963,17 +36127,14 @@ unsigned long REGPARAM2 op_11d0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -47982,43 +36143,37 @@ unsigned long REGPARAM2 op_11d8_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48030,17 +36185,14 @@ unsigned long REGPARAM2 op_11e8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48051,8 +36203,9 @@ unsigned long REGPARAM2 op_11f0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11f8_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48067,8 +36220,9 @@ unsigned long REGPARAM2 op_11f8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11f9_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48083,8 +36237,9 @@ unsigned long REGPARAM2 op_11f9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11fa_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48101,8 +36256,9 @@ unsigned long REGPARAM2 op_11fa_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11fb_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48120,8 +36276,9 @@ unsigned long REGPARAM2 op_11fb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_11fc_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48134,17 +36291,14 @@ unsigned long REGPARAM2 op_11fc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48152,17 +36306,14 @@ unsigned long REGPARAM2 op_13c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48174,17 +36325,14 @@ unsigned long REGPARAM2 op_13d0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48193,43 +36341,37 @@ unsigned long REGPARAM2 op_13d8_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48241,17 +36383,14 @@ unsigned long REGPARAM2 op_13e8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48262,8 +36401,9 @@ unsigned long REGPARAM2 op_13f0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13f8_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48278,8 +36418,9 @@ unsigned long REGPARAM2 op_13f8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13f9_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48294,8 +36435,9 @@ unsigned long REGPARAM2 op_13f9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13fa_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48312,8 +36454,9 @@ unsigned long REGPARAM2 op_13fa_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13fb_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48331,8 +36474,9 @@ unsigned long REGPARAM2 op_13fb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_13fc_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -48345,47 +36489,33 @@ unsigned long REGPARAM2 op_13fc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writebyte(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2000_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2008_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48394,25 +36524,18 @@ unsigned long REGPARAM2 op_2008_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2010_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48423,25 +36546,18 @@ unsigned long REGPARAM2 op_2010_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2018_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48450,57 +36566,43 @@ unsigned long REGPARAM2 op_2018_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2020_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2028_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48511,25 +36613,18 @@ unsigned long REGPARAM2 op_2028_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2030_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48539,20 +36634,17 @@ unsigned long REGPARAM2 op_2030_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2038_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48562,20 +36654,17 @@ unsigned long REGPARAM2 op_2038_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2039_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48585,20 +36674,17 @@ unsigned long REGPARAM2 op_2039_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_203a_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48610,20 +36696,17 @@ unsigned long REGPARAM2 op_203a_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_203b_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48636,20 +36719,17 @@ unsigned long REGPARAM2 op_203b_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_203c_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48657,33 +36737,25 @@ unsigned long REGPARAM2 op_203c_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2040_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48691,16 +36763,8 @@ return 0; } unsigned long REGPARAM2 op_2048_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48709,8 +36773,7 @@ unsigned long REGPARAM2 op_2048_0_comp_nf(uae_u32 opcode) /* MOVEA */ if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48718,16 +36781,8 @@ return 0; } unsigned long REGPARAM2 op_2050_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48738,8 +36793,7 @@ unsigned long REGPARAM2 op_2050_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48747,16 +36801,8 @@ return 0; } unsigned long REGPARAM2 op_2058_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48765,10 +36811,9 @@ unsigned long REGPARAM2 op_2058_0_comp_nf(uae_u32 opcode) /* MOVEA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48776,29 +36821,20 @@ return 0; } unsigned long REGPARAM2 op_2060_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48806,16 +36842,8 @@ return 0; } unsigned long REGPARAM2 op_2068_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48826,8 +36854,7 @@ unsigned long REGPARAM2 op_2068_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48835,16 +36862,8 @@ return 0; } unsigned long REGPARAM2 op_2070_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48854,8 +36873,7 @@ unsigned long REGPARAM2 op_2070_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48863,11 +36881,7 @@ return 0; } unsigned long REGPARAM2 op_2078_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48877,8 +36891,7 @@ unsigned long REGPARAM2 op_2078_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48886,11 +36899,7 @@ return 0; } unsigned long REGPARAM2 op_2079_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48900,8 +36909,7 @@ unsigned long REGPARAM2 op_2079_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48909,11 +36917,7 @@ return 0; } unsigned long REGPARAM2 op_207a_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48925,8 +36929,7 @@ unsigned long REGPARAM2 op_207a_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48934,11 +36937,7 @@ return 0; } unsigned long REGPARAM2 op_207b_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48951,8 +36950,7 @@ unsigned long REGPARAM2 op_207b_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - mov_l_rr(dst,src); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48960,11 +36958,7 @@ return 0; } unsigned long REGPARAM2 op_207c_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48972,8 +36966,7 @@ unsigned long REGPARAM2 op_207c_0_comp_nf(uae_u32 opcode) /* MOVEA */ { 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); +{ jnf_MOVEA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -48981,16 +36974,8 @@ return 0; } unsigned long REGPARAM2 op_2080_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -48999,22 +36984,15 @@ unsigned long REGPARAM2 op_2080_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2088_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49025,22 +37003,15 @@ unsigned long REGPARAM2 op_2088_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2090_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49053,22 +37024,15 @@ unsigned long REGPARAM2 op_2090_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2098_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49077,32 +37041,25 @@ unsigned long REGPARAM2 op_2098_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -49110,22 +37067,15 @@ unsigned long REGPARAM2 op_20a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49138,22 +37088,15 @@ unsigned long REGPARAM2 op_20a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49165,17 +37108,14 @@ unsigned long REGPARAM2 op_20b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49187,17 +37127,14 @@ unsigned long REGPARAM2 op_20b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49209,17 +37146,14 @@ unsigned long REGPARAM2 op_20b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49233,17 +37167,14 @@ unsigned long REGPARAM2 op_20ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49258,17 +37189,14 @@ unsigned long REGPARAM2 op_20bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49278,22 +37206,15 @@ unsigned long REGPARAM2 op_20bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49301,23 +37222,16 @@ unsigned long REGPARAM2 op_20c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49327,23 +37241,16 @@ unsigned long REGPARAM2 op_20c8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49355,23 +37262,16 @@ unsigned long REGPARAM2 op_20d0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49380,55 +37280,41 @@ unsigned long REGPARAM2 op_20d8_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49440,23 +37326,16 @@ unsigned long REGPARAM2 op_20e8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49467,18 +37346,15 @@ unsigned long REGPARAM2 op_20f0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49489,18 +37365,15 @@ unsigned long REGPARAM2 op_20f8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49511,18 +37384,15 @@ unsigned long REGPARAM2 op_20f9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49535,18 +37405,15 @@ unsigned long REGPARAM2 op_20fa_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49560,18 +37427,15 @@ unsigned long REGPARAM2 op_20fb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_20fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49580,48 +37444,34 @@ unsigned long REGPARAM2 op_20fc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2100_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2108_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49630,25 +37480,18 @@ unsigned long REGPARAM2 op_2108_0_comp_nf(uae_u32 opcode) /* MOVE */ if (dodgy) mov_l_rr(src,srcreg+8); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2110_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49659,25 +37502,18 @@ unsigned long REGPARAM2 op_2110_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2118_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49686,57 +37522,43 @@ unsigned long REGPARAM2 op_2118_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2120_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2128_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49747,25 +37569,18 @@ unsigned long REGPARAM2 op_2128_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2130_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49775,20 +37590,17 @@ unsigned long REGPARAM2 op_2130_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2138_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49798,20 +37610,17 @@ unsigned long REGPARAM2 op_2138_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2139_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49821,20 +37630,17 @@ unsigned long REGPARAM2 op_2139_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_213a_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49846,20 +37652,17 @@ unsigned long REGPARAM2 op_213a_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_213b_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49872,20 +37675,17 @@ unsigned long REGPARAM2 op_213b_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_213c_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49893,25 +37693,18 @@ unsigned long REGPARAM2 op_213c_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2140_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49920,22 +37713,15 @@ unsigned long REGPARAM2 op_2140_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2148_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49946,22 +37732,15 @@ unsigned long REGPARAM2 op_2148_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2150_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49974,22 +37753,15 @@ unsigned long REGPARAM2 op_2150_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2158_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -49998,32 +37770,25 @@ unsigned long REGPARAM2 op_2158_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2160_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -50031,22 +37796,15 @@ unsigned long REGPARAM2 op_2160_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2168_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50059,22 +37817,15 @@ unsigned long REGPARAM2 op_2168_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2170_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50086,17 +37837,14 @@ unsigned long REGPARAM2 op_2170_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2178_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50108,164 +37856,131 @@ unsigned long REGPARAM2 op_2178_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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)); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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=start_pc+((char *)comp_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(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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=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(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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)); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_2180_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dstreg = (opcode >> 9) & 7; + uae_u32 dodgy=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(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_2188_0_comp_nf(uae_u32 opcode) /* MOVE */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dstreg = (opcode >> 9) & 7; + uae_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(); +{ writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } #endif #ifdef PART_3 -unsigned long REGPARAM2 op_2179_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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 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; -} -unsigned long REGPARAM2 op_217a_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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 srca=scratchie++; - uae_u32 address=start_pc+((char *)comp_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; -} -unsigned long REGPARAM2 op_217b_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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 pctmp=scratchie++; - int srca=scratchie++; - uae_u32 address=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; -} -unsigned long REGPARAM2 op_217c_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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,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; -} -unsigned long REGPARAM2 op_2180_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else - uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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++; - 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; -} -unsigned long REGPARAM2 op_2188_0_comp_nf(uae_u32 opcode) /* MOVE */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else - uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (opcode >> 9) & 7; -#endif - uae_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; -} unsigned long REGPARAM2 op_2190_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50277,22 +37992,15 @@ unsigned long REGPARAM2 op_2190_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_2198_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50301,53 +38009,39 @@ unsigned long REGPARAM2 op_2198_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50359,22 +38053,15 @@ unsigned long REGPARAM2 op_21a8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50385,17 +38072,14 @@ unsigned long REGPARAM2 op_21b0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50406,17 +38090,14 @@ unsigned long REGPARAM2 op_21b8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50427,17 +38108,14 @@ unsigned long REGPARAM2 op_21b9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50450,17 +38128,14 @@ unsigned long REGPARAM2 op_21ba_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50474,17 +38149,14 @@ unsigned long REGPARAM2 op_21bb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50493,17 +38165,14 @@ unsigned long REGPARAM2 op_21bc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50511,17 +38180,14 @@ unsigned long REGPARAM2 op_21c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50531,17 +38197,14 @@ unsigned long REGPARAM2 op_21c8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50553,17 +38216,14 @@ unsigned long REGPARAM2 op_21d0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50572,43 +38232,37 @@ unsigned long REGPARAM2 op_21d8_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50620,17 +38274,14 @@ unsigned long REGPARAM2 op_21e8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50641,8 +38292,9 @@ unsigned long REGPARAM2 op_21f0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21f8_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50657,8 +38309,9 @@ unsigned long REGPARAM2 op_21f8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21f9_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50673,8 +38326,9 @@ unsigned long REGPARAM2 op_21f9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21fa_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50691,8 +38345,9 @@ unsigned long REGPARAM2 op_21fa_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21fb_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50710,8 +38365,9 @@ unsigned long REGPARAM2 op_21fb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_21fc_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50724,17 +38380,14 @@ unsigned long REGPARAM2 op_21fc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50742,17 +38395,14 @@ unsigned long REGPARAM2 op_23c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50762,17 +38412,14 @@ unsigned long REGPARAM2 op_23c8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50784,17 +38431,14 @@ unsigned long REGPARAM2 op_23d0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50803,43 +38447,37 @@ unsigned long REGPARAM2 op_23d8_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50851,17 +38489,14 @@ unsigned long REGPARAM2 op_23e8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -50872,8 +38507,9 @@ unsigned long REGPARAM2 op_23f0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23f8_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50888,8 +38524,9 @@ unsigned long REGPARAM2 op_23f8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23f9_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50904,8 +38541,9 @@ unsigned long REGPARAM2 op_23f9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23fa_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50922,8 +38560,9 @@ unsigned long REGPARAM2 op_23fa_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23fb_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50941,8 +38580,9 @@ unsigned long REGPARAM2 op_23fb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_23fc_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -50955,53 +38595,33 @@ unsigned long REGPARAM2 op_23fc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writelong(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3000_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; - dont_care_flags(); -if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3008_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51010,31 +38630,18 @@ unsigned long REGPARAM2 op_3008_0_comp_nf(uae_u32 opcode) /* MOVE */ 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3010_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51045,31 +38652,18 @@ unsigned long REGPARAM2 op_3010_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3018_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51078,69 +38672,43 @@ unsigned long REGPARAM2 op_3018_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(srcreg+8,2); { int dst=dstreg; - dont_care_flags(); -if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - and_l_ri(dst,0xffff0000); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3020_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3028_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51151,31 +38719,18 @@ unsigned long REGPARAM2 op_3028_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3030_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51185,26 +38740,17 @@ unsigned long REGPARAM2 op_3030_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3038_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51214,26 +38760,17 @@ unsigned long REGPARAM2 op_3038_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3039_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51243,26 +38780,17 @@ unsigned long REGPARAM2 op_3039_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_303a_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51274,26 +38802,17 @@ unsigned long REGPARAM2 op_303a_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_303b_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51306,26 +38825,17 @@ unsigned long REGPARAM2 op_303b_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_303c_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51333,39 +38843,25 @@ unsigned long REGPARAM2 op_303c_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); - arm_ORR_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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3040_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51373,16 +38869,8 @@ return 0; } unsigned long REGPARAM2 op_3048_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51391,8 +38879,7 @@ unsigned long REGPARAM2 op_3048_0_comp_nf(uae_u32 opcode) /* MOVEA */ if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51400,16 +38887,8 @@ return 0; } unsigned long REGPARAM2 op_3050_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51420,8 +38899,7 @@ unsigned long REGPARAM2 op_3050_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51429,16 +38907,8 @@ return 0; } unsigned long REGPARAM2 op_3058_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51447,10 +38917,9 @@ unsigned long REGPARAM2 op_3058_0_comp_nf(uae_u32 opcode) /* MOVEA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51458,29 +38927,20 @@ return 0; } unsigned long REGPARAM2 op_3060_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51488,16 +38948,8 @@ return 0; } unsigned long REGPARAM2 op_3068_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51508,8 +38960,7 @@ unsigned long REGPARAM2 op_3068_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51517,16 +38968,8 @@ return 0; } unsigned long REGPARAM2 op_3070_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51536,8 +38979,7 @@ unsigned long REGPARAM2 op_3070_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51545,11 +38987,7 @@ return 0; } unsigned long REGPARAM2 op_3078_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51559,8 +38997,7 @@ unsigned long REGPARAM2 op_3078_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51568,11 +39005,7 @@ return 0; } unsigned long REGPARAM2 op_3079_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51582,8 +39015,7 @@ unsigned long REGPARAM2 op_3079_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51591,11 +39023,7 @@ return 0; } unsigned long REGPARAM2 op_307a_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51607,8 +39035,7 @@ unsigned long REGPARAM2 op_307a_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51616,11 +39043,7 @@ return 0; } unsigned long REGPARAM2 op_307b_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51633,8 +39056,7 @@ unsigned long REGPARAM2 op_307b_0_comp_nf(uae_u32 opcode) /* MOVEA */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; -{ int tmps=scratchie++; - sign_extend_16_rr(dst,src); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51642,11 +39064,7 @@ return 0; } unsigned long REGPARAM2 op_307c_0_comp_nf(uae_u32 opcode) /* MOVEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51654,8 +39072,7 @@ unsigned long REGPARAM2 op_307c_0_comp_nf(uae_u32 opcode) /* MOVEA */ { 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); +{ jnf_MOVEA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -51663,16 +39080,8 @@ return 0; } unsigned long REGPARAM2 op_3080_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51681,22 +39090,15 @@ unsigned long REGPARAM2 op_3080_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3088_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51707,22 +39109,15 @@ unsigned long REGPARAM2 op_3088_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3090_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51735,22 +39130,15 @@ unsigned long REGPARAM2 op_3090_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3098_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51759,32 +39147,25 @@ unsigned long REGPARAM2 op_3098_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -51792,22 +39173,15 @@ unsigned long REGPARAM2 op_30a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51820,22 +39194,15 @@ unsigned long REGPARAM2 op_30a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51847,17 +39214,14 @@ unsigned long REGPARAM2 op_30b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51869,17 +39233,14 @@ unsigned long REGPARAM2 op_30b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51891,17 +39252,14 @@ unsigned long REGPARAM2 op_30b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51915,17 +39273,14 @@ unsigned long REGPARAM2 op_30ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51940,17 +39295,14 @@ unsigned long REGPARAM2 op_30bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51960,22 +39312,15 @@ unsigned long REGPARAM2 op_30bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -51983,23 +39328,16 @@ unsigned long REGPARAM2 op_30c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52009,23 +39347,16 @@ unsigned long REGPARAM2 op_30c8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52037,23 +39368,16 @@ unsigned long REGPARAM2 op_30d0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52062,55 +39386,41 @@ unsigned long REGPARAM2 op_30d8_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52122,23 +39432,16 @@ unsigned long REGPARAM2 op_30e8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52149,18 +39452,15 @@ unsigned long REGPARAM2 op_30f0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52171,18 +39471,15 @@ unsigned long REGPARAM2 op_30f8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52193,18 +39490,15 @@ unsigned long REGPARAM2 op_30f9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52217,18 +39511,15 @@ unsigned long REGPARAM2 op_30fa_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52242,18 +39533,15 @@ unsigned long REGPARAM2 op_30fb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_30fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52262,48 +39550,34 @@ unsigned long REGPARAM2 op_30fc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3100_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3108_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52312,25 +39586,18 @@ unsigned long REGPARAM2 op_3108_0_comp_nf(uae_u32 opcode) /* MOVE */ if (dodgy) mov_l_rr(src,srcreg+8); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3110_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52341,25 +39608,18 @@ unsigned long REGPARAM2 op_3110_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3118_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52368,57 +39628,43 @@ unsigned long REGPARAM2 op_3118_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(srcreg+8,2); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3120_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3128_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52429,25 +39675,18 @@ unsigned long REGPARAM2 op_3128_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3130_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52457,20 +39696,17 @@ unsigned long REGPARAM2 op_3130_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3138_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52480,20 +39716,17 @@ unsigned long REGPARAM2 op_3138_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3139_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52503,20 +39736,17 @@ unsigned long REGPARAM2 op_3139_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_313a_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52528,20 +39758,17 @@ unsigned long REGPARAM2 op_313a_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_313b_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52554,20 +39781,17 @@ unsigned long REGPARAM2 op_313b_0_comp_nf(uae_u32 opcode) /* MOVE */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_313c_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52575,25 +39799,18 @@ unsigned long REGPARAM2 op_313c_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3140_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52602,22 +39819,15 @@ unsigned long REGPARAM2 op_3140_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3148_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52628,22 +39838,15 @@ unsigned long REGPARAM2 op_3148_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3150_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52656,22 +39859,15 @@ unsigned long REGPARAM2 op_3150_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3158_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52680,32 +39876,25 @@ unsigned long REGPARAM2 op_3158_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3160_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -52713,22 +39902,15 @@ unsigned long REGPARAM2 op_3160_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3168_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52741,22 +39923,15 @@ unsigned long REGPARAM2 op_3168_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3170_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52768,17 +39943,14 @@ unsigned long REGPARAM2 op_3170_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3178_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52790,17 +39962,14 @@ unsigned long REGPARAM2 op_3178_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3179_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52812,17 +39981,14 @@ unsigned long REGPARAM2 op_3179_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_317a_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52836,17 +40002,14 @@ unsigned long REGPARAM2 op_317a_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_317b_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52861,17 +40024,14 @@ unsigned long REGPARAM2 op_317b_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_317c_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52881,22 +40041,15 @@ unsigned long REGPARAM2 op_317c_0_comp_nf(uae_u32 opcode) /* MOVE */ { int dsta=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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3180_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52904,22 +40057,15 @@ unsigned long REGPARAM2 op_3180_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3188_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52929,22 +40075,15 @@ unsigned long REGPARAM2 op_3188_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3190_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52956,22 +40095,15 @@ unsigned long REGPARAM2 op_3190_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_3198_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -52980,53 +40112,39 @@ unsigned long REGPARAM2 op_3198_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53038,22 +40156,15 @@ unsigned long REGPARAM2 op_31a8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53064,17 +40175,14 @@ unsigned long REGPARAM2 op_31b0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53085,17 +40193,14 @@ unsigned long REGPARAM2 op_31b8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53106,17 +40211,14 @@ unsigned long REGPARAM2 op_31b9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53129,17 +40231,14 @@ unsigned long REGPARAM2 op_31ba_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53153,17 +40252,14 @@ unsigned long REGPARAM2 op_31bb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53172,17 +40268,14 @@ unsigned long REGPARAM2 op_31bc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53190,17 +40283,14 @@ unsigned long REGPARAM2 op_31c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53210,17 +40300,14 @@ unsigned long REGPARAM2 op_31c8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53232,17 +40319,14 @@ unsigned long REGPARAM2 op_31d0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53251,43 +40335,37 @@ unsigned long REGPARAM2 op_31d8_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53299,17 +40377,14 @@ unsigned long REGPARAM2 op_31e8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53320,8 +40395,9 @@ unsigned long REGPARAM2 op_31f0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31f8_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53336,8 +40412,9 @@ unsigned long REGPARAM2 op_31f8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31f9_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53352,8 +40429,9 @@ unsigned long REGPARAM2 op_31f9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31fa_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53370,8 +40448,9 @@ unsigned long REGPARAM2 op_31fa_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31fb_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53389,8 +40468,9 @@ unsigned long REGPARAM2 op_31fb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_31fc_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53403,17 +40483,14 @@ unsigned long REGPARAM2 op_31fc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53421,17 +40498,14 @@ unsigned long REGPARAM2 op_33c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53441,17 +40515,14 @@ unsigned long REGPARAM2 op_33c8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53463,17 +40534,14 @@ unsigned long REGPARAM2 op_33d0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53482,43 +40550,37 @@ unsigned long REGPARAM2 op_33d8_0_comp_nf(uae_u32 opcode) /* MOVE */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53530,17 +40592,14 @@ unsigned long REGPARAM2 op_33e8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53551,8 +40610,9 @@ unsigned long REGPARAM2 op_33f0_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33f8_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53567,8 +40627,9 @@ unsigned long REGPARAM2 op_33f8_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33f9_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53583,8 +40644,9 @@ unsigned long REGPARAM2 op_33f9_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33fa_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53601,8 +40663,9 @@ unsigned long REGPARAM2 op_33fa_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33fb_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53620,8 +40683,9 @@ unsigned long REGPARAM2 op_33fb_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_33fc_0_comp_nf(uae_u32 opcode) /* MOVE */ @@ -53634,27 +40698,21 @@ unsigned long REGPARAM2 op_33fc_0_comp_nf(uae_u32 opcode) /* MOVE */ 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(); + dont_care_flags(); +{ writeword(dsta,src,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4000_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); +{ int dst=scratchie++; + jnf_NEGX_b(dst,src); if(srcreg!=dst) mov_b_rr(srcreg,dst); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -53662,11 +40720,7 @@ return 0; } unsigned long REGPARAM2 op_4010_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53676,22 +40730,15 @@ unsigned long REGPARAM2 op_4010_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4018_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53700,49 +40747,35 @@ unsigned long REGPARAM2 op_4018_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); +{ int dst=scratchie++; + jnf_NEGX_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4020_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); +{ int dst=scratchie++; + jnf_NEGX_b(dst,src); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4028_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53752,22 +40785,15 @@ unsigned long REGPARAM2 op_4028_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4030_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53776,11 +40802,8 @@ unsigned long REGPARAM2 op_4030_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -53795,11 +40818,8 @@ unsigned long REGPARAM2 op_4038_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -53814,32 +40834,22 @@ unsigned long REGPARAM2 op_4039_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4040_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); +{ int dst=scratchie++; + jnf_NEGX_w(dst,src); if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -53847,11 +40857,7 @@ return 0; } unsigned long REGPARAM2 op_4050_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53861,22 +40867,15 @@ unsigned long REGPARAM2 op_4050_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4058_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53885,49 +40884,35 @@ unsigned long REGPARAM2 op_4058_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); + arm_ADD_l_ri8(srcreg+8,2); +{ int dst=scratchie++; + jnf_NEGX_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4060_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); +{ int dst=scratchie++; + jnf_NEGX_w(dst,src); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4068_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53937,22 +40922,15 @@ unsigned long REGPARAM2 op_4068_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4070_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -53961,11 +40939,8 @@ unsigned long REGPARAM2 op_4070_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -53980,11 +40955,8 @@ unsigned long REGPARAM2 op_4078_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -53999,32 +40971,22 @@ unsigned long REGPARAM2 op_4079_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4080_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); +{ int dst=scratchie++; + jnf_NEGX_l(dst,src); if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -54032,11 +40994,7 @@ return 0; } unsigned long REGPARAM2 op_4090_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54046,22 +41004,15 @@ unsigned long REGPARAM2 op_4090_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4098_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54070,49 +41021,35 @@ unsigned long REGPARAM2 op_4098_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); + arm_ADD_l_ri8(srcreg+8,4); +{ int dst=scratchie++; + jnf_NEGX_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_40a0_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); +{ int dst=scratchie++; + jnf_NEGX_l(dst,src); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_40a8_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54122,22 +41059,15 @@ unsigned long REGPARAM2 op_40a8_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_40b0_0_comp_nf(uae_u32 opcode) /* NEGX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54146,11 +41076,8 @@ unsigned long REGPARAM2 op_40b0_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -54165,11 +41092,8 @@ unsigned long REGPARAM2 op_40b8_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -54184,27 +41108,16 @@ unsigned long REGPARAM2 op_40b9_0_comp_nf(uae_u32 opcode) /* NEGX */ 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); +{ int dst=scratchie++; + jnf_NEGX_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_41d0_0_comp_nf(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54220,16 +41133,8 @@ return 0; } unsigned long REGPARAM2 op_41e8_0_comp_nf(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54245,16 +41150,8 @@ return 0; } unsigned long REGPARAM2 op_41f0_0_comp_nf(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54269,11 +41166,7 @@ return 0; } unsigned long REGPARAM2 op_41f8_0_comp_nf(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54288,11 +41181,7 @@ return 0; } unsigned long REGPARAM2 op_41f9_0_comp_nf(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54307,11 +41196,7 @@ return 0; } unsigned long REGPARAM2 op_41fa_0_comp_nf(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54328,11 +41213,7 @@ return 0; } unsigned long REGPARAM2 op_41fb_0_comp_nf(uae_u32 opcode) /* LEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54350,30 +41231,23 @@ return 0; } unsigned long REGPARAM2 op_4200_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + if(srcreg!=tmp) + mov_b_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4210_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54381,60 +41255,51 @@ unsigned long REGPARAM2 op_4210_0_comp_nf(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4218_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4220_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); -{ int dst=scratchie++; - mov_l_ri(dst,0); - writebyte(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4228_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54442,28 +41307,26 @@ unsigned long REGPARAM2 op_4228_0_comp_nf(uae_u32 opcode) /* CLR */ { int srca=scratchie++; 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4230_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -54475,9 +41338,10 @@ unsigned long REGPARAM2 op_4238_0_comp_nf(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -54489,38 +41353,32 @@ unsigned long REGPARAM2 op_4239_0_comp_nf(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writebyte(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4240_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + if(srcreg!=tmp) + mov_w_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4250_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54528,60 +41386,51 @@ unsigned long REGPARAM2 op_4250_0_comp_nf(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4258_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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); + arm_ADD_l_ri8(srcreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4260_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); -{ int dst=scratchie++; - mov_l_ri(dst,0); - writeword(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4268_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54589,28 +41438,26 @@ unsigned long REGPARAM2 op_4268_0_comp_nf(uae_u32 opcode) /* CLR */ { int srca=scratchie++; 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4270_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -54622,9 +41469,10 @@ unsigned long REGPARAM2 op_4278_0_comp_nf(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -54636,38 +41484,32 @@ unsigned long REGPARAM2 op_4279_0_comp_nf(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writeword(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4280_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4290_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54675,60 +41517,51 @@ unsigned long REGPARAM2 op_4290_0_comp_nf(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4298_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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); + arm_ADD_l_ri8(srcreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_42a0_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); -{ int dst=scratchie++; - mov_l_ri(dst,0); - writelong(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_42a8_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54736,28 +41569,26 @@ unsigned long REGPARAM2 op_42a8_0_comp_nf(uae_u32 opcode) /* CLR */ { int srca=scratchie++; 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_42b0_0_comp_nf(uae_u32 opcode) /* CLR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -54769,9 +41600,10 @@ unsigned long REGPARAM2 op_42b8_0_comp_nf(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -54783,9 +41615,10 @@ unsigned long REGPARAM2 op_42b9_0_comp_nf(uae_u32 opcode) /* CLR */ { 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_CLR(tmp); + writelong(srca,tmp,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -54794,32 +41627,22 @@ return 0; #ifdef PART_4 unsigned long REGPARAM2 op_4400_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); +{ int tmp=scratchie++; + jnf_NEG_b(tmp,src); + if(srcreg!=tmp) + mov_b_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4410_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54829,21 +41652,15 @@ unsigned long REGPARAM2 op_4410_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_b(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4418_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54852,47 +41669,35 @@ unsigned long REGPARAM2 op_4418_0_comp_nf(uae_u32 opcode) /* NEG */ 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); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); +{ int tmp=scratchie++; + jnf_NEG_b(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4420_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); +{ int tmp=scratchie++; + jnf_NEG_b(tmp,src); + writebyte(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4428_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54902,21 +41707,15 @@ unsigned long REGPARAM2 op_4428_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_b(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4430_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -54925,11 +41724,9 @@ unsigned long REGPARAM2 op_4430_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_b(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -54943,11 +41740,9 @@ unsigned long REGPARAM2 op_4438_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_b(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -54961,42 +41756,30 @@ unsigned long REGPARAM2 op_4439_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_b(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4440_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); +{ int tmp=scratchie++; + jnf_NEG_w(tmp,src); + if(srcreg!=tmp) + mov_w_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4450_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55006,21 +41789,15 @@ unsigned long REGPARAM2 op_4450_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_w(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4458_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55029,47 +41806,35 @@ unsigned long REGPARAM2 op_4458_0_comp_nf(uae_u32 opcode) /* NEG */ 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); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp=scratchie++; + jnf_NEG_w(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4460_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); +{ int tmp=scratchie++; + jnf_NEG_w(tmp,src); + writeword(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4468_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55079,21 +41844,15 @@ unsigned long REGPARAM2 op_4468_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_w(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4470_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55102,11 +41861,9 @@ unsigned long REGPARAM2 op_4470_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_w(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55120,11 +41877,9 @@ unsigned long REGPARAM2 op_4478_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_w(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55138,42 +41893,30 @@ unsigned long REGPARAM2 op_4479_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_w(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4480_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); +{ int tmp=scratchie++; + jnf_NEG_l(tmp,src); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4490_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55183,21 +41926,15 @@ unsigned long REGPARAM2 op_4490_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_l(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4498_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55206,47 +41943,35 @@ unsigned long REGPARAM2 op_4498_0_comp_nf(uae_u32 opcode) /* NEG */ 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); + arm_ADD_l_ri8(srcreg+8,4); +{ int tmp=scratchie++; + jnf_NEG_l(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_44a0_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); +{ int tmp=scratchie++; + jnf_NEG_l(tmp,src); + writelong(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_44a8_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55256,21 +41981,15 @@ unsigned long REGPARAM2 op_44a8_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_l(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_44b0_0_comp_nf(uae_u32 opcode) /* NEG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55279,11 +41998,9 @@ unsigned long REGPARAM2 op_44b0_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_l(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55297,11 +42014,9 @@ unsigned long REGPARAM2 op_44b8_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_l(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55315,47 +42030,31 @@ unsigned long REGPARAM2 op_44b9_0_comp_nf(uae_u32 opcode) /* NEG */ 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); +{ int tmp=scratchie++; + jnf_NEG_l(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4600_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} if(srcreg!=dst) - mov_b_rr(srcreg,dst); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + if(srcreg!=tmp) + mov_b_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4610_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55365,26 +42064,16 @@ unsigned long REGPARAM2 op_4610_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4618_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55393,57 +42082,37 @@ unsigned long REGPARAM2 op_4618_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(srca,dst,scratchie); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4620_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writebyte(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4628_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55453,26 +42122,16 @@ unsigned long REGPARAM2 op_4628_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4630_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55481,16 +42140,10 @@ unsigned long REGPARAM2 op_4630_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55504,16 +42157,10 @@ unsigned long REGPARAM2 op_4638_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55527,52 +42174,32 @@ unsigned long REGPARAM2 op_4639_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writebyte(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4640_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} if(srcreg!=dst) - mov_w_rr(srcreg,dst); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + if(srcreg!=tmp) + mov_w_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4650_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55582,26 +42209,16 @@ unsigned long REGPARAM2 op_4650_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4658_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55610,57 +42227,37 @@ unsigned long REGPARAM2 op_4658_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(srca,dst,scratchie); + arm_ADD_l_ri8(srcreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4660_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writeword(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4668_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55670,26 +42267,16 @@ unsigned long REGPARAM2 op_4668_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4670_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55698,16 +42285,10 @@ unsigned long REGPARAM2 op_4670_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55721,16 +42302,10 @@ unsigned long REGPARAM2 op_4678_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55744,47 +42319,32 @@ unsigned long REGPARAM2 op_4679_0_comp_nf(uae_u32 opcode) /* NOT */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writeword(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4680_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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(); -{ arm_EOR_l(dst,src); -} if(srcreg!=dst) - mov_l_rr(srcreg,dst); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4690_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55794,21 +42354,16 @@ unsigned long REGPARAM2 op_4690_0_comp_nf(uae_u32 opcode) /* NOT */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); -{ int dst=scratchie++; - mov_l_ri(dst,0xffffffff); - dont_care_flags(); -{ arm_EOR_l(dst,src); -} writelong(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4698_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55817,47 +42372,37 @@ unsigned long REGPARAM2 op_4698_0_comp_nf(uae_u32 opcode) /* NOT */ 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(); -{ arm_EOR_l(dst,src); -} writelong(srca,dst,scratchie); + arm_ADD_l_ri8(srcreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_46a0_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(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(); -{ arm_EOR_l(dst,src); -} writelong(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writelong(srca,tmp,scratchie); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_46a8_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55867,21 +42412,16 @@ unsigned long REGPARAM2 op_46a8_0_comp_nf(uae_u32 opcode) /* NOT */ 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(); -{ arm_EOR_l(dst,src); -} writelong(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_46b0_0_comp_nf(uae_u32 opcode) /* NOT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55890,11 +42430,10 @@ unsigned long REGPARAM2 op_46b0_0_comp_nf(uae_u32 opcode) /* NOT */ 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(); -{ arm_EOR_l(dst,src); -} writelong(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55908,11 +42447,10 @@ unsigned long REGPARAM2 op_46b8_0_comp_nf(uae_u32 opcode) /* NOT */ 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(); -{ arm_EOR_l(dst,src); -} writelong(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -55926,21 +42464,16 @@ unsigned long REGPARAM2 op_46b9_0_comp_nf(uae_u32 opcode) /* NOT */ 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(); -{ arm_EOR_l(dst,src); -} writelong(srca,dst,scratchie); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_NOT(tmp,src); + writelong(srca,tmp,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4808_0_comp_nf(uae_u32 opcode) /* LINK */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55961,30 +42494,22 @@ return 0; } unsigned long REGPARAM2 op_4840_0_comp_nf(uae_u32 opcode) /* SWAP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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(); - arm_ROR_l_ri8(src,16); + dont_care_flags(); +{ jnf_SWAP(src); if(srcreg!=src) mov_l_rr(srcreg,src); -}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4850_0_comp_nf(uae_u32 opcode) /* PEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -55994,7 +42519,7 @@ if (srcreg==7) dodgy=1; if (dodgy) mov_l_rr(srca,srcreg+8); {{ int dsta=dodgy?scratchie++:7+8; - lea_l_brr(7+8,7+8,-4); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -56003,11 +42528,7 @@ return 0; } unsigned long REGPARAM2 op_4868_0_comp_nf(uae_u32 opcode) /* PEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56017,7 +42538,7 @@ if (srcreg==7) dodgy=1; 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -56026,11 +42547,7 @@ return 0; } unsigned long REGPARAM2 op_4870_0_comp_nf(uae_u32 opcode) /* PEA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56039,7 +42556,7 @@ 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -56055,7 +42572,7 @@ unsigned long REGPARAM2 op_4878_0_comp_nf(uae_u32 opcode) /* PEA */ { 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -56071,7 +42588,7 @@ unsigned long REGPARAM2 op_4879_0_comp_nf(uae_u32 opcode) /* PEA */ { 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -56089,7 +42606,7 @@ unsigned long REGPARAM2 op_487a_0_comp_nf(uae_u32 opcode) /* PEA */ 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -56108,7 +42625,7 @@ unsigned long REGPARAM2 op_487b_0_comp_nf(uae_u32 opcode) /* PEA */ { 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); + arm_SUB_l_ri8(7+8,4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); @@ -56117,31 +42634,23 @@ return 0; } unsigned long REGPARAM2 op_4880_0_comp_nf(uae_u32 opcode) /* EXT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EXT_w(tmp,src); + if(srcreg!=tmp) + mov_w_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4890_0_comp_nf(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56154,13 +42663,11 @@ unsigned long REGPARAM2 op_4890_0_comp_nf(uae_u32 opcode) /* MVMLE */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -56176,11 +42683,7 @@ return 0; } unsigned long REGPARAM2 op_48a0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56193,14 +42696,12 @@ unsigned long REGPARAM2 op_48a0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,8+dstreg); - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { offset-=2; - mov_l_rr(tmp,15-i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,15-i,offset); } } lea_l_brr(8+dstreg,srca,(uae_s32)offset); } else { @@ -56216,11 +42717,7 @@ return 0; } unsigned long REGPARAM2 op_48a8_0_comp_nf(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56233,13 +42730,11 @@ unsigned long REGPARAM2 op_48a8_0_comp_nf(uae_u32 opcode) /* MVMLE */ { 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -56255,11 +42750,7 @@ return 0; } unsigned long REGPARAM2 op_48b0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56271,13 +42762,11 @@ unsigned long REGPARAM2 op_48b0_0_comp_nf(uae_u32 opcode) /* MVMLE */ 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -56304,13 +42793,11 @@ unsigned long REGPARAM2 op_48b8_0_comp_nf(uae_u32 opcode) /* MVMLE */ 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -56337,13 +42824,11 @@ unsigned long REGPARAM2 op_48b9_0_comp_nf(uae_u32 opcode) /* MVMLE */ signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_16(tmp); - mov_w_Rr(native,tmp,offset); + jnf_MVMLE_w(native,i,offset); offset+=2; } } } else { @@ -56359,31 +42844,23 @@ return 0; } unsigned long REGPARAM2 op_48c0_0_comp_nf(uae_u32 opcode) /* EXT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EXT_l(tmp,src); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_48d0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56396,13 +42873,11 @@ unsigned long REGPARAM2 op_48d0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -56418,11 +42893,7 @@ return 0; } unsigned long REGPARAM2 op_48e0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56435,14 +42906,12 @@ unsigned long REGPARAM2 op_48e0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,8+dstreg); - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { offset-=4; - mov_l_rr(tmp,15-i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,15-i,offset); } } lea_l_brr(8+dstreg,srca,(uae_s32)offset); } else { @@ -56458,11 +42927,7 @@ return 0; } unsigned long REGPARAM2 op_48e8_0_comp_nf(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56475,13 +42940,11 @@ unsigned long REGPARAM2 op_48e8_0_comp_nf(uae_u32 opcode) /* MVMLE */ { 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -56497,11 +42960,7 @@ return 0; } unsigned long REGPARAM2 op_48f0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56513,13 +42972,11 @@ unsigned long REGPARAM2 op_48f0_0_comp_nf(uae_u32 opcode) /* MVMLE */ 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -56546,13 +43003,11 @@ unsigned long REGPARAM2 op_48f8_0_comp_nf(uae_u32 opcode) /* MVMLE */ 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) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -56579,13 +43034,11 @@ unsigned long REGPARAM2 op_48f9_0_comp_nf(uae_u32 opcode) /* MVMLE */ signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem) { + if (!special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { - mov_l_rr(tmp,i); - mid_bswap_32(tmp); - mov_l_Rr(native,tmp,offset); + jnf_MVMLE_l(native,i,offset); offset+=4; } } } else { @@ -56601,46 +43054,35 @@ return 0; } unsigned long REGPARAM2 op_49c0_0_comp_nf(uae_u32 opcode) /* EXT */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EXT_b(tmp,src); + if(srcreg!=tmp) + mov_l_rr(srcreg,tmp); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a00_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a10_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56650,16 +43092,13 @@ unsigned long REGPARAM2 op_4a10_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a18_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56668,37 +43107,31 @@ unsigned long REGPARAM2 op_4a18_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a20_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); + dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a28_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56708,16 +43141,13 @@ unsigned long REGPARAM2 op_4a28_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a30_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56726,6 +43156,7 @@ unsigned long REGPARAM2 op_4a30_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56739,6 +43170,7 @@ unsigned long REGPARAM2 op_4a38_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56752,6 +43184,7 @@ unsigned long REGPARAM2 op_4a39_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56767,6 +43200,7 @@ unsigned long REGPARAM2 op_4a3a_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56783,6 +43217,7 @@ unsigned long REGPARAM2 op_4a3b_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56794,31 +43229,25 @@ unsigned long REGPARAM2 op_4a3c_0_comp_nf(uae_u32 opcode) /* TST */ { 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(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a40_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a48_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56826,16 +43255,13 @@ unsigned long REGPARAM2 op_4a48_0_comp_nf(uae_u32 opcode) /* TST */ { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); + dont_care_flags(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a50_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56845,16 +43271,13 @@ unsigned long REGPARAM2 op_4a50_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a58_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56863,37 +43286,31 @@ unsigned long REGPARAM2 op_4a58_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(srcreg+8,2); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a60_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); + dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a68_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56903,16 +43320,13 @@ unsigned long REGPARAM2 op_4a68_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a70_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -56921,6 +43335,7 @@ unsigned long REGPARAM2 op_4a70_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56934,6 +43349,7 @@ unsigned long REGPARAM2 op_4a78_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56947,6 +43363,7 @@ unsigned long REGPARAM2 op_4a79_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56962,6 +43379,7 @@ unsigned long REGPARAM2 op_4a7a_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56978,6 +43396,7 @@ unsigned long REGPARAM2 op_4a7b_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -56989,31 +43408,25 @@ unsigned long REGPARAM2 op_4a7c_0_comp_nf(uae_u32 opcode) /* TST */ { 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(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a80_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a88_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57021,16 +43434,13 @@ unsigned long REGPARAM2 op_4a88_0_comp_nf(uae_u32 opcode) /* TST */ { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); + dont_care_flags(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a90_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57040,16 +43450,13 @@ unsigned long REGPARAM2 op_4a90_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4a98_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57058,37 +43465,31 @@ unsigned long REGPARAM2 op_4a98_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4aa0_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); + dont_care_flags(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4aa8_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57098,16 +43499,13 @@ unsigned long REGPARAM2 op_4aa8_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4ab0_0_comp_nf(uae_u32 opcode) /* TST */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57116,6 +43514,7 @@ unsigned long REGPARAM2 op_4ab0_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57129,6 +43528,7 @@ unsigned long REGPARAM2 op_4ab8_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57142,6 +43542,7 @@ unsigned long REGPARAM2 op_4ab9_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57157,6 +43558,7 @@ unsigned long REGPARAM2 op_4aba_0_comp_nf(uae_u32 opcode) /* TST */ mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); + dont_care_flags(); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57173,6 +43575,7 @@ unsigned long REGPARAM2 op_4abb_0_comp_nf(uae_u32 opcode) /* TST */ 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(); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57184,200 +43587,201 @@ unsigned long REGPARAM2 op_4abc_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); + dont_care_flags(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4c00_0_comp_nf(uae_u32 opcode) /* MULL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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++; + 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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4c10_0_comp_nf(uae_u32 opcode) /* MULL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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++; + 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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4c18_0_comp_nf(uae_u32 opcode) /* MULL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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++; + 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); - } + arm_ADD_l_ri8(dstreg+8,4); + if (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4c20_0_comp_nf(uae_u32 opcode) /* MULL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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++; + 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); + arm_SUB_l_ri8(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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4c28_0_comp_nf(uae_u32 opcode) /* MULL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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++; + 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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4c30_0_comp_nf(uae_u32 opcode) /* MULL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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++; + 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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57387,24 +43791,28 @@ unsigned long REGPARAM2 op_4c38_0_comp_nf(uae_u32 opcode) /* MULL */ 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++; + 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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57414,24 +43822,28 @@ unsigned long REGPARAM2 op_4c39_0_comp_nf(uae_u32 opcode) /* MULL */ 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++; + 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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57442,26 +43854,30 @@ unsigned long REGPARAM2 op_4c3a_0_comp_nf(uae_u32 opcode) /* MULL */ 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++; + 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=start_pc+((char *)comp_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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57472,9 +43888,9 @@ unsigned long REGPARAM2 op_4c3b_0_comp_nf(uae_u32 opcode) /* MULL */ 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++; + 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=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; @@ -57482,17 +43898,21 @@ unsigned long REGPARAM2 op_4c3b_0_comp_nf(uae_u32 opcode) /* MULL */ 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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57502,32 +43922,32 @@ unsigned long REGPARAM2 op_4c3c_0_comp_nf(uae_u32 opcode) /* MULL */ 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++; + 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 (extra & 0x0400) { + int r3=(extra & 7); + mov_l_rr(r3,dst); + if (extra & 0x0800) { + jnf_MULS64(r2,r3); + } else { + jnf_MULU64(r2,r3); + } + } else { + if (extra & 0x0800) { + jnf_MULS32(r2,dst); + } else { + jnf_MULU32(r2,dst); + } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4c90_0_comp_nf(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57539,34 +43959,29 @@ unsigned long REGPARAM2 op_4c90_0_comp_nf(uae_u32 opcode) /* MVMEL */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4c98_0_comp_nf(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57577,36 +43992,31 @@ unsigned long REGPARAM2 op_4c98_0_comp_nf(uae_u32 opcode) /* MVMEL */ signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); offset+=2; } - } lea_l_brr(8+dstreg,srca,offset); + } jnf_ADD_im8(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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } mov_l_rr(8+dstreg,tmp); + mov_l_rr(8+dstreg,tmp); } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4ca8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57618,34 +44028,29 @@ unsigned long REGPARAM2 op_4ca8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { 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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4cb0_0_comp_nf(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57656,24 +44061,23 @@ unsigned long REGPARAM2 op_4cb0_0_comp_nf(uae_u32 opcode) /* MVMEL */ 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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57689,24 +44093,23 @@ unsigned long REGPARAM2 op_4cb8_0_comp_nf(uae_u32 opcode) /* MVMEL */ 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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57722,24 +44125,23 @@ unsigned long REGPARAM2 op_4cb9_0_comp_nf(uae_u32 opcode) /* MVMEL */ signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57758,24 +44160,23 @@ unsigned long REGPARAM2 op_4cba_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u32 address=start_pc+((char *)comp_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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57795,34 +44196,29 @@ unsigned long REGPARAM2 op_4cbb_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u32 address=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) { + if (!special_mem) { 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); + jnf_MVMEL_w(i,native,offset); 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); - arm_ADD_l_ri8(tmp,2); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readword(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,2); + } } - } } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4cd0_0_comp_nf(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57834,33 +44230,29 @@ unsigned long REGPARAM2 op_4cd0_0_comp_nf(uae_u32 opcode) /* MVMEL */ { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4cd8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57871,35 +44263,31 @@ unsigned long REGPARAM2 op_4cd8_0_comp_nf(uae_u32 opcode) /* MVMEL */ signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); offset+=4; } - } lea_l_brr(8+dstreg,srca,offset); + } jnf_ADD_im8(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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } mov_l_rr(8+dstreg,tmp); + mov_l_rr(8+dstreg,tmp); } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4ce8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57911,33 +44299,29 @@ unsigned long REGPARAM2 op_4ce8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { 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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4cf0_0_comp_nf(uae_u32 opcode) /* MVMEL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -57948,23 +44332,23 @@ unsigned long REGPARAM2 op_4cf0_0_comp_nf(uae_u32 opcode) /* MVMEL */ 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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -57980,23 +44364,23 @@ unsigned long REGPARAM2 op_4cf8_0_comp_nf(uae_u32 opcode) /* MVMEL */ 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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -58012,23 +44396,23 @@ unsigned long REGPARAM2 op_4cf9_0_comp_nf(uae_u32 opcode) /* MVMEL */ signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ - if (1 && !special_mem) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -58047,23 +44431,23 @@ unsigned long REGPARAM2 op_4cfa_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u32 address=start_pc+((char *)comp_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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } @@ -58083,33 +44467,29 @@ unsigned long REGPARAM2 op_4cfb_0_comp_nf(uae_u32 opcode) /* MVMEL */ uae_u32 address=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) { + if (!special_mem) { 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); + jnf_MVMEL_l(i,native,offset); 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); - arm_ADD_l_ri8(tmp,4); + int tmp=scratchie++; + mov_l_rr(tmp,srca); + for (i=0;i<16;i++) { + if ((mask>>i)&1) { + readlong(tmp,i,scratchie); + arm_ADD_l_ri8(tmp,4); + } } - } } + } }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4e50_0_comp_nf(uae_u32 opcode) /* LINK */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58122,7 +44502,6 @@ unsigned long REGPARAM2 op_4e50_0_comp_nf(uae_u32 opcode) /* LINK */ sub_l_ri(15,4); writelong_clobber(15,src,scratchie); mov_l_rr(src,15); - sign_extend_16_rr(offs,offs); arm_ADD_l(15,offs); if(srcreg+8!=src) mov_l_rr(srcreg+8,src); @@ -58131,11 +44510,7 @@ return 0; } unsigned long REGPARAM2 op_4e58_0_comp_nf(uae_u32 opcode) /* UNLK */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58191,17 +44566,13 @@ unsigned long REGPARAM2 op_4e75_0_comp_nf(uae_u32 opcode) /* RTS */ get_n_addr_jmp(newad,PC_P,scratchie); mov_l_mr((uintptr)®s.pc_oldp,PC_P); m68k_pc_offset=0; - lea_l_brr(15,15,4); + arm_ADD_l_ri8(15,4); } if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_4e90_0_comp_nf(uae_u32 opcode) /* JSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58223,11 +44594,7 @@ return 0; } unsigned long REGPARAM2 op_4ea8_0_comp_nf(uae_u32 opcode) /* JSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58249,11 +44616,7 @@ return 0; } unsigned long REGPARAM2 op_4eb0_0_comp_nf(uae_u32 opcode) /* JSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58359,11 +44722,7 @@ return 0; } unsigned long REGPARAM2 op_4ed0_0_comp_nf(uae_u32 opcode) /* JMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58380,11 +44739,7 @@ return 0; } unsigned long REGPARAM2 op_4ee8_0_comp_nf(uae_u32 opcode) /* JMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58401,11 +44756,7 @@ return 0; } unsigned long REGPARAM2 op_4ef0_0_comp_nf(uae_u32 opcode) /* JMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58486,16 +44837,8 @@ return 0; } unsigned long REGPARAM2 op_5000_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58503,25 +44846,18 @@ unsigned long REGPARAM2 op_5000_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5010_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58533,24 +44869,17 @@ unsigned long REGPARAM2 op_5010_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5018_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58561,25 +44890,18 @@ unsigned long REGPARAM2 op_5018_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5020_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58587,29 +44909,22 @@ unsigned long REGPARAM2 op_5020_0_comp_nf(uae_u32 opcode) /* ADD */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5028_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58621,24 +44936,17 @@ unsigned long REGPARAM2 op_5028_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5030_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58649,19 +44957,16 @@ unsigned long REGPARAM2 op_5030_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5038_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -58672,19 +44977,16 @@ unsigned long REGPARAM2 op_5038_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5039_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -58695,24 +44997,17 @@ unsigned long REGPARAM2 op_5039_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5040_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58720,25 +45015,18 @@ unsigned long REGPARAM2 op_5040_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5048_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58748,9 +45036,7 @@ unsigned long REGPARAM2 op_5048_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -58758,16 +45044,8 @@ return 0; } unsigned long REGPARAM2 op_5050_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58779,24 +45057,17 @@ unsigned long REGPARAM2 op_5050_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5058_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58807,25 +45078,18 @@ unsigned long REGPARAM2 op_5058_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5060_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58833,29 +45097,22 @@ unsigned long REGPARAM2 op_5060_0_comp_nf(uae_u32 opcode) /* ADD */ { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5068_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58867,24 +45124,17 @@ unsigned long REGPARAM2 op_5068_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5070_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58895,19 +45145,16 @@ unsigned long REGPARAM2 op_5070_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5078_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -58918,19 +45165,16 @@ unsigned long REGPARAM2 op_5078_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5079_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -58941,24 +45185,17 @@ unsigned long REGPARAM2 op_5079_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5080_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58966,28 +45203,18 @@ unsigned long REGPARAM2 op_5080_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -#endif - -#ifdef PART_5 unsigned long REGPARAM2 op_5088_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -58997,26 +45224,19 @@ unsigned long REGPARAM2 op_5088_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } +#endif + +#ifdef PART_5 unsigned long REGPARAM2 op_5090_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59028,24 +45248,17 @@ unsigned long REGPARAM2 op_5090_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5098_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59056,25 +45269,18 @@ unsigned long REGPARAM2 op_5098_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50a0_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59082,29 +45288,22 @@ unsigned long REGPARAM2 op_50a0_0_comp_nf(uae_u32 opcode) /* ADD */ { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50a8_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59116,24 +45315,17 @@ unsigned long REGPARAM2 op_50a8_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50b0_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59144,19 +45336,16 @@ unsigned long REGPARAM2 op_50b0_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50b8_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -59167,19 +45356,16 @@ unsigned long REGPARAM2 op_50b8_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50b9_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -59190,27 +45376,23 @@ unsigned long REGPARAM2 op_50b9_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50c0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + mov_l_ri(val, 0xff); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -59218,11 +45400,7 @@ return 0; } unsigned long REGPARAM2 op_50c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59230,13 +45408,12 @@ unsigned long REGPARAM2 op_50c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ int nsrc = scratchie++; if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -59244,11 +45421,7 @@ return 0; } unsigned long REGPARAM2 op_50d0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59257,62 +45430,47 @@ unsigned long REGPARAM2 op_50d0_0_comp_nf(uae_u32 opcode) /* Scc */ if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50d8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50e0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; - mov_l_ri(val,0); - sub_b_ri(val,1); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50e8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59321,19 +45479,14 @@ unsigned long REGPARAM2 op_50e8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_50f0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59341,8 +45494,7 @@ unsigned long REGPARAM2 op_50f0_0_comp_nf(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -59356,8 +45508,7 @@ unsigned long REGPARAM2 op_50f8_0_comp_nf(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -59371,24 +45522,15 @@ unsigned long REGPARAM2 op_50f9_0_comp_nf(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0xff); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5100_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59396,25 +45538,18 @@ unsigned long REGPARAM2 op_5100_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5110_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59426,24 +45561,17 @@ unsigned long REGPARAM2 op_5110_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5118_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59454,25 +45582,18 @@ unsigned long REGPARAM2 op_5118_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5120_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59480,29 +45601,22 @@ unsigned long REGPARAM2 op_5120_0_comp_nf(uae_u32 opcode) /* SUB */ { 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5128_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59514,24 +45628,17 @@ unsigned long REGPARAM2 op_5128_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5130_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59542,19 +45649,16 @@ unsigned long REGPARAM2 op_5130_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5138_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -59565,19 +45669,16 @@ unsigned long REGPARAM2 op_5138_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5139_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -59588,24 +45689,17 @@ unsigned long REGPARAM2 op_5139_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5140_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59613,25 +45707,18 @@ unsigned long REGPARAM2 op_5140_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5148_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59641,9 +45728,7 @@ unsigned long REGPARAM2 op_5148_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -59651,16 +45736,8 @@ return 0; } unsigned long REGPARAM2 op_5150_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59672,24 +45749,17 @@ unsigned long REGPARAM2 op_5150_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5158_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59700,25 +45770,18 @@ unsigned long REGPARAM2 op_5158_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5160_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59726,29 +45789,22 @@ unsigned long REGPARAM2 op_5160_0_comp_nf(uae_u32 opcode) /* SUB */ { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5168_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59760,24 +45816,17 @@ unsigned long REGPARAM2 op_5168_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5170_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59788,19 +45837,16 @@ unsigned long REGPARAM2 op_5170_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5178_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -59811,19 +45857,16 @@ unsigned long REGPARAM2 op_5178_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5179_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -59834,24 +45877,17 @@ unsigned long REGPARAM2 op_5179_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5180_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59859,25 +45895,18 @@ unsigned long REGPARAM2 op_5180_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5188_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59887,9 +45916,7 @@ unsigned long REGPARAM2 op_5188_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -59897,16 +45924,8 @@ return 0; } unsigned long REGPARAM2 op_5190_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59918,24 +45937,17 @@ unsigned long REGPARAM2 op_5190_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5198_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59946,25 +45958,18 @@ unsigned long REGPARAM2 op_5198_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51a0_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -59972,29 +45977,22 @@ unsigned long REGPARAM2 op_51a0_0_comp_nf(uae_u32 opcode) /* SUB */ { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; - lea_l_brr(dstreg+8,dstreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51a8_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60006,24 +46004,17 @@ unsigned long REGPARAM2 op_51a8_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51b0_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60034,19 +46025,16 @@ unsigned long REGPARAM2 op_51b0_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51b8_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -60057,19 +46045,16 @@ unsigned long REGPARAM2 op_51b8_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51b9_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -60080,27 +46065,23 @@ unsigned long REGPARAM2 op_51b9_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51c0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_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); + mov_l_ri(val, 0); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60108,11 +46089,7 @@ return 0; } unsigned long REGPARAM2 op_51c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60120,20 +46097,17 @@ unsigned long REGPARAM2 op_51c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; - start_needflags(); - sub_w_ri(src,1); - end_needflags(); +{ int nsrc = scratchie++; + sub_w_ri(src, 1); { uae_u32 v2; uae_u32 v1=get_const(PC_P); v2=get_const(offs); - register_branch(v1,v2,3); + register_branch(v1, v2, 3); if(srcreg!=src) mov_w_rr(srcreg,src); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60141,11 +46115,7 @@ return 0; } unsigned long REGPARAM2 op_51d0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60154,62 +46124,47 @@ unsigned long REGPARAM2 op_51d0_0_comp_nf(uae_u32 opcode) /* Scc */ if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51d8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51e0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; - mov_l_ri(val,1); - sub_b_ri(val,1); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51e8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60218,19 +46173,14 @@ unsigned long REGPARAM2 op_51e8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_51f0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60238,8 +46188,7 @@ unsigned long REGPARAM2 op_51f0_0_comp_nf(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -60253,8 +46202,7 @@ unsigned long REGPARAM2 op_51f8_0_comp_nf(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -60268,19 +46216,14 @@ unsigned long REGPARAM2 op_51f9_0_comp_nf(uae_u32 opcode) /* Scc */ { 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); + mov_l_ri(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52c0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60288,8 +46231,7 @@ unsigned long REGPARAM2 op_52c0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); + jnf_SCC(val, 8); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60297,11 +46239,7 @@ return 0; } unsigned long REGPARAM2 op_52c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60309,23 +46247,17 @@ unsigned long REGPARAM2 op_52c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 8); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60333,11 +46265,7 @@ return 0; } unsigned long REGPARAM2 op_52d0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60347,64 +46275,49 @@ unsigned long REGPARAM2 op_52d0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52d8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,9); - sub_b_ri(val,1); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52e0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52e8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60414,19 +46327,14 @@ unsigned long REGPARAM2 op_52e8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_52f0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60435,8 +46343,7 @@ unsigned long REGPARAM2 op_52f0_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -60451,8 +46358,7 @@ unsigned long REGPARAM2 op_52f8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -60467,19 +46373,14 @@ unsigned long REGPARAM2 op_52f9_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 8); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53c0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60487,8 +46388,7 @@ unsigned long REGPARAM2 op_53c0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); + jnf_SCC(val, 9); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60496,11 +46396,7 @@ return 0; } unsigned long REGPARAM2 op_53c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60508,23 +46404,17 @@ unsigned long REGPARAM2 op_53c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 9); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60532,11 +46422,7 @@ return 0; } unsigned long REGPARAM2 op_53d0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60546,64 +46432,49 @@ unsigned long REGPARAM2 op_53d0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53d8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,8); - sub_b_ri(val,1); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53e0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53e8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60613,19 +46484,14 @@ unsigned long REGPARAM2 op_53e8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_53f0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60634,8 +46500,7 @@ unsigned long REGPARAM2 op_53f0_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -60650,8 +46515,7 @@ unsigned long REGPARAM2 op_53f8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -60666,19 +46530,14 @@ unsigned long REGPARAM2 op_53f9_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 9); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54c0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60686,8 +46545,7 @@ unsigned long REGPARAM2 op_54c0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); + jnf_SCC(val, 3); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60695,11 +46553,7 @@ return 0; } unsigned long REGPARAM2 op_54c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60707,23 +46561,17 @@ unsigned long REGPARAM2 op_54c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 3); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60731,11 +46579,7 @@ return 0; } unsigned long REGPARAM2 op_54d0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60745,64 +46589,49 @@ unsigned long REGPARAM2 op_54d0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54d8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,2); - sub_b_ri(val,1); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54e0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54e8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60812,19 +46641,14 @@ unsigned long REGPARAM2 op_54e8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_54f0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60833,8 +46657,7 @@ unsigned long REGPARAM2 op_54f0_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -60849,8 +46672,7 @@ unsigned long REGPARAM2 op_54f8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -60865,19 +46687,14 @@ unsigned long REGPARAM2 op_54f9_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 3); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55c0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60885,8 +46702,7 @@ unsigned long REGPARAM2 op_55c0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); + jnf_SCC(val, 2); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60894,11 +46710,7 @@ return 0; } unsigned long REGPARAM2 op_55c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60906,23 +46718,17 @@ unsigned long REGPARAM2 op_55c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 2); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -60930,11 +46736,7 @@ return 0; } unsigned long REGPARAM2 op_55d0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -60944,64 +46746,49 @@ unsigned long REGPARAM2 op_55d0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55d8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,3); - sub_b_ri(val,1); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55e0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55e8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61011,19 +46798,14 @@ unsigned long REGPARAM2 op_55e8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_55f0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61032,8 +46814,7 @@ unsigned long REGPARAM2 op_55f0_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61048,8 +46829,7 @@ unsigned long REGPARAM2 op_55f8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61064,19 +46844,14 @@ unsigned long REGPARAM2 op_55f9_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 2); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56c0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61084,8 +46859,7 @@ unsigned long REGPARAM2 op_56c0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -61093,11 +46867,7 @@ return 0; } unsigned long REGPARAM2 op_56c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61105,23 +46875,17 @@ unsigned long REGPARAM2 op_56c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); - cmov_l_rr(src,nsrc,1); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 1); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -61129,11 +46893,7 @@ return 0; } unsigned long REGPARAM2 op_56d0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61143,64 +46903,49 @@ unsigned long REGPARAM2 op_56d0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56d8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56e0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56e8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61210,19 +46955,14 @@ unsigned long REGPARAM2 op_56e8_0_comp_nf(uae_u32 opcode) /* Scc */ 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,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_56f0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61231,8 +46971,7 @@ unsigned long REGPARAM2 op_56f0_0_comp_nf(uae_u32 opcode) /* Scc */ calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61247,8 +46986,7 @@ unsigned long REGPARAM2 op_56f8_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61263,19 +47001,14 @@ unsigned long REGPARAM2 op_56f9_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); - setcc(val,0); - sub_b_ri(val,1); + jnf_SCC(val, 1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57c0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61283,8 +47016,7 @@ unsigned long REGPARAM2 op_57c0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -61292,11 +47024,7 @@ return 0; } unsigned long REGPARAM2 op_57c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61304,23 +47032,17 @@ unsigned long REGPARAM2 op_57c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,0); - cmov_l_rr(src,nsrc,0); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 0); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -61328,11 +47050,7 @@ return 0; } unsigned long REGPARAM2 op_57d0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61342,64 +47060,49 @@ unsigned long REGPARAM2 op_57d0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57d8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57e0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57e8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61409,19 +47112,14 @@ unsigned long REGPARAM2 op_57e8_0_comp_nf(uae_u32 opcode) /* Scc */ 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,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_57f0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61430,8 +47128,7 @@ unsigned long REGPARAM2 op_57f0_0_comp_nf(uae_u32 opcode) /* Scc */ calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61446,8 +47143,7 @@ unsigned long REGPARAM2 op_57f8_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61462,19 +47158,14 @@ unsigned long REGPARAM2 op_57f9_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); - setcc(val,1); - sub_b_ri(val,1); + jnf_SCC(val, 0); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ac0_0_comp_nf(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58c0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61482,20 +47173,15 @@ unsigned long REGPARAM2 op_5ac0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); + jnf_SCC(val, 7); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ac8_0_comp_nf(uae_u32 opcode) /* DBcc */ +unsigned long REGPARAM2 op_58c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61503,35 +47189,25 @@ unsigned long REGPARAM2 op_5ac8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 7); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ad0_0_comp_nf(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58d0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61541,64 +47217,49 @@ unsigned long REGPARAM2 op_5ad0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); + jnf_SCC(val, 7); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ad8_0_comp_nf(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58d8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,4); - sub_b_ri(val,1); + jnf_SCC(val, 7); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ae0_0_comp_nf(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58e0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 7); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5ae8_0_comp_nf(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58e8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61608,19 +47269,14 @@ unsigned long REGPARAM2 op_5ae8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 7); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_5af0_0_comp_nf(uae_u32 opcode) /* Scc */ +unsigned long REGPARAM2 op_58f0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61629,8 +47285,321 @@ unsigned long REGPARAM2 op_5af0_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 7); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_58f8_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(); + jnf_SCC(val, 7); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_58f9_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(); + jnf_SCC(val, 7); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59c0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_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(); + jnf_SCC(val, 6); + if(srcreg!=val) + mov_b_rr(srcreg,val); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59c8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_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)); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset=0; +{ int nsrc = scratchie++; + make_flags_live(); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 6); + register_branch(v1, v2, 2); + if(srcreg!=src) + mov_w_rr(srcreg,src); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59d0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 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 val = scratchie++; + make_flags_live(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59d8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int srca=scratchie++; + mov_l_rr(srca,srcreg+8); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); +{ int val = scratchie++; + make_flags_live(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59e0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 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; + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int val = scratchie++; + make_flags_live(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59e8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int srca=scratchie++; + 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(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59f0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + 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(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59f8_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(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_59f9_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(); + jnf_SCC(val, 6); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ac0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_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(); + jnf_SCC(val, 5); + if(srcreg!=val) + mov_b_rr(srcreg,val); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ac8_0_comp_nf(uae_u32 opcode) /* DBcc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_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)); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset=0; +{ int nsrc = scratchie++; + make_flags_live(); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 5); + register_branch(v1, v2, 2); + if(srcreg!=src) + mov_w_rr(srcreg,src); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ad0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 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 val = scratchie++; + make_flags_live(); + jnf_SCC(val, 5); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ad8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int srca=scratchie++; + mov_l_rr(srca,srcreg+8); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); +{ int val = scratchie++; + make_flags_live(); + jnf_SCC(val, 5); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ae0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 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; + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int val = scratchie++; + make_flags_live(); + jnf_SCC(val, 5); + writebyte(srca,val,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5ae8_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +{ int srca=scratchie++; + 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(); + jnf_SCC(val, 5); + writebyte(srca,val,scratchie); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_5af0_0_comp_nf(uae_u32 opcode) /* Scc */ +{ + uae_s32 srcreg = (opcode & 7); + 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(); + jnf_SCC(val, 5); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61645,8 +47614,7 @@ unsigned long REGPARAM2 op_5af8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 5); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61661,19 +47629,14 @@ unsigned long REGPARAM2 op_5af9_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 5); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5bc0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61681,8 +47644,7 @@ unsigned long REGPARAM2 op_5bc0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); + jnf_SCC(val, 4); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -61690,11 +47652,7 @@ return 0; } unsigned long REGPARAM2 op_5bc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61702,23 +47660,17 @@ unsigned long REGPARAM2 op_5bc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 4); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -61726,11 +47678,7 @@ return 0; } unsigned long REGPARAM2 op_5bd0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61740,64 +47688,49 @@ unsigned long REGPARAM2 op_5bd0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5bd8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,5); - sub_b_ri(val,1); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5be0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5be8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61807,19 +47740,14 @@ unsigned long REGPARAM2 op_5be8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5bf0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61828,8 +47756,7 @@ unsigned long REGPARAM2 op_5bf0_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61844,8 +47771,7 @@ unsigned long REGPARAM2 op_5bf8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -61860,19 +47786,14 @@ unsigned long REGPARAM2 op_5bf9_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 4); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5cc0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61880,8 +47801,7 @@ unsigned long REGPARAM2 op_5cc0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -61889,11 +47809,7 @@ return 0; } unsigned long REGPARAM2 op_5cc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61901,23 +47817,17 @@ unsigned long REGPARAM2 op_5cc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,10); - cmov_l_rr(src,nsrc,10); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 10); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -61925,11 +47835,7 @@ return 0; } unsigned long REGPARAM2 op_5cd0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -61939,64 +47845,49 @@ unsigned long REGPARAM2 op_5cd0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5cd8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ce0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ce8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62006,19 +47897,14 @@ unsigned long REGPARAM2 op_5ce8_0_comp_nf(uae_u32 opcode) /* Scc */ 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,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5cf0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62027,8 +47913,7 @@ unsigned long REGPARAM2 op_5cf0_0_comp_nf(uae_u32 opcode) /* Scc */ calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62043,8 +47928,7 @@ unsigned long REGPARAM2 op_5cf8_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62059,19 +47943,14 @@ unsigned long REGPARAM2 op_5cf9_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); - setcc(val,11); - sub_b_ri(val,1); + jnf_SCC(val, 10); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5dc0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62079,8 +47958,7 @@ unsigned long REGPARAM2 op_5dc0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -62088,11 +47966,7 @@ return 0; } unsigned long REGPARAM2 op_5dc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62100,23 +47974,17 @@ unsigned long REGPARAM2 op_5dc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,11); - cmov_l_rr(src,nsrc,11); - start_needflags(); - test_w_rr(nsrc,nsrc); - end_needflags(); - cmov_l_rr(PC_P,offs,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 11); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -62124,11 +47992,7 @@ return 0; } unsigned long REGPARAM2 op_5dd0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62138,64 +48002,49 @@ unsigned long REGPARAM2 op_5dd0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5dd8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5de0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5de8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62205,19 +48054,14 @@ unsigned long REGPARAM2 op_5de8_0_comp_nf(uae_u32 opcode) /* Scc */ 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,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5df0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62226,8 +48070,7 @@ unsigned long REGPARAM2 op_5df0_0_comp_nf(uae_u32 opcode) /* Scc */ calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62242,8 +48085,7 @@ unsigned long REGPARAM2 op_5df8_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62258,19 +48100,14 @@ unsigned long REGPARAM2 op_5df9_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); - setcc(val,10); - sub_b_ri(val,1); + jnf_SCC(val, 11); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ec0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62278,8 +48115,7 @@ unsigned long REGPARAM2 op_5ec0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); + jnf_SCC(val, 12); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -62287,11 +48123,7 @@ return 0; } unsigned long REGPARAM2 op_5ec8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62299,23 +48131,17 @@ unsigned long REGPARAM2 op_5ec8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 12); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -62323,11 +48149,7 @@ return 0; } unsigned long REGPARAM2 op_5ed0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62337,64 +48159,49 @@ unsigned long REGPARAM2 op_5ed0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ed8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,13); - sub_b_ri(val,1); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ee0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ee8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62404,19 +48211,14 @@ unsigned long REGPARAM2 op_5ee8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ef0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62425,8 +48227,7 @@ unsigned long REGPARAM2 op_5ef0_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62441,8 +48242,7 @@ unsigned long REGPARAM2 op_5ef8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62457,19 +48257,14 @@ unsigned long REGPARAM2 op_5ef9_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 12); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5fc0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62477,8 +48272,7 @@ unsigned long REGPARAM2 op_5fc0_0_comp_nf(uae_u32 opcode) /* Scc */ { int src=srcreg; { int val = scratchie++; make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); + jnf_SCC(val, 13); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -62486,11 +48280,7 @@ return 0; } unsigned long REGPARAM2 op_5fc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62498,23 +48288,17 @@ unsigned long REGPARAM2 op_5fc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { 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); - arm_ADD_l_ri(offs,(uintptr)comp_pc_p); - arm_ADD_l_ri(offs,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); + sub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(offs, (uintptr)comp_pc_p); + arm_ADD_l_ri(offs, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); m68k_pc_offset=0; -{ int nsrc=scratchie++; +{ 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,1); + uae_u32 v1=get_const(PC_P); + uae_u32 v2=get_const(offs); + jff_DBCC(src, 13); + register_branch(v1, v2, 2); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -62522,11 +48306,7 @@ return 0; } unsigned long REGPARAM2 op_5fd0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62536,64 +48316,49 @@ unsigned long REGPARAM2 op_5fd0_0_comp_nf(uae_u32 opcode) /* Scc */ mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5fd8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 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]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); - setcc(val,12); - sub_b_ri(val,1); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5fe0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=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]); + arm_SUB_l_ri8(srcreg+8,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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5fe8_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62603,19 +48368,14 @@ unsigned long REGPARAM2 op_5fe8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_5ff0_0_comp_nf(uae_u32 opcode) /* Scc */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -62624,8 +48384,7 @@ unsigned long REGPARAM2 op_5ff0_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62640,8 +48399,7 @@ unsigned long REGPARAM2 op_5ff8_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62656,8 +48414,7 @@ unsigned long REGPARAM2 op_5ff9_0_comp_nf(uae_u32 opcode) /* Scc */ 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); + jnf_SCC(val, 13); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62668,44 +48425,38 @@ unsigned long REGPARAM2 op_6000_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_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; } unsigned long REGPARAM2 op_6001_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_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; } @@ -62715,17 +48466,17 @@ unsigned long REGPARAM2 op_60ff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - mov_l_rr(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_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; } @@ -62745,17 +48496,13 @@ unsigned long REGPARAM2 op_6100_0_comp_nf(uae_u32 opcode) /* BSR */ arm_ADD_l_ri(src,m68k_pc_offset_thisinst+2); m68k_pc_offset=0; arm_ADD_l(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6101_0_comp_nf(uae_u32 opcode) /* BSR */ { -#ifdef 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; @@ -62770,7 +48517,27 @@ unsigned long REGPARAM2 op_6101_0_comp_nf(uae_u32 opcode) /* BSR */ arm_ADD_l_ri(src,m68k_pc_offset_thisinst+2); m68k_pc_offset=0; arm_ADD_l(PC_P,src); - comp_pc_p=(uae_u8*)get_const(PC_P); + comp_pc_p=(uae_u8*)(uintptr)get_const(PC_P); +}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long 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)); +{ uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; + int ret=scratchie++; + mov_l_ri(ret,retadd); + sub_l_ri(15,4); + writelong_clobber(15,ret,scratchie); + arm_ADD_l_ri(src,m68k_pc_offset_thisinst+2); + m68k_pc_offset=0; + arm_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; } @@ -62780,69 +48547,66 @@ unsigned long REGPARAM2 op_6200_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,8); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 8); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6201_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,8); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 8); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } +#endif + +#ifdef PART_6 unsigned long 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,8); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 8); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62853,50 +48617,41 @@ unsigned long REGPARAM2 op_6300_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,9); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 9); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -#endif - -#ifdef PART_6 unsigned long REGPARAM2 op_6301_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,9); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 9); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62907,18 +48662,18 @@ unsigned long REGPARAM2 op_63ff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,9); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 9); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62929,47 +48684,41 @@ unsigned long REGPARAM2 op_6400_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,3); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 3); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6401_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,3); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 3); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -62980,18 +48729,18 @@ unsigned long REGPARAM2 op_64ff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,3); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 3); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63002,47 +48751,41 @@ unsigned long REGPARAM2 op_6500_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,2); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 2); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6501_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,2); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 2); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63053,18 +48796,18 @@ unsigned long REGPARAM2 op_65ff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,2); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 2); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63075,47 +48818,41 @@ unsigned long REGPARAM2 op_6600_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,1); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 1); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6601_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,1); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 1); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63126,18 +48863,18 @@ unsigned long REGPARAM2 op_66ff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,1); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 1); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63148,47 +48885,41 @@ unsigned long REGPARAM2 op_6700_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,0); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 0); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6701_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,0); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 0); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63199,18 +48930,18 @@ unsigned long REGPARAM2 op_67ff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,0); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 0); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63221,47 +48952,41 @@ unsigned long REGPARAM2 op_6a00_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,5); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 5); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6a01_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,5); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 5); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63272,18 +48997,18 @@ unsigned long REGPARAM2 op_6aff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,5); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 5); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63294,47 +49019,41 @@ unsigned long REGPARAM2 op_6b00_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,4); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 4); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6b01_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,4); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 4); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63345,18 +49064,18 @@ unsigned long REGPARAM2 op_6bff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,4); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 4); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63367,47 +49086,41 @@ unsigned long REGPARAM2 op_6c00_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,10); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 10); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6c01_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,10); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 10); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63418,18 +49131,18 @@ unsigned long REGPARAM2 op_6cff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,10); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 10); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63440,47 +49153,41 @@ unsigned long REGPARAM2 op_6d00_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,11); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 11); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6d01_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,11); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 11); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63491,18 +49198,18 @@ unsigned long REGPARAM2 op_6dff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,11); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 11); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63513,47 +49220,41 @@ unsigned long REGPARAM2 op_6e00_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,12); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 12); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6e01_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,12); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 12); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63564,18 +49265,18 @@ unsigned long REGPARAM2 op_6eff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,12); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 12); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63586,47 +49287,41 @@ unsigned long REGPARAM2 op_6f00_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,13); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 13); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_6f01_0_comp_nf(uae_u32 opcode) /* Bcc */ { -#ifdef 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; - uae_u32 v1,v2; + uae_u32 v1, v2; { 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); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,13); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 13); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; @@ -63637,34 +49332,26 @@ unsigned long REGPARAM2 op_6fff_0_comp_nf(uae_u32 opcode) /* Bcc */ uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - uae_u32 v1,v2; + uae_u32 v1, v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); - sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); - arm_ADD_l_ri(src,(uintptr)comp_pc_p); - mov_l_ri(PC_P,(uintptr)comp_pc_p); - arm_ADD_l_ri(src,m68k_pc_offset); - arm_ADD_l_ri(PC_P,m68k_pc_offset); - m68k_pc_offset=0; - v1=get_const(PC_P); - v2=get_const(src); - register_branch(v1,v2,13); + sub_l_ri(src, m68k_pc_offset - m68k_pc_offset_thisinst - 2); + arm_ADD_l_ri(src, (uintptr)comp_pc_p); + mov_l_ri(PC_P, (uintptr)comp_pc_p); + arm_ADD_l_ri(src, m68k_pc_offset); + arm_ADD_l_ri(PC_P, m68k_pc_offset); + m68k_pc_offset = 0; + v1 = get_const(PC_P); + v2 = get_const(src); + register_branch(v1, v2, 13); make_flags_live(); }} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_7000_0_comp_nf(uae_u32 opcode) /* MOVE */ { -#ifdef 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 -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -63672,55 +49359,36 @@ unsigned long REGPARAM2 op_7000_0_comp_nf(uae_u32 opcode) /* MOVE */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + tmp = src; + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8000_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8010_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -63731,30 +49399,18 @@ unsigned long REGPARAM2 op_8010_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8018_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -63763,67 +49419,43 @@ unsigned long REGPARAM2 op_8018_0_comp_nf(uae_u32 opcode) /* OR */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8020_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8028_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -63834,30 +49466,18 @@ unsigned long REGPARAM2 op_8028_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8030_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -63867,25 +49487,17 @@ unsigned long REGPARAM2 op_8030_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8038_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -63895,25 +49507,17 @@ unsigned long REGPARAM2 op_8038_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8039_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -63923,25 +49527,17 @@ unsigned long REGPARAM2 op_8039_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_803a_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -63953,25 +49549,17 @@ unsigned long REGPARAM2 op_803a_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_803b_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -63984,25 +49572,17 @@ unsigned long REGPARAM2 op_803b_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_803c_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64010,60 +49590,36 @@ unsigned long REGPARAM2 op_803c_0_comp_nf(uae_u32 opcode) /* OR */ { 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8040_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8050_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64074,30 +49630,18 @@ unsigned long REGPARAM2 op_8050_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8058_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64106,67 +49650,43 @@ unsigned long REGPARAM2 op_8058_0_comp_nf(uae_u32 opcode) /* OR */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(srcreg+8,2); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8060_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8068_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64177,30 +49697,18 @@ unsigned long REGPARAM2 op_8068_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8070_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64210,25 +49718,17 @@ unsigned long REGPARAM2 op_8070_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8078_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64238,25 +49738,17 @@ unsigned long REGPARAM2 op_8078_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8079_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64266,25 +49758,17 @@ unsigned long REGPARAM2 op_8079_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_807a_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64296,25 +49780,17 @@ unsigned long REGPARAM2 op_807a_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_807b_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64327,25 +49803,17 @@ unsigned long REGPARAM2 op_807b_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_807c_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64353,55 +49821,36 @@ unsigned long REGPARAM2 op_807c_0_comp_nf(uae_u32 opcode) /* OR */ { 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8080_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8090_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64412,25 +49861,18 @@ unsigned long REGPARAM2 op_8090_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8098_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64439,57 +49881,43 @@ unsigned long REGPARAM2 op_8098_0_comp_nf(uae_u32 opcode) /* OR */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80a0_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80a8_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64500,25 +49928,18 @@ unsigned long REGPARAM2 op_80a8_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80b0_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64528,20 +49949,17 @@ unsigned long REGPARAM2 op_80b0_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80b8_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64551,20 +49969,17 @@ unsigned long REGPARAM2 op_80b8_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80b9_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64574,20 +49989,17 @@ unsigned long REGPARAM2 op_80b9_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80ba_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64599,20 +50011,17 @@ unsigned long REGPARAM2 op_80ba_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80bb_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64625,20 +50034,17 @@ unsigned long REGPARAM2 op_80bb_0_comp_nf(uae_u32 opcode) /* OR */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_80bc_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64646,25 +50052,18 @@ unsigned long REGPARAM2 op_80bc_0_comp_nf(uae_u32 opcode) /* OR */ { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; - dont_care_flags(); -{ arm_ORR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8110_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64675,29 +50074,17 @@ unsigned long REGPARAM2 op_8110_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8118_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64707,64 +50094,40 @@ unsigned long REGPARAM2 op_8118_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8120_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8128_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64775,29 +50138,17 @@ unsigned long REGPARAM2 op_8128_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8130_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64807,24 +50158,16 @@ unsigned long REGPARAM2 op_8130_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8138_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -64834,24 +50177,16 @@ unsigned long REGPARAM2 op_8138_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8139_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -64861,29 +50196,17 @@ unsigned long REGPARAM2 op_8139_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8150_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64894,29 +50217,17 @@ unsigned long REGPARAM2 op_8150_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8158_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64926,64 +50237,40 @@ unsigned long REGPARAM2 op_8158_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8160_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8168_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -64994,29 +50281,17 @@ unsigned long REGPARAM2 op_8168_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8170_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65026,24 +50301,16 @@ unsigned long REGPARAM2 op_8170_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8178_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -65053,24 +50320,16 @@ unsigned long REGPARAM2 op_8178_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8179_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -65080,29 +50339,17 @@ unsigned long REGPARAM2 op_8179_0_comp_nf(uae_u32 opcode) /* OR */ 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); - arm_ORR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_ORR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8190_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65113,24 +50360,17 @@ unsigned long REGPARAM2 op_8190_0_comp_nf(uae_u32 opcode) /* OR */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_8198_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65140,54 +50380,40 @@ unsigned long REGPARAM2 op_8198_0_comp_nf(uae_u32 opcode) /* OR */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - lea_l_brr(dstreg+8,dstreg+8,4); - dont_care_flags(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81a0_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(dstreg+8,4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81a8_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65198,24 +50424,17 @@ unsigned long REGPARAM2 op_81a8_0_comp_nf(uae_u32 opcode) /* OR */ 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(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81b0_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65225,19 +50444,16 @@ unsigned long REGPARAM2 op_81b0_0_comp_nf(uae_u32 opcode) /* OR */ 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(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81b8_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -65247,19 +50463,16 @@ unsigned long REGPARAM2 op_81b8_0_comp_nf(uae_u32 opcode) /* OR */ 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(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_81b9_0_comp_nf(uae_u32 opcode) /* OR */ { -#ifdef 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; @@ -65269,49 +50482,35 @@ unsigned long REGPARAM2 op_81b9_0_comp_nf(uae_u32 opcode) /* OR */ mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_ORR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_OR(tmp, dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9000_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9010_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65322,25 +50521,18 @@ unsigned long REGPARAM2 op_9010_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9018_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65349,57 +50541,43 @@ unsigned long REGPARAM2 op_9018_0_comp_nf(uae_u32 opcode) /* SUB */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9020_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9028_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65410,25 +50588,18 @@ unsigned long REGPARAM2 op_9028_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9030_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65438,20 +50609,17 @@ unsigned long REGPARAM2 op_9030_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9038_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65461,20 +50629,17 @@ unsigned long REGPARAM2 op_9038_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9039_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65484,20 +50649,17 @@ unsigned long REGPARAM2 op_9039_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_903a_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65509,20 +50671,17 @@ unsigned long REGPARAM2 op_903a_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_903b_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65535,20 +50694,17 @@ unsigned long REGPARAM2 op_903b_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_903c_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65556,50 +50712,36 @@ unsigned long REGPARAM2 op_903c_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9040_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9048_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65608,25 +50750,18 @@ unsigned long REGPARAM2 op_9048_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9050_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65637,25 +50772,18 @@ unsigned long REGPARAM2 op_9050_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9058_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65664,57 +50792,43 @@ unsigned long REGPARAM2 op_9058_0_comp_nf(uae_u32 opcode) /* SUB */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9060_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9068_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65725,25 +50839,18 @@ unsigned long REGPARAM2 op_9068_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9070_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65753,20 +50860,17 @@ unsigned long REGPARAM2 op_9070_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9078_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65776,20 +50880,17 @@ unsigned long REGPARAM2 op_9078_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9079_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65799,20 +50900,17 @@ unsigned long REGPARAM2 op_9079_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_907a_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65824,20 +50922,17 @@ unsigned long REGPARAM2 op_907a_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_907b_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65850,20 +50945,17 @@ unsigned long REGPARAM2 op_907b_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_907c_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65871,50 +50963,36 @@ unsigned long REGPARAM2 op_907c_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9080_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9088_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65923,25 +51001,18 @@ unsigned long REGPARAM2 op_9088_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9090_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65952,25 +51023,18 @@ unsigned long REGPARAM2 op_9090_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9098_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -65979,57 +51043,43 @@ unsigned long REGPARAM2 op_9098_0_comp_nf(uae_u32 opcode) /* SUB */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90a0_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90a8_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66040,25 +51090,18 @@ unsigned long REGPARAM2 op_90a8_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90b0_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66068,20 +51111,17 @@ unsigned long REGPARAM2 op_90b0_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90b8_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66091,20 +51131,17 @@ unsigned long REGPARAM2 op_90b8_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90b9_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66114,20 +51151,17 @@ unsigned long REGPARAM2 op_90b9_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90ba_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66139,20 +51173,17 @@ unsigned long REGPARAM2 op_90ba_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90bb_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66165,20 +51196,17 @@ unsigned long REGPARAM2 op_90bb_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90bc_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66186,25 +51214,18 @@ unsigned long REGPARAM2 op_90bc_0_comp_nf(uae_u32 opcode) /* SUB */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_90c0_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66213,9 +51234,7 @@ unsigned long REGPARAM2 op_90c0_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66223,16 +51242,8 @@ return 0; } unsigned long REGPARAM2 op_90c8_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66243,9 +51254,7 @@ unsigned long REGPARAM2 op_90c8_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66253,16 +51262,8 @@ return 0; } unsigned long REGPARAM2 op_90d0_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66275,9 +51276,7 @@ unsigned long REGPARAM2 op_90d0_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66285,16 +51284,8 @@ return 0; } unsigned long REGPARAM2 op_90d8_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66303,13 +51294,11 @@ unsigned long REGPARAM2 op_90d8_0_comp_nf(uae_u32 opcode) /* SUBA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66317,22 +51306,14 @@ return 0; } unsigned long REGPARAM2 op_90e0_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -66340,9 +51321,7 @@ unsigned long REGPARAM2 op_90e0_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66350,16 +51329,8 @@ return 0; } unsigned long REGPARAM2 op_90e8_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66372,9 +51343,7 @@ unsigned long REGPARAM2 op_90e8_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66382,16 +51351,8 @@ return 0; } unsigned long REGPARAM2 op_90f0_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66403,9 +51364,7 @@ unsigned long REGPARAM2 op_90f0_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66413,11 +51372,7 @@ return 0; } unsigned long REGPARAM2 op_90f8_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66429,9 +51384,7 @@ unsigned long REGPARAM2 op_90f8_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66439,11 +51392,7 @@ return 0; } unsigned long REGPARAM2 op_90f9_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66455,9 +51404,7 @@ unsigned long REGPARAM2 op_90f9_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66465,11 +51412,7 @@ return 0; } unsigned long REGPARAM2 op_90fa_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66483,9 +51426,7 @@ unsigned long REGPARAM2 op_90fa_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66493,11 +51434,7 @@ return 0; } unsigned long REGPARAM2 op_90fb_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66512,9 +51449,7 @@ unsigned long REGPARAM2 op_90fb_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66522,11 +51457,7 @@ return 0; } unsigned long REGPARAM2 op_90fc_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66536,9 +51467,7 @@ unsigned long REGPARAM2 op_90fc_0_comp_nf(uae_u32 opcode) /* SUBA */ { 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); +{ jnf_SUBA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -66546,77 +51475,53 @@ return 0; } unsigned long REGPARAM2 op_9100_0_comp_nf(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; +{ int tmp=scratchie++; 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(); + jnf_SUBX(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9108_0_comp_nf(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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]); + arm_SUB_l_ri8(dstreg+8,areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); +{ int tmp=scratchie++; dont_care_flags(); - restore_carry(); - sbb_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + jnf_SUBX(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9110_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66627,24 +51532,17 @@ unsigned long REGPARAM2 op_9110_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9118_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66654,54 +51552,40 @@ unsigned long REGPARAM2 op_9118_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9120_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9128_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66712,24 +51596,17 @@ unsigned long REGPARAM2 op_9128_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9130_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66739,19 +51616,16 @@ unsigned long REGPARAM2 op_9130_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9138_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -66761,19 +51635,16 @@ unsigned long REGPARAM2 op_9138_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9139_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -66783,85 +51654,62 @@ unsigned long REGPARAM2 op_9139_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_b(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9140_0_comp_nf(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; +{ int tmp=scratchie++; 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(); + jnf_SUBX(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9148_0_comp_nf(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(dstreg+8,2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); +{ int tmp=scratchie++; dont_care_flags(); - restore_carry(); - sbb_w(dst,src); - writeword(dsta,dst,scratchie); -}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + jnf_SUBX(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9150_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66872,24 +51720,17 @@ unsigned long REGPARAM2 op_9150_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9158_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66899,54 +51740,40 @@ unsigned long REGPARAM2 op_9158_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9160_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9168_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66957,24 +51784,17 @@ unsigned long REGPARAM2 op_9168_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9170_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -66984,19 +51804,16 @@ unsigned long REGPARAM2 op_9170_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9178_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -67006,19 +51823,16 @@ unsigned long REGPARAM2 op_9178_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9179_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -67028,85 +51842,62 @@ unsigned long REGPARAM2 op_9179_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_w(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9180_0_comp_nf(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; +{ int tmp=scratchie++; 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(); + jnf_SUBX(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9188_0_comp_nf(uae_u32 opcode) /* SUBX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(dstreg+8,4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); +{ int tmp=scratchie++; dont_care_flags(); - restore_carry(); - sbb_l(dst,src); - writelong(dsta,dst,scratchie); -}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + jnf_SUBX(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9190_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67117,24 +51908,17 @@ unsigned long REGPARAM2 op_9190_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_9198_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67144,54 +51928,40 @@ unsigned long REGPARAM2 op_9198_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91a0_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91a8_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67202,24 +51972,17 @@ unsigned long REGPARAM2 op_91a8_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91b0_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67229,19 +51992,16 @@ unsigned long REGPARAM2 op_91b0_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91b8_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -67251,19 +52011,16 @@ unsigned long REGPARAM2 op_91b8_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91b9_0_comp_nf(uae_u32 opcode) /* SUB */ { -#ifdef 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; @@ -67273,24 +52030,17 @@ unsigned long REGPARAM2 op_91b9_0_comp_nf(uae_u32 opcode) /* SUB */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_SUB_l(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_91c0_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67299,9 +52049,7 @@ unsigned long REGPARAM2 op_91c0_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67309,16 +52057,8 @@ return 0; } unsigned long REGPARAM2 op_91c8_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67329,9 +52069,7 @@ unsigned long REGPARAM2 op_91c8_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67339,16 +52077,8 @@ return 0; } unsigned long REGPARAM2 op_91d0_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67361,9 +52091,7 @@ unsigned long REGPARAM2 op_91d0_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67371,16 +52099,8 @@ return 0; } unsigned long REGPARAM2 op_91d8_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67389,13 +52109,11 @@ unsigned long REGPARAM2 op_91d8_0_comp_nf(uae_u32 opcode) /* SUBA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67403,22 +52121,14 @@ return 0; } unsigned long REGPARAM2 op_91e0_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -67426,9 +52136,7 @@ unsigned long REGPARAM2 op_91e0_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67436,16 +52144,8 @@ return 0; } unsigned long REGPARAM2 op_91e8_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67458,9 +52158,7 @@ unsigned long REGPARAM2 op_91e8_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67468,16 +52166,8 @@ return 0; } unsigned long REGPARAM2 op_91f0_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67489,9 +52179,7 @@ unsigned long REGPARAM2 op_91f0_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67499,11 +52187,7 @@ return 0; } unsigned long REGPARAM2 op_91f8_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67515,9 +52199,7 @@ unsigned long REGPARAM2 op_91f8_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67525,11 +52207,7 @@ return 0; } unsigned long REGPARAM2 op_91f9_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67541,9 +52219,7 @@ unsigned long REGPARAM2 op_91f9_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67551,11 +52227,7 @@ return 0; } unsigned long REGPARAM2 op_91fa_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67569,9 +52241,7 @@ unsigned long REGPARAM2 op_91fa_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67579,11 +52249,7 @@ return 0; } unsigned long REGPARAM2 op_91fb_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67598,9 +52264,7 @@ unsigned long REGPARAM2 op_91fb_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67608,11 +52272,7 @@ return 0; } unsigned long REGPARAM2 op_91fc_0_comp_nf(uae_u32 opcode) /* SUBA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67622,9 +52282,7 @@ unsigned long REGPARAM2 op_91fc_0_comp_nf(uae_u32 opcode) /* SUBA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - sub_l(dst,tmp); +{ jnf_SUBA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -67632,39 +52290,23 @@ return 0; } unsigned long REGPARAM2 op_b000_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b010_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67675,23 +52317,15 @@ unsigned long REGPARAM2 op_b010_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b018_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67700,53 +52334,37 @@ unsigned long REGPARAM2 op_b018_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b020_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b028_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67757,23 +52375,15 @@ unsigned long REGPARAM2 op_b028_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b030_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67783,18 +52393,14 @@ unsigned long REGPARAM2 op_b030_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b038_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67804,18 +52410,14 @@ unsigned long REGPARAM2 op_b038_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b039_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67825,18 +52427,14 @@ unsigned long REGPARAM2 op_b039_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b03a_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67848,18 +52446,14 @@ unsigned long REGPARAM2 op_b03a_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b03b_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67872,18 +52466,14 @@ unsigned long REGPARAM2 op_b03b_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b03c_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67891,46 +52481,30 @@ unsigned long REGPARAM2 op_b03c_0_comp_nf(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b040_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b048_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67939,23 +52513,15 @@ unsigned long REGPARAM2 op_b048_0_comp_nf(uae_u32 opcode) /* CMP */ if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b050_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67966,23 +52532,15 @@ unsigned long REGPARAM2 op_b050_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b058_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -67991,53 +52549,37 @@ unsigned long REGPARAM2 op_b058_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(srcreg+8,2); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b060_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b068_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68048,23 +52590,15 @@ unsigned long REGPARAM2 op_b068_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b070_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68074,18 +52608,14 @@ unsigned long REGPARAM2 op_b070_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b078_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68095,18 +52625,14 @@ unsigned long REGPARAM2 op_b078_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b079_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68116,18 +52642,14 @@ unsigned long REGPARAM2 op_b079_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b07a_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68139,18 +52661,14 @@ unsigned long REGPARAM2 op_b07a_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b07b_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68163,18 +52681,14 @@ unsigned long REGPARAM2 op_b07b_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b07c_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68182,46 +52696,30 @@ unsigned long REGPARAM2 op_b07c_0_comp_nf(uae_u32 opcode) /* CMP */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b080_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b088_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68230,23 +52728,18 @@ unsigned long REGPARAM2 op_b088_0_comp_nf(uae_u32 opcode) /* CMP */ if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } +#endif + +#ifdef PART_7 unsigned long REGPARAM2 op_b090_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68257,23 +52750,15 @@ unsigned long REGPARAM2 op_b090_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b098_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68282,53 +52767,37 @@ unsigned long REGPARAM2 op_b098_0_comp_nf(uae_u32 opcode) /* CMP */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0a0_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0a8_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68339,26 +52808,15 @@ unsigned long REGPARAM2 op_b0a8_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -#endif - -#ifdef PART_7 unsigned long REGPARAM2 op_b0b0_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68368,18 +52826,14 @@ unsigned long REGPARAM2 op_b0b0_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0b8_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68389,18 +52843,14 @@ unsigned long REGPARAM2 op_b0b8_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0b9_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68410,18 +52860,14 @@ unsigned long REGPARAM2 op_b0b9_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0ba_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68433,18 +52879,14 @@ unsigned long REGPARAM2 op_b0ba_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0bb_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68457,18 +52899,14 @@ unsigned long REGPARAM2 op_b0bb_0_comp_nf(uae_u32 opcode) /* CMP */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0bc_0_comp_nf(uae_u32 opcode) /* CMP */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68476,23 +52914,15 @@ unsigned long REGPARAM2 op_b0bc_0_comp_nf(uae_u32 opcode) /* CMP */ { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; -{ dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0c0_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68501,25 +52931,15 @@ unsigned long REGPARAM2 op_b0c0_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0c8_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68530,25 +52950,15 @@ unsigned long REGPARAM2 op_b0c8_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0d0_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68561,25 +52971,15 @@ unsigned long REGPARAM2 op_b0d0_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0d8_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68588,35 +52988,25 @@ unsigned long REGPARAM2 op_b0d8_0_comp_nf(uae_u32 opcode) /* CMPA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0e0_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -68624,25 +53014,15 @@ unsigned long REGPARAM2 op_b0e0_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0e8_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68655,25 +53035,15 @@ unsigned long REGPARAM2 op_b0e8_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0f0_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68685,20 +53055,14 @@ unsigned long REGPARAM2 op_b0f0_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0f8_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68710,20 +53074,14 @@ unsigned long REGPARAM2 op_b0f8_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0f9_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68735,20 +53093,14 @@ unsigned long REGPARAM2 op_b0f9_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0fa_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68762,20 +53114,14 @@ unsigned long REGPARAM2 op_b0fa_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0fb_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68790,20 +53136,14 @@ unsigned long REGPARAM2 op_b0fb_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b0fc_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68813,55 +53153,33 @@ unsigned long REGPARAM2 op_b0fc_0_comp_nf(uae_u32 opcode) /* CMPA */ { 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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b100_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b108_0_comp_nf(uae_u32 opcode) /* CMPM */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68870,29 +53188,21 @@ unsigned long REGPARAM2 op_b108_0_comp_nf(uae_u32 opcode) /* CMPM */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b110_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68903,29 +53213,17 @@ unsigned long REGPARAM2 op_b110_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b118_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -68935,64 +53233,40 @@ unsigned long REGPARAM2 op_b118_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b120_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b128_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69003,29 +53277,17 @@ unsigned long REGPARAM2 op_b128_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b130_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69035,24 +53297,16 @@ unsigned long REGPARAM2 op_b130_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b138_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -69062,24 +53316,16 @@ unsigned long REGPARAM2 op_b138_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b139_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -69089,59 +53335,35 @@ unsigned long REGPARAM2 op_b139_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_b(dst,src); -} writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b140_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b148_0_comp_nf(uae_u32 opcode) /* CMPM */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69150,29 +53372,21 @@ unsigned long REGPARAM2 op_b148_0_comp_nf(uae_u32 opcode) /* CMPM */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,2); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b150_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69183,29 +53397,17 @@ unsigned long REGPARAM2 op_b150_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b158_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69215,64 +53417,40 @@ unsigned long REGPARAM2 op_b158_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b160_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b168_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69283,29 +53461,17 @@ unsigned long REGPARAM2 op_b168_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b170_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69315,24 +53481,16 @@ unsigned long REGPARAM2 op_b170_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b178_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -69342,24 +53500,16 @@ unsigned long REGPARAM2 op_b178_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b179_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -69369,54 +53519,35 @@ unsigned long REGPARAM2 op_b179_0_comp_nf(uae_u32 opcode) /* EOR */ 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); - arm_EOR_l(dst,scratchie); - forget_about(scratchie); - } else - arm_EOR_w(dst,src); -} writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b180_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_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(); -{ arm_EOR_l(dst,src); -} if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b188_0_comp_nf(uae_u32 opcode) /* CMPM */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69425,29 +53556,21 @@ unsigned long REGPARAM2 op_b188_0_comp_nf(uae_u32 opcode) /* CMPM */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + arm_ADD_l_ri8(dstreg+8,4); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b190_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69458,24 +53581,17 @@ unsigned long REGPARAM2 op_b190_0_comp_nf(uae_u32 opcode) /* EOR */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b198_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69485,54 +53601,40 @@ unsigned long REGPARAM2 op_b198_0_comp_nf(uae_u32 opcode) /* EOR */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - lea_l_brr(dstreg+8,dstreg+8,4); - dont_care_flags(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1a0_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(dstreg+8,4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1a8_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69543,24 +53645,17 @@ unsigned long REGPARAM2 op_b1a8_0_comp_nf(uae_u32 opcode) /* EOR */ 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(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1b0_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69570,19 +53665,16 @@ unsigned long REGPARAM2 op_b1b0_0_comp_nf(uae_u32 opcode) /* EOR */ 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(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1b8_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -69592,19 +53684,16 @@ unsigned long REGPARAM2 op_b1b8_0_comp_nf(uae_u32 opcode) /* EOR */ 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(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1b9_0_comp_nf(uae_u32 opcode) /* EOR */ { -#ifdef 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; @@ -69614,24 +53703,17 @@ unsigned long REGPARAM2 op_b1b9_0_comp_nf(uae_u32 opcode) /* EOR */ mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); -{ arm_EOR_l(dst,src); -} writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_EOR(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1c0_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69640,25 +53722,15 @@ unsigned long REGPARAM2 op_b1c0_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1c8_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69669,25 +53741,15 @@ unsigned long REGPARAM2 op_b1c8_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1d0_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69700,25 +53762,15 @@ unsigned long REGPARAM2 op_b1d0_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1d8_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69727,35 +53779,25 @@ unsigned long REGPARAM2 op_b1d8_0_comp_nf(uae_u32 opcode) /* CMPA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1e0_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -69763,25 +53805,15 @@ unsigned long REGPARAM2 op_b1e0_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1e8_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69794,25 +53826,15 @@ unsigned long REGPARAM2 op_b1e8_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1f0_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69824,20 +53846,14 @@ unsigned long REGPARAM2 op_b1f0_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1f8_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69849,20 +53865,14 @@ unsigned long REGPARAM2 op_b1f8_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1f9_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69874,20 +53884,14 @@ unsigned long REGPARAM2 op_b1f9_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1fa_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69901,20 +53905,14 @@ unsigned long REGPARAM2 op_b1fa_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1fb_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69929,20 +53927,14 @@ unsigned long REGPARAM2 op_b1fb_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_b1fc_0_comp_nf(uae_u32 opcode) /* CMPA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -69952,56 +53944,33 @@ unsigned long REGPARAM2 op_b1fc_0_comp_nf(uae_u32 opcode) /* CMPA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmps=scratchie++; -tmps=src; - dont_care_flags(); +{ dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c000_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; - dont_care_flags(); -if (kill_rodent(dst)) { - zero_extend_8_rr(scratchie,src); - or_l_ri(scratchie,0xffffff00); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c010_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70012,31 +53981,18 @@ unsigned long REGPARAM2 op_c010_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c018_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70045,69 +54001,43 @@ unsigned long REGPARAM2 op_c018_0_comp_nf(uae_u32 opcode) /* AND */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c020_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c028_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70118,31 +54048,18 @@ unsigned long REGPARAM2 op_c028_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c030_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70152,26 +54069,17 @@ unsigned long REGPARAM2 op_c030_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c038_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70181,26 +54089,17 @@ unsigned long REGPARAM2 op_c038_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c039_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70210,26 +54109,17 @@ unsigned long REGPARAM2 op_c039_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c03a_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70241,26 +54131,17 @@ unsigned long REGPARAM2 op_c03a_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c03b_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70273,26 +54154,17 @@ unsigned long REGPARAM2 op_c03b_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c03c_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70300,62 +54172,36 @@ unsigned long REGPARAM2 op_c03c_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c040_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; - dont_care_flags(); -if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c050_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70366,31 +54212,18 @@ unsigned long REGPARAM2 op_c050_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c058_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70399,69 +54232,43 @@ unsigned long REGPARAM2 op_c058_0_comp_nf(uae_u32 opcode) /* AND */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(srcreg+8,2); { int dst=dstreg; - dont_care_flags(); -if (kill_rodent(dst)) { - zero_extend_16_rr(scratchie,src); - or_l_ri(scratchie,0xffff0000); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c060_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c068_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70472,31 +54279,18 @@ unsigned long REGPARAM2 op_c068_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c070_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70506,26 +54300,17 @@ unsigned long REGPARAM2 op_c070_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c078_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70535,26 +54320,17 @@ unsigned long REGPARAM2 op_c078_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c079_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70564,26 +54340,17 @@ unsigned long REGPARAM2 op_c079_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c07a_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70595,26 +54362,17 @@ unsigned long REGPARAM2 op_c07a_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c07b_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70627,26 +54385,17 @@ unsigned long REGPARAM2 op_c07b_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c07c_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70654,56 +54403,36 @@ unsigned long REGPARAM2 op_c07c_0_comp_nf(uae_u32 opcode) /* AND */ { 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c080_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c090_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70714,25 +54443,18 @@ unsigned long REGPARAM2 op_c090_0_comp_nf(uae_u32 opcode) /* AND */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c098_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70741,57 +54463,43 @@ unsigned long REGPARAM2 op_c098_0_comp_nf(uae_u32 opcode) /* AND */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0a0_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0a8_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70802,25 +54510,18 @@ unsigned long REGPARAM2 op_c0a8_0_comp_nf(uae_u32 opcode) /* AND */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0b0_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70830,20 +54531,17 @@ unsigned long REGPARAM2 op_c0b0_0_comp_nf(uae_u32 opcode) /* AND */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0b8_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70853,20 +54551,17 @@ unsigned long REGPARAM2 op_c0b8_0_comp_nf(uae_u32 opcode) /* AND */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0b9_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70876,20 +54571,17 @@ unsigned long REGPARAM2 op_c0b9_0_comp_nf(uae_u32 opcode) /* AND */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0ba_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70901,20 +54593,17 @@ unsigned long REGPARAM2 op_c0ba_0_comp_nf(uae_u32 opcode) /* AND */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0bb_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70927,20 +54616,17 @@ unsigned long REGPARAM2 op_c0bb_0_comp_nf(uae_u32 opcode) /* AND */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0bc_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -70948,257 +54634,182 @@ unsigned long REGPARAM2 op_c0bc_0_comp_nf(uae_u32 opcode) /* AND */ { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; - dont_care_flags(); - arm_AND_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0c0_0_comp_nf(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULU(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0d0_0_comp_nf(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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; -} -unsigned long REGPARAM2 op_c0d8_0_comp_nf(uae_u32 opcode) /* MULU */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else - uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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; - 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; -} -unsigned long REGPARAM2 op_c0e0_0_comp_nf(uae_u32 opcode) /* MULU */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else - uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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; - 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); +{ jnf_MULU(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_c0e8_0_comp_nf(uae_u32 opcode) /* MULU */ +unsigned long REGPARAM2 op_c0d8_0_comp_nf(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); +{ int srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int dst=dstreg; +{ jnf_MULU(dst,src); + if(dstreg!=dst) + mov_l_rr(dstreg,dst); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_c0e0_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dstreg = (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; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int dst=dstreg; +{ jnf_MULU(dst,src); + if(dstreg!=dst) + mov_l_rr(dstreg,dst); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_c0e8_0_comp_nf(uae_u32 opcode) /* MULU */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dstreg = (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); +{ jnf_MULU(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0f0_0_comp_nf(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULU(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0f8_0_comp_nf(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULU(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0f9_0_comp_nf(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULU(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0fa_0_comp_nf(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); @@ -71206,26 +54817,20 @@ unsigned long REGPARAM2 op_c0fa_0_comp_nf(uae_u32 opcode) /* MULU */ { 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); +{ jnf_MULU(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0fb_0_comp_nf(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; @@ -71234,49 +54839,33 @@ unsigned long REGPARAM2 op_c0fb_0_comp_nf(uae_u32 opcode) /* MULU */ { 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); +{ jnf_MULU(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c0fc_0_comp_nf(uae_u32 opcode) /* MULU */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULU(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c110_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71287,30 +54876,17 @@ unsigned long REGPARAM2 op_c110_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c118_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71320,66 +54896,40 @@ unsigned long REGPARAM2 op_c118_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c120_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c128_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71390,30 +54940,17 @@ unsigned long REGPARAM2 op_c128_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c130_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71423,25 +54960,16 @@ unsigned long REGPARAM2 op_c130_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c138_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -71451,25 +54979,16 @@ unsigned long REGPARAM2 op_c138_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c139_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -71479,30 +54998,17 @@ unsigned long REGPARAM2 op_c139_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_b(dst,src); - writebyte(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c140_0_comp_nf(uae_u32 opcode) /* EXG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71520,16 +55026,8 @@ return 0; } unsigned long REGPARAM2 op_c148_0_comp_nf(uae_u32 opcode) /* EXG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71551,16 +55049,8 @@ return 0; } unsigned long REGPARAM2 op_c150_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71571,30 +55061,17 @@ unsigned long REGPARAM2 op_c150_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c158_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71604,66 +55081,40 @@ unsigned long REGPARAM2 op_c158_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c160_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c168_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71674,30 +55125,17 @@ unsigned long REGPARAM2 op_c168_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c170_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71707,25 +55145,16 @@ unsigned long REGPARAM2 op_c170_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c178_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -71735,25 +55164,16 @@ unsigned long REGPARAM2 op_c178_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c179_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -71763,30 +55183,17 @@ unsigned long REGPARAM2 op_c179_0_comp_nf(uae_u32 opcode) /* AND */ 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); - arm_AND_l(dst,scratchie); - forget_about(scratchie); - } else - arm_AND_w(dst,src); - writeword(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c188_0_comp_nf(uae_u32 opcode) /* EXG */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71806,16 +55213,8 @@ return 0; } unsigned long REGPARAM2 op_c190_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71826,24 +55225,17 @@ unsigned long REGPARAM2 op_c190_0_comp_nf(uae_u32 opcode) /* AND */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c198_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71853,54 +55245,40 @@ unsigned long REGPARAM2 op_c198_0_comp_nf(uae_u32 opcode) /* AND */ mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); - lea_l_brr(dstreg+8,dstreg+8,4); - dont_care_flags(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1a0_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(dstreg+8,4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1a8_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71911,24 +55289,17 @@ unsigned long REGPARAM2 op_c1a8_0_comp_nf(uae_u32 opcode) /* AND */ 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(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1b0_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -71938,19 +55309,16 @@ unsigned long REGPARAM2 op_c1b0_0_comp_nf(uae_u32 opcode) /* AND */ 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(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1b8_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -71960,19 +55328,16 @@ unsigned long REGPARAM2 op_c1b8_0_comp_nf(uae_u32 opcode) /* AND */ 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(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1b9_0_comp_nf(uae_u32 opcode) /* AND */ { -#ifdef 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; @@ -71982,256 +55347,181 @@ unsigned long REGPARAM2 op_c1b9_0_comp_nf(uae_u32 opcode) /* AND */ mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); - dont_care_flags(); - arm_AND_l(dst,src); - writelong(dsta,dst,scratchie); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + dont_care_flags(); + int tmp=scratchie++; +{ jnf_AND(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1c0_0_comp_nf(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULS(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1d0_0_comp_nf(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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; -} -unsigned long REGPARAM2 op_c1d8_0_comp_nf(uae_u32 opcode) /* MULS */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else - uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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; - 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; -} -unsigned long REGPARAM2 op_c1e0_0_comp_nf(uae_u32 opcode) /* MULS */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else - uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else - uae_u32 dstreg = (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; - 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); +{ jnf_MULS(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } -unsigned long REGPARAM2 op_c1e8_0_comp_nf(uae_u32 opcode) /* MULS */ +unsigned long REGPARAM2 op_c1d8_0_comp_nf(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); +{ int srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int dst=dstreg; +{ jnf_MULS(dst,src); + if(dstreg!=dst) + mov_l_rr(dstreg,dst); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_c1e0_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dstreg = (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; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int dst=dstreg; +{ jnf_MULS(dst,src); + if(dstreg!=dst) + mov_l_rr(dstreg,dst); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_c1e8_0_comp_nf(uae_u32 opcode) /* MULS */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dstreg = (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); +{ jnf_MULS(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1f0_0_comp_nf(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULS(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1f8_0_comp_nf(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULS(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1f9_0_comp_nf(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULS(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1fa_0_comp_nf(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); @@ -72239,26 +55529,20 @@ unsigned long REGPARAM2 op_c1fa_0_comp_nf(uae_u32 opcode) /* MULS */ { 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); +{ jnf_MULS(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1fb_0_comp_nf(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + dont_care_flags(); { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; @@ -72267,74 +55551,51 @@ unsigned long REGPARAM2 op_c1fb_0_comp_nf(uae_u32 opcode) /* MULS */ { 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); +{ jnf_MULS(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_c1fc_0_comp_nf(uae_u32 opcode) /* MULS */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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; - dont_care_flags(); + 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); +{ jnf_MULS(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); -}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d000_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d010_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72345,25 +55606,18 @@ unsigned long REGPARAM2 op_d010_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d018_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72372,57 +55626,43 @@ unsigned long REGPARAM2 op_d018_0_comp_nf(uae_u32 opcode) /* ADD */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d020_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); + arm_SUB_l_ri8(srcreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d028_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72433,25 +55673,18 @@ unsigned long REGPARAM2 op_d028_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d030_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72461,20 +55694,17 @@ unsigned long REGPARAM2 op_d030_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d038_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72484,20 +55714,17 @@ unsigned long REGPARAM2 op_d038_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d039_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72507,20 +55734,17 @@ unsigned long REGPARAM2 op_d039_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d03a_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72532,20 +55756,17 @@ unsigned long REGPARAM2 op_d03a_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d03b_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72558,20 +55779,17 @@ unsigned long REGPARAM2 op_d03b_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d03c_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72579,50 +55797,36 @@ unsigned long REGPARAM2 op_d03c_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d040_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d048_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72631,25 +55835,18 @@ unsigned long REGPARAM2 op_d048_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d050_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72660,25 +55857,18 @@ unsigned long REGPARAM2 op_d050_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d058_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72687,57 +55877,43 @@ unsigned long REGPARAM2 op_d058_0_comp_nf(uae_u32 opcode) /* ADD */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d060_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-2); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d068_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72748,25 +55924,18 @@ unsigned long REGPARAM2 op_d068_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d070_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72776,20 +55945,17 @@ unsigned long REGPARAM2 op_d070_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d078_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72799,20 +55965,17 @@ unsigned long REGPARAM2 op_d078_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d079_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72822,20 +55985,17 @@ unsigned long REGPARAM2 op_d079_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d07a_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72847,20 +56007,17 @@ unsigned long REGPARAM2 op_d07a_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d07b_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72873,20 +56030,17 @@ unsigned long REGPARAM2 op_d07b_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d07c_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72894,50 +56048,36 @@ unsigned long REGPARAM2 op_d07c_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d080_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d088_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72946,25 +56086,18 @@ unsigned long REGPARAM2 op_d088_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d090_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -72975,25 +56108,18 @@ unsigned long REGPARAM2 op_d090_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d098_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73002,57 +56128,43 @@ unsigned long REGPARAM2 op_d098_0_comp_nf(uae_u32 opcode) /* ADD */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0a0_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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 srca=dodgy?scratchie++:srcreg+8; - lea_l_brr(srcreg+8,srcreg+8,-4); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0a8_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73063,25 +56175,18 @@ unsigned long REGPARAM2 op_d0a8_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0b0_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73091,20 +56196,17 @@ unsigned long REGPARAM2 op_d0b0_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0b8_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73114,20 +56216,17 @@ unsigned long REGPARAM2 op_d0b8_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0b9_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73137,20 +56236,17 @@ unsigned long REGPARAM2 op_d0b9_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0ba_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73162,20 +56258,17 @@ unsigned long REGPARAM2 op_d0ba_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0bb_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73188,20 +56281,17 @@ unsigned long REGPARAM2 op_d0bb_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0bc_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73209,25 +56299,18 @@ unsigned long REGPARAM2 op_d0bc_0_comp_nf(uae_u32 opcode) /* ADD */ { 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d0c0_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73236,9 +56319,7 @@ unsigned long REGPARAM2 op_d0c0_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73246,16 +56327,8 @@ return 0; } unsigned long REGPARAM2 op_d0c8_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73266,9 +56339,7 @@ unsigned long REGPARAM2 op_d0c8_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73276,16 +56347,8 @@ return 0; } unsigned long REGPARAM2 op_d0d0_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73298,9 +56361,7 @@ unsigned long REGPARAM2 op_d0d0_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73308,16 +56369,8 @@ return 0; } unsigned long REGPARAM2 op_d0d8_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73326,13 +56379,11 @@ unsigned long REGPARAM2 op_d0d8_0_comp_nf(uae_u32 opcode) /* ADDA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,2); + arm_ADD_l_ri8(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); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73340,22 +56391,14 @@ return 0; } unsigned long REGPARAM2 op_d0e0_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -73363,9 +56406,7 @@ unsigned long REGPARAM2 op_d0e0_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73373,16 +56414,8 @@ return 0; } unsigned long REGPARAM2 op_d0e8_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73395,9 +56428,7 @@ unsigned long REGPARAM2 op_d0e8_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73405,16 +56436,8 @@ return 0; } unsigned long REGPARAM2 op_d0f0_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73426,9 +56449,7 @@ unsigned long REGPARAM2 op_d0f0_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73436,11 +56457,7 @@ return 0; } unsigned long REGPARAM2 op_d0f8_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73452,9 +56469,7 @@ unsigned long REGPARAM2 op_d0f8_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73462,11 +56477,7 @@ return 0; } unsigned long REGPARAM2 op_d0f9_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73478,9 +56489,7 @@ unsigned long REGPARAM2 op_d0f9_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73488,11 +56497,7 @@ return 0; } unsigned long REGPARAM2 op_d0fa_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73506,9 +56511,7 @@ unsigned long REGPARAM2 op_d0fa_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73516,11 +56519,7 @@ return 0; } unsigned long REGPARAM2 op_d0fb_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73535,9 +56534,7 @@ unsigned long REGPARAM2 op_d0fb_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73545,11 +56542,7 @@ return 0; } unsigned long REGPARAM2 op_d0fc_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73559,9 +56552,7 @@ unsigned long REGPARAM2 op_d0fc_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - sign_extend_16_rr(tmp,src); - arm_ADD_l(dst,tmp); +{ jnf_ADDA_w(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -73569,77 +56560,53 @@ return 0; } unsigned long REGPARAM2 op_d100_0_comp_nf(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; -{ dont_care_flags(); - restore_carry(); - adc_b(dst,src); - if(dstreg!=dst) - mov_b_rr(dstreg,dst); +{ dont_care_flags(); + int tmp=scratchie++; + jnf_ADDX(tmp,dst,src); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d108_0_comp_nf(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(srcreg+8,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]); + arm_SUB_l_ri8(dstreg+8,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); +{ dont_care_flags(); + int tmp=scratchie++; + jnf_ADDX(tmp,dst,src); + writebyte(dsta,tmp,scratchie); }}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d110_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73650,24 +56617,17 @@ unsigned long REGPARAM2 op_d110_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d118_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73677,54 +56637,40 @@ unsigned long REGPARAM2 op_d118_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,areg_byteinc[dstreg]); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d120_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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]); + arm_SUB_l_ri8(dstreg+8,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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d128_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73735,24 +56681,17 @@ unsigned long REGPARAM2 op_d128_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d130_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73762,19 +56701,16 @@ unsigned long REGPARAM2 op_d130_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d138_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -73784,19 +56720,16 @@ unsigned long REGPARAM2 op_d138_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d139_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -73806,85 +56739,62 @@ unsigned long REGPARAM2 op_d139_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writebyte(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d140_0_comp_nf(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; -{ dont_care_flags(); - restore_carry(); - adc_w(dst,src); - if(dstreg!=dst) - mov_w_rr(dstreg,dst); +{ dont_care_flags(); + int tmp=scratchie++; + jnf_ADDX(tmp,dst,src); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d148_0_comp_nf(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(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); +{ dont_care_flags(); + int tmp=scratchie++; + jnf_ADDX(tmp,dst,src); + writeword(dsta,tmp,scratchie); }}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d150_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73895,24 +56805,17 @@ unsigned long REGPARAM2 op_d150_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d158_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73922,54 +56825,40 @@ unsigned long REGPARAM2 op_d158_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,2); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d160_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d168_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -73980,24 +56869,17 @@ unsigned long REGPARAM2 op_d168_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d170_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74007,19 +56889,16 @@ unsigned long REGPARAM2 op_d170_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d178_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -74029,19 +56908,16 @@ unsigned long REGPARAM2 op_d178_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d179_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -74051,85 +56927,62 @@ unsigned long REGPARAM2 op_d179_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writeword(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d180_0_comp_nf(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (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=dstreg; -{ dont_care_flags(); - restore_carry(); - adc_l(dst,src); - if(dstreg!=dst) - mov_l_rr(dstreg,dst); +{ dont_care_flags(); + int tmp=scratchie++; + jnf_ADDX(tmp,dst,src); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d188_0_comp_nf(uae_u32 opcode) /* ADDX */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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); + arm_SUB_l_ri8(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); +{ dont_care_flags(); + int tmp=scratchie++; + jnf_ADDX(tmp,dst,src); + writelong(dsta,tmp,scratchie); }}}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d190_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74140,24 +56993,17 @@ unsigned long REGPARAM2 op_d190_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d198_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74167,54 +57013,40 @@ unsigned long REGPARAM2 op_d198_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + arm_ADD_l_ri8(dstreg+8,4); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1a0_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1a8_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74225,24 +57057,17 @@ unsigned long REGPARAM2 op_d1a8_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1b0_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74252,19 +57077,16 @@ unsigned long REGPARAM2 op_d1b0_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1b8_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -74274,19 +57096,16 @@ unsigned long REGPARAM2 op_d1b8_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1b9_0_comp_nf(uae_u32 opcode) /* ADD */ { -#ifdef 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; @@ -74296,24 +57115,17 @@ unsigned long REGPARAM2 op_d1b9_0_comp_nf(uae_u32 opcode) /* ADD */ 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(); + dont_care_flags(); +{ int tmp=scratchie++; + jnf_ADD(tmp,dst,src); + writelong(dsta,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); return 0; } unsigned long REGPARAM2 op_d1c0_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74322,9 +57134,7 @@ unsigned long REGPARAM2 op_d1c0_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74332,16 +57142,8 @@ return 0; } unsigned long REGPARAM2 op_d1c8_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74352,9 +57154,7 @@ unsigned long REGPARAM2 op_d1c8_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74362,16 +57162,8 @@ return 0; } unsigned long REGPARAM2 op_d1d0_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74384,9 +57176,7 @@ unsigned long REGPARAM2 op_d1d0_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74394,16 +57184,8 @@ return 0; } unsigned long REGPARAM2 op_d1d8_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74412,13 +57194,11 @@ unsigned long REGPARAM2 op_d1d8_0_comp_nf(uae_u32 opcode) /* ADDA */ mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); - lea_l_brr(srcreg+8,srcreg+8,4); + arm_ADD_l_ri8(srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74426,22 +57206,14 @@ return 0; } unsigned long REGPARAM2 op_d1e0_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 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); + arm_SUB_l_ri8(srcreg+8,4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; @@ -74449,9 +57221,7 @@ unsigned long REGPARAM2 op_d1e0_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74459,16 +57229,8 @@ return 0; } unsigned long REGPARAM2 op_d1e8_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74481,9 +57243,7 @@ unsigned long REGPARAM2 op_d1e8_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74491,16 +57251,8 @@ return 0; } unsigned long REGPARAM2 op_d1f0_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74512,9 +57264,7 @@ unsigned long REGPARAM2 op_d1f0_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74522,11 +57272,7 @@ return 0; } unsigned long REGPARAM2 op_d1f8_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74538,9 +57284,7 @@ unsigned long REGPARAM2 op_d1f8_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74548,11 +57292,7 @@ return 0; } unsigned long REGPARAM2 op_d1f9_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74564,9 +57304,7 @@ unsigned long REGPARAM2 op_d1f9_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74574,11 +57312,7 @@ return 0; } unsigned long REGPARAM2 op_d1fa_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74592,9 +57326,7 @@ unsigned long REGPARAM2 op_d1fa_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74602,11 +57334,7 @@ return 0; } unsigned long REGPARAM2 op_d1fb_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74621,9 +57349,7 @@ unsigned long REGPARAM2 op_d1fb_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74631,11 +57357,7 @@ return 0; } unsigned long REGPARAM2 op_d1fc_0_comp_nf(uae_u32 opcode) /* ADDA */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 1) & 7; -#else uae_u32 dstreg = (opcode >> 9) & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74645,9 +57367,7 @@ unsigned long REGPARAM2 op_d1fc_0_comp_nf(uae_u32 opcode) /* ADDA */ { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); -{ int tmp=scratchie++; - tmp=src; - arm_ADD_l(dst,tmp); +{ jnf_ADDA_l(dst, src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); @@ -74655,105 +57375,68 @@ return 0; } unsigned long REGPARAM2 op_e000_0_comp_nf(uae_u32 opcode) /* ASR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shra_b_ri(data,srcreg); - bp=srcreg-1; - if(dstreg!=data) - mov_b_rr(dstreg,data); +{ int tmp=scratchie++; + jnf_ASR_b_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e008_0_comp_nf(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shrl_b_ri(data,srcreg); - bp=srcreg-1; - if(dstreg!=data) - mov_b_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSR_b_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e018_0_comp_nf(uae_u32 opcode) /* ROR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + 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); +{ int tmp=scratchie++; + jnf_ROR_b(tmp,data,cnt); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e020_0_comp_nf(uae_u32 opcode) /* ASR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74762,197 +57445,24 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int width; - int highshift=scratchie++; - shra_b_rr(data,cnt); - highmask=0x38; - width=8; -test_l_ri(cnt,highmask); -mov_l_ri(highshift,0); -mov_l_ri(scratchie,width/2); -cmov_l_rr(highshift,scratchie,1); - shra_b_rr(data,highshift); - shra_b_rr(data,highshift); - if(dstreg!=data) - mov_b_rr(dstreg,data); +{ int tmp=scratchie++; + jnf_ASR_b_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } -unsigned long REGPARAM2 op_e028_0_comp_nf(uae_u32 opcode) /* LSR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else - uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = 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 ((uae_u32)srcreg==(uae_u32)dstreg) { - FAIL(1); - return 0; -} -{ dont_care_flags(); -{ int cnt=srcreg; -{ int data=dstreg; -{ int highmask; - shrl_b_rr(data,cnt); - highmask=0x38; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_b_rr(data,scratchie); - 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; -} -unsigned long REGPARAM2 op_e038_0_comp_nf(uae_u32 opcode) /* ROR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else - uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = 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 ((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; -} -unsigned long REGPARAM2 op_e040_0_comp_nf(uae_u32 opcode) /* ASR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = opcode & 7; -#endif - 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; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shra_w_ri(data,srcreg); - bp=srcreg-1; - 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; -} -unsigned long REGPARAM2 op_e048_0_comp_nf(uae_u32 opcode) /* LSR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = opcode & 7; -#endif - 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; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shrl_w_ri(data,srcreg); - bp=srcreg-1; - 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; -} -unsigned long REGPARAM2 op_e058_0_comp_nf(uae_u32 opcode) /* ROR */ -{ -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = opcode & 7; -#endif - 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; -} #endif #ifdef PART_8 -unsigned long REGPARAM2 op_e060_0_comp_nf(uae_u32 opcode) /* ASR */ +unsigned long REGPARAM2 op_e028_0_comp_nf(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -74961,39 +57471,127 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int width; - int highshift=scratchie++; - shra_w_rr(data,cnt); - highmask=0x30; - width=16; -test_l_ri(cnt,highmask); -mov_l_ri(highshift,0); -mov_l_ri(scratchie,width/2); -cmov_l_rr(highshift,scratchie,1); - shra_w_rr(data,highshift); - shra_w_rr(data,highshift); - if(dstreg!=data) - mov_w_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSR_b_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e038_0_comp_nf(uae_u32 opcode) /* ROR */ +{ + uae_s32 srcreg = ((opcode >> 9) & 7); + uae_u32 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 tmp=scratchie++; + jnf_ROR_b(tmp,data,cnt); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e040_0_comp_nf(uae_u32 opcode) /* ASR */ +{ + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + uae_u32 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; +{ int tmp=scratchie++; + jnf_ASR_w_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e048_0_comp_nf(uae_u32 opcode) /* LSR */ +{ + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + uae_u32 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; + int tmp=scratchie++; +{ jnf_LSR_w_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e058_0_comp_nf(uae_u32 opcode) /* ROR */ +{ + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + uae_u32 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; +{ int tmp=scratchie++; + jnf_ROR_w(tmp,data,cnt); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; +return 0; +} +unsigned long REGPARAM2 op_e060_0_comp_nf(uae_u32 opcode) /* ASR */ +{ + uae_s32 srcreg = ((opcode >> 9) & 7); + uae_u32 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 tmp=scratchie++; + jnf_ASR_w_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e068_0_comp_nf(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75002,34 +57600,21 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - shrl_w_rr(data,cnt); - highmask=0x30; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_w_rr(data,scratchie); - if(dstreg!=data) - mov_w_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSR_w_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e078_0_comp_nf(uae_u32 opcode) /* ROR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75038,117 +57623,81 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ ror_w_rr(data,cnt); - if(dstreg!=data) - mov_w_rr(dstreg,data); +{ int tmp=scratchie++; + jnf_ROR_w(tmp,data,cnt); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e080_0_comp_nf(uae_u32 opcode) /* ASR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shra_l_ri(data,srcreg); - bp=srcreg-1; - if(dstreg!=data) - mov_l_rr(dstreg,data); +{ int tmp=scratchie++; + jnf_ASR_l_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e088_0_comp_nf(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shrl_l_ri(data,srcreg); - bp=srcreg-1; - if(dstreg!=data) - mov_l_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSR_l_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e098_0_comp_nf(uae_u32 opcode) /* ROR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + 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); +{ int tmp=scratchie++; + jnf_ROR_l(tmp,data,cnt); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e0a0_0_comp_nf(uae_u32 opcode) /* ASR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75157,39 +57706,21 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - int width; - int highshift=scratchie++; - shra_l_rr(data,cnt); - highmask=0x20; - width=32; -test_l_ri(cnt,highmask); -mov_l_ri(highshift,0); -mov_l_ri(scratchie,width/2); -cmov_l_rr(highshift,scratchie,1); - shra_l_rr(data,highshift); - shra_l_rr(data,highshift); - if(dstreg!=data) - mov_l_rr(dstreg,data); +{ int tmp=scratchie++; + jnf_ASR_l_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e0a8_0_comp_nf(uae_u32 opcode) /* LSR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75198,34 +57729,21 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - shrl_l_rr(data,cnt); - highmask=0x20; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_l_rr(data,scratchie); - if(dstreg!=data) - mov_l_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSR_l_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e0b8_0_comp_nf(uae_u32 opcode) /* ROR */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75234,63 +57752,170 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ ror_l_rr(data,cnt); - if(dstreg!=data) - mov_l_rr(dstreg,data); +{ int tmp=scratchie++; + jnf_ROR_l(tmp,data,cnt); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } -unsigned long REGPARAM2 op_e100_0_comp_nf(uae_u32 opcode) /* ASL */ +unsigned long REGPARAM2 op_e0d0_0_comp_nf(uae_u32 opcode) /* ASRW */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else - uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else - uae_u32 dstreg = opcode & 7; -#endif + uae_s32 srcreg = (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; -} + 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 tmp = scratchie++; + jnf_ASRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0d8_0_comp_nf(uae_u32 opcode) /* ASRW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp = scratchie++; + jnf_ASRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0e0_0_comp_nf(uae_u32 opcode) /* ASRW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jnf_ASRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0e8_0_comp_nf(uae_u32 opcode) /* ASRW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp = scratchie++; + jnf_ASRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0f0_0_comp_nf(uae_u32 opcode) /* ASRW */ +{ + uae_s32 srcreg = (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 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 tmp = scratchie++; + jnf_ASRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0f8_0_comp_nf(uae_u32 opcode) /* ASRW */ +{ + 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 tmp = scratchie++; + jnf_ASRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e0f9_0_comp_nf(uae_u32 opcode) /* ASRW */ +{ + 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 tmp = scratchie++; + jnf_ASRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e100_0_comp_nf(uae_u32 opcode) /* ASL */ +{ + uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; + uae_u32 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 tmp=scratchie++; { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_b_ri(data,srcreg); - bp=8-srcreg; - if(dstreg!=data) - mov_b_rr(dstreg,data); +{ jnf_LSL_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e108_0_comp_nf(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75299,56 +57924,38 @@ unsigned long REGPARAM2 op_e108_0_comp_nf(uae_u32 opcode) /* LSL */ { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_b_ri(data,srcreg); - bp=8-srcreg; - if(dstreg!=data) - mov_b_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSL_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e118_0_comp_nf(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + 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); +{ int tmp=scratchie++; + jnf_ROL_b(tmp,data,cnt); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e120_0_comp_nf(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75357,38 +57964,21 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); -if (needed_flags & FLAG_V) { - FAIL(1); - return 0; -} +{ dont_care_flags(); + int tmp=scratchie++; { int cnt=srcreg; { int data=dstreg; -{ int highmask; - shll_b_rr(data,cnt); - highmask=0x38; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_b_rr(data,scratchie); - if(dstreg!=data) - mov_b_rr(dstreg,data); +{ jnf_LSL_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e128_0_comp_nf(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75400,31 +57990,18 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - shll_b_rr(data,cnt); - highmask=0x38; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_b_rr(data,scratchie); - if(dstreg!=data) - mov_b_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSL_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e138_0_comp_nf(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75433,63 +58010,41 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ rol_b_rr(data,cnt); - if(dstreg!=data) - mov_b_rr(dstreg,data); +{ int tmp=scratchie++; + jnf_ROL_b(tmp,data,cnt); + if(dstreg!=tmp) + mov_b_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e140_0_comp_nf(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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; -} + dont_care_flags(); + int tmp=scratchie++; { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_w_ri(data,srcreg); - bp=16-srcreg; - if(dstreg!=data) - mov_w_rr(dstreg,data); +{ jnf_LSL_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e148_0_comp_nf(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75498,56 +58053,38 @@ unsigned long REGPARAM2 op_e148_0_comp_nf(uae_u32 opcode) /* LSL */ { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_w_ri(data,srcreg); - bp=16-srcreg; - if(dstreg!=data) - mov_w_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSL_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e158_0_comp_nf(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + 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); +{ int tmp=scratchie++; + jnf_ROL_w(tmp,data,cnt); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e160_0_comp_nf(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75556,38 +58093,21 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); -if (needed_flags & FLAG_V) { - FAIL(1); - return 0; -} +{ dont_care_flags(); + int tmp=scratchie++; { int cnt=srcreg; { int data=dstreg; -{ int highmask; - shll_w_rr(data,cnt); - highmask=0x30; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_w_rr(data,scratchie); - if(dstreg!=data) - mov_w_rr(dstreg,data); +{ jnf_LSL_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e168_0_comp_nf(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75599,31 +58119,18 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - shll_w_rr(data,cnt); - highmask=0x30; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_w_rr(data,scratchie); - if(dstreg!=data) - mov_w_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSL_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e178_0_comp_nf(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75632,63 +58139,41 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ rol_w_rr(data,cnt); - if(dstreg!=data) - mov_w_rr(dstreg,data); +{ int tmp=scratchie++; + jnf_ROL_w(tmp,data,cnt); + if(dstreg!=tmp) + mov_w_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e180_0_comp_nf(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif 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; -} + dont_care_flags(); + int tmp=scratchie++; { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_l_ri(data,srcreg); - bp=32-srcreg; - if(dstreg!=data) - mov_l_rr(dstreg,data); +{ jnf_LSL_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e188_0_comp_nf(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75697,56 +58182,38 @@ unsigned long REGPARAM2 op_e188_0_comp_nf(uae_u32 opcode) /* LSL */ { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; -{ int tmp=scratchie++; - int bp; - mov_l_rr(tmp,data); - shll_l_ri(data,srcreg); - bp=32-srcreg; - if(dstreg!=data) - mov_l_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSL_imm(tmp,data,srcreg); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e198_0_comp_nf(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = imm8_table[((opcode >> 1) & 7)]; -#else uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; - dont_care_flags(); + 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); +{ int tmp=scratchie++; + jnf_ROL_l(tmp,data,cnt); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e1a0_0_comp_nf(uae_u32 opcode) /* ASL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75755,38 +58222,21 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); -if (needed_flags & FLAG_V) { - FAIL(1); - return 0; -} +{ dont_care_flags(); + int tmp=scratchie++; { int cnt=srcreg; { int data=dstreg; -{ int highmask; - shll_l_rr(data,cnt); - highmask=0x20; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_l_rr(data,scratchie); - if(dstreg!=data) - mov_l_rr(dstreg,data); +{ jnf_LSL_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e1a8_0_comp_nf(uae_u32 opcode) /* LSL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75798,31 +58248,18 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ int highmask; - shll_l_rr(data,cnt); - highmask=0x20; -test_l_ri(cnt,highmask); -mov_l_ri(scratchie,0); -cmov_l_rr(scratchie,data,0); - mov_l_rr(data,scratchie); - if(dstreg!=data) - mov_l_rr(dstreg,data); + int tmp=scratchie++; +{ jnf_LSL_reg(tmp,data,cnt); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_e1b8_0_comp_nf(uae_u32 opcode) /* ROL */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 1) & 7); -#else uae_s32 srcreg = ((opcode >> 9) & 7); -#endif -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = opcode & 7; -#endif uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; @@ -75831,143 +58268,719 @@ if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } -{ dont_care_flags(); +{ dont_care_flags(); { int cnt=srcreg; { int data=dstreg; -{ rol_l_rr(data,cnt); - if(dstreg!=data) - mov_l_rr(dstreg,data); +{ int tmp=scratchie++; + jnf_ROL_l(tmp,data,cnt); + if(dstreg!=tmp) + mov_l_rr(dstreg,tmp); }}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } -unsigned long REGPARAM2 op_f600_0_comp_nf(uae_u32 opcode) /* MOVE16 */ +unsigned long REGPARAM2 op_e1d0_0_comp_nf(uae_u32 opcode) /* ASLW */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (opcode & 7); -#endif 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 tmp=scratchie++; + jnf_ASLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1d8_0_comp_nf(uae_u32 opcode) /* ASLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp=scratchie++; + jnf_ASLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1e0_0_comp_nf(uae_u32 opcode) /* ASLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp=scratchie++; + jnf_ASLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1e8_0_comp_nf(uae_u32 opcode) /* ASLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp=scratchie++; + jnf_ASLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1f0_0_comp_nf(uae_u32 opcode) /* ASLW */ +{ + uae_s32 srcreg = (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 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 tmp=scratchie++; + jnf_ASLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1f8_0_comp_nf(uae_u32 opcode) /* ASLW */ +{ + 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 tmp=scratchie++; + jnf_ASLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e1f9_0_comp_nf(uae_u32 opcode) /* ASLW */ +{ + 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 tmp=scratchie++; + jnf_ASLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2d0_0_comp_nf(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + if (dodgy) + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jnf_LSRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2d8_0_comp_nf(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp = scratchie++; + jnf_LSRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2e0_0_comp_nf(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jnf_LSRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2e8_0_comp_nf(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp = scratchie++; + jnf_LSRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2f0_0_comp_nf(uae_u32 opcode) /* LSRW */ +{ + uae_s32 srcreg = (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 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 tmp = scratchie++; + jnf_LSRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2f8_0_comp_nf(uae_u32 opcode) /* LSRW */ +{ + 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 tmp = scratchie++; + jnf_LSRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e2f9_0_comp_nf(uae_u32 opcode) /* LSRW */ +{ + 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 tmp = scratchie++; + jnf_LSRW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3d0_0_comp_nf(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + if (dodgy) + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp=scratchie++; + jnf_LSLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3d8_0_comp_nf(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp=scratchie++; + jnf_LSLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3e0_0_comp_nf(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp=scratchie++; + jnf_LSLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3e8_0_comp_nf(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp=scratchie++; + jnf_LSLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3f0_0_comp_nf(uae_u32 opcode) /* LSLW */ +{ + uae_s32 srcreg = (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 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 tmp=scratchie++; + jnf_LSLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3f8_0_comp_nf(uae_u32 opcode) /* LSLW */ +{ + 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 tmp=scratchie++; + jnf_LSLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e3f9_0_comp_nf(uae_u32 opcode) /* LSLW */ +{ + 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 tmp=scratchie++; + jnf_LSLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6d0_0_comp_nf(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + if (dodgy) + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jnf_RORW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6d8_0_comp_nf(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp = scratchie++; + jnf_RORW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6e0_0_comp_nf(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jnf_RORW(tmp,src); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6e8_0_comp_nf(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp = scratchie++; + jnf_RORW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6f0_0_comp_nf(uae_u32 opcode) /* RORW */ +{ + uae_s32 srcreg = (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 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 tmp = scratchie++; + jnf_RORW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6f8_0_comp_nf(uae_u32 opcode) /* RORW */ +{ + 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 tmp = scratchie++; + jnf_RORW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e6f9_0_comp_nf(uae_u32 opcode) /* RORW */ +{ + 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 tmp = scratchie++; + jnf_RORW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7d0_0_comp_nf(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + if (dodgy) + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jnf_ROLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7d8_0_comp_nf(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + mov_l_rr(srca,srcreg+8); +{ int src=scratchie++; + readword(srca,src,scratchie); + arm_ADD_l_ri8(srcreg+8,2); +{ int tmp = scratchie++; + jnf_ROLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7e0_0_comp_nf(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 srca=dodgy?scratchie++:srcreg+8; + arm_SUB_l_ri8(srcreg+8,2); + if (dodgy) + mov_l_rr(srca,8+srcreg); +{ int src=scratchie++; + readword(srca,src,scratchie); +{ int tmp = scratchie++; + jnf_ROLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7e8_0_comp_nf(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 srca=scratchie++; + 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 tmp = scratchie++; + jnf_ROLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7f0_0_comp_nf(uae_u32 opcode) /* ROLW */ +{ + uae_s32 srcreg = (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 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 tmp = scratchie++; + jnf_ROLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7f8_0_comp_nf(uae_u32 opcode) /* ROLW */ +{ + 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 tmp = scratchie++; + jnf_ROLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_e7f9_0_comp_nf(uae_u32 opcode) /* ROLW */ +{ + 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 tmp = scratchie++; + jnf_ROLW(tmp,src); + writeword(srca,tmp,scratchie); +}}}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); +return 0; +} +unsigned long REGPARAM2 op_f600_0_comp_nf(uae_u32 opcode) /* MOVE16 */ +{ + uae_s32 srcreg = (opcode & 7); + uae_u32 dodgy=0; + uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; + m68k_pc_offset+=2; +{ uae_u8 scratchie=S1; +if (special_mem) { + FAIL(1); + return 0; +} 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); - arm_ADD_l_ri8(srcreg+8,16); - if (special_mem) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + jnf_ADD_im8(srcreg + 8, srcreg + 8, 16); + jnf_MOVE16(dst, src); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_f608_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = 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 (special_mem) { + FAIL(1); + return 0; +} 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); - arm_ADD_l_ri8(dstreg+8,16); - if (special_mem) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + jnf_ADD_im8(dstreg + 8, dstreg + 8, 16); + jnf_MOVE16(dst, src); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_f610_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 srcreg = ((opcode >> 8) & 7); -#else uae_s32 srcreg = (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 (special_mem) { + FAIL(1); + return 0; +} int src=scratchie++; int dst=scratchie++; { int srca=dodgy?scratchie++:srcreg+8; @@ -75975,57 +58988,22 @@ unsigned long REGPARAM2 op_f610_0_comp_nf(uae_u32 opcode) /* MOVE16 */ 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) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + jnf_MOVE16(dst, src); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_f618_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { -#ifdef HAVE_GET_WORD_UNSWAPPED - uae_u32 dstreg = (opcode >> 8) & 7; -#else uae_u32 dstreg = 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 (special_mem) { + FAIL(1); + return 0; +} int src=scratchie++; int dst=scratchie++; { int srca = scratchie++; @@ -76033,102 +59011,34 @@ unsigned long REGPARAM2 op_f618_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { 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) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + jnf_MOVE16(dst, src); }}} if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } unsigned long REGPARAM2 op_f620_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { -#ifdef 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; +if (special_mem) { + FAIL(1); + return 0; +} 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) - arm_ADD_l_ri8(srcreg+8,16); - arm_ADD_l_ri8(dstreg+8,16); - if (special_mem) { - int tmp=scratchie; - scratchie+=4; - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(dst,4); - readlong(src,tmp,scratchie); - writelong_clobber(dst,tmp,scratchie); - arm_ADD_l_ri8(src,4); - arm_ADD_l_ri8(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); } + uae_u16 dstreg = ((comp_get_iword((m68k_pc_offset+=2)-2))>>12) & 0x07; + jnf_MOVE(src, srcreg + 8); + jnf_MOVE(dst, dstreg + 8); + if (srcreg != dstreg) + jnf_ADD_im8(srcreg + 8, srcreg + 8, 16); + jnf_ADD_im8(dstreg + 8, dstreg + 8, 16); + jnf_MOVE16(dst, src); } if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc(); + if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } #endif diff --git a/src/jit/compemu.h b/src/jit/compemu.h index 5a7426f2..ccf6a052 100644 --- a/src/jit/compemu.h +++ b/src/jit/compemu.h @@ -33,6 +33,29 @@ typedef uae_u32 uintptr; #define panicbug printf +/* Flags for Bernie during development/debugging. Should go away eventually */ +#define DISTRUST_CONSISTENT_MEM 0 +#define TAGMASK 0x0000ffff +#define TAGSIZE (TAGMASK+1) +#define MAXRUN 1024 +#define cacheline(x) (((uae_u32)x)&TAGMASK) + +extern uae_u8* start_pc_p; +extern uae_u32 start_pc; + +struct blockinfo_t; + +typedef struct { + uae_u16* location; + uae_u8 cycles; + uae_u8 specmem; +} cpu_history; + +typedef union { + cpuop_func* handler; + struct blockinfo_t* bi; +} cacheline; + /* (gb) When on, this option can save save up to 30% compilation time * when many lazy flushes occur (e.g. apps in MacOS 8.x). */ @@ -50,35 +73,8 @@ typedef uae_u32 uintptr; #define USE_CHECKSUM_INFO 1 #endif -/* Flags for Bernie during development/debugging. Should go away eventually */ -#define DISTRUST_CONSISTENT_MEM 0 -#define TAGMASK 0x000fffff -#define TAGSIZE (TAGMASK+1) -#define MAXRUN 1024 - -extern uae_u8* start_pc_p; -extern uae_u32 start_pc; - -#define cacheline(x) (((uae_u32)x)&TAGMASK) - -typedef struct { - uae_u16* location; - uae_u8 cycles; - uae_u8 specmem; - uae_u8 dummy2; - uae_u8 dummy3; -} cpu_history; - -struct blockinfo_t; - -typedef union { - cpuop_func* handler; - struct blockinfo_t* bi; -} cacheline; - #define USE_ALIAS 1 #define USE_F_ALIAS 1 -#define USE_OFFSET 0 #define COMP_DEBUG 0 #if COMP_DEBUG @@ -122,12 +118,10 @@ typedef union { #define FLAG_CZNV (FLAG_C | FLAG_Z | FLAG_N | FLAG_V) #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 DEBUG_DATA_BUFFER #define ALIGN_NOT_NEEDED -# define N_REGS 13 /* really 16, but 13 to 15 are SP, LR, PC */ +#define N_REGS 13 /* really 16, but 13 to 15 are SP, LR, PC */ #else #define N_REGS 8 /* really only 7, but they are numbered 0,1,2,3,5,6,7 */ #endif @@ -176,10 +170,8 @@ typedef struct { 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; #ifdef USE_JIT_FPU @@ -233,8 +225,6 @@ typedef struct { uae_u32 touched; uae_s8 holds[VREGS]; uae_u8 nholds; - uae_u8 canbyte; - uae_u8 canword; uae_u8 locked; } n_status; @@ -310,6 +300,7 @@ extern int touchcnt; #if defined(CPU_arm) #include "compemu_midfunc_arm.h" +#include "compemu_midfunc_arm2.h" #else #include "compemu_midfunc_x86.h" #endif @@ -331,9 +322,6 @@ 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 uae_u32 get_const(int r); diff --git a/src/jit/compemu_midfunc_arm.cpp b/src/jit/compemu_midfunc_arm.cpp index 39474484..1a0dc7cb 100644 --- a/src/jit/compemu_midfunc_arm.cpp +++ b/src/jit/compemu_midfunc_arm.cpp @@ -45,684 +45,75 @@ * * Before calling raw_*, you must call readreg, writereg or rmw for * each register * * The order for this is - * - 1st call remove_offset for all registers written to with size<4 - * - 2nd call readreg for all registers read without offset - * - 3rd call rmw for all rmw registers - * - 4th call readreg_offset for all registers that can handle offsets - * - 5th call get_offset for all the registers from the previous step - * - 6th call writereg for all written-to registers - * - 7th call raw_* - * - 8th unlock2 all registers that were locked + * - 1nd call readreg for all registers read without offset + * - 2rd call rmw for all rmw registers + * - 3th call writereg for all written-to registers + * - 4th call raw_* + * - 5th unlock2 all registers that were locked */ MIDFUNC(0,live_flags,(void)) { - live.flags_on_stack=TRASH; - live.flags_in_flags=VALID; - live.flags_are_important=1; + live.flags_on_stack = TRASH; + live.flags_in_flags = VALID; + live.flags_are_important = 1; } MENDFUNC(0,live_flags,(void)) MIDFUNC(0,dont_care_flags,(void)) { - live.flags_are_important=0; + live.flags_are_important = 0; } MENDFUNC(0,dont_care_flags,(void)) -MIDFUNC(0,duplicate_carry,(void)) -{ - evict(FLAGX); - make_flags_live_internal(); - COMPCALL(setcc_m)((uintptr)live.state[FLAGX].mem,NATIVE_CC_CS); - log_vwrite(FLAGX); -} -MENDFUNC(0,duplicate_carry,(void)) - -MIDFUNC(0,restore_carry,(void)) -{ - if (!have_rat_stall) { /* Not a P6 core, i.e. no partial stalls */ - bt_l_ri_noclobber(FLAGX,0); - } - else { /* Avoid the stall the above creates. - This is slow on non-P6, though. - */ - COMPCALL(rol_b_ri(FLAGX,8)); - isclean(FLAGX); - } -} -MENDFUNC(0,restore_carry,(void)) - -MIDFUNC(0,start_needflags,(void)) -{ - needflags=1; -} -MENDFUNC(0,start_needflags,(void)) - -MIDFUNC(0,end_needflags,(void)) -{ - needflags=0; -} -MENDFUNC(0,end_needflags,(void)) - MIDFUNC(0,make_flags_live,(void)) { make_flags_live_internal(); } MENDFUNC(0,make_flags_live,(void)) -MIDFUNC(2,bt_l_ri,(RR4 r, IMM i)) /* This is defined as only affecting C */ -{ - int size=4; - if (i<16) - size=2; - CLOBBER_BT; - r=readreg(r,size); - raw_bt_l_ri(r,i); - unlock2(r); -} -MENDFUNC(2,bt_l_ri,(RR4 r, IMM i)) /* This is defined as only affecting C */ - -MIDFUNC(2,bt_l_rr,(RR4 r, RR4 b)) /* This is defined as only affecting C */ -{ - CLOBBER_BT; - r=readreg(r,4); - b=readreg(b,4); - raw_bt_l_rr(r,b); - unlock2(r); - unlock2(b); -} -MENDFUNC(2,bt_l_rr,(RR4 r, RR4 b)) /* This is defined as only affecting C */ - -MIDFUNC(2,btc_l_rr,(RW4 r, RR4 b)) -{ - CLOBBER_BT; - b=readreg(b,4); - r=rmw(r,4,4); - raw_btc_l_rr(r,b); - unlock2(r); - unlock2(b); -} -MENDFUNC(2,btc_l_rr,(RW4 r, RR4 b)) - -MIDFUNC(2,btr_l_rr,(RW4 r, RR4 b)) -{ - CLOBBER_BT; - b=readreg(b,4); - r=rmw(r,4,4); - raw_btr_l_rr(r,b); - unlock2(r); - unlock2(b); -} -MENDFUNC(2,btr_l_rr,(RW4 r, RR4 b)) - -MIDFUNC(2,bts_l_rr,(RW4 r, RR4 b)) -{ - CLOBBER_BT; - b=readreg(b,4); - r=rmw(r,4,4); - raw_bts_l_rr(r,b); - unlock2(r); - unlock2(b); -} -MENDFUNC(2,bts_l_rr,(RW4 r, RR4 b)) - -MIDFUNC(2,mov_l_rm,(W4 d, IMM s)) -{ - CLOBBER_MOV; - d=writereg(d,4); - raw_mov_l_rm(d,s); - unlock2(d); -} -MENDFUNC(2,mov_l_rm,(W4 d, IMM s)) - -MIDFUNC(4,mov_l_rm_indexed,(W4 d, IMM base, RR4 index, IMM factor)) -{ - CLOBBER_MOV; - index=readreg(index,4); - d=writereg(d,4); - raw_mov_l_rm_indexed(d,base,index,factor); - unlock2(index); - unlock2(d); -} -MENDFUNC(4,mov_l_rm_indexed,(W4 d, IMM base, RR4 index, IMM factor)) - MIDFUNC(2,mov_l_mi,(IMM d, IMM s)) { - CLOBBER_MOV; - raw_mov_l_mi(d,s); + raw_mov_l_mi(d, s); } MENDFUNC(2,mov_l_mi,(IMM d, IMM s)) -MIDFUNC(2,mov_w_mi,(IMM d, IMM s)) -{ - CLOBBER_MOV; - raw_mov_w_mi(d,s); -} -MENDFUNC(2,mov_w_mi,(IMM d, IMM s)) - -MIDFUNC(2,mov_b_mi,(IMM d, IMM s)) -{ - CLOBBER_MOV; - raw_mov_b_mi(d,s); -} -MENDFUNC(2,mov_b_mi,(IMM d, IMM s)) - -MIDFUNC(2,rol_b_ri,(RW1 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_ROL; - r=rmw(r,1,1); - raw_rol_b_ri(r,i); - unlock2(r); -} -MENDFUNC(2,rol_b_ri,(RW1 r, IMM i)) - -MIDFUNC(2,rol_w_ri,(RW2 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_ROL; - r=rmw(r,2,2); - raw_rol_w_ri(r,i); - unlock2(r); -} -MENDFUNC(2,rol_w_ri,(RW2 r, IMM i)) - -MIDFUNC(2,rol_l_ri,(RW4 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_ROL; - r=rmw(r,4,4); - raw_rol_l_ri(r,i); - unlock2(r); -} -MENDFUNC(2,rol_l_ri,(RW4 r, IMM i)) - -MIDFUNC(2,rol_l_rr,(RW4 d, RR1 r)) -{ - if (isconst(r)) { - COMPCALL(rol_l_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_ROL; - r=readreg(r,1); - d=rmw(d,4,4); - raw_rol_l_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,rol_l_rr,(RW4 d, RR1 r)) - -MIDFUNC(2,rol_w_rr,(RW2 d, RR1 r)) -{ /* Can only do this with r==1, i.e. cl */ - - if (isconst(r)) { - COMPCALL(rol_w_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_ROL; - r=readreg(r,1); - d=rmw(d,2,2); - raw_rol_w_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,rol_w_rr,(RW2 d, RR1 r)) - -MIDFUNC(2,rol_b_rr,(RW1 d, RR1 r)) -{ /* Can only do this with r==1, i.e. cl */ - - if (isconst(r)) { - COMPCALL(rol_b_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_ROL; - r=readreg(r,1); - d=rmw(d,1,1); - raw_rol_b_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,rol_b_rr,(RW1 d, RR1 r)) - -MIDFUNC(2,shll_l_rr,(RW4 d, RR1 r)) -{ - if (isconst(r)) { - COMPCALL(shll_l_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_SHLL; - r=readreg(r,1); - d=rmw(d,4,4); - raw_shll_l_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,shll_l_rr,(RW4 d, RR1 r)) - -MIDFUNC(2,shll_w_rr,(RW2 d, RR1 r)) -{ /* Can only do this with r==1, i.e. cl */ - - if (isconst(r)) { - COMPCALL(shll_w_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_SHLL; - r=readreg(r,1); - d=rmw(d,2,2); - raw_shll_w_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,shll_w_rr,(RW2 d, RR1 r)) - -MIDFUNC(2,shll_b_rr,(RW1 d, RR1 r)) -{ /* Can only do this with r==1, i.e. cl */ - - if (isconst(r)) { - COMPCALL(shll_b_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_SHLL; - r=readreg(r,1); - d=rmw(d,1,1); - raw_shll_b_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,shll_b_rr,(RW1 d, RR1 r)) - -MIDFUNC(2,ror_b_ri,(RR1 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_ROR; - r=rmw(r,1,1); - raw_ror_b_ri(r,i); - unlock2(r); -} -MENDFUNC(2,ror_b_ri,(RR1 r, IMM i)) - -MIDFUNC(2,ror_w_ri,(RR2 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_ROR; - r=rmw(r,2,2); - raw_ror_w_ri(r,i); - unlock2(r); -} -MENDFUNC(2,ror_w_ri,(RR2 r, IMM i)) - -MIDFUNC(2,ror_l_ri,(RR4 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_ROR; - r=rmw(r,4,4); - raw_ror_l_ri(r,i); - unlock2(r); -} -MENDFUNC(2,ror_l_ri,(RR4 r, IMM i)) - -MIDFUNC(2,ror_l_rr,(RR4 d, RR1 r)) -{ - if (isconst(r)) { - COMPCALL(ror_l_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_ROR; - r=readreg(r,1); - d=rmw(d,4,4); - raw_ror_l_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,ror_l_rr,(RR4 d, RR1 r)) - -MIDFUNC(2,ror_w_rr,(RR2 d, RR1 r)) -{ - if (isconst(r)) { - COMPCALL(ror_w_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_ROR; - r=readreg(r,1); - d=rmw(d,2,2); - raw_ror_w_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,ror_w_rr,(RR2 d, RR1 r)) - -MIDFUNC(2,ror_b_rr,(RR1 d, RR1 r)) -{ - if (isconst(r)) { - COMPCALL(ror_b_ri)(d,(uae_u8)live.state[r].val); - return; - } - - CLOBBER_ROR; - r=readreg(r,1); - d=rmw(d,1,1); - raw_ror_b_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,ror_b_rr,(RR1 d, RR1 r)) - -MIDFUNC(2,shrl_l_rr,(RW4 d, RR1 r)) -{ - if (isconst(r)) { - COMPCALL(shrl_l_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_SHRL; - r=readreg(r,1); - d=rmw(d,4,4); - raw_shrl_l_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,shrl_l_rr,(RW4 d, RR1 r)) - -MIDFUNC(2,shrl_w_rr,(RW2 d, RR1 r)) -{ /* Can only do this with r==1, i.e. cl */ - - if (isconst(r)) { - COMPCALL(shrl_w_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_SHRL; - r=readreg(r,1); - d=rmw(d,2,2); - raw_shrl_w_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,shrl_w_rr,(RW2 d, RR1 r)) - -MIDFUNC(2,shrl_b_rr,(RW1 d, RR1 r)) -{ /* Can only do this with r==1, i.e. cl */ - - if (isconst(r)) { - COMPCALL(shrl_b_ri)(d,(uae_u8)live.state[r].val); - return; - } - - CLOBBER_SHRL; - r=readreg(r,1); - d=rmw(d,1,1); - raw_shrl_b_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,shrl_b_rr,(RW1 d, RR1 r)) - MIDFUNC(2,shll_l_ri,(RW4 r, IMM i)) { - if (!i && !needflags) - return; - if (isconst(r) && !needflags) { + // Only used in calc_disp_ea_020() -> flags not relevant and never modified + if (!i) + return; + if (isconst(r)) { live.state[r].val<<=i; return; } - CLOBBER_SHLL; - r=rmw(r,4,4); - raw_shll_l_ri(r,i); + + r=rmw(r, 4, 4); + raw_shll_l_ri(r, i); unlock2(r); } MENDFUNC(2,shll_l_ri,(RW4 r, IMM i)) -MIDFUNC(2,shll_w_ri,(RW2 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_SHLL; - r=rmw(r,2,2); - raw_shll_w_ri(r,i); - unlock2(r); -} -MENDFUNC(2,shll_w_ri,(RW2 r, IMM i)) - -MIDFUNC(2,shll_b_ri,(RW1 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_SHLL; - r=rmw(r,1,1); - raw_shll_b_ri(r,i); - unlock2(r); -} -MENDFUNC(2,shll_b_ri,(RW1 r, IMM i)) - -MIDFUNC(2,shrl_l_ri,(RW4 r, IMM i)) -{ - if (!i && !needflags) - return; - if (isconst(r) && !needflags) { - live.state[r].val>>=i; - return; - } - CLOBBER_SHRL; - r=rmw(r,4,4); - raw_shrl_l_ri(r,i); - unlock2(r); -} -MENDFUNC(2,shrl_l_ri,(RW4 r, IMM i)) - -MIDFUNC(2,shrl_w_ri,(RW2 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_SHRL; - r=rmw(r,2,2); - raw_shrl_w_ri(r,i); - unlock2(r); -} -MENDFUNC(2,shrl_w_ri,(RW2 r, IMM i)) - -MIDFUNC(2,shrl_b_ri,(RW1 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_SHRL; - r=rmw(r,1,1); - raw_shrl_b_ri(r,i); - unlock2(r); -} -MENDFUNC(2,shrl_b_ri,(RW1 r, IMM i)) - -MIDFUNC(2,shra_l_ri,(RW4 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_SHRA; - r=rmw(r,4,4); - raw_shra_l_ri(r,i); - unlock2(r); -} -MENDFUNC(2,shra_l_ri,(RW4 r, IMM i)) - -MIDFUNC(2,shra_w_ri,(RW2 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_SHRA; - r=rmw(r,2,2); - raw_shra_w_ri(r,i); - unlock2(r); -} -MENDFUNC(2,shra_w_ri,(RW2 r, IMM i)) - -MIDFUNC(2,shra_b_ri,(RW1 r, IMM i)) -{ - if (!i && !needflags) - return; - CLOBBER_SHRA; - r=rmw(r,1,1); - raw_shra_b_ri(r,i); - unlock2(r); -} -MENDFUNC(2,shra_b_ri,(RW1 r, IMM i)) - -MIDFUNC(2,shra_l_rr,(RW4 d, RR1 r)) -{ - if (isconst(r)) { - COMPCALL(shra_l_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_SHRA; - r=readreg(r,1); - d=rmw(d,4,4); - raw_shra_l_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,shra_l_rr,(RW4 d, RR1 r)) - -MIDFUNC(2,shra_w_rr,(RW2 d, RR1 r)) -{ /* Can only do this with r==1, i.e. cl */ - - if (isconst(r)) { - COMPCALL(shra_w_ri)(d,(uae_u8)live.state[r].val); - return; - } - CLOBBER_SHRA; - r=readreg(r,1); - d=rmw(d,2,2); - raw_shra_w_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,shra_w_rr,(RW2 d, RR1 r)) - -MIDFUNC(2,shra_b_rr,(RW1 d, RR1 r)) -{ /* Can only do this with r==1, i.e. cl */ - - if (isconst(r)) { - COMPCALL(shra_b_ri)(d,(uae_u8)live.state[r].val); - return; - } - - CLOBBER_SHRA; - r=readreg(r,1); - d=rmw(d,1,1); - raw_shra_b_rr(d,r); - unlock2(r); - unlock2(d); -} -MENDFUNC(2,shra_b_rr,(RW1 d, RR1 r)) - -MIDFUNC(2,setcc,(W1 d, IMM cc)) -{ - CLOBBER_SETCC; - d=writereg(d,1); - raw_setcc(d,cc); - unlock2(d); -} -MENDFUNC(2,setcc,(W1 d, IMM cc)) - -MIDFUNC(2,setcc_m,(IMM d, IMM cc)) -{ - CLOBBER_SETCC; - raw_setcc_m(d,cc); -} -MENDFUNC(2,setcc_m,(IMM d, IMM cc)) - -MIDFUNC(3,cmov_l_rr,(RW4 d, RR4 s, IMM cc)) -{ - if (d==s) - return; - CLOBBER_CMOV; - s=readreg(s,4); - d=rmw(d,4,4); - raw_cmov_l_rr(d,s,cc); - unlock2(s); - unlock2(d); -} -MENDFUNC(3,cmov_l_rr,(RW4 d, RR4 s, IMM cc)) - -MIDFUNC(2,bsf_l_rr,(W4 d, W4 s)) -{ - CLOBBER_BSF; - s = readreg(s, 4); - d = writereg(d, 4); - raw_bsf_l_rr(d, s); - unlock2(s); - unlock2(d); -} -MENDFUNC(2,bsf_l_rr,(W4 d, W4 s)) - -/* Set the Z flag depending on the value in s. Note that the - value has to be 0 or -1 (or, more precisely, for non-zero - values, bit 14 must be set)! */ -MIDFUNC(2,simulate_bsf,(W4 tmp, RW4 s)) -{ - CLOBBER_BSF; - s=rmw_specific(s,4,4,FLAG_NREG3); - tmp=writereg(tmp,4); - raw_flags_set_zero(s, tmp); - unlock2(tmp); - unlock2(s); -} -MENDFUNC(2,simulate_bsf,(W4 tmp, RW4 s)) - -MIDFUNC(2,imul_32_32,(RW4 d, RR4 s)) -{ - CLOBBER_MUL; - s=readreg(s,4); - d=rmw(d,4,4); - raw_imul_32_32(d,s); - unlock2(s); - unlock2(d); -} -MENDFUNC(2,imul_32_32,(RW4 d, RR4 s)) - -MIDFUNC(2,imul_64_32,(RW4 d, RW4 s)) -{ - CLOBBER_MUL; - s=rmw_specific(s,4,4,MUL_NREG2); - d=rmw_specific(d,4,4,MUL_NREG1); - raw_imul_64_32(d,s); - unlock2(s); - unlock2(d); -} -MENDFUNC(2,imul_64_32,(RW4 d, RW4 s)) - -MIDFUNC(2,mul_64_32,(RW4 d, RW4 s)) -{ - CLOBBER_MUL; - s=rmw_specific(s,4,4,MUL_NREG2); - d=rmw_specific(d,4,4,MUL_NREG1); - raw_mul_64_32(d,s); - unlock2(s); - unlock2(d); -} -MENDFUNC(2,mul_64_32,(RW4 d, RW4 s)) - MIDFUNC(2,sign_extend_16_rr,(W4 d, RR2 s)) { + // Only used in calc_disp_ea_020() -> flags not relevant and never modified int isrmw; if (isconst(s)) { - set_const(d,(uae_s32)(uae_s16)live.state[s].val); + set_const(d, (uae_s32)(uae_s16)live.state[s].val); return; } - CLOBBER_SE16; - isrmw=(s==d); + isrmw = (s == d); if (!isrmw) { - s=readreg(s,2); - d=writereg(d,4); + s = readreg(s, 2); + d = writereg(d, 4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ - s=d=rmw(s,4,2); + s = d = rmw(s, 4, 2); } - raw_sign_extend_16_rr(d,s); + SIGNED16_REG_2_REG(d, s); if (!isrmw) { unlock2(d); unlock2(s); @@ -733,112 +124,18 @@ MIDFUNC(2,sign_extend_16_rr,(W4 d, RR2 s)) } MENDFUNC(2,sign_extend_16_rr,(W4 d, RR2 s)) -MIDFUNC(2,sign_extend_8_rr,(W4 d, RR1 s)) -{ - int isrmw; - - if (isconst(s)) { - set_const(d,(uae_s32)(uae_s8)live.state[s].val); - return; - } - - isrmw=(s==d); - CLOBBER_SE8; - if (!isrmw) { - s=readreg(s,1); - d=writereg(d,4); - } - else { /* If we try to lock this twice, with different sizes, we - are int trouble! */ - s=d=rmw(s,4,1); - } - - raw_sign_extend_8_rr(d,s); - - if (!isrmw) { - unlock2(d); - unlock2(s); - } - else { - unlock2(s); - } -} -MENDFUNC(2,sign_extend_8_rr,(W4 d, RR1 s)) - -MIDFUNC(2,zero_extend_16_rr,(W4 d, RR2 s)) -{ - int isrmw; - - if (isconst(s)) { - set_const(d,(uae_u32)(uae_u16)live.state[s].val); - return; - } - - isrmw=(s==d); - CLOBBER_ZE16; - if (!isrmw) { - s=readreg(s,2); - d=writereg(d,4); - } - else { /* If we try to lock this twice, with different sizes, we - are int trouble! */ - s=d=rmw(s,4,2); - } - raw_zero_extend_16_rr(d,s); - if (!isrmw) { - unlock2(d); - unlock2(s); - } - else { - unlock2(s); - } -} -MENDFUNC(2,zero_extend_16_rr,(W4 d, RR2 s)) - -MIDFUNC(2,zero_extend_8_rr,(W4 d, RR1 s)) -{ - int isrmw; - if (isconst(s)) { - set_const(d,(uae_u32)(uae_u8)live.state[s].val); - return; - } - - isrmw=(s==d); - CLOBBER_ZE8; - if (!isrmw) { - s=readreg(s,1); - d=writereg(d,4); - } - else { /* If we try to lock this twice, with different sizes, we - are int trouble! */ - s=d=rmw(s,4,1); - } - - raw_zero_extend_8_rr(d,s); - - if (!isrmw) { - unlock2(d); - unlock2(s); - } - else { - unlock2(s); - } -} -MENDFUNC(2,zero_extend_8_rr,(W4 d, RR1 s)) - MIDFUNC(2,mov_b_rr,(W1 d, RR1 s)) { - if (d==s) - return; + if (d == s) + return; if (isconst(s)) { - COMPCALL(mov_b_ri)(d,(uae_u8)live.state[s].val); + COMPCALL(mov_b_ri)(d, (uae_u8)live.state[s].val); return; } - CLOBBER_MOV; - s=readreg(s,1); - d=writereg(d,1); - raw_mov_b_rr(d,s); + s = readreg(s, 1); + d = writereg(d, 1); + raw_mov_b_rr(d, s); unlock2(d); unlock2(s); } @@ -846,302 +143,47 @@ MENDFUNC(2,mov_b_rr,(W1 d, RR1 s)) MIDFUNC(2,mov_w_rr,(W2 d, RR2 s)) { - if (d==s) - return; + if (d == s) + return; if (isconst(s)) { - COMPCALL(mov_w_ri)(d,(uae_u16)live.state[s].val); + COMPCALL(mov_w_ri)(d, (uae_u16)live.state[s].val); return; } - CLOBBER_MOV; - s=readreg(s,2); - d=writereg(d,2); - raw_mov_w_rr(d,s); + s = readreg(s, 2); + d = writereg(d, 2); + raw_mov_w_rr(d, s); unlock2(d); unlock2(s); } MENDFUNC(2,mov_w_rr,(W2 d, RR2 s)) -/* read the long at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_l_rR,(W4 d, RR4 s, IMM offset)) -{ - if (isconst(s)) { - COMPCALL(mov_l_rm)(d,live.state[s].val+offset); - return; - } - CLOBBER_MOV; - s=readreg(s,4); - d=writereg(d,4); - - raw_mov_l_rR(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_l_rR,(W4 d, RR4 s, IMM offset)) - -/* read the word at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_w_rR,(W2 d, RR4 s, IMM offset)) -{ - if (isconst(s)) { - COMPCALL(mov_w_rm)(d,live.state[s].val+offset); - return; - } - CLOBBER_MOV; - s=readreg(s,4); - d=writereg(d,2); - - raw_mov_w_rR(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_w_rR,(W2 d, RR4 s, IMM offset)) - -/* read the long at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_l_brR,(W4 d, RR4 s, IMM offset)) -{ - int sreg=s; - if (isconst(s)) { - COMPCALL(mov_l_rm)(d,live.state[s].val+offset); - return; - } - CLOBBER_MOV; - s=readreg_offset(s,4); - offset+=get_offset(sreg); - d=writereg(d,4); - - raw_mov_l_brR(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_l_brR,(W4 d, RR4 s, IMM offset)) - -/* read the word at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_w_brR,(W2 d, RR4 s, IMM offset)) -{ - int sreg=s; - if (isconst(s)) { - COMPCALL(mov_w_rm)(d,live.state[s].val+offset); - return; - } - CLOBBER_MOV; - remove_offset(d,-1); - s=readreg_offset(s,4); - offset+=get_offset(sreg); - d=writereg(d,2); - - raw_mov_w_brR(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_w_brR,(W2 d, RR4 s, IMM offset)) - -/* read the word at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_b_brR,(W1 d, RR4 s, IMM offset)) -{ - int sreg=s; - if (isconst(s)) { - COMPCALL(mov_b_rm)(d,live.state[s].val+offset); - return; - } - CLOBBER_MOV; - remove_offset(d,-1); - s=readreg_offset(s,4); - offset+=get_offset(sreg); - d=writereg(d,1); - - raw_mov_b_brR(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_b_brR,(W1 d, RR4 s, IMM offset)) - -/* read the long at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_l_brR24,(W4 d, RR4 s, IMM offset)) -{ - int sreg=s; - if (isconst(s)) { - COMPCALL(mov_l_rm)(d,(live.state[s].val & 0x00ffffff)+offset); - return; - } - CLOBBER_MOV; - s=readreg_offset(s,4); - offset+=get_offset(sreg); - d=writereg(d,4); - - raw_mov_l_brR24(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_l_brR24,(W4 d, RR4 s, IMM offset)) - -/* read the word at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_w_brR24,(W2 d, RR4 s, IMM offset)) -{ - int sreg=s; - if (isconst(s)) { - COMPCALL(mov_w_rm)(d,(live.state[s].val & 0x00ffffff)+offset); - return; - } - CLOBBER_MOV; - remove_offset(d,-1); - s=readreg_offset(s,4); - offset+=get_offset(sreg); - d=writereg(d,2); - - raw_mov_w_brR24(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_w_brR24,(W2 d, RR4 s, IMM offset)) - -/* read the word at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_b_brR24,(W1 d, RR4 s, IMM offset)) -{ - int sreg=s; - if (isconst(s)) { - COMPCALL(mov_b_rm)(d,(live.state[s].val & 0x00ffffff)+offset); - return; - } - CLOBBER_MOV; - remove_offset(d,-1); - s=readreg_offset(s,4); - offset+=get_offset(sreg); - d=writereg(d,1); - - raw_mov_b_brR24(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_b_brR24,(W1 d, RR4 s, IMM offset)) - -MIDFUNC(3,mov_l_Ri,(RR4 d, IMM i, IMM offset)) -{ - int dreg=d; - if (isconst(d)) { - COMPCALL(mov_l_mi)(live.state[d].val+offset,i); - return; - } - - CLOBBER_MOV; - d=readreg_offset(d,4); - offset+=get_offset(dreg); - raw_mov_l_Ri(d,i,offset); - unlock2(d); -} -MENDFUNC(3,mov_l_Ri,(RR4 d, IMM i, IMM offset)) - -MIDFUNC(3,mov_w_Ri,(RR4 d, IMM i, IMM offset)) -{ - int dreg=d; - if (isconst(d)) { - COMPCALL(mov_w_mi)(live.state[d].val+offset,i); - return; - } - - CLOBBER_MOV; - d=readreg_offset(d,4); - offset+=get_offset(dreg); - raw_mov_w_Ri(d,i,offset); - unlock2(d); -} -MENDFUNC(3,mov_w_Ri,(RR4 d, IMM i, IMM offset)) - -/* Warning! OFFSET is byte sized only! */ -MIDFUNC(3,mov_l_Rr,(RR4 d, RR4 s, IMM offset)) -{ - if (isconst(d)) { - COMPCALL(mov_l_mr)(live.state[d].val+offset,s); - return; - } - if (isconst(s)) { - COMPCALL(mov_l_Ri)(d,live.state[s].val,offset); - return; - } - - CLOBBER_MOV; - s=readreg(s,4); - d=readreg(d,4); - - raw_mov_l_Rr(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_l_Rr,(RR4 d, RR4 s, IMM offset)) - -MIDFUNC(3,mov_w_Rr,(RR4 d, RR2 s, IMM offset)) -{ - if (isconst(d)) { - COMPCALL(mov_w_mr)(live.state[d].val+offset,s); - return; - } - if (isconst(s)) { - COMPCALL(mov_w_Ri)(d,(uae_u16)live.state[s].val,offset); - return; - } - - CLOBBER_MOV; - s=readreg(s,2); - d=readreg(d,4); - raw_mov_w_Rr(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_w_Rr,(RR4 d, RR2 s, IMM offset)) - MIDFUNC(3,lea_l_brr,(W4 d, RR4 s, IMM offset)) { if (isconst(s)) { - COMPCALL(mov_l_ri)(d,live.state[s].val+offset); + COMPCALL(mov_l_ri)(d, live.state[s].val+offset); return; } -#if USE_OFFSET - if (d==s) { - add_offset(d,offset); - return; - } -#endif - CLOBBER_LEA; - s=readreg(s,4); - d=writereg(d,4); - raw_lea_l_brr(d,s,offset); + + s = readreg(s, 4); + d = writereg(d ,4); + raw_lea_l_brr(d, s, offset); unlock2(d); unlock2(s); } MENDFUNC(3,lea_l_brr,(W4 d, RR4 s, IMM offset)) -MIDFUNC(3,lea_l_brr24,(W4 d, RR4 s, IMM offset)) -{ - if (isconst(s)) { - COMPCALL(mov_l_ri)(d,(live.state[s].val & 0x00ffffff)+offset); - return; - } -#if USE_OFFSET - if (d==s) { - add_offset(d,offset); - return; - } -#endif - CLOBBER_LEA; - s=readreg(s,4); - d=writereg(d,4); - raw_lea_l_brr24(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,lea_l_brr24,(W4 d, RR4 s, IMM offset)) - MIDFUNC(5,lea_l_brr_indexed,(W4 d, RR4 s, RR4 index, IMM factor, IMM offset)) { if (!offset) { - COMPCALL(lea_l_rr_indexed)(d,s,index,factor); + COMPCALL(lea_l_rr_indexed)(d, s, index, factor); return; } - CLOBBER_LEA; - s=readreg(s,4); - index=readreg(index,4); - d=writereg(d,4); + s = readreg(s, 4); + index = readreg(index, 4); + d = writereg(d, 4); - raw_lea_l_brr_indexed(d,s,index,factor,offset); + raw_lea_l_brr_indexed(d, s, index, factor, offset); unlock2(d); unlock2(index); unlock2(s); @@ -1150,192 +192,41 @@ MENDFUNC(5,lea_l_brr_indexed,(W4 d, RR4 s, RR4 index, IMM factor, IMM offset)) MIDFUNC(4,lea_l_rr_indexed,(W4 d, RR4 s, RR4 index, IMM factor)) { - CLOBBER_LEA; - s=readreg(s,4); - index=readreg(index,4); - d=writereg(d,4); + s=readreg(s, 4); + index=readreg(index, 4); + d=writereg(d, 4); - raw_lea_l_rr_indexed(d,s,index,factor); + raw_lea_l_rr_indexed(d, s, index, factor); unlock2(d); unlock2(index); unlock2(s); } MENDFUNC(4,lea_l_rr_indexed,(W4 d, RR4 s, RR4 index, IMM factor)) -/* write d to the long at the address contained in s+offset */ -MIDFUNC(3,mov_l_bRr,(RR4 d, RR4 s, IMM offset)) -{ - int dreg=d; - if (isconst(d)) { - COMPCALL(mov_l_mr)(live.state[d].val+offset,s); - return; - } - - CLOBBER_MOV; - s=readreg(s,4); - d=readreg_offset(d,4); - offset+=get_offset(dreg); - - raw_mov_l_bRr(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_l_bRr,(RR4 d, RR4 s, IMM offset)) - -/* write the word at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_w_bRr,(RR4 d, RR2 s, IMM offset)) -{ - int dreg=d; - - if (isconst(d)) { - COMPCALL(mov_w_mr)(live.state[d].val+offset,s); - return; - } - - CLOBBER_MOV; - s=readreg(s,2); - d=readreg_offset(d,4); - offset+=get_offset(dreg); - raw_mov_w_bRr(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_w_bRr,(RR4 d, RR2 s, IMM offset)) - -MIDFUNC(3,mov_b_bRr,(RR4 d, RR1 s, IMM offset)) -{ - int dreg=d; - if (isconst(d)) { - COMPCALL(mov_b_mr)(live.state[d].val+offset,s); - return; - } - - CLOBBER_MOV; - s=readreg(s,1); - d=readreg_offset(d,4); - offset+=get_offset(dreg); - raw_mov_b_bRr(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_b_bRr,(RR4 d, RR1 s, IMM offset)) - -/* write d to the long at the address contained in s+offset */ -MIDFUNC(3,mov_l_bRr24,(RR4 d, RR4 s, IMM offset)) -{ - int dreg=d; - if (isconst(d)) { - COMPCALL(mov_l_mr)((live.state[d].val & 0x00ffffff)+offset,s); - return; - } - - CLOBBER_MOV; - s=readreg(s,4); - d=readreg_offset(d,4); - offset+=get_offset(dreg); - - raw_mov_l_bRr24(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_l_bRr24,(RR4 d, RR4 s, IMM offset)) - -/* write the word at the address contained in s+offset and store in d */ -MIDFUNC(3,mov_w_bRr24,(RR4 d, RR2 s, IMM offset)) -{ - int dreg=d; - - if (isconst(d)) { - COMPCALL(mov_w_mr)((live.state[d].val & 0x00ffffff)+offset,s); - return; - } - - CLOBBER_MOV; - s=readreg(s,2); - d=readreg_offset(d,4); - offset+=get_offset(dreg); - raw_mov_w_bRr24(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_w_bRr24,(RR4 d, RR2 s, IMM offset)) - -MIDFUNC(3,mov_b_bRr24,(RR4 d, RR1 s, IMM offset)) -{ - int dreg=d; - if (isconst(d)) { - COMPCALL(mov_b_mr)((live.state[d].val & 0x00ffffff)+offset,s); - return; - } - - CLOBBER_MOV; - s=readreg(s,1); - d=readreg_offset(d,4); - offset+=get_offset(dreg); - raw_mov_b_bRr24(d,s,offset); - unlock2(d); - unlock2(s); -} -MENDFUNC(3,mov_b_bRr24,(RR4 d, RR1 s, IMM offset)) - -MIDFUNC(1,mid_bswap_32,(RW4 r)) -{ - - if (isconst(r)) { - uae_u32 oldv=live.state[r].val; - live.state[r].val=reverse32(oldv); - return; - } - - CLOBBER_SW32; - r=rmw(r,4,4); - raw_bswap_32(r); - unlock2(r); -} -MENDFUNC(1,mid_bswap_32,(RW4 r)) - -MIDFUNC(1,mid_bswap_16,(RW2 r)) -{ - if (isconst(r)) { - uae_u32 oldv=live.state[r].val; - live.state[r].val=((oldv>>8)&0xff) | ((oldv<<8)&0xff00) | - (oldv&0xffff0000); - return; - } - - CLOBBER_SW16; - r=rmw(r,2,2); - - raw_bswap_16(r); - unlock2(r); -} -MENDFUNC(1,mid_bswap_16,(RW2 r)) - MIDFUNC(2,mov_l_rr,(W4 d, RR4 s)) { int olds; - if (d==s) { /* How pointless! */ + if (d == s) { /* How pointless! */ return; } if (isconst(s)) { - COMPCALL(mov_l_ri)(d,live.state[s].val); + COMPCALL(mov_l_ri)(d, live.state[s].val); return; } - olds=s; + olds = s; disassociate(d); - s=readreg_offset(s,4); - live.state[d].realreg=s; - live.state[d].realind=live.nat[s].nholds; - live.state[d].val=live.state[olds].val; - live.state[d].validsize=4; - live.state[d].dirtysize=4; - set_status(d,DIRTY); + s = readreg(s, 4); + live.state[d].realreg = s; + live.state[d].realind = live.nat[s].nholds; + live.state[d].val = live.state[olds].val; + live.state[d].validsize = 4; + live.state[d].dirtysize = 4; + set_status(d, DIRTY); - live.nat[s].holds[live.nat[s].nholds]=d; + live.nat[s].holds[live.nat[s].nholds] = d; live.nat[s].nholds++; - log_clobberreg(d); - D2(panicbug("Added %d to nreg %d(%d), now holds %d regs", d,s,live.state[d].realind,live.nat[s].nholds)); + D2(panicbug("Added %d to nreg %d(%d), now holds %d regs", d, s, live.state[d].realind, live.nat[s].nholds)); unlock2(s); } MENDFUNC(2,mov_l_rr,(W4 d, RR4 s)) @@ -1343,596 +234,122 @@ MENDFUNC(2,mov_l_rr,(W4 d, RR4 s)) MIDFUNC(2,mov_l_mr,(IMM d, RR4 s)) { if (isconst(s)) { - COMPCALL(mov_l_mi)(d,live.state[s].val); + COMPCALL(mov_l_mi)(d, live.state[s].val); return; } - CLOBBER_MOV; - s=readreg(s,4); + s = readreg(s, 4); - raw_mov_l_mr(d,s); + raw_mov_l_mr(d, s); unlock2(s); } MENDFUNC(2,mov_l_mr,(IMM d, RR4 s)) -MIDFUNC(2,mov_w_mr,(IMM d, RR2 s)) -{ - if (isconst(s)) { - COMPCALL(mov_w_mi)(d,(uae_u16)live.state[s].val); - return; - } - CLOBBER_MOV; - s=readreg(s,2); - - raw_mov_w_mr(d,s); - unlock2(s); -} -MENDFUNC(2,mov_w_mr,(IMM d, RR2 s)) - -MIDFUNC(2,mov_w_rm,(W2 d, IMM s)) -{ - CLOBBER_MOV; - d=writereg(d,2); - - raw_mov_w_rm(d,s); - unlock2(d); -} -MENDFUNC(2,mov_w_rm,(W2 d, IMM s)) - -MIDFUNC(2,mov_b_mr,(IMM d, RR1 s)) -{ - if (isconst(s)) { - COMPCALL(mov_b_mi)(d,(uae_u8)live.state[s].val); - return; - } - - CLOBBER_MOV; - s=readreg(s,1); - - raw_mov_b_mr(d,s); - unlock2(s); -} -MENDFUNC(2,mov_b_mr,(IMM d, RR1 s)) - -MIDFUNC(2,mov_b_rm,(W1 d, IMM s)) -{ - CLOBBER_MOV; - d=writereg(d,1); - - raw_mov_b_rm(d,s); - unlock2(d); -} -MENDFUNC(2,mov_b_rm,(W1 d, IMM s)) - MIDFUNC(2,mov_l_ri,(W4 d, IMM s)) { - set_const(d,s); + set_const(d, s); return; } MENDFUNC(2,mov_l_ri,(W4 d, IMM s)) MIDFUNC(2,mov_w_ri,(W2 d, IMM s)) { - CLOBBER_MOV; - d=writereg(d,2); + d = writereg(d, 2); - raw_mov_w_ri(d,s); + raw_mov_w_ri(d, s); unlock2(d); } MENDFUNC(2,mov_w_ri,(W2 d, IMM s)) MIDFUNC(2,mov_b_ri,(W1 d, IMM s)) { - CLOBBER_MOV; - d=writereg(d,1); + d = writereg(d, 1); - raw_mov_b_ri(d,s); + raw_mov_b_ri(d, s); unlock2(d); } MENDFUNC(2,mov_b_ri,(W1 d, IMM s)) -MIDFUNC(2,test_l_ri,(RR4 d, IMM i)) -{ - CLOBBER_TEST; - d=readreg(d,4); - - raw_test_l_ri(d,i); - unlock2(d); -} -MENDFUNC(2,test_l_ri,(RR4 d, IMM i)) - -MIDFUNC(2,test_l_rr,(RR4 d, RR4 s)) -{ - CLOBBER_TEST; - d=readreg(d,4); - s=readreg(s,4); - - raw_test_l_rr(d,s);; - unlock2(d); - unlock2(s); -} -MENDFUNC(2,test_l_rr,(RR4 d, RR4 s)) - MIDFUNC(2,test_w_rr,(RR2 d, RR2 s)) { - CLOBBER_TEST; - d=readreg(d,2); - s=readreg(s,2); + // Only EQ/NE relevant for caller -> much simpler compare in raw... - raw_test_w_rr(d,s); + clobber_flags(); + + d = readreg(d, 2); + s = readreg(s, 2); + + raw_test_eq_w_rr(d, s); unlock2(d); unlock2(s); } MENDFUNC(2,test_w_rr,(RR2 d, RR2 s)) -MIDFUNC(2,test_b_rr,(RR1 d, RR1 s)) -{ - CLOBBER_TEST; - d=readreg(d,1); - s=readreg(s,1); - - raw_test_b_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,test_b_rr,(RR1 d, RR1 s)) - -MIDFUNC(2,and_l_ri,(RW4 d, IMM i)) -{ - if (isconst(d) && !needflags) { - live.state[d].val &= i; - return; - } - - CLOBBER_AND; - d=rmw(d,4,4); - - raw_and_l_ri(d,i); - unlock2(d); -} -MENDFUNC(2,and_l_ri,(RW4 d, IMM i)) - -MIDFUNC(2,and_l,(RW4 d, RR4 s)) -{ - CLOBBER_AND; - s=readreg(s,4); - d=rmw(d,4,4); - - raw_and_l(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,and_l,(RW4 d, RR4 s)) - -MIDFUNC(2,and_w,(RW2 d, RR2 s)) -{ - CLOBBER_AND; - s=readreg(s,2); - d=rmw(d,2,2); - - raw_and_w(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,and_w,(RW2 d, RR2 s)) - -MIDFUNC(2,and_b,(RW1 d, RR1 s)) -{ - CLOBBER_AND; - s=readreg(s,1); - d=rmw(d,1,1); - - raw_and_b(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,and_b,(RW1 d, RR1 s)) - -MIDFUNC(2,or_l_ri,(RW4 d, IMM i)) -{ - if (isconst(d) && !needflags) { - live.state[d].val|=i; - return; - } - CLOBBER_OR; - d=rmw(d,4,4); - - raw_or_l_ri(d,i); - unlock2(d); -} -MENDFUNC(2,or_l_ri,(RW4 d, IMM i)) - -MIDFUNC(2,or_l,(RW4 d, RR4 s)) -{ - if (isconst(d) && isconst(s) && !needflags) { - live.state[d].val|=live.state[s].val; - return; - } - CLOBBER_OR; - s=readreg(s,4); - d=rmw(d,4,4); - - raw_or_l(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,or_l,(RW4 d, RR4 s)) - -MIDFUNC(2,or_w,(RW2 d, RR2 s)) -{ - CLOBBER_OR; - s=readreg(s,2); - d=rmw(d,2,2); - - raw_or_w(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,or_w,(RW2 d, RR2 s)) - -MIDFUNC(2,or_b,(RW1 d, RR1 s)) -{ - CLOBBER_OR; - s=readreg(s,1); - d=rmw(d,1,1); - - raw_or_b(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,or_b,(RW1 d, RR1 s)) - -MIDFUNC(2,adc_l,(RW4 d, RR4 s)) -{ - CLOBBER_ADC; - s=readreg(s,4); - d=rmw(d,4,4); - - raw_adc_l(d,s); - - unlock2(d); - unlock2(s); -} -MENDFUNC(2,adc_l,(RW4 d, RR4 s)) - -MIDFUNC(2,adc_w,(RW2 d, RR2 s)) -{ - CLOBBER_ADC; - s=readreg(s,2); - d=rmw(d,2,2); - - raw_adc_w(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,adc_w,(RW2 d, RR2 s)) - -MIDFUNC(2,adc_b,(RW1 d, RR1 s)) -{ - CLOBBER_ADC; - s=readreg(s,1); - d=rmw(d,1,1); - - raw_adc_b(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,adc_b,(RW1 d, RR1 s)) - MIDFUNC(2,add_l,(RW4 d, RR4 s)) { if (isconst(s)) { - COMPCALL(add_l_ri)(d,live.state[s].val); + COMPCALL(add_l_ri)(d, live.state[s].val); return; } - CLOBBER_ADD; - s=readreg(s,4); - d=rmw(d,4,4); + s=readreg(s, 4); + d=rmw(d, 4, 4); - raw_add_l(d,s); + raw_add_l(d, s); unlock2(d); unlock2(s); } MENDFUNC(2,add_l,(RW4 d, RR4 s)) -MIDFUNC(2,add_w,(RW2 d, RR2 s)) -{ - if (isconst(s)) { - COMPCALL(add_w_ri)(d,(uae_u16)live.state[s].val); - return; - } - - CLOBBER_ADD; - s=readreg(s,2); - d=rmw(d,2,2); - - raw_add_w(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,add_w,(RW2 d, RR2 s)) - -MIDFUNC(2,add_b,(RW1 d, RR1 s)) -{ - if (isconst(s)) { - COMPCALL(add_b_ri)(d,(uae_u8)live.state[s].val); - return; - } - - CLOBBER_ADD; - s=readreg(s,1); - d=rmw(d,1,1); - - raw_add_b(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,add_b,(RW1 d, RR1 s)) - MIDFUNC(2,sub_l_ri,(RW4 d, IMM i)) { - if (!i && !needflags) - return; - if (isconst(d) && !needflags) { - live.state[d].val-=i; + if (!i) + return; + if (isconst(d)) { + live.state[d].val -= i; return; } -#if USE_OFFSET - if (!needflags) { - add_offset(d,-i); - return; - } -#endif - CLOBBER_SUB; - d=rmw(d,4,4); + d = rmw(d, 4, 4); - raw_sub_l_ri(d,i); + raw_sub_l_ri(d, i); unlock2(d); } MENDFUNC(2,sub_l_ri,(RW4 d, IMM i)) MIDFUNC(2,sub_w_ri,(RW2 d, IMM i)) { - if (!i && !needflags) - return; + // Caller needs flags... + clobber_flags(); - CLOBBER_SUB; - d=rmw(d,2,2); + d = rmw(d, 2, 2); - raw_sub_w_ri(d,i); + raw_sub_w_ri(d, i); unlock2(d); } MENDFUNC(2,sub_w_ri,(RW2 d, IMM i)) -MIDFUNC(2,sub_b_ri,(RW1 d, IMM i)) -{ - if (!i && !needflags) - return; - - CLOBBER_SUB; - d=rmw(d,1,1); - - raw_sub_b_ri(d,i); - - unlock2(d); -} -MENDFUNC(2,sub_b_ri,(RW1 d, IMM i)) - MIDFUNC(2,add_l_ri,(RW4 d, IMM i)) { - if (!i && !needflags) - return; - if (isconst(d) && !needflags) { - live.state[d].val+=i; + if (!i) + return; + if (isconst(d)) { + live.state[d].val += i; return; } -#if USE_OFFSET - if (!needflags) { - add_offset(d,i); - return; - } -#endif - CLOBBER_ADD; - d=rmw(d,4,4); - raw_add_l_ri(d,i); + + d=rmw(d, 4, 4); + raw_add_l_ri(d, i); unlock2(d); } MENDFUNC(2,add_l_ri,(RW4 d, IMM i)) -MIDFUNC(2,add_w_ri,(RW2 d, IMM i)) -{ - if (!i && !needflags) - return; - - CLOBBER_ADD; - d=rmw(d,2,2); - - raw_add_w_ri(d,i); - unlock2(d); -} -MENDFUNC(2,add_w_ri,(RW2 d, IMM i)) - -MIDFUNC(2,add_b_ri,(RW1 d, IMM i)) -{ - if (!i && !needflags) - return; - - CLOBBER_ADD; - d=rmw(d,1,1); - - raw_add_b_ri(d,i); - - unlock2(d); -} -MENDFUNC(2,add_b_ri,(RW1 d, IMM i)) - -MIDFUNC(2,sbb_l,(RW4 d, RR4 s)) -{ - CLOBBER_SBB; - s=readreg(s,4); - d=rmw(d,4,4); - - raw_sbb_l(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,sbb_l,(RW4 d, RR4 s)) - -MIDFUNC(2,sbb_w,(RW2 d, RR2 s)) -{ - CLOBBER_SBB; - s=readreg(s,2); - d=rmw(d,2,2); - - raw_sbb_w(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,sbb_w,(RW2 d, RR2 s)) - -MIDFUNC(2,sbb_b,(RW1 d, RR1 s)) -{ - CLOBBER_SBB; - s=readreg(s,1); - d=rmw(d,1,1); - - raw_sbb_b(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,sbb_b,(RW1 d, RR1 s)) - -MIDFUNC(2,sub_l,(RW4 d, RR4 s)) -{ - if (isconst(s)) { - COMPCALL(sub_l_ri)(d,live.state[s].val); - return; - } - - CLOBBER_SUB; - s=readreg(s,4); - d=rmw(d,4,4); - - raw_sub_l(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,sub_l,(RW4 d, RR4 s)) - -MIDFUNC(2,sub_w,(RW2 d, RR2 s)) -{ - if (isconst(s)) { - COMPCALL(sub_w_ri)(d,(uae_u16)live.state[s].val); - return; - } - - CLOBBER_SUB; - s=readreg(s,2); - d=rmw(d,2,2); - - raw_sub_w(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,sub_w,(RW2 d, RR2 s)) - -MIDFUNC(2,sub_b,(RW1 d, RR1 s)) -{ - if (isconst(s)) { - COMPCALL(sub_b_ri)(d,(uae_u8)live.state[s].val); - return; - } - - CLOBBER_SUB; - s=readreg(s,1); - d=rmw(d,1,1); - - raw_sub_b(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,sub_b,(RW1 d, RR1 s)) - -MIDFUNC(2,cmp_l,(RR4 d, RR4 s)) -{ - CLOBBER_CMP; - s=readreg(s,4); - d=readreg(d,4); - - raw_cmp_l(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,cmp_l,(RR4 d, RR4 s)) - -MIDFUNC(2,cmp_w,(RR2 d, RR2 s)) -{ - CLOBBER_CMP; - s=readreg(s,2); - d=readreg(d,2); - - raw_cmp_w(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,cmp_w,(RR2 d, RR2 s)) - -MIDFUNC(2,cmp_b,(RR1 d, RR1 s)) -{ - CLOBBER_CMP; - s=readreg(s,1); - d=readreg(d,1); - - raw_cmp_b(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,cmp_b,(RR1 d, RR1 s)) - -MIDFUNC(2,xor_l,(RW4 d, RR4 s)) -{ - CLOBBER_XOR; - s=readreg(s,4); - d=rmw(d,4,4); - - raw_xor_l(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,xor_l,(RW4 d, RR4 s)) - -MIDFUNC(2,xor_w,(RW2 d, RR2 s)) -{ - CLOBBER_XOR; - s=readreg(s,2); - d=rmw(d,2,2); - - raw_xor_w(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,xor_w,(RW2 d, RR2 s)) - -MIDFUNC(2,xor_b,(RW1 d, RR1 s)) -{ - CLOBBER_XOR; - s=readreg(s,1); - d=rmw(d,1,1); - - raw_xor_b(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,xor_b,(RW1 d, RR1 s)) - MIDFUNC(5,call_r_02,(RR4 r, RR4 in1, RR4 in2, IMM isize1, IMM isize2)) { clobber_flags(); - in1=readreg_specific(in1,isize1,REG_PAR1); - in2=readreg_specific(in2,isize2,REG_PAR2); - r=readreg(r,4); + in1 = readreg_specific(in1, isize1, REG_PAR1); + in2 = readreg_specific(in2, isize2, REG_PAR2); + r = readreg(r, 4); prepare_for_call_1(); unlock2(r); unlock2(in1); @@ -1944,36 +361,36 @@ MENDFUNC(5,call_r_02,(RR4 r, RR4 in1, RR4 in2, IMM isize1, IMM isize2)) MIDFUNC(5,call_r_11,(W4 out1, RR4 r, RR4 in1, IMM osize, IMM isize)) { - clobber_flags(); - if (osize==4) { - if (out1!=in1 && out1!=r) { - COMPCALL(forget_about)(out1); - } - } - else { - tomem_c(out1); + clobber_flags(); + if (osize == 4) { + if (out1 != in1 && out1 != r) { + COMPCALL(forget_about)(out1); } + } + else { + tomem_c(out1); + } - in1=readreg_specific(in1,isize,REG_PAR1); - r=readreg(r,4); - prepare_for_call_1(); + in1 = readreg_specific(in1, isize, REG_PAR1); + r = readreg(r, 4); + prepare_for_call_1(); - unlock2(in1); - unlock2(r); + unlock2(in1); + unlock2(r); - prepare_for_call_2(); - compemu_raw_call_r(r); + prepare_for_call_2(); + compemu_raw_call_r(r); - live.nat[REG_RESULT].holds[0]=out1; - live.nat[REG_RESULT].nholds=1; - live.nat[REG_RESULT].touched=touchcnt++; + live.nat[REG_RESULT].holds[0] = out1; + live.nat[REG_RESULT].nholds = 1; + live.nat[REG_RESULT].touched = touchcnt++; - live.state[out1].realreg=REG_RESULT; - live.state[out1].realind=0; - live.state[out1].val=0; - live.state[out1].validsize=osize; - live.state[out1].dirtysize=osize; - set_status(out1,DIRTY); + live.state[out1].realreg = REG_RESULT; + live.state[out1].realind = 0; + live.state[out1].val = 0; + live.state[out1].validsize = osize; + live.state[out1].dirtysize = osize; + set_status(out1, DIRTY); } MENDFUNC(5,call_r_11,(W4 out1, RR4 r, RR4 in1, IMM osize, IMM isize)) @@ -1981,9 +398,9 @@ MENDFUNC(5,call_r_11,(W4 out1, RR4 r, RR4 in1, IMM osize, IMM isize)) MIDFUNC(1,forget_about,(W4 r)) { if (isinreg(r)) - disassociate(r); - live.state[r].val=0; - set_status(r,UNDEF); + disassociate(r); + live.state[r].val = 0; + set_status(r, UNDEF); } MENDFUNC(1,forget_about,(W4 r)) @@ -1991,12 +408,13 @@ MENDFUNC(1,forget_about,(W4 r)) MIDFUNC(1,f_forget_about,(FW r)) { if (f_isinreg(r)) - f_disassociate(r); + f_disassociate(r); live.fate[r].status=UNDEF; } MENDFUNC(1,f_forget_about,(FW r)) #endif + // ARM optimized functions MIDFUNC(2,arm_ADD_l,(RW4 d, RR4 s)) @@ -2006,10 +424,10 @@ MIDFUNC(2,arm_ADD_l,(RW4 d, RR4 s)) return; } - s=readreg(s,4); - d=rmw(d,4,4); + s=readreg(s, 4); + d=rmw(d, 4, 4); - raw_ADD_l_rr(d,s); + raw_ADD_l_rr(d, s); unlock2(d); unlock2(s); @@ -2018,186 +436,58 @@ MENDFUNC(2,arm_ADD_l,(RW4 d, RR4 s)) MIDFUNC(2,arm_ADD_l_ri,(RW4 d, IMM i)) { - if (!i) return; + if (!i) + return; if (isconst(d)) { - live.state[d].val+=i; + live.state[d].val += i; return; } -#if USE_OFFSET - add_offset(d,i); - return; -#endif - d=rmw(d,4,4); - raw_LDR_l_ri(REG_WORK1, i); - raw_ADD_l_rr(d,REG_WORK1); + d = rmw(d, 4, 4); + + if(i >= 0 && i < 256) { + raw_ADD_l_rri(d, d, i); + } else { + raw_LDR_l_ri(REG_WORK1, i); + raw_ADD_l_rr(d, REG_WORK1); + } + unlock2(d); } MENDFUNC(2,arm_ADD_l_ri,(RW4 d, IMM i)) MIDFUNC(2,arm_ADD_l_ri8,(RW4 d, IMM i)) { - if (!i) return; + if (!i) + return; if (isconst(d)) { - live.state[d].val+=i; + live.state[d].val += i; return; } -#if USE_OFFSET - add_offset(d,i); - return; -#endif - d=rmw(d,4,4); - raw_ADD_l_rri(d,d,i); + d=rmw(d, 4, 4); + + raw_ADD_l_rri(d, d, i); unlock2(d); } MENDFUNC(2,arm_ADD_l_ri8,(RW4 d, IMM i)) MIDFUNC(2,arm_SUB_l_ri8,(RW4 d, IMM i)) { - if (!i) return; + if (!i) + return; if (isconst(d)) { - live.state[d].val-=i; + live.state[d].val -= i; return; } -#if USE_OFFSET - add_offset(d,-i); - return; -#endif - d=rmw(d,4,4); - raw_SUB_l_rri(d,d,i); + d=rmw(d, 4, 4); + + raw_SUB_l_rri(d, d, i); unlock2(d); } MENDFUNC(2,arm_ADD_l_ri8,(RW4 d, IMM i)) -MIDFUNC(2,arm_AND_l,(RW4 d, RR4 s)) -{ - s=readreg(s,4); - d=rmw(d,4,4); - - raw_AND_l_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,arm_AND_l,(RW4 d, RR4 s)) - -MIDFUNC(2,arm_AND_w,(RW2 d, RR2 s)) -{ - s=readreg(s,2); - d=rmw(d,2,2); - - raw_AND_w_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,arm_AND_w,(RW2 d, RR2 s)) - -MIDFUNC(2,arm_AND_b,(RW1 d, RR1 s)) -{ - s=readreg(s,1); - d=rmw(d,1,1); - - raw_AND_b_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,arm_AND_b,(RW1 d, RR1 s)) - -MIDFUNC(2,arm_AND_l_ri8,(RW4 d, IMM i)) -{ - if (isconst(d)) { - live.state[d].val &= i; - return; - } - - d=rmw(d,4,4); - - raw_AND_l_ri(d,i); - unlock2(d); -} -MENDFUNC(2,arm_AND_l_ri8,(RW4 d, IMM i)) - -MIDFUNC(2,arm_EOR_b,(RW1 d, RR1 s)) -{ - s=readreg(s,1); - d=rmw(d,1,1); - - raw_EOR_b_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,arm_EOR_b,(RW1 d, RR1 s)) - -MIDFUNC(2,arm_EOR_l,(RW4 d, RR4 s)) -{ - s=readreg(s,4); - d=rmw(d,4,4); - - raw_EOR_l_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,arm_EOR_l,(RW4 d, RR4 s)) - -MIDFUNC(2,arm_EOR_w,(RW2 d, RR2 s)) -{ - s=readreg(s,2); - d=rmw(d,2,2); - - raw_EOR_w_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,arm_EOR_w,(RW2 d, RR2 s)) - -MIDFUNC(2,arm_ORR_b,(RW1 d, RR1 s)) -{ - s=readreg(s,1); - d=rmw(d,1,1); - - raw_ORR_b_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,arm_ORR_b,(RW1 d, RR1 s)) - -MIDFUNC(2,arm_ORR_l,(RW4 d, RR4 s)) -{ - if (isconst(d) && isconst(s)) { - live.state[d].val|=live.state[s].val; - return; - } - s=readreg(s,4); - d=rmw(d,4,4); - - raw_ORR_l_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,arm_ORR_l,(RW4 d, RR4 s)) - -MIDFUNC(2,arm_ORR_w,(RW2 d, RR2 s)) -{ - s=readreg(s,2); - d=rmw(d,2,2); - - raw_ORR_w_rr(d,s); - unlock2(d); - unlock2(s); -} -MENDFUNC(2,arm_ORR_w,(RW2 d, RR2 s)) - -MIDFUNC(2,arm_ROR_l_ri8,(RW4 r, IMM i)) -{ - if (!i) - return; - - r=rmw(r,4,4); - raw_ROR_l_ri(r,i); - unlock2(r); -} -MENDFUNC(2,arm_ROR_l_ri8,(RW4 r, IMM i)) // Other static inline void flush_cpu_icache(void *start, void *stop) diff --git a/src/jit/compemu_midfunc_arm.h b/src/jit/compemu_midfunc_arm.h index 703e3fd3..bd21cda0 100644 --- a/src/jit/compemu_midfunc_arm.h +++ b/src/jit/compemu_midfunc_arm.h @@ -36,155 +36,34 @@ DECLARE_MIDFUNC(arm_ADD_l(RW4 d, RR4 s)); DECLARE_MIDFUNC(arm_ADD_l_ri(RW4 d, IMM i)); DECLARE_MIDFUNC(arm_ADD_l_ri8(RW4 d, IMM i)); DECLARE_MIDFUNC(arm_SUB_l_ri8(RW4 d, IMM i)); -DECLARE_MIDFUNC(arm_AND_b(RW1 d, RR1 s)); -DECLARE_MIDFUNC(arm_AND_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(arm_AND_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(arm_AND_l_ri8(RW4 d, IMM i)); -DECLARE_MIDFUNC(arm_EOR_b(RW1 d, RR1 s)); -DECLARE_MIDFUNC(arm_EOR_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(arm_EOR_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(arm_ORR_b(RW1 d, RR1 s)); -DECLARE_MIDFUNC(arm_ORR_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(arm_ORR_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(arm_ROR_l_ri8(RW4 r, IMM i)); // Emulated midfunc -DECLARE_MIDFUNC(bt_l_ri(RR4 r, IMM i)); -DECLARE_MIDFUNC(bt_l_rr(RR4 r, RR4 b)); -DECLARE_MIDFUNC(btc_l_rr(RW4 r, RR4 b)); -DECLARE_MIDFUNC(bts_l_rr(RW4 r, RR4 b)); -DECLARE_MIDFUNC(btr_l_rr(RW4 r, RR4 b)); -DECLARE_MIDFUNC(mov_l_rm(W4 d, IMM s)); -DECLARE_MIDFUNC(mov_l_rm_indexed(W4 d, IMM base, RR4 index, IMM factor)); DECLARE_MIDFUNC(mov_l_mi(IMM d, IMM s)); -DECLARE_MIDFUNC(mov_w_mi(IMM d, IMM s)); -DECLARE_MIDFUNC(mov_b_mi(IMM d, IMM s)); -DECLARE_MIDFUNC(rol_b_ri(RW1 r, IMM i)); -DECLARE_MIDFUNC(rol_w_ri(RW2 r, IMM i)); -DECLARE_MIDFUNC(rol_l_rr(RW4 d, RR1 r)); -DECLARE_MIDFUNC(rol_w_rr(RW2 d, RR1 r)); -DECLARE_MIDFUNC(rol_b_rr(RW1 d, RR1 r)); -DECLARE_MIDFUNC(shll_l_rr(RW4 d, RR1 r)); -DECLARE_MIDFUNC(shll_w_rr(RW2 d, RR1 r)); -DECLARE_MIDFUNC(shll_b_rr(RW1 d, RR1 r)); -DECLARE_MIDFUNC(ror_b_ri(RR1 r, IMM i)); -DECLARE_MIDFUNC(ror_w_ri(RR2 r, IMM i)); -DECLARE_MIDFUNC(ror_l_ri(RR4 r, IMM i)); -DECLARE_MIDFUNC(ror_l_rr(RR4 d, RR1 r)); -DECLARE_MIDFUNC(ror_w_rr(RR2 d, RR1 r)); -DECLARE_MIDFUNC(ror_b_rr(RR1 d, RR1 r)); -DECLARE_MIDFUNC(shrl_l_rr(RW4 d, RR1 r)); -DECLARE_MIDFUNC(shrl_w_rr(RW2 d, RR1 r)); -DECLARE_MIDFUNC(shrl_b_rr(RW1 d, RR1 r)); -DECLARE_MIDFUNC(shra_l_rr(RW4 d, RR1 r)); -DECLARE_MIDFUNC(shra_w_rr(RW2 d, RR1 r)); -DECLARE_MIDFUNC(shra_b_rr(RW1 d, RR1 r)); DECLARE_MIDFUNC(shll_l_ri(RW4 r, IMM i)); -DECLARE_MIDFUNC(shll_w_ri(RW2 r, IMM i)); -DECLARE_MIDFUNC(shll_b_ri(RW1 r, IMM i)); -DECLARE_MIDFUNC(shrl_l_ri(RW4 r, IMM i)); -DECLARE_MIDFUNC(shrl_w_ri(RW2 r, IMM i)); -DECLARE_MIDFUNC(shrl_b_ri(RW1 r, IMM i)); -DECLARE_MIDFUNC(shra_l_ri(RW4 r, IMM i)); -DECLARE_MIDFUNC(shra_w_ri(RW2 r, IMM i)); -DECLARE_MIDFUNC(shra_b_ri(RW1 r, IMM i)); -DECLARE_MIDFUNC(setcc(W1 d, IMM cc)); -DECLARE_MIDFUNC(setcc_m(IMM d, IMM cc)); -DECLARE_MIDFUNC(cmov_l_rr(RW4 d, RR4 s, IMM cc)); -DECLARE_MIDFUNC(bsf_l_rr(W4 d, RR4 s)); DECLARE_MIDFUNC(pop_l(W4 d)); DECLARE_MIDFUNC(push_l(RR4 s)); DECLARE_MIDFUNC(sign_extend_16_rr(W4 d, RR2 s)); -DECLARE_MIDFUNC(sign_extend_8_rr(W4 d, RR1 s)); -DECLARE_MIDFUNC(zero_extend_16_rr(W4 d, RR2 s)); -DECLARE_MIDFUNC(zero_extend_8_rr(W4 d, RR1 s)); -DECLARE_MIDFUNC(imul_64_32(RW4 d, RW4 s)); -DECLARE_MIDFUNC(mul_64_32(RW4 d, RW4 s)); -DECLARE_MIDFUNC(imul_32_32(RW4 d, RR4 s)); DECLARE_MIDFUNC(mov_b_rr(W1 d, RR1 s)); DECLARE_MIDFUNC(mov_w_rr(W2 d, RR2 s)); -DECLARE_MIDFUNC(mov_l_rR(W4 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_w_rR(W2 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_l_brR(W4 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_w_brR(W2 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_b_brR(W1 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_l_brR24(W4 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_w_brR24(W2 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_b_brR24(W1 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_l_Ri(RR4 d, IMM i, IMM offset)); -DECLARE_MIDFUNC(mov_w_Ri(RR4 d, IMM i, IMM offset)); -DECLARE_MIDFUNC(mov_l_Rr(RR4 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_w_Rr(RR4 d, RR2 s, IMM offset)); DECLARE_MIDFUNC(lea_l_brr(W4 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(lea_l_brr24(W4 d, RR4 s, IMM offset)); DECLARE_MIDFUNC(lea_l_brr_indexed(W4 d, RR4 s, RR4 index, IMM factor, IMM offset)); DECLARE_MIDFUNC(lea_l_rr_indexed(W4 d, RR4 s, RR4 index, IMM factor)); -DECLARE_MIDFUNC(mov_l_bRr(RR4 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_w_bRr(RR4 d, RR2 s, IMM offset)); -DECLARE_MIDFUNC(mov_b_bRr(RR4 d, RR1 s, IMM offset)); -DECLARE_MIDFUNC(mov_l_bRr24(RR4 d, RR4 s, IMM offset)); -DECLARE_MIDFUNC(mov_w_bRr24(RR4 d, RR2 s, IMM offset)); -DECLARE_MIDFUNC(mov_b_bRr24(RR4 d, RR1 s, IMM offset)); -DECLARE_MIDFUNC(mid_bswap_32(RW4 r)); -DECLARE_MIDFUNC(mid_bswap_16(RW2 r)); DECLARE_MIDFUNC(mov_l_rr(W4 d, RR4 s)); DECLARE_MIDFUNC(mov_l_mr(IMM d, RR4 s)); -DECLARE_MIDFUNC(mov_w_mr(IMM d, RR2 s)); -DECLARE_MIDFUNC(mov_w_rm(W2 d, IMM s)); -DECLARE_MIDFUNC(mov_b_mr(IMM d, RR1 s)); DECLARE_MIDFUNC(mov_b_rm(W1 d, IMM s)); DECLARE_MIDFUNC(mov_l_ri(W4 d, IMM s)); DECLARE_MIDFUNC(mov_w_ri(W2 d, IMM s)); DECLARE_MIDFUNC(mov_b_ri(W1 d, IMM s)); -DECLARE_MIDFUNC(test_l_ri(RR4 d, IMM i)); -DECLARE_MIDFUNC(test_l_rr(RR4 d, RR4 s)); DECLARE_MIDFUNC(test_w_rr(RR2 d, RR2 s)); -DECLARE_MIDFUNC(test_b_rr(RR1 d, RR1 s)); -DECLARE_MIDFUNC(and_l_ri(RW4 d, IMM i)); -DECLARE_MIDFUNC(and_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(and_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(and_b(RW1 d, RR1 s)); -DECLARE_MIDFUNC(or_l_ri(RW4 d, IMM i)); -DECLARE_MIDFUNC(or_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(or_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(or_b(RW1 d, RR1 s)); -DECLARE_MIDFUNC(adc_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(adc_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(adc_b(RW1 d, RR1 s)); DECLARE_MIDFUNC(add_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(add_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(add_b(RW1 d, RR1 s)); DECLARE_MIDFUNC(sub_l_ri(RW4 d, IMM i)); DECLARE_MIDFUNC(sub_w_ri(RW2 d, IMM i)); -DECLARE_MIDFUNC(sub_b_ri(RW1 d, IMM i)); DECLARE_MIDFUNC(add_l_ri(RW4 d, IMM i)); -DECLARE_MIDFUNC(add_w_ri(RW2 d, IMM i)); -DECLARE_MIDFUNC(add_b_ri(RW1 d, IMM i)); -DECLARE_MIDFUNC(sbb_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(sbb_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(sbb_b(RW1 d, RR1 s)); -DECLARE_MIDFUNC(sub_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(sub_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(sub_b(RW1 d, RR1 s)); -DECLARE_MIDFUNC(cmp_l(RR4 d, RR4 s)); -DECLARE_MIDFUNC(cmp_w(RR2 d, RR2 s)); -DECLARE_MIDFUNC(cmp_b(RR1 d, RR1 s)); -DECLARE_MIDFUNC(xor_l(RW4 d, RR4 s)); -DECLARE_MIDFUNC(xor_w(RW2 d, RR2 s)); -DECLARE_MIDFUNC(xor_b(RW1 d, RR1 s)); DECLARE_MIDFUNC(call_r_02(RR4 r, RR4 in1, RR4 in2, IMM isize1, IMM isize2)); DECLARE_MIDFUNC(call_r_11(W4 out1, RR4 r, RR4 in1, IMM osize, IMM isize)); DECLARE_MIDFUNC(live_flags(void)); DECLARE_MIDFUNC(dont_care_flags(void)); -DECLARE_MIDFUNC(duplicate_carry(void)); -DECLARE_MIDFUNC(restore_carry(void)); -DECLARE_MIDFUNC(start_needflags(void)); -DECLARE_MIDFUNC(end_needflags(void)); DECLARE_MIDFUNC(make_flags_live(void)); DECLARE_MIDFUNC(forget_about(W4 r)); DECLARE_MIDFUNC(f_forget_about(FW r)); - - - - diff --git a/src/jit/compemu_midfunc_arm2.cpp b/src/jit/compemu_midfunc_arm2.cpp new file mode 100644 index 00000000..8a40f17a --- /dev/null +++ b/src/jit/compemu_midfunc_arm2.cpp @@ -0,0 +1,5266 @@ +/* + * compiler/compemu_midfunc_arm.cpp - Native MIDFUNCS for ARM (JIT v2) + * + * Copyright (c) 2014 Jens Heitmann of ARAnyM dev team (see AUTHORS) + * + * Inspired by Christian Bauer's Basilisk II + * + * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer + * + * Adaptation for Basilisk II and improvements, copyright 2000-2002 + * Gwenole Beauchesne + * + * Basilisk II (C) 1997-2002 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 + * + * Note: + * File is included by compemu_support.cpp + * + */ + +const uae_u32 ARM_CCR_MAP[] = { 0, ARM_C_FLAG, // 1 C + ARM_V_FLAG, // 2 V + ARM_C_FLAG | ARM_V_FLAG, // 3 VC + ARM_Z_FLAG, // 4 Z + ARM_Z_FLAG | ARM_C_FLAG, // 5 ZC + ARM_Z_FLAG | ARM_V_FLAG, // 6 ZV + ARM_Z_FLAG | ARM_C_FLAG | ARM_V_FLAG, // 7 ZVC + ARM_N_FLAG, // 8 N + ARM_N_FLAG | ARM_C_FLAG, // 9 NC + ARM_N_FLAG | ARM_V_FLAG, // 10 NV + ARM_N_FLAG | ARM_C_FLAG | ARM_V_FLAG, // 11 NVC + ARM_N_FLAG | ARM_Z_FLAG, // 12 NZ + ARM_N_FLAG | ARM_Z_FLAG | ARM_C_FLAG, // 13 NZC + ARM_N_FLAG | ARM_Z_FLAG | ARM_V_FLAG, // 14 NZV + ARM_N_FLAG | ARM_Z_FLAG | ARM_C_FLAG | ARM_V_FLAG, // 15 NZVC +}; + + +#define DUPLICACTE_CARRY \ + if (needed_flags & FLAG_X) { \ + int x = writereg(FLAGX, 4); \ + MOV_ri(x, 1); \ + CC_MOV_ri(NATIVE_CC_CC, x, 0); \ + unlock2(x); \ + } + +/* + * ADD + * Operand Syntax: , Dn + * Dn, + * + * Operand Size: 8,16,32 + * + * X Set the same as the carry bit. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if an overflow is generated. Cleared otherwise. + * C Set if a carry is generated. Cleared otherwise. + * + */ +MIDFUNC(3,jnf_ADD_imm,(W4 d, RR4 s, IMM v)) +{ + if (isconst(s)) { + set_const(d, live.state[s].val + v); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + if(v >= 0 && v < 256) { + ADD_rri(d, s, v); + } else { + compemu_raw_mov_l_ri(REG_WORK1, v); + ADD_rrr(d, s, REG_WORK1); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ADD_imm,(W4 d, RR4 s, IMM v)) + +MIDFUNC(3,jnf_ADD_im8,(W4 d, RR4 s, IMM v)) +{ + if (isconst(s)) { + set_const(d, live.state[s].val + v); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + ADD_rri(d, s, v & 0xff); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ADD_im8,(W4 d, RR4 s, IMM v)) + +MIDFUNC(3,jnf_ADD,(W4 d, RR4 s, RR4 v)) +{ + if (isconst(v)) { + COMPCALL(jnf_ADD_imm)(d, s, live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + ADD_rrr(d, s, v); + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jnf_ADD,(W4 d, RR4 s, RR4 v)) + +MIDFUNC(3,jff_ADD_b_imm,(W4 d, RR1 s, IMM v)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MOV_ri8RORi(REG_WORK2, v & 0xff, 8); + ADDS_rrrLSLi(d, REG_WORK2, s, 24); + ASR_rri(d, d, 24); + + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ADD_b_imm,(W4 d, RR1 s, IMM v)) + +MIDFUNC(3,jff_ADD_b,(W4 d, RR1 s, RR1 v)) +{ + if (isconst(v)) { + COMPCALL(jff_ADD_b_imm)(d, s, live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(REG_WORK2, v, 24); + ADDS_rrrLSLi(d, REG_WORK2, s, 24); + ASR_rri(d, d, 24); + + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_ADD_b,(W4 d, RR1 s, RR1 v)) + +MIDFUNC(3,jff_ADD_w_imm,(W4 d, RR2 s, IMM v)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + uae_s32 offs = data_long_offs(v << 16); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + ADDS_rrrLSLi(d, REG_WORK1, s, 16); + ASR_rri(d, d, 16); + + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ADD_w_imm,(W4 d, RR2 s, IMM v)) + +MIDFUNC(3,jff_ADD_w,(W4 d, RR2 s, RR2 v)) +{ + if (isconst(v)) { + COMPCALL(jff_ADD_w_imm)(d,s,live.state[v].val); + return; + } + v = readreg(v, 4); + s = readreg(s,4); + d = writereg(d, 4); + + LSL_rri(REG_WORK1, s, 16); + ADDS_rrrLSLi(d, REG_WORK1, v, 16); + ASR_rri(d, d, 16); + + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_ADD_w,(W4 d, RR2 s, RR2 v)) + +MIDFUNC(3,jff_ADD_l_imm,(W4 d, RR4 s, IMM v)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if(v >= 0 && v < 256) { + ADDS_rri(d, s, v); + } else { + compemu_raw_mov_l_ri(REG_WORK2, v); + ADDS_rrr(d, s, REG_WORK2); + } + + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ADD_l_imm,(W4 d, RR4 s, IMM v)) + +MIDFUNC(3,jff_ADD_l,(W4 d, RR4 s, RR4 v)) +{ + if (isconst(v)) { + COMPCALL(jff_ADD_l_imm)(d, s, live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + ADDS_rrr(d, s, v); + + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_ADD_l,(W4 d, RR4 s, RR4 v)) + +/* + * ADDA + * Operand Syntax: , An + * + * Operand Size: 16,32 + * + * Flags: Not affected. + * + */ +MIDFUNC(2,jnf_ADDA_b,(W4 d, RR1 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + SIGNED8_REG_2_REG(REG_WORK1, s); + ADD_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_ADDA_b,(W4 d, RR1 s)) + +MIDFUNC(2,jnf_ADDA_w,(W4 d, RR2 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + SIGNED16_REG_2_REG(REG_WORK1, s); + ADD_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_ADDA_w,(W4 d, RR2 s)) + +MIDFUNC(2,jnf_ADDA_l,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + ADD_rrr(d, d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_ADDA_l,(W4 d, RR4 s)) + +/* + * ADDX + * Operand Syntax: Dy, Dx + * -(Ay), -(Ax) + * + * Operand Size: 8,16,32 + * + * X Set the same as the carry bit. + * N Set if the result is negative. Cleared otherwise. + * Z Cleared if the result is nonzero; unchanged otherwise. + * V Set if an overflow is generated. Cleared otherwise. + * C Set if a carry is generated. Cleared otherwise. + * + * Attention: Z is cleared only if the result is nonzero. Unchanged otherwise + * + */ +MIDFUNC(3,jnf_ADDX,(W4 d, RR4 s, RR4 v)) +{ + int x = readreg(FLAGX, 4); + s = readreg(s, 4); + v = readreg(v, 4); + d = writereg(d, 4); + + clobber_flags(); + + // Restore X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + MSR_CPSR_r(REG_WORK1); + + ADC_rrr(d, s, v); + + unlock2(d); + unlock2(s); + unlock2(v); + unlock2(x); +} +MENDFUNC(3,jnf_ADDX,(W4 d, RR4 s, RR4 v)) + +MIDFUNC(3,jff_ADDX_b,(W4 d, RR1 s, RR1 v)) +{ + s = readreg(s, 4); + v = readreg(v, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + MSR_CPSR_r(REG_WORK1); + + CC_MVN_ri(NATIVE_CC_EQ, REG_WORK2, 0); + CC_MVN_ri(NATIVE_CC_NE, REG_WORK2, ARM_Z_FLAG); + + MVN_ri(REG_WORK1, 0); + BFI_rrii(REG_WORK1, s, 24, 31); + ADCS_rrrLSLi(d, REG_WORK1, v, 24); + ASR_rri(d, d, 24); + + MRS_CPSR(REG_WORK1); + AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + UBFX_rrii(x, REG_WORK1, 29, 1); // Duplicate carry + MSR_CPSR_r(REG_WORK1); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_ADDX_b,(W4 d, RR1 s, RR1 v)) + +MIDFUNC(3,jff_ADDX_w,(W4 d, RR2 s, RR2 v)) +{ + s = readreg(s, 4); + v = readreg(v, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + MSR_CPSR_r(REG_WORK1); + + CC_MVN_ri(NATIVE_CC_EQ, REG_WORK2, 0); + CC_MVN_ri(NATIVE_CC_NE, REG_WORK2, ARM_Z_FLAG); + + MVN_ri(REG_WORK1, 0); + BFI_rrii(REG_WORK1, s, 16, 31); + ADCS_rrrLSLi(d, REG_WORK1, v, 16); + ASR_rri(d, d, 16); + + MRS_CPSR(REG_WORK1); + AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + UBFX_rrii(x, REG_WORK1, 29, 1); // Duplicate carry + MSR_CPSR_r(REG_WORK1); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_ADDX_w,(W4 d, RR2 s, RR2 v)) + +MIDFUNC(3,jff_ADDX_l,(W4 d, RR4 s, RR4 v)) +{ + s = readreg(s, 4); + v = readreg(v, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + MSR_CPSR_r(REG_WORK1); + + CC_MVN_ri(NATIVE_CC_EQ, REG_WORK2, 0); + CC_MVN_ri(NATIVE_CC_NE, REG_WORK2, ARM_Z_FLAG); + + ADCS_rrr(d, s, v); + + MRS_CPSR(REG_WORK1); + AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + UBFX_rrii(x, REG_WORK1, 29, 1); // Duplicate carry + MSR_CPSR_r(REG_WORK1); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_ADDX_l,(W4 d, RR4 s, RR4 v)) + +/* + * ANDI + * Operand Syntax: #, CCR + * + * Operand Size: 8 + * + * X Cleared if bit 4 of immediate operand is zero. Unchanged otherwise. + * N Cleared if bit 3 of immediate operand is zero. Unchanged otherwise. + * Z Cleared if bit 2 of immediate operand is zero. Unchanged otherwise. + * V Cleared if bit 1 of immediate operand is zero. Unchanged otherwise. + * C Cleared if bit 0 of immediate operand is zero. Unchanged otherwise. + * + */ +MIDFUNC(1,jff_ANDSR,(IMM s, IMM x)) +{ + MRS_CPSR(REG_WORK1); + AND_rri(REG_WORK1, REG_WORK1, s); + MSR_CPSRf_r(REG_WORK1); + + if (!x) { + int f = writereg(FLAGX, 4); + MOV_ri(f, 0); + unlock2(f); + } +} +MENDFUNC(1,jff_ANDSR,(IMM s)) + +/* + * AND + * Operand Syntax: , Dn + * Dn, + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Always cleared. + * + */ +MIDFUNC(3,jnf_AND,(W4 d, RR4 s, RR4 v)) +{ + if (isconst(s) && isconst(v)) { + set_const(d, live.state[s].val & live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + AND_rrr(d, s, v); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_AND,(RW4 d, RR4 s, RR4 v)) + +MIDFUNC(3,jff_AND_b,(W4 d, RR1 s, RR1 v)) +{ + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(REG_WORK1, s); + SIGNED8_REG_2_REG(REG_WORK2, v); + MSR_CPSRf_i(0); + ANDS_rrr(d, REG_WORK1, REG_WORK2); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_AND_b,(RW4 d, RR1 s, RR1 v)) + +MIDFUNC(3,jff_AND_w,(W4 d, RR2 s, RR2 v)) +{ + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(REG_WORK1, s); + SIGNED16_REG_2_REG(REG_WORK2, v); + MSR_CPSRf_i(0); + ANDS_rrr(d, REG_WORK1, REG_WORK2); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_AND_w,(RW4 d, RR2 s, RR2 v)) + +MIDFUNC(3,jff_AND_l,(W4 d, RR4 s, RR4 v)) +{ + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + ANDS_rrr(d, s, v); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_AND_l,(RW4 d, RR4 s, RR4 v)) + +/* + * ASL + * Operand Syntax: Dx, Dy + * #, Dy + * + * + * Operand Size: 8,16,32 + * + * X Set according to the last bit shifted out of the operand. Unaffected for a shift count of zero. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if the most significant bit is changed at any time during the shift operation. Cleared otherwise. + * C Set according to the last bit shifted out of the operand. Cleared for a shift count of zero. + * + * imm version only called with 1 <= i <= 8 + * + */ +MIDFUNC(3,jff_ASL_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 24); + if (i) { + // Calculate V Flag + MOV_ri8RORi(REG_WORK2, 0x80, 8); + ASR_rri(REG_WORK2, REG_WORK2, i); + ANDS_rrr(REG_WORK1, d, REG_WORK2); + CC_TEQ_rr(NATIVE_CC_NE, REG_WORK1, REG_WORK2); + MOV_ri(REG_WORK1, 0); + CC_MOV_ri(NATIVE_CC_NE, REG_WORK1, ARM_V_FLAG); + + MSR_CPSRf_r(REG_WORK1); // store V flag + + LSLS_rri(d, d, i); + DUPLICACTE_CARRY + } else { + MSR_CPSRf_i(0); + TST_rr(d, d); + } + ASR_rri(d, d, 24); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ASL_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ASL_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 16); + if (i) { + // Calculate V Flag + MOV_ri8RORi(REG_WORK2, 0x80, 8); + ASR_rri(REG_WORK2, REG_WORK2, i); + ANDS_rrr(REG_WORK1, d, REG_WORK2); + CC_TEQ_rr(NATIVE_CC_NE, REG_WORK1, REG_WORK2); + MOV_ri(REG_WORK1, 0); + CC_MOV_ri(NATIVE_CC_NE, REG_WORK1, ARM_V_FLAG); + + MSR_CPSRf_r(REG_WORK1); // store V flag + + LSLS_rri(d, d, i); + DUPLICACTE_CARRY + } else { + MSR_CPSRf_i(0); + TST_rr(d, d); + } + ASR_rri(d, d, 16); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ASL_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ASL_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if (i) { + // Calculate V Flag + MOV_ri8RORi(REG_WORK2, 0x80, 8); + ASR_rri(REG_WORK2, REG_WORK2, i); + ANDS_rrr(REG_WORK1, s, REG_WORK2); + CC_TEQ_rr(NATIVE_CC_NE, REG_WORK1, REG_WORK2); + MOV_ri(REG_WORK1, 0); + CC_MOV_ri(NATIVE_CC_NE, REG_WORK1, ARM_V_FLAG); + + MSR_CPSRf_r(REG_WORK1); // store V flag + + LSLS_rri(d, s, i); + DUPLICACTE_CARRY + } else { + MSR_CPSRf_i(0); + MOVS_rr(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ASL_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ASL_b_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + LSL_rri(d, s, 24); + // Calculate V Flag + MOV_ri8RORi(REG_WORK2, 0x80, 8); + ASR_rrr(REG_WORK2, REG_WORK2, i); + ANDS_rrr(REG_WORK1, d, REG_WORK2); + CC_TEQ_rr(NATIVE_CC_NE, REG_WORK1, REG_WORK2); + MOV_ri(REG_WORK1, 0); + CC_MOV_ri(NATIVE_CC_NE, REG_WORK1, ARM_V_FLAG); + + MSR_CPSRf_r(REG_WORK1); // store V flag + + ANDS_rri(REG_WORK2, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + LSLS_rrr(d, d, REG_WORK2); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + TST_rr(d, d); + ASR_rri(d, d, 24); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ASL_b_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ASL_w_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + LSL_rri(d, s, 16); + // Calculate V Flag + MOV_ri8RORi(REG_WORK2, 0x80, 8); + ASR_rrr(REG_WORK2, REG_WORK2, i); + ANDS_rrr(REG_WORK1, d, REG_WORK2); + CC_TEQ_rr(NATIVE_CC_NE, REG_WORK1, REG_WORK2); + MOV_ri(REG_WORK1, 0); + CC_MOV_ri(NATIVE_CC_NE, REG_WORK1, ARM_V_FLAG); + + MSR_CPSRf_r(REG_WORK1); // store V flag + + ANDS_rri(REG_WORK2, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + LSLS_rrr(d, d, REG_WORK2); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + TST_rr(d, d); + ASR_rri(d, d, 16); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ASL_w_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ASL_l_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + // Calculate V Flag + MOV_ri8RORi(REG_WORK2, 0x80, 8); + ASR_rrr(REG_WORK2, REG_WORK2, i); + ANDS_rrr(REG_WORK1, s, REG_WORK2); + CC_TEQ_rr(NATIVE_CC_NE, REG_WORK1, REG_WORK2); + MOV_ri(REG_WORK1, 0); + CC_MOV_ri(NATIVE_CC_NE, REG_WORK1, ARM_V_FLAG); + + MSR_CPSRf_r(REG_WORK1); // store V flag + + ANDS_rri(REG_WORK2, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + LSLS_rrr(d, s, REG_WORK2); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + MOVS_rr(d, s); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ASL_l_reg,(W4 d, RR4 s, RR4 i)) + +/* + * ASLW + * Operand Syntax: + * + * Operand Size: 16 + * + * X Set according to the last bit shifted out of the operand. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if the most significant bit is changed at any time during the shift operation. Cleared otherwise. + * C Set according to the last bit shifted out of the operand. + * + */ +MIDFUNC(2,jnf_ASLW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_ASLW,(W4 d, RR4 s)) + +MIDFUNC(2,jff_ASLW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + LSLS_rri(d, s, 17); + DUPLICACTE_CARRY + + // Calculate V flag + MRS_CPSR(REG_WORK1); + CC_ORR_rri(NATIVE_CC_MI, REG_WORK1, REG_WORK1, ARM_V_FLAG); + CC_EOR_rri(NATIVE_CC_CS, REG_WORK1, REG_WORK1, ARM_V_FLAG); + MSR_CPSRf_r(REG_WORK1); + ASR_rri(d, d, 16); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_ASLW,(W4 d, RR4 s)) + +/* + * ASR + * Operand Syntax: Dx, Dy + * #, Dy + * + * + * Operand Size: 8,16,32 + * + * X Set according to the last bit shifted out of the operand. Unaffected for a shift count of zero. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if the most significant bit is changed at any time during the shift operation. Cleared otherwise. Shift right -> always 0 + * C Set according to the last bit shifted out of the operand. Cleared for a shift count of zero. + * + * imm version only called with 1 <= i <= 8 + * + */ +MIDFUNC(3,jnf_ASR_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(d, s); + if(i) + ASR_rri(d, d, i); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ASR_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ASR_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(d, s); + if(i) + ASR_rri(d, d, i); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ASR_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ASR_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if(i) + ASR_rri(d, s, i); + else + MOV_rr(d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ASR_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ASR_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(d, s); + MSR_CPSRf_i(0); + if (i) { + ASRS_rri(d, d, i); + DUPLICACTE_CARRY + } else { + TST_rr(d, d); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ASR_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ASR_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(d, s); + MSR_CPSRf_i(0); + if (i) { + ASRS_rri(d, d, i); + DUPLICACTE_CARRY + } else { + TST_rr(d, d); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ASR_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ASR_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + if (i) { + ASRS_rri(d, s, i); + DUPLICACTE_CARRY + } else { + MOVS_rr(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ASR_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ASR_b_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(d, s); + AND_rri(REG_WORK1, i, 63); + ASR_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_ASR_b_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ASR_w_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(d, s); + AND_rri(REG_WORK1, i, 63); + ASR_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_ASR_w_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ASR_l_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + AND_rri(REG_WORK1, i, 63); + ASR_rrr(d, s, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_ASR_l_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ASR_b_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + SIGNED8_REG_2_REG(d, s); + MSR_CPSRf_i(0); + ANDS_rri(REG_WORK1, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + ASRS_rrr(d, d, REG_WORK1); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + TST_rr(d, d); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ASR_b_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ASR_w_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + SIGNED16_REG_2_REG(d, s); + MSR_CPSRf_i(0); + ANDS_rri(REG_WORK1, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + ASRS_rrr(d, d, REG_WORK1); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + TST_rr(d, d); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ASR_w_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ASR_l_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + MSR_CPSRf_i(0); + ANDS_rri(REG_WORK1, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + ASRS_rrr(d, s, REG_WORK1); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + MOVS_rr(d, s); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ASR_l_reg,(W4 d, RR4 s, RR4 i)) + +/* + * ASRW + * Operand Syntax: + * + * Operand Size: 16 + * + * X Set according to the last bit shifted out of the operand. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if the most significant bit is changed at any time during the shift operation. Cleared otherwise. Shift right -> always 0 + * C Set according to the last bit shifted out of the operand. + * + */ +MIDFUNC(2,jnf_ASRW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(d, s); + ASR_rri(d, d, 1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_ASRW,(W4 d, RR4 s)) + +MIDFUNC(2,jff_ASRW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(d, s); + MSR_CPSRf_i(0); + ASRS_rri(d, d, 1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_ASRW,(W4 d, RR4 s)) + +/* + * BCHG + * Operand Syntax: Dn, + * #, + * + * Operand Size: 8,32 + * + * X Not affected. + * N Not affected. + * Z Set if the bit tested was zero. Cleared otherwise. + * V Not affected. + * C Not affected. + * + */ +MIDFUNC(2,jnf_BCHG_b_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + EOR_rri(d, d, (1 << s)); + unlock2(d); +} +MENDFUNC(2,jnf_BCHG_b_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jnf_BCHG_l_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + EOR_rri(d, d, (1 << s)); + unlock2(d); +} +MENDFUNC(2,jnf_BCHG_l_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jnf_BCHG_b,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jnf_BCHG_b_imm)(d, live.state[s].val & 7); + return; + } + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 7); + MOV_ri(REG_WORK2, 1); + + EOR_rrrLSLr(d, d, REG_WORK2, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_BCHG_b,(RW4 d, RR4 s)) + +MIDFUNC(2,jnf_BCHG_l,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jnf_BCHG_l_imm)(d, live.state[s].val & 31); + return; + } + + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 31); + MOV_ri(REG_WORK2, 1); + + EOR_rrrLSLr(d, d, REG_WORK2, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_BCHG_l,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_BCHG_b_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + + uae_u32 v = (1 << s); + MRS_CPSR(REG_WORK1); + TST_ri(d, v); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + EOR_rri(d, d, v); + + unlock2(d); +} +MENDFUNC(2,jff_BCHG_b_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jff_BCHG_l_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + + uae_u32 v = (1 << s); + MRS_CPSR(REG_WORK1); + TST_ri(d, v); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + EOR_rri(d, d, v); + + unlock2(d); +} +MENDFUNC(2,jff_BCHG_l_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jff_BCHG_b,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jff_BCHG_b_imm)(d, live.state[s].val & 7); + return; + } + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 7); + MOV_ri(REG_WORK2, 1); + LSL_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + MRS_CPSR(REG_WORK1); + TST_rr(d, REG_WORK2); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + EOR_rrr(d, d, REG_WORK2); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_BCHG_b,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_BCHG_l,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jff_BCHG_l_imm)(d, live.state[s].val & 31); + return; + } + + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 31); + MOV_ri(REG_WORK2, 1); + LSL_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + MRS_CPSR(REG_WORK1); + TST_rr(d, REG_WORK2); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + EOR_rrr(d, d, REG_WORK2); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_BCHG_l,(RW4 d, RR4 s)) + +/* + * BCLR + * Operand Syntax: Dn, + * #, + * + * Operand Size: 8,32 + * + * X Not affected. + * N Not affected. + * Z Set if the bit tested was zero. Cleared otherwise. + * V Not affected. + * C Not affected. + * + */ +MIDFUNC(2,jnf_BCLR_b_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + BIC_rri(d, d, (1 << s)); + unlock2(d); +} +MENDFUNC(2,jnf_BCLR_b_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jnf_BCLR_l_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + BIC_rri(d, d, (1 << s)); + unlock2(d); +} +MENDFUNC(2,jnf_BCLR_l_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jnf_BCLR_b,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jnf_BCLR_b_imm)(d, live.state[s].val & 7); + return; + } + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 7); + MOV_ri(REG_WORK2, 1); + + BIC_rrrLSLr(d, d, REG_WORK2, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_BCLR_b,(RW4 d, RR4 s)) + +MIDFUNC(2,jnf_BCLR_l,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jnf_BCLR_l_imm)(d, live.state[s].val & 31); + return; + } + + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 31); + MOV_ri(REG_WORK2, 1); + + BIC_rrrLSLr(d, d, REG_WORK2, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_BCLR_l,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_BCLR_b_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + + uae_u32 v = (1 << s); + MRS_CPSR(REG_WORK1); + TST_ri(d, v); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + BIC_rri(d, d, v); + + unlock2(d); +} +MENDFUNC(2,jff_BCLR_b_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jff_BCLR_l_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + + uae_u32 v = (1 << s); + MRS_CPSR(REG_WORK1); + TST_ri(d, v); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + BIC_rri(d, d, v); + + unlock2(d); +} +MENDFUNC(2,jff_BCLR_l_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jff_BCLR_b,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jff_BCLR_b_imm)(d, live.state[s].val & 7); + return; + } + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 7); + MOV_ri(REG_WORK2, 1); + LSL_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + MRS_CPSR(REG_WORK1); + TST_rr(d,REG_WORK2); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + BIC_rrr(d, d, REG_WORK2); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_BCLR_b,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_BCLR_l,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jff_BCLR_l_imm)(d, live.state[s].val & 31); + return; + } + + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 31); + MOV_ri(REG_WORK2, 1); + LSL_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + MRS_CPSR(REG_WORK1); + TST_rr(d, REG_WORK2); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + BIC_rrr(d, d ,REG_WORK2); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_BCLR_l,(RW4 d, RR4 s)) + +/* + * BSET + * Operand Syntax: Dn, + * #, + * + * Operand Size: 8,32 + * + * X Not affected. + * N Not affected. + * Z Set if the bit tested was zero. Cleared otherwise. + * V Not affected. + * C Not affected. + * + */ +MIDFUNC(2,jnf_BSET_b_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + ORR_rri(d, d, (1 << s)); + unlock2(d); +} +MENDFUNC(2,jnf_BSET_b_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jnf_BSET_l_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + ORR_rri(d, d, (1 << s)); + unlock2(d); +} +MENDFUNC(2,jnf_BSET_l_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jnf_BSET_b,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jnf_BSET_b_imm)(d, live.state[s].val & 7); + return; + } + s = readreg(s, 4); + d = rmw(d, 4 ,4); + + AND_rri(REG_WORK1, s, 7); + MOV_ri(REG_WORK2, 1); + + ORR_rrrLSLr(d, d, REG_WORK2, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_BSET_b,(RW4 d, RR4 s)) + +MIDFUNC(2,jnf_BSET_l,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jnf_BSET_l_imm)(d, live.state[s].val & 31); + return; + } + + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 31); + MOV_ri(REG_WORK2, 1); + + ORR_rrrLSLr(d, d, REG_WORK2, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_BSET_l,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_BSET_b_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + + uae_u32 v = (1 << s); + MRS_CPSR(REG_WORK1); + TST_ri(d, v); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + ORR_rri(d, d, v); + + unlock2(d); +} +MENDFUNC(2,jff_BSET_b_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jff_BSET_l_imm,(RW4 d, IMM s)) +{ + d = rmw(d, 4, 4); + + uae_u32 v = (1 << s); + MRS_CPSR(REG_WORK1); + TST_ri(d, v); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + ORR_rri(d, d, v); + + unlock2(d); +} +MENDFUNC(2,jff_BSET_l_imm,(RW4 d, IMM s)) + +MIDFUNC(2,jff_BSET_b,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jff_BSET_b_imm)(d, live.state[s].val & 7); + return; + } + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 7); + MOV_ri(REG_WORK2, 1); + LSL_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + MRS_CPSR(REG_WORK1); + TST_rr(d, REG_WORK2); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + ORR_rrr(d, d, REG_WORK2); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_BSET_b,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_BSET_l,(RW4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jff_BSET_l_imm)(d, live.state[s].val & 31); + return; + } + + s = readreg(s, 4); + d = rmw(d, 4, 4); + + AND_rri(REG_WORK1, s, 31); + MOV_ri(REG_WORK2, 1); + LSL_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + MRS_CPSR(REG_WORK1); + TST_rr(d, REG_WORK2); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + ORR_rrr(d, d, REG_WORK2); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_BSET_l,(RW4 d, RR4 s)) + +/* + * BTST + * Operand Syntax: Dn, + * #, + * + * Operand Size: 8,32 + * + * X Not affected + * N Not affected + * Z Set if the bit tested is zero. Cleared otherwise + * V Not affected + * C Not affected + * + */ +MIDFUNC(2,jff_BTST_b_imm,(RR4 d, IMM s)) +{ + d = readreg(d, 4); + + MRS_CPSR(REG_WORK1); + TST_ri(d, (1 << s)); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + + unlock2(d); +} +MENDFUNC(2,jff_BTST_b_imm,(RR4 d, IMM s)) + +MIDFUNC(2,jff_BTST_l_imm,(RR4 d, IMM s)) +{ + d = readreg(d, 4); + + MRS_CPSR(REG_WORK1); + TST_ri(d, (1 << s)); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + + unlock2(d); +} +MENDFUNC(2,jff_BTST_l_imm,(RR4 d, IMM s)) + +MIDFUNC(2,jff_BTST_b,(RR4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jff_BTST_b_imm)(d, live.state[s].val & 7); + return; + } + s = readreg(s, 4); + d = readreg(d, 4); + + AND_rri(REG_WORK1, s, 7); + MOV_ri(REG_WORK2, 1); + LSL_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + MRS_CPSR(REG_WORK1); + TST_rr(d, REG_WORK2); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_BTST_b,(RR4 d, RR4 s)) + +MIDFUNC(2,jff_BTST_l,(RR4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jff_BTST_l_imm)(d, live.state[s].val & 31); + return; + } + + s = readreg(s ,4); + d = readreg(d, 4); + + AND_rri(REG_WORK1, s, 31); + MOV_ri(REG_WORK2, 1); + LSL_rrr(REG_WORK2, REG_WORK2, REG_WORK1); + + MRS_CPSR(REG_WORK1); + TST_rr(d, REG_WORK2); + BIC_rri(REG_WORK1, REG_WORK1, ARM_Z_FLAG); + CC_ORR_rri(NATIVE_CC_EQ, REG_WORK1, REG_WORK1, ARM_Z_FLAG); + MSR_CPSR_r(REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_BTST_l,(RR4 d, RR4 s)) + +/* + * CLR + * Operand Syntax: + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Always cleared. + * Z Always set. + * V Always cleared. + * C Always cleared. + * + */ +MIDFUNC(1,jnf_CLR,(W4 d)) +{ + d = writereg(d, 4); + MOV_ri(d, 0); + unlock2(d); +} +MENDFUNC(1,jnf_CLR,(W4 d)) + +MIDFUNC(1,jff_CLR,(W4 d)) +{ + d = writereg(d, 4); + MOV_ri(d, 0); + MSR_CPSR_i(ARM_Z_FLAG); + unlock2(d); +} +MENDFUNC(1,jff_CLR,(W4 d)) + +/* + * CMP + * Operand Syntax: , Dn + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if an overflow occurs. Cleared otherwise. + * C Set if a borrow occurs. Cleared otherwise. + * + */ +MIDFUNC(2,jff_CMP_b,(RR1 d, RR1 s)) +{ + d = readreg(d, 4); + s = readreg(s, 4); + + LSL_rri(REG_WORK1, d, 24); + CMP_rrLSLi(REG_WORK1, s, 24); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_CMP_b,(RR1 d, RR1 s)) + +MIDFUNC(2,jff_CMP_w,(RR2 d, RR2 s)) +{ + d = readreg(d, 4); + s = readreg(s, 4); + + LSL_rri(REG_WORK1, d, 16); + CMP_rrLSLi(REG_WORK1, s, 16); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_CMP_w,(RR2 d, RR2 s)) + +MIDFUNC(2,jff_CMP_l,(RR4 d, RR4 s)) +{ + d = readreg(d, 4); + s = readreg(s, 4); + + CMP_rr(d, s); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_CMP_l,(RR4 d, RR4 s)) + +/* + * CMPA + * Operand Syntax: , An + * + * Operand Size: 16,32 + * + * X Not affected. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if an overflow occurs. Cleared otherwise. + * C Set if a borrow occurs. Cleared otherwise. + * + */ +MIDFUNC(2,jff_CMPA_w,(RR2 d, RR2 s)) +{ + d = readreg(d, 4); + s = readreg(s, 4); + + LSL_rri(REG_WORK1, d, 16); + CMP_rrLSLi(REG_WORK1, s, 16); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_CMPA_w,(RR2 d, RR2 s)) + +MIDFUNC(2,jff_CMPA_l,(RR4 d, RR4 s)) +{ + d = readreg(d, 4); + s = readreg(s, 4); + + CMP_rr(d, s); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_CMPA_l,(RR4 d, RR4 s)) + +/* + * DBCC + * + */ +MIDFUNC(2,jff_DBCC,(RR2 d, IMM cc)) +{ + d = rmw(d, 4, 4); + + // If cc true -> no branch, so we have to clear ARM_C_FLAG + MOV_ri(REG_WORK1, ARM_C_FLAG); + switch(cc) { + case 9: // LS + CC_MOV_ri(NATIVE_CC_EQ, REG_WORK1, 0); + CC_MOV_ri(NATIVE_CC_CS, REG_WORK1, 0); + break; + + case 8: // HI + CC_MOV_ri(NATIVE_CC_CC, REG_WORK1, 0); + break; + + default: + CC_MOV_ri(cc, REG_WORK1, 0); + break; + } + clobber_flags(); + MSR_CPSRf_r(REG_WORK1); + + BCC_i(2); // If cc true -> no sub + + // sub (d, 1) + LSL_rri(REG_WORK2, d, 16); + SUBS_rri(REG_WORK2, REG_WORK2, 1 << 16); + PKHTB_rrrASRi(d, d, REG_WORK2, 16); + + // caller can now use register_branch(v1, v2, NATIVE_CC_CS); + + unlock2(d); +} +MENDFUNC(2,jff_DBCC,(RR2 d, IMM cc)) + +/* + * DIVU + * + * X Not affected. + * N Set if the most significant bit of the result is set or overflow. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if overflow. Cleared otherwise. + * C Always cleared. + * + */ +// ToDo: How to handle exceptions (division by zero). Performance improvement isn't big, so this is on hold. + MIDFUNC(3,jnf_DIVU,(W4 d, RR4 s1, RR4 s2)) +{ + s1 = readreg(s1, 4); + s2 = readreg(s2, 4); + d = writereg(d, 4); + + VMOV_sr(0, s1); // move to s0 + VMOV_sr(1, s2); // move to s1 + VCVT_f64_u32(2, 0); // convert s0 to d2 (int to float) + VCVT_f64_u32(3, 1); // convert s1 to d3 (int to float) + VDIV_ddd(4, 2, 3); // d4 = d2 / d3 + VCVT_u32_f64(0, 4); // convert d4 to s0 (float to int) + VMOV_rs(REG_WORK1, 0); // move from s0 + + LSRS_rri(REG_WORK2, REG_WORK1, 16); // if result of this is not 0, DIVU overflows -> no result + BNE_i(2); + + // Here we have to calc reminder + MUL_rrr(REG_WORK2, REG_WORK1, s2); + SUB_rrr(REG_WORK2, s1, REG_WORK2); + PKHBT_rrrLSLi(d, REG_WORK1, REG_WORK2, 16); + + unlock2(d); + unlock2(s1); + unlock2(s2); +} +MENDFUNC(3,jnf_DIVU,(W4 d, RR4 s1, RR4 s2)) + +MIDFUNC(3,jff_DIVU,(W4 d, RR4 s1, RR4 s2)) +{ + s1 = readreg(s1, 4); + s2 = readreg(s2, 4); + d = writereg(d, 4); + + VMOV_sr(0, s1); // move to s0 + VMOV_sr(1, s2); // move to s1 + VCVT_f64_u32(2, 0); // convert s0 to d2 (int to float) + VCVT_f64_u32(3, 1); // convert s1 to d3 (int to float) + VDIV_ddd(4, 2, 3); // d4 = d2 / d3 + VCVT_u32_f64(0, 4); // convert d4 to s0 (float to int) + VMOV_rs(REG_WORK1, 0); // move from s0 + + LSRS_rri(REG_WORK2, REG_WORK1, 16); // if result of this is not 0, DIVU overflows + BEQ_i(2); + // Here we handle overflow + MOV_ri(REG_WORK1, ARM_V_FLAG | ARM_N_FLAG); + MSR_CPSRf_r(REG_WORK1); + B_i(6); + + // Here we have to calc flags and reminder + LSLS_rri(REG_WORK2, REG_WORK1, 16); // N and Z ok + MRS_CPSR(REG_WORK2); + BIC_rri(REG_WORK2, REG_WORK2, ARM_C_FLAG | ARM_V_FLAG); + MSR_CPSRf_r(REG_WORK2); + + MUL_rrr(REG_WORK2, REG_WORK1, s2); + SUB_rrr(REG_WORK2, s1, REG_WORK2); + PKHBT_rrrLSLi(d, REG_WORK1, REG_WORK2, 16); + + unlock2(d); + unlock2(s1); + unlock2(s2); +} +MENDFUNC(3,jff_DIVU,(W4 d, RR4 s1, RR4 s2)) + +/* + * EOR + * Operand Syntax: Dn, + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Always cleared. + * + */ +MIDFUNC(3,jnf_EOR,(W4 d, RR4 s, RR4 v)) +{ + if (isconst(s) && isconst(v)) { + set_const(d, live.state[s].val ^ live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + EOR_rrr(d, s, v); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_EOR,(RW4 d, RR4 s, RR4 v)) + +MIDFUNC(3,jff_EOR_b,(W4 d, RR1 s, RR1 v)) +{ + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(REG_WORK1, s); + SIGNED8_REG_2_REG(REG_WORK2, v); + MSR_CPSRf_i(0); + EORS_rrr(d, REG_WORK1, REG_WORK2); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_EOR_b,(RW4 d, RR1 s, RR1 v)) + +MIDFUNC(3,jff_EOR_w,(W4 d, RR2 s, RR2 v)) +{ + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(REG_WORK1, s); + SIGNED16_REG_2_REG(REG_WORK2, v); + MSR_CPSRf_i(0); + EORS_rrr(d, REG_WORK1, REG_WORK2); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_EOR_w,(RW4 d, RR2 s, RR2 v)) + +MIDFUNC(3,jff_EOR_l,(W4 d, RR4 s, RR4 v)) +{ + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + EORS_rrr(d, s, v); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_EOR_l,(RW4 d, RR4 s, RR4 v)) + +/* + * EORI + * Operand Syntax: #, CCR + * + * Operand Size: 8 + * + * X — Changed if bit 4 of immediate operand is one; unchanged otherwise. + * N — Changed if bit 3 of immediate operand is one; unchanged otherwise. + * Z — Changed if bit 2 of immediate operand is one; unchanged otherwise. + * V — Changed if bit 1 of immediate operand is one; unchanged otherwise. + * C — Changed if bit 0 of immediate operand is one; unchanged otherwise. + * + */ +MIDFUNC(1,jff_EORSR,(IMM s, IMM x)) +{ + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, s); + MSR_CPSRf_r(REG_WORK1); + + if (x) { + int f = rmw(FLAGX, 4, 4); + EOR_rri(f, f, 1); + unlock2(f); + } +} +MENDFUNC(1,jff_EORSR,(IMM s)) + +/* + * EXT + * Operand Syntax: + * + * Operand Size: 16,32 + * + * X Not affected. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Always cleared. + * + */ +MIDFUNC(2,jnf_EXT_b,(W4 d, RR4 s)) +{ + if (isconst(s)) { + set_const(d, (uae_s32)(uae_s8)live.state[s].val); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(d, s); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jnf_EXT_b,(W4 d, RR4 s)) + +MIDFUNC(2,jnf_EXT_w,(W4 d, RR4 s)) +{ + if (isconst(s)) { + set_const(d, (uae_s32)(uae_s8)live.state[s].val); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(d, s); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jnf_EXT_w,(W4 d, RR4 s)) + +MIDFUNC(2,jnf_EXT_l,(W4 d, RR4 s)) +{ + if (isconst(s)) { + set_const(d, (uae_s32)(uae_s16)live.state[s].val); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(d, s); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jnf_EXT_l,(W4 d, RR4 s)) + +MIDFUNC(2,jff_EXT_b,(W4 d, RR4 s)) +{ + if (isconst(s)) { + d = writereg(d, 4); + SIGNED8_IMM_2_REG(d, (uae_u8)live.state[s].val); + } else { + s = readreg(s, 4); + d = writereg(d, 4); + SIGNED8_REG_2_REG(d, s); + unlock2(s); + } + + MSR_CPSRf_i(0); + TST_rr(d, d); + + unlock2(d); +} +MENDFUNC(2,jff_EXT_b,(W4 d, RR4 s)) + +MIDFUNC(2,jff_EXT_w,(W4 d, RR4 s)) +{ + if (isconst(s)) { + d = writereg(d, 4); + SIGNED8_IMM_2_REG(d, (uae_u8)live.state[s].val); + } else { + s = readreg(s, 4); + d = writereg(d, 4); + SIGNED8_REG_2_REG(d, s); + unlock2(s); + } + + MSR_CPSRf_i(0); + TST_rr(d, d); + + unlock2(d); +} +MENDFUNC(2,jff_EXT_w,(W4 d, RR4 s)) + +MIDFUNC(2,jff_EXT_l,(W4 d, RR4 s)) +{ + if (isconst(s)) { + d = writereg(d, 4); + SIGNED16_IMM_2_REG(d, (uae_u16)live.state[s].val); + } else { + s = readreg(s, 4); + d = writereg(d, 4); + SIGNED16_REG_2_REG(d, s); + unlock2(s); + } + MSR_CPSRf_i(0); + TST_rr(d, d); + + unlock2(d); +} +MENDFUNC(2,jff_EXT_l,(W4 d, RR4 s)) + +/* + * LSL + * Operand Syntax: Dx, Dy + * #, Dy + * + * + * Operand Size: 8,16,32 + * + * X Set according to the last bit shifted out of the operand. Unaffected for a shift count of zero. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit shifted out of the operand. Cleared for a shift count of zero. + * + * imm version only called with 1 <= i <= 8 + * + */ +MIDFUNC(3,jnf_LSL_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if(i) + LSL_rri(d, s, i); + else + MOV_rr(d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_LSL_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_LSL_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + AND_rri(REG_WORK1, i, 63); + LSL_rrr(d, s, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_LSL_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_LSL_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + + LSL_rri(d, s, 24); + if (i) { + LSLS_rri(d, d, i); + DUPLICACTE_CARRY + } else { + TST_rr(d, d); + } + LSR_rri(d, d, 24); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_LSL_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_LSL_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + + LSL_rri(d, s, 16); + if (i) { + LSLS_rri(d, d, i); + DUPLICACTE_CARRY + } else { + TST_rr(d, d); + } + LSR_rri(d, d, 16); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_LSL_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_LSL_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + if (i) { + LSLS_rri(d, s, i); + DUPLICACTE_CARRY + } else { + MOVS_rr(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_LSL_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_LSL_b_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + MSR_CPSRf_i(0); + LSL_rri(d, s, 24); + ANDS_rri(REG_WORK1, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + LSLS_rrr(d, d, REG_WORK1); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + TST_rr(d, d); + LSR_rri(d, d, 24); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_LSL_b_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_LSL_w_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + MSR_CPSRf_i(0); + LSL_rri(d, s, 16); + ANDS_rri(REG_WORK1, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + LSLS_rrr(d, d, REG_WORK1); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + TST_rr(d, d); + LSR_rri(d, d, 16); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_LSL_w_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_LSL_l_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + MSR_CPSRf_i(0); + ANDS_rri(REG_WORK1, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + LSLS_rrr(d, s, REG_WORK1); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + MOVS_rr(d, s); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_LSL_l_reg,(W4 d, RR4 s, RR4 i)) + +/* + * LSLW + * Operand Syntax: + * + * Operand Size: 16 + * + * X Set according to the last bit shifted out of the operand. Unaffected for a shift count of zero. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit shifted out of the operand. Cleared for a shift count of zero. + * + */ +MIDFUNC(2,jnf_LSLW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_LSLW,(W4 d, RR4 s)) + +MIDFUNC(2,jff_LSLW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + LSLS_rri(d, s, 17); + LSR_rri(d, d, 16); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_LSLW,(W4 d, RR4 s)) + +/* + * LSR + * Operand Syntax: Dx, Dy + * #, Dy + * + * + * Operand Size: 8,16,32 + * + * X Set according to the last bit shifted out of the operand. Unaffected for a shift count of zero. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit shifted out of the operand. Cleared for a shift count of zero. + * + * imm version only called with 1 <= i <= 8 + * + */ +MIDFUNC(3,jnf_LSR_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + UNSIGNED8_REG_2_REG(d, s); + if(i) + LSR_rri(d, d, i); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_LSR_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_LSR_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + UNSIGNED16_REG_2_REG(d, s); + if(i) + LSR_rri(d, d, i); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_LSR_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_LSR_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if (i) + LSR_rri(d, s, i); + else + MOV_rr(d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_LSR_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_LSR_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + if (i) { + UNSIGNED8_REG_2_REG(d, s); + LSRS_rri(d, d, i); + DUPLICACTE_CARRY + } else { + SIGNED8_REG_2_REG(d, s); + TST_rr(d, d); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_LSR_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_LSR_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + if (i) { + UNSIGNED16_REG_2_REG(d, s); + LSRS_rri(d, d, i); + DUPLICACTE_CARRY + } else { + SIGNED16_REG_2_REG(d, s); + TST_rr(d, d); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_LSR_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_LSR_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + if (i) { + LSRS_rri(d, s, i); + DUPLICACTE_CARRY + } else { + MOVS_rr(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_LSR_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_LSR_b_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + UNSIGNED8_REG_2_REG(d, s); + AND_rri(REG_WORK1, i, 63); + LSR_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_LSR_b_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_LSR_w_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + UNSIGNED16_REG_2_REG(d, s); + AND_rri(REG_WORK1, i, 63); + LSR_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_LSR_w_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_LSR_l_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + AND_rri(REG_WORK1, i, 63); + LSR_rrr(d, s, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_LSR_l_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_LSR_b_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + SIGNED8_REG_2_REG(d, s); // Make sure, sign is in MSB if shift count is 0 (to get correct N flag) + MSR_CPSRf_i(0); + ANDS_rri(REG_WORK1, i, 63); + BEQ_i(4); // No shift -> X flag unchanged + AND_rri(d, d, 0xff); // Shift count is not 0 -> unsigned required + LSRS_rrr(d, d, REG_WORK1); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + TST_rr(d, d); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_LSR_b_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_LSR_w_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + SIGNED16_REG_2_REG(d, s); // Make sure, sign is in MSB if shift count is 0 (to get correct N flag) + MSR_CPSRf_i(0); + ANDS_rri(REG_WORK1, i, 63); + BEQ_i(4); // No shift -> X flag unchanged + UXTH_rr(d, d); // Shift count is not 0 -> unsigned required + LSRS_rrr(d, d, REG_WORK1); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + TST_rr(d, d); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_LSR_w_reg,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_LSR_l_reg,(W4 d, RR4 s, RR4 i)) +{ + i = readreg(i, 4); + s = readreg(s, 4); + d = writereg(d, 4); + int x = writereg(FLAGX, 4); + + MSR_CPSRf_i(0); + ANDS_rri(REG_WORK1, i, 63); + BEQ_i(3); // No shift -> X flag unchanged + LSRS_rrr(d, s, REG_WORK1); + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + B_i(0); + MOVS_rr(d, s); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_LSR_l_reg,(W4 d, RR4 s, RR4 i)) + +/* + * LSRW + * Operand Syntax: + * + * Operand Size: 16 + * + * X Set according to the last bit shifted out of the operand. Unaffected for a shift count of zero. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit shifted out of the operand. Cleared for a shift count of zero. + * + */ +MIDFUNC(2,jnf_LSRW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + UNSIGNED16_REG_2_REG(d, s); + LSR_rri(d, d, 1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_LSRW,(W4 d, RR4 s)) + +MIDFUNC(2,jff_LSRW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + UNSIGNED16_REG_2_REG(d, s); + MSR_CPSRf_i(0); + LSRS_rri(d, d, 1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_LSRW,(W4 d, RR4 s)) + +/* + * MOVE + * Operand Syntax: , + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Always cleared. + * + */ +MIDFUNC(2,jnf_MOVE,(W4 d, RR4 s)) +{ + if (isconst(s)) { + set_const(d, live.state[s].val); + return; + } + s = readreg(s, 4); + d = writereg(d, 4); + + MOV_rr(d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_MOVE,(W4 d, RR4 s)) + +MIDFUNC(2,jff_MOVE_b_imm,(W4 d, IMM s)) +{ + d = writereg(d, 4); + + SIGNED8_IMM_2_REG(d, (uae_u8)s); + MSR_CPSRf_i(0); + TST_rr(d, d); + + unlock2(d); +} +MENDFUNC(2,jff_MOVE_b_imm,(W4 d, IMM s)) + +MIDFUNC(2,jff_MOVE_w_imm,(W4 d, IMM s)) +{ + d = writereg(d, 4); + + SIGNED16_IMM_2_REG(d, (uae_u16)s); + MSR_CPSRf_i(0); + TST_rr(d, d); + + unlock2(d); +} +MENDFUNC(2,jff_MOVE_w_imm,(W4 d, IMM s)) + +MIDFUNC(2,jff_MOVE_l_imm,(W4 d, IMM s)) +{ + d = writereg(d, 4); + + compemu_raw_mov_l_ri(d, s); + MSR_CPSRf_i(0); + TST_rr(d, d); + + unlock2(d); +} +MENDFUNC(2,jff_MOVE_l_imm,(W4 d, IMM s)) + +MIDFUNC(2,jff_MOVE_b,(W4 d, RR1 s)) +{ + if (isconst(s)) { + COMPCALL(jff_MOVE_b_imm)(d, live.state[s].val); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(d, s); + MSR_CPSRf_i(0); + TST_rr(d, d); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_MOVE_b,(W4 d, RR1 s)) + +MIDFUNC(2,jff_MOVE_w,(W4 d, RR2 s)) +{ + if (isconst(s)) { + COMPCALL(jff_MOVE_w_imm)(d, live.state[s].val); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(d, s); + MSR_CPSRf_i(0); + TST_rr(d, d); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_MOVE_w,(W4 d, RR2 s)) + +MIDFUNC(2,jff_MOVE_l,(W4 d, RR4 s)) +{ + if (isconst(s)) { + COMPCALL(jff_MOVE_l_imm)(d, live.state[s].val); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + MOVS_rr(d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_MOVE_l,(W4 d, RR4 s)) + +/* + * MVMEL + * + * Flags: Not affected. + * + */ +MIDFUNC(3,jnf_MVMEL_w,(W4 d, RR4 s, IMM offset)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LDRH_rRI(REG_WORK1, s, offset); + REV16_rr(REG_WORK1, REG_WORK1); + SIGNED16_REG_2_REG(d, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_MVMEL_w,(W4 d, RR4 s, IMM offset)) + +MIDFUNC(3,jnf_MVMEL_l,(W4 d, RR4 s, IMM offset)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LDR_rRI(REG_WORK1, s, offset); + REV_rr(d, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_MVMEL_l,(W4 d, RR4 s, IMM offset)) + +/* + * MVMLE + * + * Flags: Not affected. + * + */ +MIDFUNC(3,jnf_MVMLE_w,(RR4 d, RR4 s, IMM offset)) +{ + s = readreg(s, 4); + d = readreg(d, 4); + + REV16_rr(REG_WORK1, s); + if (offset >= 0) + STRH_rRI(REG_WORK1, d, offset); + else + STRH_rRi(REG_WORK1, d, -offset); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_MVMLE_w,(RR4 d, RR4 s, IMM offset)) + +MIDFUNC(3,jnf_MVMLE_l,(RR4 d, RR4 s, IMM offset)) +{ + s = readreg(s, 4); + d = readreg(d, 4); + + REV_rr(REG_WORK1, s); + if (offset >= 0) + STR_rRI(REG_WORK1, d, offset); + else + STR_rRi(REG_WORK1, d, -offset); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_MVMLE_l,(RR4 d, RR4 s, IMM offset)) + +/* + * MOVE16 + * + * Flags: Not affected. + * + */ +MIDFUNC(2,jnf_MOVE16,(RR4 d, RR4 s)) +{ + s = readreg(s, 4); + d = readreg(d, 4); + + PUSH_REGS((1 << s) | (1 << d)); + + BIC_rri(s, s, 0x0000000F); + BIC_rri(d, d, 0x0000000F); + + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + + ADD_rrr(s, s, REG_WORK1); + ADD_rrr(d, d, REG_WORK1); + + LDR_rR(REG_WORK1, s); + LDR_rRI(REG_WORK2, s, 4); + STR_rR(REG_WORK1, d); + STR_rRI(REG_WORK2, d, 4); + + LDR_rRI(REG_WORK1, s, 8); + LDR_rRI(REG_WORK2, s, 12); + STR_rRI(REG_WORK1, d, 8); + STR_rRI(REG_WORK2, d, 12); + + POP_REGS((1 << s) | (1 << d)); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_MOVE16,(RR4 d, RR4 s)) + +/* + * MOVEA + * Operand Syntax: , An + * + * Operand Size: 16,32 + * + * Flags: Not affected. + * + */ +MIDFUNC(2,jnf_MOVEA_w,(W4 d, RR2 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_MOVEA_w,(W4 d, RR2 s)) + +MIDFUNC(2,jnf_MOVEA_l,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MOV_rr(d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_MOVEA_l,(W4 d, RR4 s)) + +/* + * MULS + * Operand Syntax: , Dn + * + * Operand Size: 16 + * + * X Not affected. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if overflow. Cleared otherwise. (32 Bit multiply only) + * C Always cleared. + * + */ +MIDFUNC(2,jnf_MULS,(RW4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + SIGN_EXTEND_16_REG_2_REG(d, d); + SIGN_EXTEND_16_REG_2_REG(REG_WORK1, s); + MUL_rrr(d, d, REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jnf_MULS,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_MULS,(RW4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + SIGN_EXTEND_16_REG_2_REG(d, d); + SIGN_EXTEND_16_REG_2_REG(REG_WORK1, s); + + MSR_CPSRf_i(0); + MULS_rrr(d, d, REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_MULS,(RW4 d, RR4 s)) + +MIDFUNC(2,jnf_MULS32,(RW4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + MUL_rrr(d, d, s); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jnf_MULS32,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_MULS32,(RW4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + MSR_CPSRf_i(0); + // L, H, + SMULLS_rrrr(d, REG_WORK2, d, s); + MRS_CPSR(REG_WORK1); + TEQ_rrASRi(REG_WORK2, d, 31); + CC_ORR_rri(NATIVE_CC_NE, REG_WORK1, REG_WORK1, ARM_V_FLAG); + MSR_CPSRf_r(REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_MULS32,(RW4 d, RR4 s)) + +MIDFUNC(2,jnf_MULS64,(RW4 d, RW4 s)) +{ + s = rmw(s, 4, 4); + d = rmw(d, 4, 4); + + // L, H, + SMULL_rrrr(d, s, d, s); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jnf_MULS64,(RW4 d, RW4 s)) + +MIDFUNC(2,jff_MULS64,(RW4 d, RW4 s)) +{ + s = rmw(s, 4, 4); + d = rmw(d, 4, 4); + + MSR_CPSRf_i(0); + // L, H, + SMULLS_rrrr(d, s, d, s); + MRS_CPSR(REG_WORK1); + TEQ_rrASRi(s, d, 31); + CC_ORR_rri(NATIVE_CC_NE, REG_WORK1, REG_WORK1, ARM_V_FLAG); + MSR_CPSRf_r(REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_MULS64,(RW4 d, RW4 s)) + +/* + * MULU + * Operand Syntax: , Dn + * + * Operand Size: 16 + * + * X Not affected. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if overflow. Cleared otherwise. (32 Bit multiply only) + * C Always cleared. + * + */ +MIDFUNC(2,jnf_MULU,(RW4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + ZERO_EXTEND_16_REG_2_REG(d, d); + ZERO_EXTEND_16_REG_2_REG(REG_WORK1, s); + + MUL_rrr(d, d, REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jnf_MULU,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_MULU,(RW4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + ZERO_EXTEND_16_REG_2_REG(d, d); + ZERO_EXTEND_16_REG_2_REG(REG_WORK1, s); + + MSR_CPSRf_i(0); + MULS_rrr(d, d, REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_MULU,(RW4 d, RR4 s)) + +MIDFUNC(2,jnf_MULU32,(RW4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + MUL_rrr(d, d, s); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jnf_MULU32,(RW4 d, RR4 s)) + +MIDFUNC(2,jff_MULU32,(RW4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + // L, H, + MSR_CPSRf_i(0); + UMULLS_rrrr(d, REG_WORK2, d, s); + MRS_CPSR(REG_WORK1); + TST_rr(REG_WORK2, REG_WORK2); + CC_ORR_rri(NATIVE_CC_NE, REG_WORK1, REG_WORK1, ARM_V_FLAG); + MSR_CPSRf_r(REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_MULU32,(RW4 d, RR4 s)) + +MIDFUNC(2,jnf_MULU64,(RW4 d, RW4 s)) +{ + s = rmw(s, 4, 4); + d = rmw(d, 4, 4); + + // L, H, + UMULL_rrrr(d, s, d, s); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jnf_MULU64,(RW4 d, RW4 s)) + +MIDFUNC(2,jff_MULU64,(RW4 d, RW4 s)) +{ + s = rmw(s, 4, 4); + d = rmw(d, 4, 4); + + // L, H, + MSR_CPSRf_i(0); + UMULLS_rrrr(d, s, d, s); + MRS_CPSR(REG_WORK1); + TST_rr(s, s); + CC_ORR_rri(NATIVE_CC_NE, REG_WORK1, REG_WORK1, ARM_V_FLAG); + MSR_CPSRf_r(REG_WORK1); + + unlock2(s); + unlock2(d); +} +MENDFUNC(2,jff_MULU64,(RW4 d, RW4 s)) + +/* + * NEG + * Operand Syntax: + * + * Operand Size: 8,16,32 + * + * X Set the same as the carry bit. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if an overflow occurs. Cleared otherwise. + * C Cleared if the result is zero. Set otherwise. + * + */ +MIDFUNC(2,jnf_NEG_b,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(REG_WORK1, s); + RSB_rri(d, REG_WORK1, 0); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_NEG_b,(W4 d, RR4 s)) + +MIDFUNC(2,jnf_NEG_w,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(REG_WORK1, s); + RSB_rri(d, REG_WORK1, 0); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_NEG_w,(W4 d, RR4 s)) + +MIDFUNC(2,jnf_NEG_l,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + RSB_rri(d, s, 0); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_NEG_l,(W4 d, RR4 s)) + +MIDFUNC(2,jff_NEG_b,(W4 d, RR1 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(REG_WORK1, s); + RSBS_rri(d, REG_WORK1, 0); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_NEG_b,(W4 d, RR1 s)) + +MIDFUNC(2,jff_NEG_w,(W4 d, RR2 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(REG_WORK1, s); + RSBS_rri(d, REG_WORK1, 0); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_NEG_w,(W4 d, RR2 s)) + +MIDFUNC(2,jff_NEG_l,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + RSBS_rri(d, s, 0); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_NEG_l,(W4 d, RR4 s)) + +/* + * NEGX + * Operand Syntax: + * + * Operand Size: 8,16,32 + * + * X Set the same as the carry bit. + * N Set if the result is negative. Cleared otherwise. + * Z Cleared if the result is nonzero; unchanged otherwise. + * V Set if an overflow occurs. Cleared otherwise. + * C Cleared if the result is zero. Set otherwise. + * + * Attention: Z is cleared only if the result is nonzero. Unchanged otherwise + * + */ +MIDFUNC(2,jnf_NEGX_b,(W4 d, RR4 s)) +{ + int x = readreg(FLAGX, 4); + s = readreg(s, 4); + d = writereg(d, 4); + clobber_flags(); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + SIGNED8_REG_2_REG(REG_WORK1, s); + RSC_rri(d, REG_WORK1, 0); + + unlock2(d); + unlock2(s); + unlock2(x); +} +MENDFUNC(2,jnf_NEGX_b,(W4 d, RR4 s)) + +MIDFUNC(2,jnf_NEGX_w,(W4 d, RR4 s)) +{ + int x = readreg(FLAGX, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + clobber_flags(); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + SIGNED16_REG_2_REG(REG_WORK1, s); + RSC_rri(d, REG_WORK1, 0); + + unlock2(d); + unlock2(s); + unlock2(x); +} +MENDFUNC(2,jnf_NEGX_w,(W4 d, RR4 s)) + +MIDFUNC(2,jnf_NEGX_l,(W4 d, RR4 s)) +{ + int x = readreg(FLAGX, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + clobber_flags(); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + RSC_rri(d, s, 0); + + unlock2(d); + unlock2(s); + unlock2(x); +} +MENDFUNC(2,jnf_NEGX_l,(W4 d, RR4 s)) + +MIDFUNC(2,jff_NEGX_b,(W4 d, RR1 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + MVN_ri(REG_WORK2, 0); + CC_MVN_ri(NATIVE_CC_NE, REG_WORK2, ARM_Z_FLAG); + + SIGNED8_REG_2_REG(REG_WORK1, s); + RSCS_rri(d, REG_WORK1, 0); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + UBFX_rrii(x, REG_WORK1, 29, 1); // Duplicate carry + MSR_CPSR_r(REG_WORK1); + + unlock2(x); + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_NEGX_b,(W4 d, RR1 s)) + +MIDFUNC(2,jff_NEGX_w,(W4 d, RR2 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + MVN_ri(REG_WORK2, 0); + CC_MVN_ri(NATIVE_CC_NE, REG_WORK2, ARM_Z_FLAG); + + SIGNED16_REG_2_REG(REG_WORK1, s); + RSCS_rri(d, REG_WORK1, 0); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + UBFX_rrii(x, REG_WORK1, 29, 1); // Duplicate carry + MSR_CPSR_r(REG_WORK1); + + unlock2(x); + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_NEGX_w,(W4 d, RR2 s)) + +MIDFUNC(2,jff_NEGX_l,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + MVN_ri(REG_WORK2, 0); + CC_MVN_ri(NATIVE_CC_NE, REG_WORK2, ARM_Z_FLAG); + + RSCS_rri(d, s, 0); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + UBFX_rrii(x, REG_WORK1, 29, 1); // Duplicate carry + MSR_CPSR_r(REG_WORK1); + + unlock2(x); + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_NEGX_l,(W4 d, RR4 s)) + +/* + * NOT + * Operand Syntax: + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Always cleared. + * + */ +MIDFUNC(2,jnf_NOT,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MVN_rr(d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_NOT,(W4 d, RR4 s)) + +MIDFUNC(2,jff_NOT_b,(W4 d, RR1 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(d, s); + MSR_CPSRf_i(0); + MVNS_rr(d, d); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_NOT_b,(W4 d, RR1 s)) + +MIDFUNC(2,jff_NOT_w,(W4 d, RR2 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(d, s); + MSR_CPSRf_i(0); + MVNS_rr(d, d); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_NOT_w,(W4 d, RR2 s)) + +MIDFUNC(2,jff_NOT_l,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + MVNS_rr(d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_NOT_l,(W4 d, RR4 s)) + +/* + * OR + * Operand Syntax: , Dn + * Dn, + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Always cleared. + * + */ +MIDFUNC(3,jnf_OR,(W4 d, RR4 s, RR4 v)) +{ + if (isconst(s) && isconst(v)) { + set_const(d, live.state[s].val | live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + ORR_rrr(d, s, v); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_OR,(RW4 d, RR4 s, RR4 v)) + +MIDFUNC(3,jff_OR_b,(W4 d, RR1 s, RR1 v)) +{ + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED8_REG_2_REG(REG_WORK1, s); + SIGNED8_REG_2_REG(REG_WORK2, v); + MSR_CPSRf_i(0); + ORRS_rrr(d, REG_WORK1, REG_WORK2); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_OR_b,(RW4 d, RR1 s, RR1 v)) + +MIDFUNC(3,jff_OR_w,(W4 d, RR2 s, RR2 v)) +{ + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SIGNED16_REG_2_REG(REG_WORK1, s); + SIGNED16_REG_2_REG(REG_WORK2, v); + MSR_CPSRf_i(0); + ORRS_rrr(d, REG_WORK1, REG_WORK2); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_OR_w,(RW4 d, RR2 s, RR2 v)) + +MIDFUNC(3,jff_OR_l,(W4 d, RR4 s, RR4 v)) +{ + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + ORRS_rrr(d, s, v); + + unlock2(v); + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_OR_l,(RW4 d, RR4 s, RR4 v)) + +/* + * ORI + * Operand Syntax: #, CCR + * + * Operand Size: 8 + * + * X — Set if bit 4 of immediate operand is one; unchanged otherwise. + * N — Set if bit 3 of immediate operand is one; unchanged otherwise. + * Z — Set if bit 2 of immediate operand is one; unchanged otherwise. + * V — Set if bit 1 of immediate operand is one; unchanged otherwise. + * C — Set if bit 0 of immediate operand is one; unchanged otherwise. + * + */ +MIDFUNC(1,jff_ORSR,(IMM s, IMM x)) +{ + MRS_CPSR(REG_WORK1); + ORR_rri(REG_WORK1, REG_WORK1, s); + MSR_CPSRf_r(REG_WORK1); + + if (x) { + int f = writereg(FLAGX, 4); + MOV_ri(f, 1); + unlock2(f); + } +} +MENDFUNC(1,jff_ORSR,(IMM s)) + +/* + * ROL + * Operand Syntax: Dx, Dy + * #, Dy + * + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit rotated out of the operand. Cleared when the rotate count is zero. + * + */ +MIDFUNC(3,jnf_ROL_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if(i & 0x1f) { + LSL_rri(d, s, 24); + ORR_rrrLSRi(d, d, d, 8); + ORR_rrrLSRi(d, d, d, 16); + ROR_rri(d, d, (32 - (i & 0x1f))); + } else { + MOV_rr(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ROL_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROL_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if(i & 0x1f) { + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + ROR_rri(d, d, (32 - (i & 0x1f))); + } else { + MOV_rr(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ROL_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROL_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if(i & 0x1f) { + ROR_rri(d, s, (32 - (i & 0x1f))); + } else { + MOV_rr(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ROL_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROL_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 24); + ORR_rrrLSRi(d, d, d, 8); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + if (i) { + if(i & 0x1f) + RORS_rri(d, d, (32 - (i & 0x1f))); + else + TST_rr(d, d); + + MRS_CPSR(REG_WORK2); + TST_ri(d, 1); + CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); + CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK2); + } else { + TST_rr(d, d); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ROL_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROL_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + if (i) { + if(i & 0x1f) + RORS_rri(d, d, (32 - (i & 0x1f))); + else + TST_rr(d, d); + + MRS_CPSR(REG_WORK2); + TST_ri(d, 1); + CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); + CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK2); + } else { + TST_rr(d, d); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ROL_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROL_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + if (i) { + if(i & 0x1f) + RORS_rri(d, s, (32 - (i & 0x1f))); + else + MOVS_rr(d, s); + + MRS_CPSR(REG_WORK2); + TST_ri(d, 1); + CC_ORR_rri(NATIVE_CC_NE, REG_WORK2, REG_WORK2, ARM_C_FLAG); + CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK2); + } else { + MOVS_rr(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ROL_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROL_b,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jnf_ROL_b_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + AND_rri(REG_WORK1, i, 0x1f); + RSB_rri(REG_WORK1, REG_WORK1, 32); + + LSL_rri(d, s, 24); + ORR_rrrLSRi(d, d, d, 8); + ORR_rrrLSRi(d, d, d, 16); + ROR_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_ROL_b,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ROL_w,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jnf_ROL_w_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + AND_rri(REG_WORK1, i, 0x1f); + RSB_rri(REG_WORK1, REG_WORK1, 32); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + ROR_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_ROL_w,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ROL_l,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jnf_ROL_l_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + AND_rri(REG_WORK1, i, 0x1f); + RSB_rri(REG_WORK1, REG_WORK1, 32); + + ROR_rrr(d, s, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_ROL_l,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROL_b,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jff_ROL_b_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + AND_rri(REG_WORK1, i, 0x1f); + RSB_rri(REG_WORK1, REG_WORK1, 32); + + LSL_rri(d, s, 24); + ORR_rrrLSRi(d, d, d, 8); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + RORS_rrr(d, d, REG_WORK1); + + MRS_CPSR(REG_WORK2); + TST_ri(d, 1); + ORR_rri(REG_WORK2, REG_WORK2, ARM_C_FLAG); + CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK2); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ROL_b,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROL_w,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jff_ROL_w_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + AND_rri(REG_WORK1, i, 0x1f); + RSB_rri(REG_WORK1, REG_WORK1, 32); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + RORS_rrr(d, d, REG_WORK1); + + MRS_CPSR(REG_WORK2); + TST_ri(d, 1); + ORR_rri(REG_WORK2, REG_WORK2, ARM_C_FLAG); + CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK2); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ROL_w,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROL_l,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jff_ROL_l_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + AND_rri(REG_WORK1, i, 0x1f); + RSB_rri(REG_WORK1, REG_WORK1, 32); + + MSR_CPSRf_i(0); + RORS_rrr(d, s, REG_WORK1); + + MRS_CPSR(REG_WORK2); + TST_ri(d, 1); + ORR_rri(REG_WORK2, REG_WORK2, ARM_C_FLAG); + CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK2); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ROL_l,(W4 d, RR4 s, RR4 i)) + +/* + * ROLW + * Operand Syntax: + * + * Operand Size: 16 + * + * X Not affected. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit rotated out of the operand. Cleared when the rotate count is zero. + * + */ +MIDFUNC(2,jnf_ROLW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + ROR_rri(d, d, (32 - 1)); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_ROLW,(W4 d, RR4 s)) + +MIDFUNC(2,jff_ROLW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + RORS_rri(d, d, (32 - 1)); + + MRS_CPSR(REG_WORK2); + TST_ri(d, 1); + ORR_rri(REG_WORK2, REG_WORK2, ARM_C_FLAG); + CC_BIC_rri(NATIVE_CC_EQ, REG_WORK2, REG_WORK2, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK2); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_ROLW,(W4 d, RR4 s)) + +/* + * ROXL + * Operand Syntax: Dx, Dy + * #, Dy + * + * Operand Size: 8,16,32 + * + * X Set according to the last bit rotated out of the operand. Unchanged when the rotate count is zero. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit rotated out of the operand. Cleared when the rotate count is zero. + * + */ +MIDFUNC(3,jnf_ROXL_b_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jnf_ROXL_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROXL_w_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jnf_ROXL_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROXL_l_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jnf_ROXL_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROXL_b_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jff_ROXL_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROXL_w_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jff_ROXL_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROXL_l_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jff_ROXL_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROXL_b,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jnf_ROXL_b,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ROXL_w,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jnf_ROXL_w,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ROXL_l,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jnf_ROXL_l,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROXL_b,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jff_ROXL_b,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROXL_w,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jff_ROXL_w,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROXL_l,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jff_ROXL_l,(W4 d, RR4 s, RR4 i)) + +/* + * ROXLW + * Operand Syntax: + * + * Operand Size: 16 + * + * X Set according to the last bit rotated out of the operand. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit rotated out of the operand. + * + */ +MIDFUNC(2,jnf_ROXLW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + int x = readreg(FLAGX, 4); + d = writereg(d, 4); + + clobber_flags(); + + // Restore X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + MSR_CPSR_r(REG_WORK1); + + LSL_rri(d, s, 1); + ADC_rri(d, d, 0); + + unlock2(d); + unlock2(x); + unlock2(s); +} +MENDFUNC(2,jnf_ROXLW,(W4 d, RR4 s)) + +MIDFUNC(2,jff_ROXLW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + MSR_CPSR_r(REG_WORK1); + + LSL_rri(d, s, 1); + ADC_rri(d, d, 0); + MSR_CPSRf_i(0); + LSLS_rri(d, d, 15); + LSR_rri(d, d, 16); + + // Duplicate carry + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + + unlock2(x); + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_ROXLW,(W4 d, RR4 s)) + +/* + * ROR + * Operand Syntax: Dx, Dy + * #, Dy + * + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit rotated out of the operand. Cleared when the rotate count is zero. + * + */ +MIDFUNC(3,jnf_ROR_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if(i & 0x07) { + LSL_rri(d, s, 24); + ORR_rrrLSRi(d, d, d, 8); + ORR_rrrLSRi(d, d, d, 16); + ROR_rri(d, d, i & 0x07); + } else { + MOV_ri(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ROR_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROR_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + if(i & 0x0f) { + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + ROR_rri(d, d, i & 0x0f); + } else { + MOV_ri(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ROR_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROR_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + ROR_rri(d, s, i & 31); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_ROR_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROR_b_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 24); + ORR_rrrLSRi(d, d, d, 8); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + if(i & 0x07) { + RORS_rri(d, d, i & 0x07); + } else if (i > 0x07) { + TST_rr(d, d); + // We need to copy MSB to carry + MRS_CPSR(REG_WORK1); + BIC_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + CC_ORR_rri(NATIVE_CC_MI, REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + } else { + TST_rr(d, d); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ROR_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROR_w_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + if(i & 0x0f) { + RORS_rri(d, d, i & 0x0f); + } else if (i > 0x0f) { + TST_rr(d, d); + // We need to copy MSB to carry + MRS_CPSR(REG_WORK1); + BIC_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + CC_ORR_rri(NATIVE_CC_MI, REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + } else { + TST_rr(d, d); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ROR_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROR_l_imm,(W4 d, RR4 s, IMM i)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + if(i & 0x1f) { + RORS_rri(d, s, i & 0x1f); + } else if (i > 0x1f) { + MOVS_ri(d, s); + // We need to copy MSB to carry + MRS_CPSR(REG_WORK1); + BIC_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + CC_ORR_rri(NATIVE_CC_MI, REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + } else { + MOVS_ri(d, s); + } + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_ROR_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROR_b,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jnf_ROR_b_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 24); + ORR_rrrLSRi(d, d, d, 8); + ORR_rrrLSRi(d, d, d, 16); + ROR_rrr(d, d, i); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_ROR_b,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ROR_w,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jnf_ROR_w_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + ROR_rrr(d, d, i); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_ROR_w,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ROR_l,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jnf_ROR_l_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + ROR_rrr(d, s, i); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jnf_ROR_l,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROR_b,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jff_ROR_b_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 24); + ORR_rrrLSRi(d, d, d, 8); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + AND_rri(REG_WORK1, i, 63); + RORS_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ROR_b,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROR_w,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jff_ROR_w_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + AND_rri(REG_WORK1, i, 63); + RORS_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ROR_w,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROR_l,(W4 d, RR4 s, RR4 i)) +{ + if (isconst(i)) { + COMPCALL(jff_ROR_l_imm)(d, s, (uae_u8)live.state[i].val); + return; + } + + s = readreg(s, 4); + i = readreg(i, 4); + d = writereg(d, 4); + + MSR_CPSRf_i(0); + AND_rri(REG_WORK1, i, 63); + RORS_rrr(d, s, REG_WORK1); + + unlock2(d); + unlock2(s); + unlock2(i); +} +MENDFUNC(3,jff_ROR_l,(W4 d, RR4 s, RR4 i)) + +/* + * RORW + * Operand Syntax: + * + * Operand Size: 16 + * + * X Not affected. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit rotated out of the operand. + * + */ +MIDFUNC(2,jnf_RORW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + ROR_rri(d, d, 1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_RORW,(W4 d, RR4 s)) + +MIDFUNC(2,jff_RORW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + MSR_CPSRf_i(0); + RORS_rri(d, d, 1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_RORW,(W4 d, RR4 s)) + +/* + * ROXR + * Operand Syntax: Dx, Dy + * #, Dy + * + * Operand Size: 8,16,32 + * + * X Set according to the last bit rotated out of the operand. Cleared when the rotate count is zero. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit rotated out of the operand. Cleared when the rotate count is zero. + * + */ +MIDFUNC(3,jnf_ROXR_b_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jnf_ROXR_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROXR_w_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jnf_ROXR_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROXR_l_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jnf_ROXR_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROXR_b_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jff_ROXR_b_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROXR_w_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jff_ROXR_w_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jff_ROXR_l_imm,(W4 d, RR4 s, IMM i)) +{ +} +MENDFUNC(3,jff_ROXR_l_imm,(W4 d, RR4 s, IMM i)) + +MIDFUNC(3,jnf_ROXR_b,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jnf_ROXR_b,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ROXR_w,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jnf_ROXR_w,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jnf_ROXR_l,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jnf_ROXR_l,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROXR_b,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jff_ROXR_b,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROXR_w,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jff_ROXR_w,(W4 d, RR4 s, RR4 i)) + +MIDFUNC(3,jff_ROXR_l,(W4 d, RR4 s, RR4 i)) +{ +} +MENDFUNC(3,jff_ROXR_l,(W4 d, RR4 s, RR4 i)) + +/* + * ROXRW + * Operand Syntax: + * + * Operand Size: 16 + * + * X Set according to the last bit rotated out of the operand. + * N Set if the most significant bit of the result is set. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Always cleared. + * C Set according to the last bit rotated out of the operand. + * + */ +MIDFUNC(2,jnf_ROXRW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + int x = readreg(FLAGX, 4); + d = writereg(d, 4); + + clobber_flags(); + + // Restore X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + MSR_CPSR_r(REG_WORK1); + + LSL_rri(d, s, 16); + RRX_rr(d, d); + LSR_rri(d, d, 16); + + unlock2(d); + unlock2(x); + unlock2(s); +} +MENDFUNC(2,jnf_ROXRW,(W4 d, RR4 s)) + +MIDFUNC(2,jff_ROXRW,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + MSR_CPSR_r(REG_WORK1); + + LSL_rri(d, s, 16); + ORR_rrrLSRi(d, d, d, 16); + RRXS_rr(d, d); + LSR_rri(d, d, 16); + MRS_CPSR(REG_WORK1); + BIC_rri(REG_WORK1, REG_WORK1, ARM_V_FLAG); + MSR_CPSR_r(REG_WORK1); + + // Duplicate carry + MOV_ri(x, 1); + CC_MOV_ri(NATIVE_CC_CC, x, 0); + + unlock2(x); + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jff_ROXRW,(W4 d, RR4 s)) + +/* + * SCC + * + */ +MIDFUNC(2,jnf_SCC,(W4 d, IMM cc)) +{ + d = writereg(d, 1); + + switch (cc) { + case 9: // LS + MOV_ri(d, 0); + CC_MOV_ri(NATIVE_CC_CS, d, 0xff); + CC_MOV_ri(NATIVE_CC_EQ, d, 0xff); + break; + + case 8: // HI + MOV_ri(d, 0); + CC_MOV_ri(NATIVE_CC_CC, d, 0xff); + CC_MOV_ri(NATIVE_CC_EQ, d, 0); + break; + + default: + MOV_ri(d, 0xff); + CC_MOV_ri(cc^1, d, 0); + break; + } + + unlock2(d); +} +MENDFUNC(2,jnf_SCC,(W4 d, IMM cc)) + +/* + * SUB + * Operand Syntax: , Dn + * Dn, + * + * Operand Size: 8,16,32 + * + * X Set the same as the carry bit. + * N Set if the result is negative. Cleared otherwise. + * Z Set if the result is zero. Cleared otherwise. + * V Set if an overflow is generated. Cleared otherwise. + * C Set if a carry is generated. Cleared otherwise. + * + */ +MIDFUNC(3,jnf_SUB_b_imm,(W4 d, RR4 s, IMM v)) +{ + if (isconst(s)) { + set_const(d, live.state[s].val - v); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + UNSIGNED8_IMM_2_REG(REG_WORK1, (uae_u8)v); + SUB_rrr(d, s, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_SUB_b_imm,(W4 d, RR4 s, IMM v)) + +MIDFUNC(3,jnf_SUB_b,(W4 d, RR4 s, RR4 v)) +{ + if (isconst(v)) { + COMPCALL(jnf_SUB_b_imm)(d, s, live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SUB_rrr(d, s, v); + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jnf_SUB_b,(W4 d, RR4 s, RR4 v)) + +MIDFUNC(3,jnf_SUB_w_imm,(W4 d, RR4 s, IMM v)) +{ + if (isconst(s)) { + set_const(d, live.state[s].val - v); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + UNSIGNED16_IMM_2_REG(REG_WORK1, (uae_u16)v); + SUB_rrr(d, s, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_SUB_w_imm,(W4 d, RR4 s, IMM v)) + +MIDFUNC(3,jnf_SUB_w,(W4 d, RR4 s, RR4 v)) +{ + if (isconst(v)) { + COMPCALL(jnf_SUB_w_imm)(d, s, live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SUB_rrr(d, s, v); + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jnf_SUB_w,(W4 d, RR4 s, RR4 v)) + +MIDFUNC(3,jnf_SUB_l_imm,(W4 d, RR4 s, IMM v)) +{ + if (isconst(s)) { + set_const(d, live.state[s].val - v); + return; + } + + s = readreg(s, 4); + d = writereg(d, 4); + + compemu_raw_mov_l_ri(REG_WORK1, v); + SUB_rrr(d, s, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jnf_SUB_l_imm,(W4 d, RR4 s, IMM v)) + +MIDFUNC(3,jnf_SUB_l,(W4 d, RR4 s, RR4 v)) +{ + if (isconst(v)) { + COMPCALL(jnf_SUB_l_imm)(d, s, live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SUB_rrr(d, s, v); + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jnf_SUB_l,(W4 d, RR4 s, RR4 v)) + +MIDFUNC(3,jff_SUB_b_imm,(W4 d, RR1 s, IMM v)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(REG_WORK1, s, 24); + SUBS_rri(d, REG_WORK1, (v << 24)); + ASR_rri(d, d, 24); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_SUB_b_imm,(W4 d, RR1 s, IMM v)) + +MIDFUNC(3,jff_SUB_b,(W4 d, RR1 s, RR1 v)) +{ + if (isconst(v)) { + COMPCALL(jff_SUB_b_imm)(d, s, live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(REG_WORK1, s, 24); + SUBS_rrrLSLi(d, REG_WORK1, v, 24); + ASR_rri(d, d, 24); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_SUB_b,(W4 d, RR1 s, RR1 v)) + +MIDFUNC(3,jff_SUB_w_imm,(W4 d, RR2 s, IMM v)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + uae_s32 offs = data_word_offs(v); + LDR_rRI(REG_WORK1, RPC_INDEX, offs); + LSL_rri(REG_WORK2, s, 16); + SUBS_rrrLSLi(d, REG_WORK2, REG_WORK1, 16); + ASR_rri(d, d, 16); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_SUB_w_imm,(W4 d, RR2 s, IMM v)) + +MIDFUNC(3,jff_SUB_w,(W4 d, RR2 s, RR2 v)) +{ + if (isconst(v)) { + COMPCALL(jff_SUB_w_imm)(d, s, live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + LSL_rri(REG_WORK1, s, 16); + SUBS_rrrLSLi(d, REG_WORK1, v, 16); + ASR_rri(d, d, 16); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_SUB_w,(W4 d, RR2 s, RR2 v)) + +MIDFUNC(3,jff_SUB_l_imm,(W4 d, RR4 s, IMM v)) +{ + s = readreg(s, 4); + d = writereg(d, 4); + + compemu_raw_mov_l_ri(REG_WORK2, v); + SUBS_rrr(d, s, REG_WORK2); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); +} +MENDFUNC(3,jff_SUB_l_imm,(W4 d, RR4 s, IMM v)) + +MIDFUNC(3,jff_SUB_l,(W4 d, RR4 s, RR4 v)) +{ + if (isconst(v)) { + COMPCALL(jff_SUB_l_imm)(d, s, live.state[v].val); + return; + } + + v = readreg(v, 4); + s = readreg(s, 4); + d = writereg(d, 4); + + SUBS_rrr(d, s, v); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + DUPLICACTE_CARRY + + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_SUB_l,(W4 d, RR4 s, RR4 v)) + +/* + * SUBA + * + * Operand Syntax: , Dn + * + * Operand Size: 16,32 + * + * Flags: Not affected. + * + */ +MIDFUNC(2,jnf_SUBA_w,(W4 d, RR2 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + SIGNED16_REG_2_REG(REG_WORK1, s); + SUB_rrr(d, d, REG_WORK1); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_SUBA_w,(W4 d, RR2 s)) + +MIDFUNC(2,jnf_SUBA_l,(W4 d, RR4 s)) +{ + s = readreg(s, 4); + d = rmw(d, 4, 4); + + SUB_rrr(d, d, s); + + unlock2(d); + unlock2(s); +} +MENDFUNC(2,jnf_SUBA_l,(W4 d, RR4 s)) + +/* + * SUBX + * Operand Syntax: Dy, Dx + * -(Ay), -(Ax) + * + * Operand Size: 8,16,32 + * + * X Set the same as the carry bit. + * N Set if the result is negative. Cleared otherwise. + * Z Cleared if the result is nonzero. Unchanged otherwise. + * V Set if an overflow is generated. Cleared otherwise. + * C Set if a carry is generated. Cleared otherwise. + * + * Attention: Z is cleared only if the result is nonzero. Unchanged otherwise + * + */ +MIDFUNC(3,jnf_SUBX,(W4 d, RR4 s, RR4 v)) +{ + int x = readreg(FLAGX, 4); + s = readreg(s, 4); + v = readreg(v, 4); + d = writereg(d, 4); + + clobber_flags(); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + SBC_rrr(d, s, v); + + unlock2(d); + unlock2(s); + unlock2(v); + unlock2(x); +} +MENDFUNC(3,jnf_SUBX,(W4 d, RR4 s, RR4 v)) + +MIDFUNC(3,jff_SUBX_b,(W4 d, RR1 s, RR1 v)) +{ + s = readreg(s, 4); + v = readreg(v, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + MVN_ri(REG_WORK2, 0); + CC_MVN_ri(NATIVE_CC_NE, REG_WORK2, ARM_Z_FLAG); + + LSL_rri(REG_WORK1, s, 24); + SBCS_rrrLSLi(d, REG_WORK1, v, 24); + ASR_rri(d, d, 24); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + UBFX_rrii(x, REG_WORK1, 29, 1); // Duplicate carry + MSR_CPSR_r(REG_WORK1); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_SUBX_b,(W4 d, RR1 s, RR1 v)) + +MIDFUNC(3,jff_SUBX_w,(W4 d, RR2 s, RR2 v)) +{ + s = readreg(s, 4); + v = readreg(v, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + MVN_ri(REG_WORK2, 0); + CC_MVN_ri(NATIVE_CC_NE, REG_WORK2, ARM_Z_FLAG); + + LSL_rri(REG_WORK1, s, 16); + SBCS_rrrLSLi(d,REG_WORK1,v, 16); + ASR_rri(d, d, 16); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + UBFX_rrii(x, REG_WORK1, 29, 1); // Duplicate carry + MSR_CPSR_r(REG_WORK1); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_SUBX_w,(W4 d, RR2 s, RR2 v)) + +MIDFUNC(3,jff_SUBX_l,(W4 d, RR4 s, RR4 v)) +{ + s = readreg(s, 4); + v = readreg(v, 4); + d = writereg(d, 4); + int x = rmw(FLAGX, 4, 4); + + // Restore inverted X to carry + MRS_CPSR(REG_WORK1); + BFI_rrii(REG_WORK1, x, 29, 29); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + MSR_CPSR_r(REG_WORK1); + + MVN_ri(REG_WORK2, 0); + CC_MVN_ri(NATIVE_CC_NE, REG_WORK2, ARM_Z_FLAG); + + SBCS_rrr(d, s, v); + + MRS_CPSR(REG_WORK1); + EOR_rri(REG_WORK1, REG_WORK1, ARM_C_FLAG); + AND_rrr(REG_WORK1, REG_WORK1, REG_WORK2); + UBFX_rrii(x, REG_WORK1, 29, 1); // Duplicate carry + MSR_CPSR_r(REG_WORK1); + + unlock2(x); + unlock2(d); + unlock2(s); + unlock2(v); +} +MENDFUNC(3,jff_SUBX_l,(W4 d, RR4 s, RR4 v)) + +/* + * SWAP + * Operand Syntax: Dn + * + * Operand Size: 16 + * + * X Not affected. + * N Set if the most significant bit of the 32-bit result is set. Cleared otherwise. + * Z Set if the 32-bit result is zero. Cleared otherwise. + * V Always cleared. + * C Always cleared. + * + */ +MIDFUNC(1,jnf_SWAP,(RW4 d)) +{ + d = rmw(d, 4, 4); + + ROR_rri(d, d, 16); + + unlock2(d); +} +MENDFUNC(1,jnf_SWAP,(RW4 d)) + +MIDFUNC(1,jff_SWAP,(RW4 d)) +{ + d = rmw(d, 4, 4); + + ROR_rri(d, d, 16); + MSR_CPSRf_i(0); + TST_rr(d, d); + + unlock2(d); +} +MENDFUNC(1,jff_SWAP,(RW4 d)) + +/* + * TST + * Operand Syntax: + * + * Operand Size: 8,16,32 + * + * X Not affected. + * N Set if the operand is negative. Cleared otherwise. + * Z Set if the operand is zero. Cleared otherwise. + * V Always cleared. + * C Always cleared. + * + */ +MIDFUNC(1,jff_TST_b,(RR1 s)) +{ + if (isconst(s)) { + SIGNED8_IMM_2_REG(REG_WORK1, (uae_u8)live.state[s].val); + } else { + s = readreg(s, 4); + SIGNED8_REG_2_REG(REG_WORK1, s); + unlock2(s); + } + MSR_CPSRf_i(0); + TST_rr(REG_WORK1, REG_WORK1); +} +MENDFUNC(1,jff_TST_b,(RR1 s)) + +MIDFUNC(1,jff_TST_w,(RR2 s)) +{ + if (isconst(s)) { + SIGNED16_IMM_2_REG(REG_WORK1, (uae_u16)live.state[s].val); + } else { + s = readreg(s, 4); + SIGNED16_REG_2_REG(REG_WORK1, s); + unlock2(s); + } + MSR_CPSRf_i(0); + TST_rr(REG_WORK1, REG_WORK1); +} +MENDFUNC(1,jff_TST_w,(RR2 s)) + +MIDFUNC(1,jff_TST_l,(RR4 s)) +{ + MSR_CPSRf_i(0); + + if (isconst(s)) { + compemu_raw_mov_l_ri(REG_WORK1, live.state[s].val); + TST_rr(REG_WORK1, REG_WORK1); + } + else { + s = readreg(s, 4); + TST_rr(s, s); + unlock2(s); + } +} +MENDFUNC(1,jff_TST_l,(RR4 s)) + +/* + * Memory access functions + * + * Two versions: full address range and 24 bit address range + * + */ +MIDFUNC(2,jnf_MEM_WRITE_OFF_b,(RR4 adr, RR4 b)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + b = readreg(b, 4); + + STRB_rRR(b, adr, REG_WORK2); + + unlock2(b); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_WRITE_OFF_b,(RR4 adr, RR4 b)) + +MIDFUNC(2,jnf_MEM_WRITE_OFF_w,(RR4 adr, RR4 w)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + w = readreg(w, 4); + + REV16_rr(REG_WORK1, w); + STRH_rRR(REG_WORK1, adr, REG_WORK2); + + unlock2(w); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_WRITE_OFF_w,(RR4 adr, RR4 w)) + +MIDFUNC(2,jnf_MEM_WRITE_OFF_l,(RR4 adr, RR4 l)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + l = readreg(l, 4); + + REV_rr(REG_WORK1, l); + STR_rRR(REG_WORK1, adr, REG_WORK2); + + unlock2(l); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_WRITE_OFF_l,(RR4 adr, RR4 l)) + + +MIDFUNC(2,jnf_MEM_READ_OFF_b,(W4 d, RR4 adr)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + d = writereg(d, 4); + + LDRB_rRR(d, adr, REG_WORK2); + + unlock2(d); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_READ_OFF_b,(W4 d, RR4 adr)) + +MIDFUNC(2,jnf_MEM_READ_OFF_w,(W4 d, RR4 adr)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + d = writereg(d, 4); + + LDRH_rRR(REG_WORK1, adr, REG_WORK2); + REV16_rr(d, REG_WORK1); + + unlock2(d); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_READ_OFF_w,(W4 d, RR4 adr)) + +MIDFUNC(2,jnf_MEM_READ_OFF_l,(W4 d, RR4 adr)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + d = writereg(d, 4); + + LDR_rRR(REG_WORK1, adr, REG_WORK2); + REV_rr(d, REG_WORK1); + + unlock2(d); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_READ_OFF_l,(W4 d, RR4 adr)) + + +MIDFUNC(2,jnf_MEM_WRITE24_OFF_b,(RR4 adr, RR4 b)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + b = readreg(b, 4); + + BIC_rri(REG_WORK1, adr, 0xff000000); + STRB_rRR(b, REG_WORK1, REG_WORK2); + + unlock2(b); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_WRITE24_OFF_b,(RR4 adr, RR4 b)) + +MIDFUNC(2,jnf_MEM_WRITE24_OFF_w,(RR4 adr, RR4 w)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + w = readreg(w, 4); + + BIC_rri(REG_WORK1, adr, 0xff000000); + ADD_rrr(REG_WORK2, REG_WORK1, REG_WORK2); + REV16_rr(REG_WORK1, w); + STRH_rR(REG_WORK1, REG_WORK2); + + unlock2(w); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_WRITE24_OFF_w,(RR4 adr, RR4 w)) + +MIDFUNC(2,jnf_MEM_WRITE24_OFF_l,(RR4 adr, RR4 l)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + l = readreg(l, 4); + + BIC_rri(REG_WORK1, adr, 0xff000000); + ADD_rrr(REG_WORK2, REG_WORK1, REG_WORK2); + REV_rr(REG_WORK1, l); + STR_rR(REG_WORK1, REG_WORK2); + + unlock2(l); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_WRITE24_OFF_l,(RR4 adr, RR4 l)) + + +MIDFUNC(2,jnf_MEM_READ24_OFF_b,(W4 d, RR4 adr)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + d = writereg(d, 4); + + BIC_rri(REG_WORK1, adr, 0xff000000); + LDRB_rRR(d, REG_WORK1, REG_WORK2); + + unlock2(d); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_READ24_OFF_b,(W4 d, RR4 adr)) + +MIDFUNC(2,jnf_MEM_READ24_OFF_w,(W4 d, RR4 adr)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + d = writereg(d, 4); + + BIC_rri(REG_WORK1, adr, 0xff000000); + LDRH_rRR(REG_WORK1, REG_WORK1, REG_WORK2); + REV16_rr(d, REG_WORK1); + + unlock2(d); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_READ24_OFF_w,(W4 d, RR4 adr)) + +MIDFUNC(2,jnf_MEM_READ24_OFF_l,(W4 d, RR4 adr)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + d = writereg(d, 4); + + BIC_rri(REG_WORK1, adr, 0xff000000); + LDR_rRR(d, REG_WORK1, REG_WORK2); + REV_rr(d, d); + + unlock2(d); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_READ24_OFF_l,(W4 d, RR4 adr)) + + +MIDFUNC(2,jnf_MEM_GETADR_OFF,(W4 d, RR4 adr)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + d = writereg(d, 4); + + ADD_rrr(d, adr, REG_WORK2); + + unlock2(d); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_GETADR_OFF,(W4 d, RR4 adr)) + +MIDFUNC(2,jnf_MEM_GETADR24_OFF,(W4 d, RR4 adr)) +{ + uae_s32 offs = get_data_natmem(); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + + adr = readreg(adr, 4); + d = writereg(d, 4); + + BIC_rri(REG_WORK1, adr, 0xff000000); + ADD_rrr(d, REG_WORK1, REG_WORK2); + + unlock2(d); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_GETADR24_OFF,(W4 d, RR4 adr)) + + +MIDFUNC(2,jnf_MEM_GETBANKFUNC,(W4 d, RR4 adr, IMM offset)) +{ + adr = readreg(adr, 4); + d = writereg(d, 4); + + uae_s32 offs = data_long_offs((uae_u32)mem_banks); + LDR_rRI(REG_WORK2, RPC_INDEX, offs); + LSR_rri(REG_WORK1, adr, 16); + LDR_rRR_LSLi(d, REG_WORK2, REG_WORK1, 2); + LDR_rRI(d, d, offset); + + unlock2(d); + unlock2(adr); +} +MENDFUNC(2,jnf_MEM_GETBANKFUNC,(W4 d, RR4 adr, IMM offset)) diff --git a/src/jit/compemu_midfunc_arm2.h b/src/jit/compemu_midfunc_arm2.h new file mode 100644 index 00000000..83940411 --- /dev/null +++ b/src/jit/compemu_midfunc_arm2.h @@ -0,0 +1,385 @@ +/* + * compiler/compemu_midfunc_arm2.h - Native MIDFUNCS for ARM (JIT v2) + * + * Copyright (c) 2014 Jens Heitmann of ARAnyM dev team (see AUTHORS) + * + * Inspired by Christian Bauer's Basilisk II + * + * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer + * + * Adaptation for Basilisk II and improvements, copyright 2000-2002 + * Gwenole Beauchesne + * + * Basilisk II (C) 1997-2002 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 + * + * Note: + * File is included by compemu.h + * + */ + +// Arm optimized midfunc +extern const uae_u32 ARM_CCR_MAP[]; + +// ADD +DECLARE_MIDFUNC(jnf_ADD(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jnf_ADD_imm(W4 d, RR4 s, IMM v)); +DECLARE_MIDFUNC(jnf_ADD_im8(W4 d, RR4 s, IMM v)); +DECLARE_MIDFUNC(jff_ADD_b(W4 d, RR1 s, RR1 v)); +DECLARE_MIDFUNC(jff_ADD_w(W4 d, RR2 s, RR2 v)); +DECLARE_MIDFUNC(jff_ADD_l(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jff_ADD_b_imm(W4 d, RR1 s, IMM v)); +DECLARE_MIDFUNC(jff_ADD_w_imm(W4 d, RR2 s, IMM v)); +DECLARE_MIDFUNC(jff_ADD_l_imm(W4 d, RR4 s, IMM v)); + +// ADDA +DECLARE_MIDFUNC(jnf_ADDA_b(W4 d, RR1 s)); +DECLARE_MIDFUNC(jnf_ADDA_w(W4 d, RR2 s)); +DECLARE_MIDFUNC(jnf_ADDA_l(W4 d, RR4 s)); + +// ADDX +DECLARE_MIDFUNC(jnf_ADDX(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jff_ADDX_b(W4 d, RR1 s, RR4 v)); +DECLARE_MIDFUNC(jff_ADDX_w(W4 d, RR2 s, RR4 v)); +DECLARE_MIDFUNC(jff_ADDX_l(W4 d, RR4 s, RR4 v)); + +// AND +DECLARE_MIDFUNC(jnf_AND(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jff_AND_b(W4 d, RR1 s, RR1 v)); +DECLARE_MIDFUNC(jff_AND_w(W4 d, RR2 s, RR2 v)); +DECLARE_MIDFUNC(jff_AND_l(W4 d, RR4 s, RR4 v)); + +// ANDSR +DECLARE_MIDFUNC(jff_ANDSR(IMM s, IMM x)); + +// ASL +DECLARE_MIDFUNC(jff_ASL_b_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_ASL_w_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_ASL_l_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_ASL_b_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ASL_w_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ASL_l_reg(W4 d, RR4 s, RR4 i)); + +// ASLW +DECLARE_MIDFUNC(jff_ASLW(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_ASLW(W4 d, RR4 s)); + +// ASR +DECLARE_MIDFUNC(jnf_ASR_b_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jnf_ASR_w_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jnf_ASR_l_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_ASR_b_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_ASR_w_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_ASR_l_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jnf_ASR_b_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ASR_w_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ASR_l_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ASR_b_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ASR_w_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ASR_l_reg(W4 d, RR4 s, RR4 i)); + +// ASRW +DECLARE_MIDFUNC(jff_ASRW(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_ASRW(W4 d, RR4 s)); + +// BCHG +DECLARE_MIDFUNC(jnf_BCHG_b_imm(RW4 d, IMM s)); +DECLARE_MIDFUNC(jnf_BCHG_l_imm(RW4 d, IMM s)); + +DECLARE_MIDFUNC(jff_BCHG_b_imm(RW4 d, IMM s)); +DECLARE_MIDFUNC(jff_BCHG_l_imm(RW4 d, IMM s)); + +DECLARE_MIDFUNC(jnf_BCHG_b(RW4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_BCHG_l(RW4 d, RR4 s)); + +DECLARE_MIDFUNC(jff_BCHG_b(RW4 d, RR4 s)); +DECLARE_MIDFUNC(jff_BCHG_l(RW4 d, RR4 s)); + +// BCLR +DECLARE_MIDFUNC(jnf_BCLR_b_imm(RW4 d, IMM s)); +DECLARE_MIDFUNC(jnf_BCLR_l_imm(RW4 d, IMM s)); + +DECLARE_MIDFUNC(jnf_BCLR_b(RW4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_BCLR_l(RW4 d, RR4 s)); + +DECLARE_MIDFUNC(jff_BCLR_b_imm(RW4 d, IMM s)); +DECLARE_MIDFUNC(jff_BCLR_l_imm(RW4 d, IMM s)); + +DECLARE_MIDFUNC(jff_BCLR_b(RW4 d, RR4 s)); +DECLARE_MIDFUNC(jff_BCLR_l(RW4 d, RR4 s)); + +// BSET +DECLARE_MIDFUNC(jnf_BSET_b_imm(RW4 d, IMM s)); +DECLARE_MIDFUNC(jnf_BSET_l_imm(RW4 d, IMM s)); + +DECLARE_MIDFUNC(jnf_BSET_b(RW4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_BSET_l(RW4 d, RR4 s)); + +DECLARE_MIDFUNC(jff_BSET_b_imm(RW4 d, IMM s)); +DECLARE_MIDFUNC(jff_BSET_l_imm(RW4 d, IMM s)); + +DECLARE_MIDFUNC(jff_BSET_b(RW4 d, RR4 s)); +DECLARE_MIDFUNC(jff_BSET_l(RW4 d, RR4 s)); + +// BTST +DECLARE_MIDFUNC(jff_BTST_b_imm(RR4 d, IMM s)); +DECLARE_MIDFUNC(jff_BTST_l_imm(RR4 d, IMM s)); + +DECLARE_MIDFUNC(jff_BTST_b(RR4 d, RR4 s)); +DECLARE_MIDFUNC(jff_BTST_l(RR4 d, RR4 s)); + +// CLR +DECLARE_MIDFUNC (jnf_CLR(W4 d)); +DECLARE_MIDFUNC (jff_CLR(W4 d)); + +// CMP +DECLARE_MIDFUNC(jff_CMP_b(RR1 d, RR1 s)); +DECLARE_MIDFUNC(jff_CMP_w(RR2 d, RR2 s)); +DECLARE_MIDFUNC(jff_CMP_l(RR4 d, RR4 s)); + +// CMPA +DECLARE_MIDFUNC(jff_CMPA_w(RR2 d, RR2 s)); +DECLARE_MIDFUNC(jff_CMPA_l(RR4 d, RR4 s)); + +// DBCC +DECLARE_MIDFUNC(jff_DBCC(RR2 d, IMM cc)); + +// DIVU +DECLARE_MIDFUNC(jnf_DIVU(W4 d, RR4 s1, RR4 s2)); +DECLARE_MIDFUNC(jff_DIVU(W4 d, RR4 s1, RR4 s2)); + +// EOR +DECLARE_MIDFUNC(jnf_EOR(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jff_EOR_b(W4 d, RR1 s, RR1 v)); +DECLARE_MIDFUNC(jff_EOR_w(W4 d, RR2 s, RR2 v)); +DECLARE_MIDFUNC(jff_EOR_l(W4 d, RR4 s, RR4 v)); + +// EORSR +DECLARE_MIDFUNC(jff_EORSR(IMM s, IMM x)); + +// EXT +DECLARE_MIDFUNC(jnf_EXT_b(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_EXT_w(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_EXT_l(W4 d, RR4 s)); +DECLARE_MIDFUNC(jff_EXT_b(W4 d, RR4 s)); +DECLARE_MIDFUNC(jff_EXT_w(W4 d, RR4 s)); +DECLARE_MIDFUNC(jff_EXT_l(W4 d, RR4 s)); + +// LSL +DECLARE_MIDFUNC(jnf_LSL_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jnf_LSL_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_LSL_b_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_LSL_w_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_LSL_l_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_LSL_b_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_LSL_w_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_LSL_l_reg(W4 d, RR4 s, RR4 i)); + +// LSLW +DECLARE_MIDFUNC(jff_LSLW(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_LSLW(W4 d, RR4 s)); + +// LSR +DECLARE_MIDFUNC(jnf_LSR_b_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jnf_LSR_w_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jnf_LSR_l_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_LSR_b_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_LSR_w_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jff_LSR_l_imm(W4 d, RR4 s, IMM i)); +DECLARE_MIDFUNC(jnf_LSR_b_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_LSR_w_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_LSR_l_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_LSR_b_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_LSR_w_reg(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_LSR_l_reg(W4 d, RR4 s, RR4 i)); + +// LSRW +DECLARE_MIDFUNC(jff_LSRW(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_LSRW(W4 d, RR4 s)); + +// MOVE +DECLARE_MIDFUNC(jnf_MOVE(W4 d, RR4 s)); +DECLARE_MIDFUNC(jff_MOVE_b_imm(W4 d, IMM i)); +DECLARE_MIDFUNC(jff_MOVE_w_imm(W4 d, IMM i)); +DECLARE_MIDFUNC(jff_MOVE_l_imm(W4 d, IMM i)); +DECLARE_MIDFUNC(jff_MOVE_b(W4 d, RR1 s)); +DECLARE_MIDFUNC(jff_MOVE_w(W4 d, RR2 s)); +DECLARE_MIDFUNC(jff_MOVE_l(W4 d, RR4 s)); + +// MVMEL +DECLARE_MIDFUNC(jnf_MVMEL_w(W4 d, RR4 s, IMM offset)); +DECLARE_MIDFUNC(jnf_MVMEL_l(W4 d, RR4 s, IMM offset)); + +// MVMLE +DECLARE_MIDFUNC(jnf_MVMLE_w(RR4 d, RR4 s, IMM offset)); +DECLARE_MIDFUNC(jnf_MVMLE_l(RR4 d, RR4 s, IMM offset)); + +// MOVE16 +DECLARE_MIDFUNC(jnf_MOVE16(RR4 d, RR4 s)); + +// MOVEA +DECLARE_MIDFUNC(jnf_MOVEA_w(W4 d, RR2 s)); +DECLARE_MIDFUNC(jnf_MOVEA_l(W4 d, RR4 s)); + +// MULS +DECLARE_MIDFUNC (jnf_MULS(RW4 d, RR4 s)); +DECLARE_MIDFUNC (jff_MULS(RW4 d, RR4 s)); +DECLARE_MIDFUNC (jnf_MULS32(RW4 d, RR4 s)); +DECLARE_MIDFUNC (jff_MULS32(RW4 d, RR4 s)); +DECLARE_MIDFUNC (jnf_MULS64(RW4 d, RW4 s)); +DECLARE_MIDFUNC (jff_MULS64(RW4 d, RW4 s)); + +// MULU +DECLARE_MIDFUNC (jnf_MULU(RW4 d, RR4 s)); +DECLARE_MIDFUNC (jff_MULU(RW4 d, RR4 s)); +DECLARE_MIDFUNC (jnf_MULU32(RW4 d, RR4 s)); +DECLARE_MIDFUNC (jff_MULU32(RW4 d, RR4 s)); +DECLARE_MIDFUNC (jnf_MULU64(RW4 d, RW4 s)); +DECLARE_MIDFUNC (jff_MULU64(RW4 d, RW4 s)); + +// NEG +DECLARE_MIDFUNC(jnf_NEG_b(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_NEG_w(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_NEG_l(W4 d, RR4 s)); +DECLARE_MIDFUNC(jff_NEG_b(W4 d, RR1 s)); +DECLARE_MIDFUNC(jff_NEG_w(W4 d, RR2 s)); +DECLARE_MIDFUNC(jff_NEG_l(W4 d, RR4 s)); + +// NEGX +DECLARE_MIDFUNC(jnf_NEGX_b(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_NEGX_w(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_NEGX_l(W4 d, RR4 s)); +DECLARE_MIDFUNC(jff_NEGX_b(W4 d, RR1 s)); +DECLARE_MIDFUNC(jff_NEGX_w(W4 d, RR2 s)); +DECLARE_MIDFUNC(jff_NEGX_l(W4 d, RR4 s)); + +// NOT +DECLARE_MIDFUNC(jnf_NOT(W4 d, RR4 s)); +DECLARE_MIDFUNC(jff_NOT_b(W4 d, RR1 s)); +DECLARE_MIDFUNC(jff_NOT_w(W4 d, RR2 s)); +DECLARE_MIDFUNC(jff_NOT_l(W4 d, RR4 s)); + +// OR +DECLARE_MIDFUNC(jnf_OR(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jff_OR_b(W4 d, RR1 s, RR1 v)); +DECLARE_MIDFUNC(jff_OR_w(W4 d, RR2 s, RR2 v)); +DECLARE_MIDFUNC(jff_OR_l(W4 d, RR4 s, RR4 v)); + +// ORSR +DECLARE_MIDFUNC(jff_ORSR(IMM s, IMM x)); + +// ROL +DECLARE_MIDFUNC(jnf_ROL_b(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ROL_w(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ROL_l(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROL_b(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROL_w(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROL_l(W4 d, RR4 s, RR4 i)); + +// ROLW +DECLARE_MIDFUNC(jff_ROLW(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_ROLW(W4 d, RR4 s)); + +// RORW +DECLARE_MIDFUNC(jff_RORW(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_RORW(W4 d, RR4 s)); + +// ROXL +DECLARE_MIDFUNC(jnf_ROXL_b(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ROXL_w(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ROXL_l(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROXL_b(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROXL_w(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROXL_l(W4 d, RR4 s, RR4 i)); + +// ROXLW +DECLARE_MIDFUNC(jff_ROXLW(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_ROXLW(W4 d, RR4 s)); + +// ROR +DECLARE_MIDFUNC(jnf_ROR_b(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ROR_w(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ROR_l(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROR_b(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROR_w(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROR_l(W4 d, RR4 s, RR4 i)); + +// ROXR +DECLARE_MIDFUNC(jnf_ROXR_b(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ROXR_w(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jnf_ROXR_l(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROXR_b(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROXR_w(W4 d, RR4 s, RR4 i)); +DECLARE_MIDFUNC(jff_ROXR_l(W4 d, RR4 s, RR4 i)); + +// ROXRW +DECLARE_MIDFUNC(jff_ROXRW(W4 d, RR4 s)); +DECLARE_MIDFUNC(jnf_ROXRW(W4 d, RR4 s)); + +// Scc +DECLARE_MIDFUNC(jnf_SCC(W4 d, IMM cc)); + +// SUB +DECLARE_MIDFUNC(jnf_SUB_b_imm(W4 d, RR4 s, IMM v)); +DECLARE_MIDFUNC(jnf_SUB_b(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jnf_SUB_w_imm(W4 d, RR4 s, IMM v)); +DECLARE_MIDFUNC(jnf_SUB_w(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jnf_SUB_l_imm(W4 d, RR4 s, IMM v)); +DECLARE_MIDFUNC(jnf_SUB_l(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jff_SUB_b(W4 d, RR1 s, RR1 v)); +DECLARE_MIDFUNC(jff_SUB_w(W4 d, RR2 s, RR2 v)); +DECLARE_MIDFUNC(jff_SUB_l(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jff_SUB_b_imm(W4 d, RR1 s, IMM v)); +DECLARE_MIDFUNC(jff_SUB_w_imm(W4 d, RR2 s, IMM v)); +DECLARE_MIDFUNC(jff_SUB_l_imm(W4 d, RR4 s, IMM v)); + +// SUBA +DECLARE_MIDFUNC(jnf_SUBA_w(W4 d, RR2 s)); +DECLARE_MIDFUNC(jnf_SUBA_l(W4 d, RR4 s)); + +// SUBX +DECLARE_MIDFUNC(jnf_SUBX(W4 d, RR4 s, RR4 v)); +DECLARE_MIDFUNC(jff_SUBX_b(W4 d, RR1 s, RR4 v)); +DECLARE_MIDFUNC(jff_SUBX_w(W4 d, RR2 s, RR4 v)); +DECLARE_MIDFUNC(jff_SUBX_l(W4 d, RR4 s, RR4 v)); + +// SWAP +DECLARE_MIDFUNC (jnf_SWAP(RW4 d)); +DECLARE_MIDFUNC (jff_SWAP(RW4 d)); + +// TST +DECLARE_MIDFUNC (jff_TST_b(RR1 s)); +DECLARE_MIDFUNC (jff_TST_w(RR2 s)); +DECLARE_MIDFUNC (jff_TST_l(RR4 s)); + +// Memory access functions +DECLARE_MIDFUNC(jnf_MEM_WRITE_OFF_b(RR4 adr, RR4 b)); +DECLARE_MIDFUNC(jnf_MEM_WRITE_OFF_w(RR4 adr, RR4 w)); +DECLARE_MIDFUNC(jnf_MEM_WRITE_OFF_l(RR4 adr, RR4 l)); +DECLARE_MIDFUNC(jnf_MEM_WRITE24_OFF_b(RR4 adr, RR4 b)); +DECLARE_MIDFUNC(jnf_MEM_WRITE24_OFF_w(RR4 adr, RR4 w)); +DECLARE_MIDFUNC(jnf_MEM_WRITE24_OFF_l(RR4 adr, RR4 l)); + +DECLARE_MIDFUNC(jnf_MEM_READ_OFF_b(W4 d, RR4 adr)); +DECLARE_MIDFUNC(jnf_MEM_READ_OFF_w(W4 d, RR4 adr)); +DECLARE_MIDFUNC(jnf_MEM_READ_OFF_l(W4 d, RR4 adr)); +DECLARE_MIDFUNC(jnf_MEM_READ24_OFF_b(W4 d, RR4 adr)); +DECLARE_MIDFUNC(jnf_MEM_READ24_OFF_w(W4 d, RR4 adr)); +DECLARE_MIDFUNC(jnf_MEM_READ24_OFF_l(W4 d, RR4 adr)); + +DECLARE_MIDFUNC(jnf_MEM_GETADR_OFF(W4 d, RR4 adr)); +DECLARE_MIDFUNC(jnf_MEM_GETADR24_OFF(W4 d, RR4 adr)); +DECLARE_MIDFUNC(jnf_MEM_GETBANKFUNC(W4 d, RR4 adr, IMM offset)); diff --git a/src/jit/compemu_support.cpp b/src/jit/compemu_support.cpp index a2f8fa39..0031d69d 100644 --- a/src/jit/compemu_support.cpp +++ b/src/jit/compemu_support.cpp @@ -52,6 +52,7 @@ #if DEBUG #define PROFILE_COMPILE_TIME 1 #define PROFILE_UNTRANSLATED_INSNS 1 +#define bug printf #endif #ifdef JIT_DEBUG @@ -59,7 +60,7 @@ #define abort() do { \ fprintf(stderr, "Abort in file %s at line %d\n", __FILE__, __LINE__); \ compiler_dumpstate(); \ - SDL_Quit(); + SDL_Quit(); \ exit(EXIT_FAILURE); \ } while (0) #endif @@ -73,7 +74,7 @@ static clock_t emul_end_time = 0; #endif #ifdef PROFILE_UNTRANSLATED_INSNS -static const int untranslated_top_ten = 20; +static int untranslated_top_ten = 30; static uae_u32 raw_cputbl_count[65536] = { 0, }; static uae_u16 opcode_nums[65536]; @@ -111,8 +112,6 @@ const int follow_const_jumps = 0; static uae_u32 current_cache_size = 0; // Cache grows upwards: how much has been consumed already static int lazy_flush = 1; // Flag: lazy translation cache invalidation static int avoid_fpu = 1; // Flag: compile FPU instructions ? -static int have_cmov = 1; // target has CMOV instructions ? -static int have_rat_stall = 0; // target has partial register stalls ? const int tune_alignment = 1; // Tune code alignments for running CPU ? const int tune_nop_fillers = 1; // Tune no-op fillers for architecture static int setzflg_uses_bsf = 0; // setzflg virtual instruction can use native BSF instruction correctly? @@ -121,19 +120,19 @@ static int align_jumps = 0; // Align the start of jumps op_properties prop[65536]; -static inline bool is_const_jump(uae_u32 opcode) +STATIC_INLINE bool is_const_jump(uae_u32 opcode) { return (prop[opcode].cflow == fl_const_jump); } -static inline bool may_trap(uae_u32 opcode) +STATIC_INLINE bool may_trap(uae_u32 opcode) { return (prop[opcode].cflow & fl_trap); } STATIC_INLINE unsigned int cft_map (unsigned int f) { - return ((f >> 8) & 255) | ((f & 255) << 8); + return f; } uae_u8* start_pc_p; @@ -239,36 +238,30 @@ STATIC_INLINE void emit_jmp_target(uae_u32 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 -*/ -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. + * + * 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) @@ -398,6 +391,7 @@ STATIC_INLINE void set_dhtu(blockinfo* bi, cpuop_func* dh) D2(panicbug("x is %p\n",x)); D2(panicbug("x->next is %p\n",x->next)); D2(panicbug("x->prev_p is %p\n",x->prev_p)); + if (x->jmp_off) { adjust_jmpdep(x,dh); } @@ -748,63 +742,82 @@ STATIC_INLINE uae_u8* get_target(void) /******************************************************************** * New version of data buffer: interleave data and code * ********************************************************************/ -#if defined(USE_DATA_BUFFER) +#if defined(CPU_arm) -#define DATA_BUFFER_SIZE 1024 // Enlarge POPALLSPACE_SIZE if this value is greater than 768 -#define DATA_BUFFER_MAXOFFSET 4096 - 32 // max range between emit of data and use of data +#define DATA_BUFFER_SIZE 768 // Enlarge POPALLSPACE_SIZE if this value is greater than 768 +#define DATA_BUFFER_MAXOFFSET 4096 - 32 // max range between emit of data and use of data static uae_u8* data_writepos = 0; static uae_u8* data_endpos = 0; -#if DEBUG -static long data_wasted = 0; +#ifdef DEBUG_DATA_BUFFER +static uae_u32 data_wasted = 0; +static uae_u32 data_buffers_used = 0; +static uae_u32 data_emit_natmem = 0; #endif +static uae_s32 data_natmem_pos = 0; + static inline void compemu_raw_branch(IMM d); -STATIC_INLINE void data_check_end(long n, long codesize) +STATIC_INLINE void data_check_end(uae_s32 n, uae_s32 codesize) { if(data_writepos + n > data_endpos || get_target_noopt() + codesize - data_writepos > DATA_BUFFER_MAXOFFSET) { // Start new buffer -#if DEBUG +#ifdef DEBUG_DATA_BUFFER if(data_writepos < data_endpos) data_wasted += data_endpos - data_writepos; + data_buffers_used++; #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); + + data_natmem_pos = 0; } } -STATIC_INLINE long data_word_offs(uae_u16 x) +STATIC_INLINE uae_s32 data_word_offs(uae_u16 x) { data_check_end(4, 4); *((uae_u16*)data_writepos)=x; data_writepos += 2; *((uae_u16*)data_writepos)=0; data_writepos += 2; - return (long)data_writepos - (long)get_target_noopt() - 12; + return (uae_s32)data_writepos - (uae_s32)get_target_noopt() - 12; } -STATIC_INLINE long data_long(uae_u32 x, long codesize) +STATIC_INLINE uae_s32 data_long(uae_u32 x, uae_s32 codesize) { data_check_end(4, codesize); *((uae_u32*)data_writepos)=x; data_writepos += 4; - return (long)data_writepos - 4; + return (uae_s32)data_writepos - 4; } -STATIC_INLINE long data_long_offs(uae_u32 x) +STATIC_INLINE uae_s32 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; + return (uae_s32)data_writepos - (uae_s32)get_target_noopt() - 12; } -STATIC_INLINE long get_data_offset(long t) +STATIC_INLINE uae_s32 get_data_offset(uae_s32 t) { - return t - (long)get_target_noopt() - 8; + return t - (uae_s32)get_target_noopt() - 8; +} + +STATIC_INLINE uae_s32 get_data_natmem(void) +{ + if(data_natmem_pos == 0 || (uae_s32)get_target_noopt() - data_natmem_pos >= DATA_BUFFER_MAXOFFSET) + { + data_natmem_pos = data_long(NATMEM_OFFSETX, 4); +#ifdef DEBUG_DATA_BUFFER + data_emit_natmem++; +#endif + } + return get_data_offset(data_natmem_pos); } STATIC_INLINE void reset_data_buffer(void) @@ -818,6 +831,7 @@ STATIC_INLINE void reset_data_buffer(void) /******************************************************************** * Getting the information about the target CPU * ********************************************************************/ +STATIC_INLINE void clobber_flags(void); #if defined(CPU_arm) #include "codegen_arm.cpp" @@ -830,8 +844,6 @@ STATIC_INLINE void reset_data_buffer(void) * 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) @@ -890,40 +902,11 @@ int touchcnt; * 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 -STATIC_INLINE void log_startblock(void) -{ - int i; - - for (i=0;i0) 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(); - } + + answer=n; + if (answer<0) evict(r); } @@ -1461,17 +1298,12 @@ STATIC_INLINE int readreg_general(int r, int size, int spec, int can_offset) static int readreg(int r, int size) { - return readreg_general(r,size,-1,0); + return readreg_general(r,size,-1); } 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); + return readreg_general(r,size,spec); } /* writereg_general(r, size, spec) @@ -1490,10 +1322,6 @@ STATIC_INLINE int writereg_general(int r, int size, int spec) int n; int answer=-1; - 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; @@ -1502,28 +1330,11 @@ STATIC_INLINE int writereg_general(int r, int size, int spec) Dif (live.nat[n].nholds!=1) jit_abort(_T("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(); - } + + live.state[r].dirtysize=ndsize; + live.state[r].validsize=nvsize; + answer=n; + if (answer<0) evict(r); } @@ -1573,33 +1384,17 @@ STATIC_INLINE int rmw_general(int r, int wsize, int rsize, int spec) if (live.state[r].status==UNDEF) { D(panicbug("JIT: WARNING: Unexpected read of undefined register %d\n",r)); } - remove_offset(r,spec); make_exclusive(r,0,spec); Dif (wsize=rsize) { - n=live.state[r].realreg; + n = live.state[r].realreg; Dif (live.nat[n].nholds!=1) jit_abort(_T("live.nat[n].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(); - } + answer = n; if (answer<0) evict(r); } @@ -1639,18 +1434,6 @@ 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! * ********************************************************************/ @@ -1945,6 +1728,7 @@ static void fflags_into_flags_internal(uae_u32 tmp) #if defined(CPU_arm) #include "compemu_midfunc_arm.cpp" +#include "compemu_midfunc_arm2.cpp" #else #include "compemu_midfunc_x86.c" #endif @@ -1954,24 +1738,6 @@ static void fflags_into_flags_internal(uae_u32 tmp) * 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); -} - uae_u32 get_const(int r) { Dif (!isconst(r)) { @@ -1983,9 +1749,9 @@ uae_u32 get_const(int r) 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; + add_l_ri(PC_P, m68k_pc_offset); + comp_pc_p += m68k_pc_offset; + m68k_pc_offset = 0; } } @@ -2023,7 +1789,6 @@ void compiler_init(void) // Initialize target CPU (check for features, e.g. CMOV, rat stalls) raw_init_cpu(); -// setzflg_uses_bsf = target_check_bsf(); // Translation cache flush mechanism lazy_flush = 1; //(bx_options.jit.jitlazyflush == 0) ? 0 : 1; @@ -2040,7 +1805,7 @@ void compiler_init(void) initialized = 1; #ifdef PROFILE_UNTRANSLATED_INSNS - bug(" : gather statistics on untranslated insns count"); + bug(" : gather statistics on untranslated insns count\n"); #endif #ifdef PROFILE_COMPILE_TIME @@ -2055,9 +1820,9 @@ void compiler_exit(void) emul_end_time = clock(); #endif -#if DEBUG -#if defined(USE_DATA_BUFFER) - printf("data_wasted = %d bytes\n", data_wasted); +#if defined(CPU_arm) +#ifdef DEBUG_DATA_BUFFER + printf("data_wasted = %d bytes in %d blocks; natmem emits: %d\n", data_wasted, data_buffers_used, data_emit_natmem); #endif #endif @@ -2087,10 +1852,10 @@ void compiler_exit(void) opcode_nums[i] = i; untranslated_count += raw_cputbl_count[i]; } - bug("Sorting out untranslated instructions count..."); + bug("Sorting out untranslated instructions count...\n"); qsort(opcode_nums, 65536, sizeof(uae_u16), untranslated_compfn); - bug("Rank Opc Count Name"); - for (int i = 0; i < untranslated_top_ten; i++) { + bug("Rank Opc Count Name\n"); + for (int i = 0; i < untranslated_top_ten && i < 65536; i++) { uae_u32 count = raw_cputbl_count[opcode_nums[i]]; struct instr *dp; struct mnemolookup *lookup; @@ -2099,7 +1864,15 @@ void compiler_exit(void) dp = table68k + opcode_nums[i]; for (lookup = lookuptab; lookup->mnemo != (instrmnem)dp->mnemo; lookup++) ; - bug("%03d: %04x %10u %s", i, opcode_nums[i], count, lookup->name); + if(strcmp(lookup->name, "FPP") == 0 + || strcmp(lookup->name, "FBcc") == 0 + || strcmp(lookup->name, "DIVS") == 0 + || strcmp(lookup->name, "DIVU") == 0 + || strcmp(lookup->name, "DIVL") == 0) { + untranslated_top_ten++; // Ignore this + } + else + bug("%03d: %04x %10u %s\n", i, opcode_nums[i], count, lookup->name); } #endif } @@ -2107,9 +1880,7 @@ void compiler_exit(void) void init_comp(void) { int i; - uae_u8* cb=can_byte; - uae_u8* cw=can_word; - uae_u8* au=always_used; + uae_s8* au=always_used; #ifdef RECORD_REGISTER_USAGE for (i=0;i<16;i++) @@ -2118,7 +1889,6 @@ void init_comp(void) for (i=0;idirect_handler); bi->status=BI_CHECKING; - isgood=called_check_checksum(bi); + isgood=called_check_checksum(bi) != 0; } if (isgood) { D2(bug("JIT: reactivate %p/%p (%x %x/%x %x)",bi,bi->pc_p, c1,c2,bi->c1,bi->c2)); @@ -2923,7 +2655,7 @@ STATIC_INLINE void create_popalls(void) current_compile_p=popallspace; set_target(current_compile_p); -#if defined(USE_DATA_BUFFER) +#if defined(CPU_arm) reset_data_buffer(); data_long(0, 0); // Make sure we emit the branch over the first buffer outside pushall_call_handler #endif @@ -2943,9 +2675,10 @@ STATIC_INLINE void create_popalls(void) pushall_call_handler=get_target(); raw_push_regs_to_preserve(); raw_dec_sp(stack_space); + compemu_raw_init_r_regstruct((uintptr)®s); r=REG_PC_TMP; compemu_raw_mov_l_rm(r,(uintptr)®s.pc_p); - compemu_raw_and_l_ri(r,TAGMASK); + compemu_raw_and_TAGMASK(r); compemu_raw_jmp_m_indexed((uintptr)cache_tags,r,SIZEOF_VOID_P); /* now the exit points */ @@ -2997,7 +2730,7 @@ STATIC_INLINE void create_popalls(void) raw_pop_preserved_regs(); compemu_raw_jmp((uintptr)check_checksum); -#if defined(USE_DATA_BUFFER) +#if defined(CPU_arm) reset_data_buffer(); #endif @@ -3049,6 +2782,11 @@ static void prepare_block(blockinfo* bi) //bi->env=empty_ss; } +void compemu_reset(void) +{ + set_cache_state(0); +} + // OPCODE is in big endian format, use cft_map() beforehand, if needed. static inline void reset_compop(int opcode) { @@ -3056,11 +2794,6 @@ static inline void reset_compop(int opcode) nfcompfunctbl[opcode] = NULL; } -void compemu_reset(void) -{ - set_cache_state(0); -} - void build_comp(void) { int i; @@ -3069,7 +2802,7 @@ void build_comp(void) const struct comptbl* nftbl=op_smalltbl_0_comp_nf; int count; #ifdef NOFLAGS_SUPPORT - struct cputbl *nfctbl = (currprefs.cpu_level >= 5 ? op_smalltbl_0_nf + struct comptbl *nfctbl = (currprefs.cpu_level >= 5 ? op_smalltbl_0_nf : currprefs.cpu_level == 4 ? op_smalltbl_1_nf : (currprefs.cpu_level == 2 || currprefs.cpu_level == 3) ? op_smalltbl_2_nf : currprefs.cpu_level == 1 ? op_smalltbl_3_nf @@ -3079,6 +2812,9 @@ void build_comp(void) for (opcode = 0; opcode < 65536; opcode++) { reset_compop(opcode); +#ifdef NOFLAGS_SUPPORT + nfcpufunctbl[opcode] = op_illg; +#endif prop[opcode].use_flags = 0x1f; prop[opcode].set_flags = 0x1f; prop[opcode].cflow = fl_jump | fl_trap; // ILLEGAL instructions do trap @@ -3090,30 +2826,29 @@ void build_comp(void) cflow = fl_const_jump; else cflow &= ~fl_const_jump; - prop[tbl[i].opcode].cflow = cflow; + prop[cft_map(tbl[i].opcode)].cflow = cflow; - int uses_fpu = tbl[i].specific & 32; + int uses_fpu = (tbl[i].specific & 32) != 0; if (uses_fpu && avoid_fpu) - compfunctbl[tbl[i].opcode] = NULL; + compfunctbl[cft_map(tbl[i].opcode)] = NULL; else - compfunctbl[tbl[i].opcode] = tbl[i].handler; + compfunctbl[cft_map(tbl[i].opcode)] = tbl[i].handler; } for (i = 0; nftbl[i].opcode < 65536; i++) { int uses_fpu = tbl[i].specific & 32; if (uses_fpu && avoid_fpu) - nfcompfunctbl[nftbl[i].opcode] = NULL; + nfcompfunctbl[cft_map(nftbl[i].opcode)] = NULL; else - nfcompfunctbl[nftbl[i].opcode] = nftbl[i].handler; - + nfcompfunctbl[cft_map(nftbl[i].opcode)] = nftbl[i].handler; #ifdef NOFLAGS_SUPPORT - nfcpufunctbl[nftbl[i].opcode] = nfctbl[i].handler; + nfcpufunctbl[cft_map(nftbl[i].opcode)] = nfctbl[i].handler; #endif } #ifdef NOFLAGS_SUPPORT for (i = 0; nfctbl[i].handler; i++) { - nfcpufunctbl[nfctbl[i].opcode] = nfctbl[i].handler; + nfcpufunctbl[cft_map(nfctbl[i].opcode)] = nfctbl[i].handler; } #endif @@ -3124,47 +2859,46 @@ void build_comp(void) cpuop_func *nfcf; #endif int isaddx,cflow; - int lvl; - lvl = (currprefs.cpu_model - 68000) / 10; - if (lvl > 4) - lvl--; - if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > lvl) + int cpu_level = (currprefs.cpu_model - 68000) / 10; + if (cpu_level > 4) + cpu_level--; + if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > cpu_level) continue; if (table68k[opcode].handler != -1) { - f = compfunctbl[table68k[opcode].handler]; - nff = nfcompfunctbl[table68k[opcode].handler]; + f = compfunctbl[cft_map(table68k[opcode].handler)]; + nff = nfcompfunctbl[cft_map(table68k[opcode].handler)]; #ifdef NOFLAGS_SUPPORT - nfcf = nfcpufunctbl[table68k[opcode].handler]; + nfcf = nfcpufunctbl[cft_map(table68k[opcode].handler)]; #endif - cflow = prop[table68k[opcode].handler].cflow; - isaddx = prop[table68k[opcode].handler].is_addx; - prop[opcode].cflow = cflow; - prop[opcode].is_addx = isaddx; - compfunctbl[opcode] = f; - nfcompfunctbl[opcode] = nff; + cflow = prop[cft_map(table68k[opcode].handler)].cflow; + isaddx = prop[cft_map(table68k[opcode].handler)].is_addx; + prop[cft_map(opcode)].cflow = cflow; + prop[cft_map(opcode)].is_addx = isaddx; + compfunctbl[cft_map(opcode)] = f; + nfcompfunctbl[cft_map(opcode)] = nff; #ifdef NOFLAGS_SUPPORT - nfcpufunctbl[opcode] = nfcf; + nfcpufunctbl[cft_map(opcode)] = nfcf; #endif } - prop[opcode].set_flags = table68k[opcode].flagdead; - prop[opcode].use_flags = table68k[opcode].flaglive; + 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[opcode].cflow & fl_const_jump) - prop[opcode].use_flags = 0; + if (prop[cft_map(opcode)].cflow & fl_const_jump) + prop[cft_map(opcode)].use_flags = 0; } #ifdef NOFLAGS_SUPPORT for (i = 0; nfctbl[i].handler != NULL; i++) { if (nfctbl[i].specific) - nfcpufunctbl[tbl[i].opcode] = nfctbl[i].handler; + nfcpufunctbl[cft_map(tbl[i].opcode)] = nfctbl[i].handler; } #endif count=0; for (opcode = 0; opcode < 65536; opcode++) { - if (compfunctbl[opcode]) + if (compfunctbl[cft_map(opcode)]) count++; } // D(bug(" : supposedly %d compileable opcodes!",count)); @@ -3180,13 +2914,6 @@ void build_comp(void) } compemu_reset(); -#if 0 - for (i=0;ihandler_to_use = (cpuop_func *)popall_execute_normal; set_dhtu(bi,bi->direct_pen); bi->status=BI_INVALID; - } else { + } + 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; @@ -3282,6 +3010,12 @@ STATIC_INLINE void flush_icache_lazy(uaecptr ptr, int n) int failure; +static inline unsigned int get_opcode_cft_map(unsigned int f) +{ + return ((f >> 8) & 255) | ((f & 255) << 8); +} +#define DO_GET_OPCODE(a) (get_opcode_cft_map((uae_u16)*(a))) + #ifdef JIT_DEBUG static uae_u8 *last_regs_pc_p = 0; static uae_u8 *last_compiled_block_addr = 0; @@ -3292,7 +3026,7 @@ void compiler_dumpstate(void) return; bug("### Host addresses"); - bug("MEM_BASE : %x", MEMBaseDiff); + bug("MEM_BASE : %x", NATMEM_OFFSET); bug("PC_P : %p", ®s.pc_p); bug("SPCFLAGS : %p", ®s.spcflags); bug("D0-D7 : %p-%p", ®s.regs[0], ®s.regs[7]); @@ -3390,7 +3124,7 @@ void compile_block(cpu_history* pc_hist, int blocklen, int totcycles) i=blocklen; while (i--) { uae_u16* currpcp=pc_hist[i].location; - int op=cft_map(*currpcp); + uae_u32 op=DO_GET_OPCODE(currpcp); #if USE_CHECKSUM_INFO trace_in_rom = trace_in_rom && isinrom((uintptr)currpcp); @@ -3438,8 +3172,6 @@ void compile_block(cpu_history* pc_hist, int blocklen, int totcycles) bi->status=BI_COMPILING; current_block_start_target=(uintptr)get_target(); - log_startblock(); - if (bi->count>=0) { /* Need to generate countdown code */ compemu_raw_mov_l_mi((uintptr)®s.pc_p,(uintptr)pc_hist[0].location); compemu_raw_sub_l_mi((uintptr)&(bi->count),1); @@ -3471,11 +3203,9 @@ void compile_block(cpu_history* pc_hist, int blocklen, int totcycles) get_target_noopt()handler= bi->handler_to_use=(cpuop_func *)get_target(); + bi->handler= + bi->handler_to_use=(cpuop_func *)get_target(); compemu_raw_cmp_l_mi((uintptr)®s.pc_p,(uintptr)pc_hist[0].location); compemu_raw_jnz((uintptr)popall_cache_miss); comp_pc_p=(uae_u8*)pc_hist[0].location; diff --git a/src/jit/compstbl.cpp b/src/jit/compstbl.cpp index ca7d7577..97ec8acc 100644 --- a/src/jit/compstbl.cpp +++ b/src/jit/compstbl.cpp @@ -16,7 +16,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_30_0_comp_ff, 0x00000002, 48 }, /* OR */ { op_38_0_comp_ff, 0x00000002, 56 }, /* OR */ { op_39_0_comp_ff, 0x00000002, 57 }, /* OR */ -{ NULL, 0x00000001, 60 }, /* ORSR */ +{ op_3c_0_comp_ff, 0x00000002, 60 }, /* ORSR */ { op_40_0_comp_ff, 0x00000002, 64 }, /* OR */ { op_50_0_comp_ff, 0x00000002, 80 }, /* OR */ { op_58_0_comp_ff, 0x00000002, 88 }, /* OR */ @@ -25,7 +25,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_70_0_comp_ff, 0x00000002, 112 }, /* OR */ { op_78_0_comp_ff, 0x00000002, 120 }, /* OR */ { op_79_0_comp_ff, 0x00000002, 121 }, /* OR */ -{ NULL, 0x00000001, 124 }, /* ORSR */ +{ NULL, 0x00000002, 124 }, /* ORSR */ { op_80_0_comp_ff, 0x00000002, 128 }, /* OR */ { op_90_0_comp_ff, 0x00000002, 144 }, /* OR */ { op_98_0_comp_ff, 0x00000002, 152 }, /* OR */ @@ -62,8 +62,6 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_170_0_comp_ff, 0x00000002, 368 }, /* BCHG */ { op_178_0_comp_ff, 0x00000002, 376 }, /* BCHG */ { op_179_0_comp_ff, 0x00000002, 377 }, /* BCHG */ -{ op_17a_0_comp_ff, 0x00000002, 378 }, /* BCHG */ -{ op_17b_0_comp_ff, 0x00000002, 379 }, /* BCHG */ { op_180_0_comp_ff, 0x00000000, 384 }, /* BCLR */ { NULL, 0x00000001, 392 }, /* MVPRM */ { op_190_0_comp_ff, 0x00000000, 400 }, /* BCLR */ @@ -73,8 +71,6 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_1b0_0_comp_ff, 0x00000002, 432 }, /* BCLR */ { op_1b8_0_comp_ff, 0x00000002, 440 }, /* BCLR */ { op_1b9_0_comp_ff, 0x00000002, 441 }, /* BCLR */ -{ op_1ba_0_comp_ff, 0x00000002, 442 }, /* BCLR */ -{ op_1bb_0_comp_ff, 0x00000002, 443 }, /* BCLR */ { op_1c0_0_comp_ff, 0x00000000, 448 }, /* BSET */ { NULL, 0x00000001, 456 }, /* MVPRM */ { op_1d0_0_comp_ff, 0x00000000, 464 }, /* BSET */ @@ -84,8 +80,6 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_1f0_0_comp_ff, 0x00000002, 496 }, /* BSET */ { op_1f8_0_comp_ff, 0x00000002, 504 }, /* BSET */ { op_1f9_0_comp_ff, 0x00000002, 505 }, /* BSET */ -{ op_1fa_0_comp_ff, 0x00000002, 506 }, /* BSET */ -{ op_1fb_0_comp_ff, 0x00000002, 507 }, /* BSET */ { op_200_0_comp_ff, 0x00000002, 512 }, /* AND */ { op_210_0_comp_ff, 0x00000002, 528 }, /* AND */ { op_218_0_comp_ff, 0x00000002, 536 }, /* AND */ @@ -94,7 +88,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_230_0_comp_ff, 0x00000002, 560 }, /* AND */ { op_238_0_comp_ff, 0x00000002, 568 }, /* AND */ { op_239_0_comp_ff, 0x00000002, 569 }, /* AND */ -{ NULL, 0x00000001, 572 }, /* ANDSR */ +{ op_23c_0_comp_ff, 0x00000002, 572 }, /* ANDSR */ { op_240_0_comp_ff, 0x00000002, 576 }, /* AND */ { op_250_0_comp_ff, 0x00000002, 592 }, /* AND */ { op_258_0_comp_ff, 0x00000002, 600 }, /* AND */ @@ -103,7 +97,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_270_0_comp_ff, 0x00000002, 624 }, /* AND */ { op_278_0_comp_ff, 0x00000002, 632 }, /* AND */ { op_279_0_comp_ff, 0x00000002, 633 }, /* AND */ -{ NULL, 0x00000001, 636 }, /* ANDSR */ +{ NULL, 0x00000002, 636 }, /* ANDSR */ { op_280_0_comp_ff, 0x00000002, 640 }, /* AND */ { op_290_0_comp_ff, 0x00000002, 656 }, /* AND */ { op_298_0_comp_ff, 0x00000002, 664 }, /* AND */ @@ -202,8 +196,6 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_870_0_comp_ff, 0x00000002, 2160 }, /* BCHG */ { op_878_0_comp_ff, 0x00000002, 2168 }, /* BCHG */ { op_879_0_comp_ff, 0x00000002, 2169 }, /* BCHG */ -{ op_87a_0_comp_ff, 0x00000002, 2170 }, /* BCHG */ -{ op_87b_0_comp_ff, 0x00000002, 2171 }, /* BCHG */ { op_880_0_comp_ff, 0x00000002, 2176 }, /* BCLR */ { op_890_0_comp_ff, 0x00000002, 2192 }, /* BCLR */ { op_898_0_comp_ff, 0x00000002, 2200 }, /* BCLR */ @@ -212,8 +204,6 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_8b0_0_comp_ff, 0x00000002, 2224 }, /* BCLR */ { op_8b8_0_comp_ff, 0x00000002, 2232 }, /* BCLR */ { op_8b9_0_comp_ff, 0x00000002, 2233 }, /* BCLR */ -{ op_8ba_0_comp_ff, 0x00000002, 2234 }, /* BCLR */ -{ op_8bb_0_comp_ff, 0x00000002, 2235 }, /* BCLR */ { op_8c0_0_comp_ff, 0x00000002, 2240 }, /* BSET */ { op_8d0_0_comp_ff, 0x00000002, 2256 }, /* BSET */ { op_8d8_0_comp_ff, 0x00000002, 2264 }, /* BSET */ @@ -222,8 +212,6 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_8f0_0_comp_ff, 0x00000002, 2288 }, /* BSET */ { op_8f8_0_comp_ff, 0x00000002, 2296 }, /* BSET */ { op_8f9_0_comp_ff, 0x00000002, 2297 }, /* BSET */ -{ op_8fa_0_comp_ff, 0x00000002, 2298 }, /* BSET */ -{ op_8fb_0_comp_ff, 0x00000002, 2299 }, /* BSET */ { op_a00_0_comp_ff, 0x00000002, 2560 }, /* EOR */ { op_a10_0_comp_ff, 0x00000002, 2576 }, /* EOR */ { op_a18_0_comp_ff, 0x00000002, 2584 }, /* EOR */ @@ -232,7 +220,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_a30_0_comp_ff, 0x00000002, 2608 }, /* EOR */ { op_a38_0_comp_ff, 0x00000002, 2616 }, /* EOR */ { op_a39_0_comp_ff, 0x00000002, 2617 }, /* EOR */ -{ NULL, 0x00000001, 2620 }, /* EORSR */ +{ op_a3c_0_comp_ff, 0x00000002, 2620 }, /* EORSR */ { op_a40_0_comp_ff, 0x00000002, 2624 }, /* EOR */ { op_a50_0_comp_ff, 0x00000002, 2640 }, /* EOR */ { op_a58_0_comp_ff, 0x00000002, 2648 }, /* EOR */ @@ -241,7 +229,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_a70_0_comp_ff, 0x00000002, 2672 }, /* EOR */ { op_a78_0_comp_ff, 0x00000002, 2680 }, /* EOR */ { op_a79_0_comp_ff, 0x00000002, 2681 }, /* EOR */ -{ NULL, 0x00000001, 2684 }, /* EORSR */ +{ NULL, 0x00000002, 2684 }, /* EORSR */ { op_a80_0_comp_ff, 0x00000002, 2688 }, /* EOR */ { op_a90_0_comp_ff, 0x00000002, 2704 }, /* EOR */ { op_a98_0_comp_ff, 0x00000002, 2712 }, /* EOR */ @@ -628,30 +616,30 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_33fa_0_comp_ff, 0x00000002, 13306 }, /* MOVE */ { op_33fb_0_comp_ff, 0x00000002, 13307 }, /* MOVE */ { op_33fc_0_comp_ff, 0x00000002, 13308 }, /* MOVE */ -{ op_4000_0_comp_ff, 0x0000000c, 16384 }, /* NEGX */ -{ op_4010_0_comp_ff, 0x0000000c, 16400 }, /* NEGX */ -{ op_4018_0_comp_ff, 0x0000000c, 16408 }, /* NEGX */ -{ op_4020_0_comp_ff, 0x0000000c, 16416 }, /* NEGX */ -{ op_4028_0_comp_ff, 0x0000000e, 16424 }, /* NEGX */ -{ op_4030_0_comp_ff, 0x0000000e, 16432 }, /* NEGX */ -{ op_4038_0_comp_ff, 0x0000000e, 16440 }, /* NEGX */ -{ op_4039_0_comp_ff, 0x0000000e, 16441 }, /* NEGX */ -{ op_4040_0_comp_ff, 0x0000000c, 16448 }, /* NEGX */ -{ op_4050_0_comp_ff, 0x0000000c, 16464 }, /* NEGX */ -{ op_4058_0_comp_ff, 0x0000000c, 16472 }, /* NEGX */ -{ op_4060_0_comp_ff, 0x0000000c, 16480 }, /* NEGX */ -{ op_4068_0_comp_ff, 0x0000000e, 16488 }, /* NEGX */ -{ op_4070_0_comp_ff, 0x0000000e, 16496 }, /* NEGX */ -{ op_4078_0_comp_ff, 0x0000000e, 16504 }, /* NEGX */ -{ op_4079_0_comp_ff, 0x0000000e, 16505 }, /* NEGX */ -{ op_4080_0_comp_ff, 0x0000000c, 16512 }, /* NEGX */ -{ op_4090_0_comp_ff, 0x0000000c, 16528 }, /* NEGX */ -{ op_4098_0_comp_ff, 0x0000000c, 16536 }, /* NEGX */ -{ op_40a0_0_comp_ff, 0x0000000c, 16544 }, /* NEGX */ -{ op_40a8_0_comp_ff, 0x0000000e, 16552 }, /* NEGX */ -{ op_40b0_0_comp_ff, 0x0000000e, 16560 }, /* NEGX */ -{ op_40b8_0_comp_ff, 0x0000000e, 16568 }, /* NEGX */ -{ op_40b9_0_comp_ff, 0x0000000e, 16569 }, /* NEGX */ +{ op_4000_0_comp_ff, 0x00000008, 16384 }, /* NEGX */ +{ op_4010_0_comp_ff, 0x00000008, 16400 }, /* NEGX */ +{ op_4018_0_comp_ff, 0x00000008, 16408 }, /* NEGX */ +{ op_4020_0_comp_ff, 0x00000008, 16416 }, /* NEGX */ +{ op_4028_0_comp_ff, 0x0000000a, 16424 }, /* NEGX */ +{ op_4030_0_comp_ff, 0x0000000a, 16432 }, /* NEGX */ +{ op_4038_0_comp_ff, 0x0000000a, 16440 }, /* NEGX */ +{ op_4039_0_comp_ff, 0x0000000a, 16441 }, /* NEGX */ +{ op_4040_0_comp_ff, 0x00000008, 16448 }, /* NEGX */ +{ op_4050_0_comp_ff, 0x00000008, 16464 }, /* NEGX */ +{ op_4058_0_comp_ff, 0x00000008, 16472 }, /* NEGX */ +{ op_4060_0_comp_ff, 0x00000008, 16480 }, /* NEGX */ +{ op_4068_0_comp_ff, 0x0000000a, 16488 }, /* NEGX */ +{ op_4070_0_comp_ff, 0x0000000a, 16496 }, /* NEGX */ +{ op_4078_0_comp_ff, 0x0000000a, 16504 }, /* NEGX */ +{ op_4079_0_comp_ff, 0x0000000a, 16505 }, /* NEGX */ +{ op_4080_0_comp_ff, 0x00000008, 16512 }, /* NEGX */ +{ op_4090_0_comp_ff, 0x00000008, 16528 }, /* NEGX */ +{ op_4098_0_comp_ff, 0x00000008, 16536 }, /* NEGX */ +{ op_40a0_0_comp_ff, 0x00000008, 16544 }, /* NEGX */ +{ op_40a8_0_comp_ff, 0x0000000a, 16552 }, /* NEGX */ +{ op_40b0_0_comp_ff, 0x0000000a, 16560 }, /* NEGX */ +{ op_40b8_0_comp_ff, 0x0000000a, 16568 }, /* NEGX */ +{ op_40b9_0_comp_ff, 0x0000000a, 16569 }, /* NEGX */ { NULL, 0x00000001, 16576 }, /* MVSR2 */ { NULL, 0x00000001, 16592 }, /* MVSR2 */ { NULL, 0x00000001, 16600 }, /* MVSR2 */ @@ -867,17 +855,17 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000000, 19184 }, /* TAS */ { NULL, 0x00000000, 19192 }, /* TAS */ { NULL, 0x00000000, 19193 }, /* TAS */ -{ NULL, 0x00000000, 19456 }, /* MULL */ -{ NULL, 0x00000000, 19472 }, /* MULL */ -{ NULL, 0x00000000, 19480 }, /* MULL */ -{ NULL, 0x00000000, 19488 }, /* MULL */ -{ NULL, 0x00000000, 19496 }, /* MULL */ -{ NULL, 0x00000000, 19504 }, /* MULL */ -{ NULL, 0x00000000, 19512 }, /* MULL */ -{ NULL, 0x00000000, 19513 }, /* MULL */ -{ NULL, 0x00000000, 19514 }, /* MULL */ -{ NULL, 0x00000000, 19515 }, /* MULL */ -{ NULL, 0x00000000, 19516 }, /* MULL */ +{ op_4c00_0_comp_ff, 0x00000002, 19456 }, /* MULL */ +{ op_4c10_0_comp_ff, 0x00000002, 19472 }, /* MULL */ +{ op_4c18_0_comp_ff, 0x00000002, 19480 }, /* MULL */ +{ op_4c20_0_comp_ff, 0x00000002, 19488 }, /* MULL */ +{ op_4c28_0_comp_ff, 0x00000002, 19496 }, /* MULL */ +{ op_4c30_0_comp_ff, 0x00000002, 19504 }, /* MULL */ +{ op_4c38_0_comp_ff, 0x00000002, 19512 }, /* MULL */ +{ op_4c39_0_comp_ff, 0x00000002, 19513 }, /* MULL */ +{ op_4c3a_0_comp_ff, 0x00000002, 19514 }, /* MULL */ +{ op_4c3b_0_comp_ff, 0x00000002, 19515 }, /* MULL */ +{ op_4c3c_0_comp_ff, 0x00000002, 19516 }, /* MULL */ { NULL, 0x00000001, 19520 }, /* DIVL */ { NULL, 0x00000001, 19536 }, /* DIVL */ { NULL, 0x00000001, 19544 }, /* DIVL */ @@ -961,7 +949,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_50b8_0_comp_ff, 0x00000002, 20664 }, /* ADD */ { op_50b9_0_comp_ff, 0x00000002, 20665 }, /* ADD */ { op_50c0_0_comp_ff, 0x00000000, 20672 }, /* Scc */ -{ op_50c8_0_comp_ff, 0x00000007, 20680 }, /* DBcc */ +{ op_50c8_0_comp_ff, 0x00000003, 20680 }, /* DBcc */ { op_50d0_0_comp_ff, 0x00000000, 20688 }, /* Scc */ { op_50d8_0_comp_ff, 0x00000000, 20696 }, /* Scc */ { op_50e0_0_comp_ff, 0x00000000, 20704 }, /* Scc */ @@ -999,7 +987,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_51b8_0_comp_ff, 0x00000002, 20920 }, /* SUB */ { op_51b9_0_comp_ff, 0x00000002, 20921 }, /* SUB */ { op_51c0_0_comp_ff, 0x00000000, 20928 }, /* Scc */ -{ op_51c8_0_comp_ff, 0x00000007, 20936 }, /* DBcc */ +{ op_51c8_0_comp_ff, 0x00000003, 20936 }, /* DBcc */ { op_51d0_0_comp_ff, 0x00000000, 20944 }, /* Scc */ { op_51d8_0_comp_ff, 0x00000000, 20952 }, /* Scc */ { op_51e0_0_comp_ff, 0x00000000, 20960 }, /* Scc */ @@ -1011,7 +999,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 20987 }, /* TRAPcc */ { NULL, 0x00000001, 20988 }, /* TRAPcc */ { op_52c0_0_comp_ff, 0x00000000, 21184 }, /* Scc */ -{ op_52c8_0_comp_ff, 0x00000007, 21192 }, /* DBcc */ +{ op_52c8_0_comp_ff, 0x00000003, 21192 }, /* DBcc */ { op_52d0_0_comp_ff, 0x00000000, 21200 }, /* Scc */ { op_52d8_0_comp_ff, 0x00000000, 21208 }, /* Scc */ { op_52e0_0_comp_ff, 0x00000000, 21216 }, /* Scc */ @@ -1023,7 +1011,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 21243 }, /* TRAPcc */ { NULL, 0x00000001, 21244 }, /* TRAPcc */ { op_53c0_0_comp_ff, 0x00000000, 21440 }, /* Scc */ -{ op_53c8_0_comp_ff, 0x00000007, 21448 }, /* DBcc */ +{ op_53c8_0_comp_ff, 0x00000003, 21448 }, /* DBcc */ { op_53d0_0_comp_ff, 0x00000000, 21456 }, /* Scc */ { op_53d8_0_comp_ff, 0x00000000, 21464 }, /* Scc */ { op_53e0_0_comp_ff, 0x00000000, 21472 }, /* Scc */ @@ -1035,7 +1023,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 21499 }, /* TRAPcc */ { NULL, 0x00000001, 21500 }, /* TRAPcc */ { op_54c0_0_comp_ff, 0x00000000, 21696 }, /* Scc */ -{ op_54c8_0_comp_ff, 0x00000007, 21704 }, /* DBcc */ +{ op_54c8_0_comp_ff, 0x00000003, 21704 }, /* DBcc */ { op_54d0_0_comp_ff, 0x00000000, 21712 }, /* Scc */ { op_54d8_0_comp_ff, 0x00000000, 21720 }, /* Scc */ { op_54e0_0_comp_ff, 0x00000000, 21728 }, /* Scc */ @@ -1047,7 +1035,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 21755 }, /* TRAPcc */ { NULL, 0x00000001, 21756 }, /* TRAPcc */ { op_55c0_0_comp_ff, 0x00000000, 21952 }, /* Scc */ -{ op_55c8_0_comp_ff, 0x00000007, 21960 }, /* DBcc */ +{ op_55c8_0_comp_ff, 0x00000003, 21960 }, /* DBcc */ { op_55d0_0_comp_ff, 0x00000000, 21968 }, /* Scc */ { op_55d8_0_comp_ff, 0x00000000, 21976 }, /* Scc */ { op_55e0_0_comp_ff, 0x00000000, 21984 }, /* Scc */ @@ -1059,7 +1047,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 22011 }, /* TRAPcc */ { NULL, 0x00000001, 22012 }, /* TRAPcc */ { op_56c0_0_comp_ff, 0x00000000, 22208 }, /* Scc */ -{ op_56c8_0_comp_ff, 0x00000007, 22216 }, /* DBcc */ +{ op_56c8_0_comp_ff, 0x00000003, 22216 }, /* DBcc */ { op_56d0_0_comp_ff, 0x00000000, 22224 }, /* Scc */ { op_56d8_0_comp_ff, 0x00000000, 22232 }, /* Scc */ { op_56e0_0_comp_ff, 0x00000000, 22240 }, /* Scc */ @@ -1071,7 +1059,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 22267 }, /* TRAPcc */ { NULL, 0x00000001, 22268 }, /* TRAPcc */ { op_57c0_0_comp_ff, 0x00000000, 22464 }, /* Scc */ -{ op_57c8_0_comp_ff, 0x00000007, 22472 }, /* DBcc */ +{ op_57c8_0_comp_ff, 0x00000003, 22472 }, /* DBcc */ { op_57d0_0_comp_ff, 0x00000000, 22480 }, /* Scc */ { op_57d8_0_comp_ff, 0x00000000, 22488 }, /* Scc */ { op_57e0_0_comp_ff, 0x00000000, 22496 }, /* Scc */ @@ -1082,32 +1070,32 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 22522 }, /* TRAPcc */ { NULL, 0x00000001, 22523 }, /* TRAPcc */ { NULL, 0x00000001, 22524 }, /* TRAPcc */ -{ NULL, 0x00000000, 22720 }, /* Scc */ -{ NULL, 0x00000007, 22728 }, /* DBcc */ -{ NULL, 0x00000000, 22736 }, /* Scc */ -{ NULL, 0x00000000, 22744 }, /* Scc */ -{ NULL, 0x00000000, 22752 }, /* Scc */ -{ NULL, 0x00000002, 22760 }, /* Scc */ -{ NULL, 0x00000002, 22768 }, /* Scc */ -{ NULL, 0x00000002, 22776 }, /* Scc */ -{ NULL, 0x00000002, 22777 }, /* Scc */ +{ op_58c0_0_comp_ff, 0x00000000, 22720 }, /* Scc */ +{ op_58c8_0_comp_ff, 0x00000003, 22728 }, /* DBcc */ +{ op_58d0_0_comp_ff, 0x00000000, 22736 }, /* Scc */ +{ op_58d8_0_comp_ff, 0x00000000, 22744 }, /* Scc */ +{ op_58e0_0_comp_ff, 0x00000000, 22752 }, /* Scc */ +{ op_58e8_0_comp_ff, 0x00000002, 22760 }, /* Scc */ +{ op_58f0_0_comp_ff, 0x00000002, 22768 }, /* Scc */ +{ op_58f8_0_comp_ff, 0x00000002, 22776 }, /* Scc */ +{ op_58f9_0_comp_ff, 0x00000002, 22777 }, /* Scc */ { NULL, 0x00000001, 22778 }, /* TRAPcc */ { NULL, 0x00000001, 22779 }, /* TRAPcc */ { NULL, 0x00000001, 22780 }, /* TRAPcc */ -{ NULL, 0x00000000, 22976 }, /* Scc */ -{ NULL, 0x00000007, 22984 }, /* DBcc */ -{ NULL, 0x00000000, 22992 }, /* Scc */ -{ NULL, 0x00000000, 23000 }, /* Scc */ -{ NULL, 0x00000000, 23008 }, /* Scc */ -{ NULL, 0x00000002, 23016 }, /* Scc */ -{ NULL, 0x00000002, 23024 }, /* Scc */ -{ NULL, 0x00000002, 23032 }, /* Scc */ -{ NULL, 0x00000002, 23033 }, /* Scc */ +{ op_59c0_0_comp_ff, 0x00000000, 22976 }, /* Scc */ +{ op_59c8_0_comp_ff, 0x00000003, 22984 }, /* DBcc */ +{ op_59d0_0_comp_ff, 0x00000000, 22992 }, /* Scc */ +{ op_59d8_0_comp_ff, 0x00000000, 23000 }, /* Scc */ +{ op_59e0_0_comp_ff, 0x00000000, 23008 }, /* Scc */ +{ op_59e8_0_comp_ff, 0x00000002, 23016 }, /* Scc */ +{ op_59f0_0_comp_ff, 0x00000002, 23024 }, /* Scc */ +{ op_59f8_0_comp_ff, 0x00000002, 23032 }, /* Scc */ +{ op_59f9_0_comp_ff, 0x00000002, 23033 }, /* Scc */ { NULL, 0x00000001, 23034 }, /* TRAPcc */ { NULL, 0x00000001, 23035 }, /* TRAPcc */ { NULL, 0x00000001, 23036 }, /* TRAPcc */ { op_5ac0_0_comp_ff, 0x00000000, 23232 }, /* Scc */ -{ op_5ac8_0_comp_ff, 0x00000007, 23240 }, /* DBcc */ +{ op_5ac8_0_comp_ff, 0x00000003, 23240 }, /* DBcc */ { op_5ad0_0_comp_ff, 0x00000000, 23248 }, /* Scc */ { op_5ad8_0_comp_ff, 0x00000000, 23256 }, /* Scc */ { op_5ae0_0_comp_ff, 0x00000000, 23264 }, /* Scc */ @@ -1119,7 +1107,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 23291 }, /* TRAPcc */ { NULL, 0x00000001, 23292 }, /* TRAPcc */ { op_5bc0_0_comp_ff, 0x00000000, 23488 }, /* Scc */ -{ op_5bc8_0_comp_ff, 0x00000007, 23496 }, /* DBcc */ +{ op_5bc8_0_comp_ff, 0x00000003, 23496 }, /* DBcc */ { op_5bd0_0_comp_ff, 0x00000000, 23504 }, /* Scc */ { op_5bd8_0_comp_ff, 0x00000000, 23512 }, /* Scc */ { op_5be0_0_comp_ff, 0x00000000, 23520 }, /* Scc */ @@ -1131,7 +1119,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 23547 }, /* TRAPcc */ { NULL, 0x00000001, 23548 }, /* TRAPcc */ { op_5cc0_0_comp_ff, 0x00000000, 23744 }, /* Scc */ -{ op_5cc8_0_comp_ff, 0x00000007, 23752 }, /* DBcc */ +{ op_5cc8_0_comp_ff, 0x00000003, 23752 }, /* DBcc */ { op_5cd0_0_comp_ff, 0x00000000, 23760 }, /* Scc */ { op_5cd8_0_comp_ff, 0x00000000, 23768 }, /* Scc */ { op_5ce0_0_comp_ff, 0x00000000, 23776 }, /* Scc */ @@ -1143,7 +1131,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 23803 }, /* TRAPcc */ { NULL, 0x00000001, 23804 }, /* TRAPcc */ { op_5dc0_0_comp_ff, 0x00000000, 24000 }, /* Scc */ -{ op_5dc8_0_comp_ff, 0x00000007, 24008 }, /* DBcc */ +{ op_5dc8_0_comp_ff, 0x00000003, 24008 }, /* DBcc */ { op_5dd0_0_comp_ff, 0x00000000, 24016 }, /* Scc */ { op_5dd8_0_comp_ff, 0x00000000, 24024 }, /* Scc */ { op_5de0_0_comp_ff, 0x00000000, 24032 }, /* Scc */ @@ -1155,7 +1143,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 24059 }, /* TRAPcc */ { NULL, 0x00000001, 24060 }, /* TRAPcc */ { op_5ec0_0_comp_ff, 0x00000000, 24256 }, /* Scc */ -{ op_5ec8_0_comp_ff, 0x00000007, 24264 }, /* DBcc */ +{ op_5ec8_0_comp_ff, 0x00000003, 24264 }, /* DBcc */ { op_5ed0_0_comp_ff, 0x00000000, 24272 }, /* Scc */ { op_5ed8_0_comp_ff, 0x00000000, 24280 }, /* Scc */ { op_5ee0_0_comp_ff, 0x00000000, 24288 }, /* Scc */ @@ -1167,7 +1155,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 24315 }, /* TRAPcc */ { NULL, 0x00000001, 24316 }, /* TRAPcc */ { op_5fc0_0_comp_ff, 0x00000000, 24512 }, /* Scc */ -{ op_5fc8_0_comp_ff, 0x00000007, 24520 }, /* DBcc */ +{ op_5fc8_0_comp_ff, 0x00000003, 24520 }, /* DBcc */ { op_5fd0_0_comp_ff, 0x00000000, 24528 }, /* Scc */ { op_5fd8_0_comp_ff, 0x00000000, 24536 }, /* Scc */ { op_5fe0_0_comp_ff, 0x00000000, 24544 }, /* Scc */ @@ -1183,7 +1171,7 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_60ff_0_comp_ff, 0x00000012, 24831 }, /* Bcc */ { op_6100_0_comp_ff, 0x00000012, 24832 }, /* BSR */ { op_6101_0_comp_ff, 0x00000010, 24833 }, /* BSR */ -{ NULL, 0x00000012, 25087 }, /* BSR */ +{ op_61ff_0_comp_ff, 0x00000012, 25087 }, /* BSR */ { op_6200_0_comp_ff, 0x00000003, 25088 }, /* Bcc */ { op_6201_0_comp_ff, 0x00000001, 25089 }, /* Bcc */ { op_62ff_0_comp_ff, 0x00000003, 25343 }, /* Bcc */ @@ -1264,13 +1252,13 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000001, 32976 }, /* DIVU */ { NULL, 0x00000001, 32984 }, /* DIVU */ { NULL, 0x00000001, 32992 }, /* DIVU */ -{ NULL, 0x00000001, 33000 }, /* DIVU */ -{ NULL, 0x00000001, 33008 }, /* DIVU */ -{ NULL, 0x00000001, 33016 }, /* DIVU */ -{ NULL, 0x00000001, 33017 }, /* DIVU */ -{ NULL, 0x00000001, 33018 }, /* DIVU */ -{ NULL, 0x00000001, 33019 }, /* DIVU */ -{ NULL, 0x00000001, 33020 }, /* DIVU */ +{ NULL, 0x00000003, 33000 }, /* DIVU */ +{ NULL, 0x00000003, 33008 }, /* DIVU */ +{ NULL, 0x00000003, 33016 }, /* DIVU */ +{ NULL, 0x00000003, 33017 }, /* DIVU */ +{ NULL, 0x00000003, 33018 }, /* DIVU */ +{ NULL, 0x00000003, 33019 }, /* DIVU */ +{ NULL, 0x00000003, 33020 }, /* DIVU */ { NULL, 0x00000000, 33024 }, /* SBCD */ { NULL, 0x00000000, 33032 }, /* SBCD */ { op_8110_0_comp_ff, 0x00000000, 33040 }, /* OR */ @@ -1356,8 +1344,8 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_90fa_0_comp_ff, 0x00000002, 37114 }, /* SUBA */ { op_90fb_0_comp_ff, 0x00000002, 37115 }, /* SUBA */ { op_90fc_0_comp_ff, 0x00000002, 37116 }, /* SUBA */ -{ op_9100_0_comp_ff, 0x0000000c, 37120 }, /* SUBX */ -{ op_9108_0_comp_ff, 0x0000000c, 37128 }, /* SUBX */ +{ op_9100_0_comp_ff, 0x00000008, 37120 }, /* SUBX */ +{ op_9108_0_comp_ff, 0x00000008, 37128 }, /* SUBX */ { op_9110_0_comp_ff, 0x00000000, 37136 }, /* SUB */ { op_9118_0_comp_ff, 0x00000000, 37144 }, /* SUB */ { op_9120_0_comp_ff, 0x00000000, 37152 }, /* SUB */ @@ -1365,8 +1353,8 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_9130_0_comp_ff, 0x00000002, 37168 }, /* SUB */ { op_9138_0_comp_ff, 0x00000002, 37176 }, /* SUB */ { op_9139_0_comp_ff, 0x00000002, 37177 }, /* SUB */ -{ op_9140_0_comp_ff, 0x0000000c, 37184 }, /* SUBX */ -{ op_9148_0_comp_ff, 0x0000000c, 37192 }, /* SUBX */ +{ op_9140_0_comp_ff, 0x00000008, 37184 }, /* SUBX */ +{ op_9148_0_comp_ff, 0x00000008, 37192 }, /* SUBX */ { op_9150_0_comp_ff, 0x00000000, 37200 }, /* SUB */ { op_9158_0_comp_ff, 0x00000000, 37208 }, /* SUB */ { op_9160_0_comp_ff, 0x00000000, 37216 }, /* SUB */ @@ -1374,8 +1362,8 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_9170_0_comp_ff, 0x00000002, 37232 }, /* SUB */ { op_9178_0_comp_ff, 0x00000002, 37240 }, /* SUB */ { op_9179_0_comp_ff, 0x00000002, 37241 }, /* SUB */ -{ op_9180_0_comp_ff, 0x0000000c, 37248 }, /* SUBX */ -{ op_9188_0_comp_ff, 0x0000000c, 37256 }, /* SUBX */ +{ op_9180_0_comp_ff, 0x00000008, 37248 }, /* SUBX */ +{ op_9188_0_comp_ff, 0x00000008, 37256 }, /* SUBX */ { op_9190_0_comp_ff, 0x00000000, 37264 }, /* SUB */ { op_9198_0_comp_ff, 0x00000000, 37272 }, /* SUB */ { op_91a0_0_comp_ff, 0x00000000, 37280 }, /* SUB */ @@ -1609,8 +1597,8 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_d0fa_0_comp_ff, 0x00000002, 53498 }, /* ADDA */ { op_d0fb_0_comp_ff, 0x00000002, 53499 }, /* ADDA */ { op_d0fc_0_comp_ff, 0x00000002, 53500 }, /* ADDA */ -{ op_d100_0_comp_ff, 0x0000000c, 53504 }, /* ADDX */ -{ op_d108_0_comp_ff, 0x0000000c, 53512 }, /* ADDX */ +{ op_d100_0_comp_ff, 0x00000008, 53504 }, /* ADDX */ +{ op_d108_0_comp_ff, 0x00000008, 53512 }, /* ADDX */ { op_d110_0_comp_ff, 0x00000000, 53520 }, /* ADD */ { op_d118_0_comp_ff, 0x00000000, 53528 }, /* ADD */ { op_d120_0_comp_ff, 0x00000000, 53536 }, /* ADD */ @@ -1618,8 +1606,8 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_d130_0_comp_ff, 0x00000002, 53552 }, /* ADD */ { op_d138_0_comp_ff, 0x00000002, 53560 }, /* ADD */ { op_d139_0_comp_ff, 0x00000002, 53561 }, /* ADD */ -{ op_d140_0_comp_ff, 0x0000000c, 53568 }, /* ADDX */ -{ op_d148_0_comp_ff, 0x0000000c, 53576 }, /* ADDX */ +{ op_d140_0_comp_ff, 0x00000008, 53568 }, /* ADDX */ +{ op_d148_0_comp_ff, 0x00000008, 53576 }, /* ADDX */ { op_d150_0_comp_ff, 0x00000000, 53584 }, /* ADD */ { op_d158_0_comp_ff, 0x00000000, 53592 }, /* ADD */ { op_d160_0_comp_ff, 0x00000000, 53600 }, /* ADD */ @@ -1627,8 +1615,8 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_d170_0_comp_ff, 0x00000002, 53616 }, /* ADD */ { op_d178_0_comp_ff, 0x00000002, 53624 }, /* ADD */ { op_d179_0_comp_ff, 0x00000002, 53625 }, /* ADD */ -{ op_d180_0_comp_ff, 0x0000000c, 53632 }, /* ADDX */ -{ op_d188_0_comp_ff, 0x0000000c, 53640 }, /* ADDX */ +{ op_d180_0_comp_ff, 0x00000008, 53632 }, /* ADDX */ +{ op_d188_0_comp_ff, 0x00000008, 53640 }, /* ADDX */ { op_d190_0_comp_ff, 0x00000000, 53648 }, /* ADD */ { op_d198_0_comp_ff, 0x00000000, 53656 }, /* ADD */ { op_d1a0_0_comp_ff, 0x00000000, 53664 }, /* ADD */ @@ -1650,108 +1638,108 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { op_d1fc_0_comp_ff, 0x00000002, 53756 }, /* ADDA */ { op_e000_0_comp_ff, 0x00000000, 57344 }, /* ASR */ { op_e008_0_comp_ff, 0x00000000, 57352 }, /* LSR */ -{ NULL, 0x00000000, 57360 }, /* ROXR */ +{ NULL, 0x00000008, 57360 }, /* ROXR */ { op_e018_0_comp_ff, 0x00000000, 57368 }, /* ROR */ -{ op_e020_0_comp_ff, 0x00000004, 57376 }, /* ASR */ -{ op_e028_0_comp_ff, 0x00000004, 57384 }, /* LSR */ -{ NULL, 0x00000000, 57392 }, /* ROXR */ +{ op_e020_0_comp_ff, 0x00000000, 57376 }, /* ASR */ +{ op_e028_0_comp_ff, 0x00000000, 57384 }, /* LSR */ +{ NULL, 0x00000008, 57392 }, /* ROXR */ { op_e038_0_comp_ff, 0x00000000, 57400 }, /* ROR */ { op_e040_0_comp_ff, 0x00000000, 57408 }, /* ASR */ { op_e048_0_comp_ff, 0x00000000, 57416 }, /* LSR */ -{ NULL, 0x00000000, 57424 }, /* ROXR */ +{ NULL, 0x00000008, 57424 }, /* ROXR */ { op_e058_0_comp_ff, 0x00000000, 57432 }, /* ROR */ -{ op_e060_0_comp_ff, 0x00000004, 57440 }, /* ASR */ -{ op_e068_0_comp_ff, 0x00000004, 57448 }, /* LSR */ -{ NULL, 0x00000000, 57456 }, /* ROXR */ +{ op_e060_0_comp_ff, 0x00000000, 57440 }, /* ASR */ +{ op_e068_0_comp_ff, 0x00000000, 57448 }, /* LSR */ +{ NULL, 0x00000008, 57456 }, /* ROXR */ { op_e078_0_comp_ff, 0x00000000, 57464 }, /* ROR */ { op_e080_0_comp_ff, 0x00000000, 57472 }, /* ASR */ { op_e088_0_comp_ff, 0x00000000, 57480 }, /* LSR */ -{ NULL, 0x00000000, 57488 }, /* ROXR */ +{ NULL, 0x00000008, 57488 }, /* ROXR */ { op_e098_0_comp_ff, 0x00000000, 57496 }, /* ROR */ -{ op_e0a0_0_comp_ff, 0x00000004, 57504 }, /* ASR */ -{ op_e0a8_0_comp_ff, 0x00000004, 57512 }, /* LSR */ -{ NULL, 0x00000000, 57520 }, /* ROXR */ +{ op_e0a0_0_comp_ff, 0x00000000, 57504 }, /* ASR */ +{ op_e0a8_0_comp_ff, 0x00000000, 57512 }, /* LSR */ +{ NULL, 0x00000008, 57520 }, /* ROXR */ { op_e0b8_0_comp_ff, 0x00000000, 57528 }, /* ROR */ -{ NULL, 0x00000000, 57552 }, /* ASRW */ -{ NULL, 0x00000000, 57560 }, /* ASRW */ -{ NULL, 0x00000000, 57568 }, /* ASRW */ -{ NULL, 0x00000000, 57576 }, /* ASRW */ -{ NULL, 0x00000000, 57584 }, /* ASRW */ -{ NULL, 0x00000000, 57592 }, /* ASRW */ -{ NULL, 0x00000000, 57593 }, /* ASRW */ +{ op_e0d0_0_comp_ff, 0x00000000, 57552 }, /* ASRW */ +{ op_e0d8_0_comp_ff, 0x00000000, 57560 }, /* ASRW */ +{ op_e0e0_0_comp_ff, 0x00000000, 57568 }, /* ASRW */ +{ op_e0e8_0_comp_ff, 0x00000002, 57576 }, /* ASRW */ +{ op_e0f0_0_comp_ff, 0x00000002, 57584 }, /* ASRW */ +{ op_e0f8_0_comp_ff, 0x00000002, 57592 }, /* ASRW */ +{ op_e0f9_0_comp_ff, 0x00000002, 57593 }, /* ASRW */ { op_e100_0_comp_ff, 0x00000000, 57600 }, /* ASL */ { op_e108_0_comp_ff, 0x00000000, 57608 }, /* LSL */ -{ NULL, 0x00000000, 57616 }, /* ROXL */ +{ NULL, 0x00000008, 57616 }, /* ROXL */ { op_e118_0_comp_ff, 0x00000000, 57624 }, /* ROL */ -{ op_e120_0_comp_ff, 0x00000004, 57632 }, /* ASL */ -{ op_e128_0_comp_ff, 0x00000004, 57640 }, /* LSL */ -{ NULL, 0x00000000, 57648 }, /* ROXL */ +{ op_e120_0_comp_ff, 0x00000000, 57632 }, /* ASL */ +{ op_e128_0_comp_ff, 0x00000000, 57640 }, /* LSL */ +{ NULL, 0x00000008, 57648 }, /* ROXL */ { op_e138_0_comp_ff, 0x00000000, 57656 }, /* ROL */ { op_e140_0_comp_ff, 0x00000000, 57664 }, /* ASL */ { op_e148_0_comp_ff, 0x00000000, 57672 }, /* LSL */ -{ NULL, 0x00000000, 57680 }, /* ROXL */ +{ NULL, 0x00000008, 57680 }, /* ROXL */ { op_e158_0_comp_ff, 0x00000000, 57688 }, /* ROL */ -{ op_e160_0_comp_ff, 0x00000004, 57696 }, /* ASL */ -{ op_e168_0_comp_ff, 0x00000004, 57704 }, /* LSL */ -{ NULL, 0x00000000, 57712 }, /* ROXL */ +{ op_e160_0_comp_ff, 0x00000000, 57696 }, /* ASL */ +{ op_e168_0_comp_ff, 0x00000000, 57704 }, /* LSL */ +{ NULL, 0x00000008, 57712 }, /* ROXL */ { op_e178_0_comp_ff, 0x00000000, 57720 }, /* ROL */ { op_e180_0_comp_ff, 0x00000000, 57728 }, /* ASL */ { op_e188_0_comp_ff, 0x00000000, 57736 }, /* LSL */ -{ NULL, 0x00000000, 57744 }, /* ROXL */ +{ NULL, 0x00000008, 57744 }, /* ROXL */ { op_e198_0_comp_ff, 0x00000000, 57752 }, /* ROL */ -{ op_e1a0_0_comp_ff, 0x00000004, 57760 }, /* ASL */ -{ op_e1a8_0_comp_ff, 0x00000004, 57768 }, /* LSL */ -{ NULL, 0x00000000, 57776 }, /* ROXL */ +{ op_e1a0_0_comp_ff, 0x00000000, 57760 }, /* ASL */ +{ op_e1a8_0_comp_ff, 0x00000000, 57768 }, /* LSL */ +{ NULL, 0x00000008, 57776 }, /* ROXL */ { op_e1b8_0_comp_ff, 0x00000000, 57784 }, /* ROL */ -{ NULL, 0x00000000, 57808 }, /* ASLW */ -{ NULL, 0x00000000, 57816 }, /* ASLW */ -{ NULL, 0x00000000, 57824 }, /* ASLW */ -{ NULL, 0x00000000, 57832 }, /* ASLW */ -{ NULL, 0x00000000, 57840 }, /* ASLW */ -{ NULL, 0x00000000, 57848 }, /* ASLW */ -{ NULL, 0x00000000, 57849 }, /* ASLW */ -{ NULL, 0x00000000, 58064 }, /* LSRW */ -{ NULL, 0x00000000, 58072 }, /* LSRW */ -{ NULL, 0x00000000, 58080 }, /* LSRW */ -{ NULL, 0x00000000, 58088 }, /* LSRW */ -{ NULL, 0x00000000, 58096 }, /* LSRW */ -{ NULL, 0x00000000, 58104 }, /* LSRW */ -{ NULL, 0x00000000, 58105 }, /* LSRW */ -{ NULL, 0x00000000, 58320 }, /* LSLW */ -{ NULL, 0x00000000, 58328 }, /* LSLW */ -{ NULL, 0x00000000, 58336 }, /* LSLW */ -{ NULL, 0x00000000, 58344 }, /* LSLW */ -{ NULL, 0x00000000, 58352 }, /* LSLW */ -{ NULL, 0x00000000, 58360 }, /* LSLW */ -{ NULL, 0x00000000, 58361 }, /* LSLW */ -{ NULL, 0x00000000, 58576 }, /* ROXRW */ -{ NULL, 0x00000000, 58584 }, /* ROXRW */ -{ NULL, 0x00000000, 58592 }, /* ROXRW */ -{ NULL, 0x00000000, 58600 }, /* ROXRW */ -{ NULL, 0x00000000, 58608 }, /* ROXRW */ -{ NULL, 0x00000000, 58616 }, /* ROXRW */ -{ NULL, 0x00000000, 58617 }, /* ROXRW */ -{ NULL, 0x00000000, 58832 }, /* ROXLW */ -{ NULL, 0x00000000, 58840 }, /* ROXLW */ -{ NULL, 0x00000000, 58848 }, /* ROXLW */ -{ NULL, 0x00000000, 58856 }, /* ROXLW */ -{ NULL, 0x00000000, 58864 }, /* ROXLW */ -{ NULL, 0x00000000, 58872 }, /* ROXLW */ -{ NULL, 0x00000000, 58873 }, /* ROXLW */ -{ NULL, 0x00000000, 59088 }, /* RORW */ -{ NULL, 0x00000000, 59096 }, /* RORW */ -{ NULL, 0x00000000, 59104 }, /* RORW */ -{ NULL, 0x00000000, 59112 }, /* RORW */ -{ NULL, 0x00000000, 59120 }, /* RORW */ -{ NULL, 0x00000000, 59128 }, /* RORW */ -{ NULL, 0x00000000, 59129 }, /* RORW */ -{ NULL, 0x00000000, 59344 }, /* ROLW */ -{ NULL, 0x00000000, 59352 }, /* ROLW */ -{ NULL, 0x00000000, 59360 }, /* ROLW */ -{ NULL, 0x00000000, 59368 }, /* ROLW */ -{ NULL, 0x00000000, 59376 }, /* ROLW */ -{ NULL, 0x00000000, 59384 }, /* ROLW */ -{ NULL, 0x00000000, 59385 }, /* ROLW */ +{ op_e1d0_0_comp_ff, 0x00000000, 57808 }, /* ASLW */ +{ op_e1d8_0_comp_ff, 0x00000000, 57816 }, /* ASLW */ +{ op_e1e0_0_comp_ff, 0x00000000, 57824 }, /* ASLW */ +{ op_e1e8_0_comp_ff, 0x00000002, 57832 }, /* ASLW */ +{ op_e1f0_0_comp_ff, 0x00000002, 57840 }, /* ASLW */ +{ op_e1f8_0_comp_ff, 0x00000002, 57848 }, /* ASLW */ +{ op_e1f9_0_comp_ff, 0x00000002, 57849 }, /* ASLW */ +{ op_e2d0_0_comp_ff, 0x00000000, 58064 }, /* LSRW */ +{ op_e2d8_0_comp_ff, 0x00000000, 58072 }, /* LSRW */ +{ op_e2e0_0_comp_ff, 0x00000000, 58080 }, /* LSRW */ +{ op_e2e8_0_comp_ff, 0x00000002, 58088 }, /* LSRW */ +{ op_e2f0_0_comp_ff, 0x00000002, 58096 }, /* LSRW */ +{ op_e2f8_0_comp_ff, 0x00000002, 58104 }, /* LSRW */ +{ op_e2f9_0_comp_ff, 0x00000002, 58105 }, /* LSRW */ +{ op_e3d0_0_comp_ff, 0x00000000, 58320 }, /* LSLW */ +{ op_e3d8_0_comp_ff, 0x00000000, 58328 }, /* LSLW */ +{ op_e3e0_0_comp_ff, 0x00000000, 58336 }, /* LSLW */ +{ op_e3e8_0_comp_ff, 0x00000002, 58344 }, /* LSLW */ +{ op_e3f0_0_comp_ff, 0x00000002, 58352 }, /* LSLW */ +{ op_e3f8_0_comp_ff, 0x00000002, 58360 }, /* LSLW */ +{ op_e3f9_0_comp_ff, 0x00000002, 58361 }, /* LSLW */ +{ NULL, 0x00000008, 58576 }, /* ROXRW */ +{ NULL, 0x00000008, 58584 }, /* ROXRW */ +{ NULL, 0x00000008, 58592 }, /* ROXRW */ +{ NULL, 0x0000000a, 58600 }, /* ROXRW */ +{ NULL, 0x0000000a, 58608 }, /* ROXRW */ +{ NULL, 0x0000000a, 58616 }, /* ROXRW */ +{ NULL, 0x0000000a, 58617 }, /* ROXRW */ +{ NULL, 0x00000008, 58832 }, /* ROXLW */ +{ NULL, 0x00000008, 58840 }, /* ROXLW */ +{ NULL, 0x00000008, 58848 }, /* ROXLW */ +{ NULL, 0x0000000a, 58856 }, /* ROXLW */ +{ NULL, 0x0000000a, 58864 }, /* ROXLW */ +{ NULL, 0x0000000a, 58872 }, /* ROXLW */ +{ NULL, 0x0000000a, 58873 }, /* ROXLW */ +{ op_e6d0_0_comp_ff, 0x00000000, 59088 }, /* RORW */ +{ op_e6d8_0_comp_ff, 0x00000000, 59096 }, /* RORW */ +{ op_e6e0_0_comp_ff, 0x00000000, 59104 }, /* RORW */ +{ op_e6e8_0_comp_ff, 0x00000002, 59112 }, /* RORW */ +{ op_e6f0_0_comp_ff, 0x00000002, 59120 }, /* RORW */ +{ op_e6f8_0_comp_ff, 0x00000002, 59128 }, /* RORW */ +{ op_e6f9_0_comp_ff, 0x00000002, 59129 }, /* RORW */ +{ op_e7d0_0_comp_ff, 0x00000000, 59344 }, /* ROLW */ +{ op_e7d8_0_comp_ff, 0x00000000, 59352 }, /* ROLW */ +{ op_e7e0_0_comp_ff, 0x00000000, 59360 }, /* ROLW */ +{ op_e7e8_0_comp_ff, 0x00000002, 59368 }, /* ROLW */ +{ op_e7f0_0_comp_ff, 0x00000002, 59376 }, /* ROLW */ +{ op_e7f8_0_comp_ff, 0x00000002, 59384 }, /* ROLW */ +{ op_e7f9_0_comp_ff, 0x00000002, 59385 }, /* ROLW */ { NULL, 0x00000000, 59584 }, /* BFTST */ { NULL, 0x00000000, 59600 }, /* BFTST */ { NULL, 0x00000000, 59624 }, /* BFTST */ @@ -1808,43 +1796,37 @@ extern const struct comptbl op_smalltbl_0_comp_ff[] = { { NULL, 0x00000000, 61424 }, /* BFINS */ { NULL, 0x00000000, 61432 }, /* BFINS */ { NULL, 0x00000000, 61433 }, /* BFINS */ -{ NULL, 0x00000001, 61440 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61448 }, /* MMUOP030 */ { NULL, 0x00000001, 61456 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61464 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61472 }, /* MMUOP030 */ { NULL, 0x00000001, 61480 }, /* MMUOP030 */ { NULL, 0x00000001, 61488 }, /* MMUOP030 */ { NULL, 0x00000001, 61496 }, /* MMUOP030 */ { NULL, 0x00000001, 61497 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61498 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61499 }, /* MMUOP030 */ -{ NULL, 0x00000020, 61952 }, /* FPP */ -{ NULL, 0x00000020, 61960 }, /* FPP */ -{ NULL, 0x00000020, 61968 }, /* FPP */ -{ NULL, 0x00000020, 61976 }, /* FPP */ -{ NULL, 0x00000020, 61984 }, /* FPP */ -{ NULL, 0x00000020, 61992 }, /* FPP */ -{ NULL, 0x00000020, 62000 }, /* FPP */ -{ NULL, 0x00000020, 62008 }, /* FPP */ -{ NULL, 0x00000020, 62009 }, /* FPP */ -{ NULL, 0x00000020, 62010 }, /* FPP */ -{ NULL, 0x00000020, 62011 }, /* FPP */ -{ NULL, 0x00000020, 62012 }, /* FPP */ -{ NULL, 0x00000020, 62016 }, /* FScc */ +{ NULL, 0x00000022, 61952 }, /* FPP */ +{ NULL, 0x00000022, 61960 }, /* FPP */ +{ NULL, 0x00000022, 61968 }, /* FPP */ +{ NULL, 0x00000022, 61976 }, /* FPP */ +{ NULL, 0x00000022, 61984 }, /* FPP */ +{ NULL, 0x00000022, 61992 }, /* FPP */ +{ NULL, 0x00000022, 62000 }, /* FPP */ +{ NULL, 0x00000022, 62008 }, /* FPP */ +{ NULL, 0x00000022, 62009 }, /* FPP */ +{ NULL, 0x00000022, 62010 }, /* FPP */ +{ NULL, 0x00000022, 62011 }, /* FPP */ +{ NULL, 0x00000022, 62012 }, /* FPP */ +{ NULL, 0x00000006, 62016 }, /* FScc */ { NULL, 0x00000021, 62024 }, /* FDBcc */ -{ NULL, 0x00000020, 62032 }, /* FScc */ -{ NULL, 0x00000020, 62040 }, /* FScc */ -{ NULL, 0x00000020, 62048 }, /* FScc */ -{ NULL, 0x00000020, 62056 }, /* FScc */ -{ NULL, 0x00000020, 62064 }, /* FScc */ -{ NULL, 0x00000020, 62072 }, /* FScc */ -{ NULL, 0x00000020, 62073 }, /* FScc */ +{ NULL, 0x00000006, 62032 }, /* FScc */ +{ NULL, 0x00000006, 62040 }, /* FScc */ +{ NULL, 0x00000006, 62048 }, /* FScc */ +{ NULL, 0x00000006, 62056 }, /* FScc */ +{ NULL, 0x00000006, 62064 }, /* FScc */ +{ NULL, 0x00000006, 62072 }, /* FScc */ +{ NULL, 0x00000006, 62073 }, /* FScc */ { NULL, 0x00000021, 62074 }, /* FTRAPcc */ { NULL, 0x00000021, 62075 }, /* FTRAPcc */ { NULL, 0x00000021, 62076 }, /* FTRAPcc */ -{ NULL, 0x00000021, 62080 }, /* FBcc */ -{ NULL, 0x00000021, 62144 }, /* FBcc */ +{ NULL, 0x00000005, 62080 }, /* FBcc */ +{ NULL, 0x00000005, 62144 }, /* FBcc */ { NULL, 0x00000020, 62224 }, /* FSAVE */ { NULL, 0x00000020, 62240 }, /* FSAVE */ { NULL, 0x00000020, 62248 }, /* FSAVE */ @@ -1903,7 +1885,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_30_0_comp_nf, 0x00000002, 48 }, /* OR */ { op_38_0_comp_nf, 0x00000002, 56 }, /* OR */ { op_39_0_comp_nf, 0x00000002, 57 }, /* OR */ -{ NULL, 0x00000001, 60 }, /* ORSR */ +{ op_3c_0_comp_nf, 0x00000002, 60 }, /* ORSR */ { op_40_0_comp_nf, 0x00000002, 64 }, /* OR */ { op_50_0_comp_nf, 0x00000002, 80 }, /* OR */ { op_58_0_comp_nf, 0x00000002, 88 }, /* OR */ @@ -1912,7 +1894,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_70_0_comp_nf, 0x00000002, 112 }, /* OR */ { op_78_0_comp_nf, 0x00000002, 120 }, /* OR */ { op_79_0_comp_nf, 0x00000002, 121 }, /* OR */ -{ NULL, 0x00000001, 124 }, /* ORSR */ +{ NULL, 0x00000002, 124 }, /* ORSR */ { op_80_0_comp_nf, 0x00000002, 128 }, /* OR */ { op_90_0_comp_nf, 0x00000002, 144 }, /* OR */ { op_98_0_comp_nf, 0x00000002, 152 }, /* OR */ @@ -1949,8 +1931,6 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_170_0_comp_nf, 0x00000002, 368 }, /* BCHG */ { op_178_0_comp_nf, 0x00000002, 376 }, /* BCHG */ { op_179_0_comp_nf, 0x00000002, 377 }, /* BCHG */ -{ op_17a_0_comp_nf, 0x00000002, 378 }, /* BCHG */ -{ op_17b_0_comp_nf, 0x00000002, 379 }, /* BCHG */ { op_180_0_comp_nf, 0x00000000, 384 }, /* BCLR */ { NULL, 0x00000001, 392 }, /* MVPRM */ { op_190_0_comp_nf, 0x00000000, 400 }, /* BCLR */ @@ -1960,8 +1940,6 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_1b0_0_comp_nf, 0x00000002, 432 }, /* BCLR */ { op_1b8_0_comp_nf, 0x00000002, 440 }, /* BCLR */ { op_1b9_0_comp_nf, 0x00000002, 441 }, /* BCLR */ -{ op_1ba_0_comp_nf, 0x00000002, 442 }, /* BCLR */ -{ op_1bb_0_comp_nf, 0x00000002, 443 }, /* BCLR */ { op_1c0_0_comp_nf, 0x00000000, 448 }, /* BSET */ { NULL, 0x00000001, 456 }, /* MVPRM */ { op_1d0_0_comp_nf, 0x00000000, 464 }, /* BSET */ @@ -1971,8 +1949,6 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_1f0_0_comp_nf, 0x00000002, 496 }, /* BSET */ { op_1f8_0_comp_nf, 0x00000002, 504 }, /* BSET */ { op_1f9_0_comp_nf, 0x00000002, 505 }, /* BSET */ -{ op_1fa_0_comp_nf, 0x00000002, 506 }, /* BSET */ -{ op_1fb_0_comp_nf, 0x00000002, 507 }, /* BSET */ { op_200_0_comp_nf, 0x00000002, 512 }, /* AND */ { op_210_0_comp_nf, 0x00000002, 528 }, /* AND */ { op_218_0_comp_nf, 0x00000002, 536 }, /* AND */ @@ -1981,7 +1957,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_230_0_comp_nf, 0x00000002, 560 }, /* AND */ { op_238_0_comp_nf, 0x00000002, 568 }, /* AND */ { op_239_0_comp_nf, 0x00000002, 569 }, /* AND */ -{ NULL, 0x00000001, 572 }, /* ANDSR */ +{ op_23c_0_comp_nf, 0x00000002, 572 }, /* ANDSR */ { op_240_0_comp_nf, 0x00000002, 576 }, /* AND */ { op_250_0_comp_nf, 0x00000002, 592 }, /* AND */ { op_258_0_comp_nf, 0x00000002, 600 }, /* AND */ @@ -1990,7 +1966,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_270_0_comp_nf, 0x00000002, 624 }, /* AND */ { op_278_0_comp_nf, 0x00000002, 632 }, /* AND */ { op_279_0_comp_nf, 0x00000002, 633 }, /* AND */ -{ NULL, 0x00000001, 636 }, /* ANDSR */ +{ NULL, 0x00000002, 636 }, /* ANDSR */ { op_280_0_comp_nf, 0x00000002, 640 }, /* AND */ { op_290_0_comp_nf, 0x00000002, 656 }, /* AND */ { op_298_0_comp_nf, 0x00000002, 664 }, /* AND */ @@ -2089,8 +2065,6 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_870_0_comp_nf, 0x00000002, 2160 }, /* BCHG */ { op_878_0_comp_nf, 0x00000002, 2168 }, /* BCHG */ { op_879_0_comp_nf, 0x00000002, 2169 }, /* BCHG */ -{ op_87a_0_comp_nf, 0x00000002, 2170 }, /* BCHG */ -{ op_87b_0_comp_nf, 0x00000002, 2171 }, /* BCHG */ { op_880_0_comp_nf, 0x00000002, 2176 }, /* BCLR */ { op_890_0_comp_nf, 0x00000002, 2192 }, /* BCLR */ { op_898_0_comp_nf, 0x00000002, 2200 }, /* BCLR */ @@ -2099,8 +2073,6 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_8b0_0_comp_nf, 0x00000002, 2224 }, /* BCLR */ { op_8b8_0_comp_nf, 0x00000002, 2232 }, /* BCLR */ { op_8b9_0_comp_nf, 0x00000002, 2233 }, /* BCLR */ -{ op_8ba_0_comp_nf, 0x00000002, 2234 }, /* BCLR */ -{ op_8bb_0_comp_nf, 0x00000002, 2235 }, /* BCLR */ { op_8c0_0_comp_nf, 0x00000002, 2240 }, /* BSET */ { op_8d0_0_comp_nf, 0x00000002, 2256 }, /* BSET */ { op_8d8_0_comp_nf, 0x00000002, 2264 }, /* BSET */ @@ -2109,8 +2081,6 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_8f0_0_comp_nf, 0x00000002, 2288 }, /* BSET */ { op_8f8_0_comp_nf, 0x00000002, 2296 }, /* BSET */ { op_8f9_0_comp_nf, 0x00000002, 2297 }, /* BSET */ -{ op_8fa_0_comp_nf, 0x00000002, 2298 }, /* BSET */ -{ op_8fb_0_comp_nf, 0x00000002, 2299 }, /* BSET */ { op_a00_0_comp_nf, 0x00000002, 2560 }, /* EOR */ { op_a10_0_comp_nf, 0x00000002, 2576 }, /* EOR */ { op_a18_0_comp_nf, 0x00000002, 2584 }, /* EOR */ @@ -2119,7 +2089,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_a30_0_comp_nf, 0x00000002, 2608 }, /* EOR */ { op_a38_0_comp_nf, 0x00000002, 2616 }, /* EOR */ { op_a39_0_comp_nf, 0x00000002, 2617 }, /* EOR */ -{ NULL, 0x00000001, 2620 }, /* EORSR */ +{ op_a3c_0_comp_nf, 0x00000002, 2620 }, /* EORSR */ { op_a40_0_comp_nf, 0x00000002, 2624 }, /* EOR */ { op_a50_0_comp_nf, 0x00000002, 2640 }, /* EOR */ { op_a58_0_comp_nf, 0x00000002, 2648 }, /* EOR */ @@ -2128,7 +2098,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_a70_0_comp_nf, 0x00000002, 2672 }, /* EOR */ { op_a78_0_comp_nf, 0x00000002, 2680 }, /* EOR */ { op_a79_0_comp_nf, 0x00000002, 2681 }, /* EOR */ -{ NULL, 0x00000001, 2684 }, /* EORSR */ +{ NULL, 0x00000002, 2684 }, /* EORSR */ { op_a80_0_comp_nf, 0x00000002, 2688 }, /* EOR */ { op_a90_0_comp_nf, 0x00000002, 2704 }, /* EOR */ { op_a98_0_comp_nf, 0x00000002, 2712 }, /* EOR */ @@ -2848,7 +2818,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_50b8_0_comp_nf, 0x00000002, 20664 }, /* ADD */ { op_50b9_0_comp_nf, 0x00000002, 20665 }, /* ADD */ { op_50c0_0_comp_nf, 0x00000000, 20672 }, /* Scc */ -{ op_50c8_0_comp_nf, 0x00000007, 20680 }, /* DBcc */ +{ op_50c8_0_comp_nf, 0x00000003, 20680 }, /* DBcc */ { op_50d0_0_comp_nf, 0x00000000, 20688 }, /* Scc */ { op_50d8_0_comp_nf, 0x00000000, 20696 }, /* Scc */ { op_50e0_0_comp_nf, 0x00000000, 20704 }, /* Scc */ @@ -2886,7 +2856,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_51b8_0_comp_nf, 0x00000002, 20920 }, /* SUB */ { op_51b9_0_comp_nf, 0x00000002, 20921 }, /* SUB */ { op_51c0_0_comp_nf, 0x00000000, 20928 }, /* Scc */ -{ op_51c8_0_comp_nf, 0x00000007, 20936 }, /* DBcc */ +{ op_51c8_0_comp_nf, 0x00000003, 20936 }, /* DBcc */ { op_51d0_0_comp_nf, 0x00000000, 20944 }, /* Scc */ { op_51d8_0_comp_nf, 0x00000000, 20952 }, /* Scc */ { op_51e0_0_comp_nf, 0x00000000, 20960 }, /* Scc */ @@ -2898,7 +2868,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 20987 }, /* TRAPcc */ { NULL, 0x00000001, 20988 }, /* TRAPcc */ { op_52c0_0_comp_nf, 0x00000000, 21184 }, /* Scc */ -{ op_52c8_0_comp_nf, 0x00000007, 21192 }, /* DBcc */ +{ op_52c8_0_comp_nf, 0x00000003, 21192 }, /* DBcc */ { op_52d0_0_comp_nf, 0x00000000, 21200 }, /* Scc */ { op_52d8_0_comp_nf, 0x00000000, 21208 }, /* Scc */ { op_52e0_0_comp_nf, 0x00000000, 21216 }, /* Scc */ @@ -2910,7 +2880,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 21243 }, /* TRAPcc */ { NULL, 0x00000001, 21244 }, /* TRAPcc */ { op_53c0_0_comp_nf, 0x00000000, 21440 }, /* Scc */ -{ op_53c8_0_comp_nf, 0x00000007, 21448 }, /* DBcc */ +{ op_53c8_0_comp_nf, 0x00000003, 21448 }, /* DBcc */ { op_53d0_0_comp_nf, 0x00000000, 21456 }, /* Scc */ { op_53d8_0_comp_nf, 0x00000000, 21464 }, /* Scc */ { op_53e0_0_comp_nf, 0x00000000, 21472 }, /* Scc */ @@ -2922,7 +2892,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 21499 }, /* TRAPcc */ { NULL, 0x00000001, 21500 }, /* TRAPcc */ { op_54c0_0_comp_nf, 0x00000000, 21696 }, /* Scc */ -{ op_54c8_0_comp_nf, 0x00000007, 21704 }, /* DBcc */ +{ op_54c8_0_comp_nf, 0x00000003, 21704 }, /* DBcc */ { op_54d0_0_comp_nf, 0x00000000, 21712 }, /* Scc */ { op_54d8_0_comp_nf, 0x00000000, 21720 }, /* Scc */ { op_54e0_0_comp_nf, 0x00000000, 21728 }, /* Scc */ @@ -2934,7 +2904,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 21755 }, /* TRAPcc */ { NULL, 0x00000001, 21756 }, /* TRAPcc */ { op_55c0_0_comp_nf, 0x00000000, 21952 }, /* Scc */ -{ op_55c8_0_comp_nf, 0x00000007, 21960 }, /* DBcc */ +{ op_55c8_0_comp_nf, 0x00000003, 21960 }, /* DBcc */ { op_55d0_0_comp_nf, 0x00000000, 21968 }, /* Scc */ { op_55d8_0_comp_nf, 0x00000000, 21976 }, /* Scc */ { op_55e0_0_comp_nf, 0x00000000, 21984 }, /* Scc */ @@ -2946,7 +2916,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 22011 }, /* TRAPcc */ { NULL, 0x00000001, 22012 }, /* TRAPcc */ { op_56c0_0_comp_nf, 0x00000000, 22208 }, /* Scc */ -{ op_56c8_0_comp_nf, 0x00000007, 22216 }, /* DBcc */ +{ op_56c8_0_comp_nf, 0x00000003, 22216 }, /* DBcc */ { op_56d0_0_comp_nf, 0x00000000, 22224 }, /* Scc */ { op_56d8_0_comp_nf, 0x00000000, 22232 }, /* Scc */ { op_56e0_0_comp_nf, 0x00000000, 22240 }, /* Scc */ @@ -2958,7 +2928,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 22267 }, /* TRAPcc */ { NULL, 0x00000001, 22268 }, /* TRAPcc */ { op_57c0_0_comp_nf, 0x00000000, 22464 }, /* Scc */ -{ op_57c8_0_comp_nf, 0x00000007, 22472 }, /* DBcc */ +{ op_57c8_0_comp_nf, 0x00000003, 22472 }, /* DBcc */ { op_57d0_0_comp_nf, 0x00000000, 22480 }, /* Scc */ { op_57d8_0_comp_nf, 0x00000000, 22488 }, /* Scc */ { op_57e0_0_comp_nf, 0x00000000, 22496 }, /* Scc */ @@ -2969,32 +2939,32 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 22522 }, /* TRAPcc */ { NULL, 0x00000001, 22523 }, /* TRAPcc */ { NULL, 0x00000001, 22524 }, /* TRAPcc */ -{ NULL, 0x00000000, 22720 }, /* Scc */ -{ NULL, 0x00000007, 22728 }, /* DBcc */ -{ NULL, 0x00000000, 22736 }, /* Scc */ -{ NULL, 0x00000000, 22744 }, /* Scc */ -{ NULL, 0x00000000, 22752 }, /* Scc */ -{ NULL, 0x00000002, 22760 }, /* Scc */ -{ NULL, 0x00000002, 22768 }, /* Scc */ -{ NULL, 0x00000002, 22776 }, /* Scc */ -{ NULL, 0x00000002, 22777 }, /* Scc */ +{ op_58c0_0_comp_nf, 0x00000000, 22720 }, /* Scc */ +{ op_58c8_0_comp_nf, 0x00000003, 22728 }, /* DBcc */ +{ op_58d0_0_comp_nf, 0x00000000, 22736 }, /* Scc */ +{ op_58d8_0_comp_nf, 0x00000000, 22744 }, /* Scc */ +{ op_58e0_0_comp_nf, 0x00000000, 22752 }, /* Scc */ +{ op_58e8_0_comp_nf, 0x00000002, 22760 }, /* Scc */ +{ op_58f0_0_comp_nf, 0x00000002, 22768 }, /* Scc */ +{ op_58f8_0_comp_nf, 0x00000002, 22776 }, /* Scc */ +{ op_58f9_0_comp_nf, 0x00000002, 22777 }, /* Scc */ { NULL, 0x00000001, 22778 }, /* TRAPcc */ { NULL, 0x00000001, 22779 }, /* TRAPcc */ { NULL, 0x00000001, 22780 }, /* TRAPcc */ -{ NULL, 0x00000000, 22976 }, /* Scc */ -{ NULL, 0x00000007, 22984 }, /* DBcc */ -{ NULL, 0x00000000, 22992 }, /* Scc */ -{ NULL, 0x00000000, 23000 }, /* Scc */ -{ NULL, 0x00000000, 23008 }, /* Scc */ -{ NULL, 0x00000002, 23016 }, /* Scc */ -{ NULL, 0x00000002, 23024 }, /* Scc */ -{ NULL, 0x00000002, 23032 }, /* Scc */ -{ NULL, 0x00000002, 23033 }, /* Scc */ +{ op_59c0_0_comp_nf, 0x00000000, 22976 }, /* Scc */ +{ op_59c8_0_comp_nf, 0x00000003, 22984 }, /* DBcc */ +{ op_59d0_0_comp_nf, 0x00000000, 22992 }, /* Scc */ +{ op_59d8_0_comp_nf, 0x00000000, 23000 }, /* Scc */ +{ op_59e0_0_comp_nf, 0x00000000, 23008 }, /* Scc */ +{ op_59e8_0_comp_nf, 0x00000002, 23016 }, /* Scc */ +{ op_59f0_0_comp_nf, 0x00000002, 23024 }, /* Scc */ +{ op_59f8_0_comp_nf, 0x00000002, 23032 }, /* Scc */ +{ op_59f9_0_comp_nf, 0x00000002, 23033 }, /* Scc */ { NULL, 0x00000001, 23034 }, /* TRAPcc */ { NULL, 0x00000001, 23035 }, /* TRAPcc */ { NULL, 0x00000001, 23036 }, /* TRAPcc */ { op_5ac0_0_comp_nf, 0x00000000, 23232 }, /* Scc */ -{ op_5ac8_0_comp_nf, 0x00000007, 23240 }, /* DBcc */ +{ op_5ac8_0_comp_nf, 0x00000003, 23240 }, /* DBcc */ { op_5ad0_0_comp_nf, 0x00000000, 23248 }, /* Scc */ { op_5ad8_0_comp_nf, 0x00000000, 23256 }, /* Scc */ { op_5ae0_0_comp_nf, 0x00000000, 23264 }, /* Scc */ @@ -3006,7 +2976,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 23291 }, /* TRAPcc */ { NULL, 0x00000001, 23292 }, /* TRAPcc */ { op_5bc0_0_comp_nf, 0x00000000, 23488 }, /* Scc */ -{ op_5bc8_0_comp_nf, 0x00000007, 23496 }, /* DBcc */ +{ op_5bc8_0_comp_nf, 0x00000003, 23496 }, /* DBcc */ { op_5bd0_0_comp_nf, 0x00000000, 23504 }, /* Scc */ { op_5bd8_0_comp_nf, 0x00000000, 23512 }, /* Scc */ { op_5be0_0_comp_nf, 0x00000000, 23520 }, /* Scc */ @@ -3018,7 +2988,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 23547 }, /* TRAPcc */ { NULL, 0x00000001, 23548 }, /* TRAPcc */ { op_5cc0_0_comp_nf, 0x00000000, 23744 }, /* Scc */ -{ op_5cc8_0_comp_nf, 0x00000007, 23752 }, /* DBcc */ +{ op_5cc8_0_comp_nf, 0x00000003, 23752 }, /* DBcc */ { op_5cd0_0_comp_nf, 0x00000000, 23760 }, /* Scc */ { op_5cd8_0_comp_nf, 0x00000000, 23768 }, /* Scc */ { op_5ce0_0_comp_nf, 0x00000000, 23776 }, /* Scc */ @@ -3030,7 +3000,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 23803 }, /* TRAPcc */ { NULL, 0x00000001, 23804 }, /* TRAPcc */ { op_5dc0_0_comp_nf, 0x00000000, 24000 }, /* Scc */ -{ op_5dc8_0_comp_nf, 0x00000007, 24008 }, /* DBcc */ +{ op_5dc8_0_comp_nf, 0x00000003, 24008 }, /* DBcc */ { op_5dd0_0_comp_nf, 0x00000000, 24016 }, /* Scc */ { op_5dd8_0_comp_nf, 0x00000000, 24024 }, /* Scc */ { op_5de0_0_comp_nf, 0x00000000, 24032 }, /* Scc */ @@ -3042,7 +3012,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 24059 }, /* TRAPcc */ { NULL, 0x00000001, 24060 }, /* TRAPcc */ { op_5ec0_0_comp_nf, 0x00000000, 24256 }, /* Scc */ -{ op_5ec8_0_comp_nf, 0x00000007, 24264 }, /* DBcc */ +{ op_5ec8_0_comp_nf, 0x00000003, 24264 }, /* DBcc */ { op_5ed0_0_comp_nf, 0x00000000, 24272 }, /* Scc */ { op_5ed8_0_comp_nf, 0x00000000, 24280 }, /* Scc */ { op_5ee0_0_comp_nf, 0x00000000, 24288 }, /* Scc */ @@ -3054,7 +3024,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 24315 }, /* TRAPcc */ { NULL, 0x00000001, 24316 }, /* TRAPcc */ { op_5fc0_0_comp_nf, 0x00000000, 24512 }, /* Scc */ -{ op_5fc8_0_comp_nf, 0x00000007, 24520 }, /* DBcc */ +{ op_5fc8_0_comp_nf, 0x00000003, 24520 }, /* DBcc */ { op_5fd0_0_comp_nf, 0x00000000, 24528 }, /* Scc */ { op_5fd8_0_comp_nf, 0x00000000, 24536 }, /* Scc */ { op_5fe0_0_comp_nf, 0x00000000, 24544 }, /* Scc */ @@ -3070,7 +3040,7 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_60ff_0_comp_nf, 0x00000012, 24831 }, /* Bcc */ { op_6100_0_comp_nf, 0x00000012, 24832 }, /* BSR */ { op_6101_0_comp_nf, 0x00000010, 24833 }, /* BSR */ -{ NULL, 0x00000012, 25087 }, /* BSR */ +{ op_61ff_0_comp_nf, 0x00000012, 25087 }, /* BSR */ { op_6200_0_comp_nf, 0x00000003, 25088 }, /* Bcc */ { op_6201_0_comp_nf, 0x00000001, 25089 }, /* Bcc */ { op_62ff_0_comp_nf, 0x00000003, 25343 }, /* Bcc */ @@ -3151,13 +3121,13 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000001, 32976 }, /* DIVU */ { NULL, 0x00000001, 32984 }, /* DIVU */ { NULL, 0x00000001, 32992 }, /* DIVU */ -{ NULL, 0x00000001, 33000 }, /* DIVU */ -{ NULL, 0x00000001, 33008 }, /* DIVU */ -{ NULL, 0x00000001, 33016 }, /* DIVU */ -{ NULL, 0x00000001, 33017 }, /* DIVU */ -{ NULL, 0x00000001, 33018 }, /* DIVU */ -{ NULL, 0x00000001, 33019 }, /* DIVU */ -{ NULL, 0x00000001, 33020 }, /* DIVU */ +{ NULL, 0x00000003, 33000 }, /* DIVU */ +{ NULL, 0x00000003, 33008 }, /* DIVU */ +{ NULL, 0x00000003, 33016 }, /* DIVU */ +{ NULL, 0x00000003, 33017 }, /* DIVU */ +{ NULL, 0x00000003, 33018 }, /* DIVU */ +{ NULL, 0x00000003, 33019 }, /* DIVU */ +{ NULL, 0x00000003, 33020 }, /* DIVU */ { NULL, 0x00000000, 33024 }, /* SBCD */ { NULL, 0x00000000, 33032 }, /* SBCD */ { op_8110_0_comp_nf, 0x00000000, 33040 }, /* OR */ @@ -3537,108 +3507,108 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { op_d1fc_0_comp_nf, 0x00000002, 53756 }, /* ADDA */ { op_e000_0_comp_nf, 0x00000000, 57344 }, /* ASR */ { op_e008_0_comp_nf, 0x00000000, 57352 }, /* LSR */ -{ NULL, 0x00000000, 57360 }, /* ROXR */ +{ NULL, 0x00000008, 57360 }, /* ROXR */ { op_e018_0_comp_nf, 0x00000000, 57368 }, /* ROR */ -{ op_e020_0_comp_nf, 0x00000004, 57376 }, /* ASR */ -{ op_e028_0_comp_nf, 0x00000004, 57384 }, /* LSR */ -{ NULL, 0x00000000, 57392 }, /* ROXR */ +{ op_e020_0_comp_nf, 0x00000000, 57376 }, /* ASR */ +{ op_e028_0_comp_nf, 0x00000000, 57384 }, /* LSR */ +{ NULL, 0x00000008, 57392 }, /* ROXR */ { op_e038_0_comp_nf, 0x00000000, 57400 }, /* ROR */ { op_e040_0_comp_nf, 0x00000000, 57408 }, /* ASR */ { op_e048_0_comp_nf, 0x00000000, 57416 }, /* LSR */ -{ NULL, 0x00000000, 57424 }, /* ROXR */ +{ NULL, 0x00000008, 57424 }, /* ROXR */ { op_e058_0_comp_nf, 0x00000000, 57432 }, /* ROR */ -{ op_e060_0_comp_nf, 0x00000004, 57440 }, /* ASR */ -{ op_e068_0_comp_nf, 0x00000004, 57448 }, /* LSR */ -{ NULL, 0x00000000, 57456 }, /* ROXR */ +{ op_e060_0_comp_nf, 0x00000000, 57440 }, /* ASR */ +{ op_e068_0_comp_nf, 0x00000000, 57448 }, /* LSR */ +{ NULL, 0x00000008, 57456 }, /* ROXR */ { op_e078_0_comp_nf, 0x00000000, 57464 }, /* ROR */ { op_e080_0_comp_nf, 0x00000000, 57472 }, /* ASR */ { op_e088_0_comp_nf, 0x00000000, 57480 }, /* LSR */ -{ NULL, 0x00000000, 57488 }, /* ROXR */ +{ NULL, 0x00000008, 57488 }, /* ROXR */ { op_e098_0_comp_nf, 0x00000000, 57496 }, /* ROR */ -{ op_e0a0_0_comp_nf, 0x00000004, 57504 }, /* ASR */ -{ op_e0a8_0_comp_nf, 0x00000004, 57512 }, /* LSR */ -{ NULL, 0x00000000, 57520 }, /* ROXR */ +{ op_e0a0_0_comp_nf, 0x00000000, 57504 }, /* ASR */ +{ op_e0a8_0_comp_nf, 0x00000000, 57512 }, /* LSR */ +{ NULL, 0x00000008, 57520 }, /* ROXR */ { op_e0b8_0_comp_nf, 0x00000000, 57528 }, /* ROR */ -{ NULL, 0x00000000, 57552 }, /* ASRW */ -{ NULL, 0x00000000, 57560 }, /* ASRW */ -{ NULL, 0x00000000, 57568 }, /* ASRW */ -{ NULL, 0x00000000, 57576 }, /* ASRW */ -{ NULL, 0x00000000, 57584 }, /* ASRW */ -{ NULL, 0x00000000, 57592 }, /* ASRW */ -{ NULL, 0x00000000, 57593 }, /* ASRW */ +{ op_e0d0_0_comp_nf, 0x00000000, 57552 }, /* ASRW */ +{ op_e0d8_0_comp_nf, 0x00000000, 57560 }, /* ASRW */ +{ op_e0e0_0_comp_nf, 0x00000000, 57568 }, /* ASRW */ +{ op_e0e8_0_comp_nf, 0x00000002, 57576 }, /* ASRW */ +{ op_e0f0_0_comp_nf, 0x00000002, 57584 }, /* ASRW */ +{ op_e0f8_0_comp_nf, 0x00000002, 57592 }, /* ASRW */ +{ op_e0f9_0_comp_nf, 0x00000002, 57593 }, /* ASRW */ { op_e100_0_comp_nf, 0x00000000, 57600 }, /* ASL */ { op_e108_0_comp_nf, 0x00000000, 57608 }, /* LSL */ -{ NULL, 0x00000000, 57616 }, /* ROXL */ +{ NULL, 0x00000008, 57616 }, /* ROXL */ { op_e118_0_comp_nf, 0x00000000, 57624 }, /* ROL */ -{ op_e120_0_comp_nf, 0x00000004, 57632 }, /* ASL */ -{ op_e128_0_comp_nf, 0x00000004, 57640 }, /* LSL */ -{ NULL, 0x00000000, 57648 }, /* ROXL */ +{ op_e120_0_comp_nf, 0x00000000, 57632 }, /* ASL */ +{ op_e128_0_comp_nf, 0x00000000, 57640 }, /* LSL */ +{ NULL, 0x00000008, 57648 }, /* ROXL */ { op_e138_0_comp_nf, 0x00000000, 57656 }, /* ROL */ { op_e140_0_comp_nf, 0x00000000, 57664 }, /* ASL */ { op_e148_0_comp_nf, 0x00000000, 57672 }, /* LSL */ -{ NULL, 0x00000000, 57680 }, /* ROXL */ +{ NULL, 0x00000008, 57680 }, /* ROXL */ { op_e158_0_comp_nf, 0x00000000, 57688 }, /* ROL */ -{ op_e160_0_comp_nf, 0x00000004, 57696 }, /* ASL */ -{ op_e168_0_comp_nf, 0x00000004, 57704 }, /* LSL */ -{ NULL, 0x00000000, 57712 }, /* ROXL */ +{ op_e160_0_comp_nf, 0x00000000, 57696 }, /* ASL */ +{ op_e168_0_comp_nf, 0x00000000, 57704 }, /* LSL */ +{ NULL, 0x00000008, 57712 }, /* ROXL */ { op_e178_0_comp_nf, 0x00000000, 57720 }, /* ROL */ { op_e180_0_comp_nf, 0x00000000, 57728 }, /* ASL */ { op_e188_0_comp_nf, 0x00000000, 57736 }, /* LSL */ -{ NULL, 0x00000000, 57744 }, /* ROXL */ +{ NULL, 0x00000008, 57744 }, /* ROXL */ { op_e198_0_comp_nf, 0x00000000, 57752 }, /* ROL */ -{ op_e1a0_0_comp_nf, 0x00000004, 57760 }, /* ASL */ -{ op_e1a8_0_comp_nf, 0x00000004, 57768 }, /* LSL */ -{ NULL, 0x00000000, 57776 }, /* ROXL */ +{ op_e1a0_0_comp_nf, 0x00000000, 57760 }, /* ASL */ +{ op_e1a8_0_comp_nf, 0x00000000, 57768 }, /* LSL */ +{ NULL, 0x00000008, 57776 }, /* ROXL */ { op_e1b8_0_comp_nf, 0x00000000, 57784 }, /* ROL */ -{ NULL, 0x00000000, 57808 }, /* ASLW */ -{ NULL, 0x00000000, 57816 }, /* ASLW */ -{ NULL, 0x00000000, 57824 }, /* ASLW */ -{ NULL, 0x00000000, 57832 }, /* ASLW */ -{ NULL, 0x00000000, 57840 }, /* ASLW */ -{ NULL, 0x00000000, 57848 }, /* ASLW */ -{ NULL, 0x00000000, 57849 }, /* ASLW */ -{ NULL, 0x00000000, 58064 }, /* LSRW */ -{ NULL, 0x00000000, 58072 }, /* LSRW */ -{ NULL, 0x00000000, 58080 }, /* LSRW */ -{ NULL, 0x00000000, 58088 }, /* LSRW */ -{ NULL, 0x00000000, 58096 }, /* LSRW */ -{ NULL, 0x00000000, 58104 }, /* LSRW */ -{ NULL, 0x00000000, 58105 }, /* LSRW */ -{ NULL, 0x00000000, 58320 }, /* LSLW */ -{ NULL, 0x00000000, 58328 }, /* LSLW */ -{ NULL, 0x00000000, 58336 }, /* LSLW */ -{ NULL, 0x00000000, 58344 }, /* LSLW */ -{ NULL, 0x00000000, 58352 }, /* LSLW */ -{ NULL, 0x00000000, 58360 }, /* LSLW */ -{ NULL, 0x00000000, 58361 }, /* LSLW */ -{ NULL, 0x00000000, 58576 }, /* ROXRW */ -{ NULL, 0x00000000, 58584 }, /* ROXRW */ -{ NULL, 0x00000000, 58592 }, /* ROXRW */ -{ NULL, 0x00000000, 58600 }, /* ROXRW */ -{ NULL, 0x00000000, 58608 }, /* ROXRW */ -{ NULL, 0x00000000, 58616 }, /* ROXRW */ -{ NULL, 0x00000000, 58617 }, /* ROXRW */ -{ NULL, 0x00000000, 58832 }, /* ROXLW */ -{ NULL, 0x00000000, 58840 }, /* ROXLW */ -{ NULL, 0x00000000, 58848 }, /* ROXLW */ -{ NULL, 0x00000000, 58856 }, /* ROXLW */ -{ NULL, 0x00000000, 58864 }, /* ROXLW */ -{ NULL, 0x00000000, 58872 }, /* ROXLW */ -{ NULL, 0x00000000, 58873 }, /* ROXLW */ -{ NULL, 0x00000000, 59088 }, /* RORW */ -{ NULL, 0x00000000, 59096 }, /* RORW */ -{ NULL, 0x00000000, 59104 }, /* RORW */ -{ NULL, 0x00000000, 59112 }, /* RORW */ -{ NULL, 0x00000000, 59120 }, /* RORW */ -{ NULL, 0x00000000, 59128 }, /* RORW */ -{ NULL, 0x00000000, 59129 }, /* RORW */ -{ NULL, 0x00000000, 59344 }, /* ROLW */ -{ NULL, 0x00000000, 59352 }, /* ROLW */ -{ NULL, 0x00000000, 59360 }, /* ROLW */ -{ NULL, 0x00000000, 59368 }, /* ROLW */ -{ NULL, 0x00000000, 59376 }, /* ROLW */ -{ NULL, 0x00000000, 59384 }, /* ROLW */ -{ NULL, 0x00000000, 59385 }, /* ROLW */ +{ op_e1d0_0_comp_nf, 0x00000000, 57808 }, /* ASLW */ +{ op_e1d8_0_comp_nf, 0x00000000, 57816 }, /* ASLW */ +{ op_e1e0_0_comp_nf, 0x00000000, 57824 }, /* ASLW */ +{ op_e1e8_0_comp_nf, 0x00000002, 57832 }, /* ASLW */ +{ op_e1f0_0_comp_nf, 0x00000002, 57840 }, /* ASLW */ +{ op_e1f8_0_comp_nf, 0x00000002, 57848 }, /* ASLW */ +{ op_e1f9_0_comp_nf, 0x00000002, 57849 }, /* ASLW */ +{ op_e2d0_0_comp_nf, 0x00000000, 58064 }, /* LSRW */ +{ op_e2d8_0_comp_nf, 0x00000000, 58072 }, /* LSRW */ +{ op_e2e0_0_comp_nf, 0x00000000, 58080 }, /* LSRW */ +{ op_e2e8_0_comp_nf, 0x00000002, 58088 }, /* LSRW */ +{ op_e2f0_0_comp_nf, 0x00000002, 58096 }, /* LSRW */ +{ op_e2f8_0_comp_nf, 0x00000002, 58104 }, /* LSRW */ +{ op_e2f9_0_comp_nf, 0x00000002, 58105 }, /* LSRW */ +{ op_e3d0_0_comp_nf, 0x00000000, 58320 }, /* LSLW */ +{ op_e3d8_0_comp_nf, 0x00000000, 58328 }, /* LSLW */ +{ op_e3e0_0_comp_nf, 0x00000000, 58336 }, /* LSLW */ +{ op_e3e8_0_comp_nf, 0x00000002, 58344 }, /* LSLW */ +{ op_e3f0_0_comp_nf, 0x00000002, 58352 }, /* LSLW */ +{ op_e3f8_0_comp_nf, 0x00000002, 58360 }, /* LSLW */ +{ op_e3f9_0_comp_nf, 0x00000002, 58361 }, /* LSLW */ +{ NULL, 0x00000008, 58576 }, /* ROXRW */ +{ NULL, 0x00000008, 58584 }, /* ROXRW */ +{ NULL, 0x00000008, 58592 }, /* ROXRW */ +{ NULL, 0x0000000a, 58600 }, /* ROXRW */ +{ NULL, 0x0000000a, 58608 }, /* ROXRW */ +{ NULL, 0x0000000a, 58616 }, /* ROXRW */ +{ NULL, 0x0000000a, 58617 }, /* ROXRW */ +{ NULL, 0x00000008, 58832 }, /* ROXLW */ +{ NULL, 0x00000008, 58840 }, /* ROXLW */ +{ NULL, 0x00000008, 58848 }, /* ROXLW */ +{ NULL, 0x0000000a, 58856 }, /* ROXLW */ +{ NULL, 0x0000000a, 58864 }, /* ROXLW */ +{ NULL, 0x0000000a, 58872 }, /* ROXLW */ +{ NULL, 0x0000000a, 58873 }, /* ROXLW */ +{ op_e6d0_0_comp_nf, 0x00000000, 59088 }, /* RORW */ +{ op_e6d8_0_comp_nf, 0x00000000, 59096 }, /* RORW */ +{ op_e6e0_0_comp_nf, 0x00000000, 59104 }, /* RORW */ +{ op_e6e8_0_comp_nf, 0x00000002, 59112 }, /* RORW */ +{ op_e6f0_0_comp_nf, 0x00000002, 59120 }, /* RORW */ +{ op_e6f8_0_comp_nf, 0x00000002, 59128 }, /* RORW */ +{ op_e6f9_0_comp_nf, 0x00000002, 59129 }, /* RORW */ +{ op_e7d0_0_comp_nf, 0x00000000, 59344 }, /* ROLW */ +{ op_e7d8_0_comp_nf, 0x00000000, 59352 }, /* ROLW */ +{ op_e7e0_0_comp_nf, 0x00000000, 59360 }, /* ROLW */ +{ op_e7e8_0_comp_nf, 0x00000002, 59368 }, /* ROLW */ +{ op_e7f0_0_comp_nf, 0x00000002, 59376 }, /* ROLW */ +{ op_e7f8_0_comp_nf, 0x00000002, 59384 }, /* ROLW */ +{ op_e7f9_0_comp_nf, 0x00000002, 59385 }, /* ROLW */ { NULL, 0x00000000, 59584 }, /* BFTST */ { NULL, 0x00000000, 59600 }, /* BFTST */ { NULL, 0x00000000, 59624 }, /* BFTST */ @@ -3695,43 +3665,37 @@ extern const struct comptbl op_smalltbl_0_comp_nf[] = { { NULL, 0x00000000, 61424 }, /* BFINS */ { NULL, 0x00000000, 61432 }, /* BFINS */ { NULL, 0x00000000, 61433 }, /* BFINS */ -{ NULL, 0x00000001, 61440 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61448 }, /* MMUOP030 */ { NULL, 0x00000001, 61456 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61464 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61472 }, /* MMUOP030 */ { NULL, 0x00000001, 61480 }, /* MMUOP030 */ { NULL, 0x00000001, 61488 }, /* MMUOP030 */ { NULL, 0x00000001, 61496 }, /* MMUOP030 */ { NULL, 0x00000001, 61497 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61498 }, /* MMUOP030 */ -{ NULL, 0x00000001, 61499 }, /* MMUOP030 */ -{ NULL, 0x00000020, 61952 }, /* FPP */ -{ NULL, 0x00000020, 61960 }, /* FPP */ -{ NULL, 0x00000020, 61968 }, /* FPP */ -{ NULL, 0x00000020, 61976 }, /* FPP */ -{ NULL, 0x00000020, 61984 }, /* FPP */ -{ NULL, 0x00000020, 61992 }, /* FPP */ -{ NULL, 0x00000020, 62000 }, /* FPP */ -{ NULL, 0x00000020, 62008 }, /* FPP */ -{ NULL, 0x00000020, 62009 }, /* FPP */ -{ NULL, 0x00000020, 62010 }, /* FPP */ -{ NULL, 0x00000020, 62011 }, /* FPP */ -{ NULL, 0x00000020, 62012 }, /* FPP */ -{ NULL, 0x00000020, 62016 }, /* FScc */ +{ NULL, 0x00000022, 61952 }, /* FPP */ +{ NULL, 0x00000022, 61960 }, /* FPP */ +{ NULL, 0x00000022, 61968 }, /* FPP */ +{ NULL, 0x00000022, 61976 }, /* FPP */ +{ NULL, 0x00000022, 61984 }, /* FPP */ +{ NULL, 0x00000022, 61992 }, /* FPP */ +{ NULL, 0x00000022, 62000 }, /* FPP */ +{ NULL, 0x00000022, 62008 }, /* FPP */ +{ NULL, 0x00000022, 62009 }, /* FPP */ +{ NULL, 0x00000022, 62010 }, /* FPP */ +{ NULL, 0x00000022, 62011 }, /* FPP */ +{ NULL, 0x00000022, 62012 }, /* FPP */ +{ NULL, 0x00000006, 62016 }, /* FScc */ { NULL, 0x00000021, 62024 }, /* FDBcc */ -{ NULL, 0x00000020, 62032 }, /* FScc */ -{ NULL, 0x00000020, 62040 }, /* FScc */ -{ NULL, 0x00000020, 62048 }, /* FScc */ -{ NULL, 0x00000020, 62056 }, /* FScc */ -{ NULL, 0x00000020, 62064 }, /* FScc */ -{ NULL, 0x00000020, 62072 }, /* FScc */ -{ NULL, 0x00000020, 62073 }, /* FScc */ +{ NULL, 0x00000006, 62032 }, /* FScc */ +{ NULL, 0x00000006, 62040 }, /* FScc */ +{ NULL, 0x00000006, 62048 }, /* FScc */ +{ NULL, 0x00000006, 62056 }, /* FScc */ +{ NULL, 0x00000006, 62064 }, /* FScc */ +{ NULL, 0x00000006, 62072 }, /* FScc */ +{ NULL, 0x00000006, 62073 }, /* FScc */ { NULL, 0x00000021, 62074 }, /* FTRAPcc */ { NULL, 0x00000021, 62075 }, /* FTRAPcc */ { NULL, 0x00000021, 62076 }, /* FTRAPcc */ -{ NULL, 0x00000021, 62080 }, /* FBcc */ -{ NULL, 0x00000021, 62144 }, /* FBcc */ +{ NULL, 0x00000005, 62080 }, /* FBcc */ +{ NULL, 0x00000005, 62144 }, /* FBcc */ { NULL, 0x00000020, 62224 }, /* FSAVE */ { NULL, 0x00000020, 62240 }, /* FSAVE */ { NULL, 0x00000020, 62248 }, /* FSAVE */ diff --git a/src/jit/comptbl.h b/src/jit/comptbl.h index 64da6c8f..b3e927bd 100644 --- a/src/jit/comptbl.h +++ b/src/jit/comptbl.h @@ -1,3 +1,9 @@ +#ifdef NOFLAGS_SUPPORT +/* 68040 */ +extern const struct comptbl op_smalltbl_0_nf[]; +#endif +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; @@ -6,6 +12,7 @@ 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_3c_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; @@ -41,8 +48,6 @@ 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_17a_0_comp_ff; -extern compop_func op_17b_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; @@ -51,8 +56,6 @@ 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_1ba_0_comp_ff; -extern compop_func op_1bb_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; @@ -61,8 +64,6 @@ 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_1fa_0_comp_ff; -extern compop_func op_1fb_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; @@ -71,6 +72,7 @@ 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_23c_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; @@ -154,8 +156,6 @@ 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_87a_0_comp_ff; -extern compop_func op_87b_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; @@ -164,8 +164,6 @@ 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_8ba_0_comp_ff; -extern compop_func op_8bb_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; @@ -174,8 +172,6 @@ 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_8fa_0_comp_ff; -extern compop_func op_8fb_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; @@ -184,6 +180,7 @@ 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_a3c_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; @@ -696,6 +693,17 @@ 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_4c00_0_comp_ff; +extern compop_func op_4c10_0_comp_ff; +extern compop_func op_4c18_0_comp_ff; +extern compop_func op_4c20_0_comp_ff; +extern compop_func op_4c28_0_comp_ff; +extern compop_func op_4c30_0_comp_ff; +extern compop_func op_4c38_0_comp_ff; +extern compop_func op_4c39_0_comp_ff; +extern compop_func op_4c3a_0_comp_ff; +extern compop_func op_4c3b_0_comp_ff; +extern compop_func op_4c3c_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; @@ -855,6 +863,24 @@ 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_58c0_0_comp_ff; +extern compop_func op_58c8_0_comp_ff; +extern compop_func op_58d0_0_comp_ff; +extern compop_func op_58d8_0_comp_ff; +extern compop_func op_58e0_0_comp_ff; +extern compop_func op_58e8_0_comp_ff; +extern compop_func op_58f0_0_comp_ff; +extern compop_func op_58f8_0_comp_ff; +extern compop_func op_58f9_0_comp_ff; +extern compop_func op_59c0_0_comp_ff; +extern compop_func op_59c8_0_comp_ff; +extern compop_func op_59d0_0_comp_ff; +extern compop_func op_59d8_0_comp_ff; +extern compop_func op_59e0_0_comp_ff; +extern compop_func op_59e8_0_comp_ff; +extern compop_func op_59f0_0_comp_ff; +extern compop_func op_59f8_0_comp_ff; +extern compop_func op_59f9_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; @@ -914,6 +940,7 @@ 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; @@ -1360,6 +1387,13 @@ 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_e0d0_0_comp_ff; +extern compop_func op_e0d8_0_comp_ff; +extern compop_func op_e0e0_0_comp_ff; +extern compop_func op_e0e8_0_comp_ff; +extern compop_func op_e0f0_0_comp_ff; +extern compop_func op_e0f8_0_comp_ff; +extern compop_func op_e0f9_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; @@ -1378,6 +1412,41 @@ 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_e1d0_0_comp_ff; +extern compop_func op_e1d8_0_comp_ff; +extern compop_func op_e1e0_0_comp_ff; +extern compop_func op_e1e8_0_comp_ff; +extern compop_func op_e1f0_0_comp_ff; +extern compop_func op_e1f8_0_comp_ff; +extern compop_func op_e1f9_0_comp_ff; +extern compop_func op_e2d0_0_comp_ff; +extern compop_func op_e2d8_0_comp_ff; +extern compop_func op_e2e0_0_comp_ff; +extern compop_func op_e2e8_0_comp_ff; +extern compop_func op_e2f0_0_comp_ff; +extern compop_func op_e2f8_0_comp_ff; +extern compop_func op_e2f9_0_comp_ff; +extern compop_func op_e3d0_0_comp_ff; +extern compop_func op_e3d8_0_comp_ff; +extern compop_func op_e3e0_0_comp_ff; +extern compop_func op_e3e8_0_comp_ff; +extern compop_func op_e3f0_0_comp_ff; +extern compop_func op_e3f8_0_comp_ff; +extern compop_func op_e3f9_0_comp_ff; +extern compop_func op_e6d0_0_comp_ff; +extern compop_func op_e6d8_0_comp_ff; +extern compop_func op_e6e0_0_comp_ff; +extern compop_func op_e6e8_0_comp_ff; +extern compop_func op_e6f0_0_comp_ff; +extern compop_func op_e6f8_0_comp_ff; +extern compop_func op_e6f9_0_comp_ff; +extern compop_func op_e7d0_0_comp_ff; +extern compop_func op_e7d8_0_comp_ff; +extern compop_func op_e7e0_0_comp_ff; +extern compop_func op_e7e8_0_comp_ff; +extern compop_func op_e7f0_0_comp_ff; +extern compop_func op_e7f8_0_comp_ff; +extern compop_func op_e7f9_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; @@ -1391,6 +1460,7 @@ 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_3c_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; @@ -1426,8 +1496,6 @@ 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_17a_0_comp_nf; -extern compop_func op_17b_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; @@ -1436,8 +1504,6 @@ 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_1ba_0_comp_nf; -extern compop_func op_1bb_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; @@ -1446,8 +1512,6 @@ 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_1fa_0_comp_nf; -extern compop_func op_1fb_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; @@ -1456,6 +1520,7 @@ 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_23c_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; @@ -1539,8 +1604,6 @@ 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_87a_0_comp_nf; -extern compop_func op_87b_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; @@ -1549,8 +1612,6 @@ 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_8ba_0_comp_nf; -extern compop_func op_8bb_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; @@ -1559,8 +1620,6 @@ 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_8fa_0_comp_nf; -extern compop_func op_8fb_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; @@ -1569,6 +1628,7 @@ 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_a3c_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; @@ -2251,6 +2311,24 @@ 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_58c0_0_comp_nf; +extern compop_func op_58c8_0_comp_nf; +extern compop_func op_58d0_0_comp_nf; +extern compop_func op_58d8_0_comp_nf; +extern compop_func op_58e0_0_comp_nf; +extern compop_func op_58e8_0_comp_nf; +extern compop_func op_58f0_0_comp_nf; +extern compop_func op_58f8_0_comp_nf; +extern compop_func op_58f9_0_comp_nf; +extern compop_func op_59c0_0_comp_nf; +extern compop_func op_59c8_0_comp_nf; +extern compop_func op_59d0_0_comp_nf; +extern compop_func op_59d8_0_comp_nf; +extern compop_func op_59e0_0_comp_nf; +extern compop_func op_59e8_0_comp_nf; +extern compop_func op_59f0_0_comp_nf; +extern compop_func op_59f8_0_comp_nf; +extern compop_func op_59f9_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; @@ -2310,6 +2388,7 @@ 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; @@ -2756,6 +2835,13 @@ 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_e0d0_0_comp_nf; +extern compop_func op_e0d8_0_comp_nf; +extern compop_func op_e0e0_0_comp_nf; +extern compop_func op_e0e8_0_comp_nf; +extern compop_func op_e0f0_0_comp_nf; +extern compop_func op_e0f8_0_comp_nf; +extern compop_func op_e0f9_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; @@ -2774,6 +2860,41 @@ 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_e1d0_0_comp_nf; +extern compop_func op_e1d8_0_comp_nf; +extern compop_func op_e1e0_0_comp_nf; +extern compop_func op_e1e8_0_comp_nf; +extern compop_func op_e1f0_0_comp_nf; +extern compop_func op_e1f8_0_comp_nf; +extern compop_func op_e1f9_0_comp_nf; +extern compop_func op_e2d0_0_comp_nf; +extern compop_func op_e2d8_0_comp_nf; +extern compop_func op_e2e0_0_comp_nf; +extern compop_func op_e2e8_0_comp_nf; +extern compop_func op_e2f0_0_comp_nf; +extern compop_func op_e2f8_0_comp_nf; +extern compop_func op_e2f9_0_comp_nf; +extern compop_func op_e3d0_0_comp_nf; +extern compop_func op_e3d8_0_comp_nf; +extern compop_func op_e3e0_0_comp_nf; +extern compop_func op_e3e8_0_comp_nf; +extern compop_func op_e3f0_0_comp_nf; +extern compop_func op_e3f8_0_comp_nf; +extern compop_func op_e3f9_0_comp_nf; +extern compop_func op_e6d0_0_comp_nf; +extern compop_func op_e6d8_0_comp_nf; +extern compop_func op_e6e0_0_comp_nf; +extern compop_func op_e6e8_0_comp_nf; +extern compop_func op_e6f0_0_comp_nf; +extern compop_func op_e6f8_0_comp_nf; +extern compop_func op_e6f9_0_comp_nf; +extern compop_func op_e7d0_0_comp_nf; +extern compop_func op_e7d8_0_comp_nf; +extern compop_func op_e7e0_0_comp_nf; +extern compop_func op_e7e8_0_comp_nf; +extern compop_func op_e7f0_0_comp_nf; +extern compop_func op_e7f8_0_comp_nf; +extern compop_func op_e7f9_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; diff --git a/src/jit/gencomp.cpp b/src/jit/gencomp.cpp deleted file mode 100644 index d874f6c6..00000000 --- a/src/jit/gencomp.cpp +++ /dev/null @@ -1,3133 +0,0 @@ -/* - * 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 - */ - -#include "sysconfig.h" -#include "sysdeps.h" -#include - -#include "readcpu.h" - -#include -#include - -#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 - -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 char endstr[1000]; -static char lines[100000]; -static int comp_index=0; - -#include "flags_x86.h" - -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 void comprintf(const char* format, ...) -{ - va_list args; - - va_start(args,format); - comp_index+=vsprintf(lines+comp_index,format,args); -} - -static void com_discard(void) -{ - comp_index=0; -} - -static void com_flush(void) -{ - int i; - for (i=0;i 0); - n_braces--; - comprintf ("}"); -} - -static void -finish_braces (void) -{ - while (n_braces > 0) - close_brace (); -} - -static void -pop_braces (int to) -{ - while (n_braces > to) - close_brace (); -} - -static int -bit_size (int size) -{ - switch (size) - { - case sz_byte: - return 8; - case sz_word: - return 16; - case sz_long: - return 32; - default: - abort (); - } - return 0; -} - -static const char * -bit_mask (int size) -{ - switch (size) - { - case sz_byte: - return "0xff"; - case sz_word: - return "0xffff"; - case sz_long: - return "0xffffffff"; - default: - abort (); - } - return 0; -} - -static __inline__ void gen_update_next_handler(void) -{ - return; /* Can anything clever be done here? */ -} - -static void gen_writebyte(char* address, char* source) -{ - comprintf("\twritebyte(%s,%s,scratchie);\n",address,source); -} - -static void gen_writeword(char* address, char* source) -{ - comprintf("\twriteword(%s,%s,scratchie);\n",address,source); -} - -static void gen_writelong(char* address, char* source) -{ - comprintf("\twritelong(%s,%s,scratchie);\n",address,source); -} - -static void gen_readbyte(char* address, char* dest) -{ - comprintf("\treadbyte(%s,%s,scratchie);\n",address,dest); -} - -static void gen_readword(char* address, char* dest) -{ - comprintf("\treadword(%s,%s,scratchie);\n",address,dest); -} - -static void gen_readlong(char* address, 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) -{ - comprintf("#ifdef HAVE_GET_WORD_UNSWAPPED\n"); - comprintf("\topcode = do_byteswap_16(opcode);\n"); - comprintf("#endif\n"); -} - -static void -sync_m68k_pc (void) -{ - comprintf("\t if (m68k_pc_offset>100) sync_m68k_pc();\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, char *reg, wordsizes size, char *name, int getv, int movem) -{ - start_brace (); - switch (mode) - { - case Dreg: /* Do we need to check dodgy here? */ - if (movem) - abort (); - if (getv == 1 || getv==2) { - /* 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: - if (movem) - abort (); - if (getv == 1 || getv==2) { - /* see above */ - comprintf ("\tint %s=dodgy?scratchie++:%s+8;\n",name,reg); - if (getv==1) { - comprintf ("\tif (dodgy) \n"); - comprintf ("\t\tmov_l_rr(%s,%s+8);\n",name, reg); - } - } - 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); - break; - case Aipi: - comprintf ("\tint %sa=scratchie++;\n",name,reg); - comprintf ("\tmov_l_rr(%sa,%s+8);\n",name, reg); - break; - case Apdi: - switch (size) - { - case sz_byte: - if (movem) { - comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); - comprintf ("\tif (dodgy) \n"); - comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - 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("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - break; - case sz_word: - if (movem) { - comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); - comprintf ("\tif (dodgy) \n"); - comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - 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("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - break; - case sz_long: - if (movem) { - comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); - comprintf ("\tif (dodgy) \n"); - comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - 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("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - break; - default: - abort (); - } - 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=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=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: - if (getv != 1) - abort (); - 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: - abort (); - } - return; - case imm0: - if (getv != 1) - abort (); - comprintf ("\tint %s = scratchie++;\n",name); - comprintf ("\tmov_l_ri(%s,(uae_s32)(uae_s8)%s);\n", name, gen_nextibyte ()); - return; - case imm1: - if (getv != 1) - abort (); - comprintf ("\tint %s = scratchie++;\n",name); - comprintf ("\tmov_l_ri(%s,(uae_s32)(uae_s16)%s);\n", name, gen_nextiword ()); - return; - case imm2: - if (getv != 1) - abort (); - comprintf ("\tint %s = scratchie++;\n",name); - comprintf ("\tmov_l_ri(%s,%s);\n", name, gen_nextilong ()); - return; - case immi: - if (getv != 1) - abort (); - comprintf ("\tint %s = scratchie++;\n",name); - comprintf ("\tmov_l_ri(%s,%s);\n", name, reg); - return; - default: - abort (); - } - - /* We get here for all non-reg non-immediate addressing modes to - * actually fetch the value. */ - if (getv == 1) - { - 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: - abort (); - } - 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: - abort (); - } - } - - /* We now might have to fix up the register for pre-dec or post-inc - * addressing modes. */ - if (!movem) { - 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,reg); - break; - case sz_long: - comprintf("\tlea_l_brr(%s+8,%s+8,4);\n",reg,reg); - break; - default: - abort (); - } - break; - case Apdi: - break; - default: - break; - } - } -} - -static void -genastore (char *from, amodes mode, char *reg, wordsizes size, 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); - break; - case sz_word: - comprintf("\tif(%s!=%s)\n",reg,from); - comprintf ("\t\tmov_w_rr(%s,%s);\n", reg, from); - break; - case sz_long: - comprintf("\tif(%s!=%s)\n",reg,from); - comprintf ("\t\tmov_l_rr(%s,%s);\n", reg, from); - break; - default: - abort (); - } - 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); - break; - case sz_long: - comprintf("\tif(%s+8!=%s)\n",reg,from); - comprintf ("\t\tmov_l_rr(%s+8,%s);\n", reg, from); - break; - default: - abort (); - } - 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: - abort (); - } - } - break; - case imm: - case imm0: - case imm1: - case imm2: - case immi: - abort (); - break; - default: - abort (); - } -} - -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", 0, 2); - genamode (curi->dmode, "dstreg", curi->size, "dst", 0, 2); - 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("\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"); - - comprintf("\tif (special_mem) {\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"); - comprintf("\t\tint tmp=scratchie;\n"); - comprintf("\tscratchie+=4;\n"); - comprintf("\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);\t}\n"); - -} - -static void -genmovemel (uae_u16 opcode) -{ - comprintf ("\tuae_u16 mask = %s;\n", gen_nextiword ()); - comprintf ("\tint native=scratchie++;\n"); - comprintf ("\tint i;\n"); - comprintf ("\tint offset=0;\n"); - genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1); - comprintf("\tif (1 && !special_mem) {\n"); - - /* 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: abort(); - } - comprintf("\t\t}\n" - "\t}"); - if (table68k[opcode].dmode == Aipi) { - comprintf("\t\t\tlea_l_brr(8+dstreg,srca,offset);\n"); - } - /* End fast but unsafe. */ - - comprintf("\t} else {\n"); - - comprintf ("\tint tmp=scratchie++;\n"); - - comprintf("\tmov_l_rr(tmp,srca);\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\treadlong(tmp,i,scratchie);\n" - "\t\t\tadd_l_ri(tmp,4);\n"); - break; - case sz_word: - comprintf("\t\t\treadword(tmp,i,scratchie);\n" - "\t\t\tadd_l_ri(tmp,2);\n"); - break; - default: abort(); - } - - comprintf("\t\t}\n" - "\t}"); - if (table68k[opcode].dmode == Aipi) { - comprintf("\t\t\tmov_l_rr(8+dstreg,tmp);\n"); - } - comprintf("\t}\n"); - -} - - -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", 2, 1); - - /* *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 ;-) */ - comprintf("\tif (1 && !special_mem) {\n"); - comprintf("\tget_n_addr(srca,native,scratchie);\n"); - - if (table68k[opcode].dmode!=Apdi) { - 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(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: abort(); - } - } else { /* Pre-decrement */ - comprintf("\tfor (i=0;i<16;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: abort(); - } - } - - comprintf("\t\t}\n" - "\t}"); - if (table68k[opcode].dmode == Apdi) { - comprintf("\t\t\tlea_l_brr(8+dstreg,srca,(uae_s32)offset);\n"); - } - comprintf("\t} else {\n"); - - if (table68k[opcode].dmode!=Apdi) { - comprintf("\tmov_l_rr(tmp,srca);\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\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: abort(); - } - } - else { /* Pre-decrement */ - comprintf("\tfor (i=0;i<16;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: abort(); - } - } - - - comprintf("\t\t}\n" - "\t}"); - if (table68k[opcode].dmode == Apdi) { - comprintf("\t\t\tmov_l_rr(8+dstreg,srca);\n"); - } - comprintf("\t}\n"); -} - - -static void -duplicate_carry (void) -{ - comprintf ("\tif (needed_flags&FLAG_X) duplicate_carry();\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, char *value, char *src, 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"); - { - char* op; - switch(type) { - case flag_add: op="add"; break; - case flag_sub: op="sub"; break; - default: abort(); - } - 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(); - { - char* op; - switch(type) { - case flag_or: op="or"; break; - case flag_eor: op="xor"; break; - default: abort(); - } - 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"); - { - char* op; - switch(type) { - case flag_addx: op="adc"; break; - case flag_subx: op="sbb"; break; - default: abort(); - } - 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; - - case flag_and: - case flag_or: - case flag_eor: - comprintf("\tdont_care_flags();\n"); - start_brace(); - { - char* op; - switch(type) { - case flag_and: op="and"; break; - case flag_or: op="or"; break; - case flag_eor: op="xor"; break; - default: abort(); - } - 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"); - { - char* op; - switch(type) { - case flag_add: op="add"; break; - case flag_sub: op="sub"; break; - case flag_cmp: op="cmp"; break; - default: abort(); - } - 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"); - { - char* op; - switch(type) { - case flag_addx: op="adc"; break; - case flag_subx: op="sbb"; break; - default: abort(); - } - 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" - "\tcmov_l_rr(zero,one,%d);\n" - "\tsetzflg_l(zero);\n" - "\tlive_flags();\n" - "\t}\n",NATIVE_CC_NE); - comprintf("\tend_needflags();\n"); - duplicate_carry(); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - return; - } - default: - failure; - break; - } -} - -static void -force_range_for_rox (const char *var, wordsizes size) -{ - /* Could do a modulo operation here... which one is faster? */ - switch (size) - { - case sz_long: - comprintf ("\tif (%s >= 33) %s -= 33;\n", var, var); - break; - case sz_word: - comprintf ("\tif (%s >= 34) %s -= 34;\n", var, var); - comprintf ("\tif (%s >= 17) %s -= 17;\n", var, var); - break; - case sz_byte: - comprintf ("\tif (%s >= 36) %s -= 36;\n", var, var); - comprintf ("\tif (%s >= 18) %s -= 18;\n", var, var); - comprintf ("\tif (%s >= 9) %s -= 9;\n", var, var); - break; - } -} - -static const char * -cmask (wordsizes size) -{ - switch (size) - { - case sz_byte: - return "0x80"; - case sz_word: - return "0x8000"; - case sz_long: - return "0x80000000"; - default: - abort (); - } -} - -static int -source_is_imm1_8 (struct instr *i) -{ - return i->stype == 3; -} - -static int /* returns zero for success, non-zero for failure */ -gen_opcode (unsigned long int opcode) -{ - struct instr *curi = table68k + opcode; - 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_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: abort(); - } - - switch (curi->mnemo) - { - case i_OR: - case i_AND: - case i_EOR: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - genflags (flag_sub, curi->size, "", "src", "dst"); - genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - case i_SUBA: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); - 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: abort(); - } - comprintf("\tsub_l(dst,tmp);\n"); - genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - case i_SUBX: - isaddx; - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - genflags (flag_add, curi->size, "", "src", "dst"); - genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - case i_ADDA: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); - 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: abort(); - } - comprintf("\tadd_l(dst,tmp);\n"); - genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - case i_ADDX: - isaddx; - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 2, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genflags (flag_logical, curi->size, "src", "", ""); - break; - case i_BCHG: - case i_BCLR: - case i_BSET: - case i_BTST: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - start_brace(); - comprintf("\tint s=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"); - - { - 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; - } - 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" - "\tsetzflg_l(s);\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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - start_brace (); - genflags (flag_cmp, curi->size, "", "src", "dst"); - break; - case i_CMPA: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); - 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: abort(); - } - 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: - switch(curi->dmode) { - case Dreg: - case Areg: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); - 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", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); - genflags (flag_logical, curi->size, "src", "", ""); - genastore ("src", curi->dmode, "dstreg", curi->size, "dst"); - break; - } - break; - case i_MOVEA: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); - - 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: abort(); - } - genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - - case i_MVSR2: - isjump; - failure; - break; - case i_MV2SR: - isjump; - failure; - break; - case i_SWAP: - genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - 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: - genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); - 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: - abort (); - } - 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: - genmovemel (opcode); - break; - case i_MVMLE: - genmovemle (opcode); - break; - case i_TRAP: - isjump; - 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: - genamode (curi->smode, "srcreg", curi->size, "offs", 1, 0); - /* offs is constant */ - comprintf("\tadd_l_ri(offs,4);\n"); - start_brace(); - comprintf("\tint newad=scratchie++;\n" - "\treadlong(15,newad,scratchie);\n" - "\tand_l_ri(newad,~1);\n" - "\tmov_l_mr((uintptr)®s.pc,newad);\n" - "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n" - "\tadd_l(15,offs);\n"); - gen_update_next_handler(); - isjump; - break; - case i_LINK: - genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0); - comprintf("\tsub_l_ri(15,4);\n" - "\twritelong_clobber(15,src,scratchie);\n" - "\tmov_l_rr(src,15);\n"); - if (curi->size==sz_word) - comprintf("\tsign_extend_16_rr(offs,offs);\n"); - comprintf("\tadd_l(15,offs);\n"); - genastore ("src", curi->smode, "srcreg", sz_long, "src"); - break; - case i_UNLK: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - comprintf("\tmov_l_rr(15,src);\n" - "\treadlong(15,src,scratchie);\n" - "\tadd_l_ri(15,4);\n"); - genastore ("src", curi->smode, "srcreg", curi->size, "src"); - break; - case i_RTS: - comprintf("\tint newad=scratchie++;\n" - "\treadlong(15,newad,scratchie);\n" - "\tand_l_ri(newad,~1);\n" - "\tmov_l_mr((uintptr)®s.pc,newad);\n" - "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n" - "\tlea_l_brr(15,15,4);\n"); - gen_update_next_handler(); - isjump; - break; - case i_TRAPV: - isjump; - failure; - break; - case i_RTR: - isjump; - failure; - break; - case i_JSR: - isjump; - genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); - start_brace(); - 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" - "\tsub_l_ri(15,4);\n" - "\twritelong_clobber(15,ret,scratchie);\n"); - comprintf("\tand_l_ri(srca,~1);\n" - "\tmov_l_mr((uintptr)®s.pc,srca);\n" - "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n"); - gen_update_next_handler(); - break; - case i_JMP: - isjump; - genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); - comprintf("\tand_l_ri(srca,~1);\n" - "\tmov_l_mr((uintptr)®s.pc,srca);\n" - "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n"); - gen_update_next_handler(); - break; - case i_BSR: - if (curi->size==sz_long) - failure; - is_const_jump; - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - comprintf("\tand_l_ri(src,~1);\n"); - start_brace(); - 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" - "\tsub_l_ri(15,4);\n" - "\twritelong_clobber(15,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*)get_const(PC_P);\n"); - break; - case i_Bcc: - comprintf("\tuae_u32 v1,v2;\n"); - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - /* 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: break; - } - comprintf("\tand_l_ri(src,~1);\n"); - 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,(uintptr)comp_pc_p);\n"); - comprintf("\tmov_l_ri(PC_P,(uintptr)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("\tv1=get_const(PC_P);\n" - "\tv2=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*)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: abort(); - } - break; - case i_LEA: - genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); - genastore ("srca", curi->dmode, "dstreg", curi->size, "dst"); - break; - case i_PEA: - 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", 0, 0); - genamode (Apdi, "7", sz_long, "dst", 2, 0); - genastore ("srca", Apdi, "7", sz_long, "dst"); - break; - case i_DBcc: - isjump; - uses_cmov; - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0); - - /* 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: abort(); /* 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,(uintptr)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 */ - } - - if (curi->size!=sz_word) - abort(); - - - 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("\t end_needflags();\n"); - start_brace(); - comprintf("\tuae_u32 v2;\n" - "\tuae_u32 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("\t start_needflags();\n"); - comprintf("\ttest_w_rr(nsrc,nsrc);\n"); - comprintf("\t end_needflags();\n"); - comprintf("\tcmov_l_rr(PC_P,offs,%d);\n", NATIVE_CC_NE); - break; - default: abort(); - } - genastore ("src", curi->smode, "srcreg", curi->size, "src"); - gen_update_next_handler(); - break; - - case i_Scc: - genamode (curi->smode, "srcreg", curi->size, "src", 2, 0); - 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: abort(); - } - 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: - comprintf("\tdont_care_flags();\n"); - genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0); - /* 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: - comprintf("\tdont_care_flags();\n"); - genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0); - 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: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\n" - "} \n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - if (curi->smode!=immi) { - if (!noflags) { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint width;\n" - "\tint cdata=scratchie++;\n" - "\tint tmpcnt=scratchie++;\n" - "\tint highshift=scratchie++;\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n" - "\tand_l_ri(tmpcnt,63);\n" - "\tmov_l_ri(cdata,0);\n" - "\tcmov_l_rr(cdata,data,%d);\n", NATIVE_CC_NE); - /* cdata is now either data (for shift count!=0) or - 0 (for shift count==0) */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,cnt);\n" - "\thighmask=0x38;\n" - "\twidth=8;\n"); - break; - case sz_word: comprintf("\tshra_w_rr(data,cnt);\n" - "\thighmask=0x30;\n" - "\twidth=16;\n"); - break; - case sz_long: comprintf("\tshra_l_rr(data,cnt);\n" - "\thighmask=0x20;\n" - "\twidth=32;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(highshift,0);\n" - "mov_l_ri(scratchie,width/2);\n" - "cmov_l_rr(highshift,scratchie,%d);\n", NATIVE_CC_NE); - /* The x86 masks out bits, so we now make sure that things - really get shifted as much as planned */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; - case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; - case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; - default: abort(); - } - /* And again */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; - case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; - case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; - default: abort(); - } - - /* Result of shift is now in data. Now we need to determine - the carry by shifting cdata one less */ - comprintf("\tsub_l_ri(tmpcnt,1);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(cdata,tmpcnt);\n");break; - case sz_word: comprintf("\tshra_w_rr(cdata,tmpcnt);\n");break; - case sz_long: comprintf("\tshra_l_rr(cdata,tmpcnt);\n");break; - default: abort(); - } - /* If the shift count was higher than the width, we need - to pick up the sign from data */ - comprintf("test_l_ri(tmpcnt,highmask);\n" - "cmov_l_rr(cdata,data,%d);\n", NATIVE_CC_NE); - /* And create the flags */ - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(cdata,0);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - else { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint width;\n" - "\tint highshift=scratchie++;\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,cnt);\n" - "\thighmask=0x38;\n" - "\twidth=8;\n"); - break; - case sz_word: comprintf("\tshra_w_rr(data,cnt);\n" - "\thighmask=0x30;\n" - "\twidth=16;\n"); - break; - case sz_long: comprintf("\tshra_l_rr(data,cnt);\n" - "\thighmask=0x20;\n" - "\twidth=32;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(highshift,0);\n" - "mov_l_ri(scratchie,width/2);\n" - "cmov_l_rr(highshift,scratchie,%d);\n",NATIVE_CC_NE); - /* The x86 masks out bits, so we now make sure that things - really get shifted as much as planned */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; - case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; - case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; - default: abort(); - } - /* And again */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; - case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; - case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; - default: abort(); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - } - else { - start_brace(); - comprintf("\tint tmp=scratchie++;\n" - "\tint bp;\n" - "\tmov_l_rr(tmp,data);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - case sz_word: comprintf("\tshra_w_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - case sz_long: comprintf("\tshra_l_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - default: abort(); - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - break; - - case i_ASL: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\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 0;\n" - "} \n"); - - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - if (curi->smode!=immi) { - if (!noflags) { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint cdata=scratchie++;\n" - "\tint tmpcnt=scratchie++;\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n" - "\tand_l_ri(tmpcnt,63);\n" - "\tmov_l_ri(cdata,0);\n" - "\tcmov_l_rr(cdata,data,%d);\n",NATIVE_CC_NE); - /* cdata is now either data (for shift count!=0) or - 0 (for shift count==0) */ - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - /* Result of shift is now in data. Now we need to determine - the carry by shifting cdata one less */ - comprintf("\tsub_l_ri(tmpcnt,1);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(cdata,tmpcnt);\n");break; - case sz_word: comprintf("\tshll_w_rr(cdata,tmpcnt);\n");break; - case sz_long: comprintf("\tshll_l_rr(cdata,tmpcnt);\n");break; - default: abort(); - } - comprintf("test_l_ri(tmpcnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(cdata,scratchie,%d);\n",NATIVE_CC_NE); - /* And create the flags */ - comprintf("\tstart_needflags();\n"); - - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,7);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,15);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,31);\n"); break; - } - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - else { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - } - else { - start_brace(); - comprintf("\tint tmp=scratchie++;\n" - "\tint bp;\n" - "\tmov_l_rr(tmp,data);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n" - "\tbp=8-srcreg;\n"); break; - case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n" - "\tbp=16-srcreg;\n"); break; - case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n" - "\tbp=32-srcreg;\n"); break; - default: abort(); - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - break; - - case i_LSR: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\n" - "} \n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - if (curi->smode!=immi) { - if (!noflags) { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint cdata=scratchie++;\n" - "\tint tmpcnt=scratchie++;\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n" - "\tand_l_ri(tmpcnt,63);\n" - "\tmov_l_ri(cdata,0);\n" - "\tcmov_l_rr(cdata,data,%d);\n",NATIVE_CC_NE); - /* cdata is now either data (for shift count!=0) or - 0 (for shift count==0) */ - switch(curi->size) { - case sz_byte: comprintf("\tshrl_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshrl_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshrl_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - /* Result of shift is now in data. Now we need to determine - the carry by shifting cdata one less */ - comprintf("\tsub_l_ri(tmpcnt,1);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshrl_b_rr(cdata,tmpcnt);\n");break; - case sz_word: comprintf("\tshrl_w_rr(cdata,tmpcnt);\n");break; - case sz_long: comprintf("\tshrl_l_rr(cdata,tmpcnt);\n");break; - default: abort(); - } - comprintf("test_l_ri(tmpcnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(cdata,scratchie,%d);\n",NATIVE_CC_NE); - /* And create the flags */ - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(cdata,0);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - else { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshrl_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshrl_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshrl_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - } - else { - start_brace(); - comprintf("\tint tmp=scratchie++;\n" - "\tint bp;\n" - "\tmov_l_rr(tmp,data);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshrl_b_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - case sz_word: comprintf("\tshrl_w_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - case sz_long: comprintf("\tshrl_l_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - default: abort(); - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - break; - - case i_LSL: - comprintf("\tdont_care_flags();\n"); - - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - if (curi->smode!=immi) { - if (!noflags) { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint cdata=scratchie++;\n" - "\tint tmpcnt=scratchie++;\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n" - "\tand_l_ri(tmpcnt,63);\n" - "\tmov_l_ri(cdata,0);\n" - "\tcmov_l_rr(cdata,data,%d);\n",NATIVE_CC_NE); - /* cdata is now either data (for shift count!=0) or - 0 (for shift count==0) */ - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - /* Result of shift is now in data. Now we need to determine - the carry by shifting cdata one less */ - comprintf("\tsub_l_ri(tmpcnt,1);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(cdata,tmpcnt);\n");break; - case sz_word: comprintf("\tshll_w_rr(cdata,tmpcnt);\n");break; - case sz_long: comprintf("\tshll_l_rr(cdata,tmpcnt);\n");break; - default: abort(); - } - comprintf("test_l_ri(tmpcnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(cdata,scratchie,%d);\n",NATIVE_CC_NE); - /* And create the flags */ - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,7);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,15);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,31);\n"); break; - } - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - else { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - } - else { - start_brace(); - comprintf("\tint tmp=scratchie++;\n" - "\tint bp;\n" - "\tmov_l_rr(tmp,data);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n" - "\tbp=8-srcreg;\n"); break; - case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n" - "\tbp=16-srcreg;\n"); break; - case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n" - "\tbp=32-srcreg;\n"); break; - default: abort(); - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - break; - - case i_ROL: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\n" - "} \n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - start_brace (); - - switch(curi->size) { - case sz_long: comprintf("\t rol_l_rr(data,cnt);\n"); break; - case sz_word: comprintf("\t rol_w_rr(data,cnt);\n"); break; - case sz_byte: comprintf("\t rol_b_rr(data,cnt);\n"); break; - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(data,0x00);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - break; - - case i_ROR: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\n" - "} \n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - start_brace (); - - switch(curi->size) { - case sz_long: comprintf("\t ror_l_rr(data,cnt);\n"); break; - case sz_word: comprintf("\t ror_w_rr(data,cnt);\n"); break; - case sz_byte: comprintf("\t ror_b_rr(data,cnt);\n"); break; - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - switch(curi->size) { - case sz_byte: comprintf("\t bt_l_ri(data,0x07);\n"); break; - case sz_word: comprintf("\t bt_l_ri(data,0x0f);\n"); break; - case sz_long: comprintf("\t bt_l_ri(data,0x1f);\n"); break; - } - comprintf("\t live_flags();\n"); - comprintf("\t end_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: - 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", 1, 0); - /* 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: - mayfail; - comprintf("\tuae_u16 extra=%s;\n",gen_nextiword()); - swap_opcode(); - comprintf("\tcomp_fpp_opp(opcode,extra);\n"); - break; - case i_FBcc: - isjump; - uses_cmov; - mayfail; - swap_opcode(); - comprintf("\tcomp_fbcc_opp(opcode);\n"); - break; - case i_FDBcc: - isjump; - failure; - break; - case i_FScc: - mayfail; - uses_cmov; - comprintf("\tuae_u16 extra=%s;\n",gen_nextiword()); - swap_opcode(); - comprintf("\tcomp_fscc_opp(opcode,extra);\n"); - break; - case i_FTRAPcc: - isjump; - failure; - break; - case i_FSAVE: - failure; - break; - case i_FRESTORE: - 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(0, 3);\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: - genmov16(opcode,curi); - break; - - 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: - isjump; - failure; - break; - default: - abort (); - break; - } - comprintf("%s",endstr); - finish_braces (); - sync_m68k_pc (); - if (global_mayfail) - comprintf("\tif (failure) m68k_pc_offset=m68k_pc_offset_thisinst;\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"); - fprintf (f, "#include \"options.h\"\n"); - fprintf (f, "#include \"memory.h\"\n"); - fprintf (f, "#include \"custom.h\"\n"); - fprintf (f, "#include \"events.h\"\n"); - fprintf (f, "#include \"newcpu.h\"\n"); - fprintf (f, "#include \"comptbl.h\"\n"); -} - -static int postfix; - -static void -generate_one_opcode (int rp, int noflags) -{ - int i; - uae_u16 smsk, dmsk; - long int opcode = opcode_map[rp]; - int aborted=0; - int have_srcreg=0; - int have_dstreg=0; - - 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; - - 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; - case 6: smsk = 255; break; - case 7: smsk = 3; break; - default: abort (); - } - 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; - - comprintf ("#ifdef HAVE_GET_WORD_UNSWAPPED\n"); - - 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; - - comprintf ("#ifdef HAVE_GET_WORD_UNSWAPPED\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"); - - if (pos) - comprintf ("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", - pos, dmsk); - else - comprintf ("\tuae_u32 dstreg = opcode & %d;\n", dmsk); - - comprintf ("#endif\n"); - } - } - - 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); - { - int flags=0; - if (global_isjump) flags|=1; - if (long_opcode) flags|=2; - if (global_cmov) flags|=4; - if (global_isaddx) flags|=8; - if (global_iscjump) flags|=16; - comprintf ("return 0;\n"); - comprintf ("}\n"); - - if (aborted) { - fprintf (stblfile, "{ NULL, %ld, 0x%08x }, /* %s */\n", opcode, flags, lookuptab[i].name); - com_discard(); - } else { - if (noflags) { - fprintf (stblfile, "{ op_%lx_%d_comp_nf, %ld, 0x%08x }, /* %s */\n", opcode, postfix, opcode, flags, lookuptab[i].name); - fprintf (headerfile, "extern compop_func op_%lx_%d_comp_nf;\n", opcode, postfix); - printf ("unsigned long REGPARAM2 op_%lx_%d_comp_nf(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, lookuptab[i].name); - } else { - fprintf (stblfile, "{ op_%lx_%d_comp_ff, %ld, 0x%08x }, /* %s */\n", opcode, postfix, opcode, flags, lookuptab[i].name); - fprintf (headerfile, "extern compop_func op_%lx_%d_comp_ff;\n", opcode, postfix); - printf ("unsigned long REGPARAM2 op_%lx_%d_comp_ff(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, lookuptab[i].name); - } - com_flush(); - } - } - opcode_next_clev[rp] = next_cpu_level; - opcode_last_postfix[rp] = postfix; -} - -static void -generate_func (int noflags) -{ - int i, j, rp; - - using_prefetch = 0; - using_exception_3 = 0; - for (i = 0; i < 1; i++) /* We only do one level! */ - { - cpu_level = 5 - i; - postfix = i; - - if (noflags) - fprintf (stblfile, "const struct comptbl op_smalltbl_%d_comp_nf[] = {\n", postfix); - else - fprintf (stblfile, "const struct comptbl op_smalltbl_%d_comp_ff[] = {\n", postfix); - - - /* 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" - "extern void setzflg_l();\n" - "extern void comp_fpp_opp();\n" - "extern void comp_fscc_opp();\n" - "extern void comp_fbcc_opp();\n\n"); - - 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"); - } - -} - -int -main (int argc, char **argv) -{ - read_table68k (); - do_merges (); - - 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 ("jit/comptbl.h", "wb"); - stblfile = fopen ("jit/compstbl.c", "wb"); - freopen ("jit/compemu.c", "wb", stdout); - - generate_includes (stdout); - generate_includes (stblfile); - - printf("#include \"compemu.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); - - free(opcode_map); - free(opcode_last_postfix); - free(opcode_next_clev); - free(counts); - - printf ("#endif\n"); - fprintf (stblfile, "#endif\n"); - - free (table68k); - fclose (stblfile); - fclose (headerfile); - return 0; -} diff --git a/src/jit/gencomp_arm.cpp b/src/jit/gencomp_arm.cpp index 35397c4d..33de422b 100644 --- a/src/jit/gencomp_arm.cpp +++ b/src/jit/gencomp_arm.cpp @@ -1,15 +1,12 @@ /* - * compiler/gencomp.c - MC680x0 compilation generator + * compiler/gencomp_arm2.c - MC680x0 compilation generator (ARM Adaption JIT v1 & JIT v2) * * Based on work Copyright 1995, 1996 Bernd Schmidt * Changes for UAE-JIT Copyright 2000 Bernd Meyer * - * Adaptation for ARAnyM/ARM, copyright 2001-2014 + * Adaptation for ARAnyM/ARM, copyright 2001-2015 * 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 @@ -26,11 +23,29 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Note: - * - current using nf_xxx calls for non-flag operations - * should be i.E. add vs. adds in the future, but meanwhile for - * compatibility with compemu_support nf_ is used as prefix until - * compemu_support.cpp raw_xxx calls are all moved to macro definitions + * Notes + * ===== + * + * Advantages of JIT v2 + * - Processor independent style + * - Reduced overhead + * - Easier to understand / read + * - Easier to optimize + * - More precise flag handling + * - Better optimization for different CPU version ARM, ARMv6 etc.. + * + * Disadvantages of JIT v2 + * - Less generated + * - Requires more code implementation by hand (MidFunc) + * - MIDFUNCS are more CPU minded (closer to raw) + * - Separate code for each instruction (but this could be also an advantage, because you can concentrate on it) + * + * Additional note: + * - current using jnf_xxx calls for non-flag operations and + * jff_xxx for flag operations + * + * Still todo: + * - Optimize genamode, genastore, gen_writeXXX, gen_readXXX, genmovemXXX * */ @@ -40,17 +55,87 @@ #include "readcpu.h" +#include #include +#include #include +#include +#undef abort -#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 USE_JIT2 + +//#define DISABLE_I_OR_AND_EOR +//#define DISABLE_I_ORSR_EORSR_ANDSR +//#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_ROXL +#define DISABLE_I_ROXR +//#define DISABLE_I_ASRW +//#define DISABLE_I_ASLW +//#define DISABLE_I_LSRW +//#define DISABLE_I_LSLW +//#define DISABLE_I_ROLW +//#define DISABLE_I_RORW +#define DISABLE_I_ROXLW +#define DISABLE_I_ROXRW +//#define DISABLE_I_MULL +#define DISABLE_I_FPP +#define DISABLE_I_FBCC +#define DISABLE_I_FSCC +//#define DISABLE_I_MOVE16 + +#define DISABLE_I_DIVU // DIVU works, but we have to think about exceptions. No big performance enhancement. + + +#define RETURN "return 0;" + +#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; @@ -66,39 +151,40 @@ static int global_fpu; static char endstr[1000]; static char lines[100000]; -static int comp_index=0; +static int comp_index = 0; #include "flags_arm.h" -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 cond_codes[] = { // + NATIVE_CC_AL, -1, // + NATIVE_CC_HI, NATIVE_CC_LS, // + NATIVE_CC_CC, NATIVE_CC_CS, // + NATIVE_CC_NE, NATIVE_CC_EQ, // + NATIVE_CC_VC, NATIVE_CC_VS, // + NATIVE_CC_PL, NATIVE_CC_MI, // + NATIVE_CC_GE, NATIVE_CC_LT, // + NATIVE_CC_GT, NATIVE_CC_LE // }; -static void comprintf(const char* format, ...) +static void comprintf(const char* format, ...) { - va_list args; + va_list args; - va_start(args,format); - comp_index+=vsprintf(lines+comp_index,format,args); + va_start(args, format); + comp_index += vsprintf(lines + comp_index, format, args); } -static void com_discard(void) +static void com_discard(void) { - comp_index=0; + comp_index = 0; } -static void com_flush(void) +static void com_flush(void) { - int i; - for (i=0;i 0); - n_braces--; - comprintf ("}"); + assert(n_braces > 0); + n_braces--; + comprintf("}"); } -static void -finish_braces (void) +static void +finish_braces(void) { - while (n_braces > 0) - close_brace (); + while (n_braces > 0) + close_brace(); } -static __inline__ void gen_update_next_handler(void) +static inline void gen_update_next_handler(void) { - return; /* Can anything clever be done here? */ + return; /* Can anything clever be done here? */ } -static void gen_writebyte(char* address, char* source) +static void gen_writebyte(const char* address, const char* source) { - comprintf("\twritebyte(%s,%s,scratchie);\n",address,source); + comprintf("\twritebyte(%s,%s,scratchie);\n", address, source); } -static void gen_writeword(char* address, char* source) +static void gen_writeword(const char* address, const char* source) { - comprintf("\twriteword(%s,%s,scratchie);\n",address,source); + comprintf("\twriteword(%s,%s,scratchie);\n", address, source); } -static void gen_writelong(char* address, char* source) +static void gen_writelong(const char* address, const char* source) { - comprintf("\twritelong(%s,%s,scratchie);\n",address,source); + comprintf("\twritelong(%s,%s,scratchie);\n", address, source); } -static void gen_readbyte(char* address, char* dest) +static void gen_readbyte(const char* address, const char* dest) { - comprintf("\treadbyte(%s,%s,scratchie);\n",address,dest); + comprintf("\treadbyte(%s,%s,scratchie);\n", address, dest); } -static void gen_readword(char* address, char* dest) +static void gen_readword(const char* address, const char* dest) { - comprintf("\treadword(%s,%s,scratchie);\n",address,dest); + comprintf("\treadword(%s,%s,scratchie);\n", address, dest); } -static void gen_readlong(char* address, char* dest) +static void gen_readlong(const char* address, const char* dest) { - comprintf("\treadlong(%s,%s,scratchie);\n",address,dest); + comprintf("\treadlong(%s,%s,scratchie);\n", address, dest); } static const char * -gen_nextilong (void) +gen_nextilong(void) { - static char buffer[80]; + static char buffer[80]; - sprintf (buffer, "comp_get_ilong((m68k_pc_offset+=4)-4)"); - insn_n_cycles += 4; + sprintf(buffer, "comp_get_ilong((m68k_pc_offset+=4)-4)"); + insn_n_cycles += 4; - long_opcode=1; - return buffer; + long_opcode = 1; + return buffer; } static const char * -gen_nextiword (void) +gen_nextiword(void) { - static char buffer[80]; + static char buffer[80]; - sprintf (buffer, "comp_get_iword((m68k_pc_offset+=2)-2)"); - insn_n_cycles+=2; + sprintf(buffer, "comp_get_iword((m68k_pc_offset+=2)-2)"); + insn_n_cycles += 2; - long_opcode=1; - return buffer; + long_opcode = 1; + return buffer; } static const char * -gen_nextibyte (void) +gen_nextibyte(void) { - static char buffer[80]; + static char buffer[80]; - sprintf (buffer, "comp_get_ibyte((m68k_pc_offset+=2)-2)"); - insn_n_cycles += 2; + sprintf(buffer, "comp_get_ibyte((m68k_pc_offset+=2)-2)"); + insn_n_cycles += 2; - long_opcode=1; - return buffer; + long_opcode = 1; + return buffer; } -#ifdef USE_JIT_FPU + static void swap_opcode (void) { - comprintf("#ifdef HAVE_GET_WORD_UNSWAPPED\n"); - comprintf("\topcode = do_byteswap_16(opcode);\n"); - comprintf("#endif\n"); + /* no-op */ } -#endif -static void -sync_m68k_pc (void) +static void +sync_m68k_pc(void) { - comprintf("\t if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc();\n"); + comprintf("\t if (m68k_pc_offset>SYNC_PC_OFFSET) sync_m68k_pc();\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, char *reg, wordsizes size, char *name, int getv, int movem) +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? */ - if (movem) - abort (); - if (getv == 1 || getv==2) { - /* 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: - if (movem) - abort (); - if (getv == 1 || getv==2) { - /* see above */ - comprintf ("\tint %s=dodgy?scratchie++:%s+8;\n",name,reg); - if (getv==1) { - comprintf ("\tif (dodgy) \n"); - comprintf ("\t\tmov_l_rr(%s,%s+8);\n",name, reg); - } - } - 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); - break; - case Aipi: - comprintf ("\tint %sa=scratchie++;\n",name,reg); - comprintf ("\tmov_l_rr(%sa,%s+8);\n",name, reg); - break; - case Apdi: - switch (size) - { - case sz_byte: - if (movem) { - comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); - comprintf ("\tif (dodgy) \n"); - comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - 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("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - break; - case sz_word: - if (movem) { - comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); - comprintf ("\tif (dodgy) \n"); - comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - 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("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - break; - case sz_long: - if (movem) { - comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); - comprintf ("\tif (dodgy) \n"); - comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - 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("\tmov_l_rr(%sa,8+%s);\n",name,reg); - } - break; - default: - abort (); - } - 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=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=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset;\n"); start_brace(); - comprintf("\tmov_l_ri(pctmp,address);\n"); + switch (mode) + { + case Dreg: /* Do we need to check dodgy here? */ + if (movem) + abort(); + if (getv == 1 || getv == 2) { + /* 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; - 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: - if (getv != 1) - abort (); - 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: - abort (); - } - return; - case imm0: - if (getv != 1) - abort (); - comprintf ("\tint %s = scratchie++;\n",name); - comprintf ("\tmov_l_ri(%s,(uae_s32)(uae_s8)%s);\n", name, gen_nextibyte ()); - return; - case imm1: - if (getv != 1) - abort (); - comprintf ("\tint %s = scratchie++;\n",name); - comprintf ("\tmov_l_ri(%s,(uae_s32)(uae_s16)%s);\n", name, gen_nextiword ()); - return; - case imm2: - if (getv != 1) - abort (); - comprintf ("\tint %s = scratchie++;\n",name); - comprintf ("\tmov_l_ri(%s,%s);\n", name, gen_nextilong ()); - return; - case immi: - if (getv != 1) - abort (); - comprintf ("\tint %s = scratchie++;\n",name); - comprintf ("\tmov_l_ri(%s,%s);\n", name, reg); - return; - default: - abort (); - } + case Areg: + if (movem) + abort(); + if (getv == 1 || getv == 2) { + /* see above */ + comprintf("\tint %s=dodgy?scratchie++:%s+8;\n", name, reg); + if (getv == 1) { + comprintf("\tif (dodgy) \n"); + comprintf("\t\tmov_l_rr(%s,%s+8);\n", name, reg); + } + } + return; - /* We get here for all non-reg non-immediate addressing modes to - * actually fetch the value. */ - if (getv == 1) + 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); + break; + case Aipi: + comprintf("\tint %sa=scratchie++;\n", name, reg); + comprintf("\tmov_l_rr(%sa,%s+8);\n", name, reg); + break; + case Apdi: + switch (size) { - 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: - abort (); - } - 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: - abort (); - } - } + case sz_byte: + if (movem) { + comprintf("\tint %sa=dodgy?scratchie++:%s+8;\n", name, reg); + comprintf("\tif (dodgy) \n"); + comprintf("\tmov_l_rr(%sa,8+%s);\n", name, reg); + } + else { + start_brace(); + comprintf("\tint %sa=dodgy?scratchie++:%s+8;\n", name, reg); + comprintf("\tarm_SUB_l_ri8(%s+8,areg_byteinc[%s]);\n", reg, reg); + comprintf("\tif (dodgy) \n"); + comprintf("\tmov_l_rr(%sa,8+%s);\n", name, reg); + } + break; + case sz_word: + if (movem) { + comprintf("\tint %sa=dodgy?scratchie++:%s+8;\n", name, reg); + comprintf("\tif (dodgy) \n"); + comprintf("\tmov_l_rr(%sa,8+%s);\n", name, reg); + } + else { + start_brace(); + comprintf("\tint %sa=dodgy?scratchie++:%s+8;\n", name, reg); + comprintf("\tarm_SUB_l_ri8(%s+8,2);\n", reg); + comprintf("\tif (dodgy) \n"); + comprintf("\tmov_l_rr(%sa,8+%s);\n", name, reg); + } + break; + case sz_long: + if (movem) { + comprintf("\tint %sa=dodgy?scratchie++:%s+8;\n", name, reg); + comprintf("\tif (dodgy) \n"); + comprintf("\tmov_l_rr(%sa,8+%s);\n", name, reg); + } + else { + start_brace(); + comprintf("\tint %sa=dodgy?scratchie++:%s+8;\n", name, reg); + comprintf("\tarm_SUB_l_ri8(%s+8,4);\n", reg); + comprintf("\tif (dodgy) \n"); + comprintf("\tmov_l_rr(%sa,8+%s);\n", name, reg); + } + break; + default: + abort(); + } + 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; - /* We now might have to fix up the register for pre-dec or post-inc - * addressing modes. */ - if (!movem) { - switch (mode) - { - case Aipi: - switch (size) - { - case sz_byte: - comprintf("\tlea_l_brr(%s+8,%s+8,areg_byteinc[%s]);\n",reg,reg,reg); + case PC16: + comprintf("\tint %sa=scratchie++;\n", name); + comprintf("\tuae_u32 address=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 sz_word: - comprintf("\tlea_l_brr(%s+8,%s+8,2);\n",reg,reg,reg); - break; - case sz_long: - comprintf("\tlea_l_brr(%s+8,%s+8,4);\n",reg,reg); - break; - default: - abort (); - } - break; - case Apdi: - break; - default: - break; - } - } -} -static void -genastore (char *from, amodes mode, char *reg, wordsizes size, char *to) -{ - switch (mode) + case PC8r: + comprintf("\tint pctmp=scratchie++;\n"); + comprintf("\tint %sa=scratchie++;\n", name); + comprintf("\tuae_u32 address=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: + if (getv != 1) + abort(); + switch (size) { - case Dreg: - switch (size) - { - case sz_byte: - comprintf("\tif(%s!=%s)\n",reg,from); - comprintf ("\t\tmov_b_rr(%s,%s);\n", reg, from); - break; - case sz_word: - comprintf("\tif(%s!=%s)\n",reg,from); - comprintf ("\t\tmov_w_rr(%s,%s);\n", reg, from); - break; - case sz_long: - comprintf("\tif(%s!=%s)\n",reg,from); - comprintf ("\t\tmov_l_rr(%s,%s);\n", reg, from); - break; - default: - abort (); + 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: + abort(); + } + return; + case imm0: + if (getv != 1) + abort(); + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s,(uae_s32)(uae_s8)%s);\n", name, gen_nextibyte()); + return; + case imm1: + if (getv != 1) + abort(); + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s,(uae_s32)(uae_s16)%s);\n", name, gen_nextiword()); + return; + case imm2: + if (getv != 1) + abort(); + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s,%s);\n", name, gen_nextilong()); + return; + case immi: + if (getv != 1) + abort(); + comprintf("\tint %s = scratchie++;\n", name); + comprintf("\tmov_l_ri(%s,%s);\n", name, reg); + return; + default: + abort(); } - 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); - break; - case sz_long: - comprintf("\tif(%s+8!=%s)\n",reg,from); - comprintf ("\t\tmov_l_rr(%s+8,%s);\n", reg, from); - break; - default: - abort (); + + /* We get here for all non-reg non-immediate addressing modes to + * actually fetch the value. */ + if (getv == 1) + { + 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: + abort(); + } + 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: + abort(); + } } - 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: - abort (); - } - } - break; - case imm: - case imm0: - case imm1: - case imm2: - case immi: - abort (); - break; - default: - abort (); - } + /* We now might have to fix up the register for pre-dec or post-inc + * addressing modes. */ + if (!movem) { + switch (mode) + { + case Aipi: + switch (size) + { + case sz_byte: + comprintf("\tarm_ADD_l_ri8(%s+8,areg_byteinc[%s]);\n", reg, reg); + break; + case sz_word: + comprintf("\tarm_ADD_l_ri8(%s+8,2);\n", reg); + break; + case sz_long: + comprintf("\tarm_ADD_l_ri8(%s+8,4);\n", reg); + break; + default: + abort(); + } + break; + case Apdi: + break; + default: + break; + } + } } -static void genmov16(uae_u32 opcode, struct instr *curi) +static void +genastore(const char *from, amodes mode, const char *reg, wordsizes size, const char *to) { - comprintf("\tint src=scratchie++;\n"); - comprintf("\tint dst=scratchie++;\n"); + 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); + break; + case sz_word: + comprintf("\tif(%s!=%s)\n", reg, from); + comprintf("\t\tmov_w_rr(%s,%s);\n", reg, from); + break; + case sz_long: + comprintf("\tif(%s!=%s)\n", reg, from); + comprintf("\t\tmov_l_rr(%s,%s);\n", reg, from); + break; + default: + abort(); + } + 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); + break; + case sz_long: + comprintf("\tif(%s+8!=%s)\n", reg, from); + comprintf("\t\tmov_l_rr(%s+8,%s);\n", reg, from); + break; + default: + abort(); + } + break; - 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"); + 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: + abort(); + } } - else { - /* Other variants */ - genamode (curi->smode, "srcreg", curi->size, "src", 0, 2); - genamode (curi->dmode, "dstreg", curi->size, "dst", 0, 2); - 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("\tarm_ADD_l_ri8(srcreg+8,16);\n"); - comprintf("\tarm_ADD_l_ri8(dstreg+8,16);\n"); + break; + case imm: + case imm0: + case imm1: + case imm2: + case immi: + abort(); + break; + default: + abort(); } - else if ((opcode & 0xfff8) == 0xf600) - comprintf("\tarm_ADD_l_ri8(srcreg+8,16);\n"); - else if ((opcode & 0xfff8) == 0xf608) - comprintf("\tarm_ADD_l_ri8(dstreg+8,16);\n"); - - comprintf("\tif (special_mem) {\n"); - comprintf("\t\tint tmp=scratchie;\n"); - comprintf("\tscratchie+=4;\n" - "\treadlong(src,tmp,scratchie);\n" - "\twritelong_clobber(dst,tmp,scratchie);\n" - "\tarm_ADD_l_ri8(src,4);\n" - "\tarm_ADD_l_ri8(dst,4);\n" - "\treadlong(src,tmp,scratchie);\n" - "\twritelong_clobber(dst,tmp,scratchie);\n" - "\tarm_ADD_l_ri8(src,4);\n" - "\tarm_ADD_l_ri8(dst,4);\n" - "\treadlong(src,tmp,scratchie);\n" - "\twritelong_clobber(dst,tmp,scratchie);\n" - "\tarm_ADD_l_ri8(src,4);\n" - "\tarm_ADD_l_ri8(dst,4);\n" - "\treadlong(src,tmp,scratchie);\n" - "\twritelong_clobber(dst,tmp,scratchie);\n"); - comprintf("\t} else {\n"); - comprintf("\t\tint tmp=scratchie;\n"); - comprintf("\tscratchie+=4;\n"); - - comprintf("\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);\t}\n"); } -static void -genmovemel (uae_u16 opcode) +static void gen_move16(uae_u32 opcode, struct instr *curi) { - 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", 2, 1); - comprintf("\tif (1 && !special_mem) {\n"); + mayfail; + comprintf("if (special_mem) {\n"); + comprintf(" FAIL(1);\n"); + comprintf(" " RETURN "\n"); + comprintf("} \n"); - /* Fast but unsafe... */ - comprintf("\tget_n_addr(srca,native,scratchie);\n"); + comprintf("\tint src=scratchie++;\n"); + comprintf("\tint dst=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: abort(); - } - comprintf("\t\t}\n" - "\t}"); - if (table68k[opcode].dmode == Aipi) { - comprintf("\t\t\tlea_l_brr(8+dstreg,srca,offset);\n"); - } - /* End fast but unsafe. */ + uae_u32 masked_op = (opcode & 0xfff8); + if (masked_op == 0xf620) { + // POSTINCREMENT SOURCE AND DESTINATION version: MOVE16 (Ax)+,(Ay)+ + comprintf("\t uae_u16 dstreg = ((%s)>>12) & 0x07;\n", gen_nextiword()); + comprintf("\t jnf_MOVE(src, srcreg + 8);\n"); + comprintf("\t jnf_MOVE(dst, dstreg + 8);\n"); + comprintf("\t if (srcreg != dstreg)\n"); + comprintf("\t jnf_ADD_im8(srcreg + 8, srcreg + 8, 16);\n"); + comprintf("\t jnf_ADD_im8(dstreg + 8, dstreg + 8, 16);\n"); + } else { + /* Other variants */ + genamode(curi->smode, "srcreg", curi->size, "src", 0, 2); + genamode(curi->dmode, "dstreg", curi->size, "dst", 0, 2); + switch (masked_op) { + case 0xf600: + comprintf("\t jnf_ADD_im8(srcreg + 8, srcreg + 8, 16);\n"); + break; + case 0xf608: + comprintf("\t jnf_ADD_im8(dstreg + 8, dstreg + 8, 16);\n"); + break; + } + } + comprintf("\tjnf_MOVE16(dst, src);\n"); +} - comprintf("\t} else {\n"); +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", 2, 1); + comprintf("\tif (!special_mem) {\n"); - comprintf ("\tint tmp=scratchie++;\n"); + /* Fast but unsafe... */ + comprintf("\tget_n_addr(srca,native,scratchie);\n"); - comprintf("\tmov_l_rr(tmp,srca);\n"); - comprintf("\tfor (i=0;i<16;i++) {\n" - "\t\tif ((mask>>i)&1) {\n"); - switch(table68k[opcode].size) { + comprintf("\tfor (i=0;i<16;i++) {\n" + "\t\tif ((mask>>i)&1) {\n"); + switch (table68k[opcode].size) { + case sz_long: + comprintf("\t\t\tjnf_MVMEL_l(i,native,offset);\n" + "\t\t\toffset+=4;\n"); + break; + case sz_word: + comprintf("\t\t\tjnf_MVMEL_w(i,native,offset);\n" + "\t\t\toffset+=2;\n"); + break; + default: abort(); + } + comprintf("\t\t}\n" + "\t}"); + if (table68k[opcode].dmode == Aipi) { + comprintf("\t\t\tjnf_ADD_im8(8+dstreg,srca,offset);\n"); + } + /* End fast but unsafe. */ + + 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\treadlong(tmp,i,scratchie);\n" - "\t\t\tarm_ADD_l_ri8(tmp,4);\n"); - break; + comprintf("\t\t\t\treadlong(tmp,i,scratchie);\n" + "\t\t\t\tarm_ADD_l_ri8(tmp,4);\n"); + break; case sz_word: - comprintf("\t\t\treadword(tmp,i,scratchie);\n" - "\t\t\tarm_ADD_l_ri8(tmp,2);\n"); - break; + comprintf("\t\t\t\treadword(tmp,i,scratchie);\n" + "\t\t\t\tarm_ADD_l_ri8(tmp,2);\n"); + break; default: abort(); - } + } - comprintf("\t\t}\n" - "\t}"); - if (table68k[opcode].dmode == Aipi) { - comprintf("\t\t\tmov_l_rr(8+dstreg,tmp);\n"); - } - comprintf("\t}\n"); + comprintf("\t\t\t}\n" + "\t\t}\n"); + if (table68k[opcode].dmode == Aipi) { + comprintf("\t\tmov_l_rr(8+dstreg,tmp);\n"); + } + comprintf("\t}\n"); } -static void -genmovemle (uae_u16 opcode) +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", 2, 1); + 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", 2, 1); - /* *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 ;-) */ - comprintf("\tif (1 && !special_mem) {\n"); - comprintf("\tget_n_addr(srca,native,scratchie);\n"); + /* *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 ;-) */ + comprintf("\tif (!special_mem) {\n"); + comprintf("\tget_n_addr(srca,native,scratchie);\n"); - if (table68k[opcode].dmode!=Apdi) { - 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(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: abort(); + if (table68k[opcode].dmode != Apdi) { + comprintf("\tfor (i=0;i<16;i++) {\n" + "\t\tif ((mask>>i)&1) {\n"); + switch (table68k[opcode].size) { + case sz_long: + comprintf("\t\t\tjnf_MVMLE_l(native,i,offset);\n" + "\t\t\toffset+=4;\n"); + break; + case sz_word: + comprintf("\t\t\tjnf_MVMLE_w(native,i,offset);\n" + "\t\t\toffset+=2;\n"); + break; + default: abort(); + } + } + else { /* Pre-decrement */ + comprintf("\tfor (i=0;i<16;i++) {\n" + "\t\tif ((mask>>i)&1) {\n"); + switch (table68k[opcode].size) { + case sz_long: + comprintf("\t\t\toffset-=4;\n" + "\t\t\tjnf_MVMLE_l(native,15-i,offset);\n" + ); + break; + case sz_word: + comprintf("\t\t\toffset-=2;\n" + "\t\t\tjnf_MVMLE_w(native,15-i,offset);\n" + ); + break; + default: abort(); + } } - } - else { /* Pre-decrement */ - comprintf("\tfor (i=0;i<16;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: abort(); - } - } - comprintf("\t\t}\n" + + comprintf("\t\t}\n" + "\t}"); + if (table68k[opcode].dmode == Apdi) { + comprintf("\t\t\tlea_l_brr(8+dstreg,srca,(uae_s32)offset);\n"); + } + comprintf("\t} else {\n"); + + if (table68k[opcode].dmode!=Apdi) { + comprintf("\tmov_l_rr(tmp,srca);\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\twritelong(tmp,i,scratchie);\n" + "\t\t\tarm_ADD_l_ri8(tmp,4);\n"); + break; + case sz_word: + comprintf("\t\t\twriteword(tmp,i,scratchie);\n" + "\t\t\tarm_ADD_l_ri8(tmp,2);\n"); + break; + default: abort(); + } + } + else { /* Pre-decrement */ + comprintf("\tfor (i=0;i<16;i++) {\n" + "\t\tif ((mask>>i)&1) {\n"); + switch(table68k[opcode].size) { + case sz_long: + comprintf("\t\t\tarm_SUB_l_ri8(srca,4);\n" + "\t\t\twritelong(srca,15-i,scratchie);\n"); + break; + case sz_word: + comprintf("\t\t\tarm_SUB_l_ri8(srca,2);\n" + "\t\t\twriteword(srca,15-i,scratchie);\n"); + break; + default: abort(); + } + } + + + comprintf("\t\t}\n" "\t}"); - if (table68k[opcode].dmode == Apdi) { - comprintf("\t\t\tlea_l_brr(8+dstreg,srca,(uae_s32)offset);\n"); - } - comprintf("\t} else {\n"); - - if (table68k[opcode].dmode!=Apdi) { - comprintf("\tmov_l_rr(tmp,srca);\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\twritelong(tmp,i,scratchie);\n" - "\t\t\tarm_ADD_l_ri8(tmp,4);\n"); - break; - case sz_word: - comprintf("\t\t\twriteword(tmp,i,scratchie);\n" - "\t\t\tarm_ADD_l_ri8(tmp,2);\n"); - break; - default: abort(); - } - } - else { /* Pre-decrement */ - comprintf("\tfor (i=0;i<16;i++) {\n" - "\t\tif ((mask>>i)&1) {\n"); - switch(table68k[opcode].size) { - case sz_long: - comprintf("\t\t\tarm_SUB_l_ri8(srca,4);\n" - "\t\t\twritelong(srca,15-i,scratchie);\n"); - break; - case sz_word: - comprintf("\t\t\tarm_SUB_l_ri8(srca,2);\n" - "\t\t\twriteword(srca,15-i,scratchie);\n"); - break; - default: abort(); - } - } - - - comprintf("\t\t}\n" - "\t}"); - if (table68k[opcode].dmode == Apdi) { - comprintf("\t\t\tmov_l_rr(8+dstreg,srca);\n"); - } - comprintf("\t}\n"); + if (table68k[opcode].dmode == Apdi) { + comprintf("\t\t\tmov_l_rr(8+dstreg,srca);\n"); + } + comprintf("\t}\n"); } -static void -duplicate_carry (void) +typedef enum { - comprintf ("\tif (needed_flags&FLAG_X) duplicate_carry();\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 -} + 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 gen_add(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); -static void -genflags (flagtypes type, wordsizes size, char *value, char *src, 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"); - { - char* op; - switch(type) { - case flag_add: op="add"; break; // nf - case flag_sub: op="sub"; break; // nf - default: abort(); - } - 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"); // nf - comprintf("\tarm_AND_l(%s,scratchie);\n",dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\tarm_AND_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"); // nf - comprintf("\tarm_AND_l(%s,scratchie);\n",dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\tarm_AND_w(%s,%s);\n",dst,src); - break; - case sz_long: - comprintf("\tarm_AND_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); // nf - comprintf("\tarm_ORR_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); // nf - comprintf("\tarm_ORR_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(); - { - char* op; - switch(type) { - case flag_or: op="ORR"; break; // nf - case flag_eor: op="EOR"; break; // nf - default: abort(); - } - switch (size) - { - case sz_byte: - comprintf("if (kill_rodent(dst)) {\n"); - comprintf("\tzero_extend_8_rr(scratchie,%s);\n",src); - comprintf("\tarm_%s_l(%s,scratchie);\n",op,dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\tarm_%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("\tarm_%s_l(%s,scratchie);\n",op,dst); - comprintf("\tforget_about(scratchie);\n"); - comprintf("\t} else \n" - "\tarm_%s_w(%s,%s);\n",op,dst,src); - break; - case sz_long: - comprintf("\tarm_%s_l(%s,%s);\n",op,dst,src); - break; - } - close_brace(); - return; - } - - - case flag_addx: - case flag_subx: - comprintf("\tdont_care_flags();\n"); - { - char* op; - switch(type) { - case flag_addx: op="adc"; break; - case flag_subx: op="sbb"; break; - default: abort(); - } - 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; - - case flag_and: - case flag_or: - case flag_eor: - comprintf("\tdont_care_flags();\n"); + comprintf("\t dont_care_flags();\n"); start_brace(); - { - char* op; - switch(type) { - case flag_and: op="and"; break; - case flag_or: op="or"; break; - case flag_eor: op="xor"; break; - default: abort(); - } - 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; + comprintf("\t int tmp=scratchie++;\n"); + // Use tmp register to avoid destroying upper part in .B., .W cases + if (!noflags) { + comprintf("\t jff_ADD_%s(tmp,dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf( + "\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_ADD(tmp,dst,src);\n"); } - - 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"); - { - char* op; - switch(type) { - case flag_add: op="add"; break; - case flag_sub: op="sub"; break; - case flag_cmp: op="cmp"; break; - default: abort(); - } - 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"); - { - char* op; - switch(type) { - case flag_addx: op="adc"; break; - case flag_subx: op="sbb"; break; - default: abort(); - } - 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" - "\tcmov_l_rr(zero,one,%d);\n" - "\tset_zero(zero, one);\n" /* No longer need one */ - "\tlive_flags();\n" - "\t}\n",NATIVE_CC_NE); - comprintf("\tend_needflags();\n"); - duplicate_carry(); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - return; - } - default: - failure; - break; - } + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); } -static int /* returns zero for success, non-zero for failure */ -gen_opcode (unsigned long int opcode) -{ - struct instr *curi = table68k + opcode; - 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: abort(); - } - (void)ssize; - - switch (curi->mnemo) - { - case i_OR: - case i_AND: - case i_EOR: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - genflags (flag_sub, curi->size, "", "src", "dst"); - genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - case i_SUBA: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); +static void gen_adda(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", sz_long, "dst", 1, 0); 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: abort(); - } - comprintf("\tsub_l(dst,tmp);\n"); - genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - case i_SUBX: + comprintf("\t jnf_ADDA_%s(dst, src);\n", ssize); + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); +} + +static void gen_addx(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; isaddx; - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - genflags (flag_add, curi->size, "", "src", "dst"); - genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); - break; - case i_ADDA: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); 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: abort(); + + // Use tmp register to avoid destroying upper part in .B., .W cases + comprintf("\t dont_care_flags();\n"); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_ADDX_%s(tmp,dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf("\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_ADDX(tmp,dst,src);\n"); } - comprintf("\tarm_ADD_l(dst,tmp);\n"); - genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; - case i_ADDX: - isaddx; - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - 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: - isaddx; - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - 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; + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); +} - case i_NBCD: - failure; - /* Nope! */ - break; - case i_CLR: - genamode (curi->smode, "srcreg", curi->size, "src", 2, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - 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: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genflags (flag_logical, curi->size, "src", "", ""); - break; - case i_BCHG: - case i_BCLR: - case i_BSET: - case i_BTST: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - 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"); +static void gen_and(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); - { - char* op; - int need_write=1; + comprintf("\t dont_care_flags();\n"); + comprintf("\t int tmp=scratchie++;\n"); + start_brace(); + if (!noflags) { + comprintf("\t jff_AND_%s(tmp,dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_AND(tmp,dst,src);\n"); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); +} - 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: abort(); - } - 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); +static void gen_andsr(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_ANDSR(ARM_CCR_MAP[src & 0xF], (src & 0x10));\n"); + comprintf("\t live_flags();\n"); + } +} + +static void gen_asl(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + mayfail; + if (curi->smode == Dreg) { + comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + "} \n"); + start_brace(); + } + comprintf("\t dont_care_flags();\n"); + comprintf("\t int tmp=scratchie++;\n"); + + genamode(curi->smode, "srcreg", curi->size, "cnt", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "data", 1, 0); + + if (curi->smode != immi) { if (!noflags) { - comprintf("\tstart_needflags();\n" - "\tset_zero(s,tmp);\n" - "\tlive_flags();\n" - "\tend_needflags();\n"); + start_brace(); + comprintf("\t jff_ASL_%s_reg(tmp,data,cnt);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf( + "\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + start_brace(); + comprintf("\t jnf_LSL_reg(tmp,data,cnt);\n"); + } + } else { + start_brace(); + if (!noflags) { + comprintf("\t jff_ASL_%s_imm(tmp,data,srcreg);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf( + "\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_LSL_imm(tmp,data,srcreg);\n"); } - if (need_write) - genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); } - break; + genastore("tmp", curi->dmode, "dstreg", curi->size, "data"); +} - case i_CMPM: - case i_CMP: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); - start_brace (); - genflags (flag_cmp, curi->size, "", "src", "dst"); - break; - case i_CMPA: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); +static void gen_aslw(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); 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: abort(); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t jff_ASLW(tmp,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_ASLW(tmp,src);\n"); } - 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: - switch(curi->dmode) { - case Dreg: - case Areg: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); - 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", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); - genflags (flag_logical, curi->size, "src", "", ""); - genastore ("src", curi->dmode, "dstreg", curi->size, "dst"); - break; + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_asr(uae_u32 opcode, struct instr *curi, char* ssize) { + (void)opcode; + + mayfail; + if (curi->smode == Dreg) { + comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + "} \n"); + start_brace(); } - break; - case i_MOVEA: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); + comprintf("\t dont_care_flags();\n"); + + genamode(curi->smode, "srcreg", curi->size, "cnt", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "data", 1, 0); 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: abort(); - } - genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); - break; + comprintf("\t int tmp=scratchie++;\n"); + if (curi->smode != immi) { + if (!noflags) { + comprintf("\t jff_ASR_%s_reg(tmp,data,cnt);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf( + "if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_ASR_%s_reg(tmp,data,cnt);\n", ssize); + } + } else { + char *op; + if (!noflags) { + op = "ff"; + } else + op = "nf"; - case i_MVSR2: - isjump; - failure; - break; - case i_MV2SR: - isjump; - failure; - break; - case i_SWAP: - genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); - comprintf("\tdont_care_flags();\n"); - comprintf("\tarm_ROR_l_ri8(src,16);\n"); - genflags (flag_logical, sz_long, "src", "", ""); - genastore ("src", curi->smode, "srcreg", sz_long, "src"); - break; - case i_EXG: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); + comprintf("\t j%s_ASR_%s_imm(tmp,data,srcreg);\n", op, ssize); + if (!noflags) { + comprintf("\t live_flags();\n"); + comprintf( + "\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "data"); +} + +static void gen_asrw(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); 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: - genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); - 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: - abort (); + comprintf("\t int tmp = scratchie++;\n"); + + if (!noflags) { + comprintf("\t jff_ASRW(tmp,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_ASRW(tmp,src);\n"); } - 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: - genmovemel (opcode); - break; - case i_MVMLE: - genmovemle (opcode); - break; - case i_TRAP: - isjump; - 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: - genamode (curi->smode, "srcreg", curi->size, "offs", 1, 0); - /* offs is constant */ - comprintf("\tarm_ADD_l_ri8(offs,4);\n"); + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_bchg(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace(); - comprintf("\tint newad=scratchie++;\n" - "\treadlong(15,newad,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc,newad);\n" - "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n" - "\tarm_ADD_l(15,offs);\n"); - gen_update_next_handler(); - isjump; - break; - case i_LINK: - genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0); - comprintf("\tsub_l_ri(15,4);\n" - "\twritelong_clobber(15,src,scratchie);\n" - "\tmov_l_rr(src,15);\n"); - if (curi->size==sz_word) - comprintf("\tsign_extend_16_rr(offs,offs);\n"); - comprintf("\tarm_ADD_l(15,offs);\n"); - genastore ("src", curi->smode, "srcreg", sz_long, "src"); - break; - case i_UNLK: - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - comprintf("\tmov_l_rr(15,src);\n" - "\treadlong(15,src,scratchie);\n" - "\tarm_ADD_l_ri8(15,4);\n"); - genastore ("src", curi->smode, "srcreg", curi->size, "src"); - break; - case i_RTS: - comprintf("\tint newad=scratchie++;\n" - "\treadlong(15,newad,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc,newad);\n" - "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n" - "\tlea_l_brr(15,15,4);\n"); - gen_update_next_handler(); - isjump; - break; - case i_TRAPV: - isjump; - failure; - break; - case i_RTR: - isjump; - failure; - break; - case i_JSR: - isjump; - genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); + + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_BCHG_%s(dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_BCHG_%s(dst,src);\n", ssize); + comprintf("\t dont_care_flags();\n"); + } + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); +} + +static void gen_bclr(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace(); - 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" - "\tsub_l_ri(15,4);\n" - "\twritelong_clobber(15,ret,scratchie);\n"); - comprintf("\tmov_l_mr((uintptr)®s.pc,srca);\n" - "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n"); - gen_update_next_handler(); - break; - case i_JMP: - isjump; - genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); - comprintf("\tmov_l_mr((uintptr)®s.pc,srca);\n" - "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" - "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" - "\tm68k_pc_offset=0;\n"); - gen_update_next_handler(); - break; - case i_BSR: - if (curi->size==sz_long) - failure; - is_const_jump; - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); + + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_BCLR_%s(dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_BCLR_%s(dst,src);\n", ssize); + comprintf("\t dont_care_flags();\n"); + } + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); +} + +static void gen_bset(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace(); - 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" - "\tsub_l_ri(15,4);\n" - "\twritelong_clobber(15,ret,scratchie);\n"); - comprintf("\tarm_ADD_l_ri(src,m68k_pc_offset_thisinst+2);\n"); - comprintf("\tm68k_pc_offset=0;\n"); - comprintf("\tarm_ADD_l(PC_P,src);\n"); - comprintf("\tcomp_pc_p=(uae_u8*)get_const(PC_P);\n"); - break; - case i_Bcc: - comprintf("\tuae_u32 v1,v2;\n"); - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - /* 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: 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("\tarm_ADD_l_ri(src,(uintptr)comp_pc_p);\n"); - comprintf("\tmov_l_ri(PC_P,(uintptr)comp_pc_p);\n"); - /* Now they are both constant. Might as well fold in m68k_pc_offset */ - comprintf("\tarm_ADD_l_ri(src,m68k_pc_offset);\n"); - comprintf("\tarm_ADD_l_ri(PC_P,m68k_pc_offset);\n"); - comprintf("\tm68k_pc_offset=0;\n"); - if (curi->cc>=2) { - comprintf("\tv1=get_const(PC_P);\n" - "\tv2=get_const(src);\n" - "\tregister_branch(v1,v2,%d);\n", - cond_codes[curi->cc]); - comprintf("\tmake_flags_live();\n"); /* Load the flags */ - isjump; + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_BSET_%s(dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_BSET_%s(dst,src);\n", ssize); + comprintf("\t dont_care_flags();\n"); } - else { - is_const_jump; + genastore("dst", curi->dmode, "dstreg", curi->size, "dst"); +} + +static void gen_btst(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); + start_brace(); + + // If we are not interested in flags it is not necessary to do + // anything with the data + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_BTST_%s(dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t dont_care_flags();\n"); } +} - switch(curi->cc) { - case 0: /* Unconditional jump */ - comprintf("\tmov_l_rr(PC_P,src);\n"); - comprintf("\tcomp_pc_p=(uae_u8*)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: abort(); +static void gen_clr(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + genamode(curi->smode, "srcreg", curi->size, "src", 2, 0); + comprintf("\t dont_care_flags();\n"); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t jff_CLR(tmp);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_CLR(tmp);\n"); } - break; - case i_LEA: - genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); - genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); - genastore ("srca", curi->dmode, "dstreg", curi->size, "dst"); - break; - case i_PEA: - 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"); + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} - genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); - genamode (Apdi, "7", sz_long, "dst", 2, 0); - genastore ("srca", Apdi, "7", sz_long, "dst"); - break; - case i_DBcc: +static void gen_cmp(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); + start_brace(); + comprintf("\t dont_care_flags();\n"); + if (!noflags) { + comprintf("\t jff_CMP_%s(dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf("\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("/* Weird --- CMP with noflags ;-) */\n"); + } +} + +static void gen_cmpa(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", sz_long, "dst", 1, 0); + start_brace(); + if (!noflags) { + comprintf("\t dont_care_flags();\n"); + comprintf("\t jff_CMPA_%s(dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf("\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\tdont_care_flags();\n"); + comprintf("/* Weird --- CMP with noflags ;-) */\n"); + } +} + +static void gen_dbcc(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; isjump; - uses_cmov; - genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "offs", 1, 0); + + if (curi->size != sz_word) + abort(); /* 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: abort(); /* Seems this only comes in word flavour */ - } - comprintf("\tsub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2);\n"); - comprintf("\tarm_ADD_l_ri(offs,(uintptr)comp_pc_p);\n"); - /* New PC, - once the - offset_68k is - * also added */ + comprintf("\tsub_l_ri(offs, m68k_pc_offset - m68k_pc_offset_thisinst - 2);\n"); + comprintf("\tarm_ADD_l_ri(offs, (uintptr)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("\tarm_ADD_l_ri(offs,m68k_pc_offset);\n"); - comprintf("\tarm_ADD_l_ri(PC_P,m68k_pc_offset);\n"); + comprintf("\tarm_ADD_l_ri(offs, m68k_pc_offset);\n"); + comprintf("\tarm_ADD_l_ri(PC_P, m68k_pc_offset);\n"); comprintf("\tm68k_pc_offset=0;\n"); start_brace(); - comprintf("\tint nsrc=scratchie++;\n"); + comprintf("\tint nsrc = scratchie++;\n"); - if (curi->cc>=2) { - comprintf("\tmake_flags_live();\n"); /* Load the flags */ + if (curi->cc >= 2) { + comprintf("\tmake_flags_live();\n"); /* Load the flags */ } - if (curi->size!=sz_word) - abort(); + switch (curi->cc) { + case 0: /* This is an elaborate nop? */ + break; + case 1: + comprintf("\tsub_w_ri(src, 1);\n"); + start_brace(); + comprintf("\tuae_u32 v2;\n"); + comprintf("\tuae_u32 v1=get_const(PC_P);\n"); + comprintf("\tv2=get_const(offs);\n"); + comprintf("\tregister_branch(v1, v2, %d);\n", NATIVE_CC_CC); + break; - - 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("\t end_needflags();\n"); - start_brace(); - comprintf("\tuae_u32 v2;\n" - "\tuae_u32 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("\t start_needflags();\n"); - comprintf("\ttest_w_rr(nsrc,nsrc);\n"); - comprintf("\t end_needflags();\n"); - comprintf("\tcmov_l_rr(PC_P,offs,%d);\n", NATIVE_CC_NE); - break; - default: abort(); + case 8: + case 9: + 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("\tuae_u32 v1=get_const(PC_P);\n"); + comprintf("\tuae_u32 v2=get_const(offs);\n"); + comprintf("\tjff_DBCC(src, %d);\n", cond_codes[curi->cc]); + comprintf("\tregister_branch(v1, v2, %d);\n", NATIVE_CC_CS); + break; + default: abort(); } - genastore ("src", curi->smode, "srcreg", curi->size, "src"); + genastore("src", curi->smode, "srcreg", curi->size, "src"); gen_update_next_handler(); - break; - - case i_Scc: - genamode (curi->smode, "srcreg", curi->size, "src", 2, 0); - 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: abort(); - } - 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: - comprintf("\tdont_care_flags();\n"); - genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0); - /* 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: - comprintf("\tdont_care_flags();\n"); - genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); - genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0); - 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: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\n" - "} \n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - if (curi->smode!=immi) { - if (!noflags) { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint width;\n" - "\tint cdata=scratchie++;\n" - "\tint tmpcnt=scratchie++;\n" - "\tint highshift=scratchie++;\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n" - "\tand_l_ri(tmpcnt,63);\n" - "\tmov_l_ri(cdata,0);\n" - "\tcmov_l_rr(cdata,data,%d);\n", NATIVE_CC_NE); - /* cdata is now either data (for shift count!=0) or - 0 (for shift count==0) */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,cnt);\n" - "\thighmask=0x38;\n" - "\twidth=8;\n"); - break; - case sz_word: comprintf("\tshra_w_rr(data,cnt);\n" - "\thighmask=0x30;\n" - "\twidth=16;\n"); - break; - case sz_long: comprintf("\tshra_l_rr(data,cnt);\n" - "\thighmask=0x20;\n" - "\twidth=32;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(highshift,0);\n" - "mov_l_ri(scratchie,width/2);\n" - "cmov_l_rr(highshift,scratchie,%d);\n", NATIVE_CC_NE); - /* The x86 masks out bits, so we now make sure that things - really get shifted as much as planned */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; - case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; - case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; - default: abort(); - } - /* And again */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; - case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; - case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; - default: abort(); - } - - /* Result of shift is now in data. Now we need to determine - the carry by shifting cdata one less */ - comprintf("\tsub_l_ri(tmpcnt,1);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(cdata,tmpcnt);\n");break; - case sz_word: comprintf("\tshra_w_rr(cdata,tmpcnt);\n");break; - case sz_long: comprintf("\tshra_l_rr(cdata,tmpcnt);\n");break; - default: abort(); - } - /* If the shift count was higher than the width, we need - to pick up the sign from data */ - comprintf("test_l_ri(tmpcnt,highmask);\n" - "cmov_l_rr(cdata,data,%d);\n", NATIVE_CC_NE); - /* And create the flags */ - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(cdata,0);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - else { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint width;\n" - "\tint highshift=scratchie++;\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,cnt);\n" - "\thighmask=0x38;\n" - "\twidth=8;\n"); - break; - case sz_word: comprintf("\tshra_w_rr(data,cnt);\n" - "\thighmask=0x30;\n" - "\twidth=16;\n"); - break; - case sz_long: comprintf("\tshra_l_rr(data,cnt);\n" - "\thighmask=0x20;\n" - "\twidth=32;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(highshift,0);\n" - "mov_l_ri(scratchie,width/2);\n" - "cmov_l_rr(highshift,scratchie,%d);\n",NATIVE_CC_NE); - /* The x86 masks out bits, so we now make sure that things - really get shifted as much as planned */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; - case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; - case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; - default: abort(); - } - /* And again */ - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; - case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; - case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; - default: abort(); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - } - else { - start_brace(); - comprintf("\tint tmp=scratchie++;\n" - "\tint bp;\n" - "\tmov_l_rr(tmp,data);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshra_b_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - case sz_word: comprintf("\tshra_w_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - case sz_long: comprintf("\tshra_l_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - default: abort(); - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - break; - - case i_ASL: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\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 0;\n" - "} \n"); - - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - if (curi->smode!=immi) { - if (!noflags) { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint cdata=scratchie++;\n" - "\tint tmpcnt=scratchie++;\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n" - "\tand_l_ri(tmpcnt,63);\n" - "\tmov_l_ri(cdata,0);\n" - "\tcmov_l_rr(cdata,data,%d);\n",NATIVE_CC_NE); - /* cdata is now either data (for shift count!=0) or - 0 (for shift count==0) */ - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - /* Result of shift is now in data. Now we need to determine - the carry by shifting cdata one less */ - comprintf("\tsub_l_ri(tmpcnt,1);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(cdata,tmpcnt);\n");break; - case sz_word: comprintf("\tshll_w_rr(cdata,tmpcnt);\n");break; - case sz_long: comprintf("\tshll_l_rr(cdata,tmpcnt);\n");break; - default: abort(); - } - comprintf("test_l_ri(tmpcnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(cdata,scratchie,%d);\n",NATIVE_CC_NE); - /* And create the flags */ - comprintf("\tstart_needflags();\n"); - - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,7);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,15);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,31);\n"); break; - } - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - else { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - } - else { - start_brace(); - comprintf("\tint tmp=scratchie++;\n" - "\tint bp;\n" - "\tmov_l_rr(tmp,data);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n" - "\tbp=8-srcreg;\n"); break; - case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n" - "\tbp=16-srcreg;\n"); break; - case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n" - "\tbp=32-srcreg;\n"); break; - default: abort(); - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - break; - - case i_LSR: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\n" - "} \n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - if (curi->smode!=immi) { - if (!noflags) { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint cdata=scratchie++;\n" - "\tint tmpcnt=scratchie++;\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n" - "\tand_l_ri(tmpcnt,63);\n" - "\tmov_l_ri(cdata,0);\n" - "\tcmov_l_rr(cdata,data,%d);\n",NATIVE_CC_NE); - /* cdata is now either data (for shift count!=0) or - 0 (for shift count==0) */ - switch(curi->size) { - case sz_byte: comprintf("\tshrl_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshrl_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshrl_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - /* Result of shift is now in data. Now we need to determine - the carry by shifting cdata one less */ - comprintf("\tsub_l_ri(tmpcnt,1);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshrl_b_rr(cdata,tmpcnt);\n");break; - case sz_word: comprintf("\tshrl_w_rr(cdata,tmpcnt);\n");break; - case sz_long: comprintf("\tshrl_l_rr(cdata,tmpcnt);\n");break; - default: abort(); - } - comprintf("test_l_ri(tmpcnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(cdata,scratchie,%d);\n",NATIVE_CC_NE); - /* And create the flags */ - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(cdata,0);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - else { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshrl_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshrl_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshrl_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - } - else { - start_brace(); - comprintf("\tint tmp=scratchie++;\n" - "\tint bp;\n" - "\tmov_l_rr(tmp,data);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshrl_b_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - case sz_word: comprintf("\tshrl_w_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - case sz_long: comprintf("\tshrl_l_ri(data,srcreg);\n" - "\tbp=srcreg-1;\n"); break; - default: abort(); - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - break; - - case i_LSL: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\n" - "} \n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - if (curi->smode!=immi) { - if (!noflags) { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n" - "\tint cdata=scratchie++;\n" - "\tint tmpcnt=scratchie++;\n"); - comprintf("\tmov_l_rr(tmpcnt,cnt);\n" - "\tand_l_ri(tmpcnt,63);\n" - "\tmov_l_ri(cdata,0);\n" - "\tcmov_l_rr(cdata,data,%d);\n",NATIVE_CC_NE); - /* cdata is now either data (for shift count!=0) or - 0 (for shift count==0) */ - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - /* Result of shift is now in data. Now we need to determine - the carry by shifting cdata one less */ - comprintf("\tsub_l_ri(tmpcnt,1);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(cdata,tmpcnt);\n");break; - case sz_word: comprintf("\tshll_w_rr(cdata,tmpcnt);\n");break; - case sz_long: comprintf("\tshll_l_rr(cdata,tmpcnt);\n");break; - default: abort(); - } - comprintf("test_l_ri(tmpcnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(cdata,scratchie,%d);\n",NATIVE_CC_NE); - /* And create the flags */ - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,7);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,15);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); - comprintf("\t bt_l_ri(cdata,31);\n"); break; - } - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - else { - uses_cmov; - start_brace(); - comprintf("\tint highmask;\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" - "\thighmask=0x38;\n"); - break; - case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" - "\thighmask=0x30;\n"); - break; - case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" - "\thighmask=0x20;\n"); - break; - default: abort(); - } - comprintf("test_l_ri(cnt,highmask);\n" - "mov_l_ri(scratchie,0);\n" - "cmov_l_rr(scratchie,data,%d);\n",NATIVE_CC_EQ); - switch(curi->size) { - case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; - case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; - case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; - default: abort(); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - } - else { - start_brace(); - comprintf("\tint tmp=scratchie++;\n" - "\tint bp;\n" - "\tmov_l_rr(tmp,data);\n"); - switch(curi->size) { - case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n" - "\tbp=8-srcreg;\n"); break; - case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n" - "\tbp=16-srcreg;\n"); break; - case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n" - "\tbp=32-srcreg;\n"); break; - default: abort(); - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - comprintf("\t duplicate_carry();\n"); - comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - } - break; - - case i_ROL: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\n" - "} \n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - start_brace (); - - switch(curi->size) { - case sz_long: comprintf("\t rol_l_rr(data,cnt);\n"); break; - case sz_word: comprintf("\t rol_w_rr(data,cnt);\n"); break; - case sz_byte: comprintf("\t rol_b_rr(data,cnt);\n"); break; - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - comprintf("\t bt_l_ri(data,0x00);\n"); /* Set C */ - comprintf("\t live_flags();\n"); - comprintf("\t end_needflags();\n"); - } - genastore ("data", curi->dmode, "dstreg", curi->size, "data"); - break; - - case i_ROR: - mayfail; - if (curi->smode==Dreg) { - comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" - " FAIL(1);\n" - " return 0;\n" - "} \n"); - start_brace(); - } - comprintf("\tdont_care_flags();\n"); - genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); - genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); - start_brace (); - - switch(curi->size) { - case sz_long: comprintf("\t ror_l_rr(data,cnt);\n"); break; - case sz_word: comprintf("\t ror_w_rr(data,cnt);\n"); break; - case sz_byte: comprintf("\t ror_b_rr(data,cnt);\n"); break; - } - - if (!noflags) { - comprintf("\tstart_needflags();\n"); - comprintf("\tif (needed_flags & FLAG_ZNV)\n"); - switch(curi->size) { - case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; - case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; - case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; - } - switch(curi->size) { - case sz_byte: comprintf("\t bt_l_ri(data,0x07);\n"); break; - case sz_word: comprintf("\t bt_l_ri(data,0x0f);\n"); break; - case sz_long: comprintf("\t bt_l_ri(data,0x1f);\n"); break; - } - comprintf("\t live_flags();\n"); - comprintf("\t end_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: - 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", 1, 0); - /* 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: - uses_fpu; -#ifdef USE_JIT_FPU - mayfail; - comprintf("\tuae_u16 extra=%s;\n",gen_nextiword()); - swap_opcode(); - comprintf("\tcomp_fpp_opp(opcode,extra);\n"); -#else - failure; -#endif - break; - case i_FBcc: - uses_fpu; -#ifdef USE_JIT_FPU - isjump; - uses_cmov; - mayfail; - swap_opcode(); - comprintf("\tcomp_fbcc_opp(opcode);\n"); -#else - isjump; - failure; -#endif - break; - case i_FDBcc: - uses_fpu; - isjump; - failure; - break; - case i_FScc: - uses_fpu; -#ifdef USE_JIT_FPU - mayfail; - uses_cmov; - comprintf("\tuae_u16 extra=%s;\n",gen_nextiword()); - swap_opcode(); - comprintf("\tcomp_fscc_opp(opcode,extra);\n"); -#else - failure; -#endif - 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(0, 3);\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: - genmov16(opcode,curi); - break; - - 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: - isjump; - failure; - break; - default: - abort (); - break; - } - comprintf("%s",endstr); - finish_braces (); - sync_m68k_pc (); - if (global_mayfail) - comprintf("\tif (failure) m68k_pc_offset=m68k_pc_offset_thisinst;\n"); - return global_failure; } -static void -generate_includes (FILE * f) +static void gen_divu(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", sz_word, "src", 1, 0); + genamode(curi->dmode, "dstreg", sz_word, "dst", 1, 0); + + comprintf("\tint tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\tjff_DIVU(tmp,dst,src);\n"); + comprintf("\tlive_flags();\n"); + } else { + comprintf("\tjnf_DIVU(tmp,dst,src);\n"); + } + + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); +} + +static void gen_eor(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); + + comprintf("\t dont_care_flags();\n"); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t jff_EOR_%s(tmp,dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_EOR(tmp,dst,src);\n"); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); +} + +static void gen_eorsr(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_EORSR(ARM_CCR_MAP[src & 0xF], ((src & 0x10) >> 4));\n"); + comprintf("\t live_flags();\n"); + } +} + +static void gen_exg(uae_u32 opcode, struct instr *curi, char* ssize) { +#if 0 +#else + (void) opcode; + (void) ssize; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); + 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"); +#endif +} + +static void gen_ext(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", sz_long, "src", 1, 0); + comprintf("\t dont_care_flags();\n"); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t jff_EXT_%s(tmp,src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_EXT_%s(tmp,src);\n", ssize); + } + genastore("tmp", curi->smode, "srcreg", + curi->size == sz_word ? sz_word : sz_long, "src"); +} + +static void gen_lsl(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + 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", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "data", 1, 0); + comprintf("\t int tmp=scratchie++;\n"); + if (curi->smode != immi) { + if (!noflags) { + start_brace(); + comprintf("\t jff_LSL_%s_reg(tmp,data,cnt);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf( + "\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + start_brace(); + comprintf("\t jnf_LSL_reg(tmp,data,cnt);\n"); + } + } else { + start_brace(); + if (!noflags) { + comprintf("\t jff_LSL_%s_imm(tmp,data,srcreg);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf( + "\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_LSL_imm(tmp,data,srcreg);\n"); + } + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "data"); +} + +static void gen_lslw(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t jff_LSLW(tmp,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_LSLW(tmp,src);\n"); + } + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_lsr(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + mayfail; + if (curi->smode == Dreg) { + comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + "} \n"); + start_brace(); + } + comprintf("\t dont_care_flags();\n"); + + genamode(curi->smode, "srcreg", curi->size, "cnt", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "data", 1, 0); + comprintf("\t int tmp=scratchie++;\n"); + if (curi->smode != immi) { + if (!noflags) { + start_brace(); + comprintf("\t jff_LSR_%s_reg(tmp,data,cnt);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + start_brace(); + comprintf("\t jnf_LSR_%s_reg(tmp,data,cnt);\n", ssize); + } + } else { + start_brace(); + char *op; + if (!noflags) { + op = "ff"; + } else + op = "nf"; + + comprintf("\t j%s_LSR_%s_imm(tmp,data,srcreg);\n", op, ssize); + + if (!noflags) { + comprintf("\t live_flags();\n"); + comprintf( + "\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "data"); +} + +static void gen_lsrw(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + start_brace(); + comprintf("\t int tmp = scratchie++;\n"); + + if (!noflags) { + comprintf("\t jff_LSRW(tmp,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_LSRW(tmp,src);\n"); + } + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_move(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + switch (curi->dmode) { + case Dreg: + case Areg: + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 2, 0); + comprintf("\t dont_care_flags();\n"); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags && curi->dmode == Dreg) { + comprintf("\t jff_MOVE_%s(tmp, src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t tmp = src;\n"); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); + break; + + default: /* It goes to memory, not a register */ + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 2, 0); + comprintf("\t dont_care_flags();\n"); + start_brace(); + if (!noflags) { + comprintf("\t jff_TST_%s(src);\n", ssize); + comprintf("\t live_flags();\n"); + } + genastore("src", curi->dmode, "dstreg", curi->size, "dst"); + break; + } +} + +static void gen_movea(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 2, 0); + + start_brace(); + comprintf("\t jnf_MOVEA_%s(dst, src);\n", ssize); + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); +} + +static void gen_mull(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t uae_u16 extra=%s;\n", gen_nextiword()); + comprintf("\t int r2=(extra>>12)&7;\n" + "\t int tmp=scratchie++;\n"); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); + /* The two operands are in dst and r2 */ + if (!noflags) { + comprintf("\t if (extra & 0x0400) {\n"); /* Need full 64 bit result */ + comprintf("\t int r3=(extra & 7);\n"); + comprintf("\t mov_l_rr(r3,dst);\n"); /* operands now in r3 and r2 */ + comprintf("\t if (extra & 0x0800) { \n"); /* signed */ + comprintf("\t\t jff_MULS64(r2,r3);\n"); + comprintf("\t } else { \n"); + comprintf("\t\t jff_MULU64(r2,r3);\n"); + comprintf("\t } \n"); /* The result is in r2/r3, with r2 holding the lower 32 bits */ + comprintf("\t } else {\n"); /* Only want 32 bit result */ + /* operands in dst and r2, result goes into r2 */ + /* shouldn't matter whether it's signed or unsigned?!? */ + comprintf("\t if (extra & 0x0800) { \n"); /* signed */ + comprintf("\t jff_MULS32(r2,dst);\n"); + comprintf("\t } else { \n"); + comprintf("\t\t jff_MULU32(r2,dst);\n"); + comprintf("\t } \n"); /* The result is in r2, with r2 holding the lower 32 bits */ + comprintf("\t }\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t if (extra & 0x0400) {\n"); /* Need full 64 bit result */ + comprintf("\t int r3=(extra & 7);\n"); + comprintf("\t mov_l_rr(r3,dst);\n"); /* operands now in r3 and r2 */ + comprintf("\t if (extra & 0x0800) { \n"); /* signed */ + comprintf("\t\t jnf_MULS64(r2,r3);\n"); + comprintf("\t } else { \n"); + comprintf("\t\t jnf_MULU64(r2,r3);\n"); + comprintf("\t } \n"); /* The result is in r2/r3, 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("\t if (extra & 0x0800) { \n"); /* signed */ + comprintf("\t jnf_MULS32(r2,dst);\n"); + comprintf("\t } else { \n"); + comprintf("\t\t jnf_MULU32(r2,dst);\n"); + comprintf("\t } \n"); /* The result is in r2, with r2 holding the lower 32 bits */ + comprintf("\t }\n"); + } +} + +static void gen_muls(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", sz_word, "src", 1, 0); + genamode(curi->dmode, "dstreg", sz_word, "dst", 1, 0); + start_brace(); + if (!noflags) { + comprintf("\t jff_MULS(dst,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_MULS(dst,src);\n"); + } + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); +} + +static void gen_mulu(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", sz_word, "src", 1, 0); + genamode(curi->dmode, "dstreg", sz_word, "dst", 1, 0); + start_brace(); + if (!noflags) { + comprintf("\t jff_MULU(dst,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_MULU(dst,src);\n"); + } + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); +} + +static void gen_neg(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t jff_NEG_%s(tmp,src);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf("\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_NEG_%s(tmp,src);\n", ssize); + } + + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_negx(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + isaddx; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + start_brace(); + comprintf("\t int dst=scratchie++;\n"); + + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_NEGX_%s(dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf("\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_NEGX_%s(dst,src);\n", ssize); + } + + genastore("dst", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_not(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + comprintf("\t dont_care_flags();\n"); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t jff_NOT_%s(tmp,src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_NOT(tmp,src);\n", ssize); + } + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_or(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); + + comprintf("\t dont_care_flags();\n"); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t jff_OR_%s(tmp, dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_OR(tmp, dst,src);\n"); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); +} + +static void gen_orsr(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_ORSR(ARM_CCR_MAP[src & 0xF], ((src & 0x10) >> 4));\n"); + comprintf("\t live_flags();\n"); + } +} + +static void gen_rol(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + mayfail; + if (curi->smode == Dreg) { + comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + "} \n"); + start_brace(); + } + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "cnt", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "data", 1, 0); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + + if (!noflags) { + comprintf("\t jff_ROL_%s(tmp,data,cnt);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_ROL_%s(tmp,data,cnt);\n", ssize); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "data"); +} + +static void gen_rolw(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + start_brace(); + comprintf("\t int tmp = scratchie++;\n"); + + if (!noflags) { + comprintf("\t jff_ROLW(tmp,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_ROLW(tmp,src);\n"); + } + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_ror(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + mayfail; + if (curi->smode == Dreg) { + comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + "} \n"); + start_brace(); + } + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "cnt", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "data", 1, 0); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + + if (!noflags) { + comprintf("\t jff_ROR_%s(tmp,data,cnt);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_ROR_%s(tmp,data,cnt);\n", ssize); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "data"); +} + +static void gen_rorw(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + start_brace(); + comprintf("\t int tmp = scratchie++;\n"); + + if (!noflags) { + comprintf("\t jff_RORW(tmp,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_RORW(tmp,src);\n"); + } + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_roxl(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + mayfail; + if (curi->smode == Dreg) { + comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + "} \n"); + start_brace(); + } + isaddx; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "cnt", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "data", 1, 0); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_ROXL_%s(tmp,data,cnt);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_ROXL_%s(tmp,data,cnt);\n", ssize); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "data"); +} + +static void gen_roxlw(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + isaddx; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + start_brace(); + comprintf("\t int tmp = scratchie++;\n"); + + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_ROXLW(tmp,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_ROXLW(tmp,src);\n"); + } + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_roxr(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + mayfail; + if (curi->smode == Dreg) { + comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" + " FAIL(1);\n" + " " RETURN "\n" + "} \n"); + start_brace(); + } + isaddx; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "cnt", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "data", 1, 0); + start_brace(); + comprintf("\t int tmp=scratchie++;\n"); + + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_ROXR_%s(tmp,data,cnt);\n", ssize); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_ROXR_%s(tmp,data,cnt);\n", ssize); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "data"); +} + +static void gen_roxrw(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + isaddx; + comprintf("\t dont_care_flags();\n"); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + start_brace(); + comprintf("\t int tmp = scratchie++;\n"); + + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_ROXRW(tmp,src);\n"); + comprintf("\t live_flags();\n"); + } else { + comprintf("\t jnf_ROXRW(tmp,src);\n"); + } + genastore("tmp", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_scc(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + genamode(curi->smode, "srcreg", curi->size, "src", 2, 0); + start_brace(); + comprintf("\tint val = scratchie++;\n"); + + switch (curi->cc) { + case 0: /* Unconditional set */ + comprintf("\tmov_l_ri(val, 0xff);\n"); + break; + case 1: + /* Unconditional not-set */ + comprintf("\tmov_l_ri(val, 0);\n"); + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + comprintf("\tmake_flags_live();\n"); /* Load the flags */ + comprintf("\tjnf_SCC(val, %d);\n", cond_codes[curi->cc]); + break; + default: + abort(); + } + genastore("val", curi->smode, "srcreg", curi->size, "src"); +} + +static void gen_sub(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); + + comprintf("\t dont_care_flags();\n"); + start_brace(); + // Use tmp register to avoid destroying upper part in .B., .W cases + comprintf("\t int tmp=scratchie++;\n"); + if (!noflags) { + comprintf("\t jff_SUB_%s(tmp,dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf( + "\t if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_SUB_%s(tmp,dst,src);\n", ssize); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); +} + +static void gen_suba(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", sz_long, "dst", 1, 0); + start_brace(); + comprintf("\t jnf_SUBA_%s(dst, src);\n", ssize); + genastore("dst", curi->dmode, "dstreg", sz_long, "dst"); +} + +static void gen_subx(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + isaddx; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 1, 0); + start_brace(); + comprintf("\tint tmp=scratchie++;\n"); + comprintf("\tdont_care_flags();\n"); + if (!noflags) { + comprintf("\t make_flags_live();\n"); + comprintf("\t jff_SUBX_%s(tmp,dst,src);\n", ssize); + comprintf("\t live_flags();\n"); + comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_SUBX(tmp,dst,src);\n"); + } + genastore("tmp", curi->dmode, "dstreg", curi->size, "dst"); +} + +static void gen_swap(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + (void) ssize; + genamode(curi->smode, "srcreg", sz_long, "src", 1, 0); + comprintf("\t dont_care_flags();\n"); + start_brace(); + + if (!noflags) { + comprintf("\t jff_SWAP(src);\n"); + comprintf("\t live_flags();\n"); + comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); + } else { + comprintf("\t jnf_SWAP(src);\n"); + } + genastore("src", curi->smode, "srcreg", sz_long, "src"); +} + +static void gen_tst(uae_u32 opcode, struct instr *curi, char* ssize) { + (void) opcode; + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + comprintf("\t dont_care_flags();\n"); + if (!noflags) { + start_brace(); + comprintf("\t jff_TST_%s(src);\n", ssize); + comprintf("\t live_flags();\n"); + } +} + +static int /* returns zero for success, non-zero for failure */ +gen_opcode(unsigned long int opcode) { + struct instr *curi = table68k + opcode; + 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: + abort(); + } + (void) ssize; + + switch (curi->mnemo) { + case i_AND: +#ifdef DISABLE_I_OR_AND_EOR + failure; +#endif + gen_and(opcode, curi, ssize); + break; + + case i_OR: +#ifdef DISABLE_I_OR_AND_EOR + failure; +#endif + gen_or(opcode, curi, ssize); + break; + + case i_EOR: +#ifdef DISABLE_I_OR_AND_EOR + failure; +#endif + gen_eor(opcode, curi, ssize); + break; + + case i_ORSR: +#ifdef DISABLE_I_ORSR_EORSR_ANDSR + failure; +#endif + gen_orsr(opcode, curi, ssize); + break; + + case i_EORSR: +#ifdef DISABLE_I_ORSR_EORSR_ANDSR + failure; +#endif + gen_eorsr(opcode, curi, ssize); + break; + + case i_ANDSR: +#ifdef DISABLE_I_ORSR_EORSR_ANDSR + failure; +#endif + gen_andsr(opcode, curi, ssize); + break; + + case i_SUB: +#ifdef DISABLE_I_SUB + failure; +#endif + gen_sub(opcode, curi, ssize); + break; + + case i_SUBA: +#ifdef DISABLE_I_SUBA + failure; +#endif + gen_suba(opcode, curi, ssize); + break; + + case i_SUBX: +#ifdef DISABLE_I_SUBX + failure; +#endif + gen_subx(opcode, curi, ssize); + break; + + case i_SBCD: + failure; + break; + + case i_ADD: +#ifdef DISABLE_I_ADD + failure; +#endif + gen_add(opcode, curi, ssize); + break; + + case i_ADDA: +#ifdef DISABLE_I_ADDA + failure; +#endif + gen_adda(opcode, curi, ssize); + break; + + case i_ADDX: +#ifdef DISABLE_I_ADDX + failure; +#endif + gen_addx(opcode, curi, ssize); + break; + + case i_ABCD: + failure; + break; + + case i_NEG: +#ifdef DISABLE_I_NEG + failure; +#endif + gen_neg(opcode, curi, ssize); + break; + + case i_NEGX: +#ifdef DISABLE_I_NEGX + failure; +#endif + gen_negx(opcode, curi, ssize); + break; + + case i_NBCD: + failure; + break; + + case i_CLR: +#ifdef DISABLE_I_CLR + failure; +#endif + gen_clr(opcode, curi, ssize); + break; + + case i_NOT: +#ifdef DISABLE_I_NOT + failure; +#endif + gen_not(opcode, curi, ssize); + break; + + case i_TST: +#ifdef DISABLE_I_TST + failure; +#endif + gen_tst(opcode, curi, ssize); + break; + + case i_BCHG: +#ifdef DISABLE_I_BCHG_BCLR_BSET_BTST + failure; +#endif + gen_bchg(opcode, curi, ssize); + break; + + case i_BCLR: +#ifdef DISABLE_I_BCHG_BCLR_BSET_BTST + failure; +#endif + gen_bclr(opcode, curi, ssize); + break; + + case i_BSET: +#ifdef DISABLE_I_BCHG_BCLR_BSET_BTST + failure; +#endif + gen_bset(opcode, curi, ssize); + break; + + case i_BTST: +#ifdef DISABLE_I_BCHG_BCLR_BSET_BTST + failure; +#endif + gen_btst(opcode, curi, ssize); + break; + + case i_CMPM: + case i_CMP: +#ifdef DISABLE_I_CMPM_CMP + failure; +#endif + gen_cmp(opcode, curi, ssize); + break; + + case i_CMPA: +#ifdef DISABLE_I_CMPM_CMP + failure; +#endif + gen_cmpa(opcode, curi, ssize); + 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 + gen_move(opcode, curi, ssize); + break; + + case i_MOVEA: +#ifdef DISABLE_I_MOVEA + failure; +#endif + gen_movea(opcode, curi, ssize); + break; + + case i_MVSR2: + isjump; + failure; + break; + + case i_MV2SR: + isjump; + failure; + break; + + case i_SWAP: +#ifdef DISABLE_I_SWAP + failure; +#endif + gen_swap(opcode, curi, ssize); + break; + + case i_EXG: +#ifdef DISABLE_I_EXG + failure; +#endif + gen_exg(opcode, curi, ssize); + break; + + case i_EXT: +#ifdef DISABLE_I_EXT + failure; +#endif + gen_ext(opcode, curi, ssize); + 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: + isjump; + 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", 1, 0); + /* offs is constant */ + comprintf("\tarm_ADD_l_ri8(offs,4);\n"); + start_brace(); + comprintf("\tint newad=scratchie++;\n" + "\treadlong(15,newad,scratchie);\n" + "\tmov_l_mr((uintptr)®s.pc,newad);\n" + "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" + "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" + "\tm68k_pc_offset=0;\n" + "\tarm_ADD_l(15,offs);\n"); + gen_update_next_handler(); + isjump; + break; + + case i_LINK: +#ifdef DISABLE_I_LINK + failure; +#endif + genamode(curi->smode, "srcreg", sz_long, "src", 1, 0); + genamode(curi->dmode, "dstreg", curi->size, "offs", 1, 0); + comprintf("\tsub_l_ri(15,4);\n" + "\twritelong_clobber(15,src,scratchie);\n" + "\tmov_l_rr(src,15);\n"); + comprintf("\tarm_ADD_l(15,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", 1, 0); + comprintf("\tmov_l_rr(15,src);\n" + "\treadlong(15,src,scratchie);\n" + "\tarm_ADD_l_ri8(15,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(15,newad,scratchie);\n" + "\tmov_l_mr((uintptr)®s.pc,newad);\n" + "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" + "\tmov_l_mr((uintptr)®s.pc_oldp,PC_P);\n" + "\tm68k_pc_offset=0;\n" + "\tarm_ADD_l_ri8(15,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", 0, 0); + start_brace(); + 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" + "\tsub_l_ri(15,4);\n" + "\twritelong_clobber(15,ret,scratchie);\n"); + comprintf("\tmov_l_mr((uintptr)®s.pc,srca);\n" + "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" + "\tmov_l_mr((uintptr)®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", 0, 0); + comprintf("\tmov_l_mr((uintptr)®s.pc,srca);\n" + "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" + "\tmov_l_mr((uintptr)®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", 1, 0); + start_brace(); + 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" + "\tsub_l_ri(15,4);\n" + "\twritelong_clobber(15,ret,scratchie);\n"); + comprintf("\tarm_ADD_l_ri(src,m68k_pc_offset_thisinst+2);\n"); + comprintf("\tm68k_pc_offset=0;\n"); + comprintf("\tarm_ADD_l(PC_P,src);\n"); + comprintf("\tcomp_pc_p=(uae_u8*)(uintptr)get_const(PC_P);\n"); + break; + + case i_Bcc: +#ifdef DISABLE_I_BCC + failure; +#endif + comprintf("\tuae_u32 v1, v2;\n"); + genamode(curi->smode, "srcreg", curi->size, "src", 1, 0); + /* That source is an immediate, so we can clobber it with abandon */ + 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("\tarm_ADD_l_ri(src, (uintptr)comp_pc_p);\n"); + comprintf("\tmov_l_ri(PC_P, (uintptr)comp_pc_p);\n"); + /* Now they are both constant. Might as well fold in m68k_pc_offset */ + comprintf("\tarm_ADD_l_ri(src, m68k_pc_offset);\n"); + comprintf("\tarm_ADD_l_ri(PC_P, m68k_pc_offset);\n"); + comprintf("\tm68k_pc_offset = 0;\n"); + + if (curi->cc >= 2) { + comprintf("\tv1 = get_const(PC_P);\n"); + comprintf("\tv2 = get_const(src);\n"); + comprintf("\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: + abort(); + } + break; + + case i_LEA: +#ifdef DISABLE_I_LEA + failure; +#endif + genamode(curi->smode, "srcreg", curi->size, "src", 0, 0); + genamode(curi->dmode, "dstreg", curi->size, "dst", 2, 0); + 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", 0, 0); + genamode(Apdi, "7", sz_long, "dst", 2, 0); + genastore("srca", Apdi, "7", sz_long, "dst"); + break; + + case i_DBcc: +#ifdef DISABLE_I_DBCC + failure; +#endif + gen_dbcc(opcode, curi, ssize); + break; + + case i_Scc: +#ifdef DISABLE_I_SCC + failure; +#endif + gen_scc(opcode, curi, ssize); + break; + + case i_DIVU: +#ifdef DISABLE_I_DIVU + isjump; + failure; +#endif + gen_divu(opcode, curi, ssize); + break; + + case i_DIVS: + isjump; + failure; + break; + + case i_MULU: +#ifdef DISABLE_I_MULU + failure; +#endif + gen_mulu(opcode, curi, ssize); + break; + + case i_MULS: +#ifdef DISABLE_I_MULS + failure; +#endif + gen_muls(opcode, curi, ssize); + break; + + case i_CHK: + isjump; + failure; + break; + + case i_CHK2: + isjump; + failure; + break; + + case i_ASR: +#ifdef DISABLE_I_ASR + failure; +#endif + gen_asr(opcode, curi, ssize); + break; + + case i_ASL: +#ifdef DISABLE_I_ASL + failure; +#endif + gen_asl(opcode, curi, ssize); + break; + + case i_LSR: +#ifdef DISABLE_I_LSR + failure; +#endif + gen_lsr(opcode, curi, ssize); + break; + + case i_LSL: +#ifdef DISABLE_I_LSL + failure; +#endif + gen_lsl(opcode, curi, ssize); + break; + + case i_ROL: +#ifdef DISABLE_I_ROL + failure; +#endif + gen_rol(opcode, curi, ssize); + break; + + case i_ROR: +#ifdef DISABLE_I_ROR + failure; +#endif + gen_ror(opcode, curi, ssize); + break; + + case i_ROXL: +#ifdef DISABLE_I_ROXL + failure; +#endif + gen_roxl(opcode, curi, ssize); + break; + + case i_ROXR: +#ifdef DISABLE_I_ROXR + failure; +#endif + gen_roxr(opcode, curi, ssize); + break; + + case i_ASRW: +#ifdef DISABLE_I_ASRW + failure; +#endif + gen_asrw(opcode, curi, ssize); + break; + + case i_ASLW: +#ifdef DISABLE_I_ASLW + failure; +#endif + gen_aslw(opcode, curi, ssize); + break; + + case i_LSRW: +#ifdef DISABLE_I_LSRW + failure; +#endif + gen_lsrw(opcode, curi, ssize); + break; + + case i_LSLW: +#ifdef DISABLE_I_LSLW + failure; +#endif + gen_lslw(opcode, curi, ssize); + break; + + case i_ROLW: +#ifdef DISABLE_I_ROLW + failure; +#endif + gen_rolw(opcode, curi, ssize); + break; + + case i_RORW: +#ifdef DISABLE_I_RORW + failure; +#endif + gen_rorw(opcode, curi, ssize); + break; + + case i_ROXLW: +#ifdef DISABLE_I_ROXLW + failure; +#endif + gen_roxlw(opcode, curi, ssize); + break; + + case i_ROXRW: +#ifdef DISABLE_I_ROXRW + failure; +#endif + gen_roxrw(opcode, curi, ssize); + 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 + gen_mull(opcode, curi, ssize); + 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 + 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 + 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(0, 3);\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 + gen_move16(opcode, curi); + break; + + 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: + isjump; + failure; + break; + + default: + abort(); + break; + } + comprintf("%s", endstr); + finish_braces(); + sync_m68k_pc(); + if (global_mayfail) + comprintf("\tif (failure) m68k_pc_offset=m68k_pc_offset_thisinst;\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"); - fprintf (f, "#include \"options.h\"\n"); - fprintf (f, "#include \"memory.h\"\n"); - fprintf (f, "#include \"custom.h\"\n"); - fprintf (f, "#include \"events.h\"\n"); - fprintf (f, "#include \"newcpu.h\"\n"); - fprintf (f, "#include \"comptbl.h\"\n"); - fprintf (f, "#include \"debug.h\"\n"); + fprintf (f, "#include \"sysconfig.h\"\n"); + fprintf (f, "#if defined(JIT)\n"); + fprintf(f, "#include \"sysdeps.h\"\n"); + fprintf (f, "#include \"options.h\"\n"); + fprintf(f, "#include \"memory.h\"\n"); + fprintf(f, "#include \"newcpu.h\"\n"); + fprintf (f, "#include \"custom.h\"\n"); + fprintf(f, "#include \"comptbl.h\"\n"); + fprintf(f, "#include \"debug.h\"\n"); } static int postfix; -static void -generate_one_opcode (int rp, int noflags) +static void +generate_one_opcode(int rp, int noflags) { - int i; - uae_u16 smsk, dmsk; - long int opcode = opcode_map[rp]; - int aborted=0; - int have_srcreg=0; - int have_dstreg=0; + int i; + uae_u16 smsk, dmsk; + unsigned int opcode = opcode_map[rp]; + int aborted = 0; + int have_srcreg = 0; + int have_dstreg = 0; - if (table68k[opcode].mnemo == i_ILLG - || table68k[opcode].clev > cpu_level) - return; + 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; - - 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; - case 6: smsk = 255; break; - case 7: smsk = 3; break; - default: abort (); - } - 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); + for (i = 0; lookuptab[i].name[0]; i++) + { + if (table68k[opcode].mnemo == lookuptab[i].mnemo) + break; } - else - { - char source[100]; - int pos = table68k[opcode].spos; - comprintf ("#ifdef HAVE_GET_WORD_UNSWAPPED\n"); - - 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].handler != -1) + return; - 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"); + 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; + case 6: + smsk = 255; + break; + case 7: + smsk = 3; + break; + default: + abort(); } - } - if (table68k[opcode].duse + 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; + + 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); + } + } + 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) + && table68k[opcode].dmode != imm1 && table68k[opcode].dmode != imm2 + && table68k[opcode].dmode != absw && table68k[opcode].dmode != absl) + { + have_dstreg = 1; + if (table68k[opcode].dpos == -1) { - 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; - - comprintf ("#ifdef HAVE_GET_WORD_UNSWAPPED\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"); - - if (pos) - comprintf ("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", - pos, dmsk); - else - comprintf ("\tuae_u32 dstreg = opcode & %d;\n", dmsk); - - comprintf ("#endif\n"); - } - } - - 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); + 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 flags=0; - if (global_isjump) flags|=1; - if (long_opcode) flags|=2; - if (global_cmov) flags|=4; - if (global_isaddx) flags|=8; - if (global_iscjump) flags|=16; - if (global_fpu) flags|=32; - comprintf ("return 0;\n"); - comprintf ("}\n"); + int pos = table68k[opcode].dpos; - if (aborted) { - fprintf (stblfile, "{ NULL, 0x%08x, %ld }, /* %s */\n", flags, opcode, lookuptab[i].name); - com_discard(); - } else { - if (noflags) { - fprintf (stblfile, "{ op_%lx_%d_comp_nf, 0x%08x, %ld }, /* %s */\n", opcode, postfix, flags, opcode, lookuptab[i].name); - fprintf (headerfile, "extern compop_func op_%lx_%d_comp_nf;\n", opcode, postfix); - printf ("unsigned long REGPARAM2 op_%lx_%d_comp_nf(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, lookuptab[i].name); - } else { - fprintf (stblfile, "{ op_%lx_%d_comp_ff, 0x%08x, %ld }, /* %s */\n", opcode, postfix, flags, opcode, lookuptab[i].name); - fprintf (headerfile, "extern compop_func op_%lx_%d_comp_ff;\n", opcode, postfix); - printf ("unsigned long REGPARAM2 op_%lx_%d_comp_ff(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, lookuptab[i].name); - } - com_flush(); + if (pos) + comprintf("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", + pos, dmsk); + else + comprintf("\tuae_u32 dstreg = opcode & %d;\n", dmsk); + } } - } - opcode_next_clev[rp] = next_cpu_level; - opcode_last_postfix[rp] = postfix; + + 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); + { + int flags = 0; + if (global_isjump) flags |= 1; + if (long_opcode) flags |= 2; + if (global_cmov) flags |= 4; + if (global_isaddx) flags |= 8; + if (global_iscjump) flags |= 16; + if (global_fpu) flags |= 32; + + comprintf ("return 0;\n"); + comprintf("}\n"); + + char name[100] = { 0 }; + for (int k = 0; lookuptab[i].name[k]; k++) + name[k] = lookuptab[i].name[k]; + + if (aborted) { + fprintf(stblfile, "{ NULL, 0x%08x, %ld }, /* %s */\n", flags, opcode, name); + com_discard(); + } else { + if (noflags) { + fprintf(stblfile, "{ op_%lx_%d_comp_nf, 0x%08x, %ld }, /* %s */\n", opcode, postfix, flags, opcode, name); + fprintf(headerfile, "extern compop_func op_%lx_%d_comp_nf;\n", opcode, postfix); + printf("unsigned long REGPARAM2 op_%lx_%d_comp_nf(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, name); + } else { + fprintf(stblfile, "{ op_%lx_%d_comp_ff, 0x%08x, %ld }, /* %s */\n", opcode, postfix, flags, opcode, name); + fprintf(headerfile, "extern compop_func op_%lx_%d_comp_ff;\n", opcode, postfix); + printf("unsigned long REGPARAM2 op_%lx_%d_comp_ff(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, name); + } + com_flush(); + } + } + opcode_next_clev[rp] = next_cpu_level; + opcode_last_postfix[rp] = postfix; } -static void -generate_func (int noflags) +static void +generate_func(int noflags) { - int i, j, rp; + int i, j, rp; - using_prefetch = 0; - using_exception_3 = 0; - for (i = 0; i < 1; i++) /* We only do one level! */ - { - cpu_level = 5 - i; - postfix = i; - - if (noflags) - fprintf (stblfile, "extern const struct comptbl op_smalltbl_%d_comp_nf[] = {\n", postfix); - else - fprintf (stblfile, "extern const struct comptbl op_smalltbl_%d_comp_ff[] = {\n", postfix); - - - /* 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" - "extern void comp_fpp_opp();\n" - "extern void comp_fscc_opp();\n" - "extern void comp_fbcc_opp();\n\n"); - - rp = 0; - for (j = 1; j <= 8; ++j) + using_prefetch = 0; + using_exception_3 = 0; + for (i = 0; i < 1; i++) /* We only do one level! */ { - 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"); - } + cpu_level = 5 - i; + postfix = i; - fprintf (stblfile, "{ 0, 0,65536 }};\n"); - } + if (noflags) + fprintf(stblfile, "extern const struct comptbl op_smalltbl_%d_comp_nf[] = {\n", postfix); + else + fprintf(stblfile, "extern const struct comptbl op_smalltbl_%d_comp_ff[] = {\n", postfix); + + /* 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"); + printf ("extern void comp_fpp_opp();\n" + "extern void comp_fscc_opp();\n" + "extern void comp_fbcc_opp();\n\n"); + + 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, 0,65536 }};\n"); + } } -int -main (int argc, char **argv) +int main(int argc, char *argv[]) { - read_table68k (); - do_merges (); + read_table68k(); + do_merges(); - 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 (); + opcode_map = xmalloc (int, nr_cpuop_funcs); + opcode_last_postfix = xmalloc (int, nr_cpuop_funcs); + opcode_next_clev = xmalloc (int, nr_cpuop_funcs); + counts = xmalloc (unsigned long, 65536); + 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. */ + /* 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 ("jit/comptbl.h", "wb"); - stblfile = fopen ("jit/compstbl.cpp", "wb"); - freopen ("jit/compemu.cpp", "wb", stdout); + headerfile = fopen("jit/comptbl.h", "wb"); - generate_includes (stdout); - generate_includes (stblfile); + fprintf (headerfile, "" \ + "#ifdef NOFLAGS_SUPPORT\n" \ + "/* 68040 */\n" \ + "extern const struct comptbl op_smalltbl_0_nf[];\n" \ + "#endif\n" \ + "extern const struct comptbl op_smalltbl_0_comp_nf[];\n" \ + "extern const struct comptbl op_smalltbl_0_comp_ff[];\n" \ + ""); - printf("#include \"compemu.h\"\n"); + stblfile = fopen("jit/compstbl.cpp", "wb"); + freopen("jit/compemu.cpp", "wb", stdout); - noflags=0; - generate_func (noflags); + generate_includes(stdout); + generate_includes(stblfile); + + printf("#include \"compemu.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); + opcode_map = xmalloc (int, nr_cpuop_funcs); + opcode_last_postfix = xmalloc (int, nr_cpuop_funcs); + opcode_next_clev = xmalloc (int, nr_cpuop_funcs); + counts = xmalloc (unsigned long, 65536); + 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); - printf ("#endif\n"); - fprintf (stblfile, "#endif\n"); - - free (table68k); - fclose (stblfile); - fclose (headerfile); - return 0; + free(table68k); + fclose(stblfile); + fclose(headerfile); + return 0; } diff --git a/src/main.cpp b/src/main.cpp index 7581431f..7e29bf67 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -529,6 +529,8 @@ static int real_main2 (int argc, TCHAR **argv) currprefs.produce_sound = 0; } + inputdevice_init(); + changed_prefs = currprefs; no_gui = ! currprefs.start_gui; if (restart_program == 2) @@ -552,7 +554,7 @@ static int real_main2 (int argc, TCHAR **argv) update_display(&currprefs); } - inputdevice_init(); + fixup_prefs (&currprefs); changed_prefs = currprefs; diff --git a/src/md-pandora/m68k.h b/src/md-pandora/m68k.h index bb200f4b..6422e479 100644 --- a/src/md-pandora/m68k.h +++ b/src/md-pandora/m68k.h @@ -149,7 +149,7 @@ struct flag_struct { #define IOR_CZNV(X) (regs.ccrflags.nzcv |= (X)) #define SET_CZNV(X) (regs.ccrflags.nzcv = (X)) -#define COPY_CARRY() (regs.ccrflags.x = (regs.ccrflags.nzcv)>>29) +#define COPY_CARRY() (regs.ccrflags.x = ((regs.ccrflags.nzcv >> 29) & 1)) static inline int cctrue(struct flag_struct &flags, int cc) { diff --git a/src/newcpu.cpp b/src/newcpu.cpp index 39a351ff..774ca5b1 100644 --- a/src/newcpu.cpp +++ b/src/newcpu.cpp @@ -1742,7 +1742,7 @@ static void m68k_run_2p (void) static void m68k_run_2 (void) { struct regstruct &r = regs; - + for (;;) { r.instruction_pc = m68k_getpc (r); uae_u16 opcode = get_iword2 (r, 0); diff --git a/src/od-gles/gles_gfx.cpp b/src/od-gles/gles_gfx.cpp index 01d5fcb3..5423d3cd 100644 --- a/src/od-gles/gles_gfx.cpp +++ b/src/od-gles/gles_gfx.cpp @@ -215,9 +215,11 @@ int check_prefs_changed_gfx (void) changed = 1; } if (currprefs.leds_on_screen != changed_prefs.leds_on_screen || + currprefs.pandora_hide_idle_led != changed_prefs.pandora_hide_idle_led || currprefs.pandora_vertical_offset != changed_prefs.pandora_vertical_offset) { currprefs.leds_on_screen = changed_prefs.leds_on_screen; + currprefs.pandora_hide_idle_led = changed_prefs.pandora_hide_idle_led; currprefs.pandora_vertical_offset = changed_prefs.pandora_vertical_offset; changed = 1; } @@ -276,7 +278,7 @@ void flush_screen () last_synctime = read_processor_time(); - if(last_synctime - next_synctime > time_per_frame - 1000) + if(last_synctime - next_synctime > time_per_frame - 1000 || next_synctime < start) adjust_idletime(0); else adjust_idletime(next_synctime - start); diff --git a/src/od-pandora/gui/Navigation.cpp b/src/od-pandora/gui/Navigation.cpp index 6d172108..ebacc413 100644 --- a/src/od-pandora/gui/Navigation.cpp +++ b/src/od-pandora/gui/Navigation.cpp @@ -37,7 +37,7 @@ static NavigationMap navMap[] = { "Display", "sldWidth", "sldWidth", "Hard drives", "Sound" }, { "Sound", "sndDisable", "sndDisable", "Display", "Input" }, { "Input", "cboCtrlConfig", "cboCtrlConfig", "Sound", "Miscellaneous" }, - { "Miscellaneous", "Status Line", "Status Line", "Input", "Savestates" }, + { "Miscellaneous", "StatusLine", "StatusLine", "Input", "Savestates" }, { "Savestates", "State0", "State0", "Miscellaneous", "Reset" }, { "Reset", "Start", "Quit", "Savestates", "Paths" }, { "Quit", "Reset", "Start", "Savestates", "Paths" }, @@ -216,8 +216,9 @@ static NavigationMap navMap[] = #endif // PanelMisc - { "Status Line", "Miscellaneous", "Miscellaneous", "BSDSocket", "ShowGUI" }, - { "ShowGUI", "Miscellaneous", "Miscellaneous", "Status Line", "BSDSocket" }, + { "StatusLine", "Miscellaneous", "Miscellaneous", "BSDSocket", "HideIdle" }, + { "HideIdle", "Miscellaneous", "Miscellaneous", "StatusLine", "ShowGUI" }, + { "ShowGUI", "Miscellaneous", "Miscellaneous", "HideIdle", "BSDSocket" }, { "BSDSocket", "Miscellaneous", "Miscellaneous", "ShowGUI", "Status Line" }, // PanelSavestate diff --git a/src/od-pandora/gui/PanelMisc.cpp b/src/od-pandora/gui/PanelMisc.cpp index 5a063e9e..eead385e 100644 --- a/src/od-pandora/gui/PanelMisc.cpp +++ b/src/od-pandora/gui/PanelMisc.cpp @@ -21,6 +21,7 @@ static gcn::UaeCheckBox* chkStatusLine; +static gcn::UaeCheckBox* chkHideIdleLed; static gcn::UaeCheckBox* chkShowGUI; #ifdef PANDORA_SPECIFIC static gcn::Label* lblPandoraSpeed; @@ -38,6 +39,9 @@ class MiscActionListener : public gcn::ActionListener if (actionEvent.getSource() == chkStatusLine) changed_prefs.leds_on_screen = chkStatusLine->isSelected(); + else if (actionEvent.getSource() == chkHideIdleLed) + changed_prefs.pandora_hide_idle_led = chkHideIdleLed->isSelected(); + else if (actionEvent.getSource() == chkShowGUI) changed_prefs.start_gui = chkShowGUI->isSelected(); @@ -67,8 +71,13 @@ void InitPanelMisc(const struct _ConfigCategory& category) miscActionListener = new MiscActionListener(); chkStatusLine = new gcn::UaeCheckBox("Status Line"); + chkStatusLine->setId("StatusLine"); chkStatusLine->addActionListener(miscActionListener); + chkHideIdleLed = new gcn::UaeCheckBox("Hide idle led"); + chkHideIdleLed->setId("HideIdle"); + chkHideIdleLed->addActionListener(miscActionListener); + chkShowGUI = new gcn::UaeCheckBox("Show GUI on startup"); chkShowGUI->setId("ShowGUI"); chkShowGUI->addActionListener(miscActionListener); @@ -94,6 +103,8 @@ void InitPanelMisc(const struct _ConfigCategory& category) int posY = DISTANCE_BORDER; category.panel->add(chkStatusLine, DISTANCE_BORDER, posY); posY += chkStatusLine->getHeight() + DISTANCE_NEXT_Y; + category.panel->add(chkHideIdleLed, DISTANCE_BORDER, posY); + posY += chkHideIdleLed->getHeight() + DISTANCE_NEXT_Y; category.panel->add(chkShowGUI, DISTANCE_BORDER, posY); posY += chkShowGUI->getHeight() + DISTANCE_NEXT_Y; #ifdef PANDORA_SPECIFIC @@ -104,6 +115,7 @@ void InitPanelMisc(const struct _ConfigCategory& category) #endif category.panel->add(chkBSDSocket, DISTANCE_BORDER, posY); posY += chkBSDSocket->getHeight() + DISTANCE_NEXT_Y; + RefreshPanelMisc(); } @@ -111,6 +123,7 @@ void InitPanelMisc(const struct _ConfigCategory& category) void ExitPanelMisc(void) { delete chkStatusLine; + delete chkHideIdleLed; delete chkShowGUI; #ifdef PANDORA_SPECIFIC delete lblPandoraSpeed; @@ -127,6 +140,7 @@ void RefreshPanelMisc(void) char tmp[20]; chkStatusLine->setSelected(changed_prefs.leds_on_screen); + chkHideIdleLed->setSelected(changed_prefs.pandora_hide_idle_led); chkShowGUI->setSelected(changed_prefs.start_gui); #ifdef PANDORA_SPECIFIC sldPandoraSpeed->setValue(changed_prefs.pandora_cpu_speed); diff --git a/src/od-pandora/pandora.cpp b/src/od-pandora/pandora.cpp index 4c554b3a..27f088e8 100644 --- a/src/od-pandora/pandora.cpp +++ b/src/od-pandora/pandora.cpp @@ -136,6 +136,7 @@ static bool slow_mouse = false; static bool cpuSpeedChanged = false; static int lastCpuSpeed = 600; +int defaultCpuSpeed = 600; extern "C" int main( int argc, char *argv[] ); @@ -311,8 +312,9 @@ void target_default_options (struct uae_prefs *p, int type) { p->pandora_horizontal_offset = 0; p->pandora_vertical_offset = 0; - p->pandora_cpu_speed = 600; - + p->pandora_cpu_speed = defaultCpuSpeed; + p->pandora_hide_idle_led = 0; + p->pandora_joyConf = 0; p->pandora_joyPort = 2; p->pandora_tapDelay = 10; @@ -346,6 +348,7 @@ void target_default_options (struct uae_prefs *p, int type) void target_save_options (struct zfile *f, struct uae_prefs *p) { cfgfile_write (f, "pandora.cpu_speed", "%d", p->pandora_cpu_speed); + cfgfile_write (f, "pandora.hide_idle_led", "%d", p->pandora_hide_idle_led); cfgfile_write (f, "pandora.joy_conf", "%d", p->pandora_joyConf); cfgfile_write (f, "pandora.joy_port", "%d", p->pandora_joyPort); cfgfile_write (f, "pandora.tap_delay", "%d", p->pandora_tapDelay); @@ -378,6 +381,7 @@ TCHAR *target_expand_environment (const TCHAR *path) int target_parse_option (struct uae_prefs *p, const char *option, const char *value) { int result = (cfgfile_intval (option, value, "cpu_speed", &p->pandora_cpu_speed, 1) + || cfgfile_intval (option, value, "hide_idle_led", &p->pandora_hide_idle_led, 1) || cfgfile_intval (option, value, "joy_conf", &p->pandora_joyConf, 1) || cfgfile_intval (option, value, "joy_port", &p->pandora_joyPort, 1) || cfgfile_intval (option, value, "tap_delay", &p->pandora_tapDelay, 1) @@ -748,38 +752,49 @@ void setCpuSpeed() system("sudo /usr/pandora/scripts/op_lcdrate.sh 50"); } } +int getDefaultCpuSpeed(void) +{ +#ifdef PANDORA_SPECIFIC + int speed = 600; + FILE* f = fopen ("/etc/pandora/conf/cpu.conf", "rt"); + if(f) + { + char line[128]; + for(int i=0; i<6; ++i) + { + fscanf(f, "%s\n", &line); + if(strncmp(line, "default:", 8) == 0) + { + int value = 0; + sscanf(line, "default:%d", &value); + if(value > 500 && value < 1200) + { + speed = value; + } + } + } + fclose(f); + } + return speed; +#else + return; +#endif +} void resetCpuSpeed(void) { -#ifndef PANDORA_SPECIFIC - return; -#endif +#ifdef PANDORA_SPECIFIC if(cpuSpeedChanged) { - FILE* f = fopen ("/etc/pandora/conf/cpu.conf", "rt"); - if(f) - { - char line[128]; - for(int i=0; i<6; ++i) - { - fscanf(f, "%s\n", &line); - if(strncmp(line, "default:", 8) == 0) - { - int value = 0; - sscanf(line, "default:%d", &value); - if(value > 500 && value < 1200) - { - lastCpuSpeed = value - 10; - currprefs.pandora_cpu_speed = changed_prefs.pandora_cpu_speed = value; - setCpuSpeed(); - printf("CPU speed reset to %d\n", value); - } - } - } - fclose(f); - } + lastCpuSpeed = defaultCpuSpeed - 10; + currprefs.pandora_cpu_speed = changed_prefs.pandora_cpu_speed = defaultCpuSpeed; + setCpuSpeed(); + printf("CPU speed reset to %d\n", defaultCpuSpeed); } +#else + return; +#endif } @@ -808,6 +823,8 @@ int main (int argc, char *argv[]) { struct sigaction action; + defaultCpuSpeed = getDefaultCpuSpeed(); + // Get startup path getcwd(start_path_data, MAX_DPATH); loadAdfDir(); @@ -843,7 +860,7 @@ int main (int argc, char *argv[]) rp9_cleanup(); logging_cleanup(); - + // printf("Threads at exit:\n"); // dbg_list_threads(); diff --git a/src/od-pandora/pandora_gfx.cpp b/src/od-pandora/pandora_gfx.cpp index dfb2bf6f..05c9af28 100644 --- a/src/od-pandora/pandora_gfx.cpp +++ b/src/od-pandora/pandora_gfx.cpp @@ -269,9 +269,11 @@ int check_prefs_changed_gfx (void) changed = 1; } if (currprefs.leds_on_screen != changed_prefs.leds_on_screen || + currprefs.pandora_hide_idle_led != changed_prefs.pandora_hide_idle_led || currprefs.pandora_vertical_offset != changed_prefs.pandora_vertical_offset) { currprefs.leds_on_screen = changed_prefs.leds_on_screen; + currprefs.pandora_hide_idle_led = changed_prefs.pandora_hide_idle_led; currprefs.pandora_vertical_offset = changed_prefs.pandora_vertical_offset; changed = 1; } @@ -329,7 +331,7 @@ void flush_screen () if(!screen_is_picasso) gfxvidinfo.bufmem = (uae_u8 *)prSDLScreen->pixels; - if(last_synctime - next_synctime > time_per_frame - 1000) + if(last_synctime - next_synctime > time_per_frame - 1000 || next_synctime < start) adjust_idletime(0); else adjust_idletime(next_synctime - start); diff --git a/src/od-pandora/pandora_mem.cpp b/src/od-pandora/pandora_mem.cpp index 3b07e3ed..334b702a 100644 --- a/src/od-pandora/pandora_mem.cpp +++ b/src/od-pandora/pandora_mem.cpp @@ -17,6 +17,9 @@ uae_u32 natmem_size; static uae_u64 totalAmigaMemSize; #define MAXAMIGAMEM 0x6000000 // 64 MB (16 MB for standard Amiga stuff, 16 MG RTG, 64 MB Z3 fast) +/* JIT can access few bytes outside of memory block of it executes code at the very end of memory block */ +#define BARRIER 32 + static uae_u8* additional_mem = (uae_u8*) MAP_FAILED; #define ADDITIONAL_MEMSIZE (128 + 16) * 1024 * 1024 @@ -56,7 +59,7 @@ void alloc_AmigaMem(void) write_log("Can't allocate 16M of virtual address space!?\n"); abort(); } - additional_mem = (uae_u8*) mmap(natmem_offset + 0x10000000, ADDITIONAL_MEMSIZE, + additional_mem = (uae_u8*) mmap(natmem_offset + 0x10000000, ADDITIONAL_MEMSIZE + BARRIER, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0); if(additional_mem != MAP_FAILED) { @@ -70,7 +73,7 @@ void alloc_AmigaMem(void) // Second attempt: allocate huge memory block for entire area natmem_size = ADDITIONAL_MEMSIZE + 256 * 1024 * 1024; - natmem_offset = (uae_u8*)valloc (natmem_size); + natmem_offset = (uae_u8*)valloc (natmem_size + BARRIER); if(natmem_offset) { // Allocation successful @@ -95,11 +98,11 @@ void alloc_AmigaMem(void) natmem_size = 16 * 1024 * 1024; write_log("Total physical RAM %lluM. Attempting to reserve: %uM.\n", total >> 20, natmem_size >> 20); - natmem_offset = (uae_u8*)valloc (natmem_size); + natmem_offset = (uae_u8*)valloc (natmem_size + BARRIER); if (!natmem_offset) { for (;;) { - natmem_offset = (uae_u8*)valloc (natmem_size); + natmem_offset = (uae_u8*)valloc (natmem_size + BARRIER); if (natmem_offset) break; natmem_size -= 16 * 1024 * 1024; diff --git a/src/od-pandora/pandora_rp9.cpp b/src/od-pandora/pandora_rp9.cpp index a4dd56c1..d2bfb43b 100644 --- a/src/od-pandora/pandora_rp9.cpp +++ b/src/od-pandora/pandora_rp9.cpp @@ -6,6 +6,7 @@ #include "options.h" #include "gui.h" #include "disk.h" +#include "fsdb.h" #include "memory.h" #include "newcpu.h" #include "custom.h" @@ -417,6 +418,8 @@ static void extract_media(struct uae_prefs *p, unzFile uz, xmlNode *node) if(readsize == file_info.uncompressed_size) { char target_file[MAX_DPATH]; + if(!my_existsdir(rp9tmp_path)) + my_mkdir(rp9tmp_path); snprintf(target_file, MAX_DPATH, "%s%s", rp9tmp_path, content); FILE *f = fopen(target_file, "wb"); if(f != NULL) diff --git a/src/od-rasp/rasp_gfx.cpp b/src/od-rasp/rasp_gfx.cpp index 6df0a797..b369579b 100644 --- a/src/od-rasp/rasp_gfx.cpp +++ b/src/od-rasp/rasp_gfx.cpp @@ -317,9 +317,11 @@ int check_prefs_changed_gfx (void) changed = 1; } if (currprefs.leds_on_screen != changed_prefs.leds_on_screen || + currprefs.pandora_hide_idle_led != changed_prefs.pandora_hide_idle_led || currprefs.pandora_vertical_offset != changed_prefs.pandora_vertical_offset) { currprefs.leds_on_screen = changed_prefs.leds_on_screen; + currprefs.pandora_hide_idle_led = changed_prefs.pandora_hide_idle_led; currprefs.pandora_vertical_offset = changed_prefs.pandora_vertical_offset; changed = 1; } @@ -406,7 +408,7 @@ void flush_screen () last_synctime = read_processor_time(); - if(last_synctime - next_synctime > time_per_frame - 1000) + if(last_synctime - next_synctime > time_per_frame - 1000 || next_synctime < start) adjust_idletime(0); else adjust_idletime(next_synctime - start);