Commit 255e1fcb5a940fa027475a44c4c1a250a022c725
1 parent
47ad35f1
Convert most env fields to TCG registers
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5176 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
91 additions
and
95 deletions
target-sparc/translate.c
| ... | ... | @@ -41,9 +41,17 @@ |
| 41 | 41 | static TCGv cpu_env, cpu_regwptr; |
| 42 | 42 | static TCGv cpu_cc_src, cpu_cc_src2, cpu_cc_dst; |
| 43 | 43 | static TCGv cpu_psr, cpu_fsr, cpu_pc, cpu_npc, cpu_gregs[8]; |
| 44 | +static TCGv cpu_y; | |
| 45 | +#ifndef CONFIG_USER_ONLY | |
| 46 | +static TCGv cpu_tbr; | |
| 47 | +#endif | |
| 44 | 48 | static TCGv cpu_cond, cpu_src1, cpu_src2, cpu_dst, cpu_addr, cpu_val; |
| 45 | 49 | #ifdef TARGET_SPARC64 |
| 46 | -static TCGv cpu_xcc; | |
| 50 | +static TCGv cpu_xcc, cpu_asi, cpu_fprs, cpu_gsr; | |
| 51 | +static TCGv cpu_tick_cmpr, cpu_stick_cmpr, cpu_hstick_cmpr; | |
| 52 | +static TCGv cpu_hintp, cpu_htba, cpu_hver, cpu_ssr, cpu_ver; | |
| 53 | +#else | |
| 54 | +static TCGv cpu_wim; | |
| 47 | 55 | #endif |
| 48 | 56 | /* local register indexes (only used inside old micro ops) */ |
| 49 | 57 | static TCGv cpu_tmp0, cpu_tmp32, cpu_tmp64; |
| ... | ... | @@ -724,8 +732,7 @@ static inline void gen_op_mulscc(TCGv dst, TCGv src1, TCGv src2) |
| 724 | 732 | T1 = 0; |
| 725 | 733 | */ |
| 726 | 734 | tcg_gen_mov_tl(cpu_cc_src, src1); |
| 727 | - tcg_gen_ld_tl(r_temp, cpu_env, offsetof(CPUSPARCState, y)); | |
| 728 | - tcg_gen_andi_tl(r_temp, r_temp, 0x1); | |
| 735 | + tcg_gen_andi_tl(r_temp, cpu_y, 0x1); | |
| 729 | 736 | tcg_gen_mov_tl(cpu_cc_src2, src2); |
| 730 | 737 | tcg_gen_brcondi_tl(TCG_COND_NE, r_temp, 0, l1); |
| 731 | 738 | tcg_gen_movi_tl(cpu_cc_src2, 0); |
| ... | ... | @@ -735,10 +742,8 @@ static inline void gen_op_mulscc(TCGv dst, TCGv src1, TCGv src2) |
| 735 | 742 | // env->y = (b2 << 31) | (env->y >> 1); |
| 736 | 743 | tcg_gen_andi_tl(r_temp, cpu_cc_src, 0x1); |
| 737 | 744 | tcg_gen_shli_tl(r_temp, r_temp, 31); |
| 738 | - tcg_gen_ld_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, y)); | |
| 739 | - tcg_gen_shri_tl(cpu_tmp0, cpu_tmp0, 1); | |
| 740 | - tcg_gen_or_tl(cpu_tmp0, cpu_tmp0, r_temp); | |
| 741 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, y)); | |
| 745 | + tcg_gen_shri_tl(cpu_tmp0, cpu_y, 1); | |
| 746 | + tcg_gen_or_tl(cpu_y, cpu_tmp0, r_temp); | |
| 742 | 747 | |
| 743 | 748 | // b1 = N ^ V; |
| 744 | 749 | gen_mov_reg_N(cpu_tmp0, cpu_psr); |
| ... | ... | @@ -776,8 +781,7 @@ static inline void gen_op_umul(TCGv dst, TCGv src1, TCGv src2) |
| 776 | 781 | tcg_gen_shri_i64(r_temp, r_temp2, 32); |
| 777 | 782 | tcg_gen_trunc_i64_tl(cpu_tmp0, r_temp); |
| 778 | 783 | tcg_temp_free(r_temp); |
| 779 | - tcg_gen_andi_tl(cpu_tmp0, cpu_tmp0, 0xffffffff); | |
| 780 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, y)); | |
| 784 | + tcg_gen_andi_tl(cpu_y, cpu_tmp0, 0xffffffff); | |
| 781 | 785 | #ifdef TARGET_SPARC64 |
| 782 | 786 | tcg_gen_mov_i64(dst, r_temp2); |
| 783 | 787 | #else |
| ... | ... | @@ -800,8 +804,7 @@ static inline void gen_op_smul(TCGv dst, TCGv src1, TCGv src2) |
| 800 | 804 | tcg_gen_shri_i64(r_temp, r_temp2, 32); |
| 801 | 805 | tcg_gen_trunc_i64_tl(cpu_tmp0, r_temp); |
| 802 | 806 | tcg_temp_free(r_temp); |
| 803 | - tcg_gen_andi_tl(cpu_tmp0, cpu_tmp0, 0xffffffff); | |
| 804 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, y)); | |
| 807 | + tcg_gen_andi_tl(cpu_y, cpu_tmp0, 0xffffffff); | |
| 805 | 808 | #ifdef TARGET_SPARC64 |
| 806 | 809 | tcg_gen_mov_i64(dst, r_temp2); |
| 807 | 810 | #else |
| ... | ... | @@ -1645,7 +1648,7 @@ static inline TCGv gen_get_asi(int insn, TCGv r_addr) |
| 1645 | 1648 | |
| 1646 | 1649 | if (IS_IMM) { |
| 1647 | 1650 | r_asi = tcg_temp_new(TCG_TYPE_I32); |
| 1648 | - tcg_gen_ld_i32(r_asi, cpu_env, offsetof(CPUSPARCState, asi)); | |
| 1651 | + tcg_gen_mov_i32(r_asi, cpu_asi); | |
| 1649 | 1652 | } else { |
| 1650 | 1653 | asi = GET_FIELD(insn, 19, 26); |
| 1651 | 1654 | r_asi = tcg_const_i32(asi); |
| ... | ... | @@ -2080,9 +2083,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 2080 | 2083 | SPARCv8 manual, rdy on the |
| 2081 | 2084 | microSPARC II */ |
| 2082 | 2085 | #endif |
| 2083 | - tcg_gen_ld_tl(cpu_tmp0, cpu_env, | |
| 2084 | - offsetof(CPUSPARCState, y)); | |
| 2085 | - gen_movl_TN_reg(rd, cpu_tmp0); | |
| 2086 | + gen_movl_TN_reg(rd, cpu_y); | |
| 2086 | 2087 | break; |
| 2087 | 2088 | #ifdef TARGET_SPARC64 |
| 2088 | 2089 | case 0x2: /* V9 rdccr */ |
| ... | ... | @@ -2090,9 +2091,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 2090 | 2091 | gen_movl_TN_reg(rd, cpu_dst); |
| 2091 | 2092 | break; |
| 2092 | 2093 | case 0x3: /* V9 rdasi */ |
| 2093 | - tcg_gen_ld_i32(cpu_tmp32, cpu_env, | |
| 2094 | - offsetof(CPUSPARCState, asi)); | |
| 2095 | - tcg_gen_ext_i32_tl(cpu_dst, cpu_tmp32); | |
| 2094 | + tcg_gen_ext_i32_tl(cpu_dst, cpu_asi); | |
| 2096 | 2095 | gen_movl_TN_reg(rd, cpu_dst); |
| 2097 | 2096 | break; |
| 2098 | 2097 | case 0x4: /* V9 rdtick */ |
| ... | ... | @@ -2118,9 +2117,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 2118 | 2117 | } |
| 2119 | 2118 | break; |
| 2120 | 2119 | case 0x6: /* V9 rdfprs */ |
| 2121 | - tcg_gen_ld_i32(cpu_tmp32, cpu_env, | |
| 2122 | - offsetof(CPUSPARCState, fprs)); | |
| 2123 | - tcg_gen_ext_i32_tl(cpu_dst, cpu_tmp32); | |
| 2120 | + tcg_gen_ext_i32_tl(cpu_dst, cpu_fprs); | |
| 2124 | 2121 | gen_movl_TN_reg(rd, cpu_dst); |
| 2125 | 2122 | break; |
| 2126 | 2123 | case 0xf: /* V9 membar */ |
| ... | ... | @@ -2128,14 +2125,10 @@ static void disas_sparc_insn(DisasContext * dc) |
| 2128 | 2125 | case 0x13: /* Graphics Status */ |
| 2129 | 2126 | if (gen_trap_ifnofpu(dc, cpu_cond)) |
| 2130 | 2127 | goto jmp_insn; |
| 2131 | - tcg_gen_ld_tl(cpu_tmp0, cpu_env, | |
| 2132 | - offsetof(CPUSPARCState, gsr)); | |
| 2133 | - gen_movl_TN_reg(rd, cpu_tmp0); | |
| 2128 | + gen_movl_TN_reg(rd, cpu_gsr); | |
| 2134 | 2129 | break; |
| 2135 | 2130 | case 0x17: /* Tick compare */ |
| 2136 | - tcg_gen_ld_tl(cpu_tmp0, cpu_env, | |
| 2137 | - offsetof(CPUSPARCState, tick_cmpr)); | |
| 2138 | - gen_movl_TN_reg(rd, cpu_tmp0); | |
| 2131 | + gen_movl_TN_reg(rd, cpu_tick_cmpr); | |
| 2139 | 2132 | break; |
| 2140 | 2133 | case 0x18: /* System tick */ |
| 2141 | 2134 | { |
| ... | ... | @@ -2151,9 +2144,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 2151 | 2144 | } |
| 2152 | 2145 | break; |
| 2153 | 2146 | case 0x19: /* System tick compare */ |
| 2154 | - tcg_gen_ld_tl(cpu_tmp0, cpu_env, | |
| 2155 | - offsetof(CPUSPARCState, stick_cmpr)); | |
| 2156 | - gen_movl_TN_reg(rd, cpu_tmp0); | |
| 2147 | + gen_movl_TN_reg(rd, cpu_stick_cmpr); | |
| 2157 | 2148 | break; |
| 2158 | 2149 | case 0x10: /* Performance Control */ |
| 2159 | 2150 | case 0x11: /* Performance Instrumentation Counter */ |
| ... | ... | @@ -2184,23 +2175,16 @@ static void disas_sparc_insn(DisasContext * dc) |
| 2184 | 2175 | // gen_op_rdhtstate(); |
| 2185 | 2176 | break; |
| 2186 | 2177 | case 3: // hintp |
| 2187 | - tcg_gen_ld_i32(cpu_tmp32, cpu_env, | |
| 2188 | - offsetof(CPUSPARCState, hintp)); | |
| 2189 | - tcg_gen_ext_i32_tl(cpu_dst, cpu_tmp32); | |
| 2178 | + tcg_gen_mov_tl(cpu_dst, cpu_hintp); | |
| 2190 | 2179 | break; |
| 2191 | 2180 | case 5: // htba |
| 2192 | - tcg_gen_ld_i32(cpu_tmp32, cpu_env, | |
| 2193 | - offsetof(CPUSPARCState, htba)); | |
| 2194 | - tcg_gen_ext_i32_tl(cpu_dst, cpu_tmp32); | |
| 2181 | + tcg_gen_mov_tl(cpu_dst, cpu_htba); | |
| 2195 | 2182 | break; |
| 2196 | 2183 | case 6: // hver |
| 2197 | - tcg_gen_ld_i32(cpu_tmp32, cpu_env, | |
| 2198 | - offsetof(CPUSPARCState, hver)); | |
| 2199 | - tcg_gen_ext_i32_tl(cpu_dst, cpu_tmp32); | |
| 2184 | + tcg_gen_mov_tl(cpu_dst, cpu_hver); | |
| 2200 | 2185 | break; |
| 2201 | 2186 | case 31: // hstick_cmpr |
| 2202 | - tcg_gen_ld_tl(cpu_dst, cpu_env, | |
| 2203 | - offsetof(CPUSPARCState, hstick_cmpr)); | |
| 2187 | + tcg_gen_mov_tl(cpu_dst, cpu_hstick_cmpr); | |
| 2204 | 2188 | break; |
| 2205 | 2189 | default: |
| 2206 | 2190 | goto illegal_insn; |
| ... | ... | @@ -2276,8 +2260,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 2276 | 2260 | } |
| 2277 | 2261 | break; |
| 2278 | 2262 | case 5: // tba |
| 2279 | - tcg_gen_ld_tl(cpu_tmp0, cpu_env, | |
| 2280 | - offsetof(CPUSPARCState, tbr)); | |
| 2263 | + tcg_gen_mov_tl(cpu_tmp0, cpu_tbr); | |
| 2281 | 2264 | break; |
| 2282 | 2265 | case 6: // pstate |
| 2283 | 2266 | tcg_gen_ld_i32(cpu_tmp32, cpu_env, |
| ... | ... | @@ -2332,22 +2315,17 @@ static void disas_sparc_insn(DisasContext * dc) |
| 2332 | 2315 | CHECK_IU_FEATURE(dc, HYPV); |
| 2333 | 2316 | if (!hypervisor(dc)) |
| 2334 | 2317 | goto priv_insn; |
| 2335 | - tcg_gen_ld_i32(cpu_tmp32, cpu_env, | |
| 2336 | - offsetof(CPUSPARCState, ssr)); | |
| 2337 | - tcg_gen_ext_i32_tl(cpu_tmp0, cpu_tmp32); | |
| 2318 | + tcg_gen_ext_i32_tl(cpu_tmp0, cpu_ssr); | |
| 2338 | 2319 | break; |
| 2339 | 2320 | case 31: // ver |
| 2340 | - tcg_gen_ld_tl(cpu_tmp0, cpu_env, | |
| 2341 | - offsetof(CPUSPARCState, version)); | |
| 2321 | + tcg_gen_mov_tl(cpu_tmp0, cpu_ver); | |
| 2342 | 2322 | break; |
| 2343 | 2323 | case 15: // fq |
| 2344 | 2324 | default: |
| 2345 | 2325 | goto illegal_insn; |
| 2346 | 2326 | } |
| 2347 | 2327 | #else |
| 2348 | - tcg_gen_ld_i32(cpu_tmp32, cpu_env, | |
| 2349 | - offsetof(CPUSPARCState, wim)); | |
| 2350 | - tcg_gen_ext_i32_tl(cpu_tmp0, cpu_tmp32); | |
| 2328 | + tcg_gen_ext_i32_tl(cpu_tmp0, cpu_wim); | |
| 2351 | 2329 | #endif |
| 2352 | 2330 | gen_movl_TN_reg(rd, cpu_tmp0); |
| 2353 | 2331 | break; |
| ... | ... | @@ -2358,8 +2336,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 2358 | 2336 | #else |
| 2359 | 2337 | if (!supervisor(dc)) |
| 2360 | 2338 | goto priv_insn; |
| 2361 | - tcg_gen_ld_tl(cpu_tmp0, cpu_env, offsetof(CPUSPARCState, tbr)); | |
| 2362 | - gen_movl_TN_reg(rd, cpu_tmp0); | |
| 2339 | + gen_movl_TN_reg(rd, cpu_tbr); | |
| 2363 | 2340 | #endif |
| 2364 | 2341 | break; |
| 2365 | 2342 | #endif |
| ... | ... | @@ -3152,9 +3129,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3152 | 3129 | { |
| 3153 | 3130 | switch(rd) { |
| 3154 | 3131 | case 0: /* wry */ |
| 3155 | - tcg_gen_xor_tl(cpu_tmp0, cpu_src1, cpu_src2); | |
| 3156 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, | |
| 3157 | - offsetof(CPUSPARCState, y)); | |
| 3132 | + tcg_gen_xor_tl(cpu_y, cpu_src1, cpu_src2); | |
| 3158 | 3133 | break; |
| 3159 | 3134 | #ifndef TARGET_SPARC64 |
| 3160 | 3135 | case 0x01 ... 0x0f: /* undefined in the |
| ... | ... | @@ -3173,15 +3148,11 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3173 | 3148 | break; |
| 3174 | 3149 | case 0x3: /* V9 wrasi */ |
| 3175 | 3150 | tcg_gen_xor_tl(cpu_dst, cpu_src1, cpu_src2); |
| 3176 | - tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_dst); | |
| 3177 | - tcg_gen_st_i32(cpu_tmp32, cpu_env, | |
| 3178 | - offsetof(CPUSPARCState, asi)); | |
| 3151 | + tcg_gen_trunc_tl_i32(cpu_asi, cpu_dst); | |
| 3179 | 3152 | break; |
| 3180 | 3153 | case 0x6: /* V9 wrfprs */ |
| 3181 | 3154 | tcg_gen_xor_tl(cpu_dst, cpu_src1, cpu_src2); |
| 3182 | - tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_dst); | |
| 3183 | - tcg_gen_st_i32(cpu_tmp32, cpu_env, | |
| 3184 | - offsetof(CPUSPARCState, fprs)); | |
| 3155 | + tcg_gen_trunc_tl_i32(cpu_fprs, cpu_dst); | |
| 3185 | 3156 | save_state(dc, cpu_cond); |
| 3186 | 3157 | gen_op_next_insn(); |
| 3187 | 3158 | tcg_gen_exit_tb(0); |
| ... | ... | @@ -3196,9 +3167,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3196 | 3167 | case 0x13: /* Graphics Status */ |
| 3197 | 3168 | if (gen_trap_ifnofpu(dc, cpu_cond)) |
| 3198 | 3169 | goto jmp_insn; |
| 3199 | - tcg_gen_xor_tl(cpu_tmp0, cpu_src1, cpu_src2); | |
| 3200 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, | |
| 3201 | - offsetof(CPUSPARCState, gsr)); | |
| 3170 | + tcg_gen_xor_tl(cpu_gsr, cpu_src1, cpu_src2); | |
| 3202 | 3171 | break; |
| 3203 | 3172 | case 0x17: /* Tick compare */ |
| 3204 | 3173 | #if !defined(CONFIG_USER_ONLY) |
| ... | ... | @@ -3208,16 +3177,13 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3208 | 3177 | { |
| 3209 | 3178 | TCGv r_tickptr; |
| 3210 | 3179 | |
| 3211 | - tcg_gen_xor_tl(cpu_tmp0, cpu_src1, | |
| 3180 | + tcg_gen_xor_tl(cpu_tick_cmpr, cpu_src1, | |
| 3212 | 3181 | cpu_src2); |
| 3213 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, | |
| 3214 | - offsetof(CPUSPARCState, | |
| 3215 | - tick_cmpr)); | |
| 3216 | 3182 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); |
| 3217 | 3183 | tcg_gen_ld_ptr(r_tickptr, cpu_env, |
| 3218 | 3184 | offsetof(CPUState, tick)); |
| 3219 | 3185 | tcg_gen_helper_0_2(helper_tick_set_limit, |
| 3220 | - r_tickptr, cpu_tmp0); | |
| 3186 | + r_tickptr, cpu_tick_cmpr); | |
| 3221 | 3187 | tcg_temp_free(r_tickptr); |
| 3222 | 3188 | } |
| 3223 | 3189 | break; |
| ... | ... | @@ -3247,16 +3213,13 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3247 | 3213 | { |
| 3248 | 3214 | TCGv r_tickptr; |
| 3249 | 3215 | |
| 3250 | - tcg_gen_xor_tl(cpu_tmp0, cpu_src1, | |
| 3216 | + tcg_gen_xor_tl(cpu_stick_cmpr, cpu_src1, | |
| 3251 | 3217 | cpu_src2); |
| 3252 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, | |
| 3253 | - offsetof(CPUSPARCState, | |
| 3254 | - stick_cmpr)); | |
| 3255 | 3218 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); |
| 3256 | 3219 | tcg_gen_ld_ptr(r_tickptr, cpu_env, |
| 3257 | 3220 | offsetof(CPUState, stick)); |
| 3258 | 3221 | tcg_gen_helper_0_2(helper_tick_set_limit, |
| 3259 | - r_tickptr, cpu_tmp0); | |
| 3222 | + r_tickptr, cpu_stick_cmpr); | |
| 3260 | 3223 | tcg_temp_free(r_tickptr); |
| 3261 | 3224 | } |
| 3262 | 3225 | break; |
| ... | ... | @@ -3374,8 +3337,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3374 | 3337 | } |
| 3375 | 3338 | break; |
| 3376 | 3339 | case 5: // tba |
| 3377 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, | |
| 3378 | - offsetof(CPUSPARCState, tbr)); | |
| 3340 | + tcg_gen_mov_tl(cpu_tbr, cpu_tmp0); | |
| 3379 | 3341 | break; |
| 3380 | 3342 | case 6: // pstate |
| 3381 | 3343 | save_state(dc, cpu_cond); |
| ... | ... | @@ -3438,9 +3400,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3438 | 3400 | CHECK_IU_FEATURE(dc, HYPV); |
| 3439 | 3401 | if (!hypervisor(dc)) |
| 3440 | 3402 | goto priv_insn; |
| 3441 | - tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_tmp0); | |
| 3442 | - tcg_gen_st_i32(cpu_tmp32, cpu_env, | |
| 3443 | - offsetof(CPUSPARCState, ssr)); | |
| 3403 | + tcg_gen_trunc_tl_i32(cpu_ssr, cpu_tmp0); | |
| 3444 | 3404 | break; |
| 3445 | 3405 | default: |
| 3446 | 3406 | goto illegal_insn; |
| ... | ... | @@ -3450,8 +3410,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3450 | 3410 | if (dc->def->nwindows != 32) |
| 3451 | 3411 | tcg_gen_andi_tl(cpu_tmp32, cpu_tmp32, |
| 3452 | 3412 | (1 << dc->def->nwindows) - 1); |
| 3453 | - tcg_gen_st_i32(cpu_tmp32, cpu_env, | |
| 3454 | - offsetof(CPUSPARCState, wim)); | |
| 3413 | + tcg_gen_mov_i32(cpu_wim, cpu_tmp32); | |
| 3455 | 3414 | #endif |
| 3456 | 3415 | } |
| 3457 | 3416 | break; |
| ... | ... | @@ -3460,9 +3419,7 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3460 | 3419 | #ifndef TARGET_SPARC64 |
| 3461 | 3420 | if (!supervisor(dc)) |
| 3462 | 3421 | goto priv_insn; |
| 3463 | - tcg_gen_xor_tl(cpu_tmp0, cpu_src1, cpu_src2); | |
| 3464 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, | |
| 3465 | - offsetof(CPUSPARCState, tbr)); | |
| 3422 | + tcg_gen_xor_tl(cpu_tbr, cpu_src1, cpu_src2); | |
| 3466 | 3423 | #else |
| 3467 | 3424 | CHECK_IU_FEATURE(dc, HYPV); |
| 3468 | 3425 | if (!hypervisor(dc)) |
| ... | ... | @@ -3480,27 +3437,21 @@ static void disas_sparc_insn(DisasContext * dc) |
| 3480 | 3437 | // XXX gen_op_wrhtstate(); |
| 3481 | 3438 | break; |
| 3482 | 3439 | case 3: // hintp |
| 3483 | - tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_tmp0); | |
| 3484 | - tcg_gen_st_i32(cpu_tmp32, cpu_env, | |
| 3485 | - offsetof(CPUSPARCState, hintp)); | |
| 3440 | + tcg_gen_mov_tl(cpu_hintp, cpu_tmp0); | |
| 3486 | 3441 | break; |
| 3487 | 3442 | case 5: // htba |
| 3488 | - tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_tmp0); | |
| 3489 | - tcg_gen_st_i32(cpu_tmp32, cpu_env, | |
| 3490 | - offsetof(CPUSPARCState, htba)); | |
| 3443 | + tcg_gen_mov_tl(cpu_htba, cpu_tmp0); | |
| 3491 | 3444 | break; |
| 3492 | 3445 | case 31: // hstick_cmpr |
| 3493 | 3446 | { |
| 3494 | 3447 | TCGv r_tickptr; |
| 3495 | 3448 | |
| 3496 | - tcg_gen_st_tl(cpu_tmp0, cpu_env, | |
| 3497 | - offsetof(CPUSPARCState, | |
| 3498 | - hstick_cmpr)); | |
| 3449 | + tcg_gen_mov_tl(cpu_hstick_cmpr, cpu_tmp0); | |
| 3499 | 3450 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); |
| 3500 | 3451 | tcg_gen_ld_ptr(r_tickptr, cpu_env, |
| 3501 | 3452 | offsetof(CPUState, hstick)); |
| 3502 | 3453 | tcg_gen_helper_0_2(helper_tick_set_limit, |
| 3503 | - r_tickptr, cpu_tmp0); | |
| 3454 | + r_tickptr, cpu_hstick_cmpr); | |
| 3504 | 3455 | tcg_temp_free(r_tickptr); |
| 3505 | 3456 | } |
| 3506 | 3457 | break; |
| ... | ... | @@ -4905,6 +4856,44 @@ void gen_intermediate_code_init(CPUSPARCState *env) |
| 4905 | 4856 | cpu_xcc = tcg_global_mem_new(TCG_TYPE_I32, |
| 4906 | 4857 | TCG_AREG0, offsetof(CPUState, xcc), |
| 4907 | 4858 | "xcc"); |
| 4859 | + cpu_asi = tcg_global_mem_new(TCG_TYPE_I32, | |
| 4860 | + TCG_AREG0, offsetof(CPUState, asi), | |
| 4861 | + "asi"); | |
| 4862 | + cpu_fprs = tcg_global_mem_new(TCG_TYPE_I32, | |
| 4863 | + TCG_AREG0, offsetof(CPUState, fprs), | |
| 4864 | + "fprs"); | |
| 4865 | + cpu_gsr = tcg_global_mem_new(TCG_TYPE_TL, | |
| 4866 | + TCG_AREG0, offsetof(CPUState, gsr), | |
| 4867 | + "gsr"); | |
| 4868 | + cpu_tick_cmpr = tcg_global_mem_new(TCG_TYPE_TL, | |
| 4869 | + TCG_AREG0, | |
| 4870 | + offsetof(CPUState, tick_cmpr), | |
| 4871 | + "tick_cmpr"); | |
| 4872 | + cpu_stick_cmpr = tcg_global_mem_new(TCG_TYPE_TL, | |
| 4873 | + TCG_AREG0, | |
| 4874 | + offsetof(CPUState, stick_cmpr), | |
| 4875 | + "stick_cmpr"); | |
| 4876 | + cpu_hstick_cmpr = tcg_global_mem_new(TCG_TYPE_TL, | |
| 4877 | + TCG_AREG0, | |
| 4878 | + offsetof(CPUState, hstick_cmpr), | |
| 4879 | + "hstick_cmpr"); | |
| 4880 | + cpu_hintp = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, | |
| 4881 | + offsetof(CPUState, hintp), | |
| 4882 | + "hintp"); | |
| 4883 | + cpu_htba = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, | |
| 4884 | + offsetof(CPUState, htba), | |
| 4885 | + "htba"); | |
| 4886 | + cpu_hver = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, | |
| 4887 | + offsetof(CPUState, hver), | |
| 4888 | + "hver"); | |
| 4889 | + cpu_ssr = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, | |
| 4890 | + offsetof(CPUState, ssr), "ssr"); | |
| 4891 | + cpu_ver = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, | |
| 4892 | + offsetof(CPUState, version), "ver"); | |
| 4893 | +#else | |
| 4894 | + cpu_wim = tcg_global_mem_new(TCG_TYPE_I32, | |
| 4895 | + TCG_AREG0, offsetof(CPUState, wim), | |
| 4896 | + "wim"); | |
| 4908 | 4897 | #endif |
| 4909 | 4898 | cpu_cond = tcg_global_mem_new(TCG_TYPE_TL, |
| 4910 | 4899 | TCG_AREG0, offsetof(CPUState, cond), |
| ... | ... | @@ -4930,6 +4919,13 @@ void gen_intermediate_code_init(CPUSPARCState *env) |
| 4930 | 4919 | cpu_npc = tcg_global_mem_new(TCG_TYPE_TL, |
| 4931 | 4920 | TCG_AREG0, offsetof(CPUState, npc), |
| 4932 | 4921 | "npc"); |
| 4922 | + cpu_y = tcg_global_mem_new(TCG_TYPE_TL, | |
| 4923 | + TCG_AREG0, offsetof(CPUState, y), "y"); | |
| 4924 | +#ifndef CONFIG_USER_ONLY | |
| 4925 | + cpu_tbr = tcg_global_mem_new(TCG_TYPE_TL, | |
| 4926 | + TCG_AREG0, offsetof(CPUState, tbr), | |
| 4927 | + "tbr"); | |
| 4928 | +#endif | |
| 4933 | 4929 | for (i = 1; i < 8; i++) |
| 4934 | 4930 | cpu_gregs[i] = tcg_global_mem_new(TCG_TYPE_TL, TCG_AREG0, |
| 4935 | 4931 | offsetof(CPUState, gregs[i]), | ... | ... |