AREG0 patches, final round
v2 cover AREG0 patches, final round
Convert remaining targets to AREG0 free mode.
Avoid also cpu_single_env in translation code.
If there are no objections and the s390x queue gets pulled in, I'll apply the series next weekend.
v2:
drop queued s390x patches
avoid also cpu_single_env
Aurelien Jarno (2):
target-cris: Avoid AREG0 for helpers
target-cris: Switch to AREG0 free mode
Blue Swirl (12):
target-s390x: avoid cpu_single_env
target-lm32: switch to AREG0 free mode
target-m68k: switch to AREG0 free mode
target-m68k: avoid using cpu_single_env
target-unicore32: switch to AREG0 free mode
target-arm: convert void helpers
target-arm: convert remaining helpers
target-arm: final conversion to AREG0 free mode
target-microblaze: switch to AREG0 free mode
target-sh4: switch to AREG0 free mode
target-mips: switch to AREG0 free mode Remove unused CONFIG_TCG_PASS_AREG0 and dead code
Makefile.target | 8 - configure | 11 - cpu-all.h | 11 - cputlb.c | 5 - dyngen-exec.h | 70 --- exec-all.h | 4 - hw/spapr_hcall.c | 1 - softmmu_defs.h | 21 - softmmu_header.h | 63 +-- softmmu_template.h | 72 +-- target-arm/Makefile.objs | 2 - target-arm/cpu.h | 10 +- target-arm/helper.c | 9 +- target-arm/helper.h | 60 ++-- target-arm/op_helper.c | 92 ++-- target-arm/translate.c | 148 +++--- target-cris/Makefile.objs | 2 - target-cris/helper.c | 4 +- target-cris/helper.h | 37 +- target-cris/op_helper.c | 89 ++-- target-cris/translate.c | 300 ++++++------ target-cris/translate_v10.c | 99 ++-- target-lm32/Makefile.objs | 2 - target-lm32/helper.h | 20 +- target-lm32/op_helper.c | 29 +- target-lm32/translate.c | 28 +- target-m68k/Makefile.objs | 2 - target-m68k/helpers.h | 2 +- target-m68k/op_helper.c | 71 +-- target-m68k/translate.c | 284 ++++++----- target-microblaze/Makefile.objs | 2 - target-microblaze/helper.h | 48 +- target-microblaze/op_helper.c | 115 ++--- target-microblaze/translate.c | 61 ++- target-mips/Makefile.objs | 2 - target-mips/cpu.h | 16 +- target-mips/helper.h | 410 ++++++++-------- target-mips/op_helper.c | 1065 ++++++++++++++++++++------------------- target-mips/translate.c | 754 ++++++++++++++-------------- target-s390x/translate.c | 356 +++++++------- target-sh4/Makefile.objs | 2 - target-sh4/helper.h | 84 ++-- target-sh4/op_helper.c | 182 ++++---- target-sh4/translate.c | 114 +++-- target-sparc/Makefile.objs | 2 - target-unicore32/Makefile.objs | 2 - target-unicore32/helper.h | 26 +- target-unicore32/op_helper.c | 65 +-- target-unicore32/translate.c | 38 +- tcg/arm/tcg-target.c | 31 +- tcg/arm/tcg-target.h | 1 - tcg/hppa/tcg-target.c | 24 - tcg/hppa/tcg-target.h | 1 - tcg/i386/tcg-target.c | 30 -- tcg/i386/tcg-target.h | 1 - tcg/ia64/tcg-target.c | 34 -- tcg/ia64/tcg-target.h | 1 - tcg/mips/tcg-target.c | 31 +- tcg/mips/tcg-target.h | 1 - tcg/ppc/tcg-target.c | 38 -- tcg/ppc64/tcg-target.c | 28 - tcg/s390/tcg-target.c | 24 - tcg/s390/tcg-target.h | 1 - tcg/sparc/tcg-target.c | 30 -- tcg/sparc/tcg-target.h | 1 - tcg/tci/tcg-target.c | 4 - tci.c | 12 - user-exec.c | 14 - 68 files changed, 2394 insertions(+), 2813 deletions(-) delete mode 100644 dyngen-exec.h
Signature · 1 line
1.7.2.5
PATCH v2 1/14 target-s390x: avoid cpu_single_env
Pass around CPUState instead of using global cpu_single_env.
--- target-s390x/translate.c | 356 ++++++++++++++++++++++++---------------------- 1 files changed, 183 insertions(+), 173 deletions(-)
target-s390x/translate.c +183 -173
@@ -274,21 +274,21 @@ static inline void potential_page_fault(DisasContext *s)#endif } -static inline uint64_t ld_code2 (uint64_t pc) +static inline uint64_t ld_code2 (CPUS390XState *env,uint64_t pc) { -return (uint64_t )cpu_lduw_code (cpu_single_env, pc); +return (uint64_t )cpu_lduw_code (env, pc); } -static inline uint64_t ld_code4 (uint64_t pc) +static inline uint64_t ld_code4 (CPUS390XState *env,uint64_t pc) { -return (uint64_t )cpu_ldl_code (cpu_single_env, pc); +return (uint64_t )cpu_ldl_code (env, pc); } -static inline uint64_t ld_code6 (uint64_t pc) +static inline uint64_t ld_code6 (CPUS390XState *env,uint64_t pc) {uint64_t opc; - opc = (uint64_t )cpu_lduw_code (cpu_single_env, pc) <<32 ; - opc |= (uint64_t )(uint32_t )cpu_ldl_code (cpu_single_env, pc +2 ); + opc = (uint64_t )cpu_lduw_code (env, pc) <<32 ; + opc |= (uint64_t )(uint32_t )cpu_ldl_code (env, pc +2 );return opc; }
@@ -319,7 +319,7 @@ static inline void gen_debug(DisasContext *s)#ifdef CONFIG_USER_ONLY -static void gen_illegal_opcode (DisasContext *s,int ilc) +static void gen_illegal_opcode (CPUS390XState *env,DisasContext *s,int ilc) {TCGv_i32 tmp =tcg_const_i32 (EXCP_SPEC );update_psw_addr (s);
@@ -331,20 +331,20 @@ static void gen_illegal_opcode(DisasContext *s, int ilc)#else /* CONFIG_USER_ONLY */ -static void debug_print_inst (DisasContext *s,int ilc) +static void debug_print_inst (CPUS390XState *env,DisasContext *s,int ilc) {#ifdef DEBUG_ILLEGAL_INSTRUCTIONS uint64_t inst =0 ;switch (ilc &3 ) {case 1 : - inst =ld_code2 (s->pc); + inst =ld_code2 (env, s->pc);break ;case 2 : - inst =ld_code4 (s->pc); + inst =ld_code4 (env, s->pc);break ;case 3 : - inst =ld_code6 (s->pc); + inst =ld_code6 (env, s->pc);break ; }
@@ -353,11 +353,12 @@ static void debug_print_inst(DisasContext *s, int ilc)#endif } -static void gen_program_exception (DisasContext *s,int ilc,int code) +static void gen_program_exception (CPUS390XState *env,DisasContext *s,int ilc, +int code) {TCGv_i32 tmp; -debug_print_inst (s, ilc); +debug_print_inst (env, s, ilc);/* remember what pgm exeption this was */ tmp =tcg_const_i32 (code);
@@ -385,20 +386,21 @@ static void gen_program_exception(DisasContext *s, int ilc, int code) } -static void gen_illegal_opcode (DisasContext *s,int ilc) +static void gen_illegal_opcode (CPUS390XState *env,DisasContext *s,int ilc) { -gen_program_exception (s, ilc,PGM_SPECIFICATION ); +gen_program_exception (env, s, ilc,PGM_SPECIFICATION ); } -static void gen_privileged_exception (DisasContext *s,int ilc) +static void gen_privileged_exception (CPUS390XState *env,DisasContext *s, +int ilc) { -gen_program_exception (s, ilc,PGM_PRIVILEGED ); +gen_program_exception (env, s, ilc,PGM_PRIVILEGED ); } -static void check_privileged (DisasContext *s,int ilc) +static void check_privileged (CPUS390XState *env,DisasContext *s,int ilc) {if (s->tb->flags & (PSW_MASK_PSTATE >>32 )) { -gen_privileged_exception (s, ilc); +gen_privileged_exception (env, s, ilc); } }
@@ -1460,7 +1462,8 @@ static void gen_op_clc(DisasContext *s, int l, TCGv_i64 s1, TCGv_i64 s2)set_cc_static (s); } -static void disas_e3 (DisasContext * s,int op,int r1,int x2,int b2,int d2) +static void disas_e3 (CPUS390XState *env,DisasContext * s,int op,int r1, +int x2,int b2,int d2) {TCGv_i64 addr, tmp, tmp2, tmp3, tmp4;TCGv_i32 tmp32_1, tmp32_2, tmp32_3;
@@ -1925,14 +1928,14 @@ static void disas_e3(DisasContext* s, int op, int r1, int x2, int b2, int d2)break ;default :LOG_DISAS ("illegal e3 operation 0x%x\n" , op); -gen_illegal_opcode (s,3 ); +gen_illegal_opcode (env, s,3 );break ; }tcg_temp_free_i64 (addr); }#ifndef CONFIG_USER_ONLY -static void disas_e5 (DisasContext * s,uint64_t insn) +static void disas_e5 (CPUS390XState *env,DisasContext * s,uint64_t insn) {TCGv_i64 tmp, tmp2;int op = (insn >>32 ) &0xff ;
@@ -1950,7 +1953,7 @@ static void disas_e5(DisasContext* s, uint64_t insn)break ;default :LOG_DISAS ("illegal e5 operation 0x%x\n" , op); -gen_illegal_opcode (s,3 ); +gen_illegal_opcode (env, s,3 );break ; }
@@ -1959,7 +1962,8 @@ static void disas_e5(DisasContext* s, uint64_t insn) }#endif -static void disas_eb (DisasContext *s,int op,int r1,int r3,int b2,int d2) +static void disas_eb (CPUS390XState *env,DisasContext *s,int op,int r1, +int r3,int b2,int d2) {TCGv_i64 tmp, tmp2, tmp3, tmp4;TCGv_i32 tmp32_1, tmp32_2;
@@ -2102,7 +2106,7 @@ do_mh:#ifndef CONFIG_USER_ONLY case 0x2f :/* LCTLG R1,R3,D2(B2) [RSE] */ /* Load Control */ -check_privileged (s, ilc); +check_privileged (env, s, ilc); tmp =get_address (s,0 , b2, d2); tmp32_1 =tcg_const_i32 (r1); tmp32_2 =tcg_const_i32 (r3);
@@ -2114,7 +2118,7 @@ do_mh:break ;case 0x25 :/* STCTG R1,R3,D2(B2) [RSE] */ /* Store Control */ -check_privileged (s, ilc); +check_privileged (env, s, ilc); tmp =get_address (s,0 , b2, d2); tmp32_1 =tcg_const_i32 (r1); tmp32_2 =tcg_const_i32 (r3);
@@ -2191,13 +2195,13 @@ do_mh:break ;default :LOG_DISAS ("illegal eb operation 0x%x\n" , op); -gen_illegal_opcode (s, ilc); +gen_illegal_opcode (env, s, ilc);break ; } } -static void disas_ed (DisasContext *s,int op,int r1,int x2,int b2,int d2, -int r1b) +static void disas_ed (CPUS390XState *env,DisasContext *s,int op,int r1, +int x2,int b2,int d2,int r1b) {TCGv_i32 tmp_r1, tmp32;TCGv_i64 addr, tmp;
@@ -2311,14 +2315,15 @@ static void disas_ed(DisasContext *s, int op, int r1, int x2, int b2, int d2,break ;default :LOG_DISAS ("illegal ed operation 0x%x\n" , op); -gen_illegal_opcode (s,3 ); +gen_illegal_opcode (env, s,3 );return ; }tcg_temp_free_i32 (tmp_r1);tcg_temp_free_i64 (addr); } -static void disas_a5 (DisasContext *s,int op,int r1,int i2) +static void disas_a5 (CPUS390XState *env,DisasContext *s,int op,int r1, +int i2) {TCGv_i64 tmp, tmp2;TCGv_i32 tmp32;
@@ -2467,12 +2472,13 @@ static void disas_a5(DisasContext *s, int op, int r1, int i2)break ;default :LOG_DISAS ("illegal a5 operation 0x%x\n" , op); -gen_illegal_opcode (s,2 ); +gen_illegal_opcode (env, s,2 );return ; } } -static void disas_a7 (DisasContext *s,int op,int r1,int i2) +static void disas_a7 (CPUS390XState *env,DisasContext *s,int op,int r1, +int i2) {TCGv_i64 tmp, tmp2;TCGv_i32 tmp32_1, tmp32_2, tmp32_3;
@@ -2604,12 +2610,13 @@ static void disas_a7(DisasContext *s, int op, int r1, int i2)break ;default :LOG_DISAS ("illegal a7 operation 0x%x\n" , op); -gen_illegal_opcode (s,2 ); +gen_illegal_opcode (env, s,2 );return ; } } -static void disas_b2 (DisasContext *s,int op,uint32_t insn) +static void disas_b2 (CPUS390XState *env,DisasContext *s,int op, +uint32_t insn) {TCGv_i64 tmp, tmp2, tmp3;TCGv_i32 tmp32_1, tmp32_2, tmp32_3;
@@ -2708,7 +2715,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)#ifndef CONFIG_USER_ONLY case 0x02 :/* STIDP D2(B2) [S] */ /* Store CPU ID */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);potential_page_fault (s);
@@ -2717,7 +2724,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x04 :/* SCK D2(B2) [S] */ /* Set Clock */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);potential_page_fault (s);
@@ -2736,7 +2743,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x06 :/* SCKC D2(B2) [S] */ /* Set Clock Comparator */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);potential_page_fault (s);
@@ -2745,7 +2752,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x07 :/* STCKC D2(B2) [S] */ /* Store Clock Comparator */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);potential_page_fault (s);
@@ -2754,7 +2761,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x08 :/* SPT D2(B2) [S] */ /* Set CPU Timer */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);potential_page_fault (s);
@@ -2763,7 +2770,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x09 :/* STPT D2(B2) [S] */ /* Store CPU Timer */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);potential_page_fault (s);
@@ -2772,7 +2779,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x0a :/* SPKA D2(B2) [S] */ /* Set PSW Key from Address */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp2 =tcg_temp_new_i64 ();
@@ -2784,12 +2791,12 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x0d :/* PTLB [S] */ /* Purge TLB */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);gen_helper_ptlb (cpu_env);break ;case 0x10 :/* SPX D2(B2) [S] */ /* Set Prefix Register */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);potential_page_fault (s);
@@ -2798,7 +2805,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x11 :/* STPX D2(B2) [S] */ /* Store Prefix */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp2 =tcg_temp_new_i64 ();
@@ -2809,7 +2816,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x12 :/* STAP D2(B2) [S] */ /* Store CPU Address */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp2 =tcg_temp_new_i64 ();
@@ -2823,7 +2830,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x21 :/* IPTE R1,R2 [RRE] */ /* Invalidate PTE */ -check_privileged (s, ilc); +check_privileged (env, s, ilc); r1 = (insn >>4 ) &0xf ; r2 = insn &0xf ; tmp =load_reg (r1);
@@ -2834,7 +2841,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x29 :/* ISKE R1,R2 [RRE] */ /* Insert Storage Key Extended */ -check_privileged (s, ilc); +check_privileged (env, s, ilc); r1 = (insn >>4 ) &0xf ; r2 = insn &0xf ; tmp =load_reg (r2);
@@ -2846,7 +2853,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x2a :/* RRBE R1,R2 [RRE] */ /* Set Storage Key Extended */ -check_privileged (s, ilc); +check_privileged (env, s, ilc); r1 = (insn >>4 ) &0xf ; r2 = insn &0xf ; tmp32_1 =load_reg32 (r1);
@@ -2858,7 +2865,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x2b :/* SSKE R1,R2 [RRE] */ /* Set Storage Key Extended */ -check_privileged (s, ilc); +check_privileged (env, s, ilc); r1 = (insn >>4 ) &0xf ; r2 = insn &0xf ; tmp32_1 =load_reg32 (r1);
@@ -2869,12 +2876,12 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x34 :/* STCH ? */ /* Store Subchannel */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);gen_op_movi_cc (s,3 );break ;case 0x46 :/* STURA R1,R2 [RRE] */ /* Store Using Real Address */ -check_privileged (s, ilc); +check_privileged (env, s, ilc); r1 = (insn >>4 ) &0xf ; r2 = insn &0xf ; tmp32_1 =load_reg32 (r1);
@@ -2886,7 +2893,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x50 :/* CSP R1,R2 [RRE] */ /* Compare And Swap And Purge */ -check_privileged (s, ilc); +check_privileged (env, s, ilc); r1 = (insn >>4 ) &0xf ; r2 = insn &0xf ; tmp32_1 =tcg_const_i32 (r1);
@@ -2898,7 +2905,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x5f :/* CHSC ? */ /* Channel Subsystem Call */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);gen_op_movi_cc (s,3 );break ;case 0x78 :/* STCKE D2(B2) [S] */
@@ -2912,7 +2919,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x79 :/* SACF D2(B2) [S] */ /* Store Clock Extended */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);potential_page_fault (s);
@@ -2924,7 +2931,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn) s->is_jmp =DISAS_EXCP ;break ;case 0x7d :/* STSI D2,(B2) [S] */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =load_reg32 (0 );
@@ -2950,7 +2957,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0xb1 :/* STFL D2(B2) [S] */ /* Store Facility List (CPU features) at 200 */ -check_privileged (s, ilc); +check_privileged (env, s, ilc); tmp2 =tcg_const_i64 (0xc0000000 ); tmp =tcg_const_i64 (200 );tcg_gen_qemu_st32 (tmp2, tmp,get_mem_index (s));
@@ -2959,7 +2966,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0xb2 :/* LPSWE D2(B2) [S] */ /* Load PSW Extended */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp2 =tcg_temp_new_i64 ();
@@ -2976,7 +2983,7 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)break ;case 0x20 :/* SERVC R1,R2 [RRE] */ /* SCLP Service call (PV hypercall) */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);potential_page_fault (s); tmp32_1 =load_reg32 (r2); tmp =load_reg (r1);
@@ -2988,12 +2995,13 @@ static void disas_b2(DisasContext *s, int op, uint32_t insn)#endif default :LOG_DISAS ("illegal b2 operation 0x%x\n" , op); -gen_illegal_opcode (s, ilc); +gen_illegal_opcode (env, s, ilc);break ; } } -static void disas_b3 (DisasContext *s,int op,int m3,int r1,int r2) +static void disas_b3 (CPUS390XState *env,DisasContext *s,int op,int m3, +int r1,int r2) {TCGv_i64 tmp;TCGv_i32 tmp32_1, tmp32_2, tmp32_3;
@@ -3263,7 +3271,7 @@ static void disas_b3(DisasContext *s, int op, int m3, int r1, int r2)break ;default :LOG_DISAS ("illegal b3 operation 0x%x\n" , op); -gen_illegal_opcode (s,2 ); +gen_illegal_opcode (env, s,2 );break ; }
@@ -3271,7 +3279,8 @@ static void disas_b3(DisasContext *s, int op, int m3, int r1, int r2)#undef FP_HELPER } -static void disas_b9 (DisasContext *s,int op,int r1,int r2) +static void disas_b9 (CPUS390XState *env,DisasContext *s,int op,int r1, +int r2) {TCGv_i64 tmp, tmp2, tmp3;TCGv_i32 tmp32_1, tmp32_2, tmp32_3;
@@ -3654,12 +3663,12 @@ static void disas_b9(DisasContext *s, int op, int r1, int r2)break ;default :LOG_DISAS ("illegal b9 operation 0x%x\n" , op); -gen_illegal_opcode (s,2 ); +gen_illegal_opcode (env, s,2 );break ; } } -static void disas_c0 (DisasContext *s,int op,int r1,int i2) +static void disas_c0 (CPUS390XState *env,DisasContext *s,int op,int r1,int i2) {TCGv_i64 tmp;TCGv_i32 tmp32_1, tmp32_2;
@@ -3755,12 +3764,13 @@ static void disas_c0(DisasContext *s, int op, int r1, int i2)break ;default :LOG_DISAS ("illegal c0 operation 0x%x\n" , op); -gen_illegal_opcode (s,3 ); +gen_illegal_opcode (env, s,3 );break ; } } -static void disas_c2 (DisasContext *s,int op,int r1,int i2) +static void disas_c2 (CPUS390XState *env,DisasContext *s,int op,int r1, +int i2) {TCGv_i64 tmp, tmp2, tmp3;TCGv_i32 tmp32_1, tmp32_2, tmp32_3;
@@ -3832,7 +3842,7 @@ static void disas_c2(DisasContext *s, int op, int r1, int i2)break ;default :LOG_DISAS ("illegal c2 operation 0x%x\n" , op); -gen_illegal_opcode (s,3 ); +gen_illegal_opcode (env, s,3 );break ; } }
@@ -3854,7 +3864,7 @@ static void gen_and_or_xor_i32(int opc, TCGv_i32 tmp, TCGv_i32 tmp2) } } -static void disas_s390_insn (DisasContext *s) +static void disas_s390_insn (CPUS390XState *env,DisasContext *s) {TCGv_i64 tmp, tmp2, tmp3, tmp4;TCGv_i32 tmp32_1, tmp32_2, tmp32_3, tmp32_4;
@@ -3865,7 +3875,7 @@ static void disas_s390_insn(DisasContext *s)int ilc;int l1; - opc =cpu_ldub_code (cpu_single_env, s->pc); + opc =cpu_ldub_code (env, s->pc);LOG_DISAS ("opc 0x%x\n" , opc); ilc =get_ilc (opc);
@@ -3873,12 +3883,12 @@ static void disas_s390_insn(DisasContext *s)switch (opc) {#ifndef CONFIG_USER_ONLY case 0x01 :/* SAM */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);/* set addressing mode, but we only do 64bit anyways */ break ;#endif case 0x6 :/* BCTR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r1);tcg_gen_subi_i32 (tmp32_1, tmp32_1,1 );
@@ -3904,7 +3914,7 @@ static void disas_s390_insn(DisasContext *s) }break ;case 0x7 :/* BCR M1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2);if (r2) { tmp =load_reg (r2);
@@ -3916,7 +3926,7 @@ static void disas_s390_insn(DisasContext *s) }break ;case 0xa :/* SVC I [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);debug_insn (insn); i = insn &0xff ;update_psw_addr (s);
@@ -3933,7 +3943,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_3);break ;case 0xd :/* BASR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp =tcg_const_i64 (pc_to_link_info (s, s->pc +2 ));store_reg (r1, tmp);
@@ -3946,7 +3956,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp);break ;case 0xe :/* MVCL R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =tcg_const_i32 (r1); tmp32_2 =tcg_const_i32 (r2);
@@ -3957,7 +3967,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0x10 :/* LPR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r2);set_cc_abs32 (s, tmp32_1);
@@ -3966,7 +3976,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_1);break ;case 0x11 :/* LNR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r2);set_cc_nabs32 (s, tmp32_1);
@@ -3975,7 +3985,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_1);break ;case 0x12 :/* LTR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r2);if (r1 != r2) {
@@ -3985,7 +3995,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_1);break ;case 0x13 :/* LCR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r2);tcg_gen_neg_i32 (tmp32_1, tmp32_1);
@@ -3996,7 +4006,7 @@ static void disas_s390_insn(DisasContext *s)case 0x14 :/* NR R1,R2 [RR] */ case 0x16 :/* OR R1,R2 [RR] */ case 0x17 :/* XR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_2 =load_reg32 (r2); tmp32_1 =load_reg32 (r1);
@@ -4007,7 +4017,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0x18 :/* LR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r2);store_reg32 (r1, tmp32_1);
@@ -4015,7 +4025,7 @@ static void disas_s390_insn(DisasContext *s)break ;case 0x15 :/* CLR R1,R2 [RR] */ case 0x19 :/* CR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r1); tmp32_2 =load_reg32 (r2);
@@ -4029,7 +4039,7 @@ static void disas_s390_insn(DisasContext *s)break ;case 0x1a :/* AR R1,R2 [RR] */ case 0x1e :/* ALR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r1); tmp32_2 =load_reg32 (r2);
@@ -4047,7 +4057,7 @@ static void disas_s390_insn(DisasContext *s)break ;case 0x1b :/* SR R1,R2 [RR] */ case 0x1f :/* SLR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r1); tmp32_2 =load_reg32 (r2);
@@ -4065,7 +4075,7 @@ static void disas_s390_insn(DisasContext *s)break ;case 0x1c :/* MR R1,R2 [RR] */ /* reg(r1, r1+1) = reg(r1+1) * reg(r2) */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp2 =load_reg (r2); tmp3 =load_reg ((r1 +1 ) &15 );
@@ -4079,7 +4089,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp3);break ;case 0x1d :/* DR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_reg32 (r1); tmp32_2 =load_reg32 (r1 +1 );
@@ -4114,21 +4124,21 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp3);break ;case 0x28 :/* LDR R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp =load_freg (r2);store_freg (r1, tmp);tcg_temp_free_i64 (tmp);break ;case 0x38 :/* LER R1,R2 [RR] */ - insn =ld_code2 (s->pc); + insn =ld_code2 (env, s->pc);decode_rr (s, insn, &r1, &r2); tmp32_1 =load_freg32 (r2);store_freg32 (r1, tmp32_1);tcg_temp_free_i32 (tmp32_1);break ;case 0x40 :/* STH R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =load_reg (r1);tcg_gen_qemu_st16 (tmp2, tmp,get_mem_index (s));
@@ -4136,13 +4146,13 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x41 :/* la */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2);store_reg (r1, tmp);/* FIXME: 31/24-bit addressing */ tcg_temp_free_i64 (tmp);break ;case 0x42 :/* STC R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =load_reg (r1);tcg_gen_qemu_st8 (tmp2, tmp,get_mem_index (s));
@@ -4150,7 +4160,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x43 :/* IC R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 ();tcg_gen_qemu_ld8u (tmp2, tmp,get_mem_index (s));
@@ -4159,7 +4169,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x44 :/* EX R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =load_reg (r1); tmp3 =tcg_const_i64 (s->pc +4 );
@@ -4172,7 +4182,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp3);break ;case 0x46 :/* BCT R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2);tcg_temp_free_i64 (tmp);
@@ -4196,14 +4206,14 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp);break ;case 0x47 :/* BC M1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2);gen_bcr (s, r1, tmp, s->pc +4 );tcg_temp_free_i64 (tmp); s->is_jmp =DISAS_TB_JUMP ;break ;case 0x48 :/* LH R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 ();tcg_gen_qemu_ld16s (tmp2, tmp,get_mem_index (s));
@@ -4212,7 +4222,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x49 :/* CH R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp32_1 =load_reg32 (r1); tmp32_2 =tcg_temp_new_i32 ();
@@ -4228,7 +4238,7 @@ static void disas_s390_insn(DisasContext *s)case 0x4a :/* AH R1,D2(X2,B2) [RX] */ case 0x4b :/* SH R1,D2(X2,B2) [RX] */ case 0x4c :/* MH R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 (); tmp32_1 =load_reg32 (r1);
@@ -4261,7 +4271,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x4d :/* BAS R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_const_i64 (pc_to_link_info (s, s->pc +4 ));store_reg (r1, tmp2);
@@ -4271,7 +4281,7 @@ static void disas_s390_insn(DisasContext *s) s->is_jmp =DISAS_JUMP ;break ;case 0x4e :/* CVD R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 (); tmp32_1 =tcg_temp_new_i32 ();
@@ -4283,7 +4293,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_1);break ;case 0x50 :/* st r1, d2(x2, b2) */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =load_reg (r1);tcg_gen_qemu_st32 (tmp2, tmp,get_mem_index (s));
@@ -4291,7 +4301,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x55 :/* CL R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 (); tmp32_1 =tcg_temp_new_i32 ();
@@ -4307,7 +4317,7 @@ static void disas_s390_insn(DisasContext *s)case 0x54 :/* N R1,D2(X2,B2) [RX] */ case 0x56 :/* O R1,D2(X2,B2) [RX] */ case 0x57 :/* X R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 (); tmp32_1 =load_reg32 (r1);
@@ -4323,7 +4333,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0x58 :/* l r1, d2(x2, b2) */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 (); tmp32_1 =tcg_temp_new_i32 ();
@@ -4335,7 +4345,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_1);break ;case 0x59 :/* C R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 (); tmp32_1 =tcg_temp_new_i32 ();
@@ -4352,7 +4362,7 @@ static void disas_s390_insn(DisasContext *s)case 0x5b :/* S R1,D2(X2,B2) [RX] */ case 0x5e :/* AL R1,D2(X2,B2) [RX] */ case 0x5f :/* SL R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp32_1 =load_reg32 (r1); tmp32_2 =tcg_temp_new_i32 ();
@@ -4395,7 +4405,7 @@ static void disas_s390_insn(DisasContext *s)break ;case 0x5c :/* M R1,D2(X2,B2) [RX] */ /* reg(r1, r1+1) = reg(r1+1) * *(s32*)addr */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 ();tcg_gen_qemu_ld32s (tmp2, tmp,get_mem_index (s));
@@ -4411,7 +4421,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp3);break ;case 0x5d :/* D R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp3 =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp32_1 =load_reg32 (r1); tmp32_2 =load_reg32 (r1 +1 );
@@ -4445,7 +4455,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp3);break ;case 0x60 :/* STD R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =load_freg (r1);tcg_gen_qemu_st64 (tmp2, tmp,get_mem_index (s));
@@ -4453,7 +4463,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x68 :/* LD R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 ();tcg_gen_qemu_ld64 (tmp2, tmp,get_mem_index (s));
@@ -4462,7 +4472,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x70 :/* STE R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 (); tmp32_1 =load_freg32 (r1);
@@ -4473,7 +4483,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_1);break ;case 0x71 :/* MS R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 (); tmp32_1 =load_reg32 (r1);
@@ -4488,7 +4498,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0x78 :/* LE R1,D2(X2,B2) [RX] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp2 =tcg_temp_new_i64 (); tmp32_1 =tcg_temp_new_i32 ();
@@ -4502,8 +4512,8 @@ static void disas_s390_insn(DisasContext *s)#ifndef CONFIG_USER_ONLY case 0x80 :/* SSM D2(B2) [S] */ /* Set System Mask */ -check_privileged (s, ilc); - insn =ld_code4 (s->pc); +check_privileged (env, s, ilc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp2 =tcg_temp_new_i64 ();
@@ -4518,8 +4528,8 @@ static void disas_s390_insn(DisasContext *s)break ;case 0x82 :/* LPSW D2(B2) [S] */ /* Load PSW */ -check_privileged (s, ilc); - insn =ld_code4 (s->pc); +check_privileged (env, s, ilc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp2 =tcg_temp_new_i64 ();
@@ -4536,9 +4546,9 @@ static void disas_s390_insn(DisasContext *s)break ;case 0x83 :/* DIAG R1,R3,D2 [RS] */ /* Diagnose call (KVM hypercall) */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);potential_page_fault (s); - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp32_1 =tcg_const_i32 (insn &0xfff ); tmp2 =load_reg (2 );
@@ -4553,7 +4563,7 @@ static void disas_s390_insn(DisasContext *s)case 0x88 :/* SRL R1,D2(B2) [RS] */ case 0x89 :/* SLL R1,D2(B2) [RS] */ case 0x8a :/* SRA R1,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =load_reg32 (r1);
@@ -4582,7 +4592,7 @@ static void disas_s390_insn(DisasContext *s)case 0x8c :/* SRDL R1,D2(B2) [RS] */ case 0x8d :/* SLDL R1,D2(B2) [RS] */ case 0x8e :/* SRDA R1,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);/* shift */ tmp2 =tcg_temp_new_i64 ();
@@ -4611,7 +4621,7 @@ static void disas_s390_insn(DisasContext *s)break ;case 0x98 :/* LM R1,R3,D2(B2) [RS] */ case 0x90 :/* STM R1,R3,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2);
@@ -4637,7 +4647,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp4);break ;case 0x91 :/* TM D1(B1),I2 [SI] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_si (s, insn, &i2, &b1, &d1); tmp2 =tcg_const_i64 (i2);tcg_gen_qemu_ld8u (tmp, tmp,get_mem_index (s));
@@ -4646,7 +4656,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x92 :/* MVI D1(B1),I2 [SI] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_si (s, insn, &i2, &b1, &d1); tmp2 =tcg_const_i64 (i2);tcg_gen_qemu_st8 (tmp2, tmp,get_mem_index (s));
@@ -4656,7 +4666,7 @@ static void disas_s390_insn(DisasContext *s)case 0x94 :/* NI D1(B1),I2 [SI] */ case 0x96 :/* OI D1(B1),I2 [SI] */ case 0x97 :/* XI D1(B1),I2 [SI] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_si (s, insn, &i2, &b1, &d1); tmp2 =tcg_temp_new_i64 ();tcg_gen_qemu_ld8u (tmp2, tmp,get_mem_index (s));
@@ -4679,7 +4689,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x95 :/* CLI D1(B1),I2 [SI] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); tmp =decode_si (s, insn, &i2, &b1, &d1); tmp2 =tcg_temp_new_i64 ();tcg_gen_qemu_ld8u (tmp2, tmp,get_mem_index (s));
@@ -4688,7 +4698,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0x9a :/* LAM R1,R3,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =tcg_const_i32 (r1);
@@ -4700,7 +4710,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0x9b :/* STAM R1,R3,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =tcg_const_i32 (r1);
@@ -4712,21 +4722,21 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0xa5 : - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); r1 = (insn >>20 ) &0xf ; op = (insn >>16 ) &0xf ; i2 = insn &0xffff ; -disas_a5 (s, op, r1, i2); +disas_a5 (env, s, op, r1, i2);break ;case 0xa7 : - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); r1 = (insn >>20 ) &0xf ; op = (insn >>16 ) &0xf ; i2 = (short )insn; -disas_a7 (s, op, r1, i2); +disas_a7 (env, s, op, r1, i2);break ;case 0xa8 :/* MVCLE R1,R3,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =tcg_const_i32 (r1);
@@ -4739,7 +4749,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0xa9 :/* CLCLE R1,R3,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =tcg_const_i32 (r1);
@@ -4754,8 +4764,8 @@ static void disas_s390_insn(DisasContext *s)#ifndef CONFIG_USER_ONLY case 0xac :/* STNSM D1(B1),I2 [SI] */ case 0xad :/* STOSM D1(B1),I2 [SI] */ -check_privileged (s, ilc); - insn =ld_code4 (s->pc); +check_privileged (env, s, ilc); + insn =ld_code4 (env, s->pc); tmp =decode_si (s, insn, &i2, &b1, &d1); tmp2 =tcg_temp_new_i64 ();tcg_gen_shri_i64 (tmp2, psw_mask,56 );
@@ -4770,8 +4780,8 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;case 0xae :/* SIGP R1,R3,D2(B2) [RS] */ -check_privileged (s, ilc); - insn =ld_code4 (s->pc); +check_privileged (env, s, ilc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp2 =load_reg (r3);
@@ -4784,8 +4794,8 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_1);break ;case 0xb1 :/* LRA R1,D2(X2, B2) [RX] */ -check_privileged (s, ilc); - insn =ld_code4 (s->pc); +check_privileged (env, s, ilc); + insn =ld_code4 (env, s->pc); tmp =decode_rx (s, insn, &r1, &x2, &b2, &d2); tmp32_1 =tcg_const_i32 (r1);potential_page_fault (s);
@@ -4796,7 +4806,7 @@ static void disas_s390_insn(DisasContext *s)break ;#endif case 0xb2 : - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); op = (insn >>16 ) &0xff ;switch (op) {case 0x9c :/* STFPC D2(B2) [S] */
@@ -4813,23 +4823,23 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i64 (tmp2);break ;default : -disas_b2 (s, op, insn); +disas_b2 (env, s, op, insn);break ; }break ;case 0xb3 : - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); op = (insn >>16 ) &0xff ; r3 = (insn >>12 ) &0xf ;/* aka m3 */ r1 = (insn >>4 ) &0xf ; r2 = insn &0xf ; -disas_b3 (s, op, r3, r1, r2); +disas_b3 (env, s, op, r3, r1, r2);break ;#ifndef CONFIG_USER_ONLY case 0xb6 :/* STCTL R1,R3,D2(B2) [RS] */ /* Store Control */ -check_privileged (s, ilc); - insn =ld_code4 (s->pc); +check_privileged (env, s, ilc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =tcg_const_i32 (r1);
@@ -4842,8 +4852,8 @@ static void disas_s390_insn(DisasContext *s)break ;case 0xb7 :/* LCTL R1,R3,D2(B2) [RS] */ /* Load Control */ -check_privileged (s, ilc); - insn =ld_code4 (s->pc); +check_privileged (env, s, ilc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =tcg_const_i32 (r1);
@@ -4856,14 +4866,14 @@ static void disas_s390_insn(DisasContext *s)break ;#endif case 0xb9 : - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc); r1 = (insn >>4 ) &0xf ; r2 = insn &0xf ; op = (insn >>16 ) &0xff ; -disas_b9 (s, op, r1, r2); +disas_b9 (env, s, op, r1, r2);break ;case 0xba :/* CS R1,R3,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =tcg_const_i32 (r1);
@@ -4876,7 +4886,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0xbd :/* CLM R1,M3,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =load_reg32 (r1);
@@ -4889,7 +4899,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0xbe :/* STCM R1,M3,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2); tmp =get_address (s,0 , b2, d2); tmp32_1 =load_reg32 (r1);
@@ -4901,7 +4911,7 @@ static void disas_s390_insn(DisasContext *s)tcg_temp_free_i32 (tmp32_2);break ;case 0xbf :/* ICM R1,M3,D2(B2) [RS] */ - insn =ld_code4 (s->pc); + insn =ld_code4 (env, s->pc);decode_rs (s, insn, &r1, &r3, &b2, &d2);if (r3 ==15 ) {/* effectively a 32-bit load */
@@ -4956,16 +4966,16 @@ static void disas_s390_insn(DisasContext *s)break ;case 0xc0 :case 0xc2 : - insn =ld_code6 (s->pc); + insn =ld_code6 (env, s->pc); r1 = (insn >>36 ) &0xf ; op = (insn >>32 ) &0xf ; i2 = (int )insn;switch (opc) {case 0xc0 : -disas_c0 (s, op, r1, i2); +disas_c0 (env, s, op, r1, i2);break ;case 0xc2 : -disas_c2 (s, op, r1, i2); +disas_c2 (env, s, op, r1, i2);break ;default :tcg_abort ();
@@ -4978,7 +4988,7 @@ static void disas_s390_insn(DisasContext *s)case 0xd7 :/* XC D1(L,B1),D2(B2) [SS] */ case 0xdc :/* TR D1(L,B1),D2(B2) [SS] */ case 0xf3 :/* UNPK D1(L1,B1),D2(L2,B2) [SS] */ - insn =ld_code6 (s->pc); + insn =ld_code6 (env, s->pc); vl =tcg_const_i32 ((insn >>32 ) &0xff ); b1 = (insn >>28 ) &0xf ; b2 = (insn >>12 ) &0xf ;
@@ -5026,9 +5036,9 @@ static void disas_s390_insn(DisasContext *s)#ifndef CONFIG_USER_ONLY case 0xda :/* MVCP D1(R1,B1),D2(B2),R3 [SS] */ case 0xdb :/* MVCS D1(R1,B1),D2(B2),R3 [SS] */ -check_privileged (s, ilc); +check_privileged (env, s, ilc);potential_page_fault (s); - insn =ld_code6 (s->pc); + insn =ld_code6 (env, s->pc); r1 = (insn >>36 ) &0xf ; r3 = (insn >>32 ) &0xf ; b1 = (insn >>28 ) &0xf ;
@@ -5051,7 +5061,7 @@ static void disas_s390_insn(DisasContext *s)break ;#endif case 0xe3 : - insn =ld_code6 (s->pc); + insn =ld_code6 (env, s->pc);debug_insn (insn); op = insn &0xff ; r1 = (insn >>36 ) &0xf ;
@@ -5059,19 +5069,19 @@ static void disas_s390_insn(DisasContext *s) b2 = (insn >>28 ) &0xf ; d2 = ((int )((((insn >>16 ) &0xfff ) | ((insn <<4 ) &0xff000 )) <<12 )) >>12 ; -disas_e3 (s, op, r1, x2, b2, d2 ); +disas_e3 (env, s, op, r1, x2, b2, d2 );break ;#ifndef CONFIG_USER_ONLY case 0xe5 :/* Test Protection */ -check_privileged (s, ilc); - insn =ld_code6 (s->pc); +check_privileged (env, s, ilc); + insn =ld_code6 (env, s->pc);debug_insn (insn); -disas_e5 (s, insn); +disas_e5 (env, s, insn);break ;#endif case 0xeb : - insn =ld_code6 (s->pc); + insn =ld_code6 (env, s->pc);debug_insn (insn); op = insn &0xff ; r1 = (insn >>36 ) &0xf ;
@@ -5079,10 +5089,10 @@ static void disas_s390_insn(DisasContext *s) b2 = (insn >>28 ) &0xf ; d2 = ((int )((((insn >>16 ) &0xfff ) | ((insn <<4 ) &0xff000 )) <<12 )) >>12 ; -disas_eb (s, op, r1, r3, b2, d2); +disas_eb (env, s, op, r1, r3, b2, d2);break ;case 0xed : - insn =ld_code6 (s->pc); + insn =ld_code6 (env, s->pc);debug_insn (insn); op = insn &0xff ; r1 = (insn >>36 ) &0xf ;
@@ -5090,11 +5100,11 @@ static void disas_s390_insn(DisasContext *s) b2 = (insn >>28 ) &0xf ; d2 = (short )((insn >>16 ) &0xfff ); r1b = (insn >>12 ) &0xf ; -disas_ed (s, op, r1, x2, b2, d2, r1b); +disas_ed (env, s, op, r1, x2, b2, d2, r1b);break ;default :qemu_log_mask (LOG_UNIMP ,"unimplemented opcode 0x%x\n" , opc); -gen_illegal_opcode (s, ilc); +gen_illegal_opcode (env, s, ilc);break ; }
@@ -5167,7 +5177,7 @@ static inline void gen_intermediate_code_internal(CPUS390XState *env,LOG_DISAS ("pc " TARGET_FMT_lx"\n" , dc.pc);#endif -disas_s390_insn (&dc); +disas_s390_insn (env, &dc); num_insns++;if (env->singlestep_enabled) {
Signature · 1 line
1.7.2.5
PATCH v2 2/14 target-lm32: switch to AREG0 free mode
In reply to Blue SwirlAdd an explicit CPUState parameter instead of relying on AREG0 and switch to AREG0 free mode.
--- configure | 2 +- target-lm32/Makefile.objs | 2 -- target-lm32/helper.h | 20 ++++++++++---------- target-lm32/op_helper.c | 29 +++++++++++------------------ target-lm32/translate.c | 28 +++++++++++++--------------- 5 files changed, 35 insertions(+), 46 deletions(-)
configure +1 -1
@@ -3829,7 +3829,7 @@ symlink "$source_path/Makefile.target" "$target_dir/Makefile" case "$target_arch2" in - alpha | i386 | or32 | s390x | sparc* | x86_64 | xtensa* | ppc*) + alpha | i386 | lm32 | or32 | s390x | sparc* | x86_64 | xtensa* | ppc*) echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak ;; esac
target-lm32/Makefile.objs +0 -2
@@ -1,4 +1,2 @@ obj-y += translate.o op_helper.o helper.o cpu.o obj-$(CONFIG_SOFTMMU) += machine.o - -$(obj)/op_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-lm32/helper.h +10 -10
@@ -1,14 +1,14 @@#include "def-helper.h" -DEF_HELPER_1(raise_exception, void, i32) -DEF_HELPER_0(hlt, void) -DEF_HELPER_1(wcsr_im, void, i32) -DEF_HELPER_1(wcsr_ip, void, i32) -DEF_HELPER_1(wcsr_jtx, void, i32) -DEF_HELPER_1(wcsr_jrx, void, i32) -DEF_HELPER_0(rcsr_im, i32) -DEF_HELPER_0(rcsr_ip, i32) -DEF_HELPER_0(rcsr_jtx, i32) -DEF_HELPER_0(rcsr_jrx, i32) +DEF_HELPER_2(raise_exception, void, env, i32) +DEF_HELPER_1(hlt, void, env) +DEF_HELPER_2(wcsr_im, void, env, i32) +DEF_HELPER_2(wcsr_ip, void, env, i32) +DEF_HELPER_2(wcsr_jtx, void, env, i32) +DEF_HELPER_2(wcsr_jrx, void, env, i32) +DEF_HELPER_1(rcsr_im, i32, env) +DEF_HELPER_1(rcsr_ip, i32, env) +DEF_HELPER_1(rcsr_jtx, i32, env) +DEF_HELPER_1(rcsr_jrx, i32, env)#include "def-helper.h"
target-lm32/op_helper.c +11 -18
@@ -1,6 +1,5 @@#include <assert.h> #include "cpu.h" -#include "dyngen-exec.h" #include "helper.h" #include "host-utils.h"
@@ -18,55 +17,55 @@#define SHIFT 3#include "softmmu_template.h" -void helper_raise_exception (uint32_t index) +void helper_raise_exception (CPULM32State *env,uint32_t index) { env->exception_index = index;cpu_loop_exit (env); } -void helper_hlt (void ) +void helper_hlt (CPULM32State *env) { env->halted =1 ; env->exception_index =EXCP_HLT ;cpu_loop_exit (env); } -void helper_wcsr_im (uint32_t im) +void helper_wcsr_im (CPULM32State *env,uint32_t im) {lm32_pic_set_im (env->pic_state, im); } -void helper_wcsr_ip (uint32_t im) +void helper_wcsr_ip (CPULM32State *env,uint32_t im) {lm32_pic_set_ip (env->pic_state, im); } -void helper_wcsr_jtx (uint32_t jtx) +void helper_wcsr_jtx (CPULM32State *env,uint32_t jtx) {lm32_juart_set_jtx (env->juart_state, jtx); } -void helper_wcsr_jrx (uint32_t jrx) +void helper_wcsr_jrx (CPULM32State *env,uint32_t jrx) {lm32_juart_set_jrx (env->juart_state, jrx); } -uint32_t helper_rcsr_im (void ) +uint32_t helper_rcsr_im (CPULM32State *env) {return lm32_pic_get_im (env->pic_state); } -uint32_t helper_rcsr_ip (void ) +uint32_t helper_rcsr_ip (CPULM32State *env) {return lm32_pic_get_ip (env->pic_state); } -uint32_t helper_rcsr_jtx (void ) +uint32_t helper_rcsr_jtx (CPULM32State *env) {return lm32_juart_get_jtx (env->juart_state); } -uint32_t helper_rcsr_jrx (void ) +uint32_t helper_rcsr_jrx (CPULM32State *env) {return lm32_juart_get_jrx (env->juart_state); }
@@ -74,17 +73,12 @@ uint32_t helper_rcsr_jrx(void)/* 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 (CPULM32State *env1,target_ulong addr,int is_write,int mmu_idx, +void tlb_fill (CPULM32State *env,target_ulong addr,int is_write,int mmu_idx,uintptr_t retaddr) {TranslationBlock *tb; -CPULM32State *saved_env;int ret; - saved_env = env; - env = env1; - ret =cpu_lm32_handle_mmu_fault (env, addr, is_write, mmu_idx);if (unlikely (ret)) {if (retaddr) {
@@ -98,7 +92,6 @@ void tlb_fill(CPULM32State *env1, target_ulong addr, int is_write, int mmu_idx, }cpu_loop_exit (env); } - env = saved_env; }#endif
target-lm32/translate.c +13 -15
@@ -116,7 +116,7 @@ static inline void t_gen_raise_exception(DisasContext *dc, 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); }
@@ -179,7 +179,7 @@ static void dec_and(DisasContext *dc) }else {if (dc->r0 ==0 && dc->r1 ==0 && dc->r2 ==0 ) {tcg_gen_movi_tl (cpu_pc, dc->pc +4 ); -gen_helper_hlt (); +gen_helper_hlt (cpu_env); }else {tcg_gen_and_tl (cpu_R[dc->r2], cpu_R[dc->r0], cpu_R[dc->r1]); }
@@ -601,10 +601,10 @@ static void dec_rcsr(DisasContext *dc)tcg_gen_mov_tl (cpu_R[dc->r2], cpu_ie);break ;case CSR_IM : -gen_helper_rcsr_im (cpu_R[dc->r2]); +gen_helper_rcsr_im (cpu_R[dc->r2], cpu_env);break ;case CSR_IP : -gen_helper_rcsr_ip (cpu_R[dc->r2]); +gen_helper_rcsr_ip (cpu_R[dc->r2], cpu_env);break ;case CSR_CC :tcg_gen_mov_tl (cpu_R[dc->r2], cpu_cc);
@@ -622,10 +622,10 @@ static void dec_rcsr(DisasContext *dc)tcg_gen_mov_tl (cpu_R[dc->r2], cpu_deba);break ;case CSR_JTX : -gen_helper_rcsr_jtx (cpu_R[dc->r2]); +gen_helper_rcsr_jtx (cpu_R[dc->r2], cpu_env);break ;case CSR_JRX : -gen_helper_rcsr_jrx (cpu_R[dc->r2]); +gen_helper_rcsr_jrx (cpu_R[dc->r2], cpu_env);break ;case CSR_ICC :case CSR_DCC :
@@ -812,7 +812,7 @@ static void dec_wcsr(DisasContext *dc)if (use_icount) {gen_io_start (); } -gen_helper_wcsr_im (cpu_R[dc->r1]); +gen_helper_wcsr_im (cpu_env, cpu_R[dc->r1]);tcg_gen_movi_tl (cpu_pc, dc->pc +4 );if (use_icount) {gen_io_end ();
@@ -824,7 +824,7 @@ static void dec_wcsr(DisasContext *dc)if (use_icount) {gen_io_start (); } -gen_helper_wcsr_ip (cpu_R[dc->r1]); +gen_helper_wcsr_ip (cpu_env, cpu_R[dc->r1]);tcg_gen_movi_tl (cpu_pc, dc->pc +4 );if (use_icount) {gen_io_end ();
@@ -844,10 +844,10 @@ static void dec_wcsr(DisasContext *dc)tcg_gen_mov_tl (cpu_deba, cpu_R[dc->r1]);break ;case CSR_JTX : -gen_helper_wcsr_jtx (cpu_R[dc->r1]); +gen_helper_wcsr_jtx (cpu_env, cpu_R[dc->r1]);break ;case CSR_JRX : -gen_helper_wcsr_jrx (cpu_R[dc->r1]); +gen_helper_wcsr_jrx (cpu_env, cpu_R[dc->r1]);break ;case CSR_DC :tcg_gen_mov_tl (cpu_dc, cpu_R[dc->r1]);
@@ -940,15 +940,13 @@ static const DecoderInfo decinfo[] = { dec_cmpne }; -static inline void decode (DisasContext *dc) +static inline void decode (DisasContext *dc,uint32_t ir) { -uint32_t ir; -if (unlikely (qemu_loglevel_mask (CPU_LOG_TB_OP ))) {tcg_gen_debug_insn_start (dc->pc); } - dc->ir = ir =ldl_code (dc->pc); + dc->ir = ir;LOG_DIS ("%8.8x\t" , dc->ir);/* try guessing 'empty' instruction memory, although it may be a valid
@@ -1068,7 +1066,7 @@ static void gen_intermediate_code_internal(CPULM32State *env,gen_io_start (); } -decode (dc); +decode (dc,cpu_ldl_code (env, dc->pc)); dc->pc +=4 ; num_insns++;
Signature · 1 line
1.7.2.5
PATCH v2 3/14 target-m68k: switch to AREG0 free mode
In reply to Blue SwirlAdd an explicit CPUState parameter instead of relying on AREG0 and switch to AREG0 free mode.
--- configure | 2 +- target-m68k/Makefile.objs | 2 - target-m68k/helpers.h | 2 +- target-m68k/op_helper.c | 68 ++++++++++++++++------------------------ target-m68k/translate.c | 76 +++++++++++++++++++++++---------------------- 5 files changed, 68 insertions(+), 82 deletions(-)
configure +1 -1
@@ -3829,7 +3829,7 @@ symlink "$source_path/Makefile.target" "$target_dir/Makefile" case "$target_arch2" in - alpha | i386 | lm32 | or32 | s390x | sparc* | x86_64 | xtensa* | ppc*) + alpha | i386 | lm32 | m68k | or32 | s390x | sparc* | x86_64 | xtensa* | ppc*) echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak ;; esac
target-m68k/Makefile.objs +0 -2
@@ -1,5 +1,3 @@ obj-y += m68k-semi.o obj-y += translate.o op_helper.o helper.o cpu.o obj-$(CONFIG_SOFTMMU) += machine.o - -$(obj)/op_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-m68k/helpers.h +1 -1
@@ -49,6 +49,6 @@ DEF_HELPER_3(set_mac_exts, void, env, i32, i32) DEF_HELPER_3(set_mac_extu, void, env, i32, i32) DEF_HELPER_2(flush_flags, void, env, i32) -DEF_HELPER_1(raise_exception, void, i32) +DEF_HELPER_2(raise_exception, void, env, i32)#include "def-helper.h"
target-m68k/op_helper.c +27 -41
158 lines not on this page · raw message
target-m68k/translate.c +39 -37
247 lines not on this page · raw message
Signature · 1 line
1.7.2.5
PATCH v2 4/14 target-m68k: avoid using cpu_single_env
In reply to Blue SwirlPass around CPUState instead of using global cpu_single_env.
--- target-m68k/translate.c | 270 ++++++++++++++++++++++++----------------------- 1 files changed, 140 insertions(+), 130 deletions(-)
target-m68k/translate.c +140 -130
@@ -150,18 +150,24 @@ static void *gen_throws_exception;#define OS_SINGLE 4#define OS_DOUBLE 5 -typedef void (*disas_proc )(DisasContext *,uint16_t ); +typedef void (*disas_proc )(CPUM68KState *env,DisasContext *s,uint16_t insn);#ifdef DEBUG_DISPATCH -#define DISAS_INSN (name) \ - static void real_disas_##name (DisasContext *s, uint16_t insn); \ - static void disas_##name (DisasContext *s, uint16_t insn) { \ - qemu_log("Dispatch " #name "\n"); \ - real_disas_##name(s, insn); } \ - static void real_disas_##name (DisasContext *s, uint16_t insn) +#define DISAS_INSN (name) \ + static void real_disas_##name(CPUM68KState *env, DisasContext *s, \ + uint16_t insn); \ + static void disas_##name(CPUM68KState *env, DisasContext *s, \ + uint16_t insn) \ + { \ + qemu_log("Dispatch " #name "\n"); \ + real_disas_##name(s, env, insn); \ + } \ + static void real_disas_##name(CPUM68KState *env, DisasContext *s, \ + uint16_t insn)#else -#define DISAS_INSN (name) \ - static void disas_##name (DisasContext *s, uint16_t insn) +#define DISAS_INSN (name) \ + static void disas_##name(CPUM68KState *env, DisasContext *s, \ + uint16_t insn)#endif /* Generate a load from the specified address. Narrow values are
@@ -257,12 +263,12 @@ static TCGv gen_ldst(DisasContext *s, int opsize, TCGv addr, TCGv val, }/* Read a 32-bit immediate constant. */ -static inline uint32_t read_im32 (DisasContext *s) +static inline uint32_t read_im32 (CPUM68KState *env,DisasContext *s) {uint32_t im; - im = ((uint32_t )cpu_lduw_code (cpu_single_env, s->pc)) <<16 ; + im = ((uint32_t )cpu_lduw_code (env, s->pc)) <<16 ; s->pc +=2 ; - im |=cpu_lduw_code (cpu_single_env, s->pc); + im |=cpu_lduw_code (env, s->pc); s->pc +=2 ;return im; }
@@ -288,7 +294,8 @@ static TCGv gen_addr_index(uint16_t ext, TCGv tmp)/* Handle a base + index + displacement effective addresss. A NULL_QREG base means pc-relative. */ -static TCGv gen_lea_indexed (DisasContext *s,int opsize,TCGv base) +static TCGv gen_lea_indexed (CPUM68KState *env,DisasContext *s,int opsize, +TCGv base) {uint32_t offset;uint16_t ext;
@@ -297,7 +304,7 @@ static TCGv gen_lea_indexed(DisasContext *s, int opsize, TCGv base)uint32_t bd, od; offset = s->pc; - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ;if ((ext &0x800 ) ==0 && !m68k_feature (s->env,M68K_FEATURE_WORD_INDEX ))
@@ -311,10 +318,10 @@ static TCGv gen_lea_indexed(DisasContext *s, int opsize, TCGv base)if ((ext &0x30 ) >0x10 ) {/* base displacement */ if ((ext &0x30 ) ==0x20 ) { - bd = (int16_t )cpu_lduw_code (cpu_single_env, s->pc); + bd = (int16_t )cpu_lduw_code (env, s->pc); s->pc +=2 ; }else { - bd =read_im32 (s); + bd =read_im32 (env, s); } }else { bd =0 ;
@@ -360,10 +367,10 @@ static TCGv gen_lea_indexed(DisasContext *s, int opsize, TCGv base)if ((ext &3 ) >1 ) {/* outer displacement */ if ((ext &3 ) ==2 ) { - od = (int16_t )cpu_lduw_code (cpu_single_env, s->pc); + od = (int16_t )cpu_lduw_code (env, s->pc); s->pc +=2 ; }else { - od =read_im32 (s); + od =read_im32 (env, s); } }else { od =0 ;
@@ -492,7 +499,8 @@ static inline TCGv gen_extend(TCGv val, int opsize, int sign)/* Generate code for an "effective address". Does not adjust the base register for autoincrement addressing modes. */ -static TCGv gen_lea (DisasContext *s,uint16_t insn,int opsize) +static TCGv gen_lea (CPUM68KState *env,DisasContext *s,uint16_t insn, +int opsize) {TCGv reg;TCGv tmp;
@@ -514,29 +522,29 @@ static TCGv gen_lea(DisasContext *s, uint16_t insn, int opsize)case 5 :/* Indirect displacement. */ reg =AREG (insn,0 ); tmp =tcg_temp_new (); - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ;tcg_gen_addi_i32 (tmp, reg, (int16_t )ext);return tmp;case 6 :/* Indirect index + displacement. */ reg =AREG (insn,0 ); -return gen_lea_indexed (s, opsize, reg); +return gen_lea_indexed (env, s, opsize, reg);case 7 :/* Other */ switch (insn &7 ) {case 0 :/* Absolute short. */ - offset =cpu_ldsw_code (cpu_single_env, s->pc); + offset =cpu_ldsw_code (env, s->pc); s->pc +=2 ;return tcg_const_i32 (offset);case 1 :/* Absolute long. */ - offset =read_im32 (s); + offset =read_im32 (env, s);return tcg_const_i32 (offset);case 2 :/* pc displacement */ offset = s->pc; - offset +=cpu_ldsw_code (cpu_single_env, s->pc); + offset +=cpu_ldsw_code (env, s->pc); s->pc +=2 ;return tcg_const_i32 (offset);case 3 :/* pc index+displacement. */ -return gen_lea_indexed (s, opsize,NULL_QREG ); +return gen_lea_indexed (env, s, opsize,NULL_QREG );case 4 :/* Immediate. */ default :return NULL_QREG ;
@@ -548,15 +556,16 @@ static TCGv gen_lea(DisasContext *s, uint16_t insn, int opsize)/* Helper function for gen_ea. Reuse the computed address between the for read/write operands. */ -static inline TCGv gen_ea_once (DisasContext *s,uint16_t insn,int opsize, -TCGv val,TCGv *addrp,ea_what what) +static inline TCGv gen_ea_once (CPUM68KState *env,DisasContext *s, +uint16_t insn,int opsize,TCGv val, +TCGv *addrp,ea_what what) {TCGv tmp;if (addrp && what ==EA_STORE ) { tmp = *addrp; }else { - tmp =gen_lea (s, insn, opsize); + tmp =gen_lea (env, s, insn, opsize);if (IS_NULL_QREG (tmp))return tmp;if (addrp)
@@ -568,8 +577,8 @@ static inline TCGv gen_ea_once(DisasContext *s, uint16_t insn, int opsize,/* Generate code to load/store a value ito/from an EA. If VAL > 0 this is a write otherwise it is a read (0 == sign extend, -1 == zero extend). ADDRP is non-null for readwrite operands. */ -static TCGv gen_ea (DisasContext *s,uint16_t insn,int opsize,TCGv val, -TCGv *addrp,ea_what what) +static TCGv gen_ea (CPUM68KState *env,DisasContext *s,uint16_t insn, +int opsize,TCGv val,TCGv *addrp,ea_what what) {TCGv reg;TCGv result;
@@ -609,7 +618,7 @@ static TCGv gen_ea(DisasContext *s, uint16_t insn, int opsize, TCGv val,if (addrp && what ==EA_STORE ) { tmp = *addrp; }else { - tmp =gen_lea (s, insn, opsize); + tmp =gen_lea (env, s, insn, opsize);if (IS_NULL_QREG (tmp))return tmp;if (addrp)
@@ -626,35 +635,35 @@ static TCGv gen_ea(DisasContext *s, uint16_t insn, int opsize, TCGv val,return result;case 5 :/* Indirect displacement. */ case 6 :/* Indirect index + displacement. */ -return gen_ea_once (s, insn, opsize, val, addrp, what); +return gen_ea_once (env, s, insn, opsize, val, addrp, what);case 7 :/* Other */ switch (insn &7 ) {case 0 :/* Absolute short. */ case 1 :/* Absolute long. */ case 2 :/* pc displacement */ case 3 :/* pc index+displacement. */ -return gen_ea_once (s, insn, opsize, val, addrp, what); +return gen_ea_once (env, s, insn, opsize, val, addrp, what);case 4 :/* Immediate. */ /* Sign extend values for consistency. */ switch (opsize) {case OS_BYTE :if (what ==EA_LOADS ) { - offset =cpu_ldsb_code (cpu_single_env, s->pc +1 ); + offset =cpu_ldsb_code (env, s->pc +1 ); }else { - offset =cpu_ldub_code (cpu_single_env, s->pc +1 ); + offset =cpu_ldub_code (env, s->pc +1 ); } s->pc +=2 ;break ;case OS_WORD :if (what ==EA_LOADS ) { - offset =cpu_ldsw_code (cpu_single_env, s->pc); + offset =cpu_ldsw_code (env, s->pc); }else { - offset =cpu_lduw_code (cpu_single_env, s->pc); + offset =cpu_lduw_code (env, s->pc); } s->pc +=2 ;break ;case OS_LONG : - offset =read_im32 (s); + offset =read_im32 (env, s);break ;default :qemu_assert (0 ,"Bad immediate operand" );
@@ -825,20 +834,21 @@ static inline void gen_addr_fault(DisasContext *s)gen_exception (s, s->insn_pc,EXCP_ADDRESS ); } -#define SRC_EA (result, opsize, op_sign, addrp) do { \ - result = gen_ea(s, insn, opsize, NULL_QREG, addrp, op_sign ? EA_LOADS : EA_LOADU); \ - if (IS_NULL_QREG(result)) { \ - gen_addr_fault(s); \ - return; \ - } \ +#define SRC_EA (env, result, opsize, op_sign, addrp) do { \ + result = gen_ea(env, s, insn, opsize, NULL_QREG, addrp, \ + op_sign ? EA_LOADS : EA_LOADU); \ + if (IS_NULL_QREG(result)) { \ + gen_addr_fault(s); \ + return; \ + } \ } while (0) -#define DEST_EA (insn, opsize, val, addrp) do { \ - TCGv ea_result = gen_ea(s, insn, opsize, val, addrp, EA_STORE); \ - if (IS_NULL_QREG(ea_result)) { \ - gen_addr_fault(s); \ - return; \ - } \ +#define DEST_EA (env, insn, opsize, val, addrp) do { \ + TCGv ea_result = gen_ea(env, s, insn, opsize, val, addrp, EA_STORE); \ + if (IS_NULL_QREG(ea_result)) { \ + gen_addr_fault(s); \ + return; \ + } \ } while (0)/* Generate a jump to an immediate address. */
@@ -874,8 +884,7 @@ DISAS_INSN(undef_fpu)DISAS_INSN (undef) {gen_exception (s, s->pc -2 ,EXCP_UNSUPPORTED ); -cpu_abort (cpu_single_env,"Illegal instruction: %04x @ %08x" , - insn, s->pc -2 ); +cpu_abort (env,"Illegal instruction: %04x @ %08x" , insn, s->pc -2 ); }DISAS_INSN (mulw)
@@ -892,7 +901,7 @@ DISAS_INSN(mulw)tcg_gen_ext16s_i32 (tmp, reg); elsetcg_gen_ext16u_i32 (tmp ,reg ); -SRC_EA (src,OS_WORD , sign,NULL ); +SRC_EA (env, src,OS_WORD , sign,NULL );tcg_gen_mul_i32 (tmp, tmp, src);tcg_gen_mov_i32 (reg, tmp);/* Unlike m68k, coldfire always clears the overflow bit. */
@@ -913,7 +922,7 @@ DISAS_INSN(divw) }else {tcg_gen_ext16u_i32 (QREG_DIV1 , reg); } -SRC_EA (src,OS_WORD , sign,NULL ); +SRC_EA (env, src,OS_WORD , sign,NULL );tcg_gen_mov_i32 (QREG_DIV2 , src);if (sign) {gen_helper_divs (cpu_env,tcg_const_i32 (1 ));
@@ -936,7 +945,7 @@ DISAS_INSN(divl)TCGv reg;uint16_t ext; - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ;if (ext &0x87f8 ) {gen_exception (s, s->pc -4 ,EXCP_UNSUPPORTED );
@@ -945,7 +954,7 @@ DISAS_INSN(divl) num =DREG (ext,12 ); reg =DREG (ext,0 );tcg_gen_mov_i32 (QREG_DIV1 , num); -SRC_EA (den,OS_LONG ,0 ,NULL ); +SRC_EA (env, den,OS_LONG ,0 ,NULL );tcg_gen_mov_i32 (QREG_DIV2 , den);if (ext &0x0800 ) {gen_helper_divs (cpu_env,tcg_const_i32 (0 ));
@@ -975,11 +984,11 @@ DISAS_INSN(addsub) reg =DREG (insn,9 ); dest =tcg_temp_new ();if (insn &0x100 ) { -SRC_EA (tmp,OS_LONG ,0 , &addr); +SRC_EA (env, tmp,OS_LONG ,0 , &addr); src = reg; }else { tmp = reg; -SRC_EA (src,OS_LONG ,0 ,NULL ); +SRC_EA (env, src,OS_LONG ,0 ,NULL ); }if (add) {tcg_gen_add_i32 (dest, tmp, src);
@@ -992,7 +1001,7 @@ DISAS_INSN(addsub) }gen_update_cc_add (dest, src);if (insn &0x100 ) { -DEST_EA (insn,OS_LONG , dest, &addr); +DEST_EA (env, insn,OS_LONG , dest, &addr); }else {tcg_gen_mov_i32 (reg, dest); }
@@ -1022,7 +1031,7 @@ DISAS_INSN(bitop_reg)else opsize =OS_LONG ; op = (insn >>6 ) &3 ; -SRC_EA (src1, opsize,0 , op ? &addr:NULL ); +SRC_EA (env, src1, opsize,0 , op ? &addr:NULL ); src2 =DREG (insn,9 ); dest =tcg_temp_new ();
@@ -1057,7 +1066,7 @@ DISAS_INSN(bitop_reg)break ; }if (op) -DEST_EA (insn, opsize, dest, &addr); +DEST_EA (env, insn, opsize, dest, &addr); }DISAS_INSN (sats)
@@ -1088,9 +1097,9 @@ DISAS_INSN(movem)TCGv tmp;int is_load; - mask =cpu_lduw_code (cpu_single_env, s->pc); + mask =cpu_lduw_code (env, s->pc); s->pc +=2 ; - tmp =gen_lea (s, insn,OS_LONG ); + tmp =gen_lea (env, s, insn,OS_LONG );if (IS_NULL_QREG (tmp)) {gen_addr_fault (s);return ;
@@ -1132,14 +1141,14 @@ DISAS_INSN(bitop_im) opsize =OS_LONG ; op = (insn >>6 ) &3 ; - bitnum =cpu_lduw_code (cpu_single_env, s->pc); + bitnum =cpu_lduw_code (env, s->pc); s->pc +=2 ;if (bitnum &0xff00 ) { -disas_undef (s, insn); +disas_undef (env, s, insn);return ; } -SRC_EA (src1, opsize,0 , op ? &addr:NULL ); +SRC_EA (env, src1, opsize,0 , op ? &addr:NULL );gen_flush_flags (s);if (opsize ==OS_BYTE )
@@ -1174,7 +1183,7 @@ DISAS_INSN(bitop_im)default :/* btst */ break ; } -DEST_EA (insn, opsize, tmp, &addr); +DEST_EA (env, insn, opsize, tmp, &addr); } }
@@ -1187,8 +1196,8 @@ DISAS_INSN(arith_im)TCGv addr; op = (insn >>9 ) &7 ; -SRC_EA (src1,OS_LONG ,0 , (op ==6 ) ?NULL : &addr); - im =read_im32 (s); +SRC_EA (env, src1,OS_LONG ,0 , (op ==6 ) ?NULL : &addr); + im =read_im32 (env, s); dest =tcg_temp_new ();switch (op) {case 0 :/* ori */
@@ -1227,7 +1236,7 @@ DISAS_INSN(arith_im)abort (); }if (op !=6 ) { -DEST_EA (insn,OS_LONG , dest, &addr); +DEST_EA (env, insn,OS_LONG , dest, &addr); } }
@@ -1259,7 +1268,7 @@ DISAS_INSN(move)default :abort (); } -SRC_EA (src, opsize,1 ,NULL ); +SRC_EA (env, src, opsize,1 ,NULL ); op = (insn >>6 ) &7 ;if (op ==1 ) {/* movea */
@@ -1270,7 +1279,7 @@ DISAS_INSN(move)/* normal move */ uint16_t dest_ea; dest_ea = ((insn >>9 ) &7 ) | (op <<3 ); -DEST_EA (dest_ea, opsize, src,NULL ); +DEST_EA (env, dest_ea, opsize, src,NULL );/* This will be correct because loads sign extend. */ gen_logic_cc (s, src); }
@@ -1291,7 +1300,7 @@ DISAS_INSN(lea)TCGv tmp; reg =AREG (insn,9 ); - tmp =gen_lea (s, insn,OS_LONG ); + tmp =gen_lea (env, s, insn,OS_LONG );if (IS_NULL_QREG (tmp)) {gen_addr_fault (s);return ;
@@ -1316,7 +1325,7 @@ DISAS_INSN(clr)default :abort (); } -DEST_EA (insn, opsize,tcg_const_i32 (0 ),NULL ); +DEST_EA (env, insn, opsize,tcg_const_i32 (0 ),NULL );gen_logic_cc (s,tcg_const_i32 (0 )); }
@@ -1365,7 +1374,8 @@ static void gen_set_sr_im(DisasContext *s, uint16_t val, int ccr_only) } } -static void gen_set_sr (DisasContext *s,uint16_t insn,int ccr_only) +static void gen_set_sr (CPUM68KState *env,DisasContext *s,uint16_t insn, +int ccr_only) {TCGv tmp;TCGv reg;
@@ -1385,17 +1395,17 @@ static void gen_set_sr(DisasContext *s, uint16_t insn, int ccr_only)else if ((insn &0x3f ) ==0x3c ) {uint16_t val; - val =cpu_lduw_code (cpu_single_env, s->pc); + val =cpu_lduw_code (env, s->pc); s->pc +=2 ;gen_set_sr_im (s, val, ccr_only); }else -disas_undef (s, insn); +disas_undef (env, s, insn); }DISAS_INSN (move_to_ccr) { -gen_set_sr (s, insn,1 ); +gen_set_sr (env, s, insn,1 ); }DISAS_INSN (not)
@@ -1426,7 +1436,7 @@ DISAS_INSN(pea) {TCGv tmp; - tmp =gen_lea (s, insn,OS_LONG ); + tmp =gen_lea (env, s, insn,OS_LONG );if (IS_NULL_QREG (tmp)) {gen_addr_fault (s);return ;
@@ -1472,7 +1482,7 @@ DISAS_INSN(tst)default :abort (); } -SRC_EA (tmp, opsize,1 ,NULL ); +SRC_EA (env, tmp, opsize,1 ,NULL );gen_logic_cc (s, tmp); }
@@ -1494,10 +1504,10 @@ DISAS_INSN(tas)TCGv addr; dest =tcg_temp_new (); -SRC_EA (src1,OS_BYTE ,1 , &addr); +SRC_EA (env, src1,OS_BYTE ,1 , &addr);gen_logic_cc (s, src1);tcg_gen_ori_i32 (dest, src1,0x80 ); -DEST_EA (insn,OS_BYTE , dest, &addr); +DEST_EA (env, insn,OS_BYTE , dest, &addr); }DISAS_INSN (mull)
@@ -1509,14 +1519,14 @@ DISAS_INSN(mull)/* The upper 32 bits of the product are discarded, so muls.l and mulu.l are functionally equivalent. */ - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ;if (ext &0x87ff ) {gen_exception (s, s->pc -4 ,EXCP_UNSUPPORTED );return ; } reg =DREG (ext,12 ); -SRC_EA (src1,OS_LONG ,0 ,NULL ); +SRC_EA (env, src1,OS_LONG ,0 ,NULL ); dest =tcg_temp_new ();tcg_gen_mul_i32 (dest, src1, reg);tcg_gen_mov_i32 (reg, dest);
@@ -1530,7 +1540,7 @@ DISAS_INSN(link)TCGv reg;TCGv tmp; - offset =cpu_ldsw_code (cpu_single_env, s->pc); + offset =cpu_ldsw_code (env, s->pc); s->pc +=2 ; reg =AREG (insn,0 ); tmp =tcg_temp_new ();
@@ -1574,7 +1584,7 @@ DISAS_INSN(jump)/* Load the target address first to ensure correct exception behavior. */ - tmp =gen_lea (s, insn,OS_LONG ); + tmp =gen_lea (env, s, insn,OS_LONG );if (IS_NULL_QREG (tmp)) {gen_addr_fault (s);return ;
@@ -1594,7 +1604,7 @@ DISAS_INSN(addsubq)int val;TCGv addr; -SRC_EA (src1,OS_LONG ,0 , &addr); +SRC_EA (env, src1,OS_LONG ,0 , &addr); val = (insn >>9 ) &7 ;if (val ==0 ) val =8 ;
@@ -1621,7 +1631,7 @@ DISAS_INSN(addsubq) }gen_update_cc_add (dest, src2); } -DEST_EA (insn,OS_LONG , dest, &addr); +DEST_EA (env, insn,OS_LONG , dest, &addr); }DISAS_INSN (tpf)
@@ -1636,7 +1646,7 @@ DISAS_INSN(tpf)case 4 :/* No extension words. */ break ;default : -disas_undef (s, insn); +disas_undef (env, s, insn); } }
@@ -1651,10 +1661,10 @@ DISAS_INSN(branch) op = (insn >>8 ) &0xf ; offset = (int8_t )insn;if (offset ==0 ) { - offset =cpu_ldsw_code (cpu_single_env, s->pc); + offset =cpu_ldsw_code (env, s->pc); s->pc +=2 ; }else if (offset ==-1 ) { - offset =read_im32 (s); + offset =read_im32 (env, s); }if (op ==1 ) {/* bsr */
@@ -1693,7 +1703,7 @@ DISAS_INSN(mvzs) opsize =OS_WORD ; else opsize =OS_BYTE ; -SRC_EA (src, opsize, (insn &0x80 ) ==0 ,NULL ); +SRC_EA (env, src, opsize, (insn &0x80 ) ==0 ,NULL ); reg =DREG (insn,9 );tcg_gen_mov_i32 (reg, src);gen_logic_cc (s, src);
@@ -1709,11 +1719,11 @@ DISAS_INSN(or) reg =DREG (insn,9 ); dest =tcg_temp_new ();if (insn &0x100 ) { -SRC_EA (src,OS_LONG ,0 , &addr); +SRC_EA (env, src,OS_LONG ,0 , &addr);tcg_gen_or_i32 (dest, src, reg); -DEST_EA (insn,OS_LONG , dest, &addr); +DEST_EA (env, insn,OS_LONG , dest, &addr); }else { -SRC_EA (src,OS_LONG ,0 ,NULL ); +SRC_EA (env, src,OS_LONG ,0 ,NULL );tcg_gen_or_i32 (dest, src, reg);tcg_gen_mov_i32 (reg, dest); }
@@ -1725,7 +1735,7 @@ DISAS_INSN(suba)TCGv src;TCGv reg; -SRC_EA (src,OS_LONG ,0 ,NULL ); +SRC_EA (env, src,OS_LONG ,0 ,NULL ); reg =AREG (insn,9 );tcg_gen_sub_i32 (reg, reg, src); }
@@ -1751,7 +1761,7 @@ DISAS_INSN(mov3q) val =-1 ; src =tcg_const_i32 (val);gen_logic_cc (s, src); -DEST_EA (insn,OS_LONG , src,NULL ); +DEST_EA (env, insn,OS_LONG , src,NULL ); }DISAS_INSN (cmp)
@@ -1779,7 +1789,7 @@ DISAS_INSN(cmp)default :abort (); } -SRC_EA (src, opsize,1 ,NULL ); +SRC_EA (env, src, opsize,1 ,NULL ); reg =DREG (insn,9 ); dest =tcg_temp_new ();tcg_gen_sub_i32 (dest, reg, src);
@@ -1798,7 +1808,7 @@ DISAS_INSN(cmpa) }else { opsize =OS_WORD ; } -SRC_EA (src, opsize,1 ,NULL ); +SRC_EA (env, src, opsize,1 ,NULL ); reg =AREG (insn,9 ); dest =tcg_temp_new ();tcg_gen_sub_i32 (dest, reg, src);
@@ -1813,12 +1823,12 @@ DISAS_INSN(eor)TCGv dest;TCGv addr; -SRC_EA (src,OS_LONG ,0 , &addr); +SRC_EA (env, src,OS_LONG ,0 , &addr); reg =DREG (insn,9 ); dest =tcg_temp_new ();tcg_gen_xor_i32 (dest, src, reg);gen_logic_cc (s, dest); -DEST_EA (insn,OS_LONG , dest, &addr); +DEST_EA (env, insn,OS_LONG , dest, &addr); }DISAS_INSN (and)
@@ -1831,11 +1841,11 @@ DISAS_INSN(and) reg =DREG (insn,9 ); dest =tcg_temp_new ();if (insn &0x100 ) { -SRC_EA (src,OS_LONG ,0 , &addr); +SRC_EA (env, src,OS_LONG ,0 , &addr);tcg_gen_and_i32 (dest, src, reg); -DEST_EA (insn,OS_LONG , dest, &addr); +DEST_EA (env, insn,OS_LONG , dest, &addr); }else { -SRC_EA (src,OS_LONG ,0 ,NULL ); +SRC_EA (env, src,OS_LONG ,0 ,NULL );tcg_gen_and_i32 (dest, src, reg);tcg_gen_mov_i32 (reg, dest); }
@@ -1847,7 +1857,7 @@ DISAS_INSN(adda)TCGv src;TCGv reg; -SRC_EA (src,OS_LONG ,0 ,NULL ); +SRC_EA (env, src,OS_LONG ,0 ,NULL ); reg =AREG (insn,9 );tcg_gen_add_i32 (reg, reg, src); }
@@ -1936,13 +1946,13 @@ DISAS_INSN(strldsr)uint32_t addr; addr = s->pc -2 ; - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ;if (ext !=0x46FC ) {gen_exception (s, addr,EXCP_UNSUPPORTED );return ; } - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ;if (IS_USER (s) || (ext &SR_S ) ==0 ) {gen_exception (s, addr,EXCP_PRIVILEGE );
@@ -1972,7 +1982,7 @@ DISAS_INSN(move_to_sr)gen_exception (s, s->pc -2 ,EXCP_PRIVILEGE );return ; } -gen_set_sr (s, insn,0 ); +gen_set_sr (env, s, insn,0 );gen_lookup_tb (s); }
@@ -2010,7 +2020,7 @@ DISAS_INSN(stop)return ; } - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ;gen_set_sr_im (s, ext,0 );
@@ -2037,7 +2047,7 @@ DISAS_INSN(movec)return ; } - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ;if (ext &0x8000 ) {
@@ -2102,7 +2112,7 @@ DISAS_INSN(fpu)int set_dest;int opsize; - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ; opmode = ext &0x7f ;switch ((ext >>13 ) &7 ) {
@@ -2138,7 +2148,7 @@ DISAS_INSN(fpu)tcg_gen_addi_i32 (tmp32, tmp32,-8 );break ;case 5 : - offset =cpu_ldsw_code (cpu_single_env, s->pc); + offset =cpu_ldsw_code (env, s->pc); s->pc +=2 ;tcg_gen_addi_i32 (tmp32, tmp32, offset);break ;
@@ -2164,7 +2174,7 @@ DISAS_INSN(fpu)default : goto undef; } -DEST_EA (insn, opsize, tmp32,NULL ); +DEST_EA (env, insn, opsize, tmp32,NULL );tcg_temp_free_i32 (tmp32);return ;case 4 :/* fmove to control register. */
@@ -2192,7 +2202,7 @@ DISAS_INSN(fpu) (ext >> 10) & 7); goto undef; } -DEST_EA (insn,OS_LONG , tmp32,NULL ); +DEST_EA (env, insn,OS_LONG , tmp32,NULL );break ;case 6 :/* fmovem */ case 7 :
@@ -2202,7 +2212,7 @@ DISAS_INSN(fpu)int i;if ((ext &0x1f00 ) !=0x1000 || (ext &0xff ) ==0 ) goto undef; - tmp32 =gen_lea (s, insn,OS_LONG ); + tmp32 =gen_lea (env, s, insn,OS_LONG );if (IS_NULL_QREG (tmp32)) {gen_addr_fault (s);return ;
@@ -2252,12 +2262,12 @@ DISAS_INSN(fpu)tcg_gen_addi_i32 (tmp32, tmp32,-8 );break ;case 5 : - offset =cpu_ldsw_code (cpu_single_env, s->pc); + offset =cpu_ldsw_code (env, s->pc); s->pc +=2 ;tcg_gen_addi_i32 (tmp32, tmp32, offset);break ;case 7 : - offset =cpu_ldsw_code (cpu_single_env, s->pc); + offset =cpu_ldsw_code (env, s->pc); offset += s->pc -2 ; s->pc +=2 ;tcg_gen_addi_i32 (tmp32, tmp32, offset);
@@ -2277,7 +2287,7 @@ DISAS_INSN(fpu) }tcg_temp_free_i32 (tmp32); }else { -SRC_EA (tmp32, opsize,1 ,NULL ); +SRC_EA (env, tmp32, opsize,1 ,NULL ); src =tcg_temp_new_i64 ();switch (opsize) {case OS_LONG :
@@ -2372,7 +2382,7 @@ DISAS_INSN(fpu) undef:/* FIXME: Is this right for offset addressing modes? */ s->pc -=2 ; -disas_undef_fpu (s, insn); +disas_undef_fpu (env, s, insn); }DISAS_INSN (fbcc)
@@ -2383,10 +2393,10 @@ DISAS_INSN(fbcc)int l1; addr = s->pc; - offset =cpu_ldsw_code (cpu_single_env, s->pc); + offset =cpu_ldsw_code (env, s->pc); s->pc +=2 ;if (insn & (1 <<6 )) { - offset = (offset <<16 ) |cpu_lduw_code (cpu_single_env, s->pc); + offset = (offset <<16 ) |cpu_lduw_code (env, s->pc); s->pc +=2 ; }
@@ -2508,18 +2518,18 @@ DISAS_INSN(mac) s->done_mac =1 ; } - ext =cpu_lduw_code (cpu_single_env, s->pc); + ext =cpu_lduw_code (env, s->pc); s->pc +=2 ; acc = ((insn >>7 ) &1 ) | ((ext >>3 ) &2 ); dual = ((insn &0x30 ) !=0 && (ext &3 ) !=0 );if (dual && !m68k_feature (s->env,M68K_FEATURE_CF_EMAC_B )) { -disas_undef (s, insn); +disas_undef (env, s, insn);return ; }if (insn &0x30 ) {/* MAC with load. */ - tmp =gen_lea (s, insn,OS_LONG ); + tmp =gen_lea (env, s, insn,OS_LONG ); addr =tcg_temp_new ();tcg_gen_and_i32 (addr, tmp,QREG_MAC_MASK );/* Load the value now to ensure correct exception behavior.
@@ -2733,7 +2743,7 @@ DISAS_INSN(to_mac)int accnum; accnum = (insn >>9 ) &3 ; acc =MACREG (accnum); -SRC_EA (val,OS_LONG ,0 ,NULL ); +SRC_EA (env, val,OS_LONG ,0 ,NULL );if (s->env->macsr &MACSR_FI ) {tcg_gen_ext_i32_i64 (acc, val);tcg_gen_shli_i64 (acc, acc,8 );
@@ -2750,7 +2760,7 @@ DISAS_INSN(to_mac)DISAS_INSN (to_macsr) {TCGv val; -SRC_EA (val,OS_LONG ,0 ,NULL ); +SRC_EA (env, val,OS_LONG ,0 ,NULL );gen_helper_set_macsr (cpu_env, val);gen_lookup_tb (s); }
@@ -2758,7 +2768,7 @@ DISAS_INSN(to_macsr)DISAS_INSN (to_mask) {TCGv val; -SRC_EA (val,OS_LONG ,0 ,NULL ); +SRC_EA (env, val,OS_LONG ,0 ,NULL );tcg_gen_ori_i32 (QREG_MAC_MASK , val,0xffff0000 ); }
@@ -2766,7 +2776,7 @@ DISAS_INSN(to_mext) {TCGv val;TCGv acc; -SRC_EA (val,OS_LONG ,0 ,NULL ); +SRC_EA (env, val,OS_LONG ,0 ,NULL ); acc =tcg_const_i32 ((insn &0x400 ) ?2 :0 );if (s->env->macsr &MACSR_FI )gen_helper_set_mac_extf (cpu_env, val, acc);
@@ -2943,10 +2953,10 @@ static void disas_m68k_insn(CPUM68KState * env, DisasContext *s) {uint16_t insn; - insn =cpu_lduw_code (cpu_single_env, s->pc); + insn =cpu_lduw_code (env, s->pc); s->pc +=2 ; - opcode_table[insn](s, insn); + opcode_table[insn](env, s, insn); }/* generate intermediate code for basic block 'tb'. */
Signature · 1 line
1.7.2.5
PATCH v2 5/14 target-unicore32: switch to AREG0 free mode
In reply to Blue SwirlAdd an explicit CPUState parameter instead of relying on AREG0 and switch to AREG0 free mode.
--- configure | 2 +- target-unicore32/Makefile.objs | 2 - target-unicore32/helper.h | 26 ++++++++-------- target-unicore32/op_helper.c | 65 +++++++++++++++------------------------ target-unicore32/translate.c | 38 +++++++++++----------- 5 files changed, 58 insertions(+), 75 deletions(-)
configure +1 -1
@@ -3829,7 +3829,7 @@ symlink "$source_path/Makefile.target" "$target_dir/Makefile" case "$target_arch2" in - alpha | i386 | lm32 | m68k | or32 | s390x | sparc* | x86_64 | xtensa* | ppc*) + alpha | i386 | lm32 | m68k | or32 | s390x | sparc* | unicore32 | x86_64 | xtensa* | ppc*) echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak ;; esac
target-unicore32/Makefile.objs +0 -2
@@ -2,5 +2,3 @@ obj-y += translate.o op_helper.o helper.o cpu.o obj-y += ucf64_helper.o obj-$(CONFIG_SOFTMMU) += machine.o softmmu.o - -$(obj)/op_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-unicore32/helper.h +13 -13
@@ -17,26 +17,26 @@ DEF_HELPER_1(cp1_putc, void, i32) DEF_HELPER_1(clz, i32, i32) DEF_HELPER_1(clo, i32, i32) -DEF_HELPER_1(exception, void, i32) +DEF_HELPER_2(exception, void, env, i32) -DEF_HELPER_2(asr_write, void, i32, i32) -DEF_HELPER_0(asr_read, i32) +DEF_HELPER_3(asr_write, void, env, i32, i32) +DEF_HELPER_1(asr_read, i32, env) -DEF_HELPER_1(get_user_reg, i32, i32) -DEF_HELPER_2(set_user_reg, void, i32, i32) +DEF_HELPER_2(get_user_reg, i32, env, i32) +DEF_HELPER_3(set_user_reg, void, env, i32, i32) -DEF_HELPER_2(add_cc, i32, i32, i32) -DEF_HELPER_2(adc_cc, i32, i32, i32) -DEF_HELPER_2(sub_cc, i32, i32, i32) -DEF_HELPER_2(sbc_cc, i32, i32, i32) +DEF_HELPER_3(add_cc, i32, env, i32, i32) +DEF_HELPER_3(adc_cc, i32, env, i32, i32) +DEF_HELPER_3(sub_cc, i32, env, i32, i32) +DEF_HELPER_3(sbc_cc, i32, env, i32, i32) DEF_HELPER_2(shl, i32, i32, i32) DEF_HELPER_2(shr, i32, i32, i32) DEF_HELPER_2(sar, i32, i32, i32) -DEF_HELPER_2(shl_cc, i32, i32, i32) -DEF_HELPER_2(shr_cc, i32, i32, i32) -DEF_HELPER_2(sar_cc, i32, i32, i32) -DEF_HELPER_2(ror_cc, i32, i32, i32) +DEF_HELPER_3(shl_cc, i32, env, i32, i32) +DEF_HELPER_3(shr_cc, i32, env, i32, i32) +DEF_HELPER_3(sar_cc, i32, env, i32, i32) +DEF_HELPER_3(ror_cc, i32, env, i32, i32) DEF_HELPER_1(ucf64_get_fpscr, i32, env)DEF_HELPER_2 (ucf64_set_fpscr, void, env, i32)
target-unicore32/op_helper.c +25 -40
176 lines not on this page · raw message
target-unicore32/translate.c +19 -19
@@ -253,7 +253,7 @@ static void disas_ocd_insn(CPUUniCore32State *env, DisasContext *s,static inline void gen_set_asr (TCGv var,uint32_t mask) {TCGv tmp_mask =tcg_const_i32 (mask); -gen_helper_asr_write (var, tmp_mask); +gen_helper_asr_write (cpu_env, var, tmp_mask);tcg_temp_free_i32 (tmp_mask); }/* Set NZCV flags from the high 4 bits of var. */
@@ -263,7 +263,7 @@ static void gen_exception(int excp) {TCGv tmp =new_tmp ();tcg_gen_movi_i32 (tmp, excp); -gen_helper_exception (tmp); +gen_helper_exception (cpu_env, tmp);dead_tmp (tmp); }
@@ -416,16 +416,16 @@ static inline void gen_uc32_shift_reg(TCGv var, int shiftop,if (flags) {switch (shiftop) {case 0 : -gen_helper_shl_cc (var, var, shift); +gen_helper_shl_cc (var, cpu_env, var, shift);break ;case 1 : -gen_helper_shr_cc (var, var, shift); +gen_helper_shr_cc (var, cpu_env, var, shift);break ;case 2 : -gen_helper_sar_cc (var, var, shift); +gen_helper_sar_cc (var, cpu_env, var, shift);break ;case 3 : -gen_helper_ror_cc (var, var, shift); +gen_helper_ror_cc (var, cpu_env, var, shift);break ; } }else {
@@ -1323,11 +1323,11 @@ static void do_datap(CPUUniCore32State *env, DisasContext *s, uint32_t insn)if (IS_USER (s)) {ILLEGAL ; } -gen_helper_sub_cc (tmp, tmp, tmp2); +gen_helper_sub_cc (tmp, cpu_env, tmp, tmp2);gen_exception_return (s, tmp); }else {if (UCOP_SET_S ) { -gen_helper_sub_cc (tmp, tmp, tmp2); +gen_helper_sub_cc (tmp, cpu_env, tmp, tmp2); }else {tcg_gen_sub_i32 (tmp, tmp, tmp2); }
@@ -1336,7 +1336,7 @@ static void do_datap(CPUUniCore32State *env, DisasContext *s, uint32_t insn)break ;case 0x03 :if (UCOP_SET_S ) { -gen_helper_sub_cc (tmp, tmp2, tmp); +gen_helper_sub_cc (tmp, cpu_env, tmp2, tmp); }else {tcg_gen_sub_i32 (tmp, tmp2, tmp); }
@@ -1344,7 +1344,7 @@ static void do_datap(CPUUniCore32State *env, DisasContext *s, uint32_t insn)break ;case 0x04 :if (UCOP_SET_S ) { -gen_helper_add_cc (tmp, tmp, tmp2); +gen_helper_add_cc (tmp, cpu_env, tmp, tmp2); }else {tcg_gen_add_i32 (tmp, tmp, tmp2); }
@@ -1352,7 +1352,7 @@ static void do_datap(CPUUniCore32State *env, DisasContext *s, uint32_t insn)break ;case 0x05 :if (UCOP_SET_S ) { -gen_helper_adc_cc (tmp, tmp, tmp2); +gen_helper_adc_cc (tmp, cpu_env, tmp, tmp2); }else {gen_add_carry (tmp, tmp, tmp2); }
@@ -1360,7 +1360,7 @@ static void do_datap(CPUUniCore32State *env, DisasContext *s, uint32_t insn)break ;case 0x06 :if (UCOP_SET_S ) { -gen_helper_sbc_cc (tmp, tmp, tmp2); +gen_helper_sbc_cc (tmp, cpu_env, tmp, tmp2); }else {gen_sub_carry (tmp, tmp, tmp2); }
@@ -1368,7 +1368,7 @@ static void do_datap(CPUUniCore32State *env, DisasContext *s, uint32_t insn)break ;case 0x07 :if (UCOP_SET_S ) { -gen_helper_sbc_cc (tmp, tmp2, tmp); +gen_helper_sbc_cc (tmp, cpu_env, tmp2, tmp); }else {gen_sub_carry (tmp, tmp2, tmp); }
@@ -1390,13 +1390,13 @@ static void do_datap(CPUUniCore32State *env, DisasContext *s, uint32_t insn)break ;case 0x0a :if (UCOP_SET_S ) { -gen_helper_sub_cc (tmp, tmp, tmp2); +gen_helper_sub_cc (tmp, cpu_env, tmp, tmp2); }dead_tmp (tmp);break ;case 0x0b :if (UCOP_SET_S ) { -gen_helper_add_cc (tmp, tmp, tmp2); +gen_helper_add_cc (tmp, cpu_env, tmp, tmp2); }dead_tmp (tmp);break ;
@@ -1536,7 +1536,7 @@ static void do_misc(CPUUniCore32State *env, DisasContext *s, uint32_t insn) tmp =load_cpu_field (bsr); }else { tmp =new_tmp (); -gen_helper_asr_read (tmp); +gen_helper_asr_read (tmp, cpu_env); }store_reg (s,UCOP_REG_D , tmp);return ;
@@ -1760,7 +1760,7 @@ static void do_ldst_m(CPUUniCore32State *env, DisasContext *s, uint32_t insn)gen_bx (s, tmp); }else if (user) { tmp2 =tcg_const_i32 (reg); -gen_helper_set_user_reg (tmp2, tmp); +gen_helper_set_user_reg (cpu_env, tmp2, tmp);tcg_temp_free_i32 (tmp2);dead_tmp (tmp); }else if (reg ==UCOP_REG_N ) {
@@ -1778,7 +1778,7 @@ static void do_ldst_m(CPUUniCore32State *env, DisasContext *s, uint32_t insn) }else if (user) { tmp =new_tmp (); tmp2 =tcg_const_i32 (reg); -gen_helper_get_user_reg (tmp, tmp2); +gen_helper_get_user_reg (tmp, cpu_env, tmp2);tcg_temp_free_i32 (tmp2); }else { tmp =load_reg (s, reg);
@@ -1861,7 +1861,7 @@ static void disas_uc32_insn(CPUUniCore32State *env, DisasContext *s) {unsigned int insn; - insn =ldl_code (s->pc); + insn =cpu_ldl_code (env, s->pc); s->pc +=4 ;/* UniCore instructions class:
Signature · 1 line
1.7.2.5
PATCH v2 6/14 target-arm: convert void helpers
In reply to Blue SwirlAdd an explicit CPUState parameter instead of relying on AREG0.
For easier review, convert only op helpers which don't return any value.
--- target-arm/helper.h | 8 ++++---- target-arm/op_helper.c | 20 ++++++++++---------- target-arm/translate.c | 8 ++++---- 3 files changed, 18 insertions(+), 18 deletions(-)
target-arm/helper.h +4 -4
@@ -50,10 +50,10 @@ DEF_HELPER_2(usad8, i32, i32, i32) DEF_HELPER_1(logicq_cc, i32, i64) DEF_HELPER_3(sel_flags, i32, i32, i32, i32) -DEF_HELPER_1(exception, void, i32) -DEF_HELPER_0(wfi, void) +DEF_HELPER_2(exception, void, env, i32) +DEF_HELPER_1(wfi, void, env) -DEF_HELPER_2(cpsr_write, void, i32, i32) +DEF_HELPER_3(cpsr_write, void, env, i32, i32) DEF_HELPER_0(cpsr_read, i32)DEF_HELPER_3 (v7m_msr, void, env, i32, i32)
@@ -68,7 +68,7 @@ DEF_HELPER_2(get_r13_banked, i32, env, i32) DEF_HELPER_3(set_r13_banked, void, env, i32, i32) DEF_HELPER_1(get_user_reg, i32, i32) -DEF_HELPER_2(set_user_reg, void, i32, i32) +DEF_HELPER_3(set_user_reg, void, env, i32, i32) DEF_HELPER_1(vfp_get_fpscr, i32, env)DEF_HELPER_2 (vfp_set_fpscr, void, env, i32)
target-arm/op_helper.c +10 -10
@@ -23,7 +23,7 @@#define SIGNBIT (uint32_t)0x80000000#define SIGNBIT64 ((uint64_t)1 << 63) -static void raise_exception (int tt) +static void raise_exception (CPUARMState *env,int tt) { env->exception_index = tt;cpu_loop_exit (env);
@@ -93,7 +93,7 @@ void tlb_fill(CPUARMState *env1, target_ulong addr, int is_write, int mmu_idx,cpu_restore_state (tb, env, retaddr); } } -raise_exception (env->exception_index); +raise_exception (env, env->exception_index); } env = saved_env; }
@@ -230,14 +230,14 @@ uint32_t HELPER(usat16)(uint32_t x, uint32_t shift)return res; } -void HELPER (wfi )(void ) +void HELPER (wfi )(CPUARMState *env) { env->exception_index =EXCP_HLT ; env->halted =1 ;cpu_loop_exit (env); } -void HELPER (exception )(uint32_t excp) +void HELPER (exception )(CPUARMState *env,uint32_t excp) { env->exception_index = excp;cpu_loop_exit (env);
@@ -248,7 +248,7 @@ uint32_t HELPER(cpsr_read)(void)return cpsr_read (env) & ~CPSR_EXEC ; } -void HELPER (cpsr_write )(uint32_t val,uint32_t mask) +void HELPER (cpsr_write )(CPUARMState *env,uint32_t val,uint32_t mask) {cpsr_write (env, val, mask); }
@@ -271,7 +271,7 @@ uint32_t HELPER(get_user_reg)(uint32_t regno)return val; } -void HELPER (set_user_reg )(uint32_t regno,uint32_t val) +void HELPER (set_user_reg )(CPUARMState *env,uint32_t regno,uint32_t val) {if (regno ==13 ) { env->banked_r13[0 ] = val;
@@ -290,7 +290,7 @@ void HELPER(set_cp_reg)(CPUARMState *env, void *rip, uint32_t value)const ARMCPRegInfo *ri = rip;int excp = ri->writefn (env, ri, value);if (excp) { -raise_exception (excp); +raise_exception (env, excp); } }
@@ -300,7 +300,7 @@ uint32_t HELPER(get_cp_reg)(CPUARMState *env, void *rip)uint64_t value;int excp = ri->readfn (env, ri, &value);if (excp) { -raise_exception (excp); +raise_exception (env, excp); }return value; }
@@ -310,7 +310,7 @@ void HELPER(set_cp_reg64)(CPUARMState *env, void *rip, uint64_t value)const ARMCPRegInfo *ri = rip;int excp = ri->writefn (env, ri, value);if (excp) { -raise_exception (excp); +raise_exception (env, excp); } }
@@ -320,7 +320,7 @@ uint64_t HELPER(get_cp_reg64)(CPUARMState *env, void *rip)uint64_t value;int excp = ri->readfn (env, ri, &value);if (excp) { -raise_exception (excp); +raise_exception (env, excp); }return value; }
target-arm/translate.c +4 -4
@@ -199,7 +199,7 @@ static void store_reg(DisasContext *s, int reg, TCGv var)static inline void gen_set_cpsr (TCGv var,uint32_t mask) {TCGv tmp_mask =tcg_const_i32 (mask); -gen_helper_cpsr_write (var, tmp_mask); +gen_helper_cpsr_write (cpu_env, var, tmp_mask);tcg_temp_free_i32 (tmp_mask); }/* Set NZCV flags from the high 4 bits of var. */
@@ -209,7 +209,7 @@ static void gen_exception(int excp) {TCGv tmp =tcg_temp_new_i32 ();tcg_gen_movi_i32 (tmp, excp); -gen_helper_exception (tmp); +gen_helper_exception (cpu_env, tmp);tcg_temp_free_i32 (tmp); }
@@ -7719,7 +7719,7 @@ static void disas_arm_insn(CPUARMState * env, DisasContext *s) tmp =gen_ld32 (addr,IS_USER (s));if (user) { tmp2 =tcg_const_i32 (i); -gen_helper_set_user_reg (tmp2, tmp); +gen_helper_set_user_reg (cpu_env, tmp2, tmp);tcg_temp_free_i32 (tmp2);tcg_temp_free_i32 (tmp); }else if (i == rn) {
@@ -9913,7 +9913,7 @@ static inline void gen_intermediate_code_internal(CPUARMState *env,/* nothing more to generate */ break ;case DISAS_WFI : -gen_helper_wfi (); +gen_helper_wfi (cpu_env);break ;case DISAS_SWI :gen_exception (EXCP_SWI );
Signature · 1 line
1.7.2.5
PATCH v2 7/14 target-arm: convert remaining helpers
In reply to Blue SwirlConvert remaining helpers to AREG0 free mode: add an explicit CPUState parameter instead of relying on AREG0.
--- target-arm/helper.h | 52 +++++++++--------- target-arm/op_helper.c | 64 +++++++++++----------- target-arm/translate.c | 134 ++++++++++++++++++++++++------------------------ 3 files changed, 125 insertions(+), 125 deletions(-)
target-arm/helper.h +26 -26
@@ -4,12 +4,12 @@ DEF_HELPER_1(clz, i32, i32) DEF_HELPER_1(sxtb16, i32, i32) DEF_HELPER_1(uxtb16, i32, i32) -DEF_HELPER_2(add_setq, i32, i32, i32) -DEF_HELPER_2(add_saturate, i32, i32, i32) -DEF_HELPER_2(sub_saturate, i32, i32, i32) -DEF_HELPER_2(add_usaturate, i32, i32, i32) -DEF_HELPER_2(sub_usaturate, i32, i32, i32) -DEF_HELPER_1(double_saturate, i32, s32) +DEF_HELPER_3(add_setq, i32, env, i32, i32) +DEF_HELPER_3(add_saturate, i32, env, i32, i32) +DEF_HELPER_3(sub_saturate, i32, env, i32, i32) +DEF_HELPER_3(add_usaturate, i32, env, i32, i32) +DEF_HELPER_3(sub_usaturate, i32, env, i32, i32) +DEF_HELPER_2(double_saturate, i32, env, s32) DEF_HELPER_2(sdiv, s32, s32, s32) DEF_HELPER_2(udiv, i32, i32, i32)DEF_HELPER_1 (rbit, i32, i32)
@@ -40,10 +40,10 @@ PAS_OP(uq) PAS_OP(uh) #undef PAS_OP -DEF_HELPER_2(ssat, i32, i32, i32) -DEF_HELPER_2(usat, i32, i32, i32) -DEF_HELPER_2(ssat16, i32, i32, i32) -DEF_HELPER_2(usat16, i32, i32, i32) +DEF_HELPER_3(ssat, i32, env, i32, i32) +DEF_HELPER_3(usat, i32, env, i32, i32) +DEF_HELPER_3(ssat16, i32, env, i32, i32) +DEF_HELPER_3(usat16, i32, env, i32, i32)DEF_HELPER_2 (usad8, i32, i32, i32)
@@ -54,7 +54,7 @@ DEF_HELPER_2(exception, void, env, i32) DEF_HELPER_1(wfi, void, env) DEF_HELPER_3(cpsr_write, void, env, i32, i32) -DEF_HELPER_0(cpsr_read, i32) +DEF_HELPER_1(cpsr_read, i32, env) DEF_HELPER_3(v7m_msr, void, env, i32, i32)DEF_HELPER_2 (v7m_mrs, i32, env, i32)
@@ -67,7 +67,7 @@ DEF_HELPER_2(get_cp_reg64, i64, env, ptr) DEF_HELPER_2(get_r13_banked, i32, env, i32) DEF_HELPER_3(set_r13_banked, void, env, i32, i32) -DEF_HELPER_1(get_user_reg, i32, i32) +DEF_HELPER_2(get_user_reg, i32, env, i32) DEF_HELPER_3(set_user_reg, void, env, i32, i32)DEF_HELPER_1 (vfp_get_fpscr, i32, env)
@@ -140,20 +140,20 @@ DEF_HELPER_2(recpe_f32, f32, f32, env) DEF_HELPER_2(rsqrte_f32, f32, f32, env) DEF_HELPER_2(recpe_u32, i32, i32, env) DEF_HELPER_2(rsqrte_u32, i32, i32, env) -DEF_HELPER_4(neon_tbl, i32, i32, i32, i32, i32) - -DEF_HELPER_2(add_cc, i32, i32, i32) -DEF_HELPER_2(adc_cc, i32, i32, i32) -DEF_HELPER_2(sub_cc, i32, i32, i32) -DEF_HELPER_2(sbc_cc, i32, i32, i32) - -DEF_HELPER_2(shl, i32, i32, i32) -DEF_HELPER_2(shr, i32, i32, i32) -DEF_HELPER_2(sar, i32, i32, i32) -DEF_HELPER_2(shl_cc, i32, i32, i32) -DEF_HELPER_2(shr_cc, i32, i32, i32) -DEF_HELPER_2(sar_cc, i32, i32, i32) -DEF_HELPER_2 (ror_cc, i32, i32, i32) +DEF_HELPER_5(neon_tbl, i32, env, i32, i32, i32, i32) + +DEF_HELPER_3(add_cc, i32, env, i32, i32) +DEF_HELPER_3(adc_cc, i32, env, i32, i32) +DEF_HELPER_3(sub_cc, i32, env, i32, i32) +DEF_HELPER_3(sbc_cc, i32, env, i32, i32) + +DEF_HELPER_3(shl, i32, env, i32, i32) +DEF_HELPER_3(shr, i32, env, i32, i32) +DEF_HELPER_3(sar, i32, env, i32, i32) +DEF_HELPER_3(shl_cc, i32, env, i32, i32) +DEF_HELPER_3(shr_cc, i32, env, i32, i32) +DEF_HELPER_3(sar_cc, i32, env, i32, i32) +DEF_HELPER_3 (ror_cc, i32, env, i32, i32) /* neon_helper.c */DEF_HELPER_3 (neon_qadd_u8, i32, env, i32, i32)
target-arm/op_helper.c +32 -32
220 lines not on this page · raw message
target-arm/translate.c +67 -67
424 lines not on this page · raw message
Signature · 1 line
1.7.2.5
PATCH v2 8/14 target-arm: final conversion to AREG0 free mode
In reply to Blue SwirlConvert code load functions and switch to AREG0 free mode.
--- configure | 2 +- target-arm/Makefile.objs | 2 -- target-arm/cpu.h | 10 ++++++---- target-arm/helper.c | 9 +++++---- target-arm/op_helper.c | 8 +------- target-arm/translate.c | 6 +++--- 6 files changed, 16 insertions(+), 21 deletions(-)
configure +1 -1
@@ -3829,7 +3829,7 @@ symlink "$source_path/Makefile.target" "$target_dir/Makefile" case "$target_arch2" in - alpha | i386 | lm32 | m68k | or32 | s390x | sparc* | unicore32 | x86_64 | xtensa* | ppc*) + alpha | arm* | i386 | lm32 | m68k | or32 | s390x | sparc* | unicore32 | x86_64 | xtensa* | ppc*) echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak ;; esac
target-arm/Makefile.objs +0 -2
@@ -2,5 +2,3 @@ obj-y += arm-semi.o obj-$(CONFIG_SOFTMMU) += machine.o obj-y += translate.o op_helper.o helper.o cpu.o obj-y += neon_helper.o iwmmxt_helper.o - -$(obj)/op_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-arm/cpu.h +6 -4
@@ -734,9 +734,10 @@ static inline void cpu_pc_from_tb(CPUARMState *env, TranslationBlock *tb) }/* Load an instruction and return it in the standard little-endian order */ -static inline uint32_t arm_ldl_code (uint32_t addr,bool do_swap) +static inline uint32_t arm_ldl_code (CPUARMState *env,uint32_t addr, +bool do_swap) { -uint32_t insn =ldl_code (addr); +uint32_t insn =cpu_ldl_code (env, addr);if (do_swap) {return bswap32 (insn); }
@@ -744,9 +745,10 @@ static inline uint32_t arm_ldl_code(uint32_t addr, bool do_swap) }/* Ditto, for a halfword (Thumb) instruction */ -static inline uint16_t arm_lduw_code (uint32_t addr,bool do_swap) +static inline uint16_t arm_lduw_code (CPUARMState *env,uint32_t addr, +bool do_swap) { -uint16_t insn =lduw_code (addr); +uint16_t insn =cpu_lduw_code (env, addr);if (do_swap) {return bswap16 (insn); }
target-arm/helper.c +5 -4
@@ -1756,7 +1756,7 @@ static void do_interrupt_v7m(CPUARMState *env)case EXCP_BKPT :if (semihosting_enabled) {int nr; - nr =arm_lduw_code (env->regs[15 ], env->bswap_code) &0xff ; + nr =arm_lduw_code (env, env->regs[15 ], env->bswap_code) &0xff ;if (nr ==0xab ) { env->regs[15 ] +=2 ; env->regs[0 ] =do_arm_semihosting (env);
@@ -1828,9 +1828,10 @@ void do_interrupt(CPUARMState *env)if (semihosting_enabled) {/* Check for semihosting interrupt. */ if (env->thumb) { - mask =arm_lduw_code (env->regs[15 ] -2 , env->bswap_code) &0xff ; + mask =arm_lduw_code (env, env->regs[15 ] -2 , env->bswap_code) + &0xff ; }else { - mask =arm_ldl_code (env->regs[15 ] -4 , env->bswap_code) + mask =arm_ldl_code (env, env->regs[15 ] -4 , env->bswap_code) &0xffffff ; }/* Only intercept calls from privileged modes, to provide some
@@ -1851,7 +1852,7 @@ void do_interrupt(CPUARMState *env)case EXCP_BKPT :/* See if this is a semihosting syscall. */ if (env->thumb && semihosting_enabled) { - mask =arm_lduw_code (env->regs[15 ], env->bswap_code) &0xff ; + mask =arm_lduw_code (env, env->regs[15 ], env->bswap_code) &0xff ;if (mask ==0xab && (env->uncached_cpsr &CPSR_M ) !=ARM_CPU_MODE_USR ) { env->regs[15 ] +=2 ;
target-arm/op_helper.c +1 -7
@@ -17,7 +17,6 @@* License along with this library; if not, see <http://www.gnu.org/licenses/>. */ #include "cpu.h" -#include "dyngen-exec.h" #include "helper.h" #define SIGNBIT (uint32_t)0x80000000
@@ -72,16 +71,12 @@ uint32_t HELPER(neon_tbl)(CPUARMState *env, uint32_t ireg, uint32_t def,/* 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 (CPUARMState *env1,target_ulong addr,int is_write,int mmu_idx, +void tlb_fill (CPUARMState *env,target_ulong addr,int is_write,int mmu_idx,uintptr_t retaddr) {TranslationBlock *tb; -CPUARMState *saved_env;int ret; - saved_env = env; - env = env1; ret =cpu_arm_handle_mmu_fault (env, addr, is_write, mmu_idx);if (unlikely (ret)) {if (retaddr) {
@@ -95,7 +90,6 @@ void tlb_fill(CPUARMState *env1, target_ulong addr, int is_write, int mmu_idx, }raise_exception (env, env->exception_index); } - env = saved_env; }#endif
target-arm/translate.c +3 -3
@@ -6534,7 +6534,7 @@ static void disas_arm_insn(CPUARMState * env, DisasContext *s)TCGv addr;TCGv_i64 tmp64; - insn =arm_ldl_code (s->pc, s->bswap_code); + insn =arm_ldl_code (env, s->pc, s->bswap_code); s->pc +=4 ;/* M variants do not implement ARM mode. */
@@ -7962,7 +7962,7 @@ static int disas_thumb2_insn(CPUARMState *env, DisasContext *s, uint16_t insn_hw/* Fall through to 32-bit decode. */ } - insn =arm_lduw_code (s->pc, s->bswap_code); + insn =arm_lduw_code (env, s->pc, s->bswap_code); s->pc +=2 ; insn |= (uint32_t )insn_hw1 <<16 ;
@@ -8992,7 +8992,7 @@ static void disas_thumb_insn(CPUARMState *env, DisasContext *s) } } - insn =arm_lduw_code (s->pc, s->bswap_code); + insn =arm_lduw_code (env, s->pc, s->bswap_code); s->pc +=2 ;switch (insn >>12 ) {
Signature · 1 line
1.7.2.5
PATCH v2 9/14 target-microblaze: switch to AREG0 free mode
In reply to Blue SwirlAdd an explicit CPUState parameter instead of relying on AREG0 and switch to AREG0 free mode.
--- configure | 2 +- target-microblaze/Makefile.objs | 2 - target-microblaze/helper.h | 48 ++++++++-------- target-microblaze/op_helper.c | 115 ++++++++++++++++++--------------------- target-microblaze/translate.c | 61 +++++++++++---------- 5 files changed, 110 insertions(+), 118 deletions(-)
configure +1 -1
@@ -3829,7 +3829,7 @@ symlink "$source_path/Makefile.target" "$target_dir/Makefile" case "$target_arch2" in - alpha | arm* | i386 | lm32 | m68k | or32 | s390x | sparc* | unicore32 | x86_64 | xtensa* | ppc*) + alpha | arm* | i386 | lm32 | m68k | microblaze* | or32 | s390x | sparc* | unicore32 | x86_64 | xtensa* | ppc*) echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak ;; esac
target-microblaze/Makefile.objs +0 -2
@@ -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)
target-microblaze/helper.h +24 -24
63 lines not on this page · raw message
target-microblaze/op_helper.c +52 -63
373 lines not on this page · raw message
target-microblaze/translate.c +33 -28
185 lines not on this page · raw message
Signature · 1 line
1.7.2.5
PATCH v2 10/14 target-cris: Avoid AREG0 for helpers
In reply to Blue SwirlFrom: Aurelien Jarno <[email protected]>
Add an explicit CPUCRISState parameter instead of relying on AREG0.
--- target-cris/helper.h | 37 +++++++++++--------- target-cris/op_helper.c | 80 +++++++++++++++++++++++-------------------- target-cris/translate.c | 44 ++++++++++++----------- target-cris/translate_v10.c | 4 +- 4 files changed, 88 insertions(+), 77 deletions(-)
target-cris/helper.h +20 -17
@@ -1,26 +1,29 @@#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"
target-cris/op_helper.c +43 -37
258 lines not on this page · raw message
target-cris/translate.c +23 -21
134 lines not on this page · raw message
target-cris/translate_v10.c +2 -2
@@ -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 :
Signature · 1 line
1.7.2.5
PATCH v2 11/14 target-cris: Switch to AREG0 free mode
In reply to Blue SwirlFrom: Aurelien Jarno <[email protected]>
Add an explicit CPUCRISState parameter instead of relying on AREG0, and use cpu_ld* in translation and interrupt handling. Remove AREG0 swapping in tlb_fill(). Switch to AREG0 free mode
--- configure | 2 +- target-cris/Makefile.objs | 2 - target-cris/helper.c | 4 +- target-cris/op_helper.c | 9 +-- target-cris/translate.c | 256 +++++++++++++++++++++--------------------- target-cris/translate_v10.c | 95 ++++++++-------- 6 files changed, 181 insertions(+), 187 deletions(-)
configure +1 -1
@@ -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
target-cris/Makefile.objs +0 -2
@@ -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)
target-cris/helper.c +2 -2
@@ -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. */
target-cris/op_helper.c +1 -8
@@ -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);
@@ -84,7 +78,6 @@ void tlb_fill(CPUCRISState *env1, target_ulong addr, int is_write, int mmu_idx, }cpu_loop_exit (env); } - env = saved_env; }#endif
target-cris/translate.c +128 -128
980 lines not on this page · raw message
target-cris/translate_v10.c +49 -46
304 lines not on this page · raw message
Signature · 1 line
1.7.2.5
PATCH v2 12/14 target-sh4: switch to AREG0 free mode
In reply to Blue SwirlAdd an explicit CPUState parameter instead of relying on AREG0 and switch to AREG0 free mode.
--- configure | 2 +- target-sh4/Makefile.objs | 2 - target-sh4/helper.h | 84 +++++++++++----------- target-sh4/op_helper.c | 182 ++++++++++++++++++++++----------------------- target-sh4/translate.c | 114 ++++++++++++++++------------- 5 files changed, 195 insertions(+), 189 deletions(-)
configure +1 -1
@@ -3829,7 +3829,7 @@ symlink "$source_path/Makefile.target" "$target_dir/Makefile" case "$target_arch2" in - alpha | arm* | cris | i386 | lm32 | m68k | microblaze* | or32 | s390x | sparc* | unicore32 | x86_64 | xtensa* | ppc*) + alpha | arm* | cris | i386 | lm32 | m68k | microblaze* | or32 | s390x | sh4* | sparc* | unicore32 | x86_64 | xtensa* | ppc*) echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak ;; esac
target-sh4/Makefile.objs +0 -2
@@ -1,4 +1,2 @@ obj-y += translate.o op_helper.o helper.o cpu.o obj-$(CONFIG_SOFTMMU) += machine.o - -$(obj)/op_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-sh4/helper.h +42 -42
96 lines not on this page · raw message
target-sh4/op_helper.c +89 -93
511 lines not on this page · raw message
target-sh4/translate.c +63 -51
343 lines not on this page · raw message
Signature · 1 line
1.7.2.5
Re: [Qemu-devel] [PATCH v2 12/14] target-sh4: switch to AREG0 free mode
Quoted 1,042 lines · Blue Swirl
Add an explicit CPUState parameter instead of relying on AREG0 and switch to AREG0 free mode.
Signed-off-by Blue Swirl <[email protected]>--- configure | 2 +- target-sh4/Makefile.objs | 2 - target-sh4/helper.h | 84 +++++++++++----------- target-sh4/op_helper.c | 182 ++++++++++++++++++++++----------------------- target-sh4/translate.c | 114 ++++++++++++++++------------- 5 files changed, 195 insertions(+), 189 deletions(-)configure +1
-1@@ -3829,7 +3829,7 @@ symlink "$source_path/Makefile.target" "$target_dir/Makefile" case "$target_arch2" in - alpha | arm* | cris | i386 | lm32 | m68k | microblaze* | or32 | s390x | sparc* | unicore32 | x86_64 | xtensa* | ppc*) + alpha | arm* | cris | i386 | lm32 | m68k | microblaze* | or32 | s390x | sh4* | sparc* | unicore32 | x86_64 | xtensa* | ppc*) echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak ;; esactarget-sh4/Makefile.objs +0
-2@@ -1,4 +1,2 @@ obj-y += translate.o op_helper.o helper.o cpu.o obj-$(CONFIG_SOFTMMU) += machine.o - -$(obj)/op_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)target-sh4/helper.h +42
-42@@ -1,54 +1,54 @@#include "def-helper.h" -DEF_HELPER_0(ldtlb, void) -DEF_HELPER_0(raise_illegal_instruction, void) -DEF_HELPER_0(raise_slot_illegal_instruction, void) -DEF_HELPER_0(raise_fpu_disable, void) -DEF_HELPER_0(raise_slot_fpu_disable, void) -DEF_HELPER_0(debug, void) -DEF_HELPER_1(sleep, void, i32) -DEF_HELPER_1(trapa, void, i32) +DEF_HELPER_1(ldtlb, void, env) +DEF_HELPER_1(raise_illegal_instruction, void, env) +DEF_HELPER_1(raise_slot_illegal_instruction, void, env) +DEF_HELPER_1(raise_fpu_disable, void, env) +DEF_HELPER_1(raise_slot_fpu_disable, void, env) +DEF_HELPER_1(debug, void, env) +DEF_HELPER_2(sleep, void, env, i32) +DEF_HELPER_2(trapa, void, env, i32) -DEF_HELPER_2(movcal, void, i32, i32) -DEF_HELPER_0(discard_movcal_backup, void) -DEF_HELPER_1(ocbi, void, i32) +DEF_HELPER_3(movcal, void, env, i32, i32) +DEF_HELPER_1(discard_movcal_backup, void, env) +DEF_HELPER_2(ocbi, void, env, i32) -DEF_HELPER_2(addv, i32, i32, i32) -DEF_HELPER_2(addc, i32, i32, i32) -DEF_HELPER_2(subv, i32, i32, i32) -DEF_HELPER_2(subc, i32, i32, i32) -DEF_HELPER_2(div1, i32, i32, i32) -DEF_HELPER_2(macl, void, i32, i32) -DEF_HELPER_2(macw, void, i32, i32) +DEF_HELPER_3(addv, i32, env, i32, i32) +DEF_HELPER_3(addc, i32, env, i32, i32) +DEF_HELPER_3(subv, i32, env, i32, i32) +DEF_HELPER_3(subc, i32, env, i32, i32) +DEF_HELPER_3(div1, i32, env, i32, i32) +DEF_HELPER_3(macl, void, env, i32, i32) +DEF_HELPER_3(macw, void, env, i32, i32) -DEF_HELPER_1(ld_fpscr, void, i32) +DEF_HELPER_2(ld_fpscr, void, env, i32) DEF_HELPER_1(fabs_FT, f32, f32) DEF_HELPER_1(fabs_DT, f64, f64) -DEF_HELPER_2(fadd_FT, f32, f32, f32) -DEF_HELPER_2(fadd_DT, f64, f64, f64) -DEF_HELPER_1(fcnvsd_FT_DT, f64, f32) -DEF_HELPER_1(fcnvds_DT_FT, f32, f64) +DEF_HELPER_3(fadd_FT, f32, env, f32, f32) +DEF_HELPER_3(fadd_DT, f64, env, f64, f64) +DEF_HELPER_2(fcnvsd_FT_DT, f64, env, f32) +DEF_HELPER_2(fcnvds_DT_FT, f32, env, f64) -DEF_HELPER_2(fcmp_eq_FT, void, f32, f32) -DEF_HELPER_2(fcmp_eq_DT, void, f64, f64) -DEF_HELPER_2(fcmp_gt_FT, void, f32, f32) -DEF_HELPER_2(fcmp_gt_DT, void, f64, f64) -DEF_HELPER_2(fdiv_FT, f32, f32, f32) -DEF_HELPER_2(fdiv_DT, f64, f64, f64) -DEF_HELPER_1(float_FT, f32, i32) -DEF_HELPER_1(float_DT, f64, i32) -DEF_HELPER_3(fmac_FT, f32, f32, f32, f32) -DEF_HELPER_2(fmul_FT, f32, f32, f32) -DEF_HELPER_2(fmul_DT, f64, f64, f64) +DEF_HELPER_3(fcmp_eq_FT, void, env, f32, f32) +DEF_HELPER_3(fcmp_eq_DT, void, env, f64, f64) +DEF_HELPER_3(fcmp_gt_FT, void, env, f32, f32) +DEF_HELPER_3(fcmp_gt_DT, void, env, f64, f64) +DEF_HELPER_3(fdiv_FT, f32, env, f32, f32) +DEF_HELPER_3(fdiv_DT, f64, env, f64, f64) +DEF_HELPER_2(float_FT, f32, env, i32) +DEF_HELPER_2(float_DT, f64, env, i32) +DEF_HELPER_4(fmac_FT, f32, env, f32, f32, f32) +DEF_HELPER_3(fmul_FT, f32, env, f32, f32) +DEF_HELPER_3(fmul_DT, f64, env, f64, f64) DEF_HELPER_1(fneg_T, f32, f32) -DEF_HELPER_2(fsub_FT, f32, f32, f32) -DEF_HELPER_2(fsub_DT, f64, f64, f64) -DEF_HELPER_1(fsqrt_FT, f32, f32) -DEF_HELPER_1(fsqrt_DT, f64, f64) -DEF_HELPER_1(ftrc_FT, i32, f32) -DEF_HELPER_1(ftrc_DT, i32, f64) -DEF_HELPER_2(fipr, void, i32, i32) -DEF_HELPER_1(ftrv, void, i32) +DEF_HELPER_3(fsub_FT, f32, env, f32, f32) +DEF_HELPER_3(fsub_DT, f64, env, f64, f64) +DEF_HELPER_2(fsqrt_FT, f32, env, f32) +DEF_HELPER_2(fsqrt_DT, f64, env, f64) +DEF_HELPER_2(ftrc_FT, i32, env, f32) +DEF_HELPER_2(ftrc_DT, i32, env, f64) +DEF_HELPER_3(fipr, void, env, i32, i32) +DEF_HELPER_2(ftrv, void, env, i32)#include "def-helper.h" target-sh4/op_helper.c +89
-93@@ -19,10 +19,9 @@#include <assert.h> #include <stdlib.h> #include "cpu.h" -#include "dyngen-exec.h" #include "helper.h" -static void cpu_restore_state_from_retaddr (uintptr_t retaddr) +static void cpu_restore_state_from_retaddr (CPUSH4State *env,uintptr_t retaddr) {TranslationBlock *tb;@@ -53,26 +52,22 @@ static void cpu_restore_state_from_retaddr(uintptr_t retaddr)#define SHIFT 3#include "softmmu_template.h" -void tlb_fill (CPUSH4State *env1,target_ulong addr,int is_write,int mmu_idx, +void tlb_fill (CPUSH4State *env,target_ulong addr,int is_write,int mmu_idx,uintptr_t retaddr) { -CPUSH4State *saved_env;int ret; - saved_env = env; - env = env1; ret =cpu_sh4_handle_mmu_fault (env, addr, is_write, mmu_idx);if (ret) {/* now we have a real cpu fault */ -cpu_restore_state_from_retaddr (retaddr); +cpu_restore_state_from_retaddr (env, retaddr);cpu_loop_exit (env); } - env = saved_env; }#endif -void helper_ldtlb (void ) +void helper_ldtlb (CPUSH4State *env) {#ifdef CONFIG_USER_ONLY /* XXXXX */ @@ -82,40 +77,41 @@ void helper_ldtlb(void)#endif } -static inline void raise_exception (int index,uintptr_t retaddr) +static inline void raise_exception (CPUSH4State *env,int index, +uintptr_t retaddr) { env->exception_index = index; -cpu_restore_state_from_retaddr (retaddr); +cpu_restore_state_from_retaddr (env, retaddr);cpu_loop_exit (env); } -void helper_raise_illegal_instruction (void ) +void helper_raise_illegal_instruction (CPUSH4State *env) { -raise_exception (0x180 ,GETPC ()); +raise_exception (env,0x180 ,GETPC ()); } -void helper_raise_slot_illegal_instruction (void ) +void helper_raise_slot_illegal_instruction (CPUSH4State *env) { -raise_exception (0x1a0 ,GETPC ()); +raise_exception (env,0x1a0 ,GETPC ()); } -void helper_raise_fpu_disable (void ) +void helper_raise_fpu_disable (CPUSH4State *env) { -raise_exception (0x800 ,GETPC ()); +raise_exception (env,0x800 ,GETPC ()); } -void helper_raise_slot_fpu_disable (void ) +void helper_raise_slot_fpu_disable (CPUSH4State *env) { -raise_exception (0x820 ,GETPC ()); +raise_exception (env,0x820 ,GETPC ()); } -void helper_debug (void ) +void helper_debug (CPUSH4State *env) { env->exception_index =EXCP_DEBUG ;cpu_loop_exit (env); } -void helper_sleep (uint32_t next_pc) +void helper_sleep (CPUSH4State *env,uint32_t next_pc) { env->halted =1 ; env->in_sleep =1 ;@@ -124,13 +120,13 @@ void helper_sleep(uint32_t next_pc)cpu_loop_exit (env); } -void helper_trapa (uint32_t tra) +void helper_trapa (CPUSH4State *env,uint32_t tra) { env->tra = tra <<2 ; -raise_exception (0x160 ,GETPC ()); +raise_exception (env,0x160 ,GETPC ()); } -void helper_movcal (uint32_t address,uint32_t value) +void helper_movcal (CPUSH4State *env,uint32_t address,uint32_t value) {if (cpu_sh4_is_cached (env, address)) {@@ -144,7 +140,7 @@ void helper_movcal(uint32_t address, uint32_t value) } } -void helper_discard_movcal_backup (void ) +void helper_discard_movcal_backup (CPUSH4State *env) {memory_content *current = env->movcal_backup;@@ -158,7 +154,7 @@ void helper_discard_movcal_backup(void) } } -void helper_ocbi (uint32_t address) +void helper_ocbi (CPUSH4State *env,uint32_t address) {memory_content **current = &(env->movcal_backup);while (*current)@@ -167,7 +163,7 @@ void helper_ocbi(uint32_t address)if ((a & ~0x1F ) == (address & ~0x1F )) {memory_content *next = (*current)->next; -stl (a, (*current)->value); +cpu_stl_data (env, a, (*current)->value);if (next ==NULL ) {@@ -181,7 +177,7 @@ void helper_ocbi(uint32_t address) } } -uint32_t helper_addc (uint32_t arg0,uint32_t arg1) +uint32_t helper_addc (CPUSH4State *env,uint32_t arg0,uint32_t arg1) {uint32_t tmp0, tmp1;@@ -197,7 +193,7 @@ uint32_t helper_addc(uint32_t arg0, uint32_t arg1)return arg1; } -uint32_t helper_addv (uint32_t arg0,uint32_t arg1) +uint32_t helper_addv (CPUSH4State *env,uint32_t arg0,uint32_t arg1) {uint32_t dest, src, ans;@@ -236,7 +232,7 @@ uint32_t helper_addv(uint32_t arg0, uint32_t arg1)#define SETM env->sr |= SR_M#define CLRM env->sr &= ~SR_M -uint32_t helper_div1 (uint32_t arg0,uint32_t arg1) +uint32_t helper_div1 (CPUSH4State *env,uint32_t arg0,uint32_t arg1) {uint32_t tmp0, tmp2;uint8_t old_q, tmp1 =0xff ;@@ -344,7 +340,7 @@ uint32_t helper_div1(uint32_t arg0, uint32_t arg1)return arg1; } -void helper_macl (uint32_t arg0,uint32_t arg1) +void helper_macl (CPUSH4State *env,uint32_t arg0,uint32_t arg1) {int64_t res;@@ -360,7 +356,7 @@ void helper_macl(uint32_t arg0, uint32_t arg1) } } -void helper_macw (uint32_t arg0,uint32_t arg1) +void helper_macw (CPUSH4State *env,uint32_t arg0,uint32_t arg1) {int64_t res;@@ -379,7 +375,7 @@ void helper_macw(uint32_t arg0, uint32_t arg1) } } -uint32_t helper_subc (uint32_t arg0,uint32_t arg1) +uint32_t helper_subc (CPUSH4State *env,uint32_t arg0,uint32_t arg1) {uint32_t tmp0, tmp1;@@ -395,7 +391,7 @@ uint32_t helper_subc(uint32_t arg0, uint32_t arg1)return arg1; } -uint32_t helper_subv (uint32_t arg0,uint32_t arg1) +uint32_t helper_subv (CPUSH4State *env,uint32_t arg0,uint32_t arg1) {int32_t dest, src, ans;@@ -424,17 +420,17 @@ uint32_t helper_subv(uint32_t arg0, uint32_t arg1)return arg1; } -static inline void set_t (void ) +static inline void set_t (CPUSH4State *env) { env->sr |=SR_T ; } -static inline void clr_t (void ) +static inline void clr_t (CPUSH4State *env) { env->sr &= ~SR_T ; } -void helper_ld_fpscr (uint32_t val) +void helper_ld_fpscr (CPUSH4State *env,uint32_t val) { env->fpscr = val &FPSCR_MASK ;if ((val &FPSCR_RM_MASK ) ==FPSCR_RM_ZERO ) {@@ -445,7 +441,7 @@ void helper_ld_fpscr(uint32_t val)set_flush_to_zero ((val &FPSCR_DN ) !=0 , &env->fp_status); } -static void update_fpscr (uintptr_t retaddr) +static void update_fpscr (CPUSH4State *env,uintptr_t retaddr) {int xcpt, cause, enable;@@ -479,7 +475,7 @@ static void update_fpscr(uintptr_t retaddr) cause = (env->fpscr &FPSCR_CAUSE_MASK ) >>FPSCR_CAUSE_SHIFT ; enable = (env->fpscr &FPSCR_ENABLE_MASK ) >>FPSCR_ENABLE_SHIFT ;if (cause & enable) { -cpu_restore_state_from_retaddr (retaddr); +cpu_restore_state_from_retaddr (env, retaddr); env->exception_index =0x120 ;cpu_loop_exit (env); }@@ -496,156 +492,156 @@ float64 helper_fabs_DT(float64 t0)return float64_abs (t0); } -float32 helper_fadd_FT (float32 t0,float32 t1) +float32 helper_fadd_FT (CPUSH4State *env,float32 t0,float32 t1) {set_float_exception_flags (0 , &env->fp_status); t0 =float32_add (t0, t1, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -float64 helper_fadd_DT (float64 t0,float64 t1) +float64 helper_fadd_DT (CPUSH4State *env,float64 t0,float64 t1) {set_float_exception_flags (0 , &env->fp_status); t0 =float64_add (t0, t1, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -void helper_fcmp_eq_FT (float32 t0,float32 t1) +void helper_fcmp_eq_FT (CPUSH4State *env,float32 t0,float32 t1) {int relation;set_float_exception_flags (0 , &env->fp_status); relation =float32_compare (t0, t1, &env->fp_status);if (unlikely (relation == float_relation_unordered)) { -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ()); }else if (relation == float_relation_equal) { -set_t (); +set_t (env); }else { -clr_t (); +clr_t (env); } } -void helper_fcmp_eq_DT (float64 t0,float64 t1) +void helper_fcmp_eq_DT (CPUSH4State *env,float64 t0,float64 t1) {int relation;set_float_exception_flags (0 , &env->fp_status); relation =float64_compare (t0, t1, &env->fp_status);if (unlikely (relation == float_relation_unordered)) { -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ()); }else if (relation == float_relation_equal) { -set_t (); +set_t (env); }else { -clr_t (); +clr_t (env); } } -void helper_fcmp_gt_FT (float32 t0,float32 t1) +void helper_fcmp_gt_FT (CPUSH4State *env,float32 t0,float32 t1) {int relation;set_float_exception_flags (0 , &env->fp_status); relation =float32_compare (t0, t1, &env->fp_status);if (unlikely (relation == float_relation_unordered)) { -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ()); }else if (relation == float_relation_greater) { -set_t (); +set_t (env); }else { -clr_t (); +clr_t (env); } } -void helper_fcmp_gt_DT (float64 t0,float64 t1) +void helper_fcmp_gt_DT (CPUSH4State *env,float64 t0,float64 t1) {int relation;set_float_exception_flags (0 , &env->fp_status); relation =float64_compare (t0, t1, &env->fp_status);if (unlikely (relation == float_relation_unordered)) { -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ()); }else if (relation == float_relation_greater) { -set_t (); +set_t (env); }else { -clr_t (); +clr_t (env); } } -float64 helper_fcnvsd_FT_DT (float32 t0) +float64 helper_fcnvsd_FT_DT (CPUSH4State *env,float32 t0) {float64 ret;set_float_exception_flags (0 , &env->fp_status); ret =float32_to_float64 (t0, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return ret; } -float32 helper_fcnvds_DT_FT (float64 t0) +float32 helper_fcnvds_DT_FT (CPUSH4State *env,float64 t0) {float32 ret;set_float_exception_flags (0 , &env->fp_status); ret =float64_to_float32 (t0, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return ret; } -float32 helper_fdiv_FT (float32 t0,float32 t1) +float32 helper_fdiv_FT (CPUSH4State *env,float32 t0,float32 t1) {set_float_exception_flags (0 , &env->fp_status); t0 =float32_div (t0, t1, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -float64 helper_fdiv_DT (float64 t0,float64 t1) +float64 helper_fdiv_DT (CPUSH4State *env,float64 t0,float64 t1) {set_float_exception_flags (0 , &env->fp_status); t0 =float64_div (t0, t1, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -float32 helper_float_FT (uint32_t t0) +float32 helper_float_FT (CPUSH4State *env,uint32_t t0) {float32 ret;set_float_exception_flags (0 , &env->fp_status); ret =int32_to_float32 (t0, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return ret; } -float64 helper_float_DT (uint32_t t0) +float64 helper_float_DT (CPUSH4State *env,uint32_t t0) {float64 ret;set_float_exception_flags (0 , &env->fp_status); ret =int32_to_float64 (t0, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return ret; } -float32 helper_fmac_FT (float32 t0,float32 t1,float32 t2) +float32 helper_fmac_FT (CPUSH4State *env,float32 t0,float32 t1,float32 t2) {set_float_exception_flags (0 , &env->fp_status); t0 =float32_mul (t0, t1, &env->fp_status); t0 =float32_add (t0, t2, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -float32 helper_fmul_FT (float32 t0,float32 t1) +float32 helper_fmul_FT (CPUSH4State *env,float32 t0,float32 t1) {set_float_exception_flags (0 , &env->fp_status); t0 =float32_mul (t0, t1, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -float64 helper_fmul_DT (float64 t0,float64 t1) +float64 helper_fmul_DT (CPUSH4State *env,float64 t0,float64 t1) {set_float_exception_flags (0 , &env->fp_status); t0 =float64_mul (t0, t1, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; }@@ -654,57 +650,57 @@ float32 helper_fneg_T(float32 t0)return float32_chs (t0); } -float32 helper_fsqrt_FT (float32 t0) +float32 helper_fsqrt_FT (CPUSH4State *env,float32 t0) {set_float_exception_flags (0 , &env->fp_status); t0 =float32_sqrt (t0, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -float64 helper_fsqrt_DT (float64 t0) +float64 helper_fsqrt_DT (CPUSH4State *env,float64 t0) {set_float_exception_flags (0 , &env->fp_status); t0 =float64_sqrt (t0, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -float32 helper_fsub_FT (float32 t0,float32 t1) +float32 helper_fsub_FT (CPUSH4State *env,float32 t0,float32 t1) {set_float_exception_flags (0 , &env->fp_status); t0 =float32_sub (t0, t1, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -float64 helper_fsub_DT (float64 t0,float64 t1) +float64 helper_fsub_DT (CPUSH4State *env,float64 t0,float64 t1) {set_float_exception_flags (0 , &env->fp_status); t0 =float64_sub (t0, t1, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return t0; } -uint32_t helper_ftrc_FT (float32 t0) +uint32_t helper_ftrc_FT (CPUSH4State *env,float32 t0) {uint32_t ret;set_float_exception_flags (0 , &env->fp_status); ret =float32_to_int32_round_to_zero (t0, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return ret; } -uint32_t helper_ftrc_DT (float64 t0) +uint32_t helper_ftrc_DT (CPUSH4State *env,float64 t0) {uint32_t ret;set_float_exception_flags (0 , &env->fp_status); ret =float64_to_int32_round_to_zero (t0, &env->fp_status); -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());return ret; } -void helper_fipr (uint32_t m,uint32_t n) +void helper_fipr (CPUSH4State *env,uint32_t m,uint32_t n) {int bank, i;float32 r, p;@@ -719,12 +715,12 @@ void helper_fipr(uint32_t m, uint32_t n) &env->fp_status); r =float32_add (r, p, &env->fp_status); } -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ()); env->fregs[bank + n +3 ] = r; } -void helper_ftrv (uint32_t n) +void helper_ftrv (CPUSH4State *env,uint32_t n) {int bank_matrix, bank_vector;int i, j;@@ -743,7 +739,7 @@ void helper_ftrv(uint32_t n) r[i] =float32_add (r[i], p, &env->fp_status); } } -update_fpscr (GETPC ()); +update_fpscr (env,GETPC ());for (i =0 ; i <4 ; i++) { env->fregs[bank_vector + i] = r[i];target-sh4/translate.c +62
-50@@ -276,7 +276,7 @@ static void gen_goto_tb(DisasContext * ctx, int n, target_ulong dest) }else {tcg_gen_movi_i32 (cpu_pc, dest);if (ctx->singlestep_enabled) -gen_helper_debug (); +gen_helper_debug (cpu_env);tcg_gen_exit_tb (0 ); } }@@ -288,7 +288,7 @@ static void gen_jump(DisasContext * ctx)delayed jump as immediate jump are conditinal jumps */ tcg_gen_mov_i32 (cpu_pc, cpu_delayed_pc);if (ctx->singlestep_enabled) -gen_helper_debug (); +gen_helper_debug (cpu_env);tcg_gen_exit_tb (0 ); }else {gen_goto_tb (ctx,0 , ctx->delayed_pc);@@ -437,7 +437,7 @@ static inline void gen_store_fpr64 (TCGv_i64 t, int reg)#define CHECK_NOT_DELAY_SLOT \ if (ctx->flags & (DELAY_SLOT | DELAY_SLOT_CONDITIONAL)) \ { \ - gen_helper_raise_slot_illegal_instruction(); \ + gen_helper_raise_slot_illegal_instruction(cpu_env); \ ctx->bstate = BS_EXCP; \ return; \ }@@ -445,9 +445,9 @@ static inline void gen_store_fpr64 (TCGv_i64 t, int reg)#define CHECK_PRIVILEGED \ if (IS_USER(ctx)) { \ if (ctx->flags & (DELAY_SLOT | DELAY_SLOT_CONDITIONAL)) { \ - gen_helper_raise_slot_illegal_instruction(); \ + gen_helper_raise_slot_illegal_instruction(cpu_env); \ } else { \ - gen_helper_raise_illegal_instruction(); \ + gen_helper_raise_illegal_instruction(cpu_env); \ } \ ctx->bstate = BS_EXCP; \ return; \@@ -456,9 +456,9 @@ static inline void gen_store_fpr64 (TCGv_i64 t, int reg)#define CHECK_FPU_ENABLED \ if (ctx->flags & SR_FD) { \ if (ctx->flags & (DELAY_SLOT | DELAY_SLOT_CONDITIONAL)) { \ - gen_helper_raise_slot_fpu_disable(); \ + gen_helper_raise_slot_fpu_disable(cpu_env); \ } else { \ - gen_helper_raise_fpu_disable(); \ + gen_helper_raise_fpu_disable(cpu_env); \ } \ ctx->bstate = BS_EXCP; \ return; \@@ -492,7 +492,7 @@ static void _decode_opc(DisasContext * ctx)if (opcode !=0x0093 /* ocbi */ && opcode !=0x00c3 /* movca.l */ ) { -gen_helper_discard_movcal_backup (); +gen_helper_discard_movcal_backup (cpu_env); ctx->has_movcal =0 ; } }@@ -523,7 +523,7 @@ static void _decode_opc(DisasContext * ctx)return ;case 0x0038 :/* ldtlb */ CHECK_PRIVILEGED -gen_helper_ldtlb (); +gen_helper_ldtlb (cpu_env );return ;case 0x002b :/* rte */ CHECK_PRIVILEGED @@ -551,7 +551,7 @@ static void _decode_opc(DisasContext * ctx)return ;case 0x001b :/* sleep */ CHECK_PRIVILEGED - gen_helper_sleep(tcg_const_i32(ctx->pc + 2)); + gen_helper_sleep(cpu_env, tcg_const_i32(ctx->pc + 2));return ; }@@ -761,10 +761,10 @@ static void _decode_opc(DisasContext * ctx)tcg_gen_add_i32 (REG (B11_8 ),REG (B11_8 ),REG (B7_4 ));return ;case 0x300e :/* addc Rm,Rn */ -gen_helper_addc (REG (B11_8 ),REG (B7_4 ),REG (B11_8 )); +gen_helper_addc (REG (B11_8 ), cpu_env,REG (B7_4 ),REG (B11_8 ));return ;case 0x300f :/* addv Rm,Rn */ -gen_helper_addv (REG (B11_8 ),REG (B7_4 ),REG (B11_8 )); +gen_helper_addv (REG (B11_8 ), cpu_env,REG (B7_4 ),REG (B11_8 ));return ;case 0x2009 :/* and Rm,Rn */ tcg_gen_and_i32 (REG (B11_8 ),REG (B11_8 ),REG (B7_4 ));@@ -817,7 +817,7 @@ static void _decode_opc(DisasContext * ctx) }return ;case 0x3004 :/* div1 Rm,Rn */ -gen_helper_div1 (REG (B11_8 ),REG (B7_4 ),REG (B11_8 )); +gen_helper_div1 (REG (B11_8 ), cpu_env,REG (B7_4 ),REG (B11_8 ));return ;case 0x300d :/* dmuls.l Rm,Rn */ {@@ -870,7 +870,7 @@ static void _decode_opc(DisasContext * ctx)tcg_gen_qemu_ld32s (arg0,REG (B7_4 ), ctx->memidx); arg1 =tcg_temp_new ();tcg_gen_qemu_ld32s (arg1,REG (B11_8 ), ctx->memidx); -gen_helper_macl (arg0, arg1); +gen_helper_macl (cpu_env, arg0, arg1);tcg_temp_free (arg1);tcg_temp_free (arg0);tcg_gen_addi_i32 (REG (B7_4 ),REG (B7_4 ),4 );@@ -884,7 +884,7 @@ static void _decode_opc(DisasContext * ctx)tcg_gen_qemu_ld32s (arg0,REG (B7_4 ), ctx->memidx); arg1 =tcg_temp_new ();tcg_gen_qemu_ld32s (arg1,REG (B11_8 ), ctx->memidx); -gen_helper_macw (arg0, arg1); +gen_helper_macw (cpu_env, arg0, arg1);tcg_temp_free (arg1);tcg_temp_free (arg0);tcg_gen_addi_i32 (REG (B11_8 ),REG (B11_8 ),2 );@@ -1013,10 +1013,10 @@ static void _decode_opc(DisasContext * ctx)tcg_gen_sub_i32 (REG (B11_8 ),REG (B11_8 ),REG (B7_4 ));return ;case 0x300a :/* subc Rm,Rn */ -gen_helper_subc (REG (B11_8 ),REG (B7_4 ),REG (B11_8 )); +gen_helper_subc (REG (B11_8 ), cpu_env,REG (B7_4 ),REG (B11_8 ));return ;case 0x300b :/* subv Rm,Rn */ -gen_helper_subv (REG (B11_8 ),REG (B7_4 ),REG (B11_8 )); +gen_helper_subv (REG (B11_8 ), cpu_env,REG (B7_4 ),REG (B11_8 ));return ;case 0x2008 :/* tst Rm,Rn */ {@@ -1152,22 +1152,22 @@ static void _decode_opc(DisasContext * ctx)gen_load_fpr64 (fp1,DREG (B7_4 ));switch (ctx->opcode &0xf00f ) {case 0xf000 :/* fadd Rm,Rn */ -gen_helper_fadd_DT (fp0, fp0, fp1); +gen_helper_fadd_DT (fp0, cpu_env, fp0, fp1);break ;case 0xf001 :/* fsub Rm,Rn */ -gen_helper_fsub_DT (fp0, fp0, fp1); +gen_helper_fsub_DT (fp0, cpu_env, fp0, fp1);break ;case 0xf002 :/* fmul Rm,Rn */ -gen_helper_fmul_DT (fp0, fp0, fp1); +gen_helper_fmul_DT (fp0, cpu_env, fp0, fp1);break ;case 0xf003 :/* fdiv Rm,Rn */ -gen_helper_fdiv_DT (fp0, fp0, fp1); +gen_helper_fdiv_DT (fp0, cpu_env, fp0, fp1);break ;case 0xf004 :/* fcmp/eq Rm,Rn */ -gen_helper_fcmp_eq_DT (fp0, fp1); +gen_helper_fcmp_eq_DT (cpu_env, fp0, fp1);return ;case 0xf005 :/* fcmp/gt Rm,Rn */ -gen_helper_fcmp_gt_DT (fp0, fp1); +gen_helper_fcmp_gt_DT (cpu_env, fp0, fp1);return ; }gen_store_fpr64 (fp0,DREG (B11_8 ));@@ -1176,22 +1176,32 @@ static void _decode_opc(DisasContext * ctx) }else {switch (ctx->opcode &0xf00f ) {case 0xf000 :/* fadd Rm,Rn */ -gen_helper_fadd_FT (cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B7_4 )]); +gen_helper_fadd_FT (cpu_fregs[FREG (B11_8 )], cpu_env, + cpu_fregs[FREG (B11_8 )], + cpu_fregs[FREG (B7_4 )]);break ;case 0xf001 :/* fsub Rm,Rn */ -gen_helper_fsub_FT (cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B7_4 )]); +gen_helper_fsub_FT (cpu_fregs[FREG (B11_8 )], cpu_env, + cpu_fregs[FREG (B11_8 )], + cpu_fregs[FREG (B7_4 )]);break ;case 0xf002 :/* fmul Rm,Rn */ -gen_helper_fmul_FT (cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B7_4 )]); +gen_helper_fmul_FT (cpu_fregs[FREG (B11_8 )], cpu_env, + cpu_fregs[FREG (B11_8 )], + cpu_fregs[FREG (B7_4 )]);break ;case 0xf003 :/* fdiv Rm,Rn */ -gen_helper_fdiv_FT (cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B7_4 )]); +gen_helper_fdiv_FT (cpu_fregs[FREG (B11_8 )], cpu_env, + cpu_fregs[FREG (B11_8 )], + cpu_fregs[FREG (B7_4 )]);break ;case 0xf004 :/* fcmp/eq Rm,Rn */ -gen_helper_fcmp_eq_FT (cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B7_4 )]); +gen_helper_fcmp_eq_FT (cpu_env, cpu_fregs[FREG (B11_8 )], + cpu_fregs[FREG (B7_4 )]);return ;case 0xf005 :/* fcmp/gt Rm,Rn */ -gen_helper_fcmp_gt_FT (cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B7_4 )]); +gen_helper_fcmp_gt_FT (cpu_env, cpu_fregs[FREG (B11_8 )], + cpu_fregs[FREG (B7_4 )]);return ; } }@@ -1203,8 +1213,9 @@ static void _decode_opc(DisasContext * ctx)if (ctx->fpscr &FPSCR_PR ) {break ;/* illegal instruction */ }else { -gen_helper_fmac_FT (cpu_fregs[FREG (B11_8 )], - cpu_fregs[FREG (0 )], cpu_fregs[FREG (B7_4 )], cpu_fregs[FREG (B11_8 )]); +gen_helper_fmac_FT (cpu_fregs[FREG (B11_8 )], cpu_env, + cpu_fregs[FREG (0 )], cpu_fregs[FREG (B7_4 )], + cpu_fregs[FREG (B11_8 )]);return ; } }@@ -1356,7 +1367,7 @@ static void _decode_opc(DisasContext * ctx)TCGv imm;CHECK_NOT_DELAY_SLOT imm =tcg_const_i32 (B7_0 ); -gen_helper_trapa (imm); +gen_helper_trapa (cpu_env, imm);tcg_temp_free (imm); ctx->bstate =BS_BRANCH ; }@@ -1531,7 +1542,7 @@ static void _decode_opc(DisasContext * ctx) LDST(fpul, 0x405a, 0x4056, 0x005a, 0x4052, {CHECK_FPU_ENABLED})case 0x406a :/* lds Rm,FPSCR */ CHECK_FPU_ENABLED -gen_helper_ld_fpscr (REG (B11_8 )); +gen_helper_ld_fpscr (cpu_env ,REG (B11_8 )); ctx->bstate =BS_STOP ;return ;case 0x4066 :/* lds.l @Rm+,FPSCR */ @@ -1540,7 +1551,7 @@ static void _decode_opc(DisasContext * ctx)TCGv addr =tcg_temp_new ();tcg_gen_qemu_ld32s (addr,REG (B11_8 ), ctx->memidx);tcg_gen_addi_i32 (REG (B11_8 ),REG (B11_8 ),4 ); -gen_helper_ld_fpscr (addr); +gen_helper_ld_fpscr (cpu_env, addr);tcg_temp_free (addr); ctx->bstate =BS_STOP ; }@@ -1567,7 +1578,7 @@ static void _decode_opc(DisasContext * ctx) {TCGv val =tcg_temp_new ();tcg_gen_qemu_ld32u (val,REG (B11_8 ), ctx->memidx); -gen_helper_movcal (REG (B11_8 ), val); +gen_helper_movcal (cpu_env,REG (B11_8 ), val);tcg_gen_qemu_st32 (REG (0 ),REG (B11_8 ), ctx->memidx); } ctx->has_movcal =1 ;@@ -1619,7 +1630,7 @@ static void _decode_opc(DisasContext * ctx)break ;case 0x0093 :/* ocbi @Rn */ { -gen_helper_ocbi (REG (B11_8 )); +gen_helper_ocbi (cpu_env,REG (B11_8 )); }return ;case 0x00a3 :/* ocbp @Rn */ @@ -1733,12 +1744,12 @@ static void _decode_opc(DisasContext * ctx)if (ctx->opcode &0x0100 )break ;/* illegal instruction */ fp =tcg_temp_new_i64 (); -gen_helper_float_DT (fp, cpu_fpul); +gen_helper_float_DT (fp, cpu_env, cpu_fpul);gen_store_fpr64 (fp,DREG (B11_8 ));tcg_temp_free_i64 (fp); }else { -gen_helper_float_FT (cpu_fregs[FREG (B11_8 )], cpu_fpul); +gen_helper_float_FT (cpu_fregs[FREG (B11_8 )], cpu_env, cpu_fpul); }return ;case 0xf03d :/* ftrc FRm/DRm,FPUL - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */ @@ -1749,11 +1760,11 @@ static void _decode_opc(DisasContext * ctx)break ;/* illegal instruction */ fp =tcg_temp_new_i64 ();gen_load_fpr64 (fp,DREG (B11_8 )); -gen_helper_ftrc_DT (cpu_fpul, fp); +gen_helper_ftrc_DT (cpu_fpul, cpu_env, fp);tcg_temp_free_i64 (fp); }else { -gen_helper_ftrc_FT (cpu_fpul, cpu_fregs[FREG (B11_8 )]); +gen_helper_ftrc_FT (cpu_fpul, cpu_env, cpu_fregs[FREG (B11_8 )]); }return ;case 0xf04d :/* fneg FRn/DRn - FPSCR: Nothing */ @@ -1783,11 +1794,12 @@ static void _decode_opc(DisasContext * ctx)break ;/* illegal instruction */ TCGv_i64 fp =tcg_temp_new_i64 ();gen_load_fpr64 (fp,DREG (B11_8 )); -gen_helper_fsqrt_DT (fp, fp); +gen_helper_fsqrt_DT (fp, cpu_env, fp);gen_store_fpr64 (fp,DREG (B11_8 ));tcg_temp_free_i64 (fp); }else { -gen_helper_fsqrt_FT (cpu_fregs[FREG (B11_8 )], cpu_fregs[FREG (B11_8 )]); +gen_helper_fsqrt_FT (cpu_fregs[FREG (B11_8 )], cpu_env, + cpu_fregs[FREG (B11_8 )]); }return ;case 0xf07d :/* fsrra FRn */ @@ -1809,7 +1821,7 @@ static void _decode_opc(DisasContext * ctx) CHECK_FPU_ENABLED {TCGv_i64 fp =tcg_temp_new_i64 (); -gen_helper_fcnvsd_FT_DT (fp, cpu_fpul); +gen_helper_fcnvsd_FT_DT (fp, cpu_env, cpu_fpul);gen_store_fpr64 (fp,DREG (B11_8 ));tcg_temp_free_i64 (fp); }@@ -1819,7 +1831,7 @@ static void _decode_opc(DisasContext * ctx) {TCGv_i64 fp =tcg_temp_new_i64 ();gen_load_fpr64 (fp,DREG (B11_8 )); -gen_helper_fcnvds_DT_FT (cpu_fpul, fp); +gen_helper_fcnvds_DT_FT (cpu_fpul, cpu_env, fp);tcg_temp_free_i64 (fp); }return ;@@ -1829,7 +1841,7 @@ static void _decode_opc(DisasContext * ctx)TCGv m, n; m =tcg_const_i32 ((ctx->opcode >>8 ) &3 ); n =tcg_const_i32 ((ctx->opcode >>10 ) &3 ); -gen_helper_fipr (m, n); +gen_helper_fipr (cpu_env, m, n);tcg_temp_free (m);tcg_temp_free (n);return ;@@ -1841,7 +1853,7 @@ static void _decode_opc(DisasContext * ctx) (ctx->fpscr & FPSCR_PR) == 0) {TCGv n; n =tcg_const_i32 ((ctx->opcode >>10 ) &3 ); -gen_helper_ftrv (n); +gen_helper_ftrv (cpu_env, n);tcg_temp_free (n);return ; }@@ -1853,9 +1865,9 @@ static void _decode_opc(DisasContext * ctx)fflush (stderr);#endif if (ctx->flags & (DELAY_SLOT |DELAY_SLOT_CONDITIONAL )) { -gen_helper_raise_slot_illegal_instruction (); +gen_helper_raise_slot_illegal_instruction (cpu_env); }else { -gen_helper_raise_illegal_instruction (); +gen_helper_raise_illegal_instruction (cpu_env); } ctx->bstate =BS_EXCP ; }@@ -1934,7 +1946,7 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb,if (ctx.pc == bp->pc) {/* We have hit a breakpoint - make sure PC is up-to-date */ tcg_gen_movi_i32 (cpu_pc, ctx.pc); -gen_helper_debug (); +gen_helper_debug (cpu_env); ctx.bstate =BS_EXCP ;break ; }@@ -1958,7 +1970,7 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb,fprintf (stderr,"Loading opcode at address 0x%08x\n" , ctx.pc);fflush (stderr);#endif - ctx.opcode =lduw_code (ctx.pc); + ctx.opcode =cpu_lduw_code (env, ctx.pc);decode_opc (&ctx); num_insns++; ctx.pc +=2 ;
target-sh4/translate.c gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb, · line 1993
Quoted 8 lines
target-sh4/translate.c +1
-1@@ -1975,7 +1987,7 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb,gen_io_end ();if (env->singlestep_enabled) {tcg_gen_movi_i32 (cpu_pc, ctx.pc); -gen_helper_debug (); +gen_helper_debug (cpu_env); }else {switch (ctx.bstate) {case BS_STOP :
Signature · 2 lines
Aurelien Jarno GPG: 1024D/F1BCDB73 [email protected] http://www.aurel32.net
PATCH v2 13/14 target-mips: switch to AREG0 free mode
In reply to Blue SwirlAdd an explicit CPUState parameter instead of relying on AREG0 and switch to AREG0 free mode.
--- configure | 2 +- target-mips/Makefile.objs | 2 - target-mips/cpu.h | 16 +- target-mips/helper.h | 410 +++++++++--------- target-mips/op_helper.c | 1065 ++++++++++++++++++++++++--------------------- target-mips/translate.c | 754 ++++++++++++++++---------------- 6 files changed, 1163 insertions(+), 1086 deletions(-)
configure +1 -1
@@ -3829,7 +3829,7 @@ symlink "$source_path/Makefile.target" "$target_dir/Makefile" case "$target_arch2" in - alpha | arm* | cris | i386 | lm32 | m68k | microblaze* | or32 | s390x | sh4* | sparc* | unicore32 | x86_64 | xtensa* | ppc*) + alpha | arm* | cris | i386 | lm32 | m68k | microblaze* | mips* | or32 | s390x | sh4* | sparc* | unicore32 | x86_64 | xtensa* | ppc*) echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak ;; esac
target-mips/Makefile.objs +0 -2
@@ -1,4 +1,2 @@ obj-y += translate.o op_helper.o helper.o cpu.o obj-$(CONFIG_SOFTMMU) += machine.o - -$(obj)/op_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
target-mips/cpu.h +8 -8
@@ -38,10 +38,10 @@ struct CPUMIPSTLBContext {uint32_t nb_tlb;uint32_t tlb_in_use;int (*map_address) (struct CPUMIPSState *env,target_phys_addr_t *physical,int *prot,target_ulong address,int rw,int access_type); -void (*helper_tlbwi) (void ); -void (*helper_tlbwr) (void ); -void (*helper_tlbp) (void ); -void (*helper_tlbr) (void ); +void (*helper_tlbwi)(struct CPUMIPSState *env); +void (*helper_tlbwr)(struct CPUMIPSState *env); +void (*helper_tlbp)(struct CPUMIPSState *env); +void (*helper_tlbr)(struct CPUMIPSState *env); union { struct { r4k_tlb_t tlb[MIPS_TLB_MAX];
@@ -485,10 +485,10 @@ int fixed_mmu_map_address (CPUMIPSState *env, target_phys_addr_t *physical, int target_ulong address, int rw, int access_type);int r4k_map_address (CPUMIPSState *env,target_phys_addr_t *physical,int *prot,target_ulong address,int rw,int access_type); -void r4k_helper_tlbwi (void ); -void r4k_helper_tlbwr (void ); -void r4k_helper_tlbp (void ); -void r4k_helper_tlbr (void ); +void r4k_helper_tlbwi (CPUMIPSState *env); +void r4k_helper_tlbwr (CPUMIPSState *env); +void r4k_helper_tlbp (CPUMIPSState *env); +void r4k_helper_tlbr (CPUMIPSState *env);void cpu_unassigned_access (CPUMIPSState *env,target_phys_addr_t addr,int is_write,int is_exec,int unused,int size);
target-mips/helper.h +208 -202
485 lines not on this page · raw message
target-mips/op_helper.c +560 -505
2,475 lines not on this page · raw message
target-mips/translate.c +386 -368
754 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
1.7.2.5
Part of the diff is not shown here. View the raw message.
PATCH v2 14/14 Remove unused CONFIG_TCG_PASS_AREG0 and dead code
In reply to Blue SwirlNow that CONFIG_TCG_PASS_AREG0 is enabled for all targets, remove dead code and support for !CONFIG_TCG_PASS_AREG0 case.
Remove dyngen-exec.h and all references to it. Although included by hw/spapr_hcall.c, it does not seem to use it.
Remove unused HELPER_CFLAGS.
--- Makefile.target | 8 ----- configure | 11 ------- cpu-all.h | 11 ------- cputlb.c | 5 --- dyngen-exec.h | 70 ------------------------------------------ exec-all.h | 4 -- hw/spapr_hcall.c | 1 - softmmu_defs.h | 21 ------------- softmmu_header.h | 63 ++++++++++++-------------------------- softmmu_template.h | 72 ++++++++++++++++--------------------------- target-m68k/op_helper.c | 3 -- target-sparc/Makefile.objs | 2 - tcg/arm/tcg-target.c | 31 ++----------------- tcg/arm/tcg-target.h | 1 - tcg/hppa/tcg-target.c | 24 -------------- tcg/hppa/tcg-target.h | 1 - tcg/i386/tcg-target.c | 30 ------------------ tcg/i386/tcg-target.h | 1 - tcg/ia64/tcg-target.c | 34 -------------------- tcg/ia64/tcg-target.h | 1 - tcg/mips/tcg-target.c | 31 ++----------------- tcg/mips/tcg-target.h | 1 - tcg/ppc/tcg-target.c | 38 ----------------------- tcg/ppc64/tcg-target.c | 28 ----------------- tcg/s390/tcg-target.c | 24 -------------- tcg/s390/tcg-target.h | 1 - tcg/sparc/tcg-target.c | 30 ------------------ tcg/sparc/tcg-target.h | 1 - tcg/tci/tcg-target.c | 4 -- tci.c | 12 ------- user-exec.c | 14 -------- 31 files changed, 53 insertions(+), 525 deletions(-) delete mode 100644 dyngen-exec.h
Makefile.target +0 -8
@@ -80,14 +80,6 @@ obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o tci-dis.o: QEMU_CFLAGS += -I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/tci -# HELPER_CFLAGS is used for all the legacy code compiled with static register -# variables -user-exec.o: QEMU_CFLAGS += $(HELPER_CFLAGS) - -# Note: this is a workaround. The real fix is to avoid compiling -# cpu_signal_handler() in user-exec.c. -%/signal.o: QEMU_CFLAGS += $(HELPER_CFLAGS) - ######################################################### # Linux user emulator target
configure +0 -11
@@ -118,7 +118,6 @@ audio_card_list="ac97 es1370 sb16 hda" audio_possible_cards="ac97 es1370 sb16 cs4231a adlib gus hda" block_drv_whitelist="" host_cc="gcc" -helper_cflags="" libs_softmmu="" libs_tools="" audio_pt_int=""
@@ -894,7 +893,6 @@ case "$cpu" in QEMU_CFLAGS="-m32 -ffixed-g2 -ffixed-g3 $QEMU_CFLAGS" if test "$solaris" = "no" ; then QEMU_CFLAGS="-ffixed-g1 -ffixed-g6 $QEMU_CFLAGS" - helper_cflags="-ffixed-i0" fi ;; sparc64)
@@ -919,7 +917,6 @@ case "$cpu" in QEMU_CFLAGS="-m32 $QEMU_CFLAGS" LDFLAGS="-m32 $LDFLAGS" cc_i386='$(CC) -m32' - helper_cflags="-fomit-frame-pointer" host_guest_base="yes" ;; x86_64)
@@ -3572,7 +3569,6 @@ if test "$sparse" = "yes" ; then echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak fi -echo "HELPER_CFLAGS=$helper_cflags" >> $config_host_mak echo "LDFLAGS=$LDFLAGS" >> $config_host_mak echo "ARLIBS_BEGIN=$arlibs_begin" >> $config_host_mak echo "ARLIBS_END=$arlibs_end" >> $config_host_mak
@@ -3827,13 +3823,6 @@ fi symlink "$source_path/Makefile.target" "$target_dir/Makefile" - -case "$target_arch2" in - alpha | arm* | cris | i386 | lm32 | m68k | microblaze* | mips* | or32 | s390x | sh4* | sparc* | unicore32 | x86_64 | xtensa* | ppc*) - echo "CONFIG_TCG_PASS_AREG0=y" >> $config_target_mak - ;; -esac - upper() { echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' }
cpu-all.h +0 -11
@@ -260,14 +260,6 @@ extern unsigned long reserved_va;#define stfl (p, v) stfl_raw(p, v)#define stfq (p, v) stfq_raw(p, v) -#ifndef CONFIG_TCG_PASS_AREG0 -#define ldub_code (p) ldub_raw(p) -#define ldsb_code (p) ldsb_raw(p) -#define lduw_code (p) lduw_raw(p) -#define ldsw_code (p) ldsw_raw(p) -#define ldl_code (p) ldl_raw(p) -#define ldq_code (p) ldq_raw(p) -#else #define cpu_ldub_code (env1, p) ldub_raw(p)#define cpu_ldsb_code (env1, p) ldsb_raw(p)#define cpu_lduw_code (env1, p) lduw_raw(p)
@@ -296,7 +288,6 @@ extern unsigned long reserved_va;#define cpu_stw_kernel (env, addr, data) stw_raw(addr, data)#define cpu_stl_kernel (env, addr, data) stl_raw(addr, data)#define cpu_stq_kernel (env, addr, data) stq_raw(addr, data) -#endif #define ldub_kernel (p) ldub_raw(p)#define ldsb_kernel (p) ldsb_raw(p)
@@ -313,7 +304,6 @@ extern unsigned long reserved_va;#define stfl_kernel (p, v) stfl_raw(p, v)#define stfq_kernel (p, vt) stfq_raw(p, v) -#ifdef CONFIG_TCG_PASS_AREG0 #define cpu_ldub_data (env, addr) ldub_raw(addr)#define cpu_lduw_data (env, addr) lduw_raw(addr)#define cpu_ldl_data (env, addr) ldl_raw(addr)
@@ -321,7 +311,6 @@ extern unsigned long reserved_va;#define cpu_stb_data (env, addr, data) stb_raw(addr, data)#define cpu_stw_data (env, addr, data) stw_raw(addr, data)#define cpu_stl_data (env, addr, data) stl_raw(addr, data) -#endif #endif /* defined(CONFIG_USER_ONLY) */ /* page related stuff */
cputlb.c +0 -5
@@ -325,11 +325,7 @@ tb_page_addr_t get_page_addr_code(CPUArchState *env1, target_ulong addr) mmu_idx =cpu_mmu_index (env1);if (unlikely (env1->tlb_table[mmu_idx][page_index].addr_code != (addr &TARGET_PAGE_MASK ))) { -#ifdef CONFIG_TCG_PASS_AREG0 cpu_ldub_code (env1, addr); -#else -ldub_code (addr); -#endif } pd = env1->iotlb[mmu_idx][page_index] & ~TARGET_PAGE_MASK ; mr =iotlb_to_region (pd);
@@ -348,7 +344,6 @@ tb_page_addr_t get_page_addr_code(CPUArchState *env1, target_ulong addr)#define MMUSUFFIX _cmmu#undef GETPC#define GETPC () ((uintptr_t)0) -#define env cpu_single_env#define SOFTMMU_CODE_ACCESS #define SHIFT 0
dyngen-exec.h deleted +0 -70
70 lines not on this page · raw message
exec-all.h +0 -4
@@ -323,9 +323,6 @@ void tlb_fill(CPUArchState *env1, target_ulong addr, int is_write, int mmu_idx,#define ACCESS_TYPE (NB_MMU_MODES + 1)#define MEMSUFFIX _code -#ifndef CONFIG_TCG_PASS_AREG0 -#define env cpu_single_env -#endif #define DATA_SIZE 1#include "softmmu_header.h"
@@ -341,7 +338,6 @@ void tlb_fill(CPUArchState *env1, target_ulong addr, int is_write, int mmu_idx,#undef ACCESS_TYPE#undef MEMSUFFIX -#undef env#endif
hw/spapr_hcall.c +0 -1
@@ -1,6 +1,5 @@#include "sysemu.h" #include "cpu.h" -#include "dyngen-exec.h" #include "qemu-char.h" #include "sysemu.h" #include "qemu-char.h"
softmmu_defs.h +0 -21
@@ -9,25 +9,6 @@#ifndef SOFTMMU_DEFS_H #define SOFTMMU_DEFS_H -#ifndef CONFIG_TCG_PASS_AREG0 -uint8_t __ldb_mmu (target_ulong addr,int mmu_idx); -void __stb_mmu (target_ulong addr,uint8_t val,int mmu_idx); -uint16_t __ldw_mmu (target_ulong addr,int mmu_idx); -void __stw_mmu (target_ulong addr,uint16_t val,int mmu_idx); -uint32_t __ldl_mmu (target_ulong addr,int mmu_idx); -void __stl_mmu (target_ulong addr,uint32_t val,int mmu_idx); -uint64_t __ldq_mmu (target_ulong addr,int mmu_idx); -void __stq_mmu (target_ulong addr,uint64_t val,int mmu_idx); - -uint8_t __ldb_cmmu (target_ulong addr,int mmu_idx); -void __stb_cmmu (target_ulong addr,uint8_t val,int mmu_idx); -uint16_t __ldw_cmmu (target_ulong addr,int mmu_idx); -void __stw_cmmu (target_ulong addr,uint16_t val,int mmu_idx); -uint32_t __ldl_cmmu (target_ulong addr,int mmu_idx); -void __stl_cmmu (target_ulong addr,uint32_t val,int mmu_idx); -uint64_t __ldq_cmmu (target_ulong addr,int mmu_idx); -void __stq_cmmu (target_ulong addr,uint64_t val,int mmu_idx); -#else uint8_t helper_ldb_mmu (CPUArchState *env,target_ulong addr,int mmu_idx);void helper_stb_mmu (CPUArchState *env,target_ulong addr,uint8_t val,int mmu_idx);
@@ -54,5 +35,3 @@ uint64_t helper_ldq_cmmu(CPUArchState *env, target_ulong addr, int mmu_idx);void helper_stq_cmmu (CPUArchState *env,target_ulong addr,uint64_t val,int mmu_idx);#endif - -#endif
softmmu_header.h +20 -43
143 lines not on this page · raw message
softmmu_template.h +27 -45
193 lines not on this page · raw message
target-m68k/op_helper.c +0 -3
@@ -192,9 +192,6 @@ void HELPER(divu)(CPUM68KState *env, uint32_t word) quot = num / den; rem = num % den; flags =0 ; -/* Avoid using a PARAM1 of zero. This breaks dyngen because it uses -the address of a symbol, and gcc knows symbols can't have address -zero. */ if (word && quot >0xffff ) flags |=CCF_V ;if (quot ==0 )
target-sparc/Makefile.objs +0 -2
@@ -4,5 +4,3 @@ obj-y += fop_helper.o cc_helper.o win_helper.o mmu_helper.o ldst_helper.o obj-$(TARGET_SPARC) += int32_helper.o obj-$(TARGET_SPARC64) += int64_helper.o obj-$(TARGET_SPARC64) += vis_helper.o - -$(obj)/op_helper.o: QEMU_CFLAGS += $(HELPER_CFLAGS)
tcg/arm/tcg-target.c +3 -28
@@ -176,7 +176,7 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)so don't use these. */ tcg_regset_reset_reg (ct->u.regs,TCG_REG_R0 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R1 ); -#if defined(CONFIG_TCG_PASS_AREG0 ) && (TARGET_LONG_BITS ==64 ) +#if TARGET_LONG_BITS ==64 /* If we're passing env to the helper as r0 and need a regpair * for the address then r2 will be overwritten as we're setting * up the args to the helper.
@@ -204,8 +204,7 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)use these. */ tcg_regset_reset_reg (ct->u.regs,TCG_REG_R0 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R1 ); -#if defined(CONFIG_SOFTMMU ) && \ - defined(CONFIG_TCG_PASS_AREG0 ) && (TARGET_LONG_BITS ==64 ) +#if defined(CONFIG_SOFTMMU ) && (TARGET_LONG_BITS ==64 )/* Avoid clashes with registers being used for helper args */ tcg_regset_reset_reg (ct->u.regs,TCG_REG_R2 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R3 );
@@ -223,7 +222,7 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)#ifdef CONFIG_SOFTMMU /* r2 is still needed to load data_reg, so don't use it. */ tcg_regset_reset_reg (ct->u.regs,TCG_REG_R2 ); -#if defined(CONFIG_TCG_PASS_AREG0 ) && (TARGET_LONG_BITS ==64 ) +#if TARGET_LONG_BITS ==64 /* Avoid clashes with registers being used for helper args */ tcg_regset_reset_reg (ct->u.regs,TCG_REG_R3 );#endif
@@ -954,7 +953,6 @@ static inline void tcg_out_goto_label(TCGContext *s, int cond, int label_index)#include "../../softmmu_defs.h" -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_ld_mmu(CPUState *env, target_ulong addr, int mmu_idx) */ static const void *const qemu_ld_helpers[4 ] = {
@@ -972,25 +970,6 @@ static const void * const qemu_st_helpers[4] = { helper_stl_mmu, helper_stq_mmu, }; -#else -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static void *qemu_ld_helpers[4 ] = { - __ldb_mmu, - __ldw_mmu, - __ldl_mmu, - __ldq_mmu, -}; - -/* legacy helper signature: __st_mmu(target_ulong addr, uintxx_t val, -int mmu_idx) */ -static void *qemu_st_helpers[4 ] = { - __stb_mmu, - __stw_mmu, - __stl_mmu, - __stq_mmu, -}; -#endif /* Helper routines for marshalling helper function arguments into * the correct registers and stack.
@@ -1203,9 +1182,7 @@ static inline void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, int opc)* trash by moving the earlier arguments into them. */ argreg =TCG_REG_R0 ; -#ifdef CONFIG_TCG_PASS_AREG0 argreg =tcg_out_arg_reg32 (s, argreg,TCG_AREG0 ); -#endif #if TARGET_LONG_BITS ==64 argreg =tcg_out_arg_reg64 (s, argreg, addr_reg, addr_reg2);#else
@@ -1421,9 +1398,7 @@ static inline void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, int opc)* trash by moving the earlier arguments into them. */ argreg =TCG_REG_R0 ; -#ifdef CONFIG_TCG_PASS_AREG0 argreg =tcg_out_arg_reg32 (s, argreg,TCG_AREG0 ); -#endif #if TARGET_LONG_BITS ==64 argreg =tcg_out_arg_reg64 (s, argreg, addr_reg, addr_reg2);#else
tcg/arm/tcg-target.h +0 -1
@@ -77,7 +77,6 @@ typedef enum {#define TCG_TARGET_HAS_GUEST_BASE enum { -/* Note: must be synced with dyngen-exec.h */ TCG_AREG0 =TCG_REG_R6 , };
tcg/hppa/tcg-target.c +0 -24
@@ -882,7 +882,6 @@ static void tcg_out_setcond2(TCGContext *s, int cond, TCGArg ret,#if defined(CONFIG_SOFTMMU )#include "../../softmmu_defs.h" -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_ld_mmu(CPUState *env, target_ulong addr, int mmu_idx) */ static const void * const qemu_ld_helpers[4] = {
@@ -900,25 +899,6 @@ static const void * const qemu_st_helpers[4] = { helper_stl_mmu, helper_stq_mmu, }; -#else -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static void *qemu_ld_helpers[4 ] = { - __ldb_mmu, - __ldw_mmu, - __ldl_mmu, - __ldq_mmu, -}; - -/* legacy helper signature: __st_mmu(target_ulong addr, uintxx_t val, -int mmu_idx) */ -static void *qemu_st_helpers[4 ] = { - __stb_mmu, - __stw_mmu, - __stl_mmu, - __stq_mmu, -}; -#endif /* Load and compare a TLB entry, and branch if TLB miss. OFFSET is set to the offset of the first ADDR_READ or ADDR_WRITE member of the appropriate
@@ -1085,7 +1065,6 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, int opc) }tcg_out_movi (s,TCG_TYPE_I32 , argreg, mem_index); -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_mov (s,TCG_TYPE_I32 , tcg_target_call_iarg_regs[2 ], tcg_target_call_iarg_regs[1 ]);
@@ -1093,7 +1072,6 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, int opc) tcg_target_call_iarg_regs[0]);tcg_out_mov (s,TCG_TYPE_PTR , tcg_target_call_iarg_regs[0 ],TCG_AREG0 ); -#endif tcg_out_call (s, qemu_ld_helpers[opc &3 ]);switch (opc) {
@@ -1245,7 +1223,6 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, int opc)tcg_abort (); } -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_mov (s,TCG_TYPE_I32 , tcg_target_call_iarg_regs[3 ], tcg_target_call_iarg_regs[2 ]);
@@ -1255,7 +1232,6 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, int opc) tcg_target_call_iarg_regs[0]);tcg_out_mov (s,TCG_TYPE_PTR , tcg_target_call_iarg_regs[0 ],TCG_AREG0 ); -#endif tcg_out_call (s, qemu_st_helpers[opc]);/* label2: */
tcg/hppa/tcg-target.h +0 -1
@@ -104,7 +104,6 @@ typedef enum {#define TCG_TARGET_HAS_GUEST_BASE -/* Note: must be synced with dyngen-exec.h */ #define TCG_AREG0 TCG_REG_R17
tcg/i386/tcg-target.c +0 -30
@@ -183,9 +183,7 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)tcg_regset_set32 (ct->u.regs,0 ,0xffff );tcg_regset_reset_reg (ct->u.regs, tcg_target_call_iarg_regs[0 ]);tcg_regset_reset_reg (ct->u.regs, tcg_target_call_iarg_regs[1 ]); -#ifdef CONFIG_TCG_PASS_AREG0 tcg_regset_reset_reg (ct->u.regs, tcg_target_call_iarg_regs[2 ]); -#endif }else {tcg_regset_set32 (ct->u.regs,0 ,0xff );tcg_regset_reset_reg (ct->u.regs,TCG_REG_EAX );
@@ -965,7 +963,6 @@ static void tcg_out_jmp(TCGContext *s, tcg_target_long dest)#include "../../softmmu_defs.h" -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_ld_mmu(CPUState *env, target_ulong addr, int mmu_idx) */ static const void *qemu_ld_helpers[4 ] = {
@@ -983,25 +980,6 @@ static const void *qemu_st_helpers[4] = { helper_stl_mmu, helper_stq_mmu, }; -#else -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static void *qemu_ld_helpers[4 ] = { - __ldb_mmu, - __ldw_mmu, - __ldl_mmu, - __ldq_mmu, -}; - -/* legacy helper signature: __st_mmu(target_ulong addr, uintxx_t val, -int mmu_idx) */ -static void *qemu_st_helpers[4 ] = { - __stb_mmu, - __stw_mmu, - __stl_mmu, - __stq_mmu, -}; -#endif /* Perform the TLB load and compare.
@@ -1220,16 +1198,13 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, }tcg_out_push (s, args[addrlo_idx]); stack_adjust +=4 ; -#ifdef CONFIG_TCG_PASS_AREG0 tcg_out_push (s,TCG_AREG0 ); stack_adjust +=4 ; -#endif #else /* The first argument is already loaded with addrlo. */ arg_idx =1 ;tcg_out_movi (s,TCG_TYPE_I32 , tcg_target_call_iarg_regs[arg_idx], mem_index); -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_mov (s,TCG_TYPE_I64 , tcg_target_call_iarg_regs[3 ], tcg_target_call_iarg_regs[2 ]);
@@ -1240,7 +1215,6 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args,tcg_out_mov (s,TCG_TYPE_I64 , tcg_target_call_iarg_regs[0 ],TCG_AREG0 );#endif -#endif tcg_out_calli (s, (tcg_target_long )qemu_ld_helpers[s_bits]);
@@ -1436,16 +1410,13 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, }tcg_out_push (s, args[addrlo_idx]); stack_adjust +=4 ; -#ifdef CONFIG_TCG_PASS_AREG0 tcg_out_push (s,TCG_AREG0 ); stack_adjust +=4 ; -#endif #else tcg_out_mov (s, (opc ==3 ?TCG_TYPE_I64 :TCG_TYPE_I32 ), tcg_target_call_iarg_regs[1 ], data_reg);tcg_out_movi (s,TCG_TYPE_I32 , tcg_target_call_iarg_regs[2 ], mem_index); stack_adjust =0 ; -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_mov (s,TCG_TYPE_I64 , tcg_target_call_iarg_regs[3 ], tcg_target_call_iarg_regs[2 ]);
@@ -1456,7 +1427,6 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args,tcg_out_mov (s,TCG_TYPE_I64 , tcg_target_call_iarg_regs[0 ],TCG_AREG0 );#endif -#endif tcg_out_calli (s, (tcg_target_long )qemu_st_helpers[s_bits]);
tcg/i386/tcg-target.h +0 -1
@@ -116,7 +116,6 @@ typedef enum {#define TCG_TARGET_HAS_GUEST_BASE -/* Note: must be synced with dyngen-exec.h */ #if TCG_TARGET_REG_BITS ==64 # define TCG_AREG0 TCG_REG_R14#else
tcg/ia64/tcg-target.c +0 -34
@@ -1452,7 +1452,6 @@ static inline void tcg_out_qemu_tlb(TCGContext *s, TCGArg addr_reg, TCG_REG_P7, TCG_REG_R3, TCG_REG_R57)); } -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_ld_mmu(CPUState *env, target_ulong addr, int mmu_idx) */ static const void *const qemu_ld_helpers[4 ] = {
@@ -1461,16 +1460,6 @@ static const void * const qemu_ld_helpers[4] = { helper_ldl_mmu, helper_ldq_mmu, }; -#else -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static void *qemu_ld_helpers[4 ] = { - __ldb_mmu, - __ldw_mmu, - __ldl_mmu, - __ldq_mmu, -}; -#endif static inline void tcg_out_qemu_ld (TCGContext *s,const TCGArg *args,int opc) {
@@ -1530,7 +1519,6 @@ static inline void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, int opc)tcg_opc_m1 (TCG_REG_P7 ,OPC_LD8_M1 ,TCG_REG_R1 ,TCG_REG_R2 ), tcg_opc_i18(TCG_REG_P0, OPC_NOP_I18, 0)); } -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_bundle(s, mII, tcg_opc_a5 (TCG_REG_P7, OPC_ADDL_A5, TCG_REG_R58,
@@ -1539,7 +1527,6 @@ static inline void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, int opc) TCG_REG_R57, 0, TCG_REG_R56),tcg_opc_a4 (TCG_REG_P7 ,OPC_ADDS_A4 , TCG_REG_R56, 0, TCG_AREG0)); -#endif if (!bswap || s_bits ==0 ) { tcg_out_bundle(s, miB, tcg_opc_m48(TCG_REG_P0, OPC_NOP_M48, 0),
@@ -1570,7 +1557,6 @@ static inline void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, int opc) } } -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_st_mmu(CPUState *env, target_ulong addr, uintxx_t val, int mmu_idx) */ static const void *const qemu_st_helpers[4 ] = {
@@ -1579,16 +1565,6 @@ static const void * const qemu_st_helpers[4] = { helper_stl_mmu, helper_stq_mmu, }; -#else -/* legacy helper signature: __st_mmu(target_ulong addr, uintxx_t val, -int mmu_idx) */ -static void *qemu_st_helpers[4 ] = { - __stb_mmu, - __stw_mmu, - __stl_mmu, - __stq_mmu, -}; -#endif static inline void tcg_out_qemu_st (TCGContext *s,const TCGArg *args,int opc) {
@@ -1658,7 +1634,6 @@ static inline void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, int opc) data_reg =TCG_REG_R2 ; } -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_bundle(s, mII, tcg_opc_a5 (TCG_REG_P7, OPC_ADDL_A5, TCG_REG_R59,
@@ -1674,15 +1649,6 @@ static inline void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, int opc) TCG_REG_R56, 0, TCG_AREG0),tcg_opc_b5 (TCG_REG_P7 ,OPC_BR_CALL_SPTK_MANY_B5 , TCG_REG_B0, TCG_REG_B6)); -#else -tcg_out_bundle (s, miB, -tcg_opc_m4 (TCG_REG_P6 , opc_st_m4[opc], - data_reg,TCG_REG_R3 ), -tcg_opc_a5 (TCG_REG_P7 ,OPC_ADDL_A5 ,TCG_REG_R58 , - mem_index,TCG_REG_R0 ), -tcg_opc_b5 (TCG_REG_P7 ,OPC_BR_CALL_SPTK_MANY_B5 , -TCG_REG_B0 ,TCG_REG_B6 )); -#endif }#else /* !CONFIG_SOFTMMU */
tcg/ia64/tcg-target.h +0 -1
@@ -140,7 +140,6 @@ typedef enum {#define TCG_TARGET_HAS_not_i32 0/* xor r1, -1, r3 */ #define TCG_TARGET_HAS_not_i64 0/* xor r1, -1, r3 */ -/* Note: must be synced with dyngen-exec.h */ #define TCG_AREG0 TCG_REG_R7/* Guest base is supported */
tcg/mips/tcg-target.c +3 -28
@@ -217,7 +217,7 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)tcg_regset_set (ct->u.regs,0xffffffff );#if defined(CONFIG_SOFTMMU )tcg_regset_reset_reg (ct->u.regs,TCG_REG_A0 ); -# if defined(CONFIG_TCG_PASS_AREG0 ) && (TARGET_LONG_BITS ==64 ) +# if (TARGET_LONG_BITS ==64 )tcg_regset_reset_reg (ct->u.regs,TCG_REG_A2 );# endif #endif
@@ -227,12 +227,11 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)tcg_regset_set (ct->u.regs,0xffffffff );tcg_regset_reset_reg (ct->u.regs,TCG_REG_A0 );#if defined(CONFIG_SOFTMMU ) -# if (defined(CONFIG_TCG_PASS_AREG0 ) &&TARGET_LONG_BITS ==32 ) || \ - (!defined(CONFIG_TCG_PASS_AREG0 ) &&TARGET_LONG_BITS ==64 ) +# if (TARGET_LONG_BITS ==32 )tcg_regset_reset_reg (ct->u.regs,TCG_REG_A1 );# endif tcg_regset_reset_reg (ct->u.regs,TCG_REG_A2 ); -# if defined(CONFIG_TCG_PASS_AREG0 ) &&TARGET_LONG_BITS ==64 +# if TARGET_LONG_BITS ==64 tcg_regset_reset_reg (ct->u.regs,TCG_REG_A3 );# endif #endif
@@ -821,7 +820,6 @@ static void tcg_out_setcond2(TCGContext *s, TCGCond cond, int ret,#include "../../softmmu_defs.h" -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_ld_mmu(CPUState *env, target_ulong addr, int mmu_idx) */ static const void *const qemu_ld_helpers[4 ] = {
@@ -839,25 +837,6 @@ static const void * const qemu_st_helpers[4] = { helper_stl_mmu, helper_stq_mmu, }; -#else -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static void *qemu_ld_helpers[4 ] = { - __ldb_mmu, - __ldw_mmu, - __ldl_mmu, - __ldq_mmu, -}; - -/* legacy helper signature: __st_mmu(target_ulong addr, uintxx_t val, -int mmu_idx) */ -static void *qemu_st_helpers[4 ] = { - __stb_mmu, - __stw_mmu, - __stl_mmu, - __stq_mmu, -}; -#endif #endif static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args,
@@ -942,9 +921,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args,/* slow path */ arg_num =0 ; -# ifdef CONFIG_TCG_PASS_AREG0 tcg_out_call_iarg_reg32 (s, &arg_num,TCG_AREG0 ); -# endif # if TARGET_LONG_BITS ==64 tcg_out_call_iarg_reg64 (s, &arg_num, addr_regl, addr_regh);# else
@@ -1127,9 +1104,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args,/* slow path */ arg_num =0 ; -# ifdef CONFIG_TCG_PASS_AREG0 tcg_out_call_iarg_reg32 (s, &arg_num,TCG_AREG0 ); -# endif # if TARGET_LONG_BITS ==64 tcg_out_call_iarg_reg64 (s, &arg_num, addr_regl, addr_regh);# else
tcg/mips/tcg-target.h +0 -1
@@ -96,7 +96,6 @@ typedef enum {#define TCG_TARGET_HAS_ext8u_i32 0/* andi rt, rs, 0xff */ #define TCG_TARGET_HAS_ext16u_i32 0/* andi rt, rs, 0xffff */ -/* Note: must be synced with dyngen-exec.h */ #define TCG_AREG0 TCG_REG_S0/* guest base is supported */
tcg/ppc/tcg-target.c +0 -38
@@ -248,7 +248,6 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)tcg_regset_set32 (ct->u.regs,0 ,0xffffffff );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R3 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R4 ); -#ifdef CONFIG_TCG_PASS_AREG0 tcg_regset_reset_reg (ct->u.regs,TCG_REG_R5 );#if TARGET_LONG_BITS ==64 tcg_regset_reset_reg (ct->u.regs,TCG_REG_R6 );
@@ -256,11 +255,6 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)tcg_regset_reset_reg (ct->u.regs,TCG_REG_R7 );#endif #endif -#else /* !AREG0 */ -#if TARGET_LONG_BITS ==64 -tcg_regset_reset_reg (ct->u.regs,TCG_REG_R5 ); -#endif -#endif break ;case 'K' :/* qemu_st[8..32] constraint */ ct->ct |=TCG_CT_REG ;
@@ -268,7 +262,6 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)tcg_regset_reset_reg (ct->u.regs,TCG_REG_R3 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R4 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R5 ); -#ifdef CONFIG_TCG_PASS_AREG0 tcg_regset_reset_reg (ct->u.regs,TCG_REG_R6 );#if TARGET_LONG_BITS ==64 tcg_regset_reset_reg (ct->u.regs,TCG_REG_R7 );
@@ -276,11 +269,6 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)tcg_regset_reset_reg (ct->u.regs,TCG_REG_R8 );#endif #endif -#else /* !AREG0 */ -#if TARGET_LONG_BITS ==64 -tcg_regset_reset_reg (ct->u.regs,TCG_REG_R6 ); -#endif -#endif break ;case 'M' :/* qemu_st64 constraint */ ct->ct |=TCG_CT_REG ;
@@ -290,12 +278,10 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)tcg_regset_reset_reg (ct->u.regs,TCG_REG_R5 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R6 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R7 ); -#if defined(CONFIG_TCG_PASS_AREG0 )tcg_regset_reset_reg (ct->u.regs,TCG_REG_R8 );#ifdef TCG_TARGET_CALL_ALIGN_ARGS tcg_regset_reset_reg (ct->u.regs,TCG_REG_R9 );#endif -#endif break ;#else case 'L' :
@@ -541,7 +527,6 @@ static void tcg_out_call (TCGContext *s, tcg_target_long arg, int const_arg)#include "../../softmmu_defs.h" -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_ld_mmu(CPUState *env, target_ulong addr, int mmu_idx) */ static const void *const qemu_ld_helpers[4 ] = {
@@ -559,25 +544,6 @@ static const void * const qemu_st_helpers[4] = { helper_stl_mmu, helper_stq_mmu, }; -#else -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static void *qemu_ld_helpers[4 ] = { - __ldb_mmu, - __ldw_mmu, - __ldl_mmu, - __ldq_mmu, -}; - -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static void *qemu_st_helpers[4 ] = { - __stb_mmu, - __stw_mmu, - __stl_mmu, - __stq_mmu, -}; -#endif #endif static void tcg_out_qemu_ld (TCGContext *s,const TCGArg *args,int opc)
@@ -647,9 +613,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc)/* slow path */ ir =3 ; -#ifdef CONFIG_TCG_PASS_AREG0 tcg_out_mov (s,TCG_TYPE_I32 , ir++,TCG_AREG0 ); -#endif #if TARGET_LONG_BITS ==32 tcg_out_mov (s,TCG_TYPE_I32 , ir++, addr_reg);#else
@@ -849,9 +813,7 @@ static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc)/* slow path */ ir =3 ; -#ifdef CONFIG_TCG_PASS_AREG0 tcg_out_mov (s,TCG_TYPE_I32 , ir++,TCG_AREG0 ); -#endif #if TARGET_LONG_BITS ==32 tcg_out_mov (s,TCG_TYPE_I32 , ir++, addr_reg);#else
tcg/ppc64/tcg-target.c +0 -28
@@ -235,10 +235,8 @@ static int target_parse_constraint (TCGArgConstraint *ct, const char **pct_str)tcg_regset_reset_reg (ct->u.regs,TCG_REG_R3 );#ifdef CONFIG_SOFTMMU tcg_regset_reset_reg (ct->u.regs,TCG_REG_R4 ); -#ifdef CONFIG_TCG_PASS_AREG0 tcg_regset_reset_reg (ct->u.regs,TCG_REG_R5 );#endif -#endif break ;case 'S' :/* qemu_st constraint */ ct->ct |=TCG_CT_REG ;
@@ -247,10 +245,8 @@ static int target_parse_constraint (TCGArgConstraint *ct, const char **pct_str)#ifdef CONFIG_SOFTMMU tcg_regset_reset_reg (ct->u.regs,TCG_REG_R4 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_R5 ); -#ifdef CONFIG_TCG_PASS_AREG0 tcg_regset_reset_reg (ct->u.regs,TCG_REG_R6 );#endif -#endif break ;case 'Z' : ct->ct |=TCG_CT_CONST_U32 ;
@@ -558,7 +554,6 @@ static void tcg_out_ldsta (TCGContext *s, int ret, int addr,#include "../../softmmu_defs.h" -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_ld_mmu(CPUState *env, target_ulong addr, int mmu_idx) */ static const void *const qemu_ld_helpers[4 ] = {
@@ -576,25 +571,6 @@ static const void * const qemu_st_helpers[4] = { helper_stl_mmu, helper_stq_mmu, }; -#else -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static void *qemu_ld_helpers[4 ] = { - __ldb_mmu, - __ldw_mmu, - __ldl_mmu, - __ldq_mmu, -}; - -/* legacy helper signature: __st_mmu(target_ulong addr, uintxx_t val, -int mmu_idx) */ -static void *qemu_st_helpers[4 ] = { - __stb_mmu, - __stw_mmu, - __stl_mmu, - __stq_mmu, -}; -#endif static void tcg_out_tlb_read (TCGContext *s,int r0,int r1,int r2,int addr_reg,int s_bits,int offset)
@@ -676,9 +652,7 @@ static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc)/* slow path */ ir =3 ; -#ifdef CONFIG_TCG_PASS_AREG0 tcg_out_mov (s,TCG_TYPE_I64 , ir++,TCG_AREG0 ); -#endif tcg_out_mov (s,TCG_TYPE_I64 , ir++, addr_reg);tcg_out_movi (s,TCG_TYPE_I64 , ir++, mem_index);
@@ -827,9 +801,7 @@ static void tcg_out_qemu_st (TCGContext *s, const TCGArg *args, int opc)/* slow path */ ir =3 ; -#ifdef CONFIG_TCG_PASS_AREG0 tcg_out_mov (s,TCG_TYPE_I64 , ir++,TCG_AREG0 ); -#endif tcg_out_mov (s,TCG_TYPE_I64 , ir++, addr_reg);tcg_out_rld (s,RLDICL , ir++, data_reg,0 ,64 - (1 << (3 + opc)));tcg_out_movi (s,TCG_TYPE_I64 , ir++, mem_index);
tcg/s390/tcg-target.c +0 -24
@@ -301,7 +301,6 @@ static const uint8_t tcg_cond_to_ltr_cond[10] = {#include "../../softmmu_defs.h" -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_ld_mmu(CPUState *env, target_ulong addr, int mmu_idx) */ static const void *const qemu_ld_helpers[4 ] = {
@@ -319,25 +318,6 @@ static const void * const qemu_st_helpers[4] = { helper_stl_mmu, helper_stq_mmu, }; -#else -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static void *qemu_ld_helpers[4 ] = { - __ldb_mmu, - __ldw_mmu, - __ldl_mmu, - __ldq_mmu, -}; - -/* legacy helper signature: __st_mmu(target_ulong addr, uintxx_t val, -int mmu_idx) */ -static void *qemu_st_helpers[4 ] = { - __stb_mmu, - __stw_mmu, - __stl_mmu, - __stq_mmu, -}; -#endif #endif static uint8_t *tb_ret_addr;
@@ -1507,7 +1487,6 @@ static void tcg_prepare_qemu_ldst(TCGContext* s, TCGReg data_reg,tcg_abort (); }tcg_out_movi (s,TCG_TYPE_I32 ,TCG_REG_R4 , mem_index); -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_mov (s,TCG_TYPE_I32 , tcg_target_call_iarg_regs[2 ], tcg_target_call_iarg_regs[1 ]);
@@ -1515,11 +1494,9 @@ static void tcg_prepare_qemu_ldst(TCGContext* s, TCGReg data_reg, tcg_target_call_iarg_regs[0]);tcg_out_mov (s,TCG_TYPE_PTR , tcg_target_call_iarg_regs[0 ],TCG_AREG0 ); -#endif tgen_calli (s, (tcg_target_ulong )qemu_st_helpers[s_bits]); }else {tcg_out_movi (s,TCG_TYPE_I32 , arg1, mem_index); -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_mov (s,TCG_TYPE_I32 , tcg_target_call_iarg_regs[3 ], tcg_target_call_iarg_regs[2 ]);
@@ -1529,7 +1506,6 @@ static void tcg_prepare_qemu_ldst(TCGContext* s, TCGReg data_reg, tcg_target_call_iarg_regs[0]);tcg_out_mov (s,TCG_TYPE_PTR , tcg_target_call_iarg_regs[0 ],TCG_AREG0 ); -#endif tgen_calli (s, (tcg_target_ulong )qemu_ld_helpers[s_bits]);/* sign extension */
tcg/s390/tcg-target.h +0 -1
@@ -96,7 +96,6 @@ typedef enum TCGReg {#define TCG_TARGET_EXTEND_ARGS 1enum { -/* Note: must be synced with dyngen-exec.h */ TCG_AREG0 =TCG_REG_R10 , };
tcg/sparc/tcg-target.c +0 -30
@@ -59,11 +59,7 @@ static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = { };#endif -#ifdef CONFIG_TCG_PASS_AREG0 #define ARG_OFFSET 1 -#else -#define ARG_OFFSET 0 -#endif static const int tcg_target_reg_alloc_order[] = {TCG_REG_L0 ,
@@ -161,9 +157,7 @@ static int target_parse_constraint(TCGArgConstraint *ct, const char **pct_str)tcg_regset_reset_reg (ct->u.regs,TCG_REG_O0 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_O1 );tcg_regset_reset_reg (ct->u.regs,TCG_REG_O2 ); -#ifdef CONFIG_TCG_PASS_AREG0 tcg_regset_reset_reg (ct->u.regs,TCG_REG_O3 ); -#endif break ;case 'I' : ct->ct |=TCG_CT_CONST_S11 ;
@@ -715,7 +709,6 @@ static void tcg_target_qemu_prologue(TCGContext *s)#include "../../softmmu_defs.h" -#ifdef CONFIG_TCG_PASS_AREG0 /* helper signature: helper_ld_mmu(CPUState *env, target_ulong addr, int mmu_idx) */ static const void *const qemu_ld_helpers[4 ] = {
@@ -733,25 +726,6 @@ static const void * const qemu_st_helpers[4] = { helper_stl_mmu, helper_stq_mmu, }; -#else -/* legacy helper signature: __ld_mmu(target_ulong addr, int -mmu_idx) */ -static const void *const qemu_ld_helpers[4 ] = { - __ldb_mmu, - __ldw_mmu, - __ldl_mmu, - __ldq_mmu, -}; - -/* legacy helper signature: __st_mmu(target_ulong addr, uintxx_t val, -int mmu_idx) */ -static const void *const qemu_st_helpers[4 ] = { - __stb_mmu, - __stw_mmu, - __stl_mmu, - __stq_mmu, -}; -#endif #endif #if TARGET_LONG_BITS ==32
@@ -834,7 +808,6 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args,/* mov */ tcg_out_movi (s,TCG_TYPE_I32 , arg1, mem_index); -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_mov (s,TCG_TYPE_I32 , tcg_target_call_iarg_regs[3 ], tcg_target_call_iarg_regs[2 ]);
@@ -844,7 +817,6 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, tcg_target_call_iarg_regs[0]);tcg_out_mov (s,TCG_TYPE_PTR , tcg_target_call_iarg_regs[0 ],TCG_AREG0 ); -#endif /* XXX: move that code at the end of the TB */ /* qemu_ld_helper[s_bits](arg0, arg1) */
@@ -1061,7 +1033,6 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args,/* mov */ tcg_out_movi (s,TCG_TYPE_I32 , arg2, mem_index); -#ifdef CONFIG_TCG_PASS_AREG0 /* XXX/FIXME: suboptimal */ tcg_out_mov (s,TCG_TYPE_I32 , tcg_target_call_iarg_regs[3 ], tcg_target_call_iarg_regs[2 ]);
@@ -1071,7 +1042,6 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, tcg_target_call_iarg_regs[0]);tcg_out_mov (s,TCG_TYPE_PTR , tcg_target_call_iarg_regs[0 ],TCG_AREG0 ); -#endif /* XXX: move that code at the end of the TB */ /* qemu_st_helper[s_bits](arg0, arg1, arg2) */ tcg_out32(s, CALL | ((((tcg_target_ulong)qemu_st_helpers[s_bits]
tcg/sparc/tcg-target.h +0 -1
@@ -125,7 +125,6 @@ typedef enum {#define TCG_TARGET_HAS_deposit_i64 0#endif -/* Note: must be synced with dyngen-exec.h */ #ifdef CONFIG_SOLARIS #define TCG_AREG0 TCG_REG_G2#elif defined(__sparc_v9__)
tcg/tci/tcg-target.c +0 -4
@@ -798,9 +798,7 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args,case INDEX_op_qemu_st8:case INDEX_op_qemu_st16:case INDEX_op_qemu_st32: -#ifdef CONFIG_TCG_PASS_AREG0 tcg_out_r (s,TCG_AREG0 ); -#endif tcg_out_r (s, *args++);tcg_out_r (s, *args++);#if TARGET_LONG_BITS >TCG_TARGET_REG_BITS
@@ -811,9 +809,7 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args,#endif break ;case INDEX_op_qemu_st64: -#ifdef CONFIG_TCG_PASS_AREG0 tcg_out_r (s,TCG_AREG0 ); -#endif tcg_out_r (s, *args++);#if TCG_TARGET_REG_BITS ==32 tcg_out_r (s, *args++);
tci.c +0 -12
@@ -25,7 +25,6 @@#endif #include "qemu-common.h" -#include "dyngen-exec.h" /* env */ #include "exec-all.h" /* MAX_OPC_PARAM_IARGS */ #include "tcg-op.h"
@@ -63,17 +62,6 @@ uintptr_t tci_tb_ptr;static tcg_target_ulong tci_reg[TCG_TARGET_NB_REGS ]; -#if !defined(CONFIG_TCG_PASS_AREG0 ) -# define helper_ldb_mmu (env, addr, mmu_idx) __ldb_mmu(addr, mmu_idx) -# define helper_ldw_mmu (env, addr, mmu_idx) __ldw_mmu(addr, mmu_idx) -# define helper_ldl_mmu (env, addr, mmu_idx) __ldl_mmu(addr, mmu_idx) -# define helper_ldq_mmu (env, addr, mmu_idx) __ldq_mmu(addr, mmu_idx) -# define helper_stb_mmu (env, addr, val, mmu_idx) __stb_mmu(addr, val, mmu_idx) -# define helper_stw_mmu (env, addr, val, mmu_idx) __stw_mmu(addr, val, mmu_idx) -# define helper_stl_mmu (env, addr, val, mmu_idx) __stl_mmu(addr, val, mmu_idx) -# define helper_stq_mmu (env, addr, val, mmu_idx) __stq_mmu(addr, val, mmu_idx) -#endif /* !CONFIG_TCG_PASS_AREG0 */ -static tcg_target_ulong tci_read_reg (TCGReg index) {assert (index <ARRAY_SIZE (tci_reg));
user-exec.c +0 -14
@@ -18,9 +18,6 @@*/ #include "config.h" #include "cpu.h" -#ifndef CONFIG_TCG_PASS_AREG0 -#include "dyngen-exec.h" -#endif #include "disas.h" #include "tcg.h"
@@ -60,12 +57,6 @@ void cpu_resume_from_signal(CPUArchState *env1, void *puc)struct sigcontext *uc = puc;#endif -#ifndef CONFIG_TCG_PASS_AREG0 - env = env1; - -/* XXX: restore cpu registers saved in host registers */ -#endif -if (puc) {/* XXX: use siglongjmp ? */ #ifdef __linux__
@@ -93,11 +84,6 @@ static inline int handle_cpu_signal(uintptr_t pc, unsigned long address,TranslationBlock *tb;int ret; -#ifndef CONFIG_TCG_PASS_AREG0 -if (cpu_single_env) { - env = cpu_single_env;/* XXX: find a correct solution for multithread */ - } -#endif #if defined(DEBUG_SIGNAL )qemu_printf ("qemu: SIGSEGV pc=0x%08lx address=%08lx w=%d oldset=0x%08lx\n" , pc, address, is_write, *(unsigned long *)old_set);
Signature · 1 line
1.7.2.5
Quoted 6 lines · Blue Swirl
Convert remaining targets to AREG0 free mode.
Avoid also
cpu_single_envin translation code.If there are no objections and the s390x queue gets pulled in, I'll apply the series next weekend.
Applied all, please report any problems.
Quoted 97 lines
v2:
drop queued s390x patches
avoid alsocpu_single_envAurelien Jarno (2):
target-cris: Avoid AREG0 for helpers
target-cris: Switch to AREG0 free modeBlue Swirl (12):
target-s390x: avoidcpu_single_env
target-lm32: switch to AREG0 free mode
target-m68k: switch to AREG0 free mode
target-m68k: avoid usingcpu_single_env
target-unicore32: switch to AREG0 free mode
target-arm: convert void helpers
target-arm: convert remaining helpers
target-arm: final conversion to AREG0 free mode
target-microblaze: switch to AREG0 free mode
target-sh4: switch to AREG0 free mode
target-mips: switch to AREG0 free mode Remove unusedCONFIG_TCG_PASS_AREG0and dead codeMakefile.target | 8 - configure | 11 - cpu-all.h | 11 - cputlb.c | 5 - dyngen-exec.h | 70 --- exec-all.h | 4 - hw/spapr_hcall.c | 1 - softmmu_defs.h | 21 - softmmu_header.h | 63 +-- softmmu_template.h | 72 +-- target-arm/Makefile.objs | 2 - target-arm/cpu.h | 10 +- target-arm/helper.c | 9 +- target-arm/helper.h | 60 ++-- target-arm/op_helper.c | 92 ++-- target-arm/translate.c | 148 +++--- target-cris/Makefile.objs | 2 - target-cris/helper.c | 4 +- target-cris/helper.h | 37 +- target-cris/op_helper.c | 89 ++-- target-cris/translate.c | 300 ++++++------ target-cris/translate_v10.c | 99 ++-- target-lm32/Makefile.objs | 2 - target-lm32/helper.h | 20 +- target-lm32/op_helper.c | 29 +- target-lm32/translate.c | 28 +- target-m68k/Makefile.objs | 2 - target-m68k/helpers.h | 2 +- target-m68k/op_helper.c | 71 +-- target-m68k/translate.c | 284 ++++++----- target-microblaze/Makefile.objs | 2 - target-microblaze/helper.h | 48 +- target-microblaze/op_helper.c | 115 ++--- target-microblaze/translate.c | 61 ++- target-mips/Makefile.objs | 2 - target-mips/cpu.h | 16 +- target-mips/helper.h | 410 ++++++++-------- target-mips/op_helper.c | 1065 ++++++++++++++++++++------------------- target-mips/translate.c | 754 ++++++++++++++-------------- target-s390x/translate.c | 356 +++++++------- target-sh4/Makefile.objs | 2 - target-sh4/helper.h | 84 ++-- target-sh4/op_helper.c | 182 ++++---- target-sh4/translate.c | 114 +++-- target-sparc/Makefile.objs | 2 - target-unicore32/Makefile.objs | 2 - target-unicore32/helper.h | 26 +- target-unicore32/op_helper.c | 65 +-- target-unicore32/translate.c | 38 +- tcg/arm/tcg-target.c | 31 +- tcg/arm/tcg-target.h | 1 - tcg/hppa/tcg-target.c | 24 - tcg/hppa/tcg-target.h | 1 - tcg/i386/tcg-target.c | 30 -- tcg/i386/tcg-target.h | 1 - tcg/ia64/tcg-target.c | 34 -- tcg/ia64/tcg-target.h | 1 - tcg/mips/tcg-target.c | 31 +- tcg/mips/tcg-target.h | 1 - tcg/ppc/tcg-target.c | 38 -- tcg/ppc64/tcg-target.c | 28 - tcg/s390/tcg-target.c | 24 - tcg/s390/tcg-target.h | 1 - tcg/sparc/tcg-target.c | 30 -- tcg/sparc/tcg-target.h | 1 - tcg/tci/tcg-target.c | 4 - tci.c | 12 - user-exec.c | 14 - 68 files changed, 2394 insertions(+), 2813 deletions(-) delete mode 100644 dyngen-exec.h--
1.7.2.5