Commit 66ba317c90fc9b668374574e3dc4f45586f56dca

Authored by aurel32
1 parent 9850d1e8

target-sh4: map FP registers as TCG variables

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5758 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 43 additions and 106 deletions
target-sh4/translate.c
@@ -72,6 +72,7 @@ static TCGv cpu_gregs[24]; @@ -72,6 +72,7 @@ static TCGv cpu_gregs[24];
72 static TCGv cpu_pc, cpu_sr, cpu_ssr, cpu_spc, cpu_gbr; 72 static TCGv cpu_pc, cpu_sr, cpu_ssr, cpu_spc, cpu_gbr;
73 static TCGv cpu_vbr, cpu_sgr, cpu_dbr, cpu_mach, cpu_macl; 73 static TCGv cpu_vbr, cpu_sgr, cpu_dbr, cpu_mach, cpu_macl;
74 static TCGv cpu_pr, cpu_fpscr, cpu_fpul, cpu_flags; 74 static TCGv cpu_pr, cpu_fpscr, cpu_fpul, cpu_flags;
  75 +static TCGv cpu_fregs[32];
75 76
76 /* internal register indexes */ 77 /* internal register indexes */
77 static TCGv cpu_flags, cpu_delayed_pc; 78 static TCGv cpu_flags, cpu_delayed_pc;
@@ -89,6 +90,16 @@ static void sh4_translate_init(void) @@ -89,6 +90,16 @@ static void sh4_translate_init(void)
89 "R0_BANK1", "R1_BANK1", "R2_BANK1", "R3_BANK1", 90 "R0_BANK1", "R1_BANK1", "R2_BANK1", "R3_BANK1",
90 "R4_BANK1", "R5_BANK1", "R6_BANK1", "R7_BANK1" 91 "R4_BANK1", "R5_BANK1", "R6_BANK1", "R7_BANK1"
91 }; 92 };
  93 + static const char * const fregnames[32] = {
  94 + "FPR0_BANK0", "FPR1_BANK0", "FPR2_BANK0", "FPR3_BANK0",
  95 + "FPR4_BANK0", "FPR5_BANK0", "FPR6_BANK0", "FPR7_BANK0",
  96 + "FPR8_BANK0", "FPR9_BANK0", "FPR10_BANK0", "FPR11_BANK0",
  97 + "FPR12_BANK0", "FPR13_BANK0", "FPR14_BANK0", "FPR15_BANK0",
  98 + "FPR0_BANK1", "FPR1_BANK1", "FPR2_BANK1", "FPR3_BANK1",
  99 + "FPR4_BANK1", "FPR5_BANK1", "FPR6_BANK1", "FPR7_BANK1",
  100 + "FPR8_BANK1", "FPR9_BANK1", "FPR10_BANK1", "FPR11_BANK1",
  101 + "FPR12_BANK1", "FPR13_BANK1", "FPR14_BANK1", "FPR15_BANK1",
  102 + };
92 103
93 if (done_init) 104 if (done_init)
94 return; 105 return;
@@ -97,8 +108,8 @@ static void sh4_translate_init(void) @@ -97,8 +108,8 @@ static void sh4_translate_init(void)
97 108
98 for (i = 0; i < 24; i++) 109 for (i = 0; i < 24; i++)
99 cpu_gregs[i] = tcg_global_mem_new_i32(TCG_AREG0, 110 cpu_gregs[i] = tcg_global_mem_new_i32(TCG_AREG0,
100 - offsetof(CPUState, gregs[i]),  
101 - gregnames[i]); 111 + offsetof(CPUState, gregs[i]),
  112 + gregnames[i]);
102 113
103 cpu_pc = tcg_global_mem_new_i32(TCG_AREG0, 114 cpu_pc = tcg_global_mem_new_i32(TCG_AREG0,
104 offsetof(CPUState, pc), "PC"); 115 offsetof(CPUState, pc), "PC");
@@ -133,6 +144,11 @@ static void sh4_translate_init(void) @@ -133,6 +144,11 @@ static void sh4_translate_init(void)
133 offsetof(CPUState, delayed_pc), 144 offsetof(CPUState, delayed_pc),
134 "_delayed_pc_"); 145 "_delayed_pc_");
135 146
  147 + for (i = 0; i < 32; i++)
  148 + cpu_fregs[i] = tcg_global_mem_new_i32(TCG_AREG0,
  149 + offsetof(CPUState, fregs[i]),
  150 + fregnames[i]);
  151 +
136 /* register helpers */ 152 /* register helpers */
137 #define GEN_HELPER 2 153 #define GEN_HELPER 2
138 #include "helper.h" 154 #include "helper.h"
@@ -393,38 +409,19 @@ static inline void gen_copy_bit_i32(TCGv t0, int p0, TCGv t1, int p1) @@ -393,38 +409,19 @@ static inline void gen_copy_bit_i32(TCGv t0, int p0, TCGv t1, int p1)
393 tcg_temp_free(tmp); 409 tcg_temp_free(tmp);
394 } 410 }
395 411
396 -  
397 -static inline void gen_load_fpr32(TCGv_i32 t, int reg)  
398 -{  
399 - tcg_gen_ld_i32(t, cpu_env, offsetof(CPUState, fregs[reg]));  
400 -}  
401 -  
402 static inline void gen_load_fpr64(TCGv_i64 t, int reg) 412 static inline void gen_load_fpr64(TCGv_i64 t, int reg)
403 { 413 {
404 - TCGv_i32 tmp1 = tcg_temp_new_i32();  
405 - TCGv_i32 tmp2 = tcg_temp_new_i32();  
406 -  
407 - tcg_gen_ld_i32(tmp1, cpu_env, offsetof(CPUState, fregs[reg]));  
408 - tcg_gen_ld_i32(tmp2, cpu_env, offsetof(CPUState, fregs[reg + 1]));  
409 - tcg_gen_concat_i32_i64(t, tmp2, tmp1);  
410 - tcg_temp_free_i32(tmp1);  
411 - tcg_temp_free_i32(tmp2);  
412 -}  
413 -  
414 -static inline void gen_store_fpr32(TCGv_i32 t, int reg)  
415 -{  
416 - tcg_gen_st_i32(t, cpu_env, offsetof(CPUState, fregs[reg])); 414 + tcg_gen_concat_i32_i64(t, cpu_fregs[reg + 1], cpu_fregs[reg]);
417 } 415 }
418 416
419 static inline void gen_store_fpr64 (TCGv_i64 t, int reg) 417 static inline void gen_store_fpr64 (TCGv_i64 t, int reg)
420 { 418 {
421 TCGv_i32 tmp = tcg_temp_new_i32(); 419 TCGv_i32 tmp = tcg_temp_new_i32();
422 -  
423 tcg_gen_trunc_i64_i32(tmp, t); 420 tcg_gen_trunc_i64_i32(tmp, t);
424 - tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUState, fregs[reg + 1])); 421 + tcg_gen_mov_i32(cpu_fregs[reg + 1], tmp);
425 tcg_gen_shri_i64(t, t, 32); 422 tcg_gen_shri_i64(t, t, 32);
426 tcg_gen_trunc_i64_i32(tmp, t); 423 tcg_gen_trunc_i64_i32(tmp, t);
427 - tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUState, fregs[reg])); 424 + tcg_gen_mov_i32(cpu_fregs[reg], tmp);
428 tcg_temp_free_i32(tmp); 425 tcg_temp_free_i32(tmp);
429 } 426 }
430 427
@@ -989,10 +986,7 @@ static void _decode_opc(DisasContext * ctx) @@ -989,10 +986,7 @@ static void _decode_opc(DisasContext * ctx)
989 gen_store_fpr64(fp, XREG(B11_8)); 986 gen_store_fpr64(fp, XREG(B11_8));
990 tcg_temp_free_i64(fp); 987 tcg_temp_free_i64(fp);
991 } else { 988 } else {
992 - TCGv_i32 fp = tcg_temp_new_i32();  
993 - gen_load_fpr32(fp, FREG(B7_4));  
994 - gen_store_fpr32(fp, FREG(B11_8));  
995 - tcg_temp_free_i32(fp); 989 + tcg_gen_mov_i32(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B7_4)]);
996 } 990 }
997 return; 991 return;
998 case 0xf00a: /* fmov {F,D,X}Rm,@Rn - FPSCR: Nothing */ 992 case 0xf00a: /* fmov {F,D,X}Rm,@Rn - FPSCR: Nothing */
@@ -1002,10 +996,7 @@ static void _decode_opc(DisasContext * ctx) @@ -1002,10 +996,7 @@ static void _decode_opc(DisasContext * ctx)
1002 tcg_gen_qemu_st64(fp, REG(B11_8), ctx->memidx); 996 tcg_gen_qemu_st64(fp, REG(B11_8), ctx->memidx);
1003 tcg_temp_free_i64(fp); 997 tcg_temp_free_i64(fp);
1004 } else { 998 } else {
1005 - TCGv_i32 fp = tcg_temp_new_i32();  
1006 - gen_load_fpr32(fp, FREG(B7_4));  
1007 - tcg_gen_qemu_st32(fp, REG(B11_8), ctx->memidx);  
1008 - tcg_temp_free_i32(fp); 999 + tcg_gen_qemu_st32(cpu_fregs[FREG(B7_4)], REG(B11_8), ctx->memidx);
1009 } 1000 }
1010 return; 1001 return;
1011 case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */ 1002 case 0xf008: /* fmov @Rm,{F,D,X}Rn - FPSCR: Nothing */
@@ -1015,10 +1006,7 @@ static void _decode_opc(DisasContext * ctx) @@ -1015,10 +1006,7 @@ static void _decode_opc(DisasContext * ctx)
1015 gen_store_fpr64(fp, XREG(B11_8)); 1006 gen_store_fpr64(fp, XREG(B11_8));
1016 tcg_temp_free_i64(fp); 1007 tcg_temp_free_i64(fp);
1017 } else { 1008 } else {
1018 - TCGv_i32 fp = tcg_temp_new_i32();  
1019 - tcg_gen_qemu_ld32u(fp, REG(B7_4), ctx->memidx);  
1020 - gen_store_fpr32(fp, FREG(B11_8));  
1021 - tcg_temp_free_i32(fp); 1009 + tcg_gen_qemu_ld32u(cpu_fregs[FREG(B11_8)], REG(B7_4), ctx->memidx);
1022 } 1010 }
1023 return; 1011 return;
1024 case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */ 1012 case 0xf009: /* fmov @Rm+,{F,D,X}Rn - FPSCR: Nothing */
@@ -1029,10 +1017,7 @@ static void _decode_opc(DisasContext * ctx) @@ -1029,10 +1017,7 @@ static void _decode_opc(DisasContext * ctx)
1029 tcg_temp_free_i64(fp); 1017 tcg_temp_free_i64(fp);
1030 tcg_gen_addi_i32(REG(B7_4),REG(B7_4), 8); 1018 tcg_gen_addi_i32(REG(B7_4),REG(B7_4), 8);
1031 } else { 1019 } else {
1032 - TCGv_i32 fp = tcg_temp_new_i32();  
1033 - tcg_gen_qemu_ld32u(fp, REG(B7_4), ctx->memidx);  
1034 - gen_store_fpr32(fp, FREG(B11_8));  
1035 - tcg_temp_free_i32(fp); 1020 + tcg_gen_qemu_ld32u(cpu_fregs[FREG(B11_8)], REG(B7_4), ctx->memidx);
1036 tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 4); 1021 tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 4);
1037 } 1022 }
1038 return; 1023 return;
@@ -1050,13 +1035,9 @@ static void _decode_opc(DisasContext * ctx) @@ -1050,13 +1035,9 @@ static void _decode_opc(DisasContext * ctx)
1050 tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 8); 1035 tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 8);
1051 } else { 1036 } else {
1052 TCGv addr; 1037 TCGv addr;
1053 - TCGv_i32 fp;  
1054 addr = tcg_temp_new_i32(); 1038 addr = tcg_temp_new_i32();
1055 tcg_gen_subi_i32(addr, REG(B11_8), 4); 1039 tcg_gen_subi_i32(addr, REG(B11_8), 4);
1056 - fp = tcg_temp_new_i32();  
1057 - gen_load_fpr32(fp, FREG(B7_4));  
1058 - tcg_gen_qemu_st32(fp, addr, ctx->memidx);  
1059 - tcg_temp_free_i32(fp); 1040 + tcg_gen_qemu_st32(cpu_fregs[FREG(B7_4)], addr, ctx->memidx);
1060 tcg_temp_free(addr); 1041 tcg_temp_free(addr);
1061 tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 4); 1042 tcg_gen_subi_i32(REG(B11_8), REG(B11_8), 4);
1062 } 1043 }
@@ -1071,10 +1052,7 @@ static void _decode_opc(DisasContext * ctx) @@ -1071,10 +1052,7 @@ static void _decode_opc(DisasContext * ctx)
1071 gen_store_fpr64(fp, XREG(B11_8)); 1052 gen_store_fpr64(fp, XREG(B11_8));
1072 tcg_temp_free_i64(fp); 1053 tcg_temp_free_i64(fp);
1073 } else { 1054 } else {
1074 - TCGv_i32 fp = tcg_temp_new_i32();  
1075 - tcg_gen_qemu_ld32u(fp, addr, ctx->memidx);  
1076 - gen_store_fpr32(fp, FREG(B11_8));  
1077 - tcg_temp_free_i32(fp); 1055 + tcg_gen_qemu_ld32u(cpu_fregs[FREG(B11_8)], addr, ctx->memidx);
1078 } 1056 }
1079 tcg_temp_free(addr); 1057 tcg_temp_free(addr);
1080 } 1058 }
@@ -1089,10 +1067,7 @@ static void _decode_opc(DisasContext * ctx) @@ -1089,10 +1067,7 @@ static void _decode_opc(DisasContext * ctx)
1089 tcg_gen_qemu_st64(fp, addr, ctx->memidx); 1067 tcg_gen_qemu_st64(fp, addr, ctx->memidx);
1090 tcg_temp_free_i64(fp); 1068 tcg_temp_free_i64(fp);
1091 } else { 1069 } else {
1092 - TCGv_i32 fp = tcg_temp_new_i32();  
1093 - gen_load_fpr32(fp, FREG(B7_4));  
1094 - tcg_gen_qemu_st32(fp, addr, ctx->memidx);  
1095 - tcg_temp_free_i32(fp); 1070 + tcg_gen_qemu_st32(cpu_fregs[FREG(B7_4)], addr, ctx->memidx);
1096 } 1071 }
1097 tcg_temp_free(addr); 1072 tcg_temp_free(addr);
1098 } 1073 }
@@ -1137,36 +1112,26 @@ static void _decode_opc(DisasContext * ctx) @@ -1137,36 +1112,26 @@ static void _decode_opc(DisasContext * ctx)
1137 tcg_temp_free_i64(fp0); 1112 tcg_temp_free_i64(fp0);
1138 tcg_temp_free_i64(fp1); 1113 tcg_temp_free_i64(fp1);
1139 } else { 1114 } else {
1140 - TCGv_i32 fp0, fp1;  
1141 -  
1142 - fp0 = tcg_temp_new_i32();  
1143 - fp1 = tcg_temp_new_i32();  
1144 - gen_load_fpr32(fp0, FREG(B11_8));  
1145 - gen_load_fpr32(fp1, FREG(B7_4));  
1146 -  
1147 switch (ctx->opcode & 0xf00f) { 1115 switch (ctx->opcode & 0xf00f) {
1148 case 0xf000: /* fadd Rm,Rn */ 1116 case 0xf000: /* fadd Rm,Rn */
1149 - gen_helper_fadd_FT(fp0, fp0, fp1); 1117 + gen_helper_fadd_FT(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B7_4)]);
1150 break; 1118 break;
1151 case 0xf001: /* fsub Rm,Rn */ 1119 case 0xf001: /* fsub Rm,Rn */
1152 - gen_helper_fsub_FT(fp0, fp0, fp1); 1120 + gen_helper_fsub_FT(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B7_4)]);
1153 break; 1121 break;
1154 case 0xf002: /* fmul Rm,Rn */ 1122 case 0xf002: /* fmul Rm,Rn */
1155 - gen_helper_fmul_FT(fp0, fp0, fp1); 1123 + gen_helper_fmul_FT(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B7_4)]);
1156 break; 1124 break;
1157 case 0xf003: /* fdiv Rm,Rn */ 1125 case 0xf003: /* fdiv Rm,Rn */
1158 - gen_helper_fdiv_FT(fp0, fp0, fp1); 1126 + gen_helper_fdiv_FT(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B7_4)]);
1159 break; 1127 break;
1160 case 0xf004: /* fcmp/eq Rm,Rn */ 1128 case 0xf004: /* fcmp/eq Rm,Rn */
1161 - gen_helper_fcmp_eq_FT(fp0, fp1); 1129 + gen_helper_fcmp_eq_FT(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B7_4)]);
1162 return; 1130 return;
1163 case 0xf005: /* fcmp/gt Rm,Rn */ 1131 case 0xf005: /* fcmp/gt Rm,Rn */
1164 - gen_helper_fcmp_gt_FT(fp0, fp1); 1132 + gen_helper_fcmp_gt_FT(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B7_4)]);
1165 return; 1133 return;
1166 } 1134 }
1167 - gen_store_fpr32(fp0, FREG(B11_8));  
1168 - tcg_temp_free_i32(fp0);  
1169 - tcg_temp_free_i32(fp1);  
1170 } 1135 }
1171 } 1136 }
1172 return; 1137 return;
@@ -1633,18 +1598,12 @@ static void _decode_opc(DisasContext * ctx) @@ -1633,18 +1598,12 @@ static void _decode_opc(DisasContext * ctx)
1633 return; 1598 return;
1634 case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */ 1599 case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */
1635 { 1600 {
1636 - TCGv fp = tcg_temp_new();  
1637 - tcg_gen_mov_i32(fp, cpu_fpul);  
1638 - gen_store_fpr32(fp, FREG(B11_8));  
1639 - tcg_temp_free(fp); 1601 + tcg_gen_mov_i32(cpu_fregs[FREG(B11_8)], cpu_fpul);
1640 } 1602 }
1641 return; 1603 return;
1642 case 0xf01d: /* flds FRm,FPUL - FPSCR: Nothing */ 1604 case 0xf01d: /* flds FRm,FPUL - FPSCR: Nothing */
1643 { 1605 {
1644 - TCGv fp = tcg_temp_new();  
1645 - gen_load_fpr32(fp, FREG(B11_8));  
1646 - tcg_gen_mov_i32(cpu_fpul, fp);  
1647 - tcg_temp_free(fp); 1606 + tcg_gen_mov_i32(cpu_fpul, cpu_fregs[FREG(B11_8)]);
1648 } 1607 }
1649 return; 1608 return;
1650 case 0xf02d: /* float FPUL,FRn/DRn - FPSCR: R[PR,Enable.I]/W[Cause,Flag] */ 1609 case 0xf02d: /* float FPUL,FRn/DRn - FPSCR: R[PR,Enable.I]/W[Cause,Flag] */
@@ -1658,10 +1617,7 @@ static void _decode_opc(DisasContext * ctx) @@ -1658,10 +1617,7 @@ static void _decode_opc(DisasContext * ctx)
1658 tcg_temp_free_i64(fp); 1617 tcg_temp_free_i64(fp);
1659 } 1618 }
1660 else { 1619 else {
1661 - TCGv_i32 fp = tcg_temp_new_i32();  
1662 - gen_helper_float_FT(fp, cpu_fpul);  
1663 - gen_store_fpr32(fp, FREG(B11_8));  
1664 - tcg_temp_free_i32(fp); 1620 + gen_helper_float_FT(cpu_fregs[FREG(B11_8)], cpu_fpul);
1665 } 1621 }
1666 return; 1622 return;
1667 case 0xf03d: /* ftrc FRm/DRm,FPUL - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */ 1623 case 0xf03d: /* ftrc FRm/DRm,FPUL - FPSCR: R[PR,Enable.V]/W[Cause,Flag] */
@@ -1675,19 +1631,12 @@ static void _decode_opc(DisasContext * ctx) @@ -1675,19 +1631,12 @@ static void _decode_opc(DisasContext * ctx)
1675 tcg_temp_free_i64(fp); 1631 tcg_temp_free_i64(fp);
1676 } 1632 }
1677 else { 1633 else {
1678 - TCGv_i32 fp = tcg_temp_new_i32();  
1679 - gen_load_fpr32(fp, FREG(B11_8));  
1680 - gen_helper_ftrc_FT(cpu_fpul, fp);  
1681 - tcg_temp_free_i32(fp); 1634 + gen_helper_ftrc_FT(cpu_fpul, cpu_fregs[FREG(B11_8)]);
1682 } 1635 }
1683 return; 1636 return;
1684 case 0xf04d: /* fneg FRn/DRn - FPSCR: Nothing */ 1637 case 0xf04d: /* fneg FRn/DRn - FPSCR: Nothing */
1685 { 1638 {
1686 - TCGv_i32 fp = tcg_temp_new_i32();  
1687 - gen_load_fpr32(fp, FREG(B11_8));  
1688 - gen_helper_fneg_T(fp, fp);  
1689 - gen_store_fpr32(fp, FREG(B11_8));  
1690 - tcg_temp_free_i32(fp); 1639 + gen_helper_fneg_T(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B11_8)]);
1691 } 1640 }
1692 return; 1641 return;
1693 case 0xf05d: /* fabs FRn/DRn */ 1642 case 0xf05d: /* fabs FRn/DRn */
@@ -1700,11 +1649,7 @@ static void _decode_opc(DisasContext * ctx) @@ -1700,11 +1649,7 @@ static void _decode_opc(DisasContext * ctx)
1700 gen_store_fpr64(fp, DREG(B11_8)); 1649 gen_store_fpr64(fp, DREG(B11_8));
1701 tcg_temp_free_i64(fp); 1650 tcg_temp_free_i64(fp);
1702 } else { 1651 } else {
1703 - TCGv_i32 fp = tcg_temp_new_i32();  
1704 - gen_load_fpr32(fp, FREG(B11_8));  
1705 - gen_helper_fabs_FT(fp, fp);  
1706 - gen_store_fpr32(fp, FREG(B11_8));  
1707 - tcg_temp_free_i32(fp); 1652 + gen_helper_fabs_FT(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B11_8)]);
1708 } 1653 }
1709 return; 1654 return;
1710 case 0xf06d: /* fsqrt FRn */ 1655 case 0xf06d: /* fsqrt FRn */
@@ -1717,28 +1662,20 @@ static void _decode_opc(DisasContext * ctx) @@ -1717,28 +1662,20 @@ static void _decode_opc(DisasContext * ctx)
1717 gen_store_fpr64(fp, DREG(B11_8)); 1662 gen_store_fpr64(fp, DREG(B11_8));
1718 tcg_temp_free_i64(fp); 1663 tcg_temp_free_i64(fp);
1719 } else { 1664 } else {
1720 - TCGv_i32 fp = tcg_temp_new_i32();  
1721 - gen_load_fpr32(fp, FREG(B11_8));  
1722 - gen_helper_fsqrt_FT(fp, fp);  
1723 - gen_store_fpr32(fp, FREG(B11_8));  
1724 - tcg_temp_free_i32(fp); 1665 + gen_helper_fsqrt_FT(cpu_fregs[FREG(B11_8)], cpu_fregs[FREG(B11_8)]);
1725 } 1666 }
1726 return; 1667 return;
1727 case 0xf07d: /* fsrra FRn */ 1668 case 0xf07d: /* fsrra FRn */
1728 break; 1669 break;
1729 case 0xf08d: /* fldi0 FRn - FPSCR: R[PR] */ 1670 case 0xf08d: /* fldi0 FRn - FPSCR: R[PR] */
1730 if (!(ctx->fpscr & FPSCR_PR)) { 1671 if (!(ctx->fpscr & FPSCR_PR)) {
1731 - TCGv_i32 val = tcg_const_i32(0);  
1732 - gen_load_fpr32(val, FREG(B11_8));  
1733 - tcg_temp_free_i32(val); 1672 + tcg_gen_movi_i32(cpu_fregs[FREG(B11_8)], 0);
1734 return; 1673 return;
1735 } 1674 }
1736 break; 1675 break;
1737 case 0xf09d: /* fldi1 FRn - FPSCR: R[PR] */ 1676 case 0xf09d: /* fldi1 FRn - FPSCR: R[PR] */
1738 if (!(ctx->fpscr & FPSCR_PR)) { 1677 if (!(ctx->fpscr & FPSCR_PR)) {
1739 - TCGv_i32 val = tcg_const_i32(0x3f800000);  
1740 - gen_load_fpr32(val, FREG(B11_8));  
1741 - tcg_temp_free_i32(val); 1678 + tcg_gen_movi_i32(cpu_fregs[FREG(B11_8)], 0x3f800000);
1742 return; 1679 return;
1743 } 1680 }
1744 break; 1681 break;