Revision e87b7cb0
b/exec-all.h | ||
---|---|---|
77 | 77 |
|
78 | 78 |
void gen_intermediate_code(CPUState *env, struct TranslationBlock *tb); |
79 | 79 |
void gen_intermediate_code_pc(CPUState *env, struct TranslationBlock *tb); |
80 |
void gen_pc_load(CPUState *env, struct TranslationBlock *tb,
|
|
81 |
unsigned long searched_pc, int pc_pos, void *puc);
|
|
80 |
void restore_state_to_opc(CPUState *env, struct TranslationBlock *tb,
|
|
81 |
int pc_pos);
|
|
82 | 82 |
|
83 | 83 |
void cpu_gen_init(void); |
84 | 84 |
int cpu_gen_code(CPUState *env, struct TranslationBlock *tb, |
b/target-alpha/translate.c | ||
---|---|---|
3367 | 3367 |
return env; |
3368 | 3368 |
} |
3369 | 3369 |
|
3370 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
3371 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
3370 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
3372 | 3371 |
{ |
3373 | 3372 |
env->pc = gen_opc_pc[pc_pos]; |
3374 | 3373 |
} |
b/target-arm/translate.c | ||
---|---|---|
9551 | 9551 |
* This is handled in the same way as restoration of the |
9552 | 9552 |
* PC in these situations: we will be called again with search_pc=1 |
9553 | 9553 |
* and generate a mapping of the condexec bits for each PC in |
9554 |
* gen_opc_condexec_bits[]. gen_pc_load[] then uses this to restore
|
|
9555 |
* the condexec bits. |
|
9554 |
* gen_opc_condexec_bits[]. restore_state_to_opc() then uses
|
|
9555 |
* this to restore the condexec bits.
|
|
9556 | 9556 |
* |
9557 | 9557 |
* Note that there are no instructions which can read the condexec |
9558 | 9558 |
* bits, and none which can write non-static values to them, so |
... | ... | |
9817 | 9817 |
#endif |
9818 | 9818 |
} |
9819 | 9819 |
|
9820 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
9821 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
9820 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
9822 | 9821 |
{ |
9823 | 9822 |
env->regs[15] = gen_opc_pc[pc_pos]; |
9824 | 9823 |
env->condexec_bits = gen_opc_condexec_bits[pc_pos]; |
b/target-cris/translate.c | ||
---|---|---|
3604 | 3604 |
#endif |
3605 | 3605 |
} |
3606 | 3606 |
|
3607 |
void gen_pc_load(CPUState *env, struct TranslationBlock *tb, |
|
3608 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
3607 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
3609 | 3608 |
{ |
3610 | 3609 |
env->pc = gen_opc_pc[pc_pos]; |
3611 | 3610 |
} |
b/target-i386/translate.c | ||
---|---|---|
7890 | 7890 |
gen_intermediate_code_internal(env, tb, 1); |
7891 | 7891 |
} |
7892 | 7892 |
|
7893 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
7894 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
7893 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
7895 | 7894 |
{ |
7896 | 7895 |
int cc_op; |
7897 | 7896 |
#ifdef DEBUG_DISAS |
... | ... | |
7903 | 7902 |
qemu_log("0x%04x: " TARGET_FMT_lx "\n", i, gen_opc_pc[i]); |
7904 | 7903 |
} |
7905 | 7904 |
} |
7906 |
qemu_log("spc=0x%08lx pc_pos=0x%x eip=" TARGET_FMT_lx " cs_base=%x\n",
|
|
7907 |
searched_pc, pc_pos, gen_opc_pc[pc_pos] - tb->cs_base,
|
|
7905 |
qemu_log("pc_pos=0x%x eip=" TARGET_FMT_lx " cs_base=%x\n", |
|
7906 |
pc_pos, gen_opc_pc[pc_pos] - tb->cs_base, |
|
7908 | 7907 |
(uint32_t)tb->cs_base); |
7909 | 7908 |
} |
7910 | 7909 |
#endif |
b/target-lm32/translate.c | ||
---|---|---|
1212 | 1212 |
cpu_fprintf(f, "\n\n"); |
1213 | 1213 |
} |
1214 | 1214 |
|
1215 |
void gen_pc_load(CPUState *env, struct TranslationBlock *tb, |
|
1216 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
1215 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
1217 | 1216 |
{ |
1218 | 1217 |
env->pc = gen_opc_pc[pc_pos]; |
1219 | 1218 |
} |
b/target-m68k/translate.c | ||
---|---|---|
3113 | 3113 |
cpu_fprintf (f, "FPRESULT = %12g\n", *(double *)&env->fp_result); |
3114 | 3114 |
} |
3115 | 3115 |
|
3116 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
3117 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
3116 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
3118 | 3117 |
{ |
3119 | 3118 |
env->pc = gen_opc_pc[pc_pos]; |
3120 | 3119 |
} |
b/target-microblaze/translate.c | ||
---|---|---|
1940 | 1940 |
#endif |
1941 | 1941 |
} |
1942 | 1942 |
|
1943 |
void gen_pc_load(CPUState *env, struct TranslationBlock *tb, |
|
1944 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
1943 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
1945 | 1944 |
{ |
1946 | 1945 |
env->sregs[SR_PC] = gen_opc_pc[pc_pos]; |
1947 | 1946 |
} |
b/target-mips/translate.c | ||
---|---|---|
12737 | 12737 |
env->exception_index = EXCP_NONE; |
12738 | 12738 |
} |
12739 | 12739 |
|
12740 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
12741 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
12740 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
12742 | 12741 |
{ |
12743 | 12742 |
env->active_tc.PC = gen_opc_pc[pc_pos]; |
12744 | 12743 |
env->hflags &= ~MIPS_HFLAG_BMASK; |
b/target-ppc/translate.c | ||
---|---|---|
9367 | 9367 |
gen_intermediate_code_internal(env, tb, 1); |
9368 | 9368 |
} |
9369 | 9369 |
|
9370 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
9371 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
9370 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
9372 | 9371 |
{ |
9373 | 9372 |
env->nip = gen_opc_pc[pc_pos]; |
9374 | 9373 |
} |
b/target-s390x/translate.c | ||
---|---|---|
54 | 54 |
{ |
55 | 55 |
} |
56 | 56 |
|
57 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
58 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
57 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
59 | 58 |
{ |
60 | 59 |
env->psw.addr = gen_opc_pc[pc_pos]; |
61 | 60 |
} |
b/target-sh4/translate.c | ||
---|---|---|
2069 | 2069 |
gen_intermediate_code_internal(env, tb, 1); |
2070 | 2070 |
} |
2071 | 2071 |
|
2072 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
2073 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
2072 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
2074 | 2073 |
{ |
2075 | 2074 |
env->pc = gen_opc_pc[pc_pos]; |
2076 | 2075 |
env->flags = gen_opc_hflags[pc_pos]; |
b/target-sparc/translate.c | ||
---|---|---|
5080 | 5080 |
} |
5081 | 5081 |
} |
5082 | 5082 |
|
5083 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
5084 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
5083 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
5085 | 5084 |
{ |
5086 | 5085 |
target_ulong npc; |
5087 | 5086 |
env->pc = gen_opc_pc[pc_pos]; |
b/target-unicore32/translate.c | ||
---|---|---|
2098 | 2098 |
#endif |
2099 | 2099 |
} |
2100 | 2100 |
|
2101 |
void gen_pc_load(CPUState *env, TranslationBlock *tb, |
|
2102 |
unsigned long searched_pc, int pc_pos, void *puc) |
|
2101 |
void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos) |
|
2103 | 2102 |
{ |
2104 | 2103 |
env->regs[31] = gen_opc_pc[pc_pos]; |
2105 | 2104 |
} |
b/translate-all.c | ||
---|---|---|
157 | 157 |
j--; |
158 | 158 |
env->icount_decr.u16.low -= gen_opc_icount[j]; |
159 | 159 |
|
160 |
gen_pc_load(env, tb, searched_pc, j, puc);
|
|
160 |
restore_state_to_opc(env, tb, j);
|
|
161 | 161 |
|
162 | 162 |
#ifdef CONFIG_PROFILER |
163 | 163 |
s->restore_time += profile_getclock() - ti; |
Also available in: Unified diff