tcg: Remove gen_intermediate_code_pc
It is no longer used, so tidy up everything reached by it. This includes the gen_opc_* arrays, the search_pc parameter and the inline gen_intermediate_code_internal functions. Reviewed-by: Aurelien Jarno <aurelien@aurel32.net> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
fca8a500d5
commit
4e5e121515
|
@ -73,7 +73,6 @@ typedef struct TranslationBlock TranslationBlock;
|
||||||
#include "qemu/log.h"
|
#include "qemu/log.h"
|
||||||
|
|
||||||
void gen_intermediate_code(CPUArchState *env, struct TranslationBlock *tb);
|
void gen_intermediate_code(CPUArchState *env, struct TranslationBlock *tb);
|
||||||
void gen_intermediate_code_pc(CPUArchState *env, struct TranslationBlock *tb);
|
|
||||||
void restore_state_to_opc(CPUArchState *env, struct TranslationBlock *tb,
|
void restore_state_to_opc(CPUArchState *env, struct TranslationBlock *tb,
|
||||||
target_ulong *data);
|
target_ulong *data);
|
||||||
|
|
||||||
|
|
|
@ -2858,17 +2858,14 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void gen_intermediate_code_internal(AlphaCPU *cpu,
|
void gen_intermediate_code(CPUAlphaState *env, struct TranslationBlock *tb)
|
||||||
TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
AlphaCPU *cpu = alpha_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUAlphaState *env = &cpu->env;
|
|
||||||
DisasContext ctx, *ctxp = &ctx;
|
DisasContext ctx, *ctxp = &ctx;
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
target_ulong pc_mask;
|
target_ulong pc_mask;
|
||||||
uint32_t insn;
|
uint32_t insn;
|
||||||
int j, lj = -1;
|
|
||||||
ExitStatus ret;
|
ExitStatus ret;
|
||||||
int num_insns;
|
int num_insns;
|
||||||
int max_insns;
|
int max_insns;
|
||||||
|
@ -2915,18 +2912,6 @@ static inline void gen_intermediate_code_internal(AlphaCPU *cpu,
|
||||||
|
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = ctx.pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(ctx.pc);
|
tcg_gen_insn_start(ctx.pc);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -2993,16 +2978,8 @@ static inline void gen_intermediate_code_internal(AlphaCPU *cpu,
|
||||||
|
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (search_pc) {
|
tb->size = ctx.pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tb->size = ctx.pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#ifdef DEBUG_DISAS
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
|
@ -3013,16 +2990,6 @@ static inline void gen_intermediate_code_internal(AlphaCPU *cpu,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code (CPUAlphaState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(alpha_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc (CPUAlphaState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(alpha_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void restore_state_to_opc(CPUAlphaState *env, TranslationBlock *tb,
|
void restore_state_to_opc(CPUAlphaState *env, TranslationBlock *tb,
|
||||||
target_ulong *data)
|
target_ulong *data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -11000,14 +11000,11 @@ static void disas_a64_insn(CPUARMState *env, DisasContext *s)
|
||||||
free_tmp_a64(s);
|
free_tmp_a64(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code_internal_a64(ARMCPU *cpu,
|
void gen_intermediate_code_a64(ARMCPU *cpu, TranslationBlock *tb)
|
||||||
TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUARMState *env = &cpu->env;
|
CPUARMState *env = &cpu->env;
|
||||||
DisasContext dc1, *dc = &dc1;
|
DisasContext dc1, *dc = &dc1;
|
||||||
int j, lj;
|
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
target_ulong next_page_start;
|
target_ulong next_page_start;
|
||||||
int num_insns;
|
int num_insns;
|
||||||
|
@ -11066,7 +11063,6 @@ void gen_intermediate_code_internal_a64(ARMCPU *cpu,
|
||||||
init_tmp_a64_array(dc);
|
init_tmp_a64_array(dc);
|
||||||
|
|
||||||
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||||
lj = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -11081,18 +11077,6 @@ void gen_intermediate_code_internal_a64(ARMCPU *cpu,
|
||||||
tcg_clear_temp_count();
|
tcg_clear_temp_count();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc->pc, 0);
|
tcg_gen_insn_start(dc->pc, 0);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -11221,14 +11205,6 @@ done_generating:
|
||||||
qemu_log("\n");
|
qemu_log("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (search_pc) {
|
tb->size = dc->pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tb->size = dc->pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,6 @@
|
||||||
#define ARCH(x) do { if (!ENABLE_ARCH_##x) goto illegal_op; } while(0)
|
#define ARCH(x) do { if (!ENABLE_ARCH_##x) goto illegal_op; } while(0)
|
||||||
|
|
||||||
#include "translate.h"
|
#include "translate.h"
|
||||||
static uint32_t gen_opc_condexec_bits[OPC_BUF_SIZE];
|
|
||||||
|
|
||||||
#if defined(CONFIG_USER_ONLY)
|
#if defined(CONFIG_USER_ONLY)
|
||||||
#define IS_USER(s) 1
|
#define IS_USER(s) 1
|
||||||
|
@ -11168,16 +11167,12 @@ undef:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* generate intermediate code in gen_opc_buf and gen_opparam_buf for
|
/* generate intermediate code in gen_opc_buf and gen_opparam_buf for
|
||||||
basic block 'tb'. If search_pc is TRUE, also generate PC
|
basic block 'tb'. */
|
||||||
information for each intermediate instruction. */
|
void gen_intermediate_code(CPUARMState *env, TranslationBlock *tb)
|
||||||
static inline void gen_intermediate_code_internal(ARMCPU *cpu,
|
|
||||||
TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
ARMCPU *cpu = arm_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUARMState *env = &cpu->env;
|
|
||||||
DisasContext dc1, *dc = &dc1;
|
DisasContext dc1, *dc = &dc1;
|
||||||
int j, lj;
|
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
target_ulong next_page_start;
|
target_ulong next_page_start;
|
||||||
int num_insns;
|
int num_insns;
|
||||||
|
@ -11189,7 +11184,7 @@ static inline void gen_intermediate_code_internal(ARMCPU *cpu,
|
||||||
* the A32/T32 complexity to do with conditional execution/IT blocks/etc.
|
* the A32/T32 complexity to do with conditional execution/IT blocks/etc.
|
||||||
*/
|
*/
|
||||||
if (ARM_TBFLAG_AARCH64_STATE(tb->flags)) {
|
if (ARM_TBFLAG_AARCH64_STATE(tb->flags)) {
|
||||||
gen_intermediate_code_internal_a64(cpu, tb, search_pc);
|
gen_intermediate_code_a64(cpu, tb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11255,7 +11250,6 @@ static inline void gen_intermediate_code_internal(ARMCPU *cpu,
|
||||||
/* FIXME: cpu_M0 can probably be the same as cpu_V0. */
|
/* FIXME: cpu_M0 can probably be the same as cpu_V0. */
|
||||||
cpu_M0 = tcg_temp_new_i64();
|
cpu_M0 = tcg_temp_new_i64();
|
||||||
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||||
lj = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -11289,10 +11283,9 @@ static inline void gen_intermediate_code_internal(ARMCPU *cpu,
|
||||||
* (3) if we leave the TB unexpectedly (eg a data abort on a load)
|
* (3) if we leave the TB unexpectedly (eg a data abort on a load)
|
||||||
* then the CPUARMState will be wrong and we need to reset it.
|
* then the CPUARMState will be wrong and we need to reset it.
|
||||||
* This is handled in the same way as restoration of the
|
* This is handled in the same way as restoration of the
|
||||||
* PC in these situations: we will be called again with search_pc=1
|
* PC in these situations; we save the value of the condexec bits
|
||||||
* and generate a mapping of the condexec bits for each PC in
|
* for each PC via tcg_gen_insn_start(), and restore_state_to_opc()
|
||||||
* gen_opc_condexec_bits[]. restore_state_to_opc() then uses
|
* then uses this to restore them after an exception.
|
||||||
* this to restore the condexec bits.
|
|
||||||
*
|
*
|
||||||
* Note that there are no instructions which can read the condexec
|
* Note that there are no instructions which can read the condexec
|
||||||
* bits, and none which can write non-static values to them, so
|
* bits, and none which can write non-static values to them, so
|
||||||
|
@ -11309,18 +11302,6 @@ static inline void gen_intermediate_code_internal(ARMCPU *cpu,
|
||||||
store_cpu_field(tmp, condexec_bits);
|
store_cpu_field(tmp, condexec_bits);
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
|
||||||
gen_opc_condexec_bits[lj] = (dc->condexec_cond << 4) | (dc->condexec_mask >> 1);
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc->pc,
|
tcg_gen_insn_start(dc->pc,
|
||||||
(dc->condexec_cond << 4) | (dc->condexec_mask >> 1));
|
(dc->condexec_cond << 4) | (dc->condexec_mask >> 1));
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
@ -11537,25 +11518,8 @@ done_generating:
|
||||||
qemu_log("\n");
|
qemu_log("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (search_pc) {
|
tb->size = dc->pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
} else {
|
|
||||||
tb->size = dc->pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code(CPUARMState *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(arm_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUARMState *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(arm_env_get_cpu(env), tb, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *cpu_mode_names[16] = {
|
static const char *cpu_mode_names[16] = {
|
||||||
|
|
|
@ -122,9 +122,7 @@ static inline int default_exception_el(DisasContext *s)
|
||||||
|
|
||||||
#ifdef TARGET_AARCH64
|
#ifdef TARGET_AARCH64
|
||||||
void a64_translate_init(void);
|
void a64_translate_init(void);
|
||||||
void gen_intermediate_code_internal_a64(ARMCPU *cpu,
|
void gen_intermediate_code_a64(ARMCPU *cpu, TranslationBlock *tb);
|
||||||
TranslationBlock *tb,
|
|
||||||
bool search_pc);
|
|
||||||
void gen_a64_set_pc_im(uint64_t val);
|
void gen_a64_set_pc_im(uint64_t val);
|
||||||
void aarch64_cpu_dump_state(CPUState *cs, FILE *f,
|
void aarch64_cpu_dump_state(CPUState *cs, FILE *f,
|
||||||
fprintf_function cpu_fprintf, int flags);
|
fprintf_function cpu_fprintf, int flags);
|
||||||
|
@ -133,9 +131,7 @@ static inline void a64_translate_init(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void gen_intermediate_code_internal_a64(ARMCPU *cpu,
|
static inline void gen_intermediate_code_a64(ARMCPU *cpu, TranslationBlock *tb)
|
||||||
TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3067,15 +3067,12 @@ static unsigned int crisv32_decoder(CPUCRISState *env, DisasContext *dc)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* generate intermediate code for basic block 'tb'. */
|
/* generate intermediate code for basic block 'tb'. */
|
||||||
static inline void
|
void gen_intermediate_code(CPUCRISState *env, struct TranslationBlock *tb)
|
||||||
gen_intermediate_code_internal(CRISCPU *cpu, TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
CRISCPU *cpu = cris_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUCRISState *env = &cpu->env;
|
|
||||||
uint32_t pc_start;
|
uint32_t pc_start;
|
||||||
unsigned int insn_len;
|
unsigned int insn_len;
|
||||||
int j, lj;
|
|
||||||
struct DisasContext ctx;
|
struct DisasContext ctx;
|
||||||
struct DisasContext *dc = &ctx;
|
struct DisasContext *dc = &ctx;
|
||||||
uint32_t next_page_start;
|
uint32_t next_page_start;
|
||||||
|
@ -3127,13 +3124,13 @@ gen_intermediate_code_internal(CRISCPU *cpu, TranslationBlock *tb,
|
||||||
|
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
qemu_log(
|
qemu_log(
|
||||||
"srch=%d pc=%x %x flg=%" PRIx64 " bt=%x ds=%u ccs=%x\n"
|
"pc=%x %x flg=%" PRIx64 " bt=%x ds=%u ccs=%x\n"
|
||||||
"pid=%x usp=%x\n"
|
"pid=%x usp=%x\n"
|
||||||
"%x.%x.%x.%x\n"
|
"%x.%x.%x.%x\n"
|
||||||
"%x.%x.%x.%x\n"
|
"%x.%x.%x.%x\n"
|
||||||
"%x.%x.%x.%x\n"
|
"%x.%x.%x.%x\n"
|
||||||
"%x.%x.%x.%x\n",
|
"%x.%x.%x.%x\n",
|
||||||
search_pc, dc->pc, dc->ppc,
|
dc->pc, dc->ppc,
|
||||||
(uint64_t)tb->flags,
|
(uint64_t)tb->flags,
|
||||||
env->btarget, (unsigned)tb->flags & 7,
|
env->btarget, (unsigned)tb->flags & 7,
|
||||||
env->pregs[PR_CCS],
|
env->pregs[PR_CCS],
|
||||||
|
@ -3149,7 +3146,6 @@ gen_intermediate_code_internal(CRISCPU *cpu, TranslationBlock *tb,
|
||||||
}
|
}
|
||||||
|
|
||||||
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||||
lj = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -3161,22 +3157,6 @@ gen_intermediate_code_internal(CRISCPU *cpu, TranslationBlock *tb,
|
||||||
|
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (dc->delayed_branch == 1) {
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->ppc | 1;
|
|
||||||
} else {
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc->delayed_branch == 1
|
tcg_gen_insn_start(dc->delayed_branch == 1
|
||||||
? dc->ppc | 1 : dc->pc);
|
? dc->ppc | 1 : dc->pc);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
@ -3308,16 +3288,8 @@ gen_intermediate_code_internal(CRISCPU *cpu, TranslationBlock *tb,
|
||||||
}
|
}
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (search_pc) {
|
tb->size = dc->pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tb->size = dc->pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#ifdef DEBUG_DISAS
|
||||||
#if !DISAS_CRIS
|
#if !DISAS_CRIS
|
||||||
|
@ -3331,16 +3303,6 @@ gen_intermediate_code_internal(CRISCPU *cpu, TranslationBlock *tb,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code (CPUCRISState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(cris_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc (CPUCRISState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(cris_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void cris_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
void cris_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
|
|
|
@ -75,8 +75,6 @@ static TCGv_ptr cpu_ptr0, cpu_ptr1;
|
||||||
static TCGv_i32 cpu_tmp2_i32, cpu_tmp3_i32;
|
static TCGv_i32 cpu_tmp2_i32, cpu_tmp3_i32;
|
||||||
static TCGv_i64 cpu_tmp1_i64;
|
static TCGv_i64 cpu_tmp1_i64;
|
||||||
|
|
||||||
static uint8_t gen_opc_cc_op[OPC_BUF_SIZE];
|
|
||||||
|
|
||||||
#include "exec/gen-icount.h"
|
#include "exec/gen-icount.h"
|
||||||
|
|
||||||
#ifdef TARGET_X86_64
|
#ifdef TARGET_X86_64
|
||||||
|
@ -7839,17 +7837,13 @@ void optimize_flags_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* generate intermediate code in gen_opc_buf and gen_opparam_buf for
|
/* generate intermediate code in gen_opc_buf and gen_opparam_buf for
|
||||||
basic block 'tb'. If search_pc is TRUE, also generate PC
|
basic block 'tb'. */
|
||||||
information for each intermediate instruction. */
|
void gen_intermediate_code(CPUX86State *env, TranslationBlock *tb)
|
||||||
static inline void gen_intermediate_code_internal(X86CPU *cpu,
|
|
||||||
TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
X86CPU *cpu = x86_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUX86State *env = &cpu->env;
|
|
||||||
DisasContext dc1, *dc = &dc1;
|
DisasContext dc1, *dc = &dc1;
|
||||||
target_ulong pc_ptr;
|
target_ulong pc_ptr;
|
||||||
int j, lj;
|
|
||||||
uint64_t flags;
|
uint64_t flags;
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
target_ulong cs_base;
|
target_ulong cs_base;
|
||||||
|
@ -7929,7 +7923,6 @@ static inline void gen_intermediate_code_internal(X86CPU *cpu,
|
||||||
|
|
||||||
dc->is_jmp = DISAS_NEXT;
|
dc->is_jmp = DISAS_NEXT;
|
||||||
pc_ptr = pc_start;
|
pc_ptr = pc_start;
|
||||||
lj = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -7941,18 +7934,6 @@ static inline void gen_intermediate_code_internal(X86CPU *cpu,
|
||||||
|
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
for(;;) {
|
for(;;) {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = pc_ptr;
|
|
||||||
gen_opc_cc_op[lj] = dc->cc_op;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(pc_ptr, dc->cc_op);
|
tcg_gen_insn_start(pc_ptr, dc->cc_op);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -8015,14 +7996,6 @@ static inline void gen_intermediate_code_internal(X86CPU *cpu,
|
||||||
done_generating:
|
done_generating:
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
/* we don't forget to fill the last values */
|
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
lj++;
|
|
||||||
while (lj <= j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#ifdef DEBUG_DISAS
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
int disas_flags;
|
int disas_flags;
|
||||||
|
@ -8039,20 +8012,8 @@ done_generating:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!search_pc) {
|
tb->size = pc_ptr - pc_start;
|
||||||
tb->size = pc_ptr - pc_start;
|
tb->icount = num_insns;
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code(CPUX86State *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(x86_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUX86State *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(x86_env_get_cpu(env), tb, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void restore_state_to_opc(CPUX86State *env, TranslationBlock *tb,
|
void restore_state_to_opc(CPUX86State *env, TranslationBlock *tb,
|
||||||
|
|
|
@ -1033,15 +1033,12 @@ static inline void decode(DisasContext *dc, uint32_t ir)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* generate intermediate code for basic block 'tb'. */
|
/* generate intermediate code for basic block 'tb'. */
|
||||||
static inline
|
void gen_intermediate_code(CPULM32State *env, struct TranslationBlock *tb)
|
||||||
void gen_intermediate_code_internal(LM32CPU *cpu,
|
|
||||||
TranslationBlock *tb, bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
LM32CPU *cpu = lm32_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPULM32State *env = &cpu->env;
|
|
||||||
struct DisasContext ctx, *dc = &ctx;
|
struct DisasContext ctx, *dc = &ctx;
|
||||||
uint32_t pc_start;
|
uint32_t pc_start;
|
||||||
int j, lj;
|
|
||||||
uint32_t next_page_start;
|
uint32_t next_page_start;
|
||||||
int num_insns;
|
int num_insns;
|
||||||
int max_insns;
|
int max_insns;
|
||||||
|
@ -1063,7 +1060,6 @@ void gen_intermediate_code_internal(LM32CPU *cpu,
|
||||||
}
|
}
|
||||||
|
|
||||||
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||||
lj = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -1075,18 +1071,6 @@ void gen_intermediate_code_internal(LM32CPU *cpu,
|
||||||
|
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc->pc);
|
tcg_gen_insn_start(dc->pc);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -1142,16 +1126,8 @@ void gen_intermediate_code_internal(LM32CPU *cpu,
|
||||||
|
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (search_pc) {
|
tb->size = dc->pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tb->size = dc->pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#ifdef DEBUG_DISAS
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
|
@ -1163,16 +1139,6 @@ void gen_intermediate_code_internal(LM32CPU *cpu,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code(CPULM32State *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(lm32_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPULM32State *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(lm32_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lm32_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
void lm32_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2962,14 +2962,11 @@ static void disas_m68k_insn(CPUM68KState * env, DisasContext *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* generate intermediate code for basic block 'tb'. */
|
/* generate intermediate code for basic block 'tb'. */
|
||||||
static inline void
|
void gen_intermediate_code(CPUM68KState *env, TranslationBlock *tb)
|
||||||
gen_intermediate_code_internal(M68kCPU *cpu, TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
M68kCPU *cpu = m68k_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUM68KState *env = &cpu->env;
|
|
||||||
DisasContext dc1, *dc = &dc1;
|
DisasContext dc1, *dc = &dc1;
|
||||||
int j, lj;
|
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
int pc_offset;
|
int pc_offset;
|
||||||
int num_insns;
|
int num_insns;
|
||||||
|
@ -2988,7 +2985,6 @@ gen_intermediate_code_internal(M68kCPU *cpu, TranslationBlock *tb,
|
||||||
dc->fpcr = env->fpcr;
|
dc->fpcr = env->fpcr;
|
||||||
dc->user = (env->sr & SR_S) == 0;
|
dc->user = (env->sr & SR_S) == 0;
|
||||||
dc->done_mac = 0;
|
dc->done_mac = 0;
|
||||||
lj = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -3002,17 +2998,6 @@ gen_intermediate_code_internal(M68kCPU *cpu, TranslationBlock *tb,
|
||||||
do {
|
do {
|
||||||
pc_offset = dc->pc - pc_start;
|
pc_offset = dc->pc - pc_start;
|
||||||
gen_throws_exception = NULL;
|
gen_throws_exception = NULL;
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc->pc);
|
tcg_gen_insn_start(dc->pc);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -3071,28 +3056,8 @@ gen_intermediate_code_internal(M68kCPU *cpu, TranslationBlock *tb,
|
||||||
qemu_log("\n");
|
qemu_log("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (search_pc) {
|
tb->size = dc->pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
} else {
|
|
||||||
tb->size = dc->pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
|
|
||||||
//optimize_flags();
|
|
||||||
//expand_target_qops();
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code(CPUM68KState *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(m68k_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUM68KState *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(m68k_env_get_cpu(env), tb, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void m68k_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
void m68k_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
||||||
|
|
|
@ -1627,14 +1627,11 @@ static inline void decode(DisasContext *dc, uint32_t ir)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* generate intermediate code for basic block 'tb'. */
|
/* generate intermediate code for basic block 'tb'. */
|
||||||
static inline void
|
void gen_intermediate_code(CPUMBState *env, struct TranslationBlock *tb)
|
||||||
gen_intermediate_code_internal(MicroBlazeCPU *cpu, TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
MicroBlazeCPU *cpu = mb_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUMBState *env = &cpu->env;
|
|
||||||
uint32_t pc_start;
|
uint32_t pc_start;
|
||||||
int j, lj;
|
|
||||||
struct DisasContext ctx;
|
struct DisasContext ctx;
|
||||||
struct DisasContext *dc = &ctx;
|
struct DisasContext *dc = &ctx;
|
||||||
uint32_t next_page_start, org_flags;
|
uint32_t next_page_start, org_flags;
|
||||||
|
@ -1671,7 +1668,6 @@ gen_intermediate_code_internal(MicroBlazeCPU *cpu, TranslationBlock *tb,
|
||||||
}
|
}
|
||||||
|
|
||||||
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||||
lj = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -1684,17 +1680,6 @@ gen_intermediate_code_internal(MicroBlazeCPU *cpu, TranslationBlock *tb,
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc->pc);
|
tcg_gen_insn_start(dc->pc);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -1813,15 +1798,8 @@ gen_intermediate_code_internal(MicroBlazeCPU *cpu, TranslationBlock *tb,
|
||||||
}
|
}
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (search_pc) {
|
tb->size = dc->pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
} else {
|
|
||||||
tb->size = dc->pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#ifdef DEBUG_DISAS
|
||||||
#if !SIM_COMPAT
|
#if !SIM_COMPAT
|
||||||
|
@ -1838,16 +1816,6 @@ gen_intermediate_code_internal(MicroBlazeCPU *cpu, TranslationBlock *tb,
|
||||||
assert(!dc->abort_at_next_insn);
|
assert(!dc->abort_at_next_insn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code (CPUMBState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(mb_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc (CPUMBState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(mb_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void mb_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
void mb_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
|
||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1359,9 +1359,6 @@ static TCGv_i32 fpu_fcr0, fpu_fcr31;
|
||||||
static TCGv_i64 fpu_f64[32];
|
static TCGv_i64 fpu_f64[32];
|
||||||
static TCGv_i64 msa_wr_d[64];
|
static TCGv_i64 msa_wr_d[64];
|
||||||
|
|
||||||
static uint32_t gen_opc_hflags[OPC_BUF_SIZE];
|
|
||||||
static target_ulong gen_opc_btarget[OPC_BUF_SIZE];
|
|
||||||
|
|
||||||
#include "exec/gen-icount.h"
|
#include "exec/gen-icount.h"
|
||||||
|
|
||||||
#define gen_helper_0e0i(name, arg) do { \
|
#define gen_helper_0e0i(name, arg) do { \
|
||||||
|
@ -19535,24 +19532,18 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
void gen_intermediate_code(CPUMIPSState *env, struct TranslationBlock *tb)
|
||||||
gen_intermediate_code_internal(MIPSCPU *cpu, TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
MIPSCPU *cpu = mips_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUMIPSState *env = &cpu->env;
|
|
||||||
DisasContext ctx;
|
DisasContext ctx;
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
target_ulong next_page_start;
|
target_ulong next_page_start;
|
||||||
int j, lj = -1;
|
|
||||||
int num_insns;
|
int num_insns;
|
||||||
int max_insns;
|
int max_insns;
|
||||||
int insn_bytes;
|
int insn_bytes;
|
||||||
int is_slot;
|
int is_slot;
|
||||||
|
|
||||||
if (search_pc)
|
|
||||||
qemu_log("search pc %d\n", search_pc);
|
|
||||||
|
|
||||||
pc_start = tb->pc;
|
pc_start = tb->pc;
|
||||||
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||||
ctx.pc = pc_start;
|
ctx.pc = pc_start;
|
||||||
|
@ -19596,19 +19587,6 @@ gen_intermediate_code_internal(MIPSCPU *cpu, TranslationBlock *tb,
|
||||||
LOG_DISAS("\ntb %p idx %d hflags %04x\n", tb, ctx.mem_idx, ctx.hflags);
|
LOG_DISAS("\ntb %p idx %d hflags %04x\n", tb, ctx.mem_idx, ctx.hflags);
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
while (ctx.bstate == BS_NONE) {
|
while (ctx.bstate == BS_NONE) {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = ctx.pc;
|
|
||||||
gen_opc_hflags[lj] = ctx.hflags & MIPS_HFLAG_BMASK;
|
|
||||||
gen_opc_btarget[lj] = ctx.btarget;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(ctx.pc, ctx.hflags & MIPS_HFLAG_BMASK, ctx.btarget);
|
tcg_gen_insn_start(ctx.pc, ctx.hflags & MIPS_HFLAG_BMASK, ctx.btarget);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -19709,15 +19687,9 @@ gen_intermediate_code_internal(MIPSCPU *cpu, TranslationBlock *tb,
|
||||||
done_generating:
|
done_generating:
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (search_pc) {
|
tb->size = ctx.pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
} else {
|
|
||||||
tb->size = ctx.pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
#ifdef DEBUG_DISAS
|
#ifdef DEBUG_DISAS
|
||||||
LOG_DISAS("\n");
|
LOG_DISAS("\n");
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
|
@ -19728,16 +19700,6 @@ done_generating:
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code (CPUMIPSState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(mips_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc (CPUMIPSState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(mips_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fpu_dump_state(CPUMIPSState *env, FILE *f, fprintf_function fpu_fprintf,
|
static void fpu_dump_state(CPUMIPSState *env, FILE *f, fprintf_function fpu_fprintf,
|
||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
|
|
|
@ -815,15 +815,12 @@ static int decode_opc(MoxieCPU *cpu, DisasContext *ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* generate intermediate code for basic block 'tb'. */
|
/* generate intermediate code for basic block 'tb'. */
|
||||||
static inline void
|
void gen_intermediate_code(CPUMoxieState *env, struct TranslationBlock *tb)
|
||||||
gen_intermediate_code_internal(MoxieCPU *cpu, TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
MoxieCPU *cpu = moxie_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
DisasContext ctx;
|
DisasContext ctx;
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
int j, lj = -1;
|
|
||||||
CPUMoxieState *env = &cpu->env;
|
|
||||||
int num_insns, max_insns;
|
int num_insns, max_insns;
|
||||||
|
|
||||||
pc_start = tb->pc;
|
pc_start = tb->pc;
|
||||||
|
@ -844,18 +841,6 @@ gen_intermediate_code_internal(MoxieCPU *cpu, TranslationBlock *tb,
|
||||||
|
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = ctx.pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(ctx.pc);
|
tcg_gen_insn_start(ctx.pc);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -900,26 +885,8 @@ gen_intermediate_code_internal(MoxieCPU *cpu, TranslationBlock *tb,
|
||||||
done_generating:
|
done_generating:
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (search_pc) {
|
tb->size = ctx.pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tb->size = ctx.pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code(CPUMoxieState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(moxie_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUMoxieState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(moxie_env_get_cpu(env), tb, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void restore_state_to_opc(CPUMoxieState *env, TranslationBlock *tb,
|
void restore_state_to_opc(CPUMoxieState *env, TranslationBlock *tb,
|
||||||
|
|
|
@ -1618,14 +1618,12 @@ static void disas_openrisc_insn(DisasContext *dc, OpenRISCCPU *cpu)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
void gen_intermediate_code(CPUOpenRISCState *env, struct TranslationBlock *tb)
|
||||||
TranslationBlock *tb,
|
|
||||||
int search_pc)
|
|
||||||
{
|
{
|
||||||
|
OpenRISCCPU *cpu = openrisc_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
struct DisasContext ctx, *dc = &ctx;
|
struct DisasContext ctx, *dc = &ctx;
|
||||||
uint32_t pc_start;
|
uint32_t pc_start;
|
||||||
int j, k;
|
|
||||||
uint32_t next_page_start;
|
uint32_t next_page_start;
|
||||||
int num_insns;
|
int num_insns;
|
||||||
int max_insns;
|
int max_insns;
|
||||||
|
@ -1647,7 +1645,6 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||||
}
|
}
|
||||||
|
|
||||||
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||||
k = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
|
|
||||||
|
@ -1661,18 +1658,6 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (k < j) {
|
|
||||||
k++;
|
|
||||||
while (k < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[k++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[k] = dc->pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[k] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[k] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc->pc);
|
tcg_gen_insn_start(dc->pc);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -1746,16 +1731,8 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||||
|
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (search_pc) {
|
tb->size = dc->pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
k++;
|
|
||||||
while (k <= j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[k++] = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tb->size = dc->pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#ifdef DEBUG_DISAS
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
|
@ -1767,17 +1744,6 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code(CPUOpenRISCState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(openrisc_env_get_cpu(env), tb, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUOpenRISCState *env,
|
|
||||||
struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(openrisc_env_get_cpu(env), tb, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void openrisc_cpu_dump_state(CPUState *cs, FILE *f,
|
void openrisc_cpu_dump_state(CPUState *cs, FILE *f,
|
||||||
fprintf_function cpu_fprintf,
|
fprintf_function cpu_fprintf,
|
||||||
int flags)
|
int flags)
|
||||||
|
|
|
@ -11409,16 +11409,13 @@ void ppc_cpu_dump_statistics(CPUState *cs, FILE*f,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
static inline void gen_intermediate_code_internal(PowerPCCPU *cpu,
|
void gen_intermediate_code(CPUPPCState *env, struct TranslationBlock *tb)
|
||||||
TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
PowerPCCPU *cpu = ppc_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUPPCState *env = &cpu->env;
|
|
||||||
DisasContext ctx, *ctxp = &ctx;
|
DisasContext ctx, *ctxp = &ctx;
|
||||||
opc_handler_t **table, *handler;
|
opc_handler_t **table, *handler;
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
int j, lj = -1;
|
|
||||||
int num_insns;
|
int num_insns;
|
||||||
int max_insns;
|
int max_insns;
|
||||||
|
|
||||||
|
@ -11486,17 +11483,6 @@ static inline void gen_intermediate_code_internal(PowerPCCPU *cpu,
|
||||||
tcg_clear_temp_count();
|
tcg_clear_temp_count();
|
||||||
/* Set env in case of segfault during code fetch */
|
/* Set env in case of segfault during code fetch */
|
||||||
while (ctx.exception == POWERPC_EXCP_NONE && !tcg_op_buf_full()) {
|
while (ctx.exception == POWERPC_EXCP_NONE && !tcg_op_buf_full()) {
|
||||||
if (unlikely(search_pc)) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = ctx.nip;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(ctx.nip);
|
tcg_gen_insn_start(ctx.nip);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -11598,15 +11584,9 @@ static inline void gen_intermediate_code_internal(PowerPCCPU *cpu,
|
||||||
}
|
}
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (unlikely(search_pc)) {
|
tb->size = ctx.nip - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
} else {
|
|
||||||
tb->size = ctx.nip - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
#if defined(DEBUG_DISAS)
|
#if defined(DEBUG_DISAS)
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
int flags;
|
int flags;
|
||||||
|
@ -11619,16 +11599,6 @@ static inline void gen_intermediate_code_internal(PowerPCCPU *cpu,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code (CPUPPCState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(ppc_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc (CPUPPCState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(ppc_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void restore_state_to_opc(CPUPPCState *env, TranslationBlock *tb,
|
void restore_state_to_opc(CPUPPCState *env, TranslationBlock *tb,
|
||||||
target_ulong *data)
|
target_ulong *data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -161,8 +161,6 @@ static char cpu_reg_names[32][4];
|
||||||
static TCGv_i64 regs[16];
|
static TCGv_i64 regs[16];
|
||||||
static TCGv_i64 fregs[16];
|
static TCGv_i64 fregs[16];
|
||||||
|
|
||||||
static uint8_t gen_opc_cc_op[OPC_BUF_SIZE];
|
|
||||||
|
|
||||||
void s390x_translate_init(void)
|
void s390x_translate_init(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -5319,16 +5317,13 @@ static ExitStatus translate_one(CPUS390XState *env, DisasContext *s)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void gen_intermediate_code_internal(S390CPU *cpu,
|
void gen_intermediate_code(CPUS390XState *env, struct TranslationBlock *tb)
|
||||||
TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
S390CPU *cpu = s390_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUS390XState *env = &cpu->env;
|
|
||||||
DisasContext dc;
|
DisasContext dc;
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
uint64_t next_page_start;
|
uint64_t next_page_start;
|
||||||
int j, lj = -1;
|
|
||||||
int num_insns, max_insns;
|
int num_insns, max_insns;
|
||||||
ExitStatus status;
|
ExitStatus status;
|
||||||
bool do_debug;
|
bool do_debug;
|
||||||
|
@ -5359,19 +5354,6 @@ static inline void gen_intermediate_code_internal(S390CPU *cpu,
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc.pc;
|
|
||||||
gen_opc_cc_op[lj] = dc.cc_op;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc.pc, dc.cc_op);
|
tcg_gen_insn_start(dc.pc, dc.cc_op);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -5430,16 +5412,8 @@ static inline void gen_intermediate_code_internal(S390CPU *cpu,
|
||||||
|
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (search_pc) {
|
tb->size = dc.pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tb->size = dc.pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(S390X_DEBUG_DISAS)
|
#if defined(S390X_DEBUG_DISAS)
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
|
@ -5450,16 +5424,6 @@ static inline void gen_intermediate_code_internal(S390CPU *cpu,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code (CPUS390XState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(s390_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc (CPUS390XState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(s390_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void restore_state_to_opc(CPUS390XState *env, TranslationBlock *tb,
|
void restore_state_to_opc(CPUS390XState *env, TranslationBlock *tb,
|
||||||
target_ulong *data)
|
target_ulong *data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -70,8 +70,6 @@ static TCGv cpu_fregs[32];
|
||||||
/* internal register indexes */
|
/* internal register indexes */
|
||||||
static TCGv cpu_flags, cpu_delayed_pc;
|
static TCGv cpu_flags, cpu_delayed_pc;
|
||||||
|
|
||||||
static uint32_t gen_opc_hflags[OPC_BUF_SIZE];
|
|
||||||
|
|
||||||
#include "exec/gen-icount.h"
|
#include "exec/gen-icount.h"
|
||||||
|
|
||||||
void sh4_translate_init(void)
|
void sh4_translate_init(void)
|
||||||
|
@ -1816,15 +1814,12 @@ static void decode_opc(DisasContext * ctx)
|
||||||
gen_store_flags(ctx->flags);
|
gen_store_flags(ctx->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
void gen_intermediate_code(CPUSH4State * env, struct TranslationBlock *tb)
|
||||||
gen_intermediate_code_internal(SuperHCPU *cpu, TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
SuperHCPU *cpu = sh_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUSH4State *env = &cpu->env;
|
|
||||||
DisasContext ctx;
|
DisasContext ctx;
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
int i, ii;
|
|
||||||
int num_insns;
|
int num_insns;
|
||||||
int max_insns;
|
int max_insns;
|
||||||
|
|
||||||
|
@ -1841,7 +1836,6 @@ gen_intermediate_code_internal(SuperHCPU *cpu, TranslationBlock *tb,
|
||||||
ctx.features = env->features;
|
ctx.features = env->features;
|
||||||
ctx.has_movcal = (ctx.flags & TB_FLAG_PENDING_MOVCA);
|
ctx.has_movcal = (ctx.flags & TB_FLAG_PENDING_MOVCA);
|
||||||
|
|
||||||
ii = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -1853,18 +1847,6 @@ gen_intermediate_code_internal(SuperHCPU *cpu, TranslationBlock *tb,
|
||||||
|
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
while (ctx.bstate == BS_NONE && !tcg_op_buf_full()) {
|
while (ctx.bstate == BS_NONE && !tcg_op_buf_full()) {
|
||||||
if (search_pc) {
|
|
||||||
i = tcg_op_buf_count();
|
|
||||||
if (ii < i) {
|
|
||||||
ii++;
|
|
||||||
while (ii < i)
|
|
||||||
tcg_ctx.gen_opc_instr_start[ii++] = 0;
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[ii] = ctx.pc;
|
|
||||||
gen_opc_hflags[ii] = ctx.flags;
|
|
||||||
tcg_ctx.gen_opc_instr_start[ii] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[ii] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(ctx.pc, ctx.flags);
|
tcg_gen_insn_start(ctx.pc, ctx.flags);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -1921,15 +1903,8 @@ gen_intermediate_code_internal(SuperHCPU *cpu, TranslationBlock *tb,
|
||||||
|
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (search_pc) {
|
tb->size = ctx.pc - pc_start;
|
||||||
i = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
ii++;
|
|
||||||
while (ii <= i)
|
|
||||||
tcg_ctx.gen_opc_instr_start[ii++] = 0;
|
|
||||||
} else {
|
|
||||||
tb->size = ctx.pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_DISAS
|
#ifdef DEBUG_DISAS
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
|
@ -1940,16 +1915,6 @@ gen_intermediate_code_internal(SuperHCPU *cpu, TranslationBlock *tb,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code(CPUSH4State * env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(sh_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUSH4State * env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(sh_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void restore_state_to_opc(CPUSH4State *env, TranslationBlock *tb,
|
void restore_state_to_opc(CPUSH4State *env, TranslationBlock *tb,
|
||||||
target_ulong *data)
|
target_ulong *data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -64,8 +64,6 @@ static TCGv cpu_wim;
|
||||||
/* Floating point registers */
|
/* Floating point registers */
|
||||||
static TCGv_i64 cpu_fpr[TARGET_DPREGS];
|
static TCGv_i64 cpu_fpr[TARGET_DPREGS];
|
||||||
|
|
||||||
static target_ulong gen_opc_npc[OPC_BUF_SIZE];
|
|
||||||
|
|
||||||
#include "exec/gen-icount.h"
|
#include "exec/gen-icount.h"
|
||||||
|
|
||||||
typedef struct DisasContext {
|
typedef struct DisasContext {
|
||||||
|
@ -5208,15 +5206,12 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void gen_intermediate_code_internal(SPARCCPU *cpu,
|
void gen_intermediate_code(CPUSPARCState * env, TranslationBlock * tb)
|
||||||
TranslationBlock *tb,
|
|
||||||
bool spc)
|
|
||||||
{
|
{
|
||||||
|
SPARCCPU *cpu = sparc_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUSPARCState *env = &cpu->env;
|
|
||||||
target_ulong pc_start, last_pc;
|
target_ulong pc_start, last_pc;
|
||||||
DisasContext dc1, *dc = &dc1;
|
DisasContext dc1, *dc = &dc1;
|
||||||
int j, lj = -1;
|
|
||||||
int num_insns;
|
int num_insns;
|
||||||
int max_insns;
|
int max_insns;
|
||||||
unsigned int insn;
|
unsigned int insn;
|
||||||
|
@ -5245,23 +5240,6 @@ static inline void gen_intermediate_code_internal(SPARCCPU *cpu,
|
||||||
|
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
do {
|
do {
|
||||||
if (spc) {
|
|
||||||
qemu_log("Search PC...\n");
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
|
||||||
gen_opc_npc[lj] = dc->npc;
|
|
||||||
if (dc->npc & JUMP_PC) {
|
|
||||||
assert(dc->jump_pc[1] == dc->pc + 4);
|
|
||||||
gen_opc_npc[lj] = dc->jump_pc[0] | JUMP_PC;
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (dc->npc & JUMP_PC) {
|
if (dc->npc & JUMP_PC) {
|
||||||
assert(dc->jump_pc[1] == dc->pc + 4);
|
assert(dc->jump_pc[1] == dc->pc + 4);
|
||||||
tcg_gen_insn_start(dc->pc, dc->jump_pc[0] | JUMP_PC);
|
tcg_gen_insn_start(dc->pc, dc->jump_pc[0] | JUMP_PC);
|
||||||
|
@ -5326,18 +5304,9 @@ static inline void gen_intermediate_code_internal(SPARCCPU *cpu,
|
||||||
}
|
}
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
|
|
||||||
if (spc) {
|
tb->size = last_pc + 4 - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j)
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
#if 0
|
|
||||||
log_page_dump();
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
tb->size = last_pc + 4 - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
#ifdef DEBUG_DISAS
|
#ifdef DEBUG_DISAS
|
||||||
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
|
||||||
qemu_log("--------------\n");
|
qemu_log("--------------\n");
|
||||||
|
@ -5348,16 +5317,6 @@ static inline void gen_intermediate_code_internal(SPARCCPU *cpu,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code(CPUSPARCState * env, TranslationBlock * tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(sparc_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUSPARCState * env, TranslationBlock * tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(sparc_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_init(CPUSPARCState *env)
|
void gen_intermediate_code_init(CPUSPARCState *env)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
|
@ -2049,17 +2049,14 @@ static void translate_one_bundle(DisasContext *dc, uint64_t bundle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void gen_intermediate_code_internal(TileGXCPU *cpu,
|
void gen_intermediate_code(CPUTLGState *env, struct TranslationBlock *tb)
|
||||||
TranslationBlock *tb,
|
|
||||||
bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
TileGXCPU *cpu = tilegx_env_get_cpu(env);
|
||||||
DisasContext ctx;
|
DisasContext ctx;
|
||||||
DisasContext *dc = &ctx;
|
DisasContext *dc = &ctx;
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUTLGState *env = &cpu->env;
|
|
||||||
uint64_t pc_start = tb->pc;
|
uint64_t pc_start = tb->pc;
|
||||||
uint64_t next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
uint64_t next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||||
int j, lj = -1;
|
|
||||||
int num_insns = 0;
|
int num_insns = 0;
|
||||||
int max_insns = tb->cflags & CF_COUNT_MASK;
|
int max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
|
|
||||||
|
@ -2087,18 +2084,6 @@ static inline void gen_intermediate_code_internal(TileGXCPU *cpu,
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc->pc);
|
tcg_gen_insn_start(dc->pc);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -2120,30 +2105,12 @@ static inline void gen_intermediate_code_internal(TileGXCPU *cpu,
|
||||||
}
|
}
|
||||||
|
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
if (search_pc) {
|
tb->size = dc->pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tb->size = dc->pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
|
|
||||||
qemu_log_mask(CPU_LOG_TB_IN_ASM, "\n");
|
qemu_log_mask(CPU_LOG_TB_IN_ASM, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_intermediate_code(CPUTLGState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(tilegx_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUTLGState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(tilegx_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void restore_state_to_opc(CPUTLGState *env, TranslationBlock *tb,
|
void restore_state_to_opc(CPUTLGState *env, TranslationBlock *tb,
|
||||||
target_ulong *data)
|
target_ulong *data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8266,20 +8266,14 @@ static void decode_opc(CPUTriCoreState *env, DisasContext *ctx, int *is_branch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
void gen_intermediate_code(CPUTriCoreState *env, struct TranslationBlock *tb)
|
||||||
gen_intermediate_code_internal(TriCoreCPU *cpu, struct TranslationBlock *tb,
|
|
||||||
int search_pc)
|
|
||||||
{
|
{
|
||||||
|
TriCoreCPU *cpu = tricore_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUTriCoreState *env = &cpu->env;
|
|
||||||
DisasContext ctx;
|
DisasContext ctx;
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
int num_insns, max_insns;
|
int num_insns, max_insns;
|
||||||
|
|
||||||
if (search_pc) {
|
|
||||||
qemu_log("search pc %d\n", search_pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -8318,12 +8312,9 @@ gen_intermediate_code_internal(TriCoreCPU *cpu, struct TranslationBlock *tb,
|
||||||
}
|
}
|
||||||
|
|
||||||
gen_tb_end(tb, num_insns);
|
gen_tb_end(tb, num_insns);
|
||||||
if (search_pc) {
|
tb->size = ctx.pc - pc_start;
|
||||||
printf("done_generating search pc\n");
|
tb->icount = num_insns;
|
||||||
} else {
|
|
||||||
tb->size = ctx.pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
if (tcg_check_temp_count()) {
|
if (tcg_check_temp_count()) {
|
||||||
printf("LEAK at %08x\n", env->PC);
|
printf("LEAK at %08x\n", env->PC);
|
||||||
}
|
}
|
||||||
|
@ -8337,18 +8328,6 @@ gen_intermediate_code_internal(TriCoreCPU *cpu, struct TranslationBlock *tb,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gen_intermediate_code(CPUTriCoreState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(tricore_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
gen_intermediate_code_pc(CPUTriCoreState *env, struct TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(tricore_env_get_cpu(env), tb, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
restore_state_to_opc(CPUTriCoreState *env, TranslationBlock *tb,
|
restore_state_to_opc(CPUTriCoreState *env, TranslationBlock *tb,
|
||||||
target_ulong *data)
|
target_ulong *data)
|
||||||
|
|
|
@ -1864,15 +1864,12 @@ static void disas_uc32_insn(CPUUniCore32State *env, DisasContext *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* generate intermediate code in gen_opc_buf and gen_opparam_buf for
|
/* generate intermediate code in gen_opc_buf and gen_opparam_buf for
|
||||||
basic block 'tb'. If search_pc is TRUE, also generate PC
|
basic block 'tb'. */
|
||||||
information for each intermediate instruction. */
|
void gen_intermediate_code(CPUUniCore32State *env, TranslationBlock *tb)
|
||||||
static inline void gen_intermediate_code_internal(UniCore32CPU *cpu,
|
|
||||||
TranslationBlock *tb, bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
UniCore32CPU *cpu = uc32_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUUniCore32State *env = &cpu->env;
|
|
||||||
DisasContext dc1, *dc = &dc1;
|
DisasContext dc1, *dc = &dc1;
|
||||||
int j, lj;
|
|
||||||
target_ulong pc_start;
|
target_ulong pc_start;
|
||||||
uint32_t next_page_start;
|
uint32_t next_page_start;
|
||||||
int num_insns;
|
int num_insns;
|
||||||
|
@ -1894,7 +1891,6 @@ static inline void gen_intermediate_code_internal(UniCore32CPU *cpu,
|
||||||
cpu_F0d = tcg_temp_new_i64();
|
cpu_F0d = tcg_temp_new_i64();
|
||||||
cpu_F1d = tcg_temp_new_i64();
|
cpu_F1d = tcg_temp_new_i64();
|
||||||
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||||
lj = -1;
|
|
||||||
num_insns = 0;
|
num_insns = 0;
|
||||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
if (max_insns == 0) {
|
if (max_insns == 0) {
|
||||||
|
@ -1914,18 +1910,6 @@ static inline void gen_intermediate_code_internal(UniCore32CPU *cpu,
|
||||||
|
|
||||||
gen_tb_start(tb);
|
gen_tb_start(tb);
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc->pc);
|
tcg_gen_insn_start(dc->pc);
|
||||||
num_insns++;
|
num_insns++;
|
||||||
|
|
||||||
|
@ -2039,26 +2023,8 @@ done_generating:
|
||||||
qemu_log("\n");
|
qemu_log("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (search_pc) {
|
tb->size = dc->pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = num_insns;
|
||||||
lj++;
|
|
||||||
while (lj <= j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tb->size = dc->pc - pc_start;
|
|
||||||
tb->icount = num_insns;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code(CPUUniCore32State *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(uc32_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUUniCore32State *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(uc32_env_get_cpu(env), tb, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *cpu_mode_names[16] = {
|
static const char *cpu_mode_names[16] = {
|
||||||
|
|
|
@ -2997,15 +2997,12 @@ static void gen_ibreak_check(CPUXtensaState *env, DisasContext *dc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline
|
void gen_intermediate_code(CPUXtensaState *env, TranslationBlock *tb)
|
||||||
void gen_intermediate_code_internal(XtensaCPU *cpu,
|
|
||||||
TranslationBlock *tb, bool search_pc)
|
|
||||||
{
|
{
|
||||||
|
XtensaCPU *cpu = xtensa_env_get_cpu(env);
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = CPU(cpu);
|
||||||
CPUXtensaState *env = &cpu->env;
|
|
||||||
DisasContext dc;
|
DisasContext dc;
|
||||||
int insn_count = 0;
|
int insn_count = 0;
|
||||||
int j, lj = -1;
|
|
||||||
int max_insns = tb->cflags & CF_COUNT_MASK;
|
int max_insns = tb->cflags & CF_COUNT_MASK;
|
||||||
uint32_t pc_start = tb->pc;
|
uint32_t pc_start = tb->pc;
|
||||||
uint32_t next_page_start =
|
uint32_t next_page_start =
|
||||||
|
@ -3049,18 +3046,6 @@ void gen_intermediate_code_internal(XtensaCPU *cpu,
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (search_pc) {
|
|
||||||
j = tcg_op_buf_count();
|
|
||||||
if (lj < j) {
|
|
||||||
lj++;
|
|
||||||
while (lj < j) {
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tcg_ctx.gen_opc_pc[lj] = dc.pc;
|
|
||||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
|
||||||
tcg_ctx.gen_opc_icount[lj] = insn_count;
|
|
||||||
}
|
|
||||||
tcg_gen_insn_start(dc.pc);
|
tcg_gen_insn_start(dc.pc);
|
||||||
++insn_count;
|
++insn_count;
|
||||||
|
|
||||||
|
@ -3131,24 +3116,8 @@ void gen_intermediate_code_internal(XtensaCPU *cpu,
|
||||||
qemu_log("\n");
|
qemu_log("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (search_pc) {
|
tb->size = dc.pc - pc_start;
|
||||||
j = tcg_op_buf_count();
|
tb->icount = insn_count;
|
||||||
memset(tcg_ctx.gen_opc_instr_start + lj + 1, 0,
|
|
||||||
(j - lj) * sizeof(tcg_ctx.gen_opc_instr_start[0]));
|
|
||||||
} else {
|
|
||||||
tb->size = dc.pc - pc_start;
|
|
||||||
tb->icount = insn_count;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code(CPUXtensaState *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(xtensa_env_get_cpu(env), tb, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void gen_intermediate_code_pc(CPUXtensaState *env, TranslationBlock *tb)
|
|
||||||
{
|
|
||||||
gen_intermediate_code_internal(xtensa_env_get_cpu(env), tb, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void xtensa_cpu_dump_state(CPUState *cs, FILE *f,
|
void xtensa_cpu_dump_state(CPUState *cs, FILE *f,
|
||||||
|
|
|
@ -578,10 +578,6 @@ struct TCGContext {
|
||||||
TCGOp gen_op_buf[OPC_BUF_SIZE];
|
TCGOp gen_op_buf[OPC_BUF_SIZE];
|
||||||
TCGArg gen_opparam_buf[OPPARAM_BUF_SIZE];
|
TCGArg gen_opparam_buf[OPPARAM_BUF_SIZE];
|
||||||
|
|
||||||
target_ulong gen_opc_pc[OPC_BUF_SIZE];
|
|
||||||
uint16_t gen_opc_icount[OPC_BUF_SIZE];
|
|
||||||
uint8_t gen_opc_instr_start[OPC_BUF_SIZE];
|
|
||||||
|
|
||||||
uint16_t gen_insn_end_off[TCG_MAX_INSNS];
|
uint16_t gen_insn_end_off[TCG_MAX_INSNS];
|
||||||
target_ulong gen_insn_data[TCG_MAX_INSNS][TARGET_INSN_START_WORDS];
|
target_ulong gen_insn_data[TCG_MAX_INSNS][TARGET_INSN_START_WORDS];
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue