Statistics
| Branch: | Revision:

root / target-sh4 / translate.c @ b0b3de89

History | View | Annotate | Download (34 kB)

1 fdf9b3e8 bellard
/*
2 fdf9b3e8 bellard
 *  SH4 translation
3 5fafdf24 ths
 *
4 fdf9b3e8 bellard
 *  Copyright (c) 2005 Samuel Tardieu
5 fdf9b3e8 bellard
 *
6 fdf9b3e8 bellard
 * This library is free software; you can redistribute it and/or
7 fdf9b3e8 bellard
 * modify it under the terms of the GNU Lesser General Public
8 fdf9b3e8 bellard
 * License as published by the Free Software Foundation; either
9 fdf9b3e8 bellard
 * version 2 of the License, or (at your option) any later version.
10 fdf9b3e8 bellard
 *
11 fdf9b3e8 bellard
 * This library is distributed in the hope that it will be useful,
12 fdf9b3e8 bellard
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 fdf9b3e8 bellard
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 fdf9b3e8 bellard
 * Lesser General Public License for more details.
15 fdf9b3e8 bellard
 *
16 fdf9b3e8 bellard
 * You should have received a copy of the GNU Lesser General Public
17 fdf9b3e8 bellard
 * License along with this library; if not, write to the Free Software
18 fdf9b3e8 bellard
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 fdf9b3e8 bellard
 */
20 fdf9b3e8 bellard
#include <stdarg.h>
21 fdf9b3e8 bellard
#include <stdlib.h>
22 fdf9b3e8 bellard
#include <stdio.h>
23 fdf9b3e8 bellard
#include <string.h>
24 fdf9b3e8 bellard
#include <inttypes.h>
25 fdf9b3e8 bellard
#include <assert.h>
26 fdf9b3e8 bellard
27 fdf9b3e8 bellard
#define DEBUG_DISAS
28 fdf9b3e8 bellard
#define SH4_DEBUG_DISAS
29 fdf9b3e8 bellard
//#define SH4_SINGLE_STEP
30 fdf9b3e8 bellard
31 fdf9b3e8 bellard
#include "cpu.h"
32 fdf9b3e8 bellard
#include "exec-all.h"
33 fdf9b3e8 bellard
#include "disas.h"
34 fdf9b3e8 bellard
35 fdf9b3e8 bellard
enum {
36 fdf9b3e8 bellard
#define DEF(s, n, copy_size) INDEX_op_ ## s,
37 fdf9b3e8 bellard
#include "opc.h"
38 fdf9b3e8 bellard
#undef DEF
39 fdf9b3e8 bellard
    NB_OPS,
40 fdf9b3e8 bellard
};
41 fdf9b3e8 bellard
42 fdf9b3e8 bellard
#ifdef USE_DIRECT_JUMP
43 fdf9b3e8 bellard
#define TBPARAM(x)
44 fdf9b3e8 bellard
#else
45 fdf9b3e8 bellard
#define TBPARAM(x) ((long)(x))
46 fdf9b3e8 bellard
#endif
47 fdf9b3e8 bellard
48 fdf9b3e8 bellard
static uint16_t *gen_opc_ptr;
49 fdf9b3e8 bellard
static uint32_t *gen_opparam_ptr;
50 fdf9b3e8 bellard
51 fdf9b3e8 bellard
#include "gen-op.h"
52 fdf9b3e8 bellard
53 fdf9b3e8 bellard
typedef struct DisasContext {
54 fdf9b3e8 bellard
    struct TranslationBlock *tb;
55 fdf9b3e8 bellard
    target_ulong pc;
56 fdf9b3e8 bellard
    uint32_t sr;
57 eda9b09b bellard
    uint32_t fpscr;
58 fdf9b3e8 bellard
    uint16_t opcode;
59 fdf9b3e8 bellard
    uint32_t flags;
60 fdf9b3e8 bellard
    int memidx;
61 fdf9b3e8 bellard
    uint32_t delayed_pc;
62 fdf9b3e8 bellard
    int singlestep_enabled;
63 fdf9b3e8 bellard
} DisasContext;
64 fdf9b3e8 bellard
65 fdf9b3e8 bellard
#ifdef CONFIG_USER_ONLY
66 fdf9b3e8 bellard
67 eda9b09b bellard
#define GEN_OP_LD(width, reg) \
68 eda9b09b bellard
  void gen_op_ld##width##_T0_##reg (DisasContext *ctx) { \
69 eda9b09b bellard
    gen_op_ld##width##_T0_##reg##_raw(); \
70 fdf9b3e8 bellard
  }
71 eda9b09b bellard
#define GEN_OP_ST(width, reg) \
72 eda9b09b bellard
  void gen_op_st##width##_##reg##_T1 (DisasContext *ctx) { \
73 eda9b09b bellard
    gen_op_st##width##_##reg##_T1_raw(); \
74 fdf9b3e8 bellard
  }
75 fdf9b3e8 bellard
76 fdf9b3e8 bellard
#else
77 fdf9b3e8 bellard
78 eda9b09b bellard
#define GEN_OP_LD(width, reg) \
79 eda9b09b bellard
  void gen_op_ld##width##_T0_##reg (DisasContext *ctx) { \
80 eda9b09b bellard
    if (ctx->memidx) gen_op_ld##width##_T0_##reg##_kernel(); \
81 eda9b09b bellard
    else gen_op_ld##width##_T0_##reg##_user();\
82 fdf9b3e8 bellard
  }
83 eda9b09b bellard
#define GEN_OP_ST(width, reg) \
84 eda9b09b bellard
  void gen_op_st##width##_##reg##_T1 (DisasContext *ctx) { \
85 eda9b09b bellard
    if (ctx->memidx) gen_op_st##width##_##reg##_T1_kernel(); \
86 eda9b09b bellard
    else gen_op_st##width##_##reg##_T1_user();\
87 fdf9b3e8 bellard
  }
88 fdf9b3e8 bellard
89 fdf9b3e8 bellard
#endif
90 fdf9b3e8 bellard
91 eda9b09b bellard
GEN_OP_LD(ub, T0)
92 eda9b09b bellard
GEN_OP_LD(b, T0)
93 eda9b09b bellard
GEN_OP_ST(b, T0)
94 eda9b09b bellard
GEN_OP_LD(uw, T0)
95 eda9b09b bellard
GEN_OP_LD(w, T0)
96 eda9b09b bellard
GEN_OP_ST(w, T0)
97 eda9b09b bellard
GEN_OP_LD(l, T0)
98 eda9b09b bellard
GEN_OP_ST(l, T0)
99 eda9b09b bellard
GEN_OP_LD(fl, FT0)
100 eda9b09b bellard
GEN_OP_ST(fl, FT0)
101 eda9b09b bellard
GEN_OP_LD(fq, DT0)
102 eda9b09b bellard
GEN_OP_ST(fq, DT0)
103 fdf9b3e8 bellard
104 fdf9b3e8 bellard
void cpu_dump_state(CPUState * env, FILE * f,
105 fdf9b3e8 bellard
                    int (*cpu_fprintf) (FILE * f, const char *fmt, ...),
106 fdf9b3e8 bellard
                    int flags)
107 fdf9b3e8 bellard
{
108 fdf9b3e8 bellard
    int i;
109 eda9b09b bellard
    cpu_fprintf(f, "pc=0x%08x sr=0x%08x pr=0x%08x fpscr=0x%08x\n",
110 eda9b09b bellard
                env->pc, env->sr, env->pr, env->fpscr);
111 fdf9b3e8 bellard
    for (i = 0; i < 24; i += 4) {
112 fdf9b3e8 bellard
        cpu_fprintf(f, "r%d=0x%08x r%d=0x%08x r%d=0x%08x r%d=0x%08x\n",
113 fdf9b3e8 bellard
                    i, env->gregs[i], i + 1, env->gregs[i + 1],
114 fdf9b3e8 bellard
                    i + 2, env->gregs[i + 2], i + 3, env->gregs[i + 3]);
115 fdf9b3e8 bellard
    }
116 fdf9b3e8 bellard
    if (env->flags & DELAY_SLOT) {
117 fdf9b3e8 bellard
        cpu_fprintf(f, "in delay slot (delayed_pc=0x%08x)\n",
118 fdf9b3e8 bellard
                    env->delayed_pc);
119 fdf9b3e8 bellard
    } else if (env->flags & DELAY_SLOT_CONDITIONAL) {
120 fdf9b3e8 bellard
        cpu_fprintf(f, "in conditional delay slot (delayed_pc=0x%08x)\n",
121 fdf9b3e8 bellard
                    env->delayed_pc);
122 fdf9b3e8 bellard
    }
123 fdf9b3e8 bellard
}
124 fdf9b3e8 bellard
125 fdf9b3e8 bellard
void cpu_sh4_reset(CPUSH4State * env)
126 fdf9b3e8 bellard
{
127 9c2a9ea1 pbrook
#if defined(CONFIG_USER_ONLY)
128 4c909d14 ths
    env->sr = SR_FD;            /* FD - kernel does lazy fpu context switch */
129 9c2a9ea1 pbrook
#else
130 fdf9b3e8 bellard
    env->sr = 0x700000F0;        /* MD, RB, BL, I3-I0 */
131 9c2a9ea1 pbrook
#endif
132 fdf9b3e8 bellard
    env->vbr = 0;
133 fdf9b3e8 bellard
    env->pc = 0xA0000000;
134 ea6cf6be ths
#if defined(CONFIG_USER_ONLY)
135 ea6cf6be ths
    env->fpscr = FPSCR_PR; /* value for userspace according to the kernel */
136 b0b3de89 bellard
    set_float_rounding_mode(float_round_nearest_even, &env->fp_status); /* ?! */
137 ea6cf6be ths
#else
138 ea6cf6be ths
    env->fpscr = 0x00040001; /* CPU reset value according to SH4 manual */
139 b0b3de89 bellard
    set_float_rounding_mode(float_round_to_zero, &env->fp_status);
140 ea6cf6be ths
#endif
141 fdf9b3e8 bellard
    env->mmucr = 0;
142 fdf9b3e8 bellard
}
143 fdf9b3e8 bellard
144 aaed909a bellard
CPUSH4State *cpu_sh4_init(const char *cpu_model)
145 fdf9b3e8 bellard
{
146 fdf9b3e8 bellard
    CPUSH4State *env;
147 fdf9b3e8 bellard
148 fdf9b3e8 bellard
    env = qemu_mallocz(sizeof(CPUSH4State));
149 fdf9b3e8 bellard
    if (!env)
150 fdf9b3e8 bellard
        return NULL;
151 fdf9b3e8 bellard
    cpu_exec_init(env);
152 fdf9b3e8 bellard
    cpu_sh4_reset(env);
153 fdf9b3e8 bellard
    tlb_flush(env, 1);
154 fdf9b3e8 bellard
    return env;
155 fdf9b3e8 bellard
}
156 fdf9b3e8 bellard
157 fdf9b3e8 bellard
static void gen_goto_tb(DisasContext * ctx, int n, target_ulong dest)
158 fdf9b3e8 bellard
{
159 fdf9b3e8 bellard
    TranslationBlock *tb;
160 fdf9b3e8 bellard
    tb = ctx->tb;
161 fdf9b3e8 bellard
162 fdf9b3e8 bellard
    if ((tb->pc & TARGET_PAGE_MASK) == (dest & TARGET_PAGE_MASK) &&
163 fdf9b3e8 bellard
        !ctx->singlestep_enabled) {
164 fdf9b3e8 bellard
        /* Use a direct jump if in same page and singlestep not enabled */
165 fdf9b3e8 bellard
        if (n == 0)
166 fdf9b3e8 bellard
            gen_op_goto_tb0(TBPARAM(tb));
167 fdf9b3e8 bellard
        else
168 fdf9b3e8 bellard
            gen_op_goto_tb1(TBPARAM(tb));
169 fdf9b3e8 bellard
        gen_op_movl_imm_T0((long) tb + n);
170 fdf9b3e8 bellard
    } else {
171 fdf9b3e8 bellard
        gen_op_movl_imm_T0(0);
172 fdf9b3e8 bellard
    }
173 fdf9b3e8 bellard
    gen_op_movl_imm_PC(dest);
174 fdf9b3e8 bellard
    if (ctx->singlestep_enabled)
175 fdf9b3e8 bellard
        gen_op_debug();
176 fdf9b3e8 bellard
    gen_op_exit_tb();
177 fdf9b3e8 bellard
}
178 fdf9b3e8 bellard
179 fdf9b3e8 bellard
/* Jump to pc after an exception */
180 fdf9b3e8 bellard
static void gen_jump_exception(DisasContext * ctx)
181 fdf9b3e8 bellard
{
182 fdf9b3e8 bellard
    gen_op_movl_imm_T0(0);
183 fdf9b3e8 bellard
    if (ctx->singlestep_enabled)
184 fdf9b3e8 bellard
        gen_op_debug();
185 fdf9b3e8 bellard
    gen_op_exit_tb();
186 fdf9b3e8 bellard
}
187 fdf9b3e8 bellard
188 fdf9b3e8 bellard
static void gen_jump(DisasContext * ctx)
189 fdf9b3e8 bellard
{
190 fdf9b3e8 bellard
    if (ctx->delayed_pc == (uint32_t) - 1) {
191 fdf9b3e8 bellard
        /* Target is not statically known, it comes necessarily from a
192 fdf9b3e8 bellard
           delayed jump as immediate jump are conditinal jumps */
193 fdf9b3e8 bellard
        gen_op_movl_delayed_pc_PC();
194 fdf9b3e8 bellard
        gen_op_movl_imm_T0(0);
195 fdf9b3e8 bellard
        if (ctx->singlestep_enabled)
196 fdf9b3e8 bellard
            gen_op_debug();
197 fdf9b3e8 bellard
        gen_op_exit_tb();
198 fdf9b3e8 bellard
    } else {
199 fdf9b3e8 bellard
        gen_goto_tb(ctx, 0, ctx->delayed_pc);
200 fdf9b3e8 bellard
    }
201 fdf9b3e8 bellard
}
202 fdf9b3e8 bellard
203 fdf9b3e8 bellard
/* Immediate conditional jump (bt or bf) */
204 fdf9b3e8 bellard
static void gen_conditional_jump(DisasContext * ctx,
205 fdf9b3e8 bellard
                                 target_ulong ift, target_ulong ifnott)
206 fdf9b3e8 bellard
{
207 fdf9b3e8 bellard
    int l1;
208 fdf9b3e8 bellard
209 fdf9b3e8 bellard
    l1 = gen_new_label();
210 fdf9b3e8 bellard
    gen_op_jT(l1);
211 fdf9b3e8 bellard
    gen_goto_tb(ctx, 0, ifnott);
212 fdf9b3e8 bellard
    gen_set_label(l1);
213 fdf9b3e8 bellard
    gen_goto_tb(ctx, 1, ift);
214 fdf9b3e8 bellard
}
215 fdf9b3e8 bellard
216 fdf9b3e8 bellard
/* Delayed conditional jump (bt or bf) */
217 fdf9b3e8 bellard
static void gen_delayed_conditional_jump(DisasContext * ctx)
218 fdf9b3e8 bellard
{
219 fdf9b3e8 bellard
    int l1;
220 fdf9b3e8 bellard
221 fdf9b3e8 bellard
    l1 = gen_new_label();
222 9c2a9ea1 pbrook
    gen_op_jdelayed(l1);
223 9c2a9ea1 pbrook
    gen_goto_tb(ctx, 1, ctx->pc);
224 fdf9b3e8 bellard
    gen_set_label(l1);
225 9c2a9ea1 pbrook
    gen_jump(ctx);
226 fdf9b3e8 bellard
}
227 fdf9b3e8 bellard
228 fdf9b3e8 bellard
#define B3_0 (ctx->opcode & 0xf)
229 fdf9b3e8 bellard
#define B6_4 ((ctx->opcode >> 4) & 0x7)
230 fdf9b3e8 bellard
#define B7_4 ((ctx->opcode >> 4) & 0xf)
231 fdf9b3e8 bellard
#define B7_0 (ctx->opcode & 0xff)
232 fdf9b3e8 bellard
#define B7_0s ((int32_t) (int8_t) (ctx->opcode & 0xff))
233 fdf9b3e8 bellard
#define B11_0s (ctx->opcode & 0x800 ? 0xfffff000 | (ctx->opcode & 0xfff) : \
234 fdf9b3e8 bellard
  (ctx->opcode & 0xfff))
235 fdf9b3e8 bellard
#define B11_8 ((ctx->opcode >> 8) & 0xf)
236 fdf9b3e8 bellard
#define B15_12 ((ctx->opcode >> 12) & 0xf)
237 fdf9b3e8 bellard
238 fdf9b3e8 bellard
#define REG(x) ((x) < 8 && (ctx->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB) ? \
239 fdf9b3e8 bellard
                (x) + 16 : (x))
240 fdf9b3e8 bellard
241 fdf9b3e8 bellard
#define ALTREG(x) ((x) < 8 && (ctx->sr & (SR_MD | SR_RB)) != (SR_MD | SR_RB) \
242 fdf9b3e8 bellard
                ? (x) + 16 : (x))
243 fdf9b3e8 bellard
244 eda9b09b bellard
#define FREG(x) (ctx->fpscr & FPSCR_FR ? (x) ^ 0x10 : (x))
245 f09111e0 ths
#define XHACK(x) ((((x) & 1 ) << 4) | ((x) & 0xe))
246 eda9b09b bellard
#define XREG(x) (ctx->fpscr & FPSCR_FR ? XHACK(x) ^ 0x10 : XHACK(x))
247 ea6cf6be ths
#define DREG(x) FREG(x) /* Assumes lsb of (x) is always 0 */
248 eda9b09b bellard
249 fdf9b3e8 bellard
#define CHECK_NOT_DELAY_SLOT \
250 fdf9b3e8 bellard
  if (ctx->flags & (DELAY_SLOT | DELAY_SLOT_CONDITIONAL)) \
251 fdf9b3e8 bellard
  {gen_op_raise_slot_illegal_instruction (); ctx->flags |= BRANCH_EXCEPTION; \
252 fdf9b3e8 bellard
   return;}
253 fdf9b3e8 bellard
254 fdf9b3e8 bellard
void decode_opc(DisasContext * ctx)
255 fdf9b3e8 bellard
{
256 fdf9b3e8 bellard
#if 0
257 fdf9b3e8 bellard
    fprintf(stderr, "Translating opcode 0x%04x\n", ctx->opcode);
258 fdf9b3e8 bellard
#endif
259 fdf9b3e8 bellard
    switch (ctx->opcode) {
260 fdf9b3e8 bellard
    case 0x0019:                /* div0u */
261 fdf9b3e8 bellard
        gen_op_div0u();
262 fdf9b3e8 bellard
        return;
263 fdf9b3e8 bellard
    case 0x000b:                /* rts */
264 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT gen_op_rts();
265 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT;
266 fdf9b3e8 bellard
        ctx->delayed_pc = (uint32_t) - 1;
267 fdf9b3e8 bellard
        return;
268 fdf9b3e8 bellard
    case 0x0028:                /* clrmac */
269 fdf9b3e8 bellard
        gen_op_clrmac();
270 fdf9b3e8 bellard
        return;
271 fdf9b3e8 bellard
    case 0x0048:                /* clrs */
272 fdf9b3e8 bellard
        gen_op_clrs();
273 fdf9b3e8 bellard
        return;
274 fdf9b3e8 bellard
    case 0x0008:                /* clrt */
275 fdf9b3e8 bellard
        gen_op_clrt();
276 fdf9b3e8 bellard
        return;
277 fdf9b3e8 bellard
    case 0x0038:                /* ldtlb */
278 fdf9b3e8 bellard
        assert(0);                /* XXXXX */
279 fdf9b3e8 bellard
        return;
280 c5e814b2 ths
    case 0x002b:                /* rte */
281 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT gen_op_rte();
282 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT;
283 fdf9b3e8 bellard
        ctx->delayed_pc = (uint32_t) - 1;
284 fdf9b3e8 bellard
        return;
285 fdf9b3e8 bellard
    case 0x0058:                /* sets */
286 fdf9b3e8 bellard
        gen_op_sets();
287 fdf9b3e8 bellard
        return;
288 fdf9b3e8 bellard
    case 0x0018:                /* sett */
289 fdf9b3e8 bellard
        gen_op_sett();
290 fdf9b3e8 bellard
        return;
291 fdf9b3e8 bellard
    case 0xfbfb:                /* frchg */
292 eda9b09b bellard
        gen_op_frchg();
293 eda9b09b bellard
        ctx->flags |= MODE_CHANGE;
294 fdf9b3e8 bellard
        return;
295 fdf9b3e8 bellard
    case 0xf3fb:                /* fschg */
296 eda9b09b bellard
        gen_op_fschg();
297 eda9b09b bellard
        ctx->flags |= MODE_CHANGE;
298 fdf9b3e8 bellard
        return;
299 fdf9b3e8 bellard
    case 0x0009:                /* nop */
300 fdf9b3e8 bellard
        return;
301 fdf9b3e8 bellard
    case 0x001b:                /* sleep */
302 fdf9b3e8 bellard
        assert(0);                /* XXXXX */
303 fdf9b3e8 bellard
        return;
304 fdf9b3e8 bellard
    }
305 fdf9b3e8 bellard
306 fdf9b3e8 bellard
    switch (ctx->opcode & 0xf000) {
307 fdf9b3e8 bellard
    case 0x1000:                /* mov.l Rm,@(disp,Rn) */
308 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
309 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
310 fdf9b3e8 bellard
        gen_op_addl_imm_T1(B3_0 * 4);
311 fdf9b3e8 bellard
        gen_op_stl_T0_T1(ctx);
312 fdf9b3e8 bellard
        return;
313 fdf9b3e8 bellard
    case 0x5000:                /* mov.l @(disp,Rm),Rn */
314 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
315 fdf9b3e8 bellard
        gen_op_addl_imm_T0(B3_0 * 4);
316 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
317 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
318 fdf9b3e8 bellard
        return;
319 fdf9b3e8 bellard
    case 0xe000:                /* mov.l #imm,Rn */
320 fdf9b3e8 bellard
        gen_op_movl_imm_rN(B7_0s, REG(B11_8));
321 fdf9b3e8 bellard
        return;
322 fdf9b3e8 bellard
    case 0x9000:                /* mov.w @(disp,PC),Rn */
323 fdf9b3e8 bellard
        gen_op_movl_imm_T0(ctx->pc + 4 + B7_0 * 2);
324 fdf9b3e8 bellard
        gen_op_ldw_T0_T0(ctx);
325 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
326 fdf9b3e8 bellard
        return;
327 fdf9b3e8 bellard
    case 0xd000:                /* mov.l @(disp,PC),Rn */
328 fdf9b3e8 bellard
        gen_op_movl_imm_T0((ctx->pc + 4 + B7_0 * 4) & ~3);
329 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
330 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
331 fdf9b3e8 bellard
        return;
332 fdf9b3e8 bellard
    case 0x7000:                /* add.l #imm,Rn */
333 fdf9b3e8 bellard
        gen_op_add_imm_rN(B7_0s, REG(B11_8));
334 fdf9b3e8 bellard
        return;
335 fdf9b3e8 bellard
    case 0xa000:                /* bra disp */
336 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT
337 fdf9b3e8 bellard
            gen_op_bra(ctx->delayed_pc = ctx->pc + 4 + B11_0s * 2);
338 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT;
339 fdf9b3e8 bellard
        return;
340 fdf9b3e8 bellard
    case 0xb000:                /* bsr disp */
341 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT
342 fdf9b3e8 bellard
            gen_op_bsr(ctx->pc + 4, ctx->delayed_pc =
343 fdf9b3e8 bellard
                       ctx->pc + 4 + B11_0s * 2);
344 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT;
345 fdf9b3e8 bellard
        return;
346 fdf9b3e8 bellard
    }
347 fdf9b3e8 bellard
348 fdf9b3e8 bellard
    switch (ctx->opcode & 0xf00f) {
349 fdf9b3e8 bellard
    case 0x6003:                /* mov Rm,Rn */
350 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
351 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
352 fdf9b3e8 bellard
        return;
353 fdf9b3e8 bellard
    case 0x2000:                /* mov.b Rm,@Rn */
354 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
355 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
356 fdf9b3e8 bellard
        gen_op_stb_T0_T1(ctx);
357 fdf9b3e8 bellard
        return;
358 fdf9b3e8 bellard
    case 0x2001:                /* mov.w Rm,@Rn */
359 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
360 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
361 fdf9b3e8 bellard
        gen_op_stw_T0_T1(ctx);
362 fdf9b3e8 bellard
        return;
363 fdf9b3e8 bellard
    case 0x2002:                /* mov.l Rm,@Rn */
364 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
365 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
366 fdf9b3e8 bellard
        gen_op_stl_T0_T1(ctx);
367 fdf9b3e8 bellard
        return;
368 fdf9b3e8 bellard
    case 0x6000:                /* mov.b @Rm,Rn */
369 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
370 fdf9b3e8 bellard
        gen_op_ldb_T0_T0(ctx);
371 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
372 fdf9b3e8 bellard
        return;
373 fdf9b3e8 bellard
    case 0x6001:                /* mov.w @Rm,Rn */
374 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
375 fdf9b3e8 bellard
        gen_op_ldw_T0_T0(ctx);
376 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
377 fdf9b3e8 bellard
        return;
378 fdf9b3e8 bellard
    case 0x6002:                /* mov.l @Rm,Rn */
379 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
380 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
381 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
382 fdf9b3e8 bellard
        return;
383 fdf9b3e8 bellard
    case 0x2004:                /* mov.b Rm,@-Rn */
384 fdf9b3e8 bellard
        gen_op_dec1_rN(REG(B11_8));
385 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
386 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
387 fdf9b3e8 bellard
        gen_op_stb_T0_T1(ctx);
388 fdf9b3e8 bellard
        return;
389 fdf9b3e8 bellard
    case 0x2005:                /* mov.w Rm,@-Rn */
390 fdf9b3e8 bellard
        gen_op_dec2_rN(REG(B11_8));
391 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
392 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
393 fdf9b3e8 bellard
        gen_op_stw_T0_T1(ctx);
394 fdf9b3e8 bellard
        return;
395 fdf9b3e8 bellard
    case 0x2006:                /* mov.l Rm,@-Rn */
396 fdf9b3e8 bellard
        gen_op_dec4_rN(REG(B11_8));
397 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
398 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
399 fdf9b3e8 bellard
        gen_op_stl_T0_T1(ctx);
400 fdf9b3e8 bellard
        return;
401 eda9b09b bellard
    case 0x6004:                /* mov.b @Rm+,Rn */
402 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
403 fdf9b3e8 bellard
        gen_op_ldb_T0_T0(ctx);
404 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
405 fdf9b3e8 bellard
        gen_op_inc1_rN(REG(B7_4));
406 fdf9b3e8 bellard
        return;
407 fdf9b3e8 bellard
    case 0x6005:                /* mov.w @Rm+,Rn */
408 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
409 fdf9b3e8 bellard
        gen_op_ldw_T0_T0(ctx);
410 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
411 fdf9b3e8 bellard
        gen_op_inc2_rN(REG(B7_4));
412 fdf9b3e8 bellard
        return;
413 fdf9b3e8 bellard
    case 0x6006:                /* mov.l @Rm+,Rn */
414 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
415 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
416 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
417 fdf9b3e8 bellard
        gen_op_inc4_rN(REG(B7_4));
418 fdf9b3e8 bellard
        return;
419 fdf9b3e8 bellard
    case 0x0004:                /* mov.b Rm,@(R0,Rn) */
420 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
421 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
422 fdf9b3e8 bellard
        gen_op_add_rN_T1(REG(0));
423 fdf9b3e8 bellard
        gen_op_stb_T0_T1(ctx);
424 fdf9b3e8 bellard
        return;
425 fdf9b3e8 bellard
    case 0x0005:                /* mov.w Rm,@(R0,Rn) */
426 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
427 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
428 fdf9b3e8 bellard
        gen_op_add_rN_T1(REG(0));
429 fdf9b3e8 bellard
        gen_op_stw_T0_T1(ctx);
430 fdf9b3e8 bellard
        return;
431 fdf9b3e8 bellard
    case 0x0006:                /* mov.l Rm,@(R0,Rn) */
432 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
433 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
434 fdf9b3e8 bellard
        gen_op_add_rN_T1(REG(0));
435 fdf9b3e8 bellard
        gen_op_stl_T0_T1(ctx);
436 fdf9b3e8 bellard
        return;
437 fdf9b3e8 bellard
    case 0x000c:                /* mov.b @(R0,Rm),Rn */
438 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
439 fdf9b3e8 bellard
        gen_op_add_rN_T0(REG(0));
440 fdf9b3e8 bellard
        gen_op_ldb_T0_T0(ctx);
441 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
442 fdf9b3e8 bellard
        return;
443 fdf9b3e8 bellard
    case 0x000d:                /* mov.w @(R0,Rm),Rn */
444 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
445 fdf9b3e8 bellard
        gen_op_add_rN_T0(REG(0));
446 fdf9b3e8 bellard
        gen_op_ldw_T0_T0(ctx);
447 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
448 fdf9b3e8 bellard
        return;
449 fdf9b3e8 bellard
    case 0x000e:                /* mov.l @(R0,Rm),Rn */
450 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
451 fdf9b3e8 bellard
        gen_op_add_rN_T0(REG(0));
452 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
453 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
454 fdf9b3e8 bellard
        return;
455 fdf9b3e8 bellard
    case 0x6008:                /* swap.b Rm,Rn */
456 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
457 fdf9b3e8 bellard
        gen_op_swapb_T0();
458 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
459 fdf9b3e8 bellard
        return;
460 fdf9b3e8 bellard
    case 0x6009:                /* swap.w Rm,Rn */
461 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
462 fdf9b3e8 bellard
        gen_op_swapw_T0();
463 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
464 fdf9b3e8 bellard
        return;
465 fdf9b3e8 bellard
    case 0x200d:                /* xtrct Rm,Rn */
466 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
467 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
468 fdf9b3e8 bellard
        gen_op_xtrct_T0_T1();
469 fdf9b3e8 bellard
        gen_op_movl_T1_rN(REG(B11_8));
470 fdf9b3e8 bellard
        return;
471 fdf9b3e8 bellard
    case 0x300c:                /* add Rm,Rn */
472 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
473 fdf9b3e8 bellard
        gen_op_add_T0_rN(REG(B11_8));
474 fdf9b3e8 bellard
        return;
475 fdf9b3e8 bellard
    case 0x300e:                /* addc Rm,Rn */
476 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
477 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
478 fdf9b3e8 bellard
        gen_op_addc_T0_T1();
479 fdf9b3e8 bellard
        gen_op_movl_T1_rN(REG(B11_8));
480 fdf9b3e8 bellard
        return;
481 fdf9b3e8 bellard
    case 0x300f:                /* addv Rm,Rn */
482 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
483 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
484 fdf9b3e8 bellard
        gen_op_addv_T0_T1();
485 fdf9b3e8 bellard
        gen_op_movl_T1_rN(REG(B11_8));
486 fdf9b3e8 bellard
        return;
487 fdf9b3e8 bellard
    case 0x2009:                /* and Rm,Rn */
488 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
489 fdf9b3e8 bellard
        gen_op_and_T0_rN(REG(B11_8));
490 fdf9b3e8 bellard
        return;
491 fdf9b3e8 bellard
    case 0x3000:                /* cmp/eq Rm,Rn */
492 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
493 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
494 fdf9b3e8 bellard
        gen_op_cmp_eq_T0_T1();
495 fdf9b3e8 bellard
        return;
496 fdf9b3e8 bellard
    case 0x3003:                /* cmp/ge Rm,Rn */
497 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
498 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
499 fdf9b3e8 bellard
        gen_op_cmp_ge_T0_T1();
500 fdf9b3e8 bellard
        return;
501 fdf9b3e8 bellard
    case 0x3007:                /* cmp/gt Rm,Rn */
502 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
503 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
504 fdf9b3e8 bellard
        gen_op_cmp_gt_T0_T1();
505 fdf9b3e8 bellard
        return;
506 fdf9b3e8 bellard
    case 0x3006:                /* cmp/hi Rm,Rn */
507 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
508 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
509 fdf9b3e8 bellard
        gen_op_cmp_hi_T0_T1();
510 fdf9b3e8 bellard
        return;
511 fdf9b3e8 bellard
    case 0x3002:                /* cmp/hs Rm,Rn */
512 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
513 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
514 fdf9b3e8 bellard
        gen_op_cmp_hs_T0_T1();
515 fdf9b3e8 bellard
        return;
516 fdf9b3e8 bellard
    case 0x200c:                /* cmp/str Rm,Rn */
517 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
518 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
519 fdf9b3e8 bellard
        gen_op_cmp_str_T0_T1();
520 fdf9b3e8 bellard
        return;
521 fdf9b3e8 bellard
    case 0x2007:                /* div0s Rm,Rn */
522 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
523 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
524 fdf9b3e8 bellard
        gen_op_div0s_T0_T1();
525 fdf9b3e8 bellard
        gen_op_movl_T1_rN(REG(B11_8));
526 fdf9b3e8 bellard
        return;
527 fdf9b3e8 bellard
    case 0x3004:                /* div1 Rm,Rn */
528 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
529 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
530 fdf9b3e8 bellard
        gen_op_div1_T0_T1();
531 fdf9b3e8 bellard
        gen_op_movl_T1_rN(REG(B11_8));
532 fdf9b3e8 bellard
        return;
533 fdf9b3e8 bellard
    case 0x300d:                /* dmuls.l Rm,Rn */
534 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
535 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
536 fdf9b3e8 bellard
        gen_op_dmulsl_T0_T1();
537 fdf9b3e8 bellard
        return;
538 fdf9b3e8 bellard
    case 0x3005:                /* dmulu.l Rm,Rn */
539 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
540 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
541 fdf9b3e8 bellard
        gen_op_dmulul_T0_T1();
542 fdf9b3e8 bellard
        return;
543 fdf9b3e8 bellard
    case 0x600e:                /* exts.b Rm,Rn */
544 fdf9b3e8 bellard
        gen_op_movb_rN_T0(REG(B7_4));
545 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
546 fdf9b3e8 bellard
        return;
547 fdf9b3e8 bellard
    case 0x600f:                /* exts.w Rm,Rn */
548 fdf9b3e8 bellard
        gen_op_movw_rN_T0(REG(B7_4));
549 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
550 fdf9b3e8 bellard
        return;
551 fdf9b3e8 bellard
    case 0x600c:                /* extu.b Rm,Rn */
552 fdf9b3e8 bellard
        gen_op_movub_rN_T0(REG(B7_4));
553 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
554 fdf9b3e8 bellard
        return;
555 fdf9b3e8 bellard
    case 0x600d:                /* extu.w Rm,Rn */
556 fdf9b3e8 bellard
        gen_op_movuw_rN_T0(REG(B7_4));
557 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
558 fdf9b3e8 bellard
        return;
559 fdf9b3e8 bellard
    case 0x000f:                /* mac.l @Rm+,@Rn- */
560 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B11_8));
561 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
562 fdf9b3e8 bellard
        gen_op_movl_T0_T1();
563 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B7_4));
564 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
565 fdf9b3e8 bellard
        gen_op_macl_T0_T1();
566 fdf9b3e8 bellard
        gen_op_inc4_rN(REG(B7_4));
567 fdf9b3e8 bellard
        gen_op_inc4_rN(REG(B11_8));
568 fdf9b3e8 bellard
        return;
569 fdf9b3e8 bellard
    case 0x400f:                /* mac.w @Rm+,@Rn+ */
570 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B11_8));
571 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
572 fdf9b3e8 bellard
        gen_op_movl_T0_T1();
573 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B7_4));
574 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
575 fdf9b3e8 bellard
        gen_op_macw_T0_T1();
576 fdf9b3e8 bellard
        gen_op_inc2_rN(REG(B7_4));
577 fdf9b3e8 bellard
        gen_op_inc2_rN(REG(B11_8));
578 fdf9b3e8 bellard
        return;
579 fdf9b3e8 bellard
    case 0x0007:                /* mul.l Rm,Rn */
580 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
581 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
582 fdf9b3e8 bellard
        gen_op_mull_T0_T1();
583 fdf9b3e8 bellard
        return;
584 fdf9b3e8 bellard
    case 0x200f:                /* muls.w Rm,Rn */
585 fdf9b3e8 bellard
        gen_op_movw_rN_T0(REG(B7_4));
586 fdf9b3e8 bellard
        gen_op_movw_rN_T1(REG(B11_8));
587 fdf9b3e8 bellard
        gen_op_mulsw_T0_T1();
588 fdf9b3e8 bellard
        return;
589 fdf9b3e8 bellard
    case 0x200e:                /* mulu.w Rm,Rn */
590 fdf9b3e8 bellard
        gen_op_movuw_rN_T0(REG(B7_4));
591 fdf9b3e8 bellard
        gen_op_movuw_rN_T1(REG(B11_8));
592 fdf9b3e8 bellard
        gen_op_muluw_T0_T1();
593 fdf9b3e8 bellard
        return;
594 fdf9b3e8 bellard
    case 0x600b:                /* neg Rm,Rn */
595 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
596 fdf9b3e8 bellard
        gen_op_neg_T0();
597 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
598 fdf9b3e8 bellard
        return;
599 fdf9b3e8 bellard
    case 0x600a:                /* negc Rm,Rn */
600 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
601 fdf9b3e8 bellard
        gen_op_negc_T0();
602 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
603 fdf9b3e8 bellard
        return;
604 fdf9b3e8 bellard
    case 0x6007:                /* not Rm,Rn */
605 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
606 fdf9b3e8 bellard
        gen_op_not_T0();
607 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(B11_8));
608 fdf9b3e8 bellard
        return;
609 fdf9b3e8 bellard
    case 0x200b:                /* or Rm,Rn */
610 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
611 fdf9b3e8 bellard
        gen_op_or_T0_rN(REG(B11_8));
612 fdf9b3e8 bellard
        return;
613 fdf9b3e8 bellard
    case 0x400c:                /* shad Rm,Rn */
614 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
615 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
616 fdf9b3e8 bellard
        gen_op_shad_T0_T1();
617 fdf9b3e8 bellard
        gen_op_movl_T1_rN(REG(B11_8));
618 fdf9b3e8 bellard
        return;
619 fdf9b3e8 bellard
    case 0x400d:                /* shld Rm,Rn */
620 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
621 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
622 fdf9b3e8 bellard
        gen_op_shld_T0_T1();
623 fdf9b3e8 bellard
        gen_op_movl_T1_rN(REG(B11_8));
624 fdf9b3e8 bellard
        return;
625 fdf9b3e8 bellard
    case 0x3008:                /* sub Rm,Rn */
626 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
627 fdf9b3e8 bellard
        gen_op_sub_T0_rN(REG(B11_8));
628 fdf9b3e8 bellard
        return;
629 fdf9b3e8 bellard
    case 0x300a:                /* subc Rm,Rn */
630 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
631 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
632 fdf9b3e8 bellard
        gen_op_subc_T0_T1();
633 fdf9b3e8 bellard
        gen_op_movl_T1_rN(REG(B11_8));
634 fdf9b3e8 bellard
        return;
635 fdf9b3e8 bellard
    case 0x300b:                /* subv Rm,Rn */
636 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
637 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
638 fdf9b3e8 bellard
        gen_op_subv_T0_T1();
639 fdf9b3e8 bellard
        gen_op_movl_T1_rN(REG(B11_8));
640 fdf9b3e8 bellard
        return;
641 fdf9b3e8 bellard
    case 0x2008:                /* tst Rm,Rn */
642 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
643 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
644 fdf9b3e8 bellard
        gen_op_tst_T0_T1();
645 fdf9b3e8 bellard
        return;
646 fdf9b3e8 bellard
    case 0x200a:                /* xor Rm,Rn */
647 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
648 fdf9b3e8 bellard
        gen_op_xor_T0_rN(REG(B11_8));
649 fdf9b3e8 bellard
        return;
650 e67888a7 ths
    case 0xf00c: /* fmov {F,D,X}Rm,{F,D,X}Rn - FPSCR: Nothing */
651 022a22c7 ths
        if (ctx->fpscr & FPSCR_SZ) {
652 eda9b09b bellard
            if (ctx->opcode & 0x0110)
653 eda9b09b bellard
                break; /* illegal instruction */
654 e3d8a985 ths
            gen_op_fmov_drN_DT0(DREG(B7_4));
655 e3d8a985 ths
            gen_op_fmov_DT0_drN(DREG(B11_8));
656 eda9b09b bellard
        } else {
657 eda9b09b bellard
            gen_op_fmov_frN_FT0(FREG(B7_4));
658 eda9b09b bellard
            gen_op_fmov_FT0_frN(FREG(B11_8));
659 eda9b09b bellard
        }
660 eda9b09b bellard
        return;
661 e67888a7 ths
    case 0xf00a: /* fmov {F,D,X}Rm,@Rn - FPSCR: Nothing */
662 022a22c7 ths
        if (ctx->fpscr & FPSCR_SZ) {
663 eda9b09b bellard
            if (ctx->opcode & 0x0010)
664 eda9b09b bellard
                break; /* illegal instruction */
665 e3d8a985 ths
            gen_op_fmov_drN_DT0(DREG(B7_4));
666 eda9b09b bellard
            gen_op_movl_rN_T1(REG(B11_8));
667 eda9b09b bellard
            gen_op_stfq_DT0_T1(ctx);
668 eda9b09b bellard
        } else {
669 eda9b09b bellard
            gen_op_fmov_frN_FT0(FREG(B7_4));
670 eda9b09b bellard
            gen_op_movl_rN_T1(REG(B11_8));
671 eda9b09b bellard
            gen_op_stfl_FT0_T1(ctx);
672 eda9b09b bellard
        }
673 eda9b09b bellard
        return;
674 e67888a7 ths
    case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */
675 022a22c7 ths
        if (ctx->fpscr & FPSCR_SZ) {
676 eda9b09b bellard
            if (ctx->opcode & 0x0100)
677 eda9b09b bellard
                break; /* illegal instruction */
678 eda9b09b bellard
            gen_op_movl_rN_T0(REG(B7_4));
679 eda9b09b bellard
            gen_op_ldfq_T0_DT0(ctx);
680 e3d8a985 ths
            gen_op_fmov_DT0_drN(DREG(B11_8));
681 eda9b09b bellard
        } else {
682 eda9b09b bellard
            gen_op_movl_rN_T0(REG(B7_4));
683 eda9b09b bellard
            gen_op_ldfl_T0_FT0(ctx);
684 f09111e0 ths
            gen_op_fmov_FT0_frN(FREG(B11_8));
685 eda9b09b bellard
        }
686 eda9b09b bellard
        return;
687 e67888a7 ths
    case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */
688 022a22c7 ths
        if (ctx->fpscr & FPSCR_SZ) {
689 eda9b09b bellard
            if (ctx->opcode & 0x0100)
690 eda9b09b bellard
                break; /* illegal instruction */
691 eda9b09b bellard
            gen_op_movl_rN_T0(REG(B7_4));
692 eda9b09b bellard
            gen_op_ldfq_T0_DT0(ctx);
693 e3d8a985 ths
            gen_op_fmov_DT0_drN(DREG(B11_8));
694 eda9b09b bellard
            gen_op_inc8_rN(REG(B7_4));
695 eda9b09b bellard
        } else {
696 eda9b09b bellard
            gen_op_movl_rN_T0(REG(B7_4));
697 eda9b09b bellard
            gen_op_ldfl_T0_FT0(ctx);
698 f09111e0 ths
            gen_op_fmov_FT0_frN(FREG(B11_8));
699 eda9b09b bellard
            gen_op_inc4_rN(REG(B7_4));
700 eda9b09b bellard
        }
701 eda9b09b bellard
        return;
702 e67888a7 ths
    case 0xf00b: /* fmov {F,D,X}Rm,@-Rn - FPSCR: Nothing */
703 022a22c7 ths
        if (ctx->fpscr & FPSCR_SZ) {
704 eda9b09b bellard
            if (ctx->opcode & 0x0100)
705 eda9b09b bellard
                break; /* illegal instruction */
706 eda9b09b bellard
            gen_op_dec8_rN(REG(B11_8));
707 e3d8a985 ths
            gen_op_fmov_drN_DT0(DREG(B7_4));
708 eda9b09b bellard
            gen_op_movl_rN_T1(REG(B11_8));
709 eda9b09b bellard
            gen_op_stfq_DT0_T1(ctx);
710 eda9b09b bellard
        } else {
711 eda9b09b bellard
            gen_op_dec4_rN(REG(B11_8));
712 eda9b09b bellard
            gen_op_fmov_frN_FT0(FREG(B7_4));
713 eda9b09b bellard
            gen_op_movl_rN_T1(REG(B11_8));
714 eda9b09b bellard
            gen_op_stfl_FT0_T1(ctx);
715 eda9b09b bellard
        }
716 eda9b09b bellard
        return;
717 e67888a7 ths
    case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm - FPSCR: Nothing */
718 022a22c7 ths
        if (ctx->fpscr & FPSCR_SZ) {
719 eda9b09b bellard
            if (ctx->opcode & 0x0100)
720 eda9b09b bellard
                break; /* illegal instruction */
721 eda9b09b bellard
            gen_op_movl_rN_T0(REG(B7_4));
722 eda9b09b bellard
            gen_op_add_rN_T0(REG(0));
723 eda9b09b bellard
            gen_op_ldfq_T0_DT0(ctx);
724 e3d8a985 ths
            gen_op_fmov_DT0_drN(DREG(B11_8));
725 eda9b09b bellard
        } else {
726 eda9b09b bellard
            gen_op_movl_rN_T0(REG(B7_4));
727 eda9b09b bellard
            gen_op_add_rN_T0(REG(0));
728 eda9b09b bellard
            gen_op_ldfl_T0_FT0(ctx);
729 f09111e0 ths
            gen_op_fmov_FT0_frN(FREG(B11_8));
730 eda9b09b bellard
        }
731 eda9b09b bellard
        return;
732 e67888a7 ths
    case 0xf007: /* fmov {F,D,X}Rn,@(R0,Rn) - FPSCR: Nothing */
733 022a22c7 ths
        if (ctx->fpscr & FPSCR_SZ) {
734 eda9b09b bellard
            if (ctx->opcode & 0x0010)
735 eda9b09b bellard
                break; /* illegal instruction */
736 e3d8a985 ths
            gen_op_fmov_drN_DT0(DREG(B7_4));
737 eda9b09b bellard
            gen_op_movl_rN_T1(REG(B11_8));
738 eda9b09b bellard
            gen_op_add_rN_T1(REG(0));
739 eda9b09b bellard
            gen_op_stfq_DT0_T1(ctx);
740 eda9b09b bellard
        } else {
741 eda9b09b bellard
            gen_op_fmov_frN_FT0(FREG(B7_4));
742 eda9b09b bellard
            gen_op_movl_rN_T1(REG(B11_8));
743 eda9b09b bellard
            gen_op_add_rN_T1(REG(0));
744 eda9b09b bellard
            gen_op_stfl_FT0_T1(ctx);
745 eda9b09b bellard
        }
746 eda9b09b bellard
        return;
747 e67888a7 ths
    case 0xf000: /* fadd Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */
748 e67888a7 ths
    case 0xf001: /* fsub Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */
749 e67888a7 ths
    case 0xf002: /* fmul Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */
750 e67888a7 ths
    case 0xf003: /* fdiv Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */
751 e67888a7 ths
    case 0xf004: /* fcmp/eq Rm,Rn - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */
752 e67888a7 ths
    case 0xf005: /* fcmp/gt Rm,Rn - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */
753 ea6cf6be ths
        if (ctx->fpscr & FPSCR_PR) {
754 ea6cf6be ths
            if (ctx->opcode & 0x0110)
755 ea6cf6be ths
                break; /* illegal instruction */
756 ea6cf6be ths
            gen_op_fmov_drN_DT1(DREG(B7_4));
757 ea6cf6be ths
            gen_op_fmov_drN_DT0(DREG(B11_8));
758 ea6cf6be ths
        }
759 ea6cf6be ths
        else {
760 ea6cf6be ths
            gen_op_fmov_frN_FT1(FREG(B7_4));
761 ea6cf6be ths
            gen_op_fmov_frN_FT0(FREG(B11_8));
762 ea6cf6be ths
        }
763 ea6cf6be ths
764 ea6cf6be ths
        switch (ctx->opcode & 0xf00f) {
765 ea6cf6be ths
        case 0xf000:                /* fadd Rm,Rn */
766 ea6cf6be ths
            ctx->fpscr & FPSCR_PR ? gen_op_fadd_DT() : gen_op_fadd_FT();
767 ea6cf6be ths
            break;
768 ea6cf6be ths
        case 0xf001:                /* fsub Rm,Rn */
769 ea6cf6be ths
            ctx->fpscr & FPSCR_PR ? gen_op_fsub_DT() : gen_op_fsub_FT();
770 ea6cf6be ths
            break;
771 ea6cf6be ths
        case 0xf002:                /* fmul Rm,Rn */
772 ea6cf6be ths
            ctx->fpscr & FPSCR_PR ? gen_op_fmul_DT() : gen_op_fmul_FT();
773 ea6cf6be ths
            break;
774 ea6cf6be ths
        case 0xf003:                /* fdiv Rm,Rn */
775 ea6cf6be ths
            ctx->fpscr & FPSCR_PR ? gen_op_fdiv_DT() : gen_op_fdiv_FT();
776 ea6cf6be ths
            break;
777 ea6cf6be ths
        case 0xf004:                /* fcmp/eq Rm,Rn */
778 ea6cf6be ths
            return;
779 ea6cf6be ths
        case 0xf005:                /* fcmp/gt Rm,Rn */
780 ea6cf6be ths
            return;
781 ea6cf6be ths
        }
782 ea6cf6be ths
783 ea6cf6be ths
        if (ctx->fpscr & FPSCR_PR) {
784 ea6cf6be ths
            gen_op_fmov_DT0_drN(DREG(B11_8));
785 ea6cf6be ths
        }
786 ea6cf6be ths
        else {
787 ea6cf6be ths
            gen_op_fmov_FT0_frN(FREG(B11_8));
788 ea6cf6be ths
        }
789 ea6cf6be ths
        return;
790 fdf9b3e8 bellard
    }
791 fdf9b3e8 bellard
792 fdf9b3e8 bellard
    switch (ctx->opcode & 0xff00) {
793 fdf9b3e8 bellard
    case 0xc900:                /* and #imm,R0 */
794 fdf9b3e8 bellard
        gen_op_and_imm_rN(B7_0, REG(0));
795 fdf9b3e8 bellard
        return;
796 fdf9b3e8 bellard
    case 0xcd00:                /* and.b #imm,@(R0+GBR) */
797 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
798 fdf9b3e8 bellard
        gen_op_addl_GBR_T0();
799 fdf9b3e8 bellard
        gen_op_movl_T0_T1();
800 fdf9b3e8 bellard
        gen_op_ldb_T0_T0(ctx);
801 fdf9b3e8 bellard
        gen_op_and_imm_T0(B7_0);
802 fdf9b3e8 bellard
        gen_op_stb_T0_T1(ctx);
803 fdf9b3e8 bellard
        return;
804 fdf9b3e8 bellard
    case 0x8b00:                /* bf label */
805 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT
806 fdf9b3e8 bellard
            gen_conditional_jump(ctx, ctx->pc + 2,
807 fdf9b3e8 bellard
                                 ctx->pc + 4 + B7_0s * 2);
808 fdf9b3e8 bellard
        ctx->flags |= BRANCH_CONDITIONAL;
809 fdf9b3e8 bellard
        return;
810 fdf9b3e8 bellard
    case 0x8f00:                /* bf/s label */
811 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT
812 fdf9b3e8 bellard
            gen_op_bf_s(ctx->delayed_pc = ctx->pc + 4 + B7_0s * 2);
813 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT_CONDITIONAL;
814 fdf9b3e8 bellard
        return;
815 fdf9b3e8 bellard
    case 0x8900:                /* bt label */
816 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT
817 fdf9b3e8 bellard
            gen_conditional_jump(ctx, ctx->pc + 4 + B7_0s * 2,
818 fdf9b3e8 bellard
                                 ctx->pc + 2);
819 fdf9b3e8 bellard
        ctx->flags |= BRANCH_CONDITIONAL;
820 fdf9b3e8 bellard
        return;
821 fdf9b3e8 bellard
    case 0x8d00:                /* bt/s label */
822 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT
823 fdf9b3e8 bellard
            gen_op_bt_s(ctx->delayed_pc = ctx->pc + 4 + B7_0s * 2);
824 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT_CONDITIONAL;
825 fdf9b3e8 bellard
        return;
826 fdf9b3e8 bellard
    case 0x8800:                /* cmp/eq #imm,R0 */
827 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
828 fdf9b3e8 bellard
        gen_op_cmp_eq_imm_T0(B7_0s);
829 fdf9b3e8 bellard
        return;
830 fdf9b3e8 bellard
    case 0xc400:                /* mov.b @(disp,GBR),R0 */
831 fdf9b3e8 bellard
        gen_op_stc_gbr_T0();
832 fdf9b3e8 bellard
        gen_op_addl_imm_T0(B7_0);
833 fdf9b3e8 bellard
        gen_op_ldb_T0_T0(ctx);
834 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(0));
835 fdf9b3e8 bellard
        return;
836 fdf9b3e8 bellard
    case 0xc500:                /* mov.w @(disp,GBR),R0 */
837 fdf9b3e8 bellard
        gen_op_stc_gbr_T0();
838 fdf9b3e8 bellard
        gen_op_addl_imm_T0(B7_0);
839 fdf9b3e8 bellard
        gen_op_ldw_T0_T0(ctx);
840 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(0));
841 fdf9b3e8 bellard
        return;
842 fdf9b3e8 bellard
    case 0xc600:                /* mov.l @(disp,GBR),R0 */
843 fdf9b3e8 bellard
        gen_op_stc_gbr_T0();
844 fdf9b3e8 bellard
        gen_op_addl_imm_T0(B7_0);
845 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
846 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(0));
847 fdf9b3e8 bellard
        return;
848 fdf9b3e8 bellard
    case 0xc000:                /* mov.b R0,@(disp,GBR) */
849 fdf9b3e8 bellard
        gen_op_stc_gbr_T0();
850 fdf9b3e8 bellard
        gen_op_addl_imm_T0(B7_0);
851 fdf9b3e8 bellard
        gen_op_movl_T0_T1();
852 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
853 fdf9b3e8 bellard
        gen_op_stb_T0_T1(ctx);
854 fdf9b3e8 bellard
        return;
855 fdf9b3e8 bellard
    case 0xc100:                /* mov.w R0,@(disp,GBR) */
856 fdf9b3e8 bellard
        gen_op_stc_gbr_T0();
857 fdf9b3e8 bellard
        gen_op_addl_imm_T0(B7_0);
858 fdf9b3e8 bellard
        gen_op_movl_T0_T1();
859 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
860 fdf9b3e8 bellard
        gen_op_stw_T0_T1(ctx);
861 fdf9b3e8 bellard
        return;
862 fdf9b3e8 bellard
    case 0xc200:                /* mov.l R0,@(disp,GBR) */
863 fdf9b3e8 bellard
        gen_op_stc_gbr_T0();
864 fdf9b3e8 bellard
        gen_op_addl_imm_T0(B7_0);
865 fdf9b3e8 bellard
        gen_op_movl_T0_T1();
866 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
867 fdf9b3e8 bellard
        gen_op_stl_T0_T1(ctx);
868 fdf9b3e8 bellard
        return;
869 fdf9b3e8 bellard
    case 0x8000:                /* mov.b R0,@(disp,Rn) */
870 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
871 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B7_4));
872 fdf9b3e8 bellard
        gen_op_addl_imm_T1(B3_0);
873 fdf9b3e8 bellard
        gen_op_stb_T0_T1(ctx);
874 fdf9b3e8 bellard
        return;
875 fdf9b3e8 bellard
    case 0x8100:                /* mov.w R0,@(disp,Rn) */
876 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
877 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B7_4));
878 fdf9b3e8 bellard
        gen_op_addl_imm_T1(B3_0 * 2);
879 fdf9b3e8 bellard
        gen_op_stw_T0_T1(ctx);
880 fdf9b3e8 bellard
        return;
881 fdf9b3e8 bellard
    case 0x8400:                /* mov.b @(disp,Rn),R0 */
882 8c2cc7ce ths
        gen_op_movl_rN_T0(REG(B7_4));
883 8c2cc7ce ths
        gen_op_addl_imm_T0(B3_0);
884 8c2cc7ce ths
        gen_op_ldb_T0_T0(ctx);
885 8c2cc7ce ths
        gen_op_movl_T0_rN(REG(0));
886 fdf9b3e8 bellard
        return;
887 fdf9b3e8 bellard
    case 0x8500:                /* mov.w @(disp,Rn),R0 */
888 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B7_4));
889 fdf9b3e8 bellard
        gen_op_addl_imm_T0(B3_0 * 2);
890 fdf9b3e8 bellard
        gen_op_ldw_T0_T0(ctx);
891 fdf9b3e8 bellard
        gen_op_movl_T0_rN(REG(0));
892 fdf9b3e8 bellard
        return;
893 fdf9b3e8 bellard
    case 0xc700:                /* mova @(disp,PC),R0 */
894 fdf9b3e8 bellard
        gen_op_movl_imm_rN(((ctx->pc & 0xfffffffc) + 4 + B7_0 * 4) & ~3,
895 fdf9b3e8 bellard
                           REG(0));
896 fdf9b3e8 bellard
        return;
897 fdf9b3e8 bellard
    case 0xcb00:                /* or #imm,R0 */
898 fdf9b3e8 bellard
        gen_op_or_imm_rN(B7_0, REG(0));
899 fdf9b3e8 bellard
        return;
900 fdf9b3e8 bellard
    case 0xcf00:                /* or.b #imm,@(R0+GBR) */
901 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
902 fdf9b3e8 bellard
        gen_op_addl_GBR_T0();
903 fdf9b3e8 bellard
        gen_op_movl_T0_T1();
904 fdf9b3e8 bellard
        gen_op_ldb_T0_T0(ctx);
905 fdf9b3e8 bellard
        gen_op_or_imm_T0(B7_0);
906 fdf9b3e8 bellard
        gen_op_stb_T0_T1(ctx);
907 fdf9b3e8 bellard
        return;
908 fdf9b3e8 bellard
    case 0xc300:                /* trapa #imm */
909 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT gen_op_movl_imm_PC(ctx->pc);
910 fdf9b3e8 bellard
        gen_op_trapa(B7_0);
911 fdf9b3e8 bellard
        ctx->flags |= BRANCH;
912 fdf9b3e8 bellard
        return;
913 fdf9b3e8 bellard
    case 0xc800:                /* tst #imm,R0 */
914 fdf9b3e8 bellard
        gen_op_tst_imm_rN(B7_0, REG(0));
915 fdf9b3e8 bellard
        return;
916 fdf9b3e8 bellard
    case 0xcc00:                /* tst #imm,@(R0+GBR) */
917 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
918 fdf9b3e8 bellard
        gen_op_addl_GBR_T0();
919 fdf9b3e8 bellard
        gen_op_ldb_T0_T0(ctx);
920 fdf9b3e8 bellard
        gen_op_tst_imm_T0(B7_0);
921 fdf9b3e8 bellard
        return;
922 fdf9b3e8 bellard
    case 0xca00:                /* xor #imm,R0 */
923 fdf9b3e8 bellard
        gen_op_xor_imm_rN(B7_0, REG(0));
924 fdf9b3e8 bellard
        return;
925 fdf9b3e8 bellard
    case 0xce00:                /* xor.b #imm,@(R0+GBR) */
926 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
927 fdf9b3e8 bellard
        gen_op_addl_GBR_T0();
928 fdf9b3e8 bellard
        gen_op_movl_T0_T1();
929 fdf9b3e8 bellard
        gen_op_ldb_T0_T0(ctx);
930 fdf9b3e8 bellard
        gen_op_xor_imm_T0(B7_0);
931 fdf9b3e8 bellard
        gen_op_stb_T0_T1(ctx);
932 fdf9b3e8 bellard
        return;
933 fdf9b3e8 bellard
    }
934 fdf9b3e8 bellard
935 fdf9b3e8 bellard
    switch (ctx->opcode & 0xf08f) {
936 fdf9b3e8 bellard
    case 0x408e:                /* ldc Rm,Rn_BANK */
937 fdf9b3e8 bellard
        gen_op_movl_rN_rN(REG(B11_8), ALTREG(B6_4));
938 fdf9b3e8 bellard
        return;
939 fdf9b3e8 bellard
    case 0x4087:                /* ldc.l @Rm+,Rn_BANK */
940 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B11_8));
941 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
942 fdf9b3e8 bellard
        gen_op_movl_T0_rN(ALTREG(B6_4));
943 fdf9b3e8 bellard
        gen_op_inc4_rN(REG(B11_8));
944 fdf9b3e8 bellard
        return;
945 fdf9b3e8 bellard
    case 0x0082:                /* stc Rm_BANK,Rn */
946 fdf9b3e8 bellard
        gen_op_movl_rN_rN(ALTREG(B6_4), REG(B11_8));
947 fdf9b3e8 bellard
        return;
948 fdf9b3e8 bellard
    case 0x4083:                /* stc.l Rm_BANK,@-Rn */
949 fdf9b3e8 bellard
        gen_op_dec4_rN(REG(B11_8));
950 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
951 fdf9b3e8 bellard
        gen_op_movl_rN_T0(ALTREG(B6_4));
952 fdf9b3e8 bellard
        gen_op_stl_T0_T1(ctx);
953 fdf9b3e8 bellard
        return;
954 fdf9b3e8 bellard
    }
955 fdf9b3e8 bellard
956 fdf9b3e8 bellard
    switch (ctx->opcode & 0xf0ff) {
957 fdf9b3e8 bellard
    case 0x0023:                /* braf Rn */
958 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT gen_op_movl_rN_T0(REG(B11_8));
959 fdf9b3e8 bellard
        gen_op_braf_T0(ctx->pc + 4);
960 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT;
961 fdf9b3e8 bellard
        ctx->delayed_pc = (uint32_t) - 1;
962 fdf9b3e8 bellard
        return;
963 fdf9b3e8 bellard
    case 0x0003:                /* bsrf Rn */
964 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT gen_op_movl_rN_T0(REG(B11_8));
965 fdf9b3e8 bellard
        gen_op_bsrf_T0(ctx->pc + 4);
966 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT;
967 fdf9b3e8 bellard
        ctx->delayed_pc = (uint32_t) - 1;
968 fdf9b3e8 bellard
        return;
969 fdf9b3e8 bellard
    case 0x4015:                /* cmp/pl Rn */
970 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B11_8));
971 fdf9b3e8 bellard
        gen_op_cmp_pl_T0();
972 fdf9b3e8 bellard
        return;
973 fdf9b3e8 bellard
    case 0x4011:                /* cmp/pz Rn */
974 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B11_8));
975 fdf9b3e8 bellard
        gen_op_cmp_pz_T0();
976 fdf9b3e8 bellard
        return;
977 fdf9b3e8 bellard
    case 0x4010:                /* dt Rn */
978 fdf9b3e8 bellard
        gen_op_dt_rN(REG(B11_8));
979 fdf9b3e8 bellard
        return;
980 fdf9b3e8 bellard
    case 0x402b:                /* jmp @Rn */
981 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT gen_op_movl_rN_T0(REG(B11_8));
982 fdf9b3e8 bellard
        gen_op_jmp_T0();
983 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT;
984 fdf9b3e8 bellard
        ctx->delayed_pc = (uint32_t) - 1;
985 fdf9b3e8 bellard
        return;
986 fdf9b3e8 bellard
    case 0x400b:                /* jsr @Rn */
987 fdf9b3e8 bellard
        CHECK_NOT_DELAY_SLOT gen_op_movl_rN_T0(REG(B11_8));
988 fdf9b3e8 bellard
        gen_op_jsr_T0(ctx->pc + 4);
989 fdf9b3e8 bellard
        ctx->flags |= DELAY_SLOT;
990 fdf9b3e8 bellard
        ctx->delayed_pc = (uint32_t) - 1;
991 fdf9b3e8 bellard
        return;
992 fdf9b3e8 bellard
#define LDST(reg,ldnum,ldpnum,ldop,stnum,stpnum,stop,extrald)        \
993 fdf9b3e8 bellard
  case ldnum:                                                        \
994 fdf9b3e8 bellard
    gen_op_movl_rN_T0 (REG(B11_8));                                \
995 fdf9b3e8 bellard
    gen_op_##ldop##_T0_##reg ();                                \
996 fdf9b3e8 bellard
    extrald                                                        \
997 fdf9b3e8 bellard
    return;                                                        \
998 fdf9b3e8 bellard
  case ldpnum:                                                        \
999 fdf9b3e8 bellard
    gen_op_movl_rN_T0 (REG(B11_8));                                \
1000 fdf9b3e8 bellard
    gen_op_ldl_T0_T0 (ctx);                                        \
1001 fdf9b3e8 bellard
    gen_op_inc4_rN (REG(B11_8));                                \
1002 fdf9b3e8 bellard
    gen_op_##ldop##_T0_##reg ();                                \
1003 fdf9b3e8 bellard
    extrald                                                        \
1004 fdf9b3e8 bellard
    return;                                                        \
1005 fdf9b3e8 bellard
  case stnum:                                                        \
1006 fdf9b3e8 bellard
    gen_op_##stop##_##reg##_T0 ();                                        \
1007 fdf9b3e8 bellard
    gen_op_movl_T0_rN (REG(B11_8));                                \
1008 fdf9b3e8 bellard
    return;                                                        \
1009 fdf9b3e8 bellard
  case stpnum:                                                        \
1010 fdf9b3e8 bellard
    gen_op_##stop##_##reg##_T0 ();                                \
1011 fdf9b3e8 bellard
    gen_op_dec4_rN (REG(B11_8));                                \
1012 fdf9b3e8 bellard
    gen_op_movl_rN_T1 (REG(B11_8));                                \
1013 fdf9b3e8 bellard
    gen_op_stl_T0_T1 (ctx);                                        \
1014 fdf9b3e8 bellard
    return;
1015 fdf9b3e8 bellard
        LDST(sr, 0x400e, 0x4007, ldc, 0x0002, 0x4003, stc, ctx->flags |=
1016 eda9b09b bellard
             MODE_CHANGE;)
1017 eda9b09b bellard
        LDST(gbr, 0x401e, 0x4017, ldc, 0x0012, 0x4013, stc,)
1018 eda9b09b bellard
        LDST(vbr, 0x402e, 0x4027, ldc, 0x0022, 0x4023, stc,)
1019 eda9b09b bellard
        LDST(ssr, 0x403e, 0x4037, ldc, 0x0032, 0x4033, stc,)
1020 eda9b09b bellard
        LDST(spc, 0x404e, 0x4047, ldc, 0x0042, 0x4043, stc,)
1021 eda9b09b bellard
        LDST(dbr, 0x40fa, 0x40f6, ldc, 0x00fa, 0x40f2, stc,)
1022 eda9b09b bellard
        LDST(mach, 0x400a, 0x4006, lds, 0x000a, 0x4002, sts,)
1023 eda9b09b bellard
        LDST(macl, 0x401a, 0x4016, lds, 0x001a, 0x4012, sts,)
1024 eda9b09b bellard
        LDST(pr, 0x402a, 0x4026, lds, 0x002a, 0x4022, sts,)
1025 8bf5a804 ths
        LDST(fpul, 0x405a, 0x4056, lds, 0x005a, 0x4052, sts,)
1026 8bf5a804 ths
        LDST(fpscr, 0x406a, 0x4066, lds, 0x006a, 0x4062, sts, ctx->flags |=
1027 eda9b09b bellard
             MODE_CHANGE;)
1028 fdf9b3e8 bellard
    case 0x00c3:                /* movca.l R0,@Rm */
1029 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(0));
1030 fdf9b3e8 bellard
        gen_op_movl_rN_T1(REG(B11_8));
1031 fdf9b3e8 bellard
        gen_op_stl_T0_T1(ctx);
1032 fdf9b3e8 bellard
        return;
1033 fdf9b3e8 bellard
    case 0x0029:                /* movt Rn */
1034 fdf9b3e8 bellard
        gen_op_movt_rN(REG(B11_8));
1035 fdf9b3e8 bellard
        return;
1036 fdf9b3e8 bellard
    case 0x0093:                /* ocbi @Rn */
1037 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B11_8));
1038 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
1039 fdf9b3e8 bellard
        return;
1040 fdf9b3e8 bellard
    case 0x00a2:                /* ocbp @Rn */
1041 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B11_8));
1042 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
1043 fdf9b3e8 bellard
        return;
1044 fdf9b3e8 bellard
    case 0x00b3:                /* ocbwb @Rn */
1045 fdf9b3e8 bellard
        gen_op_movl_rN_T0(REG(B11_8));
1046 fdf9b3e8 bellard
        gen_op_ldl_T0_T0(ctx);
1047 fdf9b3e8 bellard
        return;
1048 fdf9b3e8 bellard
    case 0x0083:                /* pref @Rn */
1049 fdf9b3e8 bellard
        return;
1050 fdf9b3e8 bellard
    case 0x4024:                /* rotcl Rn */
1051 fdf9b3e8 bellard
        gen_op_rotcl_Rn(REG(B11_8));
1052 fdf9b3e8 bellard
        return;
1053 fdf9b3e8 bellard
    case 0x4025:                /* rotcr Rn */
1054 fdf9b3e8 bellard
        gen_op_rotcr_Rn(REG(B11_8));
1055 fdf9b3e8 bellard
        return;
1056 fdf9b3e8 bellard
    case 0x4004:                /* rotl Rn */
1057 fdf9b3e8 bellard
        gen_op_rotl_Rn(REG(B11_8));
1058 fdf9b3e8 bellard
        return;
1059 fdf9b3e8 bellard
    case 0x4005:                /* rotr Rn */
1060 fdf9b3e8 bellard
        gen_op_rotr_Rn(REG(B11_8));
1061 fdf9b3e8 bellard
        return;
1062 fdf9b3e8 bellard
    case 0x4000:                /* shll Rn */
1063 fdf9b3e8 bellard
    case 0x4020:                /* shal Rn */
1064 fdf9b3e8 bellard
        gen_op_shal_Rn(REG(B11_8));
1065 fdf9b3e8 bellard
        return;
1066 fdf9b3e8 bellard
    case 0x4021:                /* shar Rn */
1067 fdf9b3e8 bellard
        gen_op_shar_Rn(REG(B11_8));
1068 fdf9b3e8 bellard
        return;
1069 fdf9b3e8 bellard
    case 0x4001:                /* shlr Rn */
1070 fdf9b3e8 bellard
        gen_op_shlr_Rn(REG(B11_8));
1071 fdf9b3e8 bellard
        return;
1072 fdf9b3e8 bellard
    case 0x4008:                /* shll2 Rn */
1073 fdf9b3e8 bellard
        gen_op_shll2_Rn(REG(B11_8));
1074 fdf9b3e8 bellard
        return;
1075 fdf9b3e8 bellard
    case 0x4018:                /* shll8 Rn */
1076 fdf9b3e8 bellard
        gen_op_shll8_Rn(REG(B11_8));
1077 fdf9b3e8 bellard
        return;
1078 fdf9b3e8 bellard
    case 0x4028:                /* shll16 Rn */
1079 fdf9b3e8 bellard
        gen_op_shll16_Rn(REG(B11_8));
1080 fdf9b3e8 bellard
        return;
1081 fdf9b3e8 bellard
    case 0x4009:                /* shlr2 Rn */
1082 fdf9b3e8 bellard
        gen_op_shlr2_Rn(REG(B11_8));
1083 fdf9b3e8 bellard
        return;
1084 fdf9b3e8 bellard
    case 0x4019:                /* shlr8 Rn */
1085 fdf9b3e8 bellard
        gen_op_shlr8_Rn(REG(B11_8));
1086 fdf9b3e8 bellard
        return;
1087 fdf9b3e8 bellard
    case 0x4029:                /* shlr16 Rn */
1088 fdf9b3e8 bellard
        gen_op_shlr16_Rn(REG(B11_8));
1089 fdf9b3e8 bellard
        return;
1090 fdf9b3e8 bellard
    case 0x401b:                /* tas.b @Rn */
1091 fdf9b3e8 bellard
        gen_op_tasb_rN(REG(B11_8));
1092 fdf9b3e8 bellard
        return;
1093 e67888a7 ths
    case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */
1094 eda9b09b bellard
        gen_op_movl_fpul_FT0();
1095 eda9b09b bellard
        gen_op_fmov_FT0_frN(FREG(B11_8));
1096 eda9b09b bellard
        return;
1097 e67888a7 ths
    case 0xf01d: /* flds FRm,FPUL - FPSCR: Nothing */
1098 eda9b09b bellard
        gen_op_fmov_frN_FT0(FREG(B11_8));
1099 eda9b09b bellard
        gen_op_movl_FT0_fpul();
1100 eda9b09b bellard
        return;
1101 e67888a7 ths
    case 0xf02d: /* float FPUL,FRn/DRn - FPSCR: R[PR,Enable.I]/W[Cause,Flag] */
1102 ea6cf6be ths
        if (ctx->fpscr & FPSCR_PR) {
1103 ea6cf6be ths
            if (ctx->opcode & 0x0100)
1104 ea6cf6be ths
                break; /* illegal instruction */
1105 ea6cf6be ths
            gen_op_float_DT();
1106 ea6cf6be ths
            gen_op_fmov_DT0_drN(DREG(B11_8));
1107 ea6cf6be ths
        }
1108 ea6cf6be ths
        else {
1109 ea6cf6be ths
            gen_op_float_FT();
1110 ea6cf6be ths
            gen_op_fmov_FT0_frN(FREG(B11_8));
1111 ea6cf6be ths
        }
1112 ea6cf6be ths
        return;
1113 e67888a7 ths
    case 0xf03d: /* ftrc FRm/DRm,FPUL - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */
1114 ea6cf6be ths
        if (ctx->fpscr & FPSCR_PR) {
1115 ea6cf6be ths
            if (ctx->opcode & 0x0100)
1116 ea6cf6be ths
                break; /* illegal instruction */
1117 ea6cf6be ths
            gen_op_fmov_drN_DT0(DREG(B11_8));
1118 ea6cf6be ths
            gen_op_ftrc_DT();
1119 ea6cf6be ths
        }
1120 ea6cf6be ths
        else {
1121 ea6cf6be ths
            gen_op_fmov_frN_FT0(FREG(B11_8));
1122 ea6cf6be ths
            gen_op_ftrc_FT();
1123 ea6cf6be ths
        }
1124 ea6cf6be ths
        return;
1125 e67888a7 ths
    case 0xf08d: /* fldi0 FRn - FPSCR: R[PR] */
1126 ea6cf6be ths
        if (!(ctx->fpscr & FPSCR_PR)) {
1127 ea6cf6be ths
            gen_op_movl_imm_T0(0);
1128 ea6cf6be ths
            gen_op_fmov_T0_frN(FREG(B11_8));
1129 ea6cf6be ths
            return;
1130 ea6cf6be ths
        }
1131 ea6cf6be ths
        break;
1132 e67888a7 ths
    case 0xf09d: /* fldi1 FRn - FPSCR: R[PR] */
1133 ea6cf6be ths
        if (!(ctx->fpscr & FPSCR_PR)) {
1134 ea6cf6be ths
            gen_op_movl_imm_T0(0x3f800000);
1135 ea6cf6be ths
            gen_op_fmov_T0_frN(FREG(B11_8));
1136 ea6cf6be ths
            return;
1137 ea6cf6be ths
        }
1138 ea6cf6be ths
        break;
1139 fdf9b3e8 bellard
    }
1140 fdf9b3e8 bellard
1141 fdf9b3e8 bellard
    fprintf(stderr, "unknown instruction 0x%04x at pc 0x%08x\n",
1142 fdf9b3e8 bellard
            ctx->opcode, ctx->pc);
1143 fdf9b3e8 bellard
    gen_op_raise_illegal_instruction();
1144 fdf9b3e8 bellard
    ctx->flags |= BRANCH_EXCEPTION;
1145 fdf9b3e8 bellard
}
1146 fdf9b3e8 bellard
1147 820e00f2 ths
static inline int
1148 820e00f2 ths
gen_intermediate_code_internal(CPUState * env, TranslationBlock * tb,
1149 820e00f2 ths
                               int search_pc)
1150 fdf9b3e8 bellard
{
1151 fdf9b3e8 bellard
    DisasContext ctx;
1152 fdf9b3e8 bellard
    target_ulong pc_start;
1153 fdf9b3e8 bellard
    static uint16_t *gen_opc_end;
1154 fdf9b3e8 bellard
    uint32_t old_flags;
1155 355fb23d pbrook
    int i, ii;
1156 fdf9b3e8 bellard
1157 fdf9b3e8 bellard
    pc_start = tb->pc;
1158 fdf9b3e8 bellard
    gen_opc_ptr = gen_opc_buf;
1159 fdf9b3e8 bellard
    gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
1160 fdf9b3e8 bellard
    gen_opparam_ptr = gen_opparam_buf;
1161 fdf9b3e8 bellard
    ctx.pc = pc_start;
1162 fdf9b3e8 bellard
    ctx.flags = env->flags;
1163 fdf9b3e8 bellard
    old_flags = 0;
1164 fdf9b3e8 bellard
    ctx.sr = env->sr;
1165 eda9b09b bellard
    ctx.fpscr = env->fpscr;
1166 fdf9b3e8 bellard
    ctx.memidx = (env->sr & SR_MD) ? 1 : 0;
1167 9854bc46 pbrook
    /* We don't know if the delayed pc came from a dynamic or static branch,
1168 9854bc46 pbrook
       so assume it is a dynamic branch.  */
1169 9854bc46 pbrook
    ctx.delayed_pc = -1;
1170 fdf9b3e8 bellard
    ctx.tb = tb;
1171 fdf9b3e8 bellard
    ctx.singlestep_enabled = env->singlestep_enabled;
1172 fdf9b3e8 bellard
    nb_gen_labels = 0;
1173 fdf9b3e8 bellard
1174 fdf9b3e8 bellard
#ifdef DEBUG_DISAS
1175 fdf9b3e8 bellard
    if (loglevel & CPU_LOG_TB_CPU) {
1176 fdf9b3e8 bellard
        fprintf(logfile,
1177 fdf9b3e8 bellard
                "------------------------------------------------\n");
1178 fdf9b3e8 bellard
        cpu_dump_state(env, logfile, fprintf, 0);
1179 fdf9b3e8 bellard
    }
1180 fdf9b3e8 bellard
#endif
1181 fdf9b3e8 bellard
1182 355fb23d pbrook
    ii = -1;
1183 fdf9b3e8 bellard
    while ((old_flags & (DELAY_SLOT | DELAY_SLOT_CONDITIONAL)) == 0 &&
1184 fdf9b3e8 bellard
           (ctx.flags & (BRANCH | BRANCH_CONDITIONAL | MODE_CHANGE |
1185 fdf9b3e8 bellard
                         BRANCH_EXCEPTION)) == 0 &&
1186 fdf9b3e8 bellard
           gen_opc_ptr < gen_opc_end && ctx.sr == env->sr) {
1187 fdf9b3e8 bellard
        old_flags = ctx.flags;
1188 fdf9b3e8 bellard
        if (env->nb_breakpoints > 0) {
1189 fdf9b3e8 bellard
            for (i = 0; i < env->nb_breakpoints; i++) {
1190 fdf9b3e8 bellard
                if (ctx.pc == env->breakpoints[i]) {
1191 fdf9b3e8 bellard
                    /* We have hit a breakpoint - make sure PC is up-to-date */
1192 fdf9b3e8 bellard
                    gen_op_movl_imm_PC(ctx.pc);
1193 fdf9b3e8 bellard
                    gen_op_debug();
1194 fdf9b3e8 bellard
                    ctx.flags |= BRANCH_EXCEPTION;
1195 fdf9b3e8 bellard
                    break;
1196 fdf9b3e8 bellard
                }
1197 fdf9b3e8 bellard
            }
1198 fdf9b3e8 bellard
        }
1199 355fb23d pbrook
        if (search_pc) {
1200 355fb23d pbrook
            i = gen_opc_ptr - gen_opc_buf;
1201 355fb23d pbrook
            if (ii < i) {
1202 355fb23d pbrook
                ii++;
1203 355fb23d pbrook
                while (ii < i)
1204 355fb23d pbrook
                    gen_opc_instr_start[ii++] = 0;
1205 355fb23d pbrook
            }
1206 355fb23d pbrook
            gen_opc_pc[ii] = ctx.pc;
1207 355fb23d pbrook
            gen_opc_instr_start[ii] = 1;
1208 355fb23d pbrook
        }
1209 fdf9b3e8 bellard
#if 0
1210 fdf9b3e8 bellard
        fprintf(stderr, "Loading opcode at address 0x%08x\n", ctx.pc);
1211 fdf9b3e8 bellard
        fflush(stderr);
1212 fdf9b3e8 bellard
#endif
1213 fdf9b3e8 bellard
        ctx.opcode = lduw_code(ctx.pc);
1214 fdf9b3e8 bellard
        decode_opc(&ctx);
1215 fdf9b3e8 bellard
        ctx.pc += 2;
1216 fdf9b3e8 bellard
        if ((ctx.pc & (TARGET_PAGE_SIZE - 1)) == 0)
1217 fdf9b3e8 bellard
            break;
1218 fdf9b3e8 bellard
        if (env->singlestep_enabled)
1219 fdf9b3e8 bellard
            break;
1220 fdf9b3e8 bellard
#ifdef SH4_SINGLE_STEP
1221 fdf9b3e8 bellard
        break;
1222 fdf9b3e8 bellard
#endif
1223 fdf9b3e8 bellard
    }
1224 fdf9b3e8 bellard
1225 9c2a9ea1 pbrook
    if (old_flags & DELAY_SLOT_CONDITIONAL) {
1226 fdf9b3e8 bellard
        gen_delayed_conditional_jump(&ctx);
1227 9c2a9ea1 pbrook
    } else if (old_flags & DELAY_SLOT) {
1228 fdf9b3e8 bellard
        gen_op_clr_delay_slot();
1229 fdf9b3e8 bellard
        gen_jump(&ctx);
1230 9c2a9ea1 pbrook
    } else if (ctx.flags & BRANCH_EXCEPTION) {
1231 9c2a9ea1 pbrook
        gen_jump_exception(&ctx);
1232 9c2a9ea1 pbrook
    } else if ((ctx.flags & (BRANCH | BRANCH_CONDITIONAL)) == 0) {
1233 9c2a9ea1 pbrook
        gen_goto_tb(&ctx, 0, ctx.pc);
1234 fdf9b3e8 bellard
    }
1235 fdf9b3e8 bellard
1236 fdf9b3e8 bellard
    if (env->singlestep_enabled) {
1237 fdf9b3e8 bellard
        gen_op_debug();
1238 fdf9b3e8 bellard
    }
1239 fdf9b3e8 bellard
    *gen_opc_ptr = INDEX_op_end;
1240 355fb23d pbrook
    if (search_pc) {
1241 355fb23d pbrook
        i = gen_opc_ptr - gen_opc_buf;
1242 355fb23d pbrook
        ii++;
1243 355fb23d pbrook
        while (ii <= i)
1244 355fb23d pbrook
            gen_opc_instr_start[ii++] = 0;
1245 355fb23d pbrook
    } else {
1246 355fb23d pbrook
        tb->size = ctx.pc - pc_start;
1247 355fb23d pbrook
    }
1248 fdf9b3e8 bellard
1249 fdf9b3e8 bellard
#ifdef DEBUG_DISAS
1250 fdf9b3e8 bellard
#ifdef SH4_DEBUG_DISAS
1251 fdf9b3e8 bellard
    if (loglevel & CPU_LOG_TB_IN_ASM)
1252 fdf9b3e8 bellard
        fprintf(logfile, "\n");
1253 fdf9b3e8 bellard
#endif
1254 fdf9b3e8 bellard
    if (loglevel & CPU_LOG_TB_IN_ASM) {
1255 fdf9b3e8 bellard
        fprintf(logfile, "IN:\n");        /* , lookup_symbol(pc_start)); */
1256 fdf9b3e8 bellard
        target_disas(logfile, pc_start, ctx.pc - pc_start, 0);
1257 fdf9b3e8 bellard
        fprintf(logfile, "\n");
1258 fdf9b3e8 bellard
    }
1259 fdf9b3e8 bellard
    if (loglevel & CPU_LOG_TB_OP) {
1260 fdf9b3e8 bellard
        fprintf(logfile, "OP:\n");
1261 fdf9b3e8 bellard
        dump_ops(gen_opc_buf, gen_opparam_buf);
1262 fdf9b3e8 bellard
        fprintf(logfile, "\n");
1263 fdf9b3e8 bellard
    }
1264 fdf9b3e8 bellard
#endif
1265 fdf9b3e8 bellard
    return 0;
1266 fdf9b3e8 bellard
}
1267 fdf9b3e8 bellard
1268 fdf9b3e8 bellard
int gen_intermediate_code(CPUState * env, struct TranslationBlock *tb)
1269 fdf9b3e8 bellard
{
1270 fdf9b3e8 bellard
    return gen_intermediate_code_internal(env, tb, 0);
1271 fdf9b3e8 bellard
}
1272 fdf9b3e8 bellard
1273 fdf9b3e8 bellard
int gen_intermediate_code_pc(CPUState * env, struct TranslationBlock *tb)
1274 fdf9b3e8 bellard
{
1275 fdf9b3e8 bellard
    return gen_intermediate_code_internal(env, tb, 1);
1276 fdf9b3e8 bellard
}