Commit ae2dbf7fb04194c367c3352f716715bb569602ed

Authored by ths
1 parent 2382dc6b

Micro-optimize back-to-back store-load sequences.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3743 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 135 additions and 103 deletions
target-mips/translate.c
@@ -543,6 +543,8 @@ typedef struct DisasContext { @@ -543,6 +543,8 @@ typedef struct DisasContext {
543 uint32_t hflags, saved_hflags; 543 uint32_t hflags, saved_hflags;
544 int bstate; 544 int bstate;
545 target_ulong btarget; 545 target_ulong btarget;
  546 + void *last_T0_store;
  547 + int last_T0_gpr;
546 } DisasContext; 548 } DisasContext;
547 549
548 enum { 550 enum {
@@ -572,12 +574,33 @@ do { \ @@ -572,12 +574,33 @@ do { \
572 ctx->opcode & 0x3F, ((ctx->opcode >> 16) & 0x1F)); \ 574 ctx->opcode & 0x3F, ((ctx->opcode >> 16) & 0x1F)); \
573 } while (0) 575 } while (0)
574 576
575 -#define GEN_LOAD_REG_TN(Tn, Rn) \ 577 +#define GEN_LOAD_REG_T0(Rn) \
576 do { \ 578 do { \
577 if (Rn == 0) { \ 579 if (Rn == 0) { \
578 - glue(gen_op_reset_, Tn)(); \ 580 + gen_op_reset_T0(); \
  581 + } else { \
  582 + if (ctx->glue(last_T0, _store) != gen_opc_ptr \
  583 + || ctx->glue(last_T0, _gpr) != Rn) { \
  584 + gen_op_load_gpr_T0(Rn); \
  585 + } \
  586 + } \
  587 +} while (0)
  588 +
  589 +#define GEN_LOAD_REG_T1(Rn) \
  590 +do { \
  591 + if (Rn == 0) { \
  592 + gen_op_reset_T1(); \
  593 + } else { \
  594 + gen_op_load_gpr_T1(Rn); \
  595 + } \
  596 +} while (0)
  597 +
  598 +#define GEN_LOAD_REG_T2(Rn) \
  599 +do { \
  600 + if (Rn == 0) { \
  601 + gen_op_reset_T2(); \
579 } else { \ 602 } else { \
580 - glue(gen_op_load_gpr_, Tn)(Rn); \ 603 + gen_op_load_gpr_T2(Rn); \
581 } \ 604 } \
582 } while (0) 605 } while (0)
583 606
@@ -612,13 +635,21 @@ do { \ @@ -612,13 +635,21 @@ do { \
612 } while (0) 635 } while (0)
613 #endif 636 #endif
614 637
615 -#define GEN_STORE_TN_REG(Rn, Tn) \ 638 +#define GEN_STORE_T0_REG(Rn) \
616 do { \ 639 do { \
617 if (Rn != 0) { \ 640 if (Rn != 0) { \
618 - glue(glue(gen_op_store_, Tn),_gpr)(Rn); \ 641 + glue(gen_op_store_T0,_gpr)(Rn); \
  642 + ctx->glue(last_T0,_store) = gen_opc_ptr; \
  643 + ctx->glue(last_T0,_gpr) = Rn; \
619 } \ 644 } \
620 } while (0) 645 } while (0)
621 646
  647 +#define GEN_STORE_T1_REG(Rn) \
  648 +do { \
  649 + if (Rn != 0) \
  650 + glue(gen_op_store_T1,_gpr)(Rn); \
  651 +} while (0)
  652 +
622 #define GEN_STORE_TN_SRSREG(Rn, Tn) \ 653 #define GEN_STORE_TN_SRSREG(Rn, Tn) \
623 do { \ 654 do { \
624 if (Rn != 0) { \ 655 if (Rn != 0) { \
@@ -855,126 +886,126 @@ static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt, @@ -855,126 +886,126 @@ static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt,
855 #if defined(TARGET_MIPS64) 886 #if defined(TARGET_MIPS64)
856 case OPC_LWU: 887 case OPC_LWU:
857 op_ldst(lwu); 888 op_ldst(lwu);
858 - GEN_STORE_TN_REG(rt, T0); 889 + GEN_STORE_T0_REG(rt);
859 opn = "lwu"; 890 opn = "lwu";
860 break; 891 break;
861 case OPC_LD: 892 case OPC_LD:
862 op_ldst(ld); 893 op_ldst(ld);
863 - GEN_STORE_TN_REG(rt, T0); 894 + GEN_STORE_T0_REG(rt);
864 opn = "ld"; 895 opn = "ld";
865 break; 896 break;
866 case OPC_LLD: 897 case OPC_LLD:
867 op_ldst(lld); 898 op_ldst(lld);
868 - GEN_STORE_TN_REG(rt, T0); 899 + GEN_STORE_T0_REG(rt);
869 opn = "lld"; 900 opn = "lld";
870 break; 901 break;
871 case OPC_SD: 902 case OPC_SD:
872 - GEN_LOAD_REG_TN(T1, rt); 903 + GEN_LOAD_REG_T1(rt);
873 op_ldst(sd); 904 op_ldst(sd);
874 opn = "sd"; 905 opn = "sd";
875 break; 906 break;
876 case OPC_SCD: 907 case OPC_SCD:
877 save_cpu_state(ctx, 1); 908 save_cpu_state(ctx, 1);
878 - GEN_LOAD_REG_TN(T1, rt); 909 + GEN_LOAD_REG_T1(rt);
879 op_ldst(scd); 910 op_ldst(scd);
880 - GEN_STORE_TN_REG(rt, T0); 911 + GEN_STORE_T0_REG(rt);
881 opn = "scd"; 912 opn = "scd";
882 break; 913 break;
883 case OPC_LDL: 914 case OPC_LDL:
884 - GEN_LOAD_REG_TN(T1, rt); 915 + GEN_LOAD_REG_T1(rt);
885 op_ldst(ldl); 916 op_ldst(ldl);
886 - GEN_STORE_TN_REG(rt, T1); 917 + GEN_STORE_T1_REG(rt);
887 opn = "ldl"; 918 opn = "ldl";
888 break; 919 break;
889 case OPC_SDL: 920 case OPC_SDL:
890 - GEN_LOAD_REG_TN(T1, rt); 921 + GEN_LOAD_REG_T1(rt);
891 op_ldst(sdl); 922 op_ldst(sdl);
892 opn = "sdl"; 923 opn = "sdl";
893 break; 924 break;
894 case OPC_LDR: 925 case OPC_LDR:
895 - GEN_LOAD_REG_TN(T1, rt); 926 + GEN_LOAD_REG_T1(rt);
896 op_ldst(ldr); 927 op_ldst(ldr);
897 - GEN_STORE_TN_REG(rt, T1); 928 + GEN_STORE_T1_REG(rt);
898 opn = "ldr"; 929 opn = "ldr";
899 break; 930 break;
900 case OPC_SDR: 931 case OPC_SDR:
901 - GEN_LOAD_REG_TN(T1, rt); 932 + GEN_LOAD_REG_T1(rt);
902 op_ldst(sdr); 933 op_ldst(sdr);
903 opn = "sdr"; 934 opn = "sdr";
904 break; 935 break;
905 #endif 936 #endif
906 case OPC_LW: 937 case OPC_LW:
907 op_ldst(lw); 938 op_ldst(lw);
908 - GEN_STORE_TN_REG(rt, T0); 939 + GEN_STORE_T0_REG(rt);
909 opn = "lw"; 940 opn = "lw";
910 break; 941 break;
911 case OPC_SW: 942 case OPC_SW:
912 - GEN_LOAD_REG_TN(T1, rt); 943 + GEN_LOAD_REG_T1(rt);
913 op_ldst(sw); 944 op_ldst(sw);
914 opn = "sw"; 945 opn = "sw";
915 break; 946 break;
916 case OPC_LH: 947 case OPC_LH:
917 op_ldst(lh); 948 op_ldst(lh);
918 - GEN_STORE_TN_REG(rt, T0); 949 + GEN_STORE_T0_REG(rt);
919 opn = "lh"; 950 opn = "lh";
920 break; 951 break;
921 case OPC_SH: 952 case OPC_SH:
922 - GEN_LOAD_REG_TN(T1, rt); 953 + GEN_LOAD_REG_T1(rt);
923 op_ldst(sh); 954 op_ldst(sh);
924 opn = "sh"; 955 opn = "sh";
925 break; 956 break;
926 case OPC_LHU: 957 case OPC_LHU:
927 op_ldst(lhu); 958 op_ldst(lhu);
928 - GEN_STORE_TN_REG(rt, T0); 959 + GEN_STORE_T0_REG(rt);
929 opn = "lhu"; 960 opn = "lhu";
930 break; 961 break;
931 case OPC_LB: 962 case OPC_LB:
932 op_ldst(lb); 963 op_ldst(lb);
933 - GEN_STORE_TN_REG(rt, T0); 964 + GEN_STORE_T0_REG(rt);
934 opn = "lb"; 965 opn = "lb";
935 break; 966 break;
936 case OPC_SB: 967 case OPC_SB:
937 - GEN_LOAD_REG_TN(T1, rt); 968 + GEN_LOAD_REG_T1(rt);
938 op_ldst(sb); 969 op_ldst(sb);
939 opn = "sb"; 970 opn = "sb";
940 break; 971 break;
941 case OPC_LBU: 972 case OPC_LBU:
942 op_ldst(lbu); 973 op_ldst(lbu);
943 - GEN_STORE_TN_REG(rt, T0); 974 + GEN_STORE_T0_REG(rt);
944 opn = "lbu"; 975 opn = "lbu";
945 break; 976 break;
946 case OPC_LWL: 977 case OPC_LWL:
947 - GEN_LOAD_REG_TN(T1, rt); 978 + GEN_LOAD_REG_T1(rt);
948 op_ldst(lwl); 979 op_ldst(lwl);
949 - GEN_STORE_TN_REG(rt, T1); 980 + GEN_STORE_T1_REG(rt);
950 opn = "lwl"; 981 opn = "lwl";
951 break; 982 break;
952 case OPC_SWL: 983 case OPC_SWL:
953 - GEN_LOAD_REG_TN(T1, rt); 984 + GEN_LOAD_REG_T1(rt);
954 op_ldst(swl); 985 op_ldst(swl);
955 opn = "swr"; 986 opn = "swr";
956 break; 987 break;
957 case OPC_LWR: 988 case OPC_LWR:
958 - GEN_LOAD_REG_TN(T1, rt); 989 + GEN_LOAD_REG_T1(rt);
959 op_ldst(lwr); 990 op_ldst(lwr);
960 - GEN_STORE_TN_REG(rt, T1); 991 + GEN_STORE_T1_REG(rt);
961 opn = "lwr"; 992 opn = "lwr";
962 break; 993 break;
963 case OPC_SWR: 994 case OPC_SWR:
964 - GEN_LOAD_REG_TN(T1, rt); 995 + GEN_LOAD_REG_T1(rt);
965 op_ldst(swr); 996 op_ldst(swr);
966 opn = "swr"; 997 opn = "swr";
967 break; 998 break;
968 case OPC_LL: 999 case OPC_LL:
969 op_ldst(ll); 1000 op_ldst(ll);
970 - GEN_STORE_TN_REG(rt, T0); 1001 + GEN_STORE_T0_REG(rt);
971 opn = "ll"; 1002 opn = "ll";
972 break; 1003 break;
973 case OPC_SC: 1004 case OPC_SC:
974 save_cpu_state(ctx, 1); 1005 save_cpu_state(ctx, 1);
975 - GEN_LOAD_REG_TN(T1, rt); 1006 + GEN_LOAD_REG_T1(rt);
976 op_ldst(sc); 1007 op_ldst(sc);
977 - GEN_STORE_TN_REG(rt, T0); 1008 + GEN_STORE_T0_REG(rt);
978 opn = "sc"; 1009 opn = "sc";
979 break; 1010 break;
980 default: 1011 default:
@@ -1059,7 +1090,7 @@ static void gen_arith_imm (CPUState *env, DisasContext *ctx, uint32_t opc, @@ -1059,7 +1090,7 @@ static void gen_arith_imm (CPUState *env, DisasContext *ctx, uint32_t opc,
1059 case OPC_ANDI: 1090 case OPC_ANDI:
1060 case OPC_ORI: 1091 case OPC_ORI:
1061 case OPC_XORI: 1092 case OPC_XORI:
1062 - GEN_LOAD_REG_TN(T0, rs); 1093 + GEN_LOAD_REG_T0(rs);
1063 GEN_LOAD_IMM_TN(T1, uimm); 1094 GEN_LOAD_IMM_TN(T1, uimm);
1064 break; 1095 break;
1065 case OPC_LUI: 1096 case OPC_LUI:
@@ -1077,7 +1108,7 @@ static void gen_arith_imm (CPUState *env, DisasContext *ctx, uint32_t opc, @@ -1077,7 +1108,7 @@ static void gen_arith_imm (CPUState *env, DisasContext *ctx, uint32_t opc,
1077 case OPC_DSRL32: 1108 case OPC_DSRL32:
1078 #endif 1109 #endif
1079 uimm &= 0x1f; 1110 uimm &= 0x1f;
1080 - GEN_LOAD_REG_TN(T0, rs); 1111 + GEN_LOAD_REG_T0(rs);
1081 GEN_LOAD_IMM_TN(T1, uimm); 1112 GEN_LOAD_IMM_TN(T1, uimm);
1082 break; 1113 break;
1083 } 1114 }
@@ -1222,7 +1253,7 @@ static void gen_arith_imm (CPUState *env, DisasContext *ctx, uint32_t opc, @@ -1222,7 +1253,7 @@ static void gen_arith_imm (CPUState *env, DisasContext *ctx, uint32_t opc,
1222 generate_exception(ctx, EXCP_RI); 1253 generate_exception(ctx, EXCP_RI);
1223 return; 1254 return;
1224 } 1255 }
1225 - GEN_STORE_TN_REG(rt, T0); 1256 + GEN_STORE_T0_REG(rt);
1226 MIPS_DEBUG("%s %s, %s, " TARGET_FMT_lx, opn, regnames[rt], regnames[rs], uimm); 1257 MIPS_DEBUG("%s %s, %s, " TARGET_FMT_lx, opn, regnames[rt], regnames[rs], uimm);
1227 } 1258 }
1228 1259
@@ -1239,14 +1270,14 @@ static void gen_arith (CPUState *env, DisasContext *ctx, uint32_t opc, @@ -1239,14 +1270,14 @@ static void gen_arith (CPUState *env, DisasContext *ctx, uint32_t opc,
1239 MIPS_DEBUG("NOP"); 1270 MIPS_DEBUG("NOP");
1240 return; 1271 return;
1241 } 1272 }
1242 - GEN_LOAD_REG_TN(T0, rs); 1273 + GEN_LOAD_REG_T0(rs);
1243 /* Specialcase the conventional move operation. */ 1274 /* Specialcase the conventional move operation. */
1244 if (rt == 0 && (opc == OPC_ADDU || opc == OPC_DADDU 1275 if (rt == 0 && (opc == OPC_ADDU || opc == OPC_DADDU
1245 || opc == OPC_SUBU || opc == OPC_DSUBU)) { 1276 || opc == OPC_SUBU || opc == OPC_DSUBU)) {
1246 - GEN_STORE_TN_REG(rd, T0); 1277 + GEN_STORE_T0_REG(rd);
1247 return; 1278 return;
1248 } 1279 }
1249 - GEN_LOAD_REG_TN(T1, rt); 1280 + GEN_LOAD_REG_T1(rt);
1250 switch (opc) { 1281 switch (opc) {
1251 case OPC_ADD: 1282 case OPC_ADD:
1252 save_cpu_state(ctx, 1); 1283 save_cpu_state(ctx, 1);
@@ -1389,7 +1420,7 @@ static void gen_arith (CPUState *env, DisasContext *ctx, uint32_t opc, @@ -1389,7 +1420,7 @@ static void gen_arith (CPUState *env, DisasContext *ctx, uint32_t opc,
1389 generate_exception(ctx, EXCP_RI); 1420 generate_exception(ctx, EXCP_RI);
1390 return; 1421 return;
1391 } 1422 }
1392 - GEN_STORE_TN_REG(rd, T0); 1423 + GEN_STORE_T0_REG(rd);
1393 print: 1424 print:
1394 MIPS_DEBUG("%s %s, %s, %s", opn, regnames[rd], regnames[rs], regnames[rt]); 1425 MIPS_DEBUG("%s %s, %s, %s", opn, regnames[rd], regnames[rs], regnames[rt]);
1395 } 1426 }
@@ -1407,21 +1438,21 @@ static void gen_HILO (DisasContext *ctx, uint32_t opc, int reg) @@ -1407,21 +1438,21 @@ static void gen_HILO (DisasContext *ctx, uint32_t opc, int reg)
1407 switch (opc) { 1438 switch (opc) {
1408 case OPC_MFHI: 1439 case OPC_MFHI:
1409 gen_op_load_HI(0); 1440 gen_op_load_HI(0);
1410 - GEN_STORE_TN_REG(reg, T0); 1441 + GEN_STORE_T0_REG(reg);
1411 opn = "mfhi"; 1442 opn = "mfhi";
1412 break; 1443 break;
1413 case OPC_MFLO: 1444 case OPC_MFLO:
1414 gen_op_load_LO(0); 1445 gen_op_load_LO(0);
1415 - GEN_STORE_TN_REG(reg, T0); 1446 + GEN_STORE_T0_REG(reg);
1416 opn = "mflo"; 1447 opn = "mflo";
1417 break; 1448 break;
1418 case OPC_MTHI: 1449 case OPC_MTHI:
1419 - GEN_LOAD_REG_TN(T0, reg); 1450 + GEN_LOAD_REG_T0(reg);
1420 gen_op_store_HI(0); 1451 gen_op_store_HI(0);
1421 opn = "mthi"; 1452 opn = "mthi";
1422 break; 1453 break;
1423 case OPC_MTLO: 1454 case OPC_MTLO:
1424 - GEN_LOAD_REG_TN(T0, reg); 1455 + GEN_LOAD_REG_T0(reg);
1425 gen_op_store_LO(0); 1456 gen_op_store_LO(0);
1426 opn = "mtlo"; 1457 opn = "mtlo";
1427 break; 1458 break;
@@ -1438,8 +1469,8 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc, @@ -1438,8 +1469,8 @@ static void gen_muldiv (DisasContext *ctx, uint32_t opc,
1438 { 1469 {
1439 const char *opn = "mul/div"; 1470 const char *opn = "mul/div";
1440 1471
1441 - GEN_LOAD_REG_TN(T0, rs);  
1442 - GEN_LOAD_REG_TN(T1, rt); 1472 + GEN_LOAD_REG_T0(rs);
  1473 + GEN_LOAD_REG_T1(rt);
1443 switch (opc) { 1474 switch (opc) {
1444 case OPC_DIV: 1475 case OPC_DIV:
1445 gen_op_div(); 1476 gen_op_div();
@@ -1508,7 +1539,7 @@ static void gen_cl (DisasContext *ctx, uint32_t opc, @@ -1508,7 +1539,7 @@ static void gen_cl (DisasContext *ctx, uint32_t opc,
1508 MIPS_DEBUG("NOP"); 1539 MIPS_DEBUG("NOP");
1509 return; 1540 return;
1510 } 1541 }
1511 - GEN_LOAD_REG_TN(T0, rs); 1542 + GEN_LOAD_REG_T0(rs);
1512 switch (opc) { 1543 switch (opc) {
1513 case OPC_CLO: 1544 case OPC_CLO:
1514 gen_op_clo(); 1545 gen_op_clo();
@@ -1554,8 +1585,8 @@ static void gen_trap (DisasContext *ctx, uint32_t opc, @@ -1554,8 +1585,8 @@ static void gen_trap (DisasContext *ctx, uint32_t opc,
1554 case OPC_TNE: 1585 case OPC_TNE:
1555 /* Compare two registers */ 1586 /* Compare two registers */
1556 if (rs != rt) { 1587 if (rs != rt) {
1557 - GEN_LOAD_REG_TN(T0, rs);  
1558 - GEN_LOAD_REG_TN(T1, rt); 1588 + GEN_LOAD_REG_T0(rs);
  1589 + GEN_LOAD_REG_T1(rt);
1559 cond = 1; 1590 cond = 1;
1560 } 1591 }
1561 break; 1592 break;
@@ -1567,7 +1598,7 @@ static void gen_trap (DisasContext *ctx, uint32_t opc, @@ -1567,7 +1598,7 @@ static void gen_trap (DisasContext *ctx, uint32_t opc,
1567 case OPC_TNEI: 1598 case OPC_TNEI:
1568 /* Compare register to immediate */ 1599 /* Compare register to immediate */
1569 if (rs != 0 || imm != 0) { 1600 if (rs != 0 || imm != 0) {
1570 - GEN_LOAD_REG_TN(T0, rs); 1601 + GEN_LOAD_REG_T0(rs);
1571 GEN_LOAD_IMM_TN(T1, (int32_t)imm); 1602 GEN_LOAD_IMM_TN(T1, (int32_t)imm);
1572 cond = 1; 1603 cond = 1;
1573 } 1604 }
@@ -1680,8 +1711,8 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, @@ -1680,8 +1711,8 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc,
1680 case OPC_BNEL: 1711 case OPC_BNEL:
1681 /* Compare two registers */ 1712 /* Compare two registers */
1682 if (rs != rt) { 1713 if (rs != rt) {
1683 - GEN_LOAD_REG_TN(T0, rs);  
1684 - GEN_LOAD_REG_TN(T1, rt); 1714 + GEN_LOAD_REG_T0(rs);
  1715 + GEN_LOAD_REG_T1(rt);
1685 bcond = 1; 1716 bcond = 1;
1686 } 1717 }
1687 btarget = ctx->pc + 4 + offset; 1718 btarget = ctx->pc + 4 + offset;
@@ -1720,7 +1751,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, @@ -1720,7 +1751,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc,
1720 generate_exception(ctx, EXCP_RI); 1751 generate_exception(ctx, EXCP_RI);
1721 return; 1752 return;
1722 } 1753 }
1723 - GEN_LOAD_REG_TN(T2, rs); 1754 + GEN_LOAD_REG_T2(rs);
1724 break; 1755 break;
1725 default: 1756 default:
1726 MIPS_INVAL("branch/jump"); 1757 MIPS_INVAL("branch/jump");
@@ -1896,7 +1927,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, @@ -1896,7 +1927,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc,
1896 static void gen_bitops (DisasContext *ctx, uint32_t opc, int rt, 1927 static void gen_bitops (DisasContext *ctx, uint32_t opc, int rt,
1897 int rs, int lsb, int msb) 1928 int rs, int lsb, int msb)
1898 { 1929 {
1899 - GEN_LOAD_REG_TN(T1, rs); 1930 + GEN_LOAD_REG_T1(rs);
1900 switch (opc) { 1931 switch (opc) {
1901 case OPC_EXT: 1932 case OPC_EXT:
1902 if (lsb + msb > 31) 1933 if (lsb + msb > 31)
@@ -1923,26 +1954,26 @@ static void gen_bitops (DisasContext *ctx, uint32_t opc, int rt, @@ -1923,26 +1954,26 @@ static void gen_bitops (DisasContext *ctx, uint32_t opc, int rt,
1923 case OPC_INS: 1954 case OPC_INS:
1924 if (lsb > msb) 1955 if (lsb > msb)
1925 goto fail; 1956 goto fail;
1926 - GEN_LOAD_REG_TN(T0, rt); 1957 + GEN_LOAD_REG_T0(rt);
1927 gen_op_ins(lsb, msb - lsb + 1); 1958 gen_op_ins(lsb, msb - lsb + 1);
1928 break; 1959 break;
1929 #if defined(TARGET_MIPS64) 1960 #if defined(TARGET_MIPS64)
1930 case OPC_DINSM: 1961 case OPC_DINSM:
1931 if (lsb > msb) 1962 if (lsb > msb)
1932 goto fail; 1963 goto fail;
1933 - GEN_LOAD_REG_TN(T0, rt); 1964 + GEN_LOAD_REG_T0(rt);
1934 gen_op_dins(lsb, msb - lsb + 1 + 32); 1965 gen_op_dins(lsb, msb - lsb + 1 + 32);
1935 break; 1966 break;
1936 case OPC_DINSU: 1967 case OPC_DINSU:
1937 if (lsb > msb) 1968 if (lsb > msb)
1938 goto fail; 1969 goto fail;
1939 - GEN_LOAD_REG_TN(T0, rt); 1970 + GEN_LOAD_REG_T0(rt);
1940 gen_op_dins(lsb + 32, msb - lsb + 1); 1971 gen_op_dins(lsb + 32, msb - lsb + 1);
1941 break; 1972 break;
1942 case OPC_DINS: 1973 case OPC_DINS:
1943 if (lsb > msb) 1974 if (lsb > msb)
1944 goto fail; 1975 goto fail;
1945 - GEN_LOAD_REG_TN(T0, rt); 1976 + GEN_LOAD_REG_T0(rt);
1946 gen_op_dins(lsb, msb - lsb + 1); 1977 gen_op_dins(lsb, msb - lsb + 1);
1947 break; 1978 break;
1948 #endif 1979 #endif
@@ -1952,7 +1983,7 @@ fail: @@ -1952,7 +1983,7 @@ fail:
1952 generate_exception(ctx, EXCP_RI); 1983 generate_exception(ctx, EXCP_RI);
1953 return; 1984 return;
1954 } 1985 }
1955 - GEN_STORE_TN_REG(rt, T0); 1986 + GEN_STORE_T0_REG(rt);
1956 } 1987 }
1957 1988
1958 /* CP0 (MMU and control) */ 1989 /* CP0 (MMU and control) */
@@ -4611,7 +4642,7 @@ static void gen_cp0 (CPUState *env, DisasContext *ctx, uint32_t opc, int rt, int @@ -4611,7 +4642,7 @@ static void gen_cp0 (CPUState *env, DisasContext *ctx, uint32_t opc, int rt, int
4611 opn = "mfc0"; 4642 opn = "mfc0";
4612 break; 4643 break;
4613 case OPC_MTC0: 4644 case OPC_MTC0:
4614 - GEN_LOAD_REG_TN(T0, rt); 4645 + GEN_LOAD_REG_T0(rt);
4615 save_cpu_state(ctx, 1); 4646 save_cpu_state(ctx, 1);
4616 gen_mtc0(env, ctx, rd, ctx->opcode & 0x7); 4647 gen_mtc0(env, ctx, rd, ctx->opcode & 0x7);
4617 opn = "mtc0"; 4648 opn = "mtc0";
@@ -4629,7 +4660,7 @@ static void gen_cp0 (CPUState *env, DisasContext *ctx, uint32_t opc, int rt, int @@ -4629,7 +4660,7 @@ static void gen_cp0 (CPUState *env, DisasContext *ctx, uint32_t opc, int rt, int
4629 break; 4660 break;
4630 case OPC_DMTC0: 4661 case OPC_DMTC0:
4631 check_insn(env, ctx, ISA_MIPS3); 4662 check_insn(env, ctx, ISA_MIPS3);
4632 - GEN_LOAD_REG_TN(T0, rt); 4663 + GEN_LOAD_REG_T0(rt);
4633 save_cpu_state(ctx, 1); 4664 save_cpu_state(ctx, 1);
4634 gen_dmtc0(env, ctx, rd, ctx->opcode & 0x7); 4665 gen_dmtc0(env, ctx, rd, ctx->opcode & 0x7);
4635 opn = "dmtc0"; 4666 opn = "dmtc0";
@@ -4648,7 +4679,7 @@ static void gen_cp0 (CPUState *env, DisasContext *ctx, uint32_t opc, int rt, int @@ -4648,7 +4679,7 @@ static void gen_cp0 (CPUState *env, DisasContext *ctx, uint32_t opc, int rt, int
4648 break; 4679 break;
4649 case OPC_MTTR: 4680 case OPC_MTTR:
4650 check_insn(env, ctx, ASE_MT); 4681 check_insn(env, ctx, ASE_MT);
4651 - GEN_LOAD_REG_TN(T0, rt); 4682 + GEN_LOAD_REG_T0(rt);
4652 gen_mttr(env, ctx, rd, (ctx->opcode >> 5) & 1, 4683 gen_mttr(env, ctx, rd, (ctx->opcode >> 5) & 1,
4653 ctx->opcode & 0x7, (ctx->opcode >> 4) & 1); 4684 ctx->opcode & 0x7, (ctx->opcode >> 4) & 1);
4654 opn = "mttr"; 4685 opn = "mttr";
@@ -4789,33 +4820,33 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) @@ -4789,33 +4820,33 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs)
4789 case OPC_MFC1: 4820 case OPC_MFC1:
4790 GEN_LOAD_FREG_FTN(WT0, fs); 4821 GEN_LOAD_FREG_FTN(WT0, fs);
4791 gen_op_mfc1(); 4822 gen_op_mfc1();
4792 - GEN_STORE_TN_REG(rt, T0); 4823 + GEN_STORE_T0_REG(rt);
4793 opn = "mfc1"; 4824 opn = "mfc1";
4794 break; 4825 break;
4795 case OPC_MTC1: 4826 case OPC_MTC1:
4796 - GEN_LOAD_REG_TN(T0, rt); 4827 + GEN_LOAD_REG_T0(rt);
4797 gen_op_mtc1(); 4828 gen_op_mtc1();
4798 GEN_STORE_FTN_FREG(fs, WT0); 4829 GEN_STORE_FTN_FREG(fs, WT0);
4799 opn = "mtc1"; 4830 opn = "mtc1";
4800 break; 4831 break;
4801 case OPC_CFC1: 4832 case OPC_CFC1:
4802 gen_op_cfc1(fs); 4833 gen_op_cfc1(fs);
4803 - GEN_STORE_TN_REG(rt, T0); 4834 + GEN_STORE_T0_REG(rt);
4804 opn = "cfc1"; 4835 opn = "cfc1";
4805 break; 4836 break;
4806 case OPC_CTC1: 4837 case OPC_CTC1:
4807 - GEN_LOAD_REG_TN(T0, rt); 4838 + GEN_LOAD_REG_T0(rt);
4808 gen_op_ctc1(fs); 4839 gen_op_ctc1(fs);
4809 opn = "ctc1"; 4840 opn = "ctc1";
4810 break; 4841 break;
4811 case OPC_DMFC1: 4842 case OPC_DMFC1:
4812 GEN_LOAD_FREG_FTN(DT0, fs); 4843 GEN_LOAD_FREG_FTN(DT0, fs);
4813 gen_op_dmfc1(); 4844 gen_op_dmfc1();
4814 - GEN_STORE_TN_REG(rt, T0); 4845 + GEN_STORE_T0_REG(rt);
4815 opn = "dmfc1"; 4846 opn = "dmfc1";
4816 break; 4847 break;
4817 case OPC_DMTC1: 4848 case OPC_DMTC1:
4818 - GEN_LOAD_REG_TN(T0, rt); 4849 + GEN_LOAD_REG_T0(rt);
4819 gen_op_dmtc1(); 4850 gen_op_dmtc1();
4820 GEN_STORE_FTN_FREG(fs, DT0); 4851 GEN_STORE_FTN_FREG(fs, DT0);
4821 opn = "dmtc1"; 4852 opn = "dmtc1";
@@ -4823,11 +4854,11 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) @@ -4823,11 +4854,11 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs)
4823 case OPC_MFHC1: 4854 case OPC_MFHC1:
4824 GEN_LOAD_FREG_FTN(WTH0, fs); 4855 GEN_LOAD_FREG_FTN(WTH0, fs);
4825 gen_op_mfhc1(); 4856 gen_op_mfhc1();
4826 - GEN_STORE_TN_REG(rt, T0); 4857 + GEN_STORE_T0_REG(rt);
4827 opn = "mfhc1"; 4858 opn = "mfhc1";
4828 break; 4859 break;
4829 case OPC_MTHC1: 4860 case OPC_MTHC1:
4830 - GEN_LOAD_REG_TN(T0, rt); 4861 + GEN_LOAD_REG_T0(rt);
4831 gen_op_mthc1(); 4862 gen_op_mthc1();
4832 GEN_STORE_FTN_FREG(fs, WTH0); 4863 GEN_STORE_FTN_FREG(fs, WTH0);
4833 opn = "mthc1"; 4864 opn = "mthc1";
@@ -4844,8 +4875,8 @@ static void gen_movci (DisasContext *ctx, int rd, int rs, int cc, int tf) @@ -4844,8 +4875,8 @@ static void gen_movci (DisasContext *ctx, int rd, int rs, int cc, int tf)
4844 { 4875 {
4845 uint32_t ccbit; 4876 uint32_t ccbit;
4846 4877
4847 - GEN_LOAD_REG_TN(T0, rd);  
4848 - GEN_LOAD_REG_TN(T1, rs); 4878 + GEN_LOAD_REG_T0(rd);
  4879 + GEN_LOAD_REG_T1(rs);
4849 if (cc) { 4880 if (cc) {
4850 ccbit = 1 << (24 + cc); 4881 ccbit = 1 << (24 + cc);
4851 } else 4882 } else
@@ -4854,7 +4885,7 @@ static void gen_movci (DisasContext *ctx, int rd, int rs, int cc, int tf) @@ -4854,7 +4885,7 @@ static void gen_movci (DisasContext *ctx, int rd, int rs, int cc, int tf)
4854 gen_op_movf(ccbit); 4885 gen_op_movf(ccbit);
4855 else 4886 else
4856 gen_op_movt(ccbit); 4887 gen_op_movt(ccbit);
4857 - GEN_STORE_TN_REG(rd, T0); 4888 + GEN_STORE_T0_REG(rd);
4858 } 4889 }
4859 4890
4860 #define GEN_MOVCF(fmt) \ 4891 #define GEN_MOVCF(fmt) \
@@ -5029,7 +5060,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -5029,7 +5060,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5029 opn = "floor.w.s"; 5060 opn = "floor.w.s";
5030 break; 5061 break;
5031 case FOP(17, 16): 5062 case FOP(17, 16):
5032 - GEN_LOAD_REG_TN(T0, ft); 5063 + GEN_LOAD_REG_T0(ft);
5033 GEN_LOAD_FREG_FTN(WT0, fs); 5064 GEN_LOAD_FREG_FTN(WT0, fs);
5034 GEN_LOAD_FREG_FTN(WT2, fd); 5065 GEN_LOAD_FREG_FTN(WT2, fd);
5035 gen_movcf_s(ctx, (ft >> 2) & 0x7, ft & 0x1); 5066 gen_movcf_s(ctx, (ft >> 2) & 0x7, ft & 0x1);
@@ -5037,7 +5068,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -5037,7 +5068,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5037 opn = "movcf.s"; 5068 opn = "movcf.s";
5038 break; 5069 break;
5039 case FOP(18, 16): 5070 case FOP(18, 16):
5040 - GEN_LOAD_REG_TN(T0, ft); 5071 + GEN_LOAD_REG_T0(ft);
5041 GEN_LOAD_FREG_FTN(WT0, fs); 5072 GEN_LOAD_FREG_FTN(WT0, fs);
5042 GEN_LOAD_FREG_FTN(WT2, fd); 5073 GEN_LOAD_FREG_FTN(WT2, fd);
5043 gen_op_float_movz_s(); 5074 gen_op_float_movz_s();
@@ -5045,7 +5076,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -5045,7 +5076,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5045 opn = "movz.s"; 5076 opn = "movz.s";
5046 break; 5077 break;
5047 case FOP(19, 16): 5078 case FOP(19, 16):
5048 - GEN_LOAD_REG_TN(T0, ft); 5079 + GEN_LOAD_REG_T0(ft);
5049 GEN_LOAD_FREG_FTN(WT0, fs); 5080 GEN_LOAD_FREG_FTN(WT0, fs);
5050 GEN_LOAD_FREG_FTN(WT2, fd); 5081 GEN_LOAD_FREG_FTN(WT2, fd);
5051 gen_op_float_movn_s(); 5082 gen_op_float_movn_s();
@@ -5270,7 +5301,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -5270,7 +5301,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5270 opn = "floor.w.d"; 5301 opn = "floor.w.d";
5271 break; 5302 break;
5272 case FOP(17, 17): 5303 case FOP(17, 17):
5273 - GEN_LOAD_REG_TN(T0, ft); 5304 + GEN_LOAD_REG_T0(ft);
5274 GEN_LOAD_FREG_FTN(DT0, fs); 5305 GEN_LOAD_FREG_FTN(DT0, fs);
5275 GEN_LOAD_FREG_FTN(DT2, fd); 5306 GEN_LOAD_FREG_FTN(DT2, fd);
5276 gen_movcf_d(ctx, (ft >> 2) & 0x7, ft & 0x1); 5307 gen_movcf_d(ctx, (ft >> 2) & 0x7, ft & 0x1);
@@ -5278,7 +5309,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -5278,7 +5309,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5278 opn = "movcf.d"; 5309 opn = "movcf.d";
5279 break; 5310 break;
5280 case FOP(18, 17): 5311 case FOP(18, 17):
5281 - GEN_LOAD_REG_TN(T0, ft); 5312 + GEN_LOAD_REG_T0(ft);
5282 GEN_LOAD_FREG_FTN(DT0, fs); 5313 GEN_LOAD_FREG_FTN(DT0, fs);
5283 GEN_LOAD_FREG_FTN(DT2, fd); 5314 GEN_LOAD_FREG_FTN(DT2, fd);
5284 gen_op_float_movz_d(); 5315 gen_op_float_movz_d();
@@ -5286,7 +5317,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -5286,7 +5317,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5286 opn = "movz.d"; 5317 opn = "movz.d";
5287 break; 5318 break;
5288 case FOP(19, 17): 5319 case FOP(19, 17):
5289 - GEN_LOAD_REG_TN(T0, ft); 5320 + GEN_LOAD_REG_T0(ft);
5290 GEN_LOAD_FREG_FTN(DT0, fs); 5321 GEN_LOAD_FREG_FTN(DT0, fs);
5291 GEN_LOAD_FREG_FTN(DT2, fd); 5322 GEN_LOAD_FREG_FTN(DT2, fd);
5292 gen_op_float_movn_d(); 5323 gen_op_float_movn_d();
@@ -5484,7 +5515,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -5484,7 +5515,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5484 break; 5515 break;
5485 case FOP(17, 22): 5516 case FOP(17, 22):
5486 check_cp1_64bitmode(ctx); 5517 check_cp1_64bitmode(ctx);
5487 - GEN_LOAD_REG_TN(T0, ft); 5518 + GEN_LOAD_REG_T0(ft);
5488 GEN_LOAD_FREG_FTN(WT0, fs); 5519 GEN_LOAD_FREG_FTN(WT0, fs);
5489 GEN_LOAD_FREG_FTN(WTH0, fs); 5520 GEN_LOAD_FREG_FTN(WTH0, fs);
5490 GEN_LOAD_FREG_FTN(WT2, fd); 5521 GEN_LOAD_FREG_FTN(WT2, fd);
@@ -5496,7 +5527,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -5496,7 +5527,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5496 break; 5527 break;
5497 case FOP(18, 22): 5528 case FOP(18, 22):
5498 check_cp1_64bitmode(ctx); 5529 check_cp1_64bitmode(ctx);
5499 - GEN_LOAD_REG_TN(T0, ft); 5530 + GEN_LOAD_REG_T0(ft);
5500 GEN_LOAD_FREG_FTN(WT0, fs); 5531 GEN_LOAD_FREG_FTN(WT0, fs);
5501 GEN_LOAD_FREG_FTN(WTH0, fs); 5532 GEN_LOAD_FREG_FTN(WTH0, fs);
5502 GEN_LOAD_FREG_FTN(WT2, fd); 5533 GEN_LOAD_FREG_FTN(WT2, fd);
@@ -5508,7 +5539,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, @@ -5508,7 +5539,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5508 break; 5539 break;
5509 case FOP(19, 22): 5540 case FOP(19, 22):
5510 check_cp1_64bitmode(ctx); 5541 check_cp1_64bitmode(ctx);
5511 - GEN_LOAD_REG_TN(T0, ft); 5542 + GEN_LOAD_REG_T0(ft);
5512 GEN_LOAD_FREG_FTN(WT0, fs); 5543 GEN_LOAD_FREG_FTN(WT0, fs);
5513 GEN_LOAD_FREG_FTN(WTH0, fs); 5544 GEN_LOAD_FREG_FTN(WTH0, fs);
5514 GEN_LOAD_FREG_FTN(WT2, fd); 5545 GEN_LOAD_FREG_FTN(WT2, fd);
@@ -5695,12 +5726,12 @@ static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, @@ -5695,12 +5726,12 @@ static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc,
5695 if (index == 0) 5726 if (index == 0)
5696 gen_op_reset_T0(); 5727 gen_op_reset_T0();
5697 else 5728 else
5698 - GEN_LOAD_REG_TN(T0, index); 5729 + GEN_LOAD_REG_T0(index);
5699 } else if (index == 0) { 5730 } else if (index == 0) {
5700 - GEN_LOAD_REG_TN(T0, base); 5731 + GEN_LOAD_REG_T0(base);
5701 } else { 5732 } else {
5702 - GEN_LOAD_REG_TN(T0, base);  
5703 - GEN_LOAD_REG_TN(T1, index); 5733 + GEN_LOAD_REG_T0(base);
  5734 + GEN_LOAD_REG_T1(index);
5704 gen_op_addr_add(); 5735 gen_op_addr_add();
5705 } 5736 }
5706 /* Don't do NOP if destination is zero: we must perform the actual 5737 /* Don't do NOP if destination is zero: we must perform the actual
@@ -5757,7 +5788,7 @@ static void gen_flt3_arith (DisasContext *ctx, uint32_t opc, @@ -5757,7 +5788,7 @@ static void gen_flt3_arith (DisasContext *ctx, uint32_t opc,
5757 check_cp1_64bitmode(ctx); 5788 check_cp1_64bitmode(ctx);
5758 switch (opc) { 5789 switch (opc) {
5759 case OPC_ALNV_PS: 5790 case OPC_ALNV_PS:
5760 - GEN_LOAD_REG_TN(T0, fr); 5791 + GEN_LOAD_REG_T0(fr);
5761 GEN_LOAD_FREG_FTN(DT0, fs); 5792 GEN_LOAD_FREG_FTN(DT0, fs);
5762 GEN_LOAD_FREG_FTN(DT1, ft); 5793 GEN_LOAD_FREG_FTN(DT1, ft);
5763 gen_op_float_alnv_ps(); 5794 gen_op_float_alnv_ps();
@@ -6081,15 +6112,15 @@ static void decode_opc (CPUState *env, DisasContext *ctx) @@ -6081,15 +6112,15 @@ static void decode_opc (CPUState *env, DisasContext *ctx)
6081 op2 = MASK_BSHFL(ctx->opcode); 6112 op2 = MASK_BSHFL(ctx->opcode);
6082 switch (op2) { 6113 switch (op2) {
6083 case OPC_WSBH: 6114 case OPC_WSBH:
6084 - GEN_LOAD_REG_TN(T1, rt); 6115 + GEN_LOAD_REG_T1(rt);
6085 gen_op_wsbh(); 6116 gen_op_wsbh();
6086 break; 6117 break;
6087 case OPC_SEB: 6118 case OPC_SEB:
6088 - GEN_LOAD_REG_TN(T1, rt); 6119 + GEN_LOAD_REG_T1(rt);
6089 gen_op_seb(); 6120 gen_op_seb();
6090 break; 6121 break;
6091 case OPC_SEH: 6122 case OPC_SEH:
6092 - GEN_LOAD_REG_TN(T1, rt); 6123 + GEN_LOAD_REG_T1(rt);
6093 gen_op_seh(); 6124 gen_op_seh();
6094 break; 6125 break;
6095 default: /* Invalid */ 6126 default: /* Invalid */
@@ -6097,7 +6128,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) @@ -6097,7 +6128,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx)
6097 generate_exception(ctx, EXCP_RI); 6128 generate_exception(ctx, EXCP_RI);
6098 break; 6129 break;
6099 } 6130 }
6100 - GEN_STORE_TN_REG(rd, T0); 6131 + GEN_STORE_T0_REG(rd);
6101 break; 6132 break;
6102 case OPC_RDHWR: 6133 case OPC_RDHWR:
6103 check_insn(env, ctx, ISA_MIPS32R2); 6134 check_insn(env, ctx, ISA_MIPS32R2);
@@ -6128,19 +6159,19 @@ static void decode_opc (CPUState *env, DisasContext *ctx) @@ -6128,19 +6159,19 @@ static void decode_opc (CPUState *env, DisasContext *ctx)
6128 generate_exception(ctx, EXCP_RI); 6159 generate_exception(ctx, EXCP_RI);
6129 break; 6160 break;
6130 } 6161 }
6131 - GEN_STORE_TN_REG(rt, T0); 6162 + GEN_STORE_T0_REG(rt);
6132 break; 6163 break;
6133 case OPC_FORK: 6164 case OPC_FORK:
6134 check_insn(env, ctx, ASE_MT); 6165 check_insn(env, ctx, ASE_MT);
6135 - GEN_LOAD_REG_TN(T0, rt);  
6136 - GEN_LOAD_REG_TN(T1, rs); 6166 + GEN_LOAD_REG_T0(rt);
  6167 + GEN_LOAD_REG_T1(rs);
6137 gen_op_fork(); 6168 gen_op_fork();
6138 break; 6169 break;
6139 case OPC_YIELD: 6170 case OPC_YIELD:
6140 check_insn(env, ctx, ASE_MT); 6171 check_insn(env, ctx, ASE_MT);
6141 - GEN_LOAD_REG_TN(T0, rs); 6172 + GEN_LOAD_REG_T0(rs);
6142 gen_op_yield(); 6173 gen_op_yield();
6143 - GEN_STORE_TN_REG(rd, T0); 6174 + GEN_STORE_T0_REG(rd);
6144 break; 6175 break;
6145 #if defined(TARGET_MIPS64) 6176 #if defined(TARGET_MIPS64)
6146 case OPC_DEXTM ... OPC_DEXT: 6177 case OPC_DEXTM ... OPC_DEXT:
@@ -6155,11 +6186,11 @@ static void decode_opc (CPUState *env, DisasContext *ctx) @@ -6155,11 +6186,11 @@ static void decode_opc (CPUState *env, DisasContext *ctx)
6155 op2 = MASK_DBSHFL(ctx->opcode); 6186 op2 = MASK_DBSHFL(ctx->opcode);
6156 switch (op2) { 6187 switch (op2) {
6157 case OPC_DSBH: 6188 case OPC_DSBH:
6158 - GEN_LOAD_REG_TN(T1, rt); 6189 + GEN_LOAD_REG_T1(rt);
6159 gen_op_dsbh(); 6190 gen_op_dsbh();
6160 break; 6191 break;
6161 case OPC_DSHD: 6192 case OPC_DSHD:
6162 - GEN_LOAD_REG_TN(T1, rt); 6193 + GEN_LOAD_REG_T1(rt);
6163 gen_op_dshd(); 6194 gen_op_dshd();
6164 break; 6195 break;
6165 default: /* Invalid */ 6196 default: /* Invalid */
@@ -6167,7 +6198,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx) @@ -6167,7 +6198,7 @@ static void decode_opc (CPUState *env, DisasContext *ctx)
6167 generate_exception(ctx, EXCP_RI); 6198 generate_exception(ctx, EXCP_RI);
6168 break; 6199 break;
6169 } 6200 }
6170 - GEN_STORE_TN_REG(rd, T0); 6201 + GEN_STORE_T0_REG(rd);
6171 break; 6202 break;
6172 #endif 6203 #endif
6173 default: /* Invalid */ 6204 default: /* Invalid */
@@ -6252,16 +6283,16 @@ static void decode_opc (CPUState *env, DisasContext *ctx) @@ -6252,16 +6283,16 @@ static void decode_opc (CPUState *env, DisasContext *ctx)
6252 generate_exception(ctx, EXCP_RI); 6283 generate_exception(ctx, EXCP_RI);
6253 break; 6284 break;
6254 } 6285 }
6255 - GEN_STORE_TN_REG(rt, T0); 6286 + GEN_STORE_T0_REG(rt);
6256 break; 6287 break;
6257 case OPC_RDPGPR: 6288 case OPC_RDPGPR:
6258 check_insn(env, ctx, ISA_MIPS32R2); 6289 check_insn(env, ctx, ISA_MIPS32R2);
6259 GEN_LOAD_SRSREG_TN(T0, rt); 6290 GEN_LOAD_SRSREG_TN(T0, rt);
6260 - GEN_STORE_TN_REG(rd, T0); 6291 + GEN_STORE_T0_REG(rd);
6261 break; 6292 break;
6262 case OPC_WRPGPR: 6293 case OPC_WRPGPR:
6263 check_insn(env, ctx, ISA_MIPS32R2); 6294 check_insn(env, ctx, ISA_MIPS32R2);
6264 - GEN_LOAD_REG_TN(T0, rt); 6295 + GEN_LOAD_REG_T0(rt);
6265 GEN_STORE_TN_SRSREG(rd, T0); 6296 GEN_STORE_TN_SRSREG(rd, T0);
6266 break; 6297 break;
6267 default: 6298 default:
@@ -6589,6 +6620,7 @@ gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, @@ -6589,6 +6620,7 @@ gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb,
6589 } 6620 }
6590 } 6621 }
6591 done_generating: 6622 done_generating:
  6623 + ctx.last_T0_store = NULL;
6592 *gen_opc_ptr = INDEX_op_end; 6624 *gen_opc_ptr = INDEX_op_end;
6593 if (search_pc) { 6625 if (search_pc) {
6594 j = gen_opc_ptr - gen_opc_buf; 6626 j = gen_opc_ptr - gen_opc_buf;