On Sat, Sep 08, 2012 at 08:35:18AM +0000, Blue Swirl wrote: > On Fri, Sep 7, 2012 at 2:18 PM, Aurelien Jarno <aurel...@aurel32.net> wrote: > > On Sun, Sep 02, 2012 at 05:33:47PM +0000, Blue Swirl wrote: > >> Add an explicit CPUState parameter instead of relying on AREG0 > >> and switch to AREG0 free mode. > >> > >> Signed-off-by: Blue Swirl <blauwir...@gmail.com> > >> --- > >> configure | 2 +- > >> target-cris/Makefile.objs | 2 - > >> target-cris/helper.c | 4 +- > >> target-cris/helper.h | 34 ++++++++-------- > >> target-cris/op_helper.c | 89 > >> +++++++++++++++++++++---------------------- > >> target-cris/translate.c | 50 ++++++++++++----------- > >> target-cris/translate_v10.c | 22 +++++----- > >> 7 files changed, 101 insertions(+), 102 deletions(-) > >> > >> diff --git a/configure b/configure > >> index e464d2f..d760e07 100755 > >> --- a/configure > >> +++ b/configure > >> @@ -3829,7 +3829,7 @@ symlink "$source_path/Makefile.target" > >> "$target_dir/Makefile" > >> > >> > >> case "$target_arch2" in > >> - alpha | arm* | i386 | lm32 | m68k | microblaze* | or32 | s390x | sparc* > >> | unicore32 | x86_64 | xtensa* | ppc*) > >> + alpha | arm* | cris | i386 | lm32 | m68k | microblaze* | or32 | s390x | > >> sparc* | unicore32 | x86_64 | xtensa* | ppc*) > >> echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak > >> ;; > >> esac > >> diff --git a/target-cris/Makefile.objs b/target-cris/Makefile.objs > >> index 4b09e8c..afb87bc 100644 > >> --- a/target-cris/Makefile.objs > >> +++ b/target-cris/Makefile.objs > >> @@ -1,4 +1,2 @@ > >> obj-y += translate.o op_helper.o helper.o cpu.o > >> obj-$(CONFIG_SOFTMMU) += mmu.o machine.o > >> - > >> -$(obj)/op_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS) > >> diff --git a/target-cris/helper.c b/target-cris/helper.c > >> index bfbc29e..1bdb7e2 100644 > >> --- a/target-cris/helper.c > >> +++ b/target-cris/helper.c > >> @@ -151,7 +151,7 @@ static void do_interruptv10(CPUCRISState *env) > >> } > >> > >> /* Now that we are in kernel mode, load the handlers address. */ > >> - env->pc = ldl_code(env->pregs[PR_EBP] + ex_vec * 4); > >> + env->pc = cpu_ldl_code(env, env->pregs[PR_EBP] + ex_vec * 4); > >> env->locked_irq = 1; > >> env->pregs[PR_CCS] |= F_FLAG_V10; /* set F. */ > >> > >> @@ -233,7 +233,7 @@ void do_interrupt(CPUCRISState *env) > >> /* Now that we are in kernel mode, load the handlers address. > >> This load may not fault, real hw leaves that behaviour as > >> undefined. */ > >> - env->pc = ldl_code(env->pregs[PR_EBP] + ex_vec * 4); > >> + env->pc = cpu_ldl_code(env, env->pregs[PR_EBP] + ex_vec * 4); > >> > >> /* Clear the excption_index to avoid spurios hw_aborts for recursive > >> bus faults. */ > >> diff --git a/target-cris/helper.h b/target-cris/helper.h > >> index 093063a..b575524 100644 > >> --- a/target-cris/helper.h > >> +++ b/target-cris/helper.h > >> @@ -1,26 +1,26 @@ > >> #include "def-helper.h" > >> > >> -DEF_HELPER_1(raise_exception, void, i32) > >> -DEF_HELPER_1(tlb_flush_pid, void, i32) > >> -DEF_HELPER_1(spc_write, void, i32) > >> +DEF_HELPER_2(raise_exception, void, env, i32) > >> +DEF_HELPER_2(tlb_flush_pid, void, env, i32) > >> +DEF_HELPER_2(spc_write, void, env, i32) > >> DEF_HELPER_3(dump, void, i32, i32, i32) > >> -DEF_HELPER_0(rfe, void); > >> -DEF_HELPER_0(rfn, void); > >> +DEF_HELPER_1(rfe, void, env); > >> +DEF_HELPER_1(rfn, void, env); > >> > >> -DEF_HELPER_2(movl_sreg_reg, void, i32, i32) > >> -DEF_HELPER_2(movl_reg_sreg, void, i32, i32) > >> +DEF_HELPER_3(movl_sreg_reg, void, env, i32, i32) > >> +DEF_HELPER_3(movl_reg_sreg, void, env, i32, i32) > >> > >> DEF_HELPER_FLAGS_1(lz, TCG_CALL_PURE, i32, i32); > >> -DEF_HELPER_FLAGS_3(btst, TCG_CALL_PURE, i32, i32, i32, i32); > >> +DEF_HELPER_FLAGS_4(btst, TCG_CALL_PURE, i32, env, i32, i32, i32); > >> > >> -DEF_HELPER_FLAGS_3(evaluate_flags_muls, TCG_CALL_PURE, i32, i32, i32, i32) > >> -DEF_HELPER_FLAGS_3(evaluate_flags_mulu, TCG_CALL_PURE, i32, i32, i32, i32) > >> -DEF_HELPER_FLAGS_4(evaluate_flags_mcp, TCG_CALL_PURE, i32, i32, i32, i32, > >> i32) > >> -DEF_HELPER_FLAGS_4(evaluate_flags_alu_4, TCG_CALL_PURE, i32, i32, i32, > >> i32, i32) > >> -DEF_HELPER_FLAGS_4(evaluate_flags_sub_4, TCG_CALL_PURE, i32, i32, i32, > >> i32, i32) > >> -DEF_HELPER_FLAGS_2(evaluate_flags_move_4, TCG_CALL_PURE, i32, i32, i32) > >> -DEF_HELPER_FLAGS_2(evaluate_flags_move_2, TCG_CALL_PURE, i32, i32, i32) > >> -DEF_HELPER_0(evaluate_flags, void) > >> -DEF_HELPER_0(top_evaluate_flags, void) > >> +DEF_HELPER_FLAGS_4(evaluate_flags_muls, TCG_CALL_PURE, i32, env, i32, > >> i32, i32) > >> +DEF_HELPER_FLAGS_4(evaluate_flags_mulu, TCG_CALL_PURE, i32, env, i32, > >> i32, i32) > >> +DEF_HELPER_FLAGS_5(evaluate_flags_mcp, TCG_CALL_PURE, i32, env, i32, i32, > >> i32, i32) > >> +DEF_HELPER_FLAGS_5(evaluate_flags_alu_4, TCG_CALL_PURE, i32, env, i32, > >> i32, i32, i32) > >> +DEF_HELPER_FLAGS_5(evaluate_flags_sub_4, TCG_CALL_PURE, i32, env, i32, > >> i32, i32, i32) > >> +DEF_HELPER_FLAGS_3(evaluate_flags_move_4, TCG_CALL_PURE, i32, env, i32, > >> i32) > >> +DEF_HELPER_FLAGS_3(evaluate_flags_move_2, TCG_CALL_PURE, i32, env, i32, > >> i32) > >> +DEF_HELPER_1(evaluate_flags, void, env) > >> +DEF_HELPER_1(top_evaluate_flags, void, env) > >> > >> #include "def-helper.h" > >> diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c > >> index ac7c98c..5cce3e7 100644 > >> --- a/target-cris/op_helper.c > >> +++ b/target-cris/op_helper.c > >> @@ -19,7 +19,6 @@ > >> */ > >> > >> #include "cpu.h" > >> -#include "dyngen-exec.h" > >> #include "mmu.h" > >> #include "helper.h" > >> #include "host-utils.h" > >> @@ -55,17 +54,12 @@ > >> /* Try to fill the TLB and return an exception if error. If retaddr is > >> NULL, it means that the function was called in C code (i.e. not > >> from generated code or from helper.c) */ > >> -/* XXX: fix it to restore all registers */ > >> -void tlb_fill(CPUCRISState *env1, target_ulong addr, int is_write, int > >> mmu_idx, > >> +void tlb_fill(CPUCRISState *env, target_ulong addr, int is_write, int > >> mmu_idx, > >> uintptr_t retaddr) > >> { > >> TranslationBlock *tb; > >> - CPUCRISState *saved_env; > >> int ret; > >> > >> - saved_env = env; > >> - env = env1; > >> - > >> D_LOG("%s pc=%x tpc=%x ra=%p\n", __func__, > >> env->pc, env->debug1, (void *)retaddr); > >> ret = cpu_cris_handle_mmu_fault(env, addr, is_write, mmu_idx); > >> @@ -79,23 +73,22 @@ void tlb_fill(CPUCRISState *env1, target_ulong addr, > >> int is_write, int mmu_idx, > >> cpu_restore_state(tb, env, retaddr); > >> > >> /* Evaluate flags after retranslation. */ > >> - helper_top_evaluate_flags(); > >> + helper_top_evaluate_flags(env); > >> } > >> } > >> cpu_loop_exit(env); > >> } > >> - env = saved_env; > >> } > >> > >> #endif > >> > >> -void helper_raise_exception(uint32_t index) > >> +void helper_raise_exception(CPUCRISState *env, uint32_t index) > >> { > >> env->exception_index = index; > >> cpu_loop_exit(env); > >> } > >> > >> -void helper_tlb_flush_pid(uint32_t pid) > >> +void helper_tlb_flush_pid(CPUCRISState *env, uint32_t pid) > >> { > >> #if !defined(CONFIG_USER_ONLY) > >> pid &= 0xff; > >> @@ -104,7 +97,7 @@ void helper_tlb_flush_pid(uint32_t pid) > >> #endif > >> } > >> > >> -void helper_spc_write(uint32_t new_spc) > >> +void helper_spc_write(CPUCRISState *env, uint32_t new_spc) > >> { > >> #if !defined(CONFIG_USER_ONLY) > >> tlb_flush_page(env, env->pregs[PR_SPC]); > >> @@ -121,7 +114,7 @@ void helper_dump(uint32_t a0, uint32_t a1, uint32_t a2) > >> #define EXTRACT_FIELD(src, start, end) \ > >> (((src) >> start) & ((1 << (end - start + 1)) - 1)) > >> > >> -void helper_movl_sreg_reg (uint32_t sreg, uint32_t reg) > >> +void helper_movl_sreg_reg(CPUCRISState *env, uint32_t sreg, uint32_t reg) > >> { > >> uint32_t srs; > >> srs = env->pregs[PR_SRS]; > >> @@ -171,7 +164,7 @@ void helper_movl_sreg_reg (uint32_t sreg, uint32_t reg) > >> #endif > >> } > >> > >> -void helper_movl_reg_sreg (uint32_t reg, uint32_t sreg) > >> +void helper_movl_reg_sreg(CPUCRISState *env, uint32_t reg, uint32_t sreg) > >> { > >> uint32_t srs; > >> env->pregs[PR_SRS] &= 3; > >> @@ -216,7 +209,7 @@ static void cris_ccs_rshift(CPUCRISState *env) > >> env->pregs[PR_CCS] = ccs; > >> } > >> > >> -void helper_rfe(void) > >> +void helper_rfe(CPUCRISState *env) > >> { > >> int rflag = env->pregs[PR_CCS] & R_FLAG; > >> > >> @@ -232,7 +225,7 @@ void helper_rfe(void) > >> env->pregs[PR_CCS] |= P_FLAG; > >> } > >> > >> -void helper_rfn(void) > >> +void helper_rfn(CPUCRISState *env) > >> { > >> int rflag = env->pregs[PR_CCS] & R_FLAG; > >> > >> @@ -256,7 +249,7 @@ uint32_t helper_lz(uint32_t t0) > >> return clz32(t0); > >> } > >> > >> -uint32_t helper_btst(uint32_t t0, uint32_t t1, uint32_t ccs) > >> +uint32_t helper_btst(CPUCRISState *env, uint32_t t0, uint32_t t1, > >> uint32_t ccs) > >> { > >> /* FIXME: clean this up. */ > >> > >> @@ -284,7 +277,8 @@ uint32_t helper_btst(uint32_t t0, uint32_t t1, > >> uint32_t ccs) > >> return ccs; > >> } > >> > >> -static inline uint32_t evaluate_flags_writeback(uint32_t flags, uint32_t > >> ccs) > >> +static inline uint32_t evaluate_flags_writeback(CPUCRISState *env, > >> + uint32_t flags, uint32_t > >> ccs) > >> { > >> unsigned int x, z, mask; > >> > >> @@ -303,7 +297,8 @@ static inline uint32_t > >> evaluate_flags_writeback(uint32_t flags, uint32_t ccs) > >> return ccs; > >> } > >> > >> -uint32_t helper_evaluate_flags_muls(uint32_t ccs, uint32_t res, uint32_t > >> mof) > >> +uint32_t helper_evaluate_flags_muls(CPUCRISState *env, uint32_t ccs, > >> + uint32_t res, uint32_t mof) > >> { > >> uint32_t flags = 0; > >> int64_t tmp; > >> @@ -321,10 +316,11 @@ uint32_t helper_evaluate_flags_muls(uint32_t ccs, > >> uint32_t res, uint32_t mof) > >> if ((dneg && mof != -1) > >> || (!dneg && mof != 0)) > >> flags |= V_FLAG; > >> - return evaluate_flags_writeback(flags, ccs); > >> + return evaluate_flags_writeback(env, flags, ccs); > >> } > >> > >> -uint32_t helper_evaluate_flags_mulu(uint32_t ccs, uint32_t res, uint32_t > >> mof) > >> +uint32_t helper_evaluate_flags_mulu(CPUCRISState *env, uint32_t ccs, > >> + uint32_t res, uint32_t mof) > >> { > >> uint32_t flags = 0; > >> uint64_t tmp; > >> @@ -339,10 +335,10 @@ uint32_t helper_evaluate_flags_mulu(uint32_t ccs, > >> uint32_t res, uint32_t mof) > >> if (mof) > >> flags |= V_FLAG; > >> > >> - return evaluate_flags_writeback(flags, ccs); > >> + return evaluate_flags_writeback(env, flags, ccs); > >> } > >> > >> -uint32_t helper_evaluate_flags_mcp(uint32_t ccs, > >> +uint32_t helper_evaluate_flags_mcp(CPUCRISState *env, uint32_t ccs, > >> uint32_t src, uint32_t dst, uint32_t res) > >> { > >> uint32_t flags = 0; > >> @@ -368,10 +364,10 @@ uint32_t helper_evaluate_flags_mcp(uint32_t ccs, > >> flags |= R_FLAG; > >> } > >> > >> - return evaluate_flags_writeback(flags, ccs); > >> + return evaluate_flags_writeback(env, flags, ccs); > >> } > >> > >> -uint32_t helper_evaluate_flags_alu_4(uint32_t ccs, > >> +uint32_t helper_evaluate_flags_alu_4(CPUCRISState *env, uint32_t ccs, > >> uint32_t src, uint32_t dst, uint32_t > >> res) > >> { > >> uint32_t flags = 0; > >> @@ -397,10 +393,10 @@ uint32_t helper_evaluate_flags_alu_4(uint32_t ccs, > >> flags |= C_FLAG; > >> } > >> > >> - return evaluate_flags_writeback(flags, ccs); > >> + return evaluate_flags_writeback(env, flags, ccs); > >> } > >> > >> -uint32_t helper_evaluate_flags_sub_4(uint32_t ccs, > >> +uint32_t helper_evaluate_flags_sub_4(CPUCRISState *env, uint32_t ccs, > >> uint32_t src, uint32_t dst, uint32_t > >> res) > >> { > >> uint32_t flags = 0; > >> @@ -427,10 +423,11 @@ uint32_t helper_evaluate_flags_sub_4(uint32_t ccs, > >> } > >> > >> flags ^= C_FLAG; > >> - return evaluate_flags_writeback(flags, ccs); > >> + return evaluate_flags_writeback(env, flags, ccs); > >> } > >> > >> -uint32_t helper_evaluate_flags_move_4(uint32_t ccs, uint32_t res) > >> +uint32_t helper_evaluate_flags_move_4(CPUCRISState *env, uint32_t ccs, > >> + uint32_t res) > >> { > >> uint32_t flags = 0; > >> > >> @@ -439,9 +436,10 @@ uint32_t helper_evaluate_flags_move_4(uint32_t ccs, > >> uint32_t res) > >> else if (res == 0L) > >> flags |= Z_FLAG; > >> > >> - return evaluate_flags_writeback(flags, ccs); > >> + return evaluate_flags_writeback(env, flags, ccs); > >> } > >> -uint32_t helper_evaluate_flags_move_2(uint32_t ccs, uint32_t res) > >> +uint32_t helper_evaluate_flags_move_2(CPUCRISState *env, uint32_t ccs, > >> + uint32_t res) > >> { > >> uint32_t flags = 0; > >> > >> @@ -450,12 +448,12 @@ uint32_t helper_evaluate_flags_move_2(uint32_t ccs, > >> uint32_t res) > >> else if (res == 0) > >> flags |= Z_FLAG; > >> > >> - return evaluate_flags_writeback(flags, ccs); > >> + return evaluate_flags_writeback(env, flags, ccs); > >> } > >> > >> /* TODO: This is expensive. We could split things up and only evaluate > >> part of > >> CCR on a need to know basis. For now, we simply re-evaluate > >> everything. */ > >> -void helper_evaluate_flags(void) > >> +void helper_evaluate_flags(CPUCRISState *env) > >> { > >> uint32_t src, dst, res; > >> uint32_t flags = 0; > >> @@ -571,25 +569,26 @@ void helper_evaluate_flags(void) > >> if (env->cc_op == CC_OP_SUB || env->cc_op == CC_OP_CMP) > >> flags ^= C_FLAG; > >> > >> - env->pregs[PR_CCS] = evaluate_flags_writeback(flags, > >> env->pregs[PR_CCS]); > >> + env->pregs[PR_CCS] = evaluate_flags_writeback(env, flags, > >> + env->pregs[PR_CCS]); > >> } > >> > >> -void helper_top_evaluate_flags(void) > >> +void helper_top_evaluate_flags(CPUCRISState *env) > >> { > >> switch (env->cc_op) > >> { > >> case CC_OP_MCP: > >> - env->pregs[PR_CCS] = helper_evaluate_flags_mcp( > >> + env->pregs[PR_CCS] = > >> helper_evaluate_flags_mcp(env, > >> env->pregs[PR_CCS], env->cc_src, > >> env->cc_dest, env->cc_result); > >> break; > >> case CC_OP_MULS: > >> - env->pregs[PR_CCS] = helper_evaluate_flags_muls( > >> + env->pregs[PR_CCS] = > >> helper_evaluate_flags_muls(env, > >> env->pregs[PR_CCS], env->cc_result, > >> env->pregs[PR_MOF]); > >> break; > >> case CC_OP_MULU: > >> - env->pregs[PR_CCS] = helper_evaluate_flags_mulu( > >> + env->pregs[PR_CCS] = > >> helper_evaluate_flags_mulu(env, > >> env->pregs[PR_CCS], env->cc_result, > >> env->pregs[PR_MOF]); > >> break; > >> @@ -604,18 +603,18 @@ void helper_top_evaluate_flags(void) > >> { > >> case 4: > >> env->pregs[PR_CCS] = > >> - helper_evaluate_flags_move_4( > >> + helper_evaluate_flags_move_4(env, > >> env->pregs[PR_CCS], > >> env->cc_result); > >> break; > >> case 2: > >> env->pregs[PR_CCS] = > >> - helper_evaluate_flags_move_2( > >> + helper_evaluate_flags_move_2(env, > >> env->pregs[PR_CCS], > >> env->cc_result); > >> break; > >> default: > >> - helper_evaluate_flags(); > >> + helper_evaluate_flags(env); > >> break; > >> } > >> break; > >> @@ -626,12 +625,12 @@ void helper_top_evaluate_flags(void) > >> case CC_OP_CMP: > >> if (env->cc_size == 4) > >> env->pregs[PR_CCS] = > >> - helper_evaluate_flags_sub_4( > >> + helper_evaluate_flags_sub_4(env, > >> env->pregs[PR_CCS], > >> env->cc_src, env->cc_dest, > >> env->cc_result); > >> else > >> - helper_evaluate_flags(); > >> + helper_evaluate_flags(env); > >> break; > >> default: > >> { > >> @@ -639,13 +638,13 @@ void helper_top_evaluate_flags(void) > >> { > >> case 4: > >> env->pregs[PR_CCS] = > >> - helper_evaluate_flags_alu_4( > >> + helper_evaluate_flags_alu_4(env, > >> env->pregs[PR_CCS], > >> env->cc_src, env->cc_dest, > >> env->cc_result); > >> break; > >> default: > >> - helper_evaluate_flags(); > >> + helper_evaluate_flags(env); > >> break; > >> } > >> } > >> diff --git a/target-cris/translate.c b/target-cris/translate.c > >> index 1ad9ec7..5e4f7f5 100644 > >> --- a/target-cris/translate.c > >> +++ b/target-cris/translate.c > >> @@ -211,9 +211,9 @@ static inline void t_gen_mov_preg_TN(DisasContext *dc, > >> int r, TCGv tn) > >> tcg_gen_andi_tl(cpu_PR[r], tn, 3); > >> else { > >> if (r == PR_PID) > >> - gen_helper_tlb_flush_pid(tn); > >> + gen_helper_tlb_flush_pid(cpu_env, tn); > >> if (dc->tb_flags & S_FLAG && r == PR_SPC) > >> - gen_helper_spc_write(tn); > >> + gen_helper_spc_write(cpu_env, tn); > >> else if (r == PR_CCS) > >> dc->cpustate_changed = 1; > >> tcg_gen_mov_tl(cpu_PR[r], tn); > >> @@ -241,24 +241,24 @@ static int cris_fetch(DisasContext *dc, uint32_t > >> addr, > >> switch (size) { > >> case 4: > >> { > >> - r = ldl_code(addr); > >> + r = cpu_ldl_code(cpu_single_env, addr); > >> break; > >> } > >> case 2: > >> { > >> if (sign) { > >> - r = ldsw_code(addr); > >> + r = cpu_ldsw_code(cpu_single_env, addr); > >> } else { > >> - r = lduw_code(addr); > >> + r = cpu_lduw_code(cpu_single_env, addr); > >> } > >> break; > >> } > >> case 1: > >> { > >> if (sign) { > >> - r = ldsb_code(addr); > >> + r = cpu_ldsb_code(cpu_single_env, addr); > >> } else { > >> - r = ldub_code(addr); > >> + r = cpu_ldub_code(cpu_single_env, addr); > >> } > >> break; > >> } > >> @@ -278,7 +278,7 @@ static void cris_lock_irq(DisasContext *dc) > >> static inline void t_gen_raise_exception(uint32_t index) > >> { > >> TCGv_i32 tmp = tcg_const_i32(index); > >> - gen_helper_raise_exception(tmp); > >> + gen_helper_raise_exception(cpu_env, tmp); > >> tcg_temp_free_i32(tmp); > >> } > >> > >> @@ -624,17 +624,17 @@ static void cris_evaluate_flags(DisasContext *dc) > >> switch (dc->cc_op) > >> { > >> case CC_OP_MCP: > >> - gen_helper_evaluate_flags_mcp(cpu_PR[PR_CCS], > >> + gen_helper_evaluate_flags_mcp(cpu_PR[PR_CCS], cpu_env, > >> cpu_PR[PR_CCS], cc_src, > >> cc_dest, cc_result); > >> break; > >> case CC_OP_MULS: > >> - gen_helper_evaluate_flags_muls(cpu_PR[PR_CCS], > >> + gen_helper_evaluate_flags_muls(cpu_PR[PR_CCS], cpu_env, > >> cpu_PR[PR_CCS], cc_result, > >> cpu_PR[PR_MOF]); > >> break; > >> case CC_OP_MULU: > >> - gen_helper_evaluate_flags_mulu(cpu_PR[PR_CCS], > >> + gen_helper_evaluate_flags_mulu(cpu_PR[PR_CCS], cpu_env, > >> cpu_PR[PR_CCS], cc_result, > >> cpu_PR[PR_MOF]); > >> break; > >> @@ -648,15 +648,15 @@ static void cris_evaluate_flags(DisasContext *dc) > >> switch (dc->cc_size) > >> { > >> case 4: > >> - gen_helper_evaluate_flags_move_4(cpu_PR[PR_CCS], > >> + gen_helper_evaluate_flags_move_4(cpu_PR[PR_CCS], > >> cpu_env, > >> cpu_PR[PR_CCS], cc_result); > >> break; > >> case 2: > >> - gen_helper_evaluate_flags_move_2(cpu_PR[PR_CCS], > >> + gen_helper_evaluate_flags_move_2(cpu_PR[PR_CCS], > >> cpu_env, > >> cpu_PR[PR_CCS], cc_result); > >> break; > >> default: > >> - gen_helper_evaluate_flags(); > >> + gen_helper_evaluate_flags(cpu_env); > >> break; > >> } > >> break; > >> @@ -666,21 +666,21 @@ static void cris_evaluate_flags(DisasContext *dc) > >> case CC_OP_SUB: > >> case CC_OP_CMP: > >> if (dc->cc_size == 4) > >> - gen_helper_evaluate_flags_sub_4(cpu_PR[PR_CCS], > >> + gen_helper_evaluate_flags_sub_4(cpu_PR[PR_CCS], > >> cpu_env, > >> cpu_PR[PR_CCS], cc_src, cc_dest, cc_result); > >> else > >> - gen_helper_evaluate_flags(); > >> + gen_helper_evaluate_flags(cpu_env); > >> > >> break; > >> default: > >> switch (dc->cc_size) > >> { > >> case 4: > >> - gen_helper_evaluate_flags_alu_4(cpu_PR[PR_CCS], > >> + gen_helper_evaluate_flags_alu_4(cpu_PR[PR_CCS], > >> cpu_env, > >> cpu_PR[PR_CCS], cc_src, cc_dest, cc_result); > >> break; > >> default: > >> - gen_helper_evaluate_flags(); > >> + gen_helper_evaluate_flags(cpu_env); > >> break; > >> } > >> break; > >> @@ -1475,7 +1475,7 @@ static int dec_btstq(DisasContext *dc) > >> > >> cris_cc_mask(dc, CC_MASK_NZ); > >> cris_evaluate_flags(dc); > >> - gen_helper_btst(cpu_PR[PR_CCS], cpu_R[dc->op2], > >> + gen_helper_btst(cpu_PR[PR_CCS], cpu_env, cpu_R[dc->op2], > >> tcg_const_tl(dc->op1), cpu_PR[PR_CCS]); > >> cris_alu(dc, CC_OP_MOVE, > >> cpu_R[dc->op2], cpu_R[dc->op2], cpu_R[dc->op2], 4); > >> @@ -1925,7 +1925,7 @@ static int dec_btst_r(DisasContext *dc) > >> dc->op1, dc->op2); > >> cris_cc_mask(dc, CC_MASK_NZ); > >> cris_evaluate_flags(dc); > >> - gen_helper_btst(cpu_PR[PR_CCS], cpu_R[dc->op2], > >> + gen_helper_btst(cpu_PR[PR_CCS], cpu_env, cpu_R[dc->op2], > >> cpu_R[dc->op1], cpu_PR[PR_CCS]); > >> cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op2], > >> cpu_R[dc->op2], cpu_R[dc->op2], 4); > >> @@ -2135,14 +2135,16 @@ static int dec_move_rs(DisasContext *dc) > >> { > >> LOG_DIS("move $r%u, $s%u\n", dc->op1, dc->op2); > >> cris_cc_mask(dc, 0); > >> - gen_helper_movl_sreg_reg(tcg_const_tl(dc->op2), > >> tcg_const_tl(dc->op1)); > >> + gen_helper_movl_sreg_reg(cpu_env, tcg_const_tl(dc->op2), > >> + tcg_const_tl(dc->op1)); > >> return 2; > >> } > >> static int dec_move_sr(DisasContext *dc) > >> { > >> LOG_DIS("move $s%u, $r%u\n", dc->op2, dc->op1); > >> cris_cc_mask(dc, 0); > >> - gen_helper_movl_reg_sreg(tcg_const_tl(dc->op1), > >> tcg_const_tl(dc->op2)); > >> + gen_helper_movl_reg_sreg(cpu_env, tcg_const_tl(dc->op1), > >> + tcg_const_tl(dc->op2)); > >> return 2; > >> } > >> > >> @@ -2906,14 +2908,14 @@ static int dec_rfe_etc(DisasContext *dc) > >> /* rfe. */ > >> LOG_DIS("rfe\n"); > >> cris_evaluate_flags(dc); > >> - gen_helper_rfe(); > >> + gen_helper_rfe(cpu_env); > >> dc->is_jmp = DISAS_UPDATE; > >> break; > >> case 5: > >> /* rfn. */ > >> LOG_DIS("rfn\n"); > >> cris_evaluate_flags(dc); > >> - gen_helper_rfn(); > >> + gen_helper_rfn(cpu_env); > >> dc->is_jmp = DISAS_UPDATE; > >> break; > >> case 6: > >> diff --git a/target-cris/translate_v10.c b/target-cris/translate_v10.c > >> index 3629629..d9d6aa5 100644 > >> --- a/target-cris/translate_v10.c > >> +++ b/target-cris/translate_v10.c > >> @@ -182,17 +182,17 @@ static int dec10_prep_move_m(DisasContext *dc, int > >> s_ext, int memsize, > >> if (memsize != 4) { > >> if (s_ext) { > >> if (memsize == 1) > >> - imm = ldsb_code(dc->pc + 2); > >> + imm = cpu_ldsb_code(cpu_single_env, dc->pc + 2); > >> else > >> - imm = ldsw_code(dc->pc + 2); > >> + imm = cpu_ldsw_code(cpu_single_env, dc->pc + 2); > >> } else { > >> if (memsize == 1) > >> - imm = ldub_code(dc->pc + 2); > >> + imm = cpu_ldub_code(cpu_single_env, dc->pc + 2); > >> else > >> - imm = lduw_code(dc->pc + 2); > >> + imm = cpu_lduw_code(cpu_single_env, dc->pc + 2); > >> } > >> } else > >> - imm = ldl_code(dc->pc + 2); > >> + imm = cpu_ldl_code(cpu_single_env, dc->pc + 2); > >> > >> tcg_gen_movi_tl(dst, imm); > > > > Similarly to what I reported for the microblaze and sh4 target, I think > > we should not start using cpu_single_env (a global variable) to replace > > env (a global variable stored in a register). > > This task could be also taken to a different patch series, because the > conversions committed earlier also used cpu_single_env. > > Eliminating cpu_single_env altogether may be possible but it would > need some refactoring. > > > > > It is possible to pass env through the subroutine, though it is more > > complicated there than for other targets. I have therefore done the work > > and I have attached the two resulting patches to this mail. > > Thank you for the work, the patches look better. I think the patches > should also include my sign-off.
No problem. Feel free to add it and take these patches in your series. > > > >> @@ -289,7 +289,7 @@ static unsigned int dec10_quick_imm(DisasContext *dc) > >> } else { > >> /* BTST */ > >> cris_update_cc_op(dc, CC_OP_FLAGS, 4); > >> - gen_helper_btst(cpu_PR[PR_CCS], cpu_R[dc->dst], > >> + gen_helper_btst(cpu_PR[PR_CCS], cpu_env, cpu_R[dc->dst], > >> tcg_const_tl(imm), cpu_PR[PR_CCS]); > >> } > >> break; > >> @@ -723,7 +723,7 @@ static unsigned int dec10_reg(DisasContext *dc) > >> LOG_DIS("btst $r%d, $r%d sz=%d\n", dc->src, dc->dst, > >> size); > >> cris_cc_mask(dc, CC_MASK_NZVC); > >> cris_update_cc_op(dc, CC_OP_FLAGS, 4); > >> - gen_helper_btst(cpu_PR[PR_CCS], cpu_R[dc->dst], > >> + gen_helper_btst(cpu_PR[PR_CCS], cpu_env, cpu_R[dc->dst], > >> cpu_R[dc->src], cpu_PR[PR_CCS]); > >> break; > >> case CRISV10_REG_DSTEP: > >> @@ -974,7 +974,7 @@ static int dec10_dip(DisasContext *dc) > >> LOG_DIS("dip pc=%x opcode=%d r%d r%d\n", > >> dc->pc, dc->opcode, dc->src, dc->dst); > >> if (dc->src == 15) { > >> - imm = ldl_code(dc->pc + 2); > >> + imm = cpu_ldl_code(cpu_single_env, dc->pc + 2); > >> tcg_gen_movi_tl(cpu_PR[PR_PREFIX], imm); > >> if (dc->postinc) > >> insn_len += 4; > >> @@ -1119,7 +1119,7 @@ static unsigned int dec10_ind(DisasContext *dc) > >> if (dc->src == 15) { > >> LOG_DIS("jump.%d %d r%d r%d direct\n", size, > >> dc->opcode, dc->src, dc->dst); > >> - imm = ldl_code(dc->pc + 2); > >> + imm = cpu_ldl_code(cpu_single_env, dc->pc + 2); > >> if (dc->mode == CRISV10_MODE_AUTOINC) > >> insn_len += size; > >> > >> @@ -1185,7 +1185,7 @@ static unsigned int dec10_ind(DisasContext *dc) > >> case CRISV10_IND_BCC_M: > >> > >> cris_cc_mask(dc, 0); > >> - imm = ldsw_code(dc->pc + 2); > >> + imm = cpu_ldsw_code(cpu_single_env, dc->pc + 2); > >> simm = (int16_t)imm; > >> simm += 4; > >> > >> @@ -1210,7 +1210,7 @@ static unsigned int crisv10_decoder(DisasContext *dc) > >> tcg_gen_debug_insn_start(dc->pc); > >> > >> /* Load a halfword onto the instruction register. */ > >> - dc->ir = lduw_code(dc->pc); > >> + dc->ir = cpu_lduw_code(cpu_single_env, dc->pc); > >> > >> /* Now decode it. */ > >> dc->opcode = EXTRACT_FIELD(dc->ir, 6, 9); > >> -- > >> 1.7.2.5 > >> > >> > >> > > > > -- > > Aurelien Jarno GPG: 1024D/F1BCDB73 > > aurel...@aurel32.net http://www.aurel32.net > > -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurel...@aurel32.net http://www.aurel32.net