Commit 2f5680ee3307b05a7e49ead7d2cff26cf64f9386
1 parent
ccccab03
Remove some legacy definitions
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4108 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
209 additions
and
278 deletions
target-sparc/translate.c
| @@ -112,8 +112,6 @@ static int sign_extend(int x, int len) | @@ -112,8 +112,6 @@ static int sign_extend(int x, int len) | ||
| 112 | 112 | ||
| 113 | #define IS_IMM (insn & (1<<13)) | 113 | #define IS_IMM (insn & (1<<13)) |
| 114 | 114 | ||
| 115 | -static void disas_sparc_insn(DisasContext * dc); | ||
| 116 | - | ||
| 117 | /* floating point registers moves */ | 115 | /* floating point registers moves */ |
| 118 | static void gen_op_load_fpr_FT0(unsigned int src) | 116 | static void gen_op_load_fpr_FT0(unsigned int src) |
| 119 | { | 117 | { |
| @@ -236,11 +234,6 @@ OP_LD_TABLE(lddf); | @@ -236,11 +234,6 @@ OP_LD_TABLE(lddf); | ||
| 236 | #define ABI32_MASK(addr) | 234 | #define ABI32_MASK(addr) |
| 237 | #endif | 235 | #endif |
| 238 | 236 | ||
| 239 | -static inline void gen_movl_simm_T1(int32_t val) | ||
| 240 | -{ | ||
| 241 | - tcg_gen_movi_tl(cpu_T[1], val); | ||
| 242 | -} | ||
| 243 | - | ||
| 244 | static inline void gen_movl_reg_TN(int reg, TCGv tn) | 237 | static inline void gen_movl_reg_TN(int reg, TCGv tn) |
| 245 | { | 238 | { |
| 246 | if (reg == 0) | 239 | if (reg == 0) |
| @@ -252,23 +245,6 @@ static inline void gen_movl_reg_TN(int reg, TCGv tn) | @@ -252,23 +245,6 @@ static inline void gen_movl_reg_TN(int reg, TCGv tn) | ||
| 252 | } | 245 | } |
| 253 | } | 246 | } |
| 254 | 247 | ||
| 255 | -static inline void gen_movl_reg_T0(int reg) | ||
| 256 | -{ | ||
| 257 | - gen_movl_reg_TN(reg, cpu_T[0]); | ||
| 258 | -} | ||
| 259 | - | ||
| 260 | -static inline void gen_movl_reg_T1(int reg) | ||
| 261 | -{ | ||
| 262 | - gen_movl_reg_TN(reg, cpu_T[1]); | ||
| 263 | -} | ||
| 264 | - | ||
| 265 | -#ifdef __i386__ | ||
| 266 | -static inline void gen_movl_reg_T2(int reg) | ||
| 267 | -{ | ||
| 268 | - gen_movl_reg_TN(reg, cpu_T[2]); | ||
| 269 | -} | ||
| 270 | - | ||
| 271 | -#endif /* __i386__ */ | ||
| 272 | static inline void gen_movl_TN_reg(int reg, TCGv tn) | 248 | static inline void gen_movl_TN_reg(int reg, TCGv tn) |
| 273 | { | 249 | { |
| 274 | if (reg == 0) | 250 | if (reg == 0) |
| @@ -280,63 +256,6 @@ static inline void gen_movl_TN_reg(int reg, TCGv tn) | @@ -280,63 +256,6 @@ static inline void gen_movl_TN_reg(int reg, TCGv tn) | ||
| 280 | } | 256 | } |
| 281 | } | 257 | } |
| 282 | 258 | ||
| 283 | -static inline void gen_movl_T0_reg(int reg) | ||
| 284 | -{ | ||
| 285 | - gen_movl_TN_reg(reg, cpu_T[0]); | ||
| 286 | -} | ||
| 287 | - | ||
| 288 | -static inline void gen_movl_T1_reg(int reg) | ||
| 289 | -{ | ||
| 290 | - gen_movl_TN_reg(reg, cpu_T[1]); | ||
| 291 | -} | ||
| 292 | - | ||
| 293 | -static inline void gen_op_movl_T0_env(size_t offset) | ||
| 294 | -{ | ||
| 295 | - tcg_gen_ld_i32(cpu_tmp32, cpu_env, offset); | ||
| 296 | - tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 297 | -} | ||
| 298 | - | ||
| 299 | -static inline void gen_op_movl_env_T0(size_t offset) | ||
| 300 | -{ | ||
| 301 | - tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); | ||
| 302 | - tcg_gen_st_i32(cpu_tmp32, cpu_env, offset); | ||
| 303 | -} | ||
| 304 | - | ||
| 305 | -static inline void gen_op_movtl_T0_env(size_t offset) | ||
| 306 | -{ | ||
| 307 | - tcg_gen_ld_tl(cpu_T[0], cpu_env, offset); | ||
| 308 | -} | ||
| 309 | - | ||
| 310 | -static inline void gen_op_movtl_env_T0(size_t offset) | ||
| 311 | -{ | ||
| 312 | - tcg_gen_st_tl(cpu_T[0], cpu_env, offset); | ||
| 313 | -} | ||
| 314 | - | ||
| 315 | -static inline void gen_op_add_T1_T0(void) | ||
| 316 | -{ | ||
| 317 | - tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 318 | -} | ||
| 319 | - | ||
| 320 | -static inline void gen_op_or_T1_T0(void) | ||
| 321 | -{ | ||
| 322 | - tcg_gen_or_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 323 | -} | ||
| 324 | - | ||
| 325 | -static inline void gen_op_xor_T1_T0(void) | ||
| 326 | -{ | ||
| 327 | - tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 328 | -} | ||
| 329 | - | ||
| 330 | -static inline void gen_jmp_im(target_ulong pc) | ||
| 331 | -{ | ||
| 332 | - tcg_gen_movi_tl(cpu_pc, pc); | ||
| 333 | -} | ||
| 334 | - | ||
| 335 | -static inline void gen_movl_npc_im(target_ulong npc) | ||
| 336 | -{ | ||
| 337 | - tcg_gen_movi_tl(cpu_npc, npc); | ||
| 338 | -} | ||
| 339 | - | ||
| 340 | static inline void gen_goto_tb(DisasContext *s, int tb_num, | 259 | static inline void gen_goto_tb(DisasContext *s, int tb_num, |
| 341 | target_ulong pc, target_ulong npc) | 260 | target_ulong pc, target_ulong npc) |
| 342 | { | 261 | { |
| @@ -347,13 +266,13 @@ static inline void gen_goto_tb(DisasContext *s, int tb_num, | @@ -347,13 +266,13 @@ static inline void gen_goto_tb(DisasContext *s, int tb_num, | ||
| 347 | (npc & TARGET_PAGE_MASK) == (tb->pc & TARGET_PAGE_MASK)) { | 266 | (npc & TARGET_PAGE_MASK) == (tb->pc & TARGET_PAGE_MASK)) { |
| 348 | /* jump to same page: we can use a direct jump */ | 267 | /* jump to same page: we can use a direct jump */ |
| 349 | tcg_gen_goto_tb(tb_num); | 268 | tcg_gen_goto_tb(tb_num); |
| 350 | - gen_jmp_im(pc); | ||
| 351 | - gen_movl_npc_im(npc); | 269 | + tcg_gen_movi_tl(cpu_pc, pc); |
| 270 | + tcg_gen_movi_tl(cpu_npc, npc); | ||
| 352 | tcg_gen_exit_tb((long)tb + tb_num); | 271 | tcg_gen_exit_tb((long)tb + tb_num); |
| 353 | } else { | 272 | } else { |
| 354 | /* jump to another page: currently not optimized */ | 273 | /* jump to another page: currently not optimized */ |
| 355 | - gen_jmp_im(pc); | ||
| 356 | - gen_movl_npc_im(npc); | 274 | + tcg_gen_movi_tl(cpu_pc, pc); |
| 275 | + tcg_gen_movi_tl(cpu_npc, npc); | ||
| 357 | tcg_gen_exit_tb(0); | 276 | tcg_gen_exit_tb(0); |
| 358 | } | 277 | } |
| 359 | } | 278 | } |
| @@ -387,12 +306,6 @@ static inline void gen_mov_reg_C(TCGv reg, TCGv src) | @@ -387,12 +306,6 @@ static inline void gen_mov_reg_C(TCGv reg, TCGv src) | ||
| 387 | tcg_gen_andi_tl(reg, reg, 0x1); | 306 | tcg_gen_andi_tl(reg, reg, 0x1); |
| 388 | } | 307 | } |
| 389 | 308 | ||
| 390 | -static inline void gen_op_exception(int exception) | ||
| 391 | -{ | ||
| 392 | - tcg_gen_movi_i32(cpu_tmp32, exception); | ||
| 393 | - tcg_gen_helper_0_1(raise_exception, cpu_tmp32); | ||
| 394 | -} | ||
| 395 | - | ||
| 396 | static inline void gen_cc_clear(void) | 309 | static inline void gen_cc_clear(void) |
| 397 | { | 310 | { |
| 398 | tcg_gen_movi_i32(cpu_psr, 0); | 311 | tcg_gen_movi_i32(cpu_psr, 0); |
| @@ -518,7 +431,7 @@ static inline void gen_add_tv(TCGv dst, TCGv src1, TCGv src2) | @@ -518,7 +431,7 @@ static inline void gen_add_tv(TCGv dst, TCGv src1, TCGv src2) | ||
| 518 | tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0); | 431 | tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0); |
| 519 | tcg_gen_andi_tl(r_temp, r_temp, (1 << 31)); | 432 | tcg_gen_andi_tl(r_temp, r_temp, (1 << 31)); |
| 520 | tcg_gen_brcond_tl(TCG_COND_EQ, r_temp, tcg_const_tl(0), l1); | 433 | tcg_gen_brcond_tl(TCG_COND_EQ, r_temp, tcg_const_tl(0), l1); |
| 521 | - gen_op_exception(TT_TOVF); | 434 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_TOVF)); |
| 522 | gen_set_label(l1); | 435 | gen_set_label(l1); |
| 523 | #ifdef TARGET_SPARC64 | 436 | #ifdef TARGET_SPARC64 |
| 524 | { | 437 | { |
| @@ -531,7 +444,7 @@ static inline void gen_add_tv(TCGv dst, TCGv src1, TCGv src2) | @@ -531,7 +444,7 @@ static inline void gen_add_tv(TCGv dst, TCGv src1, TCGv src2) | ||
| 531 | tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0); | 444 | tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0); |
| 532 | tcg_gen_andi_tl(r_temp, r_temp, (1ULL << 63)); | 445 | tcg_gen_andi_tl(r_temp, r_temp, (1ULL << 63)); |
| 533 | tcg_gen_brcond_tl(TCG_COND_EQ, r_temp, tcg_const_tl(0), l2); | 446 | tcg_gen_brcond_tl(TCG_COND_EQ, r_temp, tcg_const_tl(0), l2); |
| 534 | - gen_op_exception(TT_TOVF); | 447 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_TOVF)); |
| 535 | gen_set_label(l2); | 448 | gen_set_label(l2); |
| 536 | } | 449 | } |
| 537 | #endif | 450 | #endif |
| @@ -558,7 +471,7 @@ static inline void gen_tag_tv(TCGv src1, TCGv src2) | @@ -558,7 +471,7 @@ static inline void gen_tag_tv(TCGv src1, TCGv src2) | ||
| 558 | tcg_gen_or_tl(cpu_tmp0, src1, src2); | 471 | tcg_gen_or_tl(cpu_tmp0, src1, src2); |
| 559 | tcg_gen_andi_tl(cpu_tmp0, cpu_tmp0, 0x3); | 472 | tcg_gen_andi_tl(cpu_tmp0, cpu_tmp0, 0x3); |
| 560 | tcg_gen_brcond_tl(TCG_COND_EQ, cpu_tmp0, tcg_const_tl(0), l1); | 473 | tcg_gen_brcond_tl(TCG_COND_EQ, cpu_tmp0, tcg_const_tl(0), l1); |
| 561 | - gen_op_exception(TT_TOVF); | 474 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_TOVF)); |
| 562 | gen_set_label(l1); | 475 | gen_set_label(l1); |
| 563 | } | 476 | } |
| 564 | 477 | ||
| @@ -685,7 +598,7 @@ static inline void gen_sub_tv(TCGv dst, TCGv src1, TCGv src2) | @@ -685,7 +598,7 @@ static inline void gen_sub_tv(TCGv dst, TCGv src1, TCGv src2) | ||
| 685 | tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0); | 598 | tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0); |
| 686 | tcg_gen_andi_tl(r_temp, r_temp, (1 << 31)); | 599 | tcg_gen_andi_tl(r_temp, r_temp, (1 << 31)); |
| 687 | tcg_gen_brcond_tl(TCG_COND_EQ, r_temp, tcg_const_tl(0), l1); | 600 | tcg_gen_brcond_tl(TCG_COND_EQ, r_temp, tcg_const_tl(0), l1); |
| 688 | - gen_op_exception(TT_TOVF); | 601 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_TOVF)); |
| 689 | gen_set_label(l1); | 602 | gen_set_label(l1); |
| 690 | #ifdef TARGET_SPARC64 | 603 | #ifdef TARGET_SPARC64 |
| 691 | { | 604 | { |
| @@ -697,7 +610,7 @@ static inline void gen_sub_tv(TCGv dst, TCGv src1, TCGv src2) | @@ -697,7 +610,7 @@ static inline void gen_sub_tv(TCGv dst, TCGv src1, TCGv src2) | ||
| 697 | tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0); | 610 | tcg_gen_and_tl(r_temp, r_temp, cpu_tmp0); |
| 698 | tcg_gen_andi_tl(r_temp, r_temp, (1ULL << 63)); | 611 | tcg_gen_andi_tl(r_temp, r_temp, (1ULL << 63)); |
| 699 | tcg_gen_brcond_tl(TCG_COND_EQ, r_temp, tcg_const_tl(0), l2); | 612 | tcg_gen_brcond_tl(TCG_COND_EQ, r_temp, tcg_const_tl(0), l2); |
| 700 | - gen_op_exception(TT_TOVF); | 613 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_TOVF)); |
| 701 | gen_set_label(l2); | 614 | gen_set_label(l2); |
| 702 | } | 615 | } |
| 703 | #endif | 616 | #endif |
| @@ -852,16 +765,6 @@ static inline void gen_op_smul_T1_T0(void) | @@ -852,16 +765,6 @@ static inline void gen_op_smul_T1_T0(void) | ||
| 852 | tcg_gen_discard_i64(r_temp2); | 765 | tcg_gen_discard_i64(r_temp2); |
| 853 | } | 766 | } |
| 854 | 767 | ||
| 855 | -static inline void gen_op_udiv_T1_T0(void) | ||
| 856 | -{ | ||
| 857 | - tcg_gen_helper_1_2(helper_udiv, cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 858 | -} | ||
| 859 | - | ||
| 860 | -static inline void gen_op_sdiv_T1_T0(void) | ||
| 861 | -{ | ||
| 862 | - tcg_gen_helper_1_2(helper_sdiv, cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 863 | -} | ||
| 864 | - | ||
| 865 | #ifdef TARGET_SPARC64 | 768 | #ifdef TARGET_SPARC64 |
| 866 | static inline void gen_trap_ifdivzero_tl(TCGv divisor) | 769 | static inline void gen_trap_ifdivzero_tl(TCGv divisor) |
| 867 | { | 770 | { |
| @@ -869,7 +772,7 @@ static inline void gen_trap_ifdivzero_tl(TCGv divisor) | @@ -869,7 +772,7 @@ static inline void gen_trap_ifdivzero_tl(TCGv divisor) | ||
| 869 | 772 | ||
| 870 | l1 = gen_new_label(); | 773 | l1 = gen_new_label(); |
| 871 | tcg_gen_brcond_tl(TCG_COND_NE, divisor, tcg_const_tl(0), l1); | 774 | tcg_gen_brcond_tl(TCG_COND_NE, divisor, tcg_const_tl(0), l1); |
| 872 | - gen_op_exception(TT_DIV_ZERO); | 775 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_DIV_ZERO)); |
| 873 | gen_set_label(l1); | 776 | gen_set_label(l1); |
| 874 | } | 777 | } |
| 875 | 778 | ||
| @@ -1210,12 +1113,6 @@ static inline void gen_branch_a(DisasContext *dc, target_ulong pc1, | @@ -1210,12 +1113,6 @@ static inline void gen_branch_a(DisasContext *dc, target_ulong pc1, | ||
| 1210 | gen_goto_tb(dc, 1, pc2 + 4, pc2 + 8); | 1113 | gen_goto_tb(dc, 1, pc2 + 4, pc2 + 8); |
| 1211 | } | 1114 | } |
| 1212 | 1115 | ||
| 1213 | -static inline void gen_branch(DisasContext *dc, target_ulong pc, | ||
| 1214 | - target_ulong npc) | ||
| 1215 | -{ | ||
| 1216 | - gen_goto_tb(dc, 0, pc, npc); | ||
| 1217 | -} | ||
| 1218 | - | ||
| 1219 | static inline void gen_generic_branch(target_ulong npc1, target_ulong npc2, | 1116 | static inline void gen_generic_branch(target_ulong npc1, target_ulong npc2, |
| 1220 | TCGv r_cond) | 1117 | TCGv r_cond) |
| 1221 | { | 1118 | { |
| @@ -1226,11 +1123,11 @@ static inline void gen_generic_branch(target_ulong npc1, target_ulong npc2, | @@ -1226,11 +1123,11 @@ static inline void gen_generic_branch(target_ulong npc1, target_ulong npc2, | ||
| 1226 | 1123 | ||
| 1227 | tcg_gen_brcond_tl(TCG_COND_EQ, r_cond, tcg_const_tl(0), l1); | 1124 | tcg_gen_brcond_tl(TCG_COND_EQ, r_cond, tcg_const_tl(0), l1); |
| 1228 | 1125 | ||
| 1229 | - gen_movl_npc_im(npc1); | 1126 | + tcg_gen_movi_tl(cpu_npc, npc1); |
| 1230 | tcg_gen_br(l2); | 1127 | tcg_gen_br(l2); |
| 1231 | 1128 | ||
| 1232 | gen_set_label(l1); | 1129 | gen_set_label(l1); |
| 1233 | - gen_movl_npc_im(npc2); | 1130 | + tcg_gen_movi_tl(cpu_npc, npc2); |
| 1234 | gen_set_label(l2); | 1131 | gen_set_label(l2); |
| 1235 | } | 1132 | } |
| 1236 | 1133 | ||
| @@ -1249,13 +1146,13 @@ static inline void save_npc(DisasContext * dc) | @@ -1249,13 +1146,13 @@ static inline void save_npc(DisasContext * dc) | ||
| 1249 | gen_generic_branch(dc->jump_pc[0], dc->jump_pc[1], cpu_T[2]); | 1146 | gen_generic_branch(dc->jump_pc[0], dc->jump_pc[1], cpu_T[2]); |
| 1250 | dc->npc = DYNAMIC_PC; | 1147 | dc->npc = DYNAMIC_PC; |
| 1251 | } else if (dc->npc != DYNAMIC_PC) { | 1148 | } else if (dc->npc != DYNAMIC_PC) { |
| 1252 | - gen_movl_npc_im(dc->npc); | 1149 | + tcg_gen_movi_tl(cpu_npc, dc->npc); |
| 1253 | } | 1150 | } |
| 1254 | } | 1151 | } |
| 1255 | 1152 | ||
| 1256 | static inline void save_state(DisasContext * dc) | 1153 | static inline void save_state(DisasContext * dc) |
| 1257 | { | 1154 | { |
| 1258 | - gen_jmp_im(dc->pc); | 1155 | + tcg_gen_movi_tl(cpu_pc, dc->pc); |
| 1259 | save_npc(dc); | 1156 | save_npc(dc); |
| 1260 | } | 1157 | } |
| 1261 | 1158 | ||
| @@ -1660,7 +1557,7 @@ static inline void gen_op_fpexception_im(int fsr_flags) | @@ -1660,7 +1557,7 @@ static inline void gen_op_fpexception_im(int fsr_flags) | ||
| 1660 | { | 1557 | { |
| 1661 | tcg_gen_andi_tl(cpu_fsr, cpu_fsr, ~FSR_FTT_MASK); | 1558 | tcg_gen_andi_tl(cpu_fsr, cpu_fsr, ~FSR_FTT_MASK); |
| 1662 | tcg_gen_ori_tl(cpu_fsr, cpu_fsr, fsr_flags); | 1559 | tcg_gen_ori_tl(cpu_fsr, cpu_fsr, fsr_flags); |
| 1663 | - gen_op_exception(TT_FP_EXCP); | 1560 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_FP_EXCP)); |
| 1664 | } | 1561 | } |
| 1665 | 1562 | ||
| 1666 | static int gen_trap_ifnofpu(DisasContext * dc) | 1563 | static int gen_trap_ifnofpu(DisasContext * dc) |
| @@ -1668,7 +1565,7 @@ static int gen_trap_ifnofpu(DisasContext * dc) | @@ -1668,7 +1565,7 @@ static int gen_trap_ifnofpu(DisasContext * dc) | ||
| 1668 | #if !defined(CONFIG_USER_ONLY) | 1565 | #if !defined(CONFIG_USER_ONLY) |
| 1669 | if (!dc->fpu_enabled) { | 1566 | if (!dc->fpu_enabled) { |
| 1670 | save_state(dc); | 1567 | save_state(dc); |
| 1671 | - gen_op_exception(TT_NFPU_INSN); | 1568 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_NFPU_INSN)); |
| 1672 | dc->is_br = 1; | 1569 | dc->is_br = 1; |
| 1673 | return 1; | 1570 | return 1; |
| 1674 | } | 1571 | } |
| @@ -1947,7 +1844,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -1947,7 +1844,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 1947 | target = sign_extend(target, 16); | 1844 | target = sign_extend(target, 16); |
| 1948 | target <<= 2; | 1845 | target <<= 2; |
| 1949 | rs1 = GET_FIELD(insn, 13, 17); | 1846 | rs1 = GET_FIELD(insn, 13, 17); |
| 1950 | - gen_movl_reg_T0(rs1); | 1847 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 1951 | do_branch_reg(dc, target, insn); | 1848 | do_branch_reg(dc, target, insn); |
| 1952 | goto jmp_insn; | 1849 | goto jmp_insn; |
| 1953 | } | 1850 | } |
| @@ -1993,7 +1890,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -1993,7 +1890,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 1993 | #endif | 1890 | #endif |
| 1994 | uint32_t value = GET_FIELD(insn, 10, 31); | 1891 | uint32_t value = GET_FIELD(insn, 10, 31); |
| 1995 | tcg_gen_movi_tl(cpu_T[0], value << 10); | 1892 | tcg_gen_movi_tl(cpu_T[0], value << 10); |
| 1996 | - gen_movl_T0_reg(rd); | 1893 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 1997 | #if defined(OPTIM) | 1894 | #if defined(OPTIM) |
| 1998 | } | 1895 | } |
| 1999 | #endif | 1896 | #endif |
| @@ -2022,7 +1919,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2022,7 +1919,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2022 | int cond; | 1919 | int cond; |
| 2023 | 1920 | ||
| 2024 | rs1 = GET_FIELD(insn, 13, 17); | 1921 | rs1 = GET_FIELD(insn, 13, 17); |
| 2025 | - gen_movl_reg_T0(rs1); | 1922 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 2026 | if (IS_IMM) { | 1923 | if (IS_IMM) { |
| 2027 | rs2 = GET_FIELD(insn, 25, 31); | 1924 | rs2 = GET_FIELD(insn, 25, 31); |
| 2028 | tcg_gen_addi_tl(cpu_T[0], cpu_T[0], rs2); | 1925 | tcg_gen_addi_tl(cpu_T[0], cpu_T[0], rs2); |
| @@ -2031,8 +1928,8 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2031,8 +1928,8 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2031 | #if defined(OPTIM) | 1928 | #if defined(OPTIM) |
| 2032 | if (rs2 != 0) { | 1929 | if (rs2 != 0) { |
| 2033 | #endif | 1930 | #endif |
| 2034 | - gen_movl_reg_T1(rs2); | ||
| 2035 | - gen_op_add_T1_T0(); | 1931 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 1932 | + tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 2036 | #if defined(OPTIM) | 1933 | #if defined(OPTIM) |
| 2037 | } | 1934 | } |
| 2038 | #endif | 1935 | #endif |
| @@ -2079,17 +1976,18 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2079,17 +1976,18 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2079 | SPARCv8 manual, rdy on the | 1976 | SPARCv8 manual, rdy on the |
| 2080 | microSPARC II */ | 1977 | microSPARC II */ |
| 2081 | #endif | 1978 | #endif |
| 2082 | - gen_op_movtl_T0_env(offsetof(CPUSPARCState, y)); | ||
| 2083 | - gen_movl_T0_reg(rd); | 1979 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, y)); |
| 1980 | + gen_movl_TN_reg(rd, cpu_T[0]); | ||
| 2084 | break; | 1981 | break; |
| 2085 | #ifdef TARGET_SPARC64 | 1982 | #ifdef TARGET_SPARC64 |
| 2086 | case 0x2: /* V9 rdccr */ | 1983 | case 0x2: /* V9 rdccr */ |
| 2087 | tcg_gen_helper_1_0(helper_rdccr, cpu_T[0]); | 1984 | tcg_gen_helper_1_0(helper_rdccr, cpu_T[0]); |
| 2088 | - gen_movl_T0_reg(rd); | 1985 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2089 | break; | 1986 | break; |
| 2090 | case 0x3: /* V9 rdasi */ | 1987 | case 0x3: /* V9 rdasi */ |
| 2091 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, asi)); | ||
| 2092 | - gen_movl_T0_reg(rd); | 1988 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, asi)); |
| 1989 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 1990 | + gen_movl_TN_reg(rd, cpu_T[0]); | ||
| 2093 | break; | 1991 | break; |
| 2094 | case 0x4: /* V9 rdtick */ | 1992 | case 0x4: /* V9 rdtick */ |
| 2095 | { | 1993 | { |
| @@ -2100,29 +1998,30 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2100,29 +1998,30 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2100 | offsetof(CPUState, tick)); | 1998 | offsetof(CPUState, tick)); |
| 2101 | tcg_gen_helper_1_1(helper_tick_get_count, cpu_T[0], | 1999 | tcg_gen_helper_1_1(helper_tick_get_count, cpu_T[0], |
| 2102 | r_tickptr); | 2000 | r_tickptr); |
| 2103 | - gen_movl_T0_reg(rd); | 2001 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2104 | tcg_gen_discard_ptr(r_tickptr); | 2002 | tcg_gen_discard_ptr(r_tickptr); |
| 2105 | } | 2003 | } |
| 2106 | break; | 2004 | break; |
| 2107 | case 0x5: /* V9 rdpc */ | 2005 | case 0x5: /* V9 rdpc */ |
| 2108 | tcg_gen_movi_tl(cpu_T[0], dc->pc); | 2006 | tcg_gen_movi_tl(cpu_T[0], dc->pc); |
| 2109 | - gen_movl_T0_reg(rd); | 2007 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2110 | break; | 2008 | break; |
| 2111 | case 0x6: /* V9 rdfprs */ | 2009 | case 0x6: /* V9 rdfprs */ |
| 2112 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, fprs)); | ||
| 2113 | - gen_movl_T0_reg(rd); | 2010 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, fprs)); |
| 2011 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2012 | + gen_movl_TN_reg(rd, cpu_T[0]); | ||
| 2114 | break; | 2013 | break; |
| 2115 | case 0xf: /* V9 membar */ | 2014 | case 0xf: /* V9 membar */ |
| 2116 | break; /* no effect */ | 2015 | break; /* no effect */ |
| 2117 | case 0x13: /* Graphics Status */ | 2016 | case 0x13: /* Graphics Status */ |
| 2118 | if (gen_trap_ifnofpu(dc)) | 2017 | if (gen_trap_ifnofpu(dc)) |
| 2119 | goto jmp_insn; | 2018 | goto jmp_insn; |
| 2120 | - gen_op_movtl_T0_env(offsetof(CPUSPARCState, gsr)); | ||
| 2121 | - gen_movl_T0_reg(rd); | 2019 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, gsr)); |
| 2020 | + gen_movl_TN_reg(rd, cpu_T[0]); | ||
| 2122 | break; | 2021 | break; |
| 2123 | case 0x17: /* Tick compare */ | 2022 | case 0x17: /* Tick compare */ |
| 2124 | - gen_op_movtl_T0_env(offsetof(CPUSPARCState, tick_cmpr)); | ||
| 2125 | - gen_movl_T0_reg(rd); | 2023 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, tick_cmpr)); |
| 2024 | + gen_movl_TN_reg(rd, cpu_T[0]); | ||
| 2126 | break; | 2025 | break; |
| 2127 | case 0x18: /* System tick */ | 2026 | case 0x18: /* System tick */ |
| 2128 | { | 2027 | { |
| @@ -2133,13 +2032,13 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2133,13 +2032,13 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2133 | offsetof(CPUState, stick)); | 2032 | offsetof(CPUState, stick)); |
| 2134 | tcg_gen_helper_1_1(helper_tick_get_count, cpu_T[0], | 2033 | tcg_gen_helper_1_1(helper_tick_get_count, cpu_T[0], |
| 2135 | r_tickptr); | 2034 | r_tickptr); |
| 2136 | - gen_movl_T0_reg(rd); | 2035 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2137 | tcg_gen_discard_ptr(r_tickptr); | 2036 | tcg_gen_discard_ptr(r_tickptr); |
| 2138 | } | 2037 | } |
| 2139 | break; | 2038 | break; |
| 2140 | case 0x19: /* System tick compare */ | 2039 | case 0x19: /* System tick compare */ |
| 2141 | - gen_op_movtl_T0_env(offsetof(CPUSPARCState, stick_cmpr)); | ||
| 2142 | - gen_movl_T0_reg(rd); | 2040 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, stick_cmpr)); |
| 2041 | + gen_movl_TN_reg(rd, cpu_T[0]); | ||
| 2143 | break; | 2042 | break; |
| 2144 | case 0x10: /* Performance Control */ | 2043 | case 0x10: /* Performance Control */ |
| 2145 | case 0x11: /* Performance Instrumentation Counter */ | 2044 | case 0x11: /* Performance Instrumentation Counter */ |
| @@ -2169,22 +2068,26 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2169,22 +2068,26 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2169 | // gen_op_rdhtstate(); | 2068 | // gen_op_rdhtstate(); |
| 2170 | break; | 2069 | break; |
| 2171 | case 3: // hintp | 2070 | case 3: // hintp |
| 2172 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, hintp)); | 2071 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, hintp)); |
| 2072 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2173 | break; | 2073 | break; |
| 2174 | case 5: // htba | 2074 | case 5: // htba |
| 2175 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, htba)); | 2075 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, htba)); |
| 2076 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2176 | break; | 2077 | break; |
| 2177 | case 6: // hver | 2078 | case 6: // hver |
| 2178 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, hver)); | 2079 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, hver)); |
| 2080 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2179 | break; | 2081 | break; |
| 2180 | case 31: // hstick_cmpr | 2082 | case 31: // hstick_cmpr |
| 2181 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, hstick_cmpr)); | 2083 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 2084 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, hstick_cmpr)); | ||
| 2182 | break; | 2085 | break; |
| 2183 | default: | 2086 | default: |
| 2184 | goto illegal_insn; | 2087 | goto illegal_insn; |
| 2185 | } | 2088 | } |
| 2186 | #endif | 2089 | #endif |
| 2187 | - gen_movl_T0_reg(rd); | 2090 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2188 | break; | 2091 | break; |
| 2189 | } else if (xop == 0x2a) { /* rdwim / V9 rdpr */ | 2092 | } else if (xop == 0x2a) { /* rdwim / V9 rdpr */ |
| 2190 | if (!supervisor(dc)) | 2093 | if (!supervisor(dc)) |
| @@ -2249,59 +2152,70 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2249,59 +2152,70 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2249 | offsetof(CPUState, tick)); | 2152 | offsetof(CPUState, tick)); |
| 2250 | tcg_gen_helper_1_1(helper_tick_get_count, cpu_T[0], | 2153 | tcg_gen_helper_1_1(helper_tick_get_count, cpu_T[0], |
| 2251 | r_tickptr); | 2154 | r_tickptr); |
| 2252 | - gen_movl_T0_reg(rd); | 2155 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2253 | tcg_gen_discard_ptr(r_tickptr); | 2156 | tcg_gen_discard_ptr(r_tickptr); |
| 2254 | } | 2157 | } |
| 2255 | break; | 2158 | break; |
| 2256 | case 5: // tba | 2159 | case 5: // tba |
| 2257 | - gen_op_movtl_T0_env(offsetof(CPUSPARCState, tbr)); | 2160 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, tbr)); |
| 2258 | break; | 2161 | break; |
| 2259 | case 6: // pstate | 2162 | case 6: // pstate |
| 2260 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, pstate)); | 2163 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, pstate)); |
| 2164 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2261 | break; | 2165 | break; |
| 2262 | case 7: // tl | 2166 | case 7: // tl |
| 2263 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, tl)); | 2167 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, tl)); |
| 2168 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2264 | break; | 2169 | break; |
| 2265 | case 8: // pil | 2170 | case 8: // pil |
| 2266 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, psrpil)); | 2171 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, psrpil)); |
| 2172 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2267 | break; | 2173 | break; |
| 2268 | case 9: // cwp | 2174 | case 9: // cwp |
| 2269 | tcg_gen_helper_1_0(helper_rdcwp, cpu_T[0]); | 2175 | tcg_gen_helper_1_0(helper_rdcwp, cpu_T[0]); |
| 2270 | break; | 2176 | break; |
| 2271 | case 10: // cansave | 2177 | case 10: // cansave |
| 2272 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, cansave)); | 2178 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, cansave)); |
| 2179 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2273 | break; | 2180 | break; |
| 2274 | case 11: // canrestore | 2181 | case 11: // canrestore |
| 2275 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, canrestore)); | 2182 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, canrestore)); |
| 2183 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2276 | break; | 2184 | break; |
| 2277 | case 12: // cleanwin | 2185 | case 12: // cleanwin |
| 2278 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, cleanwin)); | 2186 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, cleanwin)); |
| 2187 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2279 | break; | 2188 | break; |
| 2280 | case 13: // otherwin | 2189 | case 13: // otherwin |
| 2281 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, otherwin)); | 2190 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, otherwin)); |
| 2191 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2282 | break; | 2192 | break; |
| 2283 | case 14: // wstate | 2193 | case 14: // wstate |
| 2284 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, wstate)); | 2194 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, wstate)); |
| 2195 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2285 | break; | 2196 | break; |
| 2286 | case 16: // UA2005 gl | 2197 | case 16: // UA2005 gl |
| 2287 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, gl)); | 2198 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, gl)); |
| 2199 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2288 | break; | 2200 | break; |
| 2289 | case 26: // UA2005 strand status | 2201 | case 26: // UA2005 strand status |
| 2290 | if (!hypervisor(dc)) | 2202 | if (!hypervisor(dc)) |
| 2291 | goto priv_insn; | 2203 | goto priv_insn; |
| 2292 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, ssr)); | 2204 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, ssr)); |
| 2205 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2293 | break; | 2206 | break; |
| 2294 | case 31: // ver | 2207 | case 31: // ver |
| 2295 | - gen_op_movtl_T0_env(offsetof(CPUSPARCState, version)); | 2208 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, version)); |
| 2296 | break; | 2209 | break; |
| 2297 | case 15: // fq | 2210 | case 15: // fq |
| 2298 | default: | 2211 | default: |
| 2299 | goto illegal_insn; | 2212 | goto illegal_insn; |
| 2300 | } | 2213 | } |
| 2301 | #else | 2214 | #else |
| 2302 | - gen_op_movl_T0_env(offsetof(CPUSPARCState, wim)); | 2215 | + tcg_gen_ld_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, wim)); |
| 2216 | + tcg_gen_ext_i32_tl(cpu_T[0], cpu_tmp32); | ||
| 2303 | #endif | 2217 | #endif |
| 2304 | - gen_movl_T0_reg(rd); | 2218 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2305 | break; | 2219 | break; |
| 2306 | } else if (xop == 0x2b) { /* rdtbr / V9 flushw */ | 2220 | } else if (xop == 0x2b) { /* rdtbr / V9 flushw */ |
| 2307 | #ifdef TARGET_SPARC64 | 2221 | #ifdef TARGET_SPARC64 |
| @@ -2309,8 +2223,8 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2309,8 +2223,8 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2309 | #else | 2223 | #else |
| 2310 | if (!supervisor(dc)) | 2224 | if (!supervisor(dc)) |
| 2311 | goto priv_insn; | 2225 | goto priv_insn; |
| 2312 | - gen_op_movtl_T0_env(offsetof(CPUSPARCState, tbr)); | ||
| 2313 | - gen_movl_T0_reg(rd); | 2226 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, tbr)); |
| 2227 | + gen_movl_TN_reg(rd, cpu_T[0]); | ||
| 2314 | #endif | 2228 | #endif |
| 2315 | break; | 2229 | break; |
| 2316 | #endif | 2230 | #endif |
| @@ -2703,7 +2617,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2703,7 +2617,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2703 | l1 = gen_new_label(); | 2617 | l1 = gen_new_label(); |
| 2704 | cond = GET_FIELD_SP(insn, 14, 17); | 2618 | cond = GET_FIELD_SP(insn, 14, 17); |
| 2705 | rs1 = GET_FIELD(insn, 13, 17); | 2619 | rs1 = GET_FIELD(insn, 13, 17); |
| 2706 | - gen_movl_reg_T0(rs1); | 2620 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 2707 | tcg_gen_brcond_tl(gen_tcg_cond_reg[cond], cpu_T[0], | 2621 | tcg_gen_brcond_tl(gen_tcg_cond_reg[cond], cpu_T[0], |
| 2708 | tcg_const_tl(0), l1); | 2622 | tcg_const_tl(0), l1); |
| 2709 | gen_op_load_fpr_FT0(rs2); | 2623 | gen_op_load_fpr_FT0(rs2); |
| @@ -2716,7 +2630,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2716,7 +2630,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2716 | l1 = gen_new_label(); | 2630 | l1 = gen_new_label(); |
| 2717 | cond = GET_FIELD_SP(insn, 14, 17); | 2631 | cond = GET_FIELD_SP(insn, 14, 17); |
| 2718 | rs1 = GET_FIELD(insn, 13, 17); | 2632 | rs1 = GET_FIELD(insn, 13, 17); |
| 2719 | - gen_movl_reg_T0(rs1); | 2633 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 2720 | tcg_gen_brcond_tl(gen_tcg_cond_reg[cond], cpu_T[0], | 2634 | tcg_gen_brcond_tl(gen_tcg_cond_reg[cond], cpu_T[0], |
| 2721 | tcg_const_tl(0), l1); | 2635 | tcg_const_tl(0), l1); |
| 2722 | gen_op_load_fpr_DT0(DFPREG(rs2)); | 2636 | gen_op_load_fpr_DT0(DFPREG(rs2)); |
| @@ -2730,7 +2644,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2730,7 +2644,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2730 | l1 = gen_new_label(); | 2644 | l1 = gen_new_label(); |
| 2731 | cond = GET_FIELD_SP(insn, 14, 17); | 2645 | cond = GET_FIELD_SP(insn, 14, 17); |
| 2732 | rs1 = GET_FIELD(insn, 13, 17); | 2646 | rs1 = GET_FIELD(insn, 13, 17); |
| 2733 | - gen_movl_reg_T0(rs1); | 2647 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 2734 | tcg_gen_brcond_tl(gen_tcg_cond_reg[cond], cpu_T[0], | 2648 | tcg_gen_brcond_tl(gen_tcg_cond_reg[cond], cpu_T[0], |
| 2735 | tcg_const_tl(0), l1); | 2649 | tcg_const_tl(0), l1); |
| 2736 | gen_op_load_fpr_QT0(QFPREG(rs2)); | 2650 | gen_op_load_fpr_QT0(QFPREG(rs2)); |
| @@ -2910,10 +2824,10 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2910,10 +2824,10 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2910 | tcg_gen_movi_tl(cpu_T[0], (int)rs2); | 2824 | tcg_gen_movi_tl(cpu_T[0], (int)rs2); |
| 2911 | } else { /* register */ | 2825 | } else { /* register */ |
| 2912 | rs2 = GET_FIELD(insn, 27, 31); | 2826 | rs2 = GET_FIELD(insn, 27, 31); |
| 2913 | - gen_movl_reg_T0(rs2); | 2827 | + gen_movl_reg_TN(rs2, cpu_T[0]); |
| 2914 | } | 2828 | } |
| 2915 | } else { | 2829 | } else { |
| 2916 | - gen_movl_reg_T0(rs1); | 2830 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 2917 | if (IS_IMM) { /* immediate */ | 2831 | if (IS_IMM) { /* immediate */ |
| 2918 | rs2 = GET_FIELDs(insn, 19, 31); | 2832 | rs2 = GET_FIELDs(insn, 19, 31); |
| 2919 | tcg_gen_ori_tl(cpu_T[0], cpu_T[0], (int)rs2); | 2833 | tcg_gen_ori_tl(cpu_T[0], cpu_T[0], (int)rs2); |
| @@ -2921,17 +2835,17 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2921,17 +2835,17 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2921 | // or x, %g0, y -> mov T1, x; mov y, T1 | 2835 | // or x, %g0, y -> mov T1, x; mov y, T1 |
| 2922 | rs2 = GET_FIELD(insn, 27, 31); | 2836 | rs2 = GET_FIELD(insn, 27, 31); |
| 2923 | if (rs2 != 0) { | 2837 | if (rs2 != 0) { |
| 2924 | - gen_movl_reg_T1(rs2); | ||
| 2925 | - gen_op_or_T1_T0(); | 2838 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 2839 | + tcg_gen_or_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 2926 | } | 2840 | } |
| 2927 | } | 2841 | } |
| 2928 | } | 2842 | } |
| 2929 | - gen_movl_T0_reg(rd); | 2843 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2930 | #endif | 2844 | #endif |
| 2931 | #ifdef TARGET_SPARC64 | 2845 | #ifdef TARGET_SPARC64 |
| 2932 | } else if (xop == 0x25) { /* sll, V9 sllx */ | 2846 | } else if (xop == 0x25) { /* sll, V9 sllx */ |
| 2933 | rs1 = GET_FIELD(insn, 13, 17); | 2847 | rs1 = GET_FIELD(insn, 13, 17); |
| 2934 | - gen_movl_reg_T0(rs1); | 2848 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 2935 | if (IS_IMM) { /* immediate */ | 2849 | if (IS_IMM) { /* immediate */ |
| 2936 | rs2 = GET_FIELDs(insn, 20, 31); | 2850 | rs2 = GET_FIELDs(insn, 20, 31); |
| 2937 | if (insn & (1 << 12)) { | 2851 | if (insn & (1 << 12)) { |
| @@ -2942,7 +2856,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2942,7 +2856,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2942 | } | 2856 | } |
| 2943 | } else { /* register */ | 2857 | } else { /* register */ |
| 2944 | rs2 = GET_FIELD(insn, 27, 31); | 2858 | rs2 = GET_FIELD(insn, 27, 31); |
| 2945 | - gen_movl_reg_T1(rs2); | 2859 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 2946 | if (insn & (1 << 12)) { | 2860 | if (insn & (1 << 12)) { |
| 2947 | tcg_gen_andi_i64(cpu_T[1], cpu_T[1], 0x3f); | 2861 | tcg_gen_andi_i64(cpu_T[1], cpu_T[1], 0x3f); |
| 2948 | tcg_gen_shl_i64(cpu_T[0], cpu_T[0], cpu_T[1]); | 2862 | tcg_gen_shl_i64(cpu_T[0], cpu_T[0], cpu_T[1]); |
| @@ -2952,10 +2866,10 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2952,10 +2866,10 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2952 | tcg_gen_shl_i64(cpu_T[0], cpu_T[0], cpu_T[1]); | 2866 | tcg_gen_shl_i64(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 2953 | } | 2867 | } |
| 2954 | } | 2868 | } |
| 2955 | - gen_movl_T0_reg(rd); | 2869 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2956 | } else if (xop == 0x26) { /* srl, V9 srlx */ | 2870 | } else if (xop == 0x26) { /* srl, V9 srlx */ |
| 2957 | rs1 = GET_FIELD(insn, 13, 17); | 2871 | rs1 = GET_FIELD(insn, 13, 17); |
| 2958 | - gen_movl_reg_T0(rs1); | 2872 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 2959 | if (IS_IMM) { /* immediate */ | 2873 | if (IS_IMM) { /* immediate */ |
| 2960 | rs2 = GET_FIELDs(insn, 20, 31); | 2874 | rs2 = GET_FIELDs(insn, 20, 31); |
| 2961 | if (insn & (1 << 12)) { | 2875 | if (insn & (1 << 12)) { |
| @@ -2966,7 +2880,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2966,7 +2880,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2966 | } | 2880 | } |
| 2967 | } else { /* register */ | 2881 | } else { /* register */ |
| 2968 | rs2 = GET_FIELD(insn, 27, 31); | 2882 | rs2 = GET_FIELD(insn, 27, 31); |
| 2969 | - gen_movl_reg_T1(rs2); | 2883 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 2970 | if (insn & (1 << 12)) { | 2884 | if (insn & (1 << 12)) { |
| 2971 | tcg_gen_andi_i64(cpu_T[1], cpu_T[1], 0x3f); | 2885 | tcg_gen_andi_i64(cpu_T[1], cpu_T[1], 0x3f); |
| 2972 | tcg_gen_shr_i64(cpu_T[0], cpu_T[0], cpu_T[1]); | 2886 | tcg_gen_shr_i64(cpu_T[0], cpu_T[0], cpu_T[1]); |
| @@ -2976,10 +2890,10 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2976,10 +2890,10 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2976 | tcg_gen_shr_i64(cpu_T[0], cpu_T[0], cpu_T[1]); | 2890 | tcg_gen_shr_i64(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 2977 | } | 2891 | } |
| 2978 | } | 2892 | } |
| 2979 | - gen_movl_T0_reg(rd); | 2893 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 2980 | } else if (xop == 0x27) { /* sra, V9 srax */ | 2894 | } else if (xop == 0x27) { /* sra, V9 srax */ |
| 2981 | rs1 = GET_FIELD(insn, 13, 17); | 2895 | rs1 = GET_FIELD(insn, 13, 17); |
| 2982 | - gen_movl_reg_T0(rs1); | 2896 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 2983 | if (IS_IMM) { /* immediate */ | 2897 | if (IS_IMM) { /* immediate */ |
| 2984 | rs2 = GET_FIELDs(insn, 20, 31); | 2898 | rs2 = GET_FIELDs(insn, 20, 31); |
| 2985 | if (insn & (1 << 12)) { | 2899 | if (insn & (1 << 12)) { |
| @@ -2991,7 +2905,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -2991,7 +2905,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 2991 | } | 2905 | } |
| 2992 | } else { /* register */ | 2906 | } else { /* register */ |
| 2993 | rs2 = GET_FIELD(insn, 27, 31); | 2907 | rs2 = GET_FIELD(insn, 27, 31); |
| 2994 | - gen_movl_reg_T1(rs2); | 2908 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 2995 | if (insn & (1 << 12)) { | 2909 | if (insn & (1 << 12)) { |
| 2996 | tcg_gen_andi_i64(cpu_T[1], cpu_T[1], 0x3f); | 2910 | tcg_gen_andi_i64(cpu_T[1], cpu_T[1], 0x3f); |
| 2997 | tcg_gen_sar_i64(cpu_T[0], cpu_T[0], cpu_T[1]); | 2911 | tcg_gen_sar_i64(cpu_T[0], cpu_T[0], cpu_T[1]); |
| @@ -3001,17 +2915,17 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3001,17 +2915,17 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3001 | tcg_gen_sar_i64(cpu_T[0], cpu_T[0], cpu_T[1]); | 2915 | tcg_gen_sar_i64(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3002 | } | 2916 | } |
| 3003 | } | 2917 | } |
| 3004 | - gen_movl_T0_reg(rd); | 2918 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3005 | #endif | 2919 | #endif |
| 3006 | } else if (xop < 0x36) { | 2920 | } else if (xop < 0x36) { |
| 3007 | rs1 = GET_FIELD(insn, 13, 17); | 2921 | rs1 = GET_FIELD(insn, 13, 17); |
| 3008 | - gen_movl_reg_T0(rs1); | 2922 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 3009 | if (IS_IMM) { /* immediate */ | 2923 | if (IS_IMM) { /* immediate */ |
| 3010 | rs2 = GET_FIELDs(insn, 19, 31); | 2924 | rs2 = GET_FIELDs(insn, 19, 31); |
| 3011 | - gen_movl_simm_T1(rs2); | 2925 | + tcg_gen_movi_tl(cpu_T[1], (int)rs2); |
| 3012 | } else { /* register */ | 2926 | } else { /* register */ |
| 3013 | rs2 = GET_FIELD(insn, 27, 31); | 2927 | rs2 = GET_FIELD(insn, 27, 31); |
| 3014 | - gen_movl_reg_T1(rs2); | 2928 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 3015 | } | 2929 | } |
| 3016 | if (xop < 0x20) { | 2930 | if (xop < 0x20) { |
| 3017 | switch (xop & ~0x10) { | 2931 | switch (xop & ~0x10) { |
| @@ -3019,7 +2933,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3019,7 +2933,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3019 | if (xop & 0x10) | 2933 | if (xop & 0x10) |
| 3020 | gen_op_add_T1_T0_cc(); | 2934 | gen_op_add_T1_T0_cc(); |
| 3021 | else | 2935 | else |
| 3022 | - gen_op_add_T1_T0(); | 2936 | + tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3023 | break; | 2937 | break; |
| 3024 | case 0x1: | 2938 | case 0x1: |
| 3025 | tcg_gen_and_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | 2939 | tcg_gen_and_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| @@ -3100,66 +3014,66 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3100,66 +3014,66 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3100 | break; | 3014 | break; |
| 3101 | #endif | 3015 | #endif |
| 3102 | case 0xe: | 3016 | case 0xe: |
| 3103 | - gen_op_udiv_T1_T0(); | 3017 | + tcg_gen_helper_1_2(helper_udiv, cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3104 | if (xop & 0x10) | 3018 | if (xop & 0x10) |
| 3105 | gen_op_div_cc(); | 3019 | gen_op_div_cc(); |
| 3106 | break; | 3020 | break; |
| 3107 | case 0xf: | 3021 | case 0xf: |
| 3108 | - gen_op_sdiv_T1_T0(); | 3022 | + tcg_gen_helper_1_2(helper_sdiv, cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3109 | if (xop & 0x10) | 3023 | if (xop & 0x10) |
| 3110 | gen_op_div_cc(); | 3024 | gen_op_div_cc(); |
| 3111 | break; | 3025 | break; |
| 3112 | default: | 3026 | default: |
| 3113 | goto illegal_insn; | 3027 | goto illegal_insn; |
| 3114 | } | 3028 | } |
| 3115 | - gen_movl_T0_reg(rd); | 3029 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3116 | } else { | 3030 | } else { |
| 3117 | switch (xop) { | 3031 | switch (xop) { |
| 3118 | case 0x20: /* taddcc */ | 3032 | case 0x20: /* taddcc */ |
| 3119 | gen_op_tadd_T1_T0_cc(); | 3033 | gen_op_tadd_T1_T0_cc(); |
| 3120 | - gen_movl_T0_reg(rd); | 3034 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3121 | break; | 3035 | break; |
| 3122 | case 0x21: /* tsubcc */ | 3036 | case 0x21: /* tsubcc */ |
| 3123 | gen_op_tsub_T1_T0_cc(); | 3037 | gen_op_tsub_T1_T0_cc(); |
| 3124 | - gen_movl_T0_reg(rd); | 3038 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3125 | break; | 3039 | break; |
| 3126 | case 0x22: /* taddcctv */ | 3040 | case 0x22: /* taddcctv */ |
| 3127 | save_state(dc); | 3041 | save_state(dc); |
| 3128 | gen_op_tadd_T1_T0_ccTV(); | 3042 | gen_op_tadd_T1_T0_ccTV(); |
| 3129 | - gen_movl_T0_reg(rd); | 3043 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3130 | break; | 3044 | break; |
| 3131 | case 0x23: /* tsubcctv */ | 3045 | case 0x23: /* tsubcctv */ |
| 3132 | save_state(dc); | 3046 | save_state(dc); |
| 3133 | gen_op_tsub_T1_T0_ccTV(); | 3047 | gen_op_tsub_T1_T0_ccTV(); |
| 3134 | - gen_movl_T0_reg(rd); | 3048 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3135 | break; | 3049 | break; |
| 3136 | case 0x24: /* mulscc */ | 3050 | case 0x24: /* mulscc */ |
| 3137 | gen_op_mulscc_T1_T0(); | 3051 | gen_op_mulscc_T1_T0(); |
| 3138 | - gen_movl_T0_reg(rd); | 3052 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3139 | break; | 3053 | break; |
| 3140 | #ifndef TARGET_SPARC64 | 3054 | #ifndef TARGET_SPARC64 |
| 3141 | case 0x25: /* sll */ | 3055 | case 0x25: /* sll */ |
| 3142 | tcg_gen_andi_tl(cpu_T[1], cpu_T[1], 0x1f); | 3056 | tcg_gen_andi_tl(cpu_T[1], cpu_T[1], 0x1f); |
| 3143 | tcg_gen_shl_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | 3057 | tcg_gen_shl_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3144 | - gen_movl_T0_reg(rd); | 3058 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3145 | break; | 3059 | break; |
| 3146 | case 0x26: /* srl */ | 3060 | case 0x26: /* srl */ |
| 3147 | tcg_gen_andi_tl(cpu_T[1], cpu_T[1], 0x1f); | 3061 | tcg_gen_andi_tl(cpu_T[1], cpu_T[1], 0x1f); |
| 3148 | tcg_gen_shr_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | 3062 | tcg_gen_shr_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3149 | - gen_movl_T0_reg(rd); | 3063 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3150 | break; | 3064 | break; |
| 3151 | case 0x27: /* sra */ | 3065 | case 0x27: /* sra */ |
| 3152 | tcg_gen_andi_tl(cpu_T[1], cpu_T[1], 0x1f); | 3066 | tcg_gen_andi_tl(cpu_T[1], cpu_T[1], 0x1f); |
| 3153 | tcg_gen_sar_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | 3067 | tcg_gen_sar_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3154 | - gen_movl_T0_reg(rd); | 3068 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3155 | break; | 3069 | break; |
| 3156 | #endif | 3070 | #endif |
| 3157 | case 0x30: | 3071 | case 0x30: |
| 3158 | { | 3072 | { |
| 3159 | switch(rd) { | 3073 | switch(rd) { |
| 3160 | case 0: /* wry */ | 3074 | case 0: /* wry */ |
| 3161 | - gen_op_xor_T1_T0(); | ||
| 3162 | - gen_op_movtl_env_T0(offsetof(CPUSPARCState, y)); | 3075 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3076 | + tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, y)); | ||
| 3163 | break; | 3077 | break; |
| 3164 | #ifndef TARGET_SPARC64 | 3078 | #ifndef TARGET_SPARC64 |
| 3165 | case 0x01 ... 0x0f: /* undefined in the | 3079 | case 0x01 ... 0x0f: /* undefined in the |
| @@ -3173,16 +3087,18 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3173,16 +3087,18 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3173 | break; | 3087 | break; |
| 3174 | #else | 3088 | #else |
| 3175 | case 0x2: /* V9 wrccr */ | 3089 | case 0x2: /* V9 wrccr */ |
| 3176 | - gen_op_xor_T1_T0(); | 3090 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3177 | tcg_gen_helper_0_1(helper_wrccr, cpu_T[0]); | 3091 | tcg_gen_helper_0_1(helper_wrccr, cpu_T[0]); |
| 3178 | break; | 3092 | break; |
| 3179 | case 0x3: /* V9 wrasi */ | 3093 | case 0x3: /* V9 wrasi */ |
| 3180 | - gen_op_xor_T1_T0(); | ||
| 3181 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, asi)); | 3094 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3095 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); | ||
| 3096 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, asi)); | ||
| 3182 | break; | 3097 | break; |
| 3183 | case 0x6: /* V9 wrfprs */ | 3098 | case 0x6: /* V9 wrfprs */ |
| 3184 | - gen_op_xor_T1_T0(); | ||
| 3185 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, fprs)); | 3099 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3100 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); | ||
| 3101 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, fprs)); | ||
| 3186 | save_state(dc); | 3102 | save_state(dc); |
| 3187 | gen_op_next_insn(); | 3103 | gen_op_next_insn(); |
| 3188 | tcg_gen_exit_tb(0); | 3104 | tcg_gen_exit_tb(0); |
| @@ -3197,8 +3113,8 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3197,8 +3113,8 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3197 | case 0x13: /* Graphics Status */ | 3113 | case 0x13: /* Graphics Status */ |
| 3198 | if (gen_trap_ifnofpu(dc)) | 3114 | if (gen_trap_ifnofpu(dc)) |
| 3199 | goto jmp_insn; | 3115 | goto jmp_insn; |
| 3200 | - gen_op_xor_T1_T0(); | ||
| 3201 | - gen_op_movtl_env_T0(offsetof(CPUSPARCState, gsr)); | 3116 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3117 | + tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, gsr)); | ||
| 3202 | break; | 3118 | break; |
| 3203 | case 0x17: /* Tick compare */ | 3119 | case 0x17: /* Tick compare */ |
| 3204 | #if !defined(CONFIG_USER_ONLY) | 3120 | #if !defined(CONFIG_USER_ONLY) |
| @@ -3208,8 +3124,9 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3208,8 +3124,9 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3208 | { | 3124 | { |
| 3209 | TCGv r_tickptr; | 3125 | TCGv r_tickptr; |
| 3210 | 3126 | ||
| 3211 | - gen_op_xor_T1_T0(); | ||
| 3212 | - gen_op_movtl_env_T0(offsetof(CPUSPARCState, | 3127 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], |
| 3128 | + cpu_T[1]); | ||
| 3129 | + tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, | ||
| 3213 | tick_cmpr)); | 3130 | tick_cmpr)); |
| 3214 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); | 3131 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); |
| 3215 | tcg_gen_ld_ptr(r_tickptr, cpu_env, | 3132 | tcg_gen_ld_ptr(r_tickptr, cpu_env, |
| @@ -3227,7 +3144,8 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3227,7 +3144,8 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3227 | { | 3144 | { |
| 3228 | TCGv r_tickptr; | 3145 | TCGv r_tickptr; |
| 3229 | 3146 | ||
| 3230 | - gen_op_xor_T1_T0(); | 3147 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], |
| 3148 | + cpu_T[1]); | ||
| 3231 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); | 3149 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); |
| 3232 | tcg_gen_ld_ptr(r_tickptr, cpu_env, | 3150 | tcg_gen_ld_ptr(r_tickptr, cpu_env, |
| 3233 | offsetof(CPUState, stick)); | 3151 | offsetof(CPUState, stick)); |
| @@ -3244,8 +3162,9 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3244,8 +3162,9 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3244 | { | 3162 | { |
| 3245 | TCGv r_tickptr; | 3163 | TCGv r_tickptr; |
| 3246 | 3164 | ||
| 3247 | - gen_op_xor_T1_T0(); | ||
| 3248 | - gen_op_movtl_env_T0(offsetof(CPUSPARCState, | 3165 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], |
| 3166 | + cpu_T[1]); | ||
| 3167 | + tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, | ||
| 3249 | stick_cmpr)); | 3168 | stick_cmpr)); |
| 3250 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); | 3169 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); |
| 3251 | tcg_gen_ld_ptr(r_tickptr, cpu_env, | 3170 | tcg_gen_ld_ptr(r_tickptr, cpu_env, |
| @@ -3290,7 +3209,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3290,7 +3209,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3290 | goto illegal_insn; | 3209 | goto illegal_insn; |
| 3291 | } | 3210 | } |
| 3292 | #else | 3211 | #else |
| 3293 | - gen_op_xor_T1_T0(); | 3212 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3294 | tcg_gen_helper_0_1(helper_wrpsr, cpu_T[0]); | 3213 | tcg_gen_helper_0_1(helper_wrpsr, cpu_T[0]); |
| 3295 | save_state(dc); | 3214 | save_state(dc); |
| 3296 | gen_op_next_insn(); | 3215 | gen_op_next_insn(); |
| @@ -3303,7 +3222,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3303,7 +3222,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3303 | { | 3222 | { |
| 3304 | if (!supervisor(dc)) | 3223 | if (!supervisor(dc)) |
| 3305 | goto priv_insn; | 3224 | goto priv_insn; |
| 3306 | - gen_op_xor_T1_T0(); | 3225 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3307 | #ifdef TARGET_SPARC64 | 3226 | #ifdef TARGET_SPARC64 |
| 3308 | switch (rd) { | 3227 | switch (rd) { |
| 3309 | case 0: // tpc | 3228 | case 0: // tpc |
| @@ -3367,7 +3286,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3367,7 +3286,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3367 | } | 3286 | } |
| 3368 | break; | 3287 | break; |
| 3369 | case 5: // tba | 3288 | case 5: // tba |
| 3370 | - gen_op_movtl_env_T0(offsetof(CPUSPARCState, tbr)); | 3289 | + tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, tbr)); |
| 3371 | break; | 3290 | break; |
| 3372 | case 6: // pstate | 3291 | case 6: // pstate |
| 3373 | save_state(dc); | 3292 | save_state(dc); |
| @@ -3377,43 +3296,53 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3377,43 +3296,53 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3377 | dc->is_br = 1; | 3296 | dc->is_br = 1; |
| 3378 | break; | 3297 | break; |
| 3379 | case 7: // tl | 3298 | case 7: // tl |
| 3380 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, tl)); | 3299 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3300 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, tl)); | ||
| 3381 | break; | 3301 | break; |
| 3382 | case 8: // pil | 3302 | case 8: // pil |
| 3383 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, psrpil)); | 3303 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3304 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, psrpil)); | ||
| 3384 | break; | 3305 | break; |
| 3385 | case 9: // cwp | 3306 | case 9: // cwp |
| 3386 | tcg_gen_helper_0_1(helper_wrcwp, cpu_T[0]); | 3307 | tcg_gen_helper_0_1(helper_wrcwp, cpu_T[0]); |
| 3387 | break; | 3308 | break; |
| 3388 | case 10: // cansave | 3309 | case 10: // cansave |
| 3389 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, cansave)); | 3310 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3311 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, cansave)); | ||
| 3390 | break; | 3312 | break; |
| 3391 | case 11: // canrestore | 3313 | case 11: // canrestore |
| 3392 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, canrestore)); | 3314 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3315 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, canrestore)); | ||
| 3393 | break; | 3316 | break; |
| 3394 | case 12: // cleanwin | 3317 | case 12: // cleanwin |
| 3395 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, cleanwin)); | 3318 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3319 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, cleanwin)); | ||
| 3396 | break; | 3320 | break; |
| 3397 | case 13: // otherwin | 3321 | case 13: // otherwin |
| 3398 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, otherwin)); | 3322 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3323 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, otherwin)); | ||
| 3399 | break; | 3324 | break; |
| 3400 | case 14: // wstate | 3325 | case 14: // wstate |
| 3401 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, wstate)); | 3326 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3327 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, wstate)); | ||
| 3402 | break; | 3328 | break; |
| 3403 | case 16: // UA2005 gl | 3329 | case 16: // UA2005 gl |
| 3404 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, gl)); | 3330 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3331 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, gl)); | ||
| 3405 | break; | 3332 | break; |
| 3406 | case 26: // UA2005 strand status | 3333 | case 26: // UA2005 strand status |
| 3407 | if (!hypervisor(dc)) | 3334 | if (!hypervisor(dc)) |
| 3408 | goto priv_insn; | 3335 | goto priv_insn; |
| 3409 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, ssr)); | 3336 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3337 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, ssr)); | ||
| 3410 | break; | 3338 | break; |
| 3411 | default: | 3339 | default: |
| 3412 | goto illegal_insn; | 3340 | goto illegal_insn; |
| 3413 | } | 3341 | } |
| 3414 | #else | 3342 | #else |
| 3415 | tcg_gen_andi_tl(cpu_T[0], cpu_T[0], ((1 << NWINDOWS) - 1)); | 3343 | tcg_gen_andi_tl(cpu_T[0], cpu_T[0], ((1 << NWINDOWS) - 1)); |
| 3416 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, wim)); | 3344 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3345 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, wim)); | ||
| 3417 | #endif | 3346 | #endif |
| 3418 | } | 3347 | } |
| 3419 | break; | 3348 | break; |
| @@ -3422,12 +3351,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3422,12 +3351,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3422 | #ifndef TARGET_SPARC64 | 3351 | #ifndef TARGET_SPARC64 |
| 3423 | if (!supervisor(dc)) | 3352 | if (!supervisor(dc)) |
| 3424 | goto priv_insn; | 3353 | goto priv_insn; |
| 3425 | - gen_op_xor_T1_T0(); | ||
| 3426 | - gen_op_movtl_env_T0(offsetof(CPUSPARCState, tbr)); | 3354 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3355 | + tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, tbr)); | ||
| 3427 | #else | 3356 | #else |
| 3428 | if (!hypervisor(dc)) | 3357 | if (!hypervisor(dc)) |
| 3429 | goto priv_insn; | 3358 | goto priv_insn; |
| 3430 | - gen_op_xor_T1_T0(); | 3359 | + tcg_gen_xor_tl(cpu_T[0], cpu_T[0], cpu_T[1]); |
| 3431 | switch (rd) { | 3360 | switch (rd) { |
| 3432 | case 0: // hpstate | 3361 | case 0: // hpstate |
| 3433 | // XXX gen_op_wrhpstate(); | 3362 | // XXX gen_op_wrhpstate(); |
| @@ -3440,16 +3369,18 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3440,16 +3369,18 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3440 | // XXX gen_op_wrhtstate(); | 3369 | // XXX gen_op_wrhtstate(); |
| 3441 | break; | 3370 | break; |
| 3442 | case 3: // hintp | 3371 | case 3: // hintp |
| 3443 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, hintp)); | 3372 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3373 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, hintp)); | ||
| 3444 | break; | 3374 | break; |
| 3445 | case 5: // htba | 3375 | case 5: // htba |
| 3446 | - gen_op_movl_env_T0(offsetof(CPUSPARCState, htba)); | 3376 | + tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_T[0]); |
| 3377 | + tcg_gen_st_i32(cpu_tmp32, cpu_env, offsetof(CPUSPARCState, htba)); | ||
| 3447 | break; | 3378 | break; |
| 3448 | case 31: // hstick_cmpr | 3379 | case 31: // hstick_cmpr |
| 3449 | { | 3380 | { |
| 3450 | TCGv r_tickptr; | 3381 | TCGv r_tickptr; |
| 3451 | 3382 | ||
| 3452 | - gen_op_movtl_env_T0(offsetof(CPUSPARCState, | 3383 | + tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUSPARCState, |
| 3453 | hstick_cmpr)); | 3384 | hstick_cmpr)); |
| 3454 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); | 3385 | r_tickptr = tcg_temp_new(TCG_TYPE_PTR); |
| 3455 | tcg_gen_ld_ptr(r_tickptr, cpu_env, | 3386 | tcg_gen_ld_ptr(r_tickptr, cpu_env, |
| @@ -3493,34 +3424,34 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3493,34 +3424,34 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3493 | tcg_const_tl(0), l1); | 3424 | tcg_const_tl(0), l1); |
| 3494 | if (IS_IMM) { /* immediate */ | 3425 | if (IS_IMM) { /* immediate */ |
| 3495 | rs2 = GET_FIELD_SPs(insn, 0, 10); | 3426 | rs2 = GET_FIELD_SPs(insn, 0, 10); |
| 3496 | - gen_movl_simm_T1(rs2); | 3427 | + tcg_gen_movi_tl(cpu_T[1], (int)rs2); |
| 3497 | } else { | 3428 | } else { |
| 3498 | rs2 = GET_FIELD_SP(insn, 0, 4); | 3429 | rs2 = GET_FIELD_SP(insn, 0, 4); |
| 3499 | - gen_movl_reg_T1(rs2); | 3430 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 3500 | } | 3431 | } |
| 3501 | - gen_movl_T1_reg(rd); | 3432 | + gen_movl_TN_reg(rd, cpu_T[1]); |
| 3502 | gen_set_label(l1); | 3433 | gen_set_label(l1); |
| 3503 | tcg_gen_discard_tl(r_cond); | 3434 | tcg_gen_discard_tl(r_cond); |
| 3504 | break; | 3435 | break; |
| 3505 | } | 3436 | } |
| 3506 | case 0x2d: /* V9 sdivx */ | 3437 | case 0x2d: /* V9 sdivx */ |
| 3507 | gen_op_sdivx_T1_T0(); | 3438 | gen_op_sdivx_T1_T0(); |
| 3508 | - gen_movl_T0_reg(rd); | 3439 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3509 | break; | 3440 | break; |
| 3510 | case 0x2e: /* V9 popc */ | 3441 | case 0x2e: /* V9 popc */ |
| 3511 | { | 3442 | { |
| 3512 | if (IS_IMM) { /* immediate */ | 3443 | if (IS_IMM) { /* immediate */ |
| 3513 | rs2 = GET_FIELD_SPs(insn, 0, 12); | 3444 | rs2 = GET_FIELD_SPs(insn, 0, 12); |
| 3514 | - gen_movl_simm_T1(rs2); | 3445 | + tcg_gen_movi_tl(cpu_T[1], (int)rs2); |
| 3515 | // XXX optimize: popc(constant) | 3446 | // XXX optimize: popc(constant) |
| 3516 | } | 3447 | } |
| 3517 | else { | 3448 | else { |
| 3518 | rs2 = GET_FIELD_SP(insn, 0, 4); | 3449 | rs2 = GET_FIELD_SP(insn, 0, 4); |
| 3519 | - gen_movl_reg_T1(rs2); | 3450 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 3520 | } | 3451 | } |
| 3521 | tcg_gen_helper_1_1(helper_popc, cpu_T[0], | 3452 | tcg_gen_helper_1_1(helper_popc, cpu_T[0], |
| 3522 | cpu_T[1]); | 3453 | cpu_T[1]); |
| 3523 | - gen_movl_T0_reg(rd); | 3454 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3524 | } | 3455 | } |
| 3525 | case 0x2f: /* V9 movr */ | 3456 | case 0x2f: /* V9 movr */ |
| 3526 | { | 3457 | { |
| @@ -3528,7 +3459,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3528,7 +3459,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3528 | int l1; | 3459 | int l1; |
| 3529 | 3460 | ||
| 3530 | rs1 = GET_FIELD(insn, 13, 17); | 3461 | rs1 = GET_FIELD(insn, 13, 17); |
| 3531 | - gen_movl_reg_T0(rs1); | 3462 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 3532 | 3463 | ||
| 3533 | l1 = gen_new_label(); | 3464 | l1 = gen_new_label(); |
| 3534 | 3465 | ||
| @@ -3536,12 +3467,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3536,12 +3467,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3536 | tcg_const_tl(0), l1); | 3467 | tcg_const_tl(0), l1); |
| 3537 | if (IS_IMM) { /* immediate */ | 3468 | if (IS_IMM) { /* immediate */ |
| 3538 | rs2 = GET_FIELD_SPs(insn, 0, 9); | 3469 | rs2 = GET_FIELD_SPs(insn, 0, 9); |
| 3539 | - gen_movl_simm_T1(rs2); | 3470 | + tcg_gen_movi_tl(cpu_T[1], (int)rs2); |
| 3540 | } else { | 3471 | } else { |
| 3541 | rs2 = GET_FIELD_SP(insn, 0, 4); | 3472 | rs2 = GET_FIELD_SP(insn, 0, 4); |
| 3542 | - gen_movl_reg_T1(rs2); | 3473 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 3543 | } | 3474 | } |
| 3544 | - gen_movl_T1_reg(rd); | 3475 | + gen_movl_TN_reg(rd, cpu_T[1]); |
| 3545 | gen_set_label(l1); | 3476 | gen_set_label(l1); |
| 3546 | break; | 3477 | break; |
| 3547 | } | 3478 | } |
| @@ -3574,34 +3505,34 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3574,34 +3505,34 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3574 | // XXX | 3505 | // XXX |
| 3575 | goto illegal_insn; | 3506 | goto illegal_insn; |
| 3576 | case 0x010: /* VIS I array8 */ | 3507 | case 0x010: /* VIS I array8 */ |
| 3577 | - gen_movl_reg_T0(rs1); | ||
| 3578 | - gen_movl_reg_T1(rs2); | 3508 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 3509 | + gen_movl_reg_TN(rs2, cpu_T[1]); | ||
| 3579 | tcg_gen_helper_1_2(helper_array8, cpu_T[0], cpu_T[0], | 3510 | tcg_gen_helper_1_2(helper_array8, cpu_T[0], cpu_T[0], |
| 3580 | cpu_T[1]); | 3511 | cpu_T[1]); |
| 3581 | - gen_movl_T0_reg(rd); | 3512 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3582 | break; | 3513 | break; |
| 3583 | case 0x012: /* VIS I array16 */ | 3514 | case 0x012: /* VIS I array16 */ |
| 3584 | - gen_movl_reg_T0(rs1); | ||
| 3585 | - gen_movl_reg_T1(rs2); | 3515 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 3516 | + gen_movl_reg_TN(rs2, cpu_T[1]); | ||
| 3586 | tcg_gen_helper_1_2(helper_array8, cpu_T[0], cpu_T[0], | 3517 | tcg_gen_helper_1_2(helper_array8, cpu_T[0], cpu_T[0], |
| 3587 | cpu_T[1]); | 3518 | cpu_T[1]); |
| 3588 | tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 1); | 3519 | tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 1); |
| 3589 | - gen_movl_T0_reg(rd); | 3520 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3590 | break; | 3521 | break; |
| 3591 | case 0x014: /* VIS I array32 */ | 3522 | case 0x014: /* VIS I array32 */ |
| 3592 | - gen_movl_reg_T0(rs1); | ||
| 3593 | - gen_movl_reg_T1(rs2); | 3523 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 3524 | + gen_movl_reg_TN(rs2, cpu_T[1]); | ||
| 3594 | tcg_gen_helper_1_2(helper_array8, cpu_T[0], cpu_T[0], | 3525 | tcg_gen_helper_1_2(helper_array8, cpu_T[0], cpu_T[0], |
| 3595 | cpu_T[1]); | 3526 | cpu_T[1]); |
| 3596 | tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 2); | 3527 | tcg_gen_shli_i64(cpu_T[0], cpu_T[0], 2); |
| 3597 | - gen_movl_T0_reg(rd); | 3528 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3598 | break; | 3529 | break; |
| 3599 | case 0x018: /* VIS I alignaddr */ | 3530 | case 0x018: /* VIS I alignaddr */ |
| 3600 | - gen_movl_reg_T0(rs1); | ||
| 3601 | - gen_movl_reg_T1(rs2); | 3531 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 3532 | + gen_movl_reg_TN(rs2, cpu_T[1]); | ||
| 3602 | tcg_gen_helper_1_2(helper_alignaddr, cpu_T[0], cpu_T[0], | 3533 | tcg_gen_helper_1_2(helper_alignaddr, cpu_T[0], cpu_T[0], |
| 3603 | cpu_T[1]); | 3534 | cpu_T[1]); |
| 3604 | - gen_movl_T0_reg(rd); | 3535 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 3605 | break; | 3536 | break; |
| 3606 | case 0x019: /* VIS II bmask */ | 3537 | case 0x019: /* VIS II bmask */ |
| 3607 | case 0x01a: /* VIS I alignaddrl */ | 3538 | case 0x01a: /* VIS I alignaddrl */ |
| @@ -3964,7 +3895,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3964,7 +3895,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3964 | } else if (xop == 0x39) { /* V9 return */ | 3895 | } else if (xop == 0x39) { /* V9 return */ |
| 3965 | rs1 = GET_FIELD(insn, 13, 17); | 3896 | rs1 = GET_FIELD(insn, 13, 17); |
| 3966 | save_state(dc); | 3897 | save_state(dc); |
| 3967 | - gen_movl_reg_T0(rs1); | 3898 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 3968 | if (IS_IMM) { /* immediate */ | 3899 | if (IS_IMM) { /* immediate */ |
| 3969 | rs2 = GET_FIELDs(insn, 19, 31); | 3900 | rs2 = GET_FIELDs(insn, 19, 31); |
| 3970 | tcg_gen_addi_tl(cpu_T[0], cpu_T[0], (int)rs2); | 3901 | tcg_gen_addi_tl(cpu_T[0], cpu_T[0], (int)rs2); |
| @@ -3973,8 +3904,8 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3973,8 +3904,8 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3973 | #if defined(OPTIM) | 3904 | #if defined(OPTIM) |
| 3974 | if (rs2) { | 3905 | if (rs2) { |
| 3975 | #endif | 3906 | #endif |
| 3976 | - gen_movl_reg_T1(rs2); | ||
| 3977 | - gen_op_add_T1_T0(); | 3907 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 3908 | + tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 3978 | #if defined(OPTIM) | 3909 | #if defined(OPTIM) |
| 3979 | } | 3910 | } |
| 3980 | #endif | 3911 | #endif |
| @@ -3988,7 +3919,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3988,7 +3919,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3988 | #endif | 3919 | #endif |
| 3989 | } else { | 3920 | } else { |
| 3990 | rs1 = GET_FIELD(insn, 13, 17); | 3921 | rs1 = GET_FIELD(insn, 13, 17); |
| 3991 | - gen_movl_reg_T0(rs1); | 3922 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 3992 | if (IS_IMM) { /* immediate */ | 3923 | if (IS_IMM) { /* immediate */ |
| 3993 | rs2 = GET_FIELDs(insn, 19, 31); | 3924 | rs2 = GET_FIELDs(insn, 19, 31); |
| 3994 | tcg_gen_addi_tl(cpu_T[0], cpu_T[0], (int)rs2); | 3925 | tcg_gen_addi_tl(cpu_T[0], cpu_T[0], (int)rs2); |
| @@ -3997,8 +3928,8 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -3997,8 +3928,8 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 3997 | #if defined(OPTIM) | 3928 | #if defined(OPTIM) |
| 3998 | if (rs2) { | 3929 | if (rs2) { |
| 3999 | #endif | 3930 | #endif |
| 4000 | - gen_movl_reg_T1(rs2); | ||
| 4001 | - gen_op_add_T1_T0(); | 3931 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 3932 | + tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 4002 | #if defined(OPTIM) | 3933 | #if defined(OPTIM) |
| 4003 | } | 3934 | } |
| 4004 | #endif | 3935 | #endif |
| @@ -4008,7 +3939,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4008,7 +3939,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4008 | { | 3939 | { |
| 4009 | if (rd != 0) { | 3940 | if (rd != 0) { |
| 4010 | tcg_gen_movi_tl(cpu_T[1], dc->pc); | 3941 | tcg_gen_movi_tl(cpu_T[1], dc->pc); |
| 4011 | - gen_movl_T1_reg(rd); | 3942 | + gen_movl_TN_reg(rd, cpu_T[1]); |
| 4012 | } | 3943 | } |
| 4013 | gen_mov_pc_npc(dc); | 3944 | gen_mov_pc_npc(dc); |
| 4014 | gen_op_check_align_T0_3(); | 3945 | gen_op_check_align_T0_3(); |
| @@ -4035,12 +3966,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4035,12 +3966,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4035 | case 0x3c: /* save */ | 3966 | case 0x3c: /* save */ |
| 4036 | save_state(dc); | 3967 | save_state(dc); |
| 4037 | tcg_gen_helper_0_0(helper_save); | 3968 | tcg_gen_helper_0_0(helper_save); |
| 4038 | - gen_movl_T0_reg(rd); | 3969 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 4039 | break; | 3970 | break; |
| 4040 | case 0x3d: /* restore */ | 3971 | case 0x3d: /* restore */ |
| 4041 | save_state(dc); | 3972 | save_state(dc); |
| 4042 | tcg_gen_helper_0_0(helper_restore); | 3973 | tcg_gen_helper_0_0(helper_restore); |
| 4043 | - gen_movl_T0_reg(rd); | 3974 | + gen_movl_TN_reg(rd, cpu_T[0]); |
| 4044 | break; | 3975 | break; |
| 4045 | #if !defined(CONFIG_USER_ONLY) && defined(TARGET_SPARC64) | 3976 | #if !defined(CONFIG_USER_ONLY) && defined(TARGET_SPARC64) |
| 4046 | case 0x3e: /* V9 done/retry */ | 3977 | case 0x3e: /* V9 done/retry */ |
| @@ -4078,11 +4009,11 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4078,11 +4009,11 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4078 | unsigned int xop = GET_FIELD(insn, 7, 12); | 4009 | unsigned int xop = GET_FIELD(insn, 7, 12); |
| 4079 | rs1 = GET_FIELD(insn, 13, 17); | 4010 | rs1 = GET_FIELD(insn, 13, 17); |
| 4080 | save_state(dc); | 4011 | save_state(dc); |
| 4081 | - gen_movl_reg_T0(rs1); | 4012 | + gen_movl_reg_TN(rs1, cpu_T[0]); |
| 4082 | if (xop == 0x3c || xop == 0x3e) | 4013 | if (xop == 0x3c || xop == 0x3e) |
| 4083 | { | 4014 | { |
| 4084 | rs2 = GET_FIELD(insn, 27, 31); | 4015 | rs2 = GET_FIELD(insn, 27, 31); |
| 4085 | - gen_movl_reg_T1(rs2); | 4016 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 4086 | } | 4017 | } |
| 4087 | else if (IS_IMM) { /* immediate */ | 4018 | else if (IS_IMM) { /* immediate */ |
| 4088 | rs2 = GET_FIELDs(insn, 19, 31); | 4019 | rs2 = GET_FIELDs(insn, 19, 31); |
| @@ -4092,8 +4023,8 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4092,8 +4023,8 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4092 | #if defined(OPTIM) | 4023 | #if defined(OPTIM) |
| 4093 | if (rs2 != 0) { | 4024 | if (rs2 != 0) { |
| 4094 | #endif | 4025 | #endif |
| 4095 | - gen_movl_reg_T1(rs2); | ||
| 4096 | - gen_op_add_T1_T0(); | 4026 | + gen_movl_reg_TN(rs2, cpu_T[1]); |
| 4027 | + tcg_gen_add_tl(cpu_T[0], cpu_T[0], cpu_T[1]); | ||
| 4097 | #if defined(OPTIM) | 4028 | #if defined(OPTIM) |
| 4098 | } | 4029 | } |
| 4099 | #endif | 4030 | #endif |
| @@ -4125,7 +4056,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4125,7 +4056,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4125 | tcg_gen_qemu_ld64(cpu_tmp64, cpu_T[0], dc->mem_idx); | 4056 | tcg_gen_qemu_ld64(cpu_tmp64, cpu_T[0], dc->mem_idx); |
| 4126 | tcg_gen_trunc_i64_tl(cpu_T[0], cpu_tmp64); | 4057 | tcg_gen_trunc_i64_tl(cpu_T[0], cpu_tmp64); |
| 4127 | tcg_gen_andi_tl(cpu_T[0], cpu_T[0], 0xffffffffULL); | 4058 | tcg_gen_andi_tl(cpu_T[0], cpu_T[0], 0xffffffffULL); |
| 4128 | - gen_movl_T0_reg(rd + 1); | 4059 | + gen_movl_TN_reg(rd + 1, cpu_T[0]); |
| 4129 | tcg_gen_shri_i64(cpu_tmp64, cpu_tmp64, 32); | 4060 | tcg_gen_shri_i64(cpu_tmp64, cpu_tmp64, 32); |
| 4130 | tcg_gen_trunc_i64_tl(cpu_T[1], cpu_tmp64); | 4061 | tcg_gen_trunc_i64_tl(cpu_T[1], cpu_tmp64); |
| 4131 | tcg_gen_andi_tl(cpu_T[1], cpu_T[1], 0xffffffffULL); | 4062 | tcg_gen_andi_tl(cpu_T[1], cpu_T[1], 0xffffffffULL); |
| @@ -4147,7 +4078,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4147,7 +4078,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4147 | break; | 4078 | break; |
| 4148 | case 0x0f: /* swap register with memory. Also atomically */ | 4079 | case 0x0f: /* swap register with memory. Also atomically */ |
| 4149 | gen_op_check_align_T0_3(); | 4080 | gen_op_check_align_T0_3(); |
| 4150 | - gen_movl_reg_T1(rd); | 4081 | + gen_movl_reg_TN(rd, cpu_T[1]); |
| 4151 | ABI32_MASK(cpu_T[0]); | 4082 | ABI32_MASK(cpu_T[0]); |
| 4152 | tcg_gen_qemu_ld32u(cpu_tmp32, cpu_T[0], dc->mem_idx); | 4083 | tcg_gen_qemu_ld32u(cpu_tmp32, cpu_T[0], dc->mem_idx); |
| 4153 | tcg_gen_qemu_st32(cpu_T[1], cpu_T[0], dc->mem_idx); | 4084 | tcg_gen_qemu_st32(cpu_T[1], cpu_T[0], dc->mem_idx); |
| @@ -4194,7 +4125,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4194,7 +4125,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4194 | goto illegal_insn; | 4125 | goto illegal_insn; |
| 4195 | gen_op_check_align_T0_7(); | 4126 | gen_op_check_align_T0_7(); |
| 4196 | gen_ldda_asi(insn); | 4127 | gen_ldda_asi(insn); |
| 4197 | - gen_movl_T0_reg(rd + 1); | 4128 | + gen_movl_TN_reg(rd + 1, cpu_T[0]); |
| 4198 | break; | 4129 | break; |
| 4199 | case 0x19: /* load signed byte alternate */ | 4130 | case 0x19: /* load signed byte alternate */ |
| 4200 | #ifndef TARGET_SPARC64 | 4131 | #ifndef TARGET_SPARC64 |
| @@ -4232,7 +4163,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4232,7 +4163,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4232 | goto priv_insn; | 4163 | goto priv_insn; |
| 4233 | #endif | 4164 | #endif |
| 4234 | gen_op_check_align_T0_3(); | 4165 | gen_op_check_align_T0_3(); |
| 4235 | - gen_movl_reg_T1(rd); | 4166 | + gen_movl_reg_TN(rd, cpu_T[1]); |
| 4236 | gen_swap_asi(insn); | 4167 | gen_swap_asi(insn); |
| 4237 | break; | 4168 | break; |
| 4238 | 4169 | ||
| @@ -4286,7 +4217,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4286,7 +4217,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4286 | default: | 4217 | default: |
| 4287 | goto illegal_insn; | 4218 | goto illegal_insn; |
| 4288 | } | 4219 | } |
| 4289 | - gen_movl_T1_reg(rd); | 4220 | + gen_movl_TN_reg(rd, cpu_T[1]); |
| 4290 | #ifdef TARGET_SPARC64 | 4221 | #ifdef TARGET_SPARC64 |
| 4291 | skip_move: ; | 4222 | skip_move: ; |
| 4292 | #endif | 4223 | #endif |
| @@ -4326,7 +4257,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4326,7 +4257,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4326 | } | 4257 | } |
| 4327 | } else if (xop < 8 || (xop >= 0x14 && xop < 0x18) || \ | 4258 | } else if (xop < 8 || (xop >= 0x14 && xop < 0x18) || \ |
| 4328 | xop == 0xe || xop == 0x1e) { | 4259 | xop == 0xe || xop == 0x1e) { |
| 4329 | - gen_movl_reg_T1(rd); | 4260 | + gen_movl_reg_TN(rd, cpu_T[1]); |
| 4330 | switch (xop) { | 4261 | switch (xop) { |
| 4331 | case 0x4: /* store word */ | 4262 | case 0x4: /* store word */ |
| 4332 | gen_op_check_align_T0_3(); | 4263 | gen_op_check_align_T0_3(); |
| @@ -4359,7 +4290,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4359,7 +4290,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4359 | #else /* __i386__ */ | 4290 | #else /* __i386__ */ |
| 4360 | gen_op_check_align_T0_7(); | 4291 | gen_op_check_align_T0_7(); |
| 4361 | flush_T2(dc); | 4292 | flush_T2(dc); |
| 4362 | - gen_movl_reg_T2(rd + 1); | 4293 | + gen_movl_reg_TN(rd + 1, cpu_T[2]); |
| 4363 | gen_op_ldst(std); | 4294 | gen_op_ldst(std); |
| 4364 | #endif /* __i386__ */ | 4295 | #endif /* __i386__ */ |
| 4365 | break; | 4296 | break; |
| @@ -4497,12 +4428,12 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4497,12 +4428,12 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4497 | case 0x3c: /* V9 casa */ | 4428 | case 0x3c: /* V9 casa */ |
| 4498 | gen_op_check_align_T0_3(); | 4429 | gen_op_check_align_T0_3(); |
| 4499 | gen_cas_asi(insn, rd); | 4430 | gen_cas_asi(insn, rd); |
| 4500 | - gen_movl_T1_reg(rd); | 4431 | + gen_movl_TN_reg(rd, cpu_T[1]); |
| 4501 | break; | 4432 | break; |
| 4502 | case 0x3e: /* V9 casxa */ | 4433 | case 0x3e: /* V9 casxa */ |
| 4503 | gen_op_check_align_T0_7(); | 4434 | gen_op_check_align_T0_7(); |
| 4504 | gen_casx_asi(insn, rd); | 4435 | gen_casx_asi(insn, rd); |
| 4505 | - gen_movl_T1_reg(rd); | 4436 | + gen_movl_TN_reg(rd, cpu_T[1]); |
| 4506 | break; | 4437 | break; |
| 4507 | #else | 4438 | #else |
| 4508 | case 0x34: /* stc */ | 4439 | case 0x34: /* stc */ |
| @@ -4536,13 +4467,13 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4536,13 +4467,13 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4536 | return; | 4467 | return; |
| 4537 | illegal_insn: | 4468 | illegal_insn: |
| 4538 | save_state(dc); | 4469 | save_state(dc); |
| 4539 | - gen_op_exception(TT_ILL_INSN); | 4470 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_ILL_INSN)); |
| 4540 | dc->is_br = 1; | 4471 | dc->is_br = 1; |
| 4541 | return; | 4472 | return; |
| 4542 | #if !defined(CONFIG_USER_ONLY) | 4473 | #if !defined(CONFIG_USER_ONLY) |
| 4543 | priv_insn: | 4474 | priv_insn: |
| 4544 | save_state(dc); | 4475 | save_state(dc); |
| 4545 | - gen_op_exception(TT_PRIV_INSN); | 4476 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_PRIV_INSN)); |
| 4546 | dc->is_br = 1; | 4477 | dc->is_br = 1; |
| 4547 | return; | 4478 | return; |
| 4548 | nfpu_insn: | 4479 | nfpu_insn: |
| @@ -4561,7 +4492,7 @@ static void disas_sparc_insn(DisasContext * dc) | @@ -4561,7 +4492,7 @@ static void disas_sparc_insn(DisasContext * dc) | ||
| 4561 | #ifndef TARGET_SPARC64 | 4492 | #ifndef TARGET_SPARC64 |
| 4562 | ncp_insn: | 4493 | ncp_insn: |
| 4563 | save_state(dc); | 4494 | save_state(dc); |
| 4564 | - gen_op_exception(TT_NCP_INSN); | 4495 | + tcg_gen_helper_0_1(raise_exception, tcg_const_i32(TT_NCP_INSN)); |
| 4565 | dc->is_br = 1; | 4496 | dc->is_br = 1; |
| 4566 | return; | 4497 | return; |
| 4567 | #endif | 4498 | #endif |
| @@ -4634,7 +4565,7 @@ static inline int gen_intermediate_code_internal(TranslationBlock * tb, | @@ -4634,7 +4565,7 @@ static inline int gen_intermediate_code_internal(TranslationBlock * tb, | ||
| 4634 | /* if single step mode, we generate only one instruction and | 4565 | /* if single step mode, we generate only one instruction and |
| 4635 | generate an exception */ | 4566 | generate an exception */ |
| 4636 | if (env->singlestep_enabled) { | 4567 | if (env->singlestep_enabled) { |
| 4637 | - gen_jmp_im(dc->pc); | 4568 | + tcg_gen_movi_tl(cpu_pc, dc->pc); |
| 4638 | tcg_gen_exit_tb(0); | 4569 | tcg_gen_exit_tb(0); |
| 4639 | break; | 4570 | break; |
| 4640 | } | 4571 | } |
| @@ -4646,10 +4577,10 @@ static inline int gen_intermediate_code_internal(TranslationBlock * tb, | @@ -4646,10 +4577,10 @@ static inline int gen_intermediate_code_internal(TranslationBlock * tb, | ||
| 4646 | if (dc->pc != DYNAMIC_PC && | 4577 | if (dc->pc != DYNAMIC_PC && |
| 4647 | (dc->npc != DYNAMIC_PC && dc->npc != JUMP_PC)) { | 4578 | (dc->npc != DYNAMIC_PC && dc->npc != JUMP_PC)) { |
| 4648 | /* static PC and NPC: we can use direct chaining */ | 4579 | /* static PC and NPC: we can use direct chaining */ |
| 4649 | - gen_branch(dc, dc->pc, dc->npc); | 4580 | + gen_goto_tb(dc, 0, dc->pc, dc->npc); |
| 4650 | } else { | 4581 | } else { |
| 4651 | if (dc->pc != DYNAMIC_PC) | 4582 | if (dc->pc != DYNAMIC_PC) |
| 4652 | - gen_jmp_im(dc->pc); | 4583 | + tcg_gen_movi_tl(cpu_pc, dc->pc); |
| 4653 | save_npc(dc); | 4584 | save_npc(dc); |
| 4654 | tcg_gen_exit_tb(0); | 4585 | tcg_gen_exit_tb(0); |
| 4655 | } | 4586 | } |