Revision c9bac22c target-m68k/translate.c
b/target-m68k/translate.c | ||
---|---|---|
51 | 51 |
uint32_t fpcr; |
52 | 52 |
struct TranslationBlock *tb; |
53 | 53 |
int singlestep_enabled; |
54 |
int is_mem; |
|
54 | 55 |
} DisasContext; |
55 | 56 |
|
56 | 57 |
#define DISAS_JUMP_NEXT 4 |
... | ... | |
129 | 130 |
static inline int gen_load(DisasContext * s, int opsize, int addr, int sign) |
130 | 131 |
{ |
131 | 132 |
int tmp; |
133 |
s->is_mem = 1; |
|
132 | 134 |
switch(opsize) { |
133 | 135 |
case OS_BYTE: |
134 | 136 |
tmp = gen_new_qreg(QMODE_I32); |
... | ... | |
166 | 168 |
/* Generate a store. */ |
167 | 169 |
static inline void gen_store(DisasContext *s, int opsize, int addr, int val) |
168 | 170 |
{ |
171 |
s->is_mem = 1; |
|
169 | 172 |
switch(opsize) { |
170 | 173 |
case OS_BYTE: |
171 | 174 |
gen_st(s, 8, addr, val); |
... | ... | |
2205 | 2208 |
dest = QREG_F0; |
2206 | 2209 |
while (mask) { |
2207 | 2210 |
if (ext & mask) { |
2211 |
s->is_mem = 1; |
|
2208 | 2212 |
if (ext & (1 << 13)) { |
2209 | 2213 |
/* store */ |
2210 | 2214 |
gen_st(s, f64, addr, dest); |
... | ... | |
3169 | 3173 |
dc->singlestep_enabled = env->singlestep_enabled; |
3170 | 3174 |
dc->fpcr = env->fpcr; |
3171 | 3175 |
dc->user = (env->sr & SR_S) == 0; |
3176 |
dc->is_mem = 0; |
|
3172 | 3177 |
nb_gen_labels = 0; |
3173 | 3178 |
lj = -1; |
3174 | 3179 |
do { |
... | ... | |
3199 | 3204 |
last_cc_op = dc->cc_op; |
3200 | 3205 |
dc->insn_pc = dc->pc; |
3201 | 3206 |
disas_m68k_insn(env, dc); |
3207 |
|
|
3208 |
/* Terminate the TB on memory ops if watchpoints are present. */ |
|
3209 |
/* FIXME: This should be replacd by the deterministic execution |
|
3210 |
* IRQ raising bits. */ |
|
3211 |
if (dc->is_mem && env->nb_watchpoints) |
|
3212 |
break; |
|
3202 | 3213 |
} while (!dc->is_jmp && gen_opc_ptr < gen_opc_end && |
3203 | 3214 |
!env->singlestep_enabled && |
3204 | 3215 |
(pc_offset) < (TARGET_PAGE_SIZE - 32)); |
Also available in: Unified diff