Commit aa0bf00b659111905887269775f1f611c8cda74b

Authored by ths
1 parent faf7aaa9

Switch most MIPS FP load/stores to TCG.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4732 c046a42c-6fe2-441c-8c8c-71466251a162
target-mips/op.c
... ... @@ -48,103 +48,6 @@
48 48 func(arg0, arg1, arg2, arg3)
49 49 #endif
50 50  
51   -#define FREG 0
52   -#include "fop_template.c"
53   -#undef FREG
54   -#define FREG 1
55   -#include "fop_template.c"
56   -#undef FREG
57   -#define FREG 2
58   -#include "fop_template.c"
59   -#undef FREG
60   -#define FREG 3
61   -#include "fop_template.c"
62   -#undef FREG
63   -#define FREG 4
64   -#include "fop_template.c"
65   -#undef FREG
66   -#define FREG 5
67   -#include "fop_template.c"
68   -#undef FREG
69   -#define FREG 6
70   -#include "fop_template.c"
71   -#undef FREG
72   -#define FREG 7
73   -#include "fop_template.c"
74   -#undef FREG
75   -#define FREG 8
76   -#include "fop_template.c"
77   -#undef FREG
78   -#define FREG 9
79   -#include "fop_template.c"
80   -#undef FREG
81   -#define FREG 10
82   -#include "fop_template.c"
83   -#undef FREG
84   -#define FREG 11
85   -#include "fop_template.c"
86   -#undef FREG
87   -#define FREG 12
88   -#include "fop_template.c"
89   -#undef FREG
90   -#define FREG 13
91   -#include "fop_template.c"
92   -#undef FREG
93   -#define FREG 14
94   -#include "fop_template.c"
95   -#undef FREG
96   -#define FREG 15
97   -#include "fop_template.c"
98   -#undef FREG
99   -#define FREG 16
100   -#include "fop_template.c"
101   -#undef FREG
102   -#define FREG 17
103   -#include "fop_template.c"
104   -#undef FREG
105   -#define FREG 18
106   -#include "fop_template.c"
107   -#undef FREG
108   -#define FREG 19
109   -#include "fop_template.c"
110   -#undef FREG
111   -#define FREG 20
112   -#include "fop_template.c"
113   -#undef FREG
114   -#define FREG 21
115   -#include "fop_template.c"
116   -#undef FREG
117   -#define FREG 22
118   -#include "fop_template.c"
119   -#undef FREG
120   -#define FREG 23
121   -#include "fop_template.c"
122   -#undef FREG
123   -#define FREG 24
124   -#include "fop_template.c"
125   -#undef FREG
126   -#define FREG 25
127   -#include "fop_template.c"
128   -#undef FREG
129   -#define FREG 26
130   -#include "fop_template.c"
131   -#undef FREG
132   -#define FREG 27
133   -#include "fop_template.c"
134   -#undef FREG
135   -#define FREG 28
136   -#include "fop_template.c"
137   -#undef FREG
138   -#define FREG 29
139   -#include "fop_template.c"
140   -#undef FREG
141   -#define FREG 30
142   -#include "fop_template.c"
143   -#undef FREG
144   -#define FREG 31
145   -#include "fop_template.c"
146   -#undef FREG
147   -
148 51 /* Load and store */
149 52 #define MEMSUFFIX _raw
150 53 #include "op_mem.c"
... ... @@ -467,48 +370,6 @@ void op_dmultu (void)
467 370 # define DEBUG_FPU_STATE() do { } while(0)
468 371 #endif
469 372  
470   -void op_mfc1 (void)
471   -{
472   - T0 = (int32_t)WT0;
473   - DEBUG_FPU_STATE();
474   - FORCE_RET();
475   -}
476   -
477   -void op_mtc1 (void)
478   -{
479   - WT0 = T0;
480   - DEBUG_FPU_STATE();
481   - FORCE_RET();
482   -}
483   -
484   -void op_dmfc1 (void)
485   -{
486   - T0 = DT0;
487   - DEBUG_FPU_STATE();
488   - FORCE_RET();
489   -}
490   -
491   -void op_dmtc1 (void)
492   -{
493   - DT0 = T0;
494   - DEBUG_FPU_STATE();
495   - FORCE_RET();
496   -}
497   -
498   -void op_mfhc1 (void)
499   -{
500   - T0 = (int32_t)WTH0;
501   - DEBUG_FPU_STATE();
502   - FORCE_RET();
503   -}
504   -
505   -void op_mthc1 (void)
506   -{
507   - WTH0 = T0;
508   - DEBUG_FPU_STATE();
509   - FORCE_RET();
510   -}
511   -
512 373 /* Float support.
513 374 Single precition routines have a "s" suffix, double precision a
514 375 "d" suffix, 32bit integer "w", 64bit integer "l", paired singe "ps",
... ...
target-mips/op_mem.c
... ... @@ -268,26 +268,6 @@ void glue(op_sdr, MEMSUFFIX) (void)
268 268 }
269 269 #endif /* TARGET_MIPS64 */
270 270  
271   -void glue(op_lwc1, MEMSUFFIX) (void)
272   -{
273   - WT0 = glue(ldl, MEMSUFFIX)(T0);
274   - FORCE_RET();
275   -}
276   -void glue(op_swc1, MEMSUFFIX) (void)
277   -{
278   - glue(stl, MEMSUFFIX)(T0, WT0);
279   - FORCE_RET();
280   -}
281   -void glue(op_ldc1, MEMSUFFIX) (void)
282   -{
283   - DT0 = glue(ldq, MEMSUFFIX)(T0);
284   - FORCE_RET();
285   -}
286   -void glue(op_sdc1, MEMSUFFIX) (void)
287   -{
288   - glue(stq, MEMSUFFIX)(T0, DT0);
289   - FORCE_RET();
290   -}
291 271 void glue(op_luxc1, MEMSUFFIX) (void)
292 272 {
293 273 DT0 = glue(ldq, MEMSUFFIX)(T0 & ~0x7);
... ...
target-mips/translate.c
... ... @@ -423,7 +423,10 @@ enum {
423 423 };
424 424  
425 425 /* global register indices */
426   -static TCGv cpu_env, current_tc_gprs, current_tc_hi, cpu_T[2];
  426 +static TCGv cpu_env, current_tc_gprs, current_tc_hi, current_fpu, cpu_T[2];
  427 +
  428 +/* FPU TNs, global for now. */
  429 +static TCGv fpu32_T[3], fpu64_T[3], fpu32h_T[3];
427 430  
428 431 static inline void tcg_gen_helper_0_1i(void *func, TCGv arg)
429 432 {
... ... @@ -572,58 +575,60 @@ static inline void gen_store_srsgpr (TCGv t, int reg)
572 575 }
573 576  
574 577 /* Floating point register moves. */
575   -#define FGEN32(func, NAME) \
576   -static GenOpFunc *NAME ## _table [32] = { \
577   -NAME ## 0, NAME ## 1, NAME ## 2, NAME ## 3, \
578   -NAME ## 4, NAME ## 5, NAME ## 6, NAME ## 7, \
579   -NAME ## 8, NAME ## 9, NAME ## 10, NAME ## 11, \
580   -NAME ## 12, NAME ## 13, NAME ## 14, NAME ## 15, \
581   -NAME ## 16, NAME ## 17, NAME ## 18, NAME ## 19, \
582   -NAME ## 20, NAME ## 21, NAME ## 22, NAME ## 23, \
583   -NAME ## 24, NAME ## 25, NAME ## 26, NAME ## 27, \
584   -NAME ## 28, NAME ## 29, NAME ## 30, NAME ## 31, \
585   -}; \
586   -static always_inline void func(int n) \
587   -{ \
588   - NAME ## _table[n](); \
  578 +static inline void gen_load_fpr32 (TCGv t, int reg)
  579 +{
  580 + tcg_gen_ld_i32(t, current_fpu, 8 * reg + 4 * FP_ENDIAN_IDX);
589 581 }
590 582  
591   -FGEN32(gen_op_load_fpr_WT0, gen_op_load_fpr_WT0_fpr);
592   -FGEN32(gen_op_store_fpr_WT0, gen_op_store_fpr_WT0_fpr);
593   -
594   -FGEN32(gen_op_load_fpr_WT1, gen_op_load_fpr_WT1_fpr);
595   -FGEN32(gen_op_store_fpr_WT1, gen_op_store_fpr_WT1_fpr);
596   -
597   -FGEN32(gen_op_load_fpr_WT2, gen_op_load_fpr_WT2_fpr);
598   -FGEN32(gen_op_store_fpr_WT2, gen_op_store_fpr_WT2_fpr);
599   -
600   -FGEN32(gen_op_load_fpr_DT0, gen_op_load_fpr_DT0_fpr);
601   -FGEN32(gen_op_store_fpr_DT0, gen_op_store_fpr_DT0_fpr);
602   -
603   -FGEN32(gen_op_load_fpr_DT1, gen_op_load_fpr_DT1_fpr);
604   -FGEN32(gen_op_store_fpr_DT1, gen_op_store_fpr_DT1_fpr);
605   -
606   -FGEN32(gen_op_load_fpr_DT2, gen_op_load_fpr_DT2_fpr);
607   -FGEN32(gen_op_store_fpr_DT2, gen_op_store_fpr_DT2_fpr);
  583 +static inline void gen_store_fpr32 (TCGv t, int reg)
  584 +{
  585 + tcg_gen_st_i32(t, current_fpu, 8 * reg + 4 * FP_ENDIAN_IDX);
  586 +}
608 587  
609   -FGEN32(gen_op_load_fpr_WTH0, gen_op_load_fpr_WTH0_fpr);
610   -FGEN32(gen_op_store_fpr_WTH0, gen_op_store_fpr_WTH0_fpr);
  588 +static inline void gen_load_fpr64 (DisasContext *ctx, TCGv t, int reg)
  589 +{
  590 + if (ctx->hflags & MIPS_HFLAG_F64) {
  591 + tcg_gen_ld_i64(t, current_fpu, 8 * reg);
  592 + } else {
  593 + TCGv r_tmp1 = tcg_temp_new(TCG_TYPE_I32);
  594 + TCGv r_tmp2 = tcg_temp_new(TCG_TYPE_I64);
  595 +
  596 + tcg_gen_ld_i32(r_tmp1, current_fpu, 8 * (reg | 1) + 4 * FP_ENDIAN_IDX);
  597 + tcg_gen_extu_i32_i64(t, r_tmp1);
  598 + tcg_gen_shli_i64(t, t, 32);
  599 + tcg_gen_ld_i32(r_tmp1, current_fpu, 8 * (reg & ~1) + 4 * FP_ENDIAN_IDX);
  600 + tcg_gen_extu_i32_i64(r_tmp2, r_tmp1);
  601 + tcg_gen_or_i64(t, t, r_tmp2);
  602 + tcg_temp_free(r_tmp1);
  603 + tcg_temp_free(r_tmp2);
  604 + }
  605 +}
611 606  
612   -FGEN32(gen_op_load_fpr_WTH1, gen_op_load_fpr_WTH1_fpr);
613   -FGEN32(gen_op_store_fpr_WTH1, gen_op_store_fpr_WTH1_fpr);
  607 +static inline void gen_store_fpr64 (DisasContext *ctx, TCGv t, int reg)
  608 +{
  609 + if (ctx->hflags & MIPS_HFLAG_F64) {
  610 + tcg_gen_st_i64(t, current_fpu, 8 * reg);
  611 + } else {
  612 + TCGv r_tmp = tcg_temp_new(TCG_TYPE_I32);
614 613  
615   -FGEN32(gen_op_load_fpr_WTH2, gen_op_load_fpr_WTH2_fpr);
616   -FGEN32(gen_op_store_fpr_WTH2, gen_op_store_fpr_WTH2_fpr);
  614 + tcg_gen_trunc_i64_i32(r_tmp, t);
  615 + tcg_gen_st_i32(r_tmp, current_fpu, 8 * (reg & ~1) + 4 * FP_ENDIAN_IDX);
  616 + tcg_gen_shri_i64(t, t, 32);
  617 + tcg_gen_trunc_i64_i32(r_tmp, t);
  618 + tcg_gen_st_i32(r_tmp, current_fpu, 8 * (reg | 1) + 4 * FP_ENDIAN_IDX);
  619 + tcg_temp_free(r_tmp);
  620 + }
  621 +}
617 622  
618   -#define GEN_LOAD_FREG_FTN(FTn, Fn) \
619   -do { \
620   - glue(gen_op_load_fpr_, FTn)(Fn); \
621   -} while (0)
  623 +static inline void gen_load_fpr32h (TCGv t, int reg)
  624 +{
  625 + tcg_gen_ld_i32(t, current_fpu, 8 * reg + 4 * !FP_ENDIAN_IDX);
  626 +}
622 627  
623   -#define GEN_STORE_FTN_FREG(Fn, FTn) \
624   -do { \
625   - glue(gen_op_store_fpr_, FTn)(Fn); \
626   -} while (0)
  628 +static inline void gen_store_fpr32h (TCGv t, int reg)
  629 +{
  630 + tcg_gen_st_i32(t, current_fpu, 8 * reg + 4 * !FP_ENDIAN_IDX);
  631 +}
627 632  
628 633 #define FOP_CONDS(type, fmt) \
629 634 static GenOpFunc1 * gen_op_cmp ## type ## _ ## fmt ## _table[16] = { \
... ... @@ -950,10 +955,6 @@ OP_LD_TABLE(wl);
950 955 OP_LD_TABLE(wr);
951 956 OP_ST_TABLE(wl);
952 957 OP_ST_TABLE(wr);
953   -OP_LD_TABLE(wc1);
954   -OP_ST_TABLE(wc1);
955   -OP_LD_TABLE(dc1);
956   -OP_ST_TABLE(dc1);
957 958 OP_LD_TABLE(uxc1);
958 959 OP_ST_TABLE(uxc1);
959 960  
... ... @@ -1028,26 +1029,6 @@ OP_ST_ATOMIC(scd,st64,0x7);
1028 1029 #endif
1029 1030 #undef OP_ST_ATOMIC
1030 1031  
1031   -void inline op_ldst_lwc1(DisasContext *ctx)
1032   -{
1033   - op_ldst(lwc1);
1034   -}
1035   -
1036   -void inline op_ldst_ldc1(DisasContext *ctx)
1037   -{
1038   - op_ldst(ldc1);
1039   -}
1040   -
1041   -void inline op_ldst_swc1(DisasContext *ctx)
1042   -{
1043   - op_ldst(swc1);
1044   -}
1045   -
1046   -void inline op_ldst_sdc1(DisasContext *ctx)
1047   -{
1048   - op_ldst(sdc1);
1049   -}
1050   -
1051 1032 /* Load and store */
1052 1033 static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt,
1053 1034 int base, int16_t offset)
... ... @@ -1218,23 +1199,23 @@ static void gen_flt_ldst (DisasContext *ctx, uint32_t opc, int ft,
1218 1199 memory access. */
1219 1200 switch (opc) {
1220 1201 case OPC_LWC1:
1221   - op_ldst_lwc1(ctx);
1222   - GEN_STORE_FTN_FREG(ft, WT0);
  1202 + tcg_gen_qemu_ld32s(fpu32_T[0], cpu_T[0], ctx->mem_idx);
  1203 + gen_store_fpr32(fpu32_T[0], ft);
1223 1204 opn = "lwc1";
1224 1205 break;
1225 1206 case OPC_SWC1:
1226   - GEN_LOAD_FREG_FTN(WT0, ft);
1227   - op_ldst_swc1(ctx);
  1207 + gen_load_fpr32(fpu32_T[0], ft);
  1208 + tcg_gen_qemu_st32(fpu32_T[0], cpu_T[0], ctx->mem_idx);
1228 1209 opn = "swc1";
1229 1210 break;
1230 1211 case OPC_LDC1:
1231   - op_ldst_ldc1(ctx);
1232   - GEN_STORE_FTN_FREG(ft, DT0);
  1212 + tcg_gen_qemu_ld64(fpu64_T[0], cpu_T[0], ctx->mem_idx);
  1213 + gen_store_fpr64(ctx, fpu64_T[0], ft);
1233 1214 opn = "ldc1";
1234 1215 break;
1235 1216 case OPC_SDC1:
1236   - GEN_LOAD_FREG_FTN(DT0, ft);
1237   - op_ldst_sdc1(ctx);
  1217 + gen_load_fpr64(ctx, fpu64_T[0], ft);
  1218 + tcg_gen_qemu_st64(fpu64_T[0], cpu_T[0], ctx->mem_idx);
1238 1219 opn = "sdc1";
1239 1220 break;
1240 1221 default:
... ... @@ -5073,11 +5054,11 @@ static void gen_mftr(CPUState *env, DisasContext *ctx, int rt,
5073 5054 case 2:
5074 5055 /* XXX: For now we support only a single FPU context. */
5075 5056 if (h == 0) {
5076   - GEN_LOAD_FREG_FTN(WT0, rt);
5077   - gen_op_mfc1();
  5057 + gen_load_fpr32(fpu32_T[0], rt);
  5058 + tcg_gen_ext_i32_tl(cpu_T[0], fpu32_T[0]);
5078 5059 } else {
5079   - GEN_LOAD_FREG_FTN(WTH0, rt);
5080   - gen_op_mfhc1();
  5060 + gen_load_fpr32h(fpu32h_T[0], rt);
  5061 + tcg_gen_ext_i32_tl(cpu_T[0], fpu32h_T[0]);
5081 5062 }
5082 5063 break;
5083 5064 case 3:
... ... @@ -5237,11 +5218,11 @@ static void gen_mttr(CPUState *env, DisasContext *ctx, int rd,
5237 5218 case 2:
5238 5219 /* XXX: For now we support only a single FPU context. */
5239 5220 if (h == 0) {
5240   - gen_op_mtc1();
5241   - GEN_STORE_FTN_FREG(rd, WT0);
  5221 + tcg_gen_trunc_tl_i32(fpu32_T[0], cpu_T[0]);
  5222 + gen_store_fpr32(fpu32_T[0], rd);
5242 5223 } else {
5243   - gen_op_mthc1();
5244   - GEN_STORE_FTN_FREG(rd, WTH0);
  5224 + tcg_gen_trunc_tl_i32(fpu32h_T[0], cpu_T[0]);
  5225 + gen_store_fpr32h(fpu32h_T[0], rd);
5245 5226 }
5246 5227 break;
5247 5228 case 3:
... ... @@ -5464,15 +5445,15 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs)
5464 5445  
5465 5446 switch (opc) {
5466 5447 case OPC_MFC1:
5467   - GEN_LOAD_FREG_FTN(WT0, fs);
5468   - gen_op_mfc1();
  5448 + gen_load_fpr32(fpu32_T[0], fs);
  5449 + tcg_gen_ext_i32_tl(cpu_T[0], fpu32_T[0]);
5469 5450 gen_store_gpr(cpu_T[0], rt);
5470 5451 opn = "mfc1";
5471 5452 break;
5472 5453 case OPC_MTC1:
5473 5454 gen_load_gpr(cpu_T[0], rt);
5474   - gen_op_mtc1();
5475   - GEN_STORE_FTN_FREG(fs, WT0);
  5455 + tcg_gen_trunc_tl_i32(fpu32_T[0], cpu_T[0]);
  5456 + gen_store_fpr32(fpu32_T[0], fs);
5476 5457 opn = "mtc1";
5477 5458 break;
5478 5459 case OPC_CFC1:
... ... @@ -5486,27 +5467,27 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs)
5486 5467 opn = "ctc1";
5487 5468 break;
5488 5469 case OPC_DMFC1:
5489   - GEN_LOAD_FREG_FTN(DT0, fs);
5490   - gen_op_dmfc1();
  5470 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  5471 + tcg_gen_mov_tl(cpu_T[0], fpu64_T[0]);
5491 5472 gen_store_gpr(cpu_T[0], rt);
5492 5473 opn = "dmfc1";
5493 5474 break;
5494 5475 case OPC_DMTC1:
5495 5476 gen_load_gpr(cpu_T[0], rt);
5496   - gen_op_dmtc1();
5497   - GEN_STORE_FTN_FREG(fs, DT0);
  5477 + tcg_gen_mov_tl(fpu64_T[0], cpu_T[0]);
  5478 + gen_store_fpr64(ctx, fpu64_T[0], fs);
5498 5479 opn = "dmtc1";
5499 5480 break;
5500 5481 case OPC_MFHC1:
5501   - GEN_LOAD_FREG_FTN(WTH0, fs);
5502   - gen_op_mfhc1();
  5482 + gen_load_fpr32h(fpu32h_T[0], fs);
  5483 + tcg_gen_ext_i32_tl(cpu_T[0], fpu32h_T[0]);
5503 5484 gen_store_gpr(cpu_T[0], rt);
5504 5485 opn = "mfhc1";
5505 5486 break;
5506 5487 case OPC_MTHC1:
5507 5488 gen_load_gpr(cpu_T[0], rt);
5508   - gen_op_mthc1();
5509   - GEN_STORE_FTN_FREG(fs, WTH0);
  5489 + tcg_gen_trunc_tl_i32(fpu32h_T[0], cpu_T[0]);
  5490 + gen_store_fpr32h(fpu32h_T[0], fs);
5510 5491 opn = "mthc1";
5511 5492 break;
5512 5493 default:
... ... @@ -5614,207 +5595,207 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5614 5595  
5615 5596 switch (ctx->opcode & FOP(0x3f, 0x1f)) {
5616 5597 case FOP(0, 16):
5617   - GEN_LOAD_FREG_FTN(WT0, fs);
5618   - GEN_LOAD_FREG_FTN(WT1, ft);
  5598 + gen_load_fpr32(fpu32_T[0], fs);
  5599 + gen_load_fpr32(fpu32_T[1], ft);
5619 5600 gen_op_float_add_s();
5620   - GEN_STORE_FTN_FREG(fd, WT2);
  5601 + gen_store_fpr32(fpu32_T[2], fd);
5621 5602 opn = "add.s";
5622 5603 optype = BINOP;
5623 5604 break;
5624 5605 case FOP(1, 16):
5625   - GEN_LOAD_FREG_FTN(WT0, fs);
5626   - GEN_LOAD_FREG_FTN(WT1, ft);
  5606 + gen_load_fpr32(fpu32_T[0], fs);
  5607 + gen_load_fpr32(fpu32_T[1], ft);
5627 5608 gen_op_float_sub_s();
5628   - GEN_STORE_FTN_FREG(fd, WT2);
  5609 + gen_store_fpr32(fpu32_T[2], fd);
5629 5610 opn = "sub.s";
5630 5611 optype = BINOP;
5631 5612 break;
5632 5613 case FOP(2, 16):
5633   - GEN_LOAD_FREG_FTN(WT0, fs);
5634   - GEN_LOAD_FREG_FTN(WT1, ft);
  5614 + gen_load_fpr32(fpu32_T[0], fs);
  5615 + gen_load_fpr32(fpu32_T[1], ft);
5635 5616 gen_op_float_mul_s();
5636   - GEN_STORE_FTN_FREG(fd, WT2);
  5617 + gen_store_fpr32(fpu32_T[2], fd);
5637 5618 opn = "mul.s";
5638 5619 optype = BINOP;
5639 5620 break;
5640 5621 case FOP(3, 16):
5641   - GEN_LOAD_FREG_FTN(WT0, fs);
5642   - GEN_LOAD_FREG_FTN(WT1, ft);
  5622 + gen_load_fpr32(fpu32_T[0], fs);
  5623 + gen_load_fpr32(fpu32_T[1], ft);
5643 5624 gen_op_float_div_s();
5644   - GEN_STORE_FTN_FREG(fd, WT2);
  5625 + gen_store_fpr32(fpu32_T[2], fd);
5645 5626 opn = "div.s";
5646 5627 optype = BINOP;
5647 5628 break;
5648 5629 case FOP(4, 16):
5649   - GEN_LOAD_FREG_FTN(WT0, fs);
  5630 + gen_load_fpr32(fpu32_T[0], fs);
5650 5631 gen_op_float_sqrt_s();
5651   - GEN_STORE_FTN_FREG(fd, WT2);
  5632 + gen_store_fpr32(fpu32_T[2], fd);
5652 5633 opn = "sqrt.s";
5653 5634 break;
5654 5635 case FOP(5, 16):
5655   - GEN_LOAD_FREG_FTN(WT0, fs);
  5636 + gen_load_fpr32(fpu32_T[0], fs);
5656 5637 gen_op_float_abs_s();
5657   - GEN_STORE_FTN_FREG(fd, WT2);
  5638 + gen_store_fpr32(fpu32_T[2], fd);
5658 5639 opn = "abs.s";
5659 5640 break;
5660 5641 case FOP(6, 16):
5661   - GEN_LOAD_FREG_FTN(WT0, fs);
  5642 + gen_load_fpr32(fpu32_T[0], fs);
5662 5643 gen_op_float_mov_s();
5663   - GEN_STORE_FTN_FREG(fd, WT2);
  5644 + gen_store_fpr32(fpu32_T[2], fd);
5664 5645 opn = "mov.s";
5665 5646 break;
5666 5647 case FOP(7, 16):
5667   - GEN_LOAD_FREG_FTN(WT0, fs);
  5648 + gen_load_fpr32(fpu32_T[0], fs);
5668 5649 gen_op_float_chs_s();
5669   - GEN_STORE_FTN_FREG(fd, WT2);
  5650 + gen_store_fpr32(fpu32_T[2], fd);
5670 5651 opn = "neg.s";
5671 5652 break;
5672 5653 case FOP(8, 16):
5673 5654 check_cp1_64bitmode(ctx);
5674   - GEN_LOAD_FREG_FTN(WT0, fs);
  5655 + gen_load_fpr32(fpu32_T[0], fs);
5675 5656 gen_op_float_roundl_s();
5676   - GEN_STORE_FTN_FREG(fd, DT2);
  5657 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5677 5658 opn = "round.l.s";
5678 5659 break;
5679 5660 case FOP(9, 16):
5680 5661 check_cp1_64bitmode(ctx);
5681   - GEN_LOAD_FREG_FTN(WT0, fs);
  5662 + gen_load_fpr32(fpu32_T[0], fs);
5682 5663 gen_op_float_truncl_s();
5683   - GEN_STORE_FTN_FREG(fd, DT2);
  5664 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5684 5665 opn = "trunc.l.s";
5685 5666 break;
5686 5667 case FOP(10, 16):
5687 5668 check_cp1_64bitmode(ctx);
5688   - GEN_LOAD_FREG_FTN(WT0, fs);
  5669 + gen_load_fpr32(fpu32_T[0], fs);
5689 5670 gen_op_float_ceill_s();
5690   - GEN_STORE_FTN_FREG(fd, DT2);
  5671 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5691 5672 opn = "ceil.l.s";
5692 5673 break;
5693 5674 case FOP(11, 16):
5694 5675 check_cp1_64bitmode(ctx);
5695   - GEN_LOAD_FREG_FTN(WT0, fs);
  5676 + gen_load_fpr32(fpu32_T[0], fs);
5696 5677 gen_op_float_floorl_s();
5697   - GEN_STORE_FTN_FREG(fd, DT2);
  5678 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5698 5679 opn = "floor.l.s";
5699 5680 break;
5700 5681 case FOP(12, 16):
5701   - GEN_LOAD_FREG_FTN(WT0, fs);
  5682 + gen_load_fpr32(fpu32_T[0], fs);
5702 5683 gen_op_float_roundw_s();
5703   - GEN_STORE_FTN_FREG(fd, WT2);
  5684 + gen_store_fpr32(fpu32_T[2], fd);
5704 5685 opn = "round.w.s";
5705 5686 break;
5706 5687 case FOP(13, 16):
5707   - GEN_LOAD_FREG_FTN(WT0, fs);
  5688 + gen_load_fpr32(fpu32_T[0], fs);
5708 5689 gen_op_float_truncw_s();
5709   - GEN_STORE_FTN_FREG(fd, WT2);
  5690 + gen_store_fpr32(fpu32_T[2], fd);
5710 5691 opn = "trunc.w.s";
5711 5692 break;
5712 5693 case FOP(14, 16):
5713   - GEN_LOAD_FREG_FTN(WT0, fs);
  5694 + gen_load_fpr32(fpu32_T[0], fs);
5714 5695 gen_op_float_ceilw_s();
5715   - GEN_STORE_FTN_FREG(fd, WT2);
  5696 + gen_store_fpr32(fpu32_T[2], fd);
5716 5697 opn = "ceil.w.s";
5717 5698 break;
5718 5699 case FOP(15, 16):
5719   - GEN_LOAD_FREG_FTN(WT0, fs);
  5700 + gen_load_fpr32(fpu32_T[0], fs);
5720 5701 gen_op_float_floorw_s();
5721   - GEN_STORE_FTN_FREG(fd, WT2);
  5702 + gen_store_fpr32(fpu32_T[2], fd);
5722 5703 opn = "floor.w.s";
5723 5704 break;
5724 5705 case FOP(17, 16):
5725 5706 gen_load_gpr(cpu_T[0], ft);
5726   - GEN_LOAD_FREG_FTN(WT0, fs);
5727   - GEN_LOAD_FREG_FTN(WT2, fd);
  5707 + gen_load_fpr32(fpu32_T[0], fs);
  5708 + gen_load_fpr32(fpu32_T[2], fd);
5728 5709 gen_movcf_s(ctx, (ft >> 2) & 0x7, ft & 0x1);
5729   - GEN_STORE_FTN_FREG(fd, WT2);
  5710 + gen_store_fpr32(fpu32_T[2], fd);
5730 5711 opn = "movcf.s";
5731 5712 break;
5732 5713 case FOP(18, 16):
5733 5714 gen_load_gpr(cpu_T[0], ft);
5734   - GEN_LOAD_FREG_FTN(WT0, fs);
5735   - GEN_LOAD_FREG_FTN(WT2, fd);
  5715 + gen_load_fpr32(fpu32_T[0], fs);
  5716 + gen_load_fpr32(fpu32_T[2], fd);
5736 5717 gen_op_float_movz_s();
5737   - GEN_STORE_FTN_FREG(fd, WT2);
  5718 + gen_store_fpr32(fpu32_T[2], fd);
5738 5719 opn = "movz.s";
5739 5720 break;
5740 5721 case FOP(19, 16):
5741 5722 gen_load_gpr(cpu_T[0], ft);
5742   - GEN_LOAD_FREG_FTN(WT0, fs);
5743   - GEN_LOAD_FREG_FTN(WT2, fd);
  5723 + gen_load_fpr32(fpu32_T[0], fs);
  5724 + gen_load_fpr32(fpu32_T[2], fd);
5744 5725 gen_op_float_movn_s();
5745   - GEN_STORE_FTN_FREG(fd, WT2);
  5726 + gen_store_fpr32(fpu32_T[2], fd);
5746 5727 opn = "movn.s";
5747 5728 break;
5748 5729 case FOP(21, 16):
5749 5730 check_cop1x(ctx);
5750   - GEN_LOAD_FREG_FTN(WT0, fs);
  5731 + gen_load_fpr32(fpu32_T[0], fs);
5751 5732 gen_op_float_recip_s();
5752   - GEN_STORE_FTN_FREG(fd, WT2);
  5733 + gen_store_fpr32(fpu32_T[2], fd);
5753 5734 opn = "recip.s";
5754 5735 break;
5755 5736 case FOP(22, 16):
5756 5737 check_cop1x(ctx);
5757   - GEN_LOAD_FREG_FTN(WT0, fs);
  5738 + gen_load_fpr32(fpu32_T[0], fs);
5758 5739 gen_op_float_rsqrt_s();
5759   - GEN_STORE_FTN_FREG(fd, WT2);
  5740 + gen_store_fpr32(fpu32_T[2], fd);
5760 5741 opn = "rsqrt.s";
5761 5742 break;
5762 5743 case FOP(28, 16):
5763 5744 check_cp1_64bitmode(ctx);
5764   - GEN_LOAD_FREG_FTN(WT0, fs);
5765   - GEN_LOAD_FREG_FTN(WT2, fd);
  5745 + gen_load_fpr32(fpu32_T[0], fs);
  5746 + gen_load_fpr32(fpu32_T[2], fd);
5766 5747 gen_op_float_recip2_s();
5767   - GEN_STORE_FTN_FREG(fd, WT2);
  5748 + gen_store_fpr32(fpu32_T[2], fd);
5768 5749 opn = "recip2.s";
5769 5750 break;
5770 5751 case FOP(29, 16):
5771 5752 check_cp1_64bitmode(ctx);
5772   - GEN_LOAD_FREG_FTN(WT0, fs);
  5753 + gen_load_fpr32(fpu32_T[0], fs);
5773 5754 gen_op_float_recip1_s();
5774   - GEN_STORE_FTN_FREG(fd, WT2);
  5755 + gen_store_fpr32(fpu32_T[2], fd);
5775 5756 opn = "recip1.s";
5776 5757 break;
5777 5758 case FOP(30, 16):
5778 5759 check_cp1_64bitmode(ctx);
5779   - GEN_LOAD_FREG_FTN(WT0, fs);
  5760 + gen_load_fpr32(fpu32_T[0], fs);
5780 5761 gen_op_float_rsqrt1_s();
5781   - GEN_STORE_FTN_FREG(fd, WT2);
  5762 + gen_store_fpr32(fpu32_T[2], fd);
5782 5763 opn = "rsqrt1.s";
5783 5764 break;
5784 5765 case FOP(31, 16):
5785 5766 check_cp1_64bitmode(ctx);
5786   - GEN_LOAD_FREG_FTN(WT0, fs);
5787   - GEN_LOAD_FREG_FTN(WT2, ft);
  5767 + gen_load_fpr32(fpu32_T[0], fs);
  5768 + gen_load_fpr32(fpu32_T[2], ft);
5788 5769 gen_op_float_rsqrt2_s();
5789   - GEN_STORE_FTN_FREG(fd, WT2);
  5770 + gen_store_fpr32(fpu32_T[2], fd);
5790 5771 opn = "rsqrt2.s";
5791 5772 break;
5792 5773 case FOP(33, 16):
5793 5774 check_cp1_registers(ctx, fd);
5794   - GEN_LOAD_FREG_FTN(WT0, fs);
  5775 + gen_load_fpr32(fpu32_T[0], fs);
5795 5776 gen_op_float_cvtd_s();
5796   - GEN_STORE_FTN_FREG(fd, DT2);
  5777 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5797 5778 opn = "cvt.d.s";
5798 5779 break;
5799 5780 case FOP(36, 16):
5800   - GEN_LOAD_FREG_FTN(WT0, fs);
  5781 + gen_load_fpr32(fpu32_T[0], fs);
5801 5782 gen_op_float_cvtw_s();
5802   - GEN_STORE_FTN_FREG(fd, WT2);
  5783 + gen_store_fpr32(fpu32_T[2], fd);
5803 5784 opn = "cvt.w.s";
5804 5785 break;
5805 5786 case FOP(37, 16):
5806 5787 check_cp1_64bitmode(ctx);
5807   - GEN_LOAD_FREG_FTN(WT0, fs);
  5788 + gen_load_fpr32(fpu32_T[0], fs);
5808 5789 gen_op_float_cvtl_s();
5809   - GEN_STORE_FTN_FREG(fd, DT2);
  5790 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5810 5791 opn = "cvt.l.s";
5811 5792 break;
5812 5793 case FOP(38, 16):
5813 5794 check_cp1_64bitmode(ctx);
5814   - GEN_LOAD_FREG_FTN(WT1, fs);
5815   - GEN_LOAD_FREG_FTN(WT0, ft);
  5795 + gen_load_fpr32(fpu32_T[1], fs);
  5796 + gen_load_fpr32(fpu32_T[0], ft);
5816 5797 gen_op_float_cvtps_s();
5817   - GEN_STORE_FTN_FREG(fd, DT2);
  5798 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5818 5799 opn = "cvt.ps.s";
5819 5800 break;
5820 5801 case FOP(48, 16):
... ... @@ -5833,8 +5814,8 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5833 5814 case FOP(61, 16):
5834 5815 case FOP(62, 16):
5835 5816 case FOP(63, 16):
5836   - GEN_LOAD_FREG_FTN(WT0, fs);
5837   - GEN_LOAD_FREG_FTN(WT1, ft);
  5817 + gen_load_fpr32(fpu32_T[0], fs);
  5818 + gen_load_fpr32(fpu32_T[1], ft);
5838 5819 if (ctx->opcode & (1 << 6)) {
5839 5820 check_cop1x(ctx);
5840 5821 gen_cmpabs_s(func-48, cc);
... ... @@ -5846,190 +5827,190 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
5846 5827 break;
5847 5828 case FOP(0, 17):
5848 5829 check_cp1_registers(ctx, fs | ft | fd);
5849   - GEN_LOAD_FREG_FTN(DT0, fs);
5850   - GEN_LOAD_FREG_FTN(DT1, ft);
  5830 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  5831 + gen_load_fpr64(ctx, fpu64_T[1], ft);
5851 5832 gen_op_float_add_d();
5852   - GEN_STORE_FTN_FREG(fd, DT2);
  5833 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5853 5834 opn = "add.d";
5854 5835 optype = BINOP;
5855 5836 break;
5856 5837 case FOP(1, 17):
5857 5838 check_cp1_registers(ctx, fs | ft | fd);
5858   - GEN_LOAD_FREG_FTN(DT0, fs);
5859   - GEN_LOAD_FREG_FTN(DT1, ft);
  5839 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  5840 + gen_load_fpr64(ctx, fpu64_T[1], ft);
5860 5841 gen_op_float_sub_d();
5861   - GEN_STORE_FTN_FREG(fd, DT2);
  5842 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5862 5843 opn = "sub.d";
5863 5844 optype = BINOP;
5864 5845 break;
5865 5846 case FOP(2, 17):
5866 5847 check_cp1_registers(ctx, fs | ft | fd);
5867   - GEN_LOAD_FREG_FTN(DT0, fs);
5868   - GEN_LOAD_FREG_FTN(DT1, ft);
  5848 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  5849 + gen_load_fpr64(ctx, fpu64_T[1], ft);
5869 5850 gen_op_float_mul_d();
5870   - GEN_STORE_FTN_FREG(fd, DT2);
  5851 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5871 5852 opn = "mul.d";
5872 5853 optype = BINOP;
5873 5854 break;
5874 5855 case FOP(3, 17):
5875 5856 check_cp1_registers(ctx, fs | ft | fd);
5876   - GEN_LOAD_FREG_FTN(DT0, fs);
5877   - GEN_LOAD_FREG_FTN(DT1, ft);
  5857 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  5858 + gen_load_fpr64(ctx, fpu64_T[1], ft);
5878 5859 gen_op_float_div_d();
5879   - GEN_STORE_FTN_FREG(fd, DT2);
  5860 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5880 5861 opn = "div.d";
5881 5862 optype = BINOP;
5882 5863 break;
5883 5864 case FOP(4, 17):
5884 5865 check_cp1_registers(ctx, fs | fd);
5885   - GEN_LOAD_FREG_FTN(DT0, fs);
  5866 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5886 5867 gen_op_float_sqrt_d();
5887   - GEN_STORE_FTN_FREG(fd, DT2);
  5868 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5888 5869 opn = "sqrt.d";
5889 5870 break;
5890 5871 case FOP(5, 17):
5891 5872 check_cp1_registers(ctx, fs | fd);
5892   - GEN_LOAD_FREG_FTN(DT0, fs);
  5873 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5893 5874 gen_op_float_abs_d();
5894   - GEN_STORE_FTN_FREG(fd, DT2);
  5875 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5895 5876 opn = "abs.d";
5896 5877 break;
5897 5878 case FOP(6, 17):
5898 5879 check_cp1_registers(ctx, fs | fd);
5899   - GEN_LOAD_FREG_FTN(DT0, fs);
  5880 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5900 5881 gen_op_float_mov_d();
5901   - GEN_STORE_FTN_FREG(fd, DT2);
  5882 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5902 5883 opn = "mov.d";
5903 5884 break;
5904 5885 case FOP(7, 17):
5905 5886 check_cp1_registers(ctx, fs | fd);
5906   - GEN_LOAD_FREG_FTN(DT0, fs);
  5887 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5907 5888 gen_op_float_chs_d();
5908   - GEN_STORE_FTN_FREG(fd, DT2);
  5889 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5909 5890 opn = "neg.d";
5910 5891 break;
5911 5892 case FOP(8, 17):
5912 5893 check_cp1_64bitmode(ctx);
5913   - GEN_LOAD_FREG_FTN(DT0, fs);
  5894 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5914 5895 gen_op_float_roundl_d();
5915   - GEN_STORE_FTN_FREG(fd, DT2);
  5896 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5916 5897 opn = "round.l.d";
5917 5898 break;
5918 5899 case FOP(9, 17):
5919 5900 check_cp1_64bitmode(ctx);
5920   - GEN_LOAD_FREG_FTN(DT0, fs);
  5901 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5921 5902 gen_op_float_truncl_d();
5922   - GEN_STORE_FTN_FREG(fd, DT2);
  5903 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5923 5904 opn = "trunc.l.d";
5924 5905 break;
5925 5906 case FOP(10, 17):
5926 5907 check_cp1_64bitmode(ctx);
5927   - GEN_LOAD_FREG_FTN(DT0, fs);
  5908 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5928 5909 gen_op_float_ceill_d();
5929   - GEN_STORE_FTN_FREG(fd, DT2);
  5910 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5930 5911 opn = "ceil.l.d";
5931 5912 break;
5932 5913 case FOP(11, 17):
5933 5914 check_cp1_64bitmode(ctx);
5934   - GEN_LOAD_FREG_FTN(DT0, fs);
  5915 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5935 5916 gen_op_float_floorl_d();
5936   - GEN_STORE_FTN_FREG(fd, DT2);
  5917 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5937 5918 opn = "floor.l.d";
5938 5919 break;
5939 5920 case FOP(12, 17):
5940 5921 check_cp1_registers(ctx, fs);
5941   - GEN_LOAD_FREG_FTN(DT0, fs);
  5922 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5942 5923 gen_op_float_roundw_d();
5943   - GEN_STORE_FTN_FREG(fd, WT2);
  5924 + gen_store_fpr32(fpu32_T[2], fd);
5944 5925 opn = "round.w.d";
5945 5926 break;
5946 5927 case FOP(13, 17):
5947 5928 check_cp1_registers(ctx, fs);
5948   - GEN_LOAD_FREG_FTN(DT0, fs);
  5929 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5949 5930 gen_op_float_truncw_d();
5950   - GEN_STORE_FTN_FREG(fd, WT2);
  5931 + gen_store_fpr32(fpu32_T[2], fd);
5951 5932 opn = "trunc.w.d";
5952 5933 break;
5953 5934 case FOP(14, 17):
5954 5935 check_cp1_registers(ctx, fs);
5955   - GEN_LOAD_FREG_FTN(DT0, fs);
  5936 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5956 5937 gen_op_float_ceilw_d();
5957   - GEN_STORE_FTN_FREG(fd, WT2);
  5938 + gen_store_fpr32(fpu32_T[2], fd);
5958 5939 opn = "ceil.w.d";
5959 5940 break;
5960 5941 case FOP(15, 17):
5961 5942 check_cp1_registers(ctx, fs);
5962   - GEN_LOAD_FREG_FTN(DT0, fs);
  5943 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5963 5944 gen_op_float_floorw_d();
5964   - GEN_STORE_FTN_FREG(fd, WT2);
  5945 + gen_store_fpr32(fpu32_T[2], fd);
5965 5946 opn = "floor.w.d";
5966 5947 break;
5967 5948 case FOP(17, 17):
5968 5949 gen_load_gpr(cpu_T[0], ft);
5969   - GEN_LOAD_FREG_FTN(DT0, fs);
5970   - GEN_LOAD_FREG_FTN(DT2, fd);
  5950 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  5951 + gen_load_fpr64(ctx, fpu64_T[2], fd);
5971 5952 gen_movcf_d(ctx, (ft >> 2) & 0x7, ft & 0x1);
5972   - GEN_STORE_FTN_FREG(fd, DT2);
  5953 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5973 5954 opn = "movcf.d";
5974 5955 break;
5975 5956 case FOP(18, 17):
5976 5957 gen_load_gpr(cpu_T[0], ft);
5977   - GEN_LOAD_FREG_FTN(DT0, fs);
5978   - GEN_LOAD_FREG_FTN(DT2, fd);
  5958 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  5959 + gen_load_fpr64(ctx, fpu64_T[2], fd);
5979 5960 gen_op_float_movz_d();
5980   - GEN_STORE_FTN_FREG(fd, DT2);
  5961 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5981 5962 opn = "movz.d";
5982 5963 break;
5983 5964 case FOP(19, 17):
5984 5965 gen_load_gpr(cpu_T[0], ft);
5985   - GEN_LOAD_FREG_FTN(DT0, fs);
5986   - GEN_LOAD_FREG_FTN(DT2, fd);
  5966 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  5967 + gen_load_fpr64(ctx, fpu64_T[2], fd);
5987 5968 gen_op_float_movn_d();
5988   - GEN_STORE_FTN_FREG(fd, DT2);
  5969 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5989 5970 opn = "movn.d";
5990 5971 break;
5991 5972 case FOP(21, 17):
5992 5973 check_cp1_64bitmode(ctx);
5993   - GEN_LOAD_FREG_FTN(DT0, fs);
  5974 + gen_load_fpr64(ctx, fpu64_T[0], fs);
5994 5975 gen_op_float_recip_d();
5995   - GEN_STORE_FTN_FREG(fd, DT2);
  5976 + gen_store_fpr64(ctx, fpu64_T[2], fd);
5996 5977 opn = "recip.d";
5997 5978 break;
5998 5979 case FOP(22, 17):
5999 5980 check_cp1_64bitmode(ctx);
6000   - GEN_LOAD_FREG_FTN(DT0, fs);
  5981 + gen_load_fpr64(ctx, fpu64_T[0], fs);
6001 5982 gen_op_float_rsqrt_d();
6002   - GEN_STORE_FTN_FREG(fd, DT2);
  5983 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6003 5984 opn = "rsqrt.d";
6004 5985 break;
6005 5986 case FOP(28, 17):
6006 5987 check_cp1_64bitmode(ctx);
6007   - GEN_LOAD_FREG_FTN(DT0, fs);
6008   - GEN_LOAD_FREG_FTN(DT2, ft);
  5988 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  5989 + gen_load_fpr64(ctx, fpu64_T[2], ft);
6009 5990 gen_op_float_recip2_d();
6010   - GEN_STORE_FTN_FREG(fd, DT2);
  5991 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6011 5992 opn = "recip2.d";
6012 5993 break;
6013 5994 case FOP(29, 17):
6014 5995 check_cp1_64bitmode(ctx);
6015   - GEN_LOAD_FREG_FTN(DT0, fs);
  5996 + gen_load_fpr64(ctx, fpu64_T[0], fs);
6016 5997 gen_op_float_recip1_d();
6017   - GEN_STORE_FTN_FREG(fd, DT2);
  5998 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6018 5999 opn = "recip1.d";
6019 6000 break;
6020 6001 case FOP(30, 17):
6021 6002 check_cp1_64bitmode(ctx);
6022   - GEN_LOAD_FREG_FTN(DT0, fs);
  6003 + gen_load_fpr64(ctx, fpu64_T[0], fs);
6023 6004 gen_op_float_rsqrt1_d();
6024   - GEN_STORE_FTN_FREG(fd, DT2);
  6005 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6025 6006 opn = "rsqrt1.d";
6026 6007 break;
6027 6008 case FOP(31, 17):
6028 6009 check_cp1_64bitmode(ctx);
6029   - GEN_LOAD_FREG_FTN(DT0, fs);
6030   - GEN_LOAD_FREG_FTN(DT2, ft);
  6010 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  6011 + gen_load_fpr64(ctx, fpu64_T[2], ft);
6031 6012 gen_op_float_rsqrt2_d();
6032   - GEN_STORE_FTN_FREG(fd, DT2);
  6013 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6033 6014 opn = "rsqrt2.d";
6034 6015 break;
6035 6016 case FOP(48, 17):
... ... @@ -6048,8 +6029,8 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
6048 6029 case FOP(61, 17):
6049 6030 case FOP(62, 17):
6050 6031 case FOP(63, 17):
6051   - GEN_LOAD_FREG_FTN(DT0, fs);
6052   - GEN_LOAD_FREG_FTN(DT1, ft);
  6032 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  6033 + gen_load_fpr64(ctx, fpu64_T[1], ft);
6053 6034 if (ctx->opcode & (1 << 6)) {
6054 6035 check_cop1x(ctx);
6055 6036 check_cp1_registers(ctx, fs | ft);
... ... @@ -6063,275 +6044,275 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
6063 6044 break;
6064 6045 case FOP(32, 17):
6065 6046 check_cp1_registers(ctx, fs);
6066   - GEN_LOAD_FREG_FTN(DT0, fs);
  6047 + gen_load_fpr64(ctx, fpu64_T[0], fs);
6067 6048 gen_op_float_cvts_d();
6068   - GEN_STORE_FTN_FREG(fd, WT2);
  6049 + gen_store_fpr32(fpu32_T[2], fd);
6069 6050 opn = "cvt.s.d";
6070 6051 break;
6071 6052 case FOP(36, 17):
6072 6053 check_cp1_registers(ctx, fs);
6073   - GEN_LOAD_FREG_FTN(DT0, fs);
  6054 + gen_load_fpr64(ctx, fpu64_T[0], fs);
6074 6055 gen_op_float_cvtw_d();
6075   - GEN_STORE_FTN_FREG(fd, WT2);
  6056 + gen_store_fpr32(fpu32_T[2], fd);
6076 6057 opn = "cvt.w.d";
6077 6058 break;
6078 6059 case FOP(37, 17):
6079 6060 check_cp1_64bitmode(ctx);
6080   - GEN_LOAD_FREG_FTN(DT0, fs);
  6061 + gen_load_fpr64(ctx, fpu64_T[0], fs);
6081 6062 gen_op_float_cvtl_d();
6082   - GEN_STORE_FTN_FREG(fd, DT2);
  6063 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6083 6064 opn = "cvt.l.d";
6084 6065 break;
6085 6066 case FOP(32, 20):
6086   - GEN_LOAD_FREG_FTN(WT0, fs);
  6067 + gen_load_fpr32(fpu32_T[0], fs);
6087 6068 gen_op_float_cvts_w();
6088   - GEN_STORE_FTN_FREG(fd, WT2);
  6069 + gen_store_fpr32(fpu32_T[2], fd);
6089 6070 opn = "cvt.s.w";
6090 6071 break;
6091 6072 case FOP(33, 20):
6092 6073 check_cp1_registers(ctx, fd);
6093   - GEN_LOAD_FREG_FTN(WT0, fs);
  6074 + gen_load_fpr32(fpu32_T[0], fs);
6094 6075 gen_op_float_cvtd_w();
6095   - GEN_STORE_FTN_FREG(fd, DT2);
  6076 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6096 6077 opn = "cvt.d.w";
6097 6078 break;
6098 6079 case FOP(32, 21):
6099 6080 check_cp1_64bitmode(ctx);
6100   - GEN_LOAD_FREG_FTN(DT0, fs);
  6081 + gen_load_fpr64(ctx, fpu64_T[0], fs);
6101 6082 gen_op_float_cvts_l();
6102   - GEN_STORE_FTN_FREG(fd, WT2);
  6083 + gen_store_fpr32(fpu32_T[2], fd);
6103 6084 opn = "cvt.s.l";
6104 6085 break;
6105 6086 case FOP(33, 21):
6106 6087 check_cp1_64bitmode(ctx);
6107   - GEN_LOAD_FREG_FTN(DT0, fs);
  6088 + gen_load_fpr64(ctx, fpu64_T[0], fs);
6108 6089 gen_op_float_cvtd_l();
6109   - GEN_STORE_FTN_FREG(fd, DT2);
  6090 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6110 6091 opn = "cvt.d.l";
6111 6092 break;
6112 6093 case FOP(38, 20):
6113 6094 check_cp1_64bitmode(ctx);
6114   - GEN_LOAD_FREG_FTN(WT0, fs);
6115   - GEN_LOAD_FREG_FTN(WTH0, fs);
  6095 + gen_load_fpr32(fpu32_T[0], fs);
  6096 + gen_load_fpr32h(fpu32h_T[0], fs);
6116 6097 gen_op_float_cvtps_pw();
6117   - GEN_STORE_FTN_FREG(fd, WT2);
6118   - GEN_STORE_FTN_FREG(fd, WTH2);
  6098 + gen_store_fpr32(fpu32_T[2], fd);
  6099 + gen_store_fpr32h(fpu32h_T[2], fd);
6119 6100 opn = "cvt.ps.pw";
6120 6101 break;
6121 6102 case FOP(0, 22):
6122 6103 check_cp1_64bitmode(ctx);
6123   - GEN_LOAD_FREG_FTN(WT0, fs);
6124   - GEN_LOAD_FREG_FTN(WTH0, fs);
6125   - GEN_LOAD_FREG_FTN(WT1, ft);
6126   - GEN_LOAD_FREG_FTN(WTH1, ft);
  6104 + gen_load_fpr32(fpu32_T[0], fs);
  6105 + gen_load_fpr32h(fpu32h_T[0], fs);
  6106 + gen_load_fpr32(fpu32_T[1], ft);
  6107 + gen_load_fpr32h(fpu32h_T[1], ft);
6127 6108 gen_op_float_add_ps();
6128   - GEN_STORE_FTN_FREG(fd, WT2);
6129   - GEN_STORE_FTN_FREG(fd, WTH2);
  6109 + gen_store_fpr32(fpu32_T[2], fd);
  6110 + gen_store_fpr32h(fpu32h_T[2], fd);
6130 6111 opn = "add.ps";
6131 6112 break;
6132 6113 case FOP(1, 22):
6133 6114 check_cp1_64bitmode(ctx);
6134   - GEN_LOAD_FREG_FTN(WT0, fs);
6135   - GEN_LOAD_FREG_FTN(WTH0, fs);
6136   - GEN_LOAD_FREG_FTN(WT1, ft);
6137   - GEN_LOAD_FREG_FTN(WTH1, ft);
  6115 + gen_load_fpr32(fpu32_T[0], fs);
  6116 + gen_load_fpr32h(fpu32h_T[0], fs);
  6117 + gen_load_fpr32(fpu32_T[1], ft);
  6118 + gen_load_fpr32h(fpu32h_T[1], ft);
6138 6119 gen_op_float_sub_ps();
6139   - GEN_STORE_FTN_FREG(fd, WT2);
6140   - GEN_STORE_FTN_FREG(fd, WTH2);
  6120 + gen_store_fpr32(fpu32_T[2], fd);
  6121 + gen_store_fpr32h(fpu32h_T[2], fd);
6141 6122 opn = "sub.ps";
6142 6123 break;
6143 6124 case FOP(2, 22):
6144 6125 check_cp1_64bitmode(ctx);
6145   - GEN_LOAD_FREG_FTN(WT0, fs);
6146   - GEN_LOAD_FREG_FTN(WTH0, fs);
6147   - GEN_LOAD_FREG_FTN(WT1, ft);
6148   - GEN_LOAD_FREG_FTN(WTH1, ft);
  6126 + gen_load_fpr32(fpu32_T[0], fs);
  6127 + gen_load_fpr32h(fpu32h_T[0], fs);
  6128 + gen_load_fpr32(fpu32_T[1], ft);
  6129 + gen_load_fpr32h(fpu32h_T[1], ft);
6149 6130 gen_op_float_mul_ps();
6150   - GEN_STORE_FTN_FREG(fd, WT2);
6151   - GEN_STORE_FTN_FREG(fd, WTH2);
  6131 + gen_store_fpr32(fpu32_T[2], fd);
  6132 + gen_store_fpr32h(fpu32h_T[2], fd);
6152 6133 opn = "mul.ps";
6153 6134 break;
6154 6135 case FOP(5, 22):
6155 6136 check_cp1_64bitmode(ctx);
6156   - GEN_LOAD_FREG_FTN(WT0, fs);
6157   - GEN_LOAD_FREG_FTN(WTH0, fs);
  6137 + gen_load_fpr32(fpu32_T[0], fs);
  6138 + gen_load_fpr32h(fpu32h_T[0], fs);
6158 6139 gen_op_float_abs_ps();
6159   - GEN_STORE_FTN_FREG(fd, WT2);
6160   - GEN_STORE_FTN_FREG(fd, WTH2);
  6140 + gen_store_fpr32(fpu32_T[2], fd);
  6141 + gen_store_fpr32h(fpu32h_T[2], fd);
6161 6142 opn = "abs.ps";
6162 6143 break;
6163 6144 case FOP(6, 22):
6164 6145 check_cp1_64bitmode(ctx);
6165   - GEN_LOAD_FREG_FTN(WT0, fs);
6166   - GEN_LOAD_FREG_FTN(WTH0, fs);
  6146 + gen_load_fpr32(fpu32_T[0], fs);
  6147 + gen_load_fpr32h(fpu32h_T[0], fs);
6167 6148 gen_op_float_mov_ps();
6168   - GEN_STORE_FTN_FREG(fd, WT2);
6169   - GEN_STORE_FTN_FREG(fd, WTH2);
  6149 + gen_store_fpr32(fpu32_T[2], fd);
  6150 + gen_store_fpr32h(fpu32h_T[2], fd);
6170 6151 opn = "mov.ps";
6171 6152 break;
6172 6153 case FOP(7, 22):
6173 6154 check_cp1_64bitmode(ctx);
6174   - GEN_LOAD_FREG_FTN(WT0, fs);
6175   - GEN_LOAD_FREG_FTN(WTH0, fs);
  6155 + gen_load_fpr32(fpu32_T[0], fs);
  6156 + gen_load_fpr32h(fpu32h_T[0], fs);
6176 6157 gen_op_float_chs_ps();
6177   - GEN_STORE_FTN_FREG(fd, WT2);
6178   - GEN_STORE_FTN_FREG(fd, WTH2);
  6158 + gen_store_fpr32(fpu32_T[2], fd);
  6159 + gen_store_fpr32h(fpu32h_T[2], fd);
6179 6160 opn = "neg.ps";
6180 6161 break;
6181 6162 case FOP(17, 22):
6182 6163 check_cp1_64bitmode(ctx);
6183 6164 gen_load_gpr(cpu_T[0], ft);
6184   - GEN_LOAD_FREG_FTN(WT0, fs);
6185   - GEN_LOAD_FREG_FTN(WTH0, fs);
6186   - GEN_LOAD_FREG_FTN(WT2, fd);
6187   - GEN_LOAD_FREG_FTN(WTH2, fd);
  6165 + gen_load_fpr32(fpu32_T[0], fs);
  6166 + gen_load_fpr32h(fpu32h_T[0], fs);
  6167 + gen_load_fpr32(fpu32_T[2], fd);
  6168 + gen_load_fpr32h(fpu32h_T[2], fd);
6188 6169 if (ft & 0x1)
6189 6170 gen_op_float_movt_ps ((ft >> 2) & 0x7);
6190 6171 else
6191 6172 gen_op_float_movf_ps ((ft >> 2) & 0x7);
6192   - GEN_STORE_FTN_FREG(fd, WT2);
6193   - GEN_STORE_FTN_FREG(fd, WTH2);
  6173 + gen_store_fpr32(fpu32_T[2], fd);
  6174 + gen_store_fpr32h(fpu32h_T[2], fd);
6194 6175 opn = "movcf.ps";
6195 6176 break;
6196 6177 case FOP(18, 22):
6197 6178 check_cp1_64bitmode(ctx);
6198 6179 gen_load_gpr(cpu_T[0], ft);
6199   - GEN_LOAD_FREG_FTN(WT0, fs);
6200   - GEN_LOAD_FREG_FTN(WTH0, fs);
6201   - GEN_LOAD_FREG_FTN(WT2, fd);
6202   - GEN_LOAD_FREG_FTN(WTH2, fd);
  6180 + gen_load_fpr32(fpu32_T[0], fs);
  6181 + gen_load_fpr32h(fpu32h_T[0], fs);
  6182 + gen_load_fpr32(fpu32_T[2], fd);
  6183 + gen_load_fpr32h(fpu32h_T[2], fd);
6203 6184 gen_op_float_movz_ps();
6204   - GEN_STORE_FTN_FREG(fd, WT2);
6205   - GEN_STORE_FTN_FREG(fd, WTH2);
  6185 + gen_store_fpr32(fpu32_T[2], fd);
  6186 + gen_store_fpr32h(fpu32h_T[2], fd);
6206 6187 opn = "movz.ps";
6207 6188 break;
6208 6189 case FOP(19, 22):
6209 6190 check_cp1_64bitmode(ctx);
6210 6191 gen_load_gpr(cpu_T[0], ft);
6211   - GEN_LOAD_FREG_FTN(WT0, fs);
6212   - GEN_LOAD_FREG_FTN(WTH0, fs);
6213   - GEN_LOAD_FREG_FTN(WT2, fd);
6214   - GEN_LOAD_FREG_FTN(WTH2, fd);
  6192 + gen_load_fpr32(fpu32_T[0], fs);
  6193 + gen_load_fpr32h(fpu32h_T[0], fs);
  6194 + gen_load_fpr32(fpu32_T[2], fd);
  6195 + gen_load_fpr32h(fpu32h_T[2], fd);
6215 6196 gen_op_float_movn_ps();
6216   - GEN_STORE_FTN_FREG(fd, WT2);
6217   - GEN_STORE_FTN_FREG(fd, WTH2);
  6197 + gen_store_fpr32(fpu32_T[2], fd);
  6198 + gen_store_fpr32h(fpu32h_T[2], fd);
6218 6199 opn = "movn.ps";
6219 6200 break;
6220 6201 case FOP(24, 22):
6221 6202 check_cp1_64bitmode(ctx);
6222   - GEN_LOAD_FREG_FTN(WT0, ft);
6223   - GEN_LOAD_FREG_FTN(WTH0, ft);
6224   - GEN_LOAD_FREG_FTN(WT1, fs);
6225   - GEN_LOAD_FREG_FTN(WTH1, fs);
  6203 + gen_load_fpr32(fpu32_T[0], ft);
  6204 + gen_load_fpr32h(fpu32h_T[0], ft);
  6205 + gen_load_fpr32(fpu32_T[1], fs);
  6206 + gen_load_fpr32h(fpu32h_T[1], fs);
6226 6207 gen_op_float_addr_ps();
6227   - GEN_STORE_FTN_FREG(fd, WT2);
6228   - GEN_STORE_FTN_FREG(fd, WTH2);
  6208 + gen_store_fpr32(fpu32_T[2], fd);
  6209 + gen_store_fpr32h(fpu32h_T[2], fd);
6229 6210 opn = "addr.ps";
6230 6211 break;
6231 6212 case FOP(26, 22):
6232 6213 check_cp1_64bitmode(ctx);
6233   - GEN_LOAD_FREG_FTN(WT0, ft);
6234   - GEN_LOAD_FREG_FTN(WTH0, ft);
6235   - GEN_LOAD_FREG_FTN(WT1, fs);
6236   - GEN_LOAD_FREG_FTN(WTH1, fs);
  6214 + gen_load_fpr32(fpu32_T[0], ft);
  6215 + gen_load_fpr32h(fpu32h_T[0], ft);
  6216 + gen_load_fpr32(fpu32_T[1], fs);
  6217 + gen_load_fpr32h(fpu32h_T[1], fs);
6237 6218 gen_op_float_mulr_ps();
6238   - GEN_STORE_FTN_FREG(fd, WT2);
6239   - GEN_STORE_FTN_FREG(fd, WTH2);
  6219 + gen_store_fpr32(fpu32_T[2], fd);
  6220 + gen_store_fpr32h(fpu32h_T[2], fd);
6240 6221 opn = "mulr.ps";
6241 6222 break;
6242 6223 case FOP(28, 22):
6243 6224 check_cp1_64bitmode(ctx);
6244   - GEN_LOAD_FREG_FTN(WT0, fs);
6245   - GEN_LOAD_FREG_FTN(WTH0, fs);
6246   - GEN_LOAD_FREG_FTN(WT2, fd);
6247   - GEN_LOAD_FREG_FTN(WTH2, fd);
  6225 + gen_load_fpr32(fpu32_T[0], fs);
  6226 + gen_load_fpr32h(fpu32h_T[0], fs);
  6227 + gen_load_fpr32(fpu32_T[2], fd);
  6228 + gen_load_fpr32h(fpu32h_T[2], fd);
6248 6229 gen_op_float_recip2_ps();
6249   - GEN_STORE_FTN_FREG(fd, WT2);
6250   - GEN_STORE_FTN_FREG(fd, WTH2);
  6230 + gen_store_fpr32(fpu32_T[2], fd);
  6231 + gen_store_fpr32h(fpu32h_T[2], fd);
6251 6232 opn = "recip2.ps";
6252 6233 break;
6253 6234 case FOP(29, 22):
6254 6235 check_cp1_64bitmode(ctx);
6255   - GEN_LOAD_FREG_FTN(WT0, fs);
6256   - GEN_LOAD_FREG_FTN(WTH0, fs);
  6236 + gen_load_fpr32(fpu32_T[0], fs);
  6237 + gen_load_fpr32h(fpu32h_T[0], fs);
6257 6238 gen_op_float_recip1_ps();
6258   - GEN_STORE_FTN_FREG(fd, WT2);
6259   - GEN_STORE_FTN_FREG(fd, WTH2);
  6239 + gen_store_fpr32(fpu32_T[2], fd);
  6240 + gen_store_fpr32h(fpu32h_T[2], fd);
6260 6241 opn = "recip1.ps";
6261 6242 break;
6262 6243 case FOP(30, 22):
6263 6244 check_cp1_64bitmode(ctx);
6264   - GEN_LOAD_FREG_FTN(WT0, fs);
6265   - GEN_LOAD_FREG_FTN(WTH0, fs);
  6245 + gen_load_fpr32(fpu32_T[0], fs);
  6246 + gen_load_fpr32h(fpu32h_T[0], fs);
6266 6247 gen_op_float_rsqrt1_ps();
6267   - GEN_STORE_FTN_FREG(fd, WT2);
6268   - GEN_STORE_FTN_FREG(fd, WTH2);
  6248 + gen_store_fpr32(fpu32_T[2], fd);
  6249 + gen_store_fpr32h(fpu32h_T[2], fd);
6269 6250 opn = "rsqrt1.ps";
6270 6251 break;
6271 6252 case FOP(31, 22):
6272 6253 check_cp1_64bitmode(ctx);
6273   - GEN_LOAD_FREG_FTN(WT0, fs);
6274   - GEN_LOAD_FREG_FTN(WTH0, fs);
6275   - GEN_LOAD_FREG_FTN(WT2, ft);
6276   - GEN_LOAD_FREG_FTN(WTH2, ft);
  6254 + gen_load_fpr32(fpu32_T[0], fs);
  6255 + gen_load_fpr32h(fpu32h_T[0], fs);
  6256 + gen_load_fpr32(fpu32_T[2], ft);
  6257 + gen_load_fpr32h(fpu32h_T[2], ft);
6277 6258 gen_op_float_rsqrt2_ps();
6278   - GEN_STORE_FTN_FREG(fd, WT2);
6279   - GEN_STORE_FTN_FREG(fd, WTH2);
  6259 + gen_store_fpr32(fpu32_T[2], fd);
  6260 + gen_store_fpr32h(fpu32h_T[2], fd);
6280 6261 opn = "rsqrt2.ps";
6281 6262 break;
6282 6263 case FOP(32, 22):
6283 6264 check_cp1_64bitmode(ctx);
6284   - GEN_LOAD_FREG_FTN(WTH0, fs);
  6265 + gen_load_fpr32h(fpu32h_T[0], fs);
6285 6266 gen_op_float_cvts_pu();
6286   - GEN_STORE_FTN_FREG(fd, WT2);
  6267 + gen_store_fpr32(fpu32_T[2], fd);
6287 6268 opn = "cvt.s.pu";
6288 6269 break;
6289 6270 case FOP(36, 22):
6290 6271 check_cp1_64bitmode(ctx);
6291   - GEN_LOAD_FREG_FTN(WT0, fs);
6292   - GEN_LOAD_FREG_FTN(WTH0, fs);
  6272 + gen_load_fpr32(fpu32_T[0], fs);
  6273 + gen_load_fpr32h(fpu32h_T[0], fs);
6293 6274 gen_op_float_cvtpw_ps();
6294   - GEN_STORE_FTN_FREG(fd, WT2);
6295   - GEN_STORE_FTN_FREG(fd, WTH2);
  6275 + gen_store_fpr32(fpu32_T[2], fd);
  6276 + gen_store_fpr32h(fpu32h_T[2], fd);
6296 6277 opn = "cvt.pw.ps";
6297 6278 break;
6298 6279 case FOP(40, 22):
6299 6280 check_cp1_64bitmode(ctx);
6300   - GEN_LOAD_FREG_FTN(WT0, fs);
  6281 + gen_load_fpr32(fpu32_T[0], fs);
6301 6282 gen_op_float_cvts_pl();
6302   - GEN_STORE_FTN_FREG(fd, WT2);
  6283 + gen_store_fpr32(fpu32_T[2], fd);
6303 6284 opn = "cvt.s.pl";
6304 6285 break;
6305 6286 case FOP(44, 22):
6306 6287 check_cp1_64bitmode(ctx);
6307   - GEN_LOAD_FREG_FTN(WT0, fs);
6308   - GEN_LOAD_FREG_FTN(WT1, ft);
  6288 + gen_load_fpr32(fpu32_T[0], fs);
  6289 + gen_load_fpr32(fpu32_T[1], ft);
6309 6290 gen_op_float_pll_ps();
6310   - GEN_STORE_FTN_FREG(fd, DT2);
  6291 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6311 6292 opn = "pll.ps";
6312 6293 break;
6313 6294 case FOP(45, 22):
6314 6295 check_cp1_64bitmode(ctx);
6315   - GEN_LOAD_FREG_FTN(WT0, fs);
6316   - GEN_LOAD_FREG_FTN(WTH1, ft);
  6296 + gen_load_fpr32(fpu32_T[0], fs);
  6297 + gen_load_fpr32h(fpu32h_T[1], ft);
6317 6298 gen_op_float_plu_ps();
6318   - GEN_STORE_FTN_FREG(fd, DT2);
  6299 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6319 6300 opn = "plu.ps";
6320 6301 break;
6321 6302 case FOP(46, 22):
6322 6303 check_cp1_64bitmode(ctx);
6323   - GEN_LOAD_FREG_FTN(WTH0, fs);
6324   - GEN_LOAD_FREG_FTN(WT1, ft);
  6304 + gen_load_fpr32h(fpu32h_T[0], fs);
  6305 + gen_load_fpr32(fpu32_T[1], ft);
6325 6306 gen_op_float_pul_ps();
6326   - GEN_STORE_FTN_FREG(fd, DT2);
  6307 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6327 6308 opn = "pul.ps";
6328 6309 break;
6329 6310 case FOP(47, 22):
6330 6311 check_cp1_64bitmode(ctx);
6331   - GEN_LOAD_FREG_FTN(WTH0, fs);
6332   - GEN_LOAD_FREG_FTN(WTH1, ft);
  6312 + gen_load_fpr32h(fpu32h_T[0], fs);
  6313 + gen_load_fpr32h(fpu32h_T[1], ft);
6333 6314 gen_op_float_puu_ps();
6334   - GEN_STORE_FTN_FREG(fd, DT2);
  6315 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6335 6316 opn = "puu.ps";
6336 6317 break;
6337 6318 case FOP(48, 22):
... ... @@ -6351,10 +6332,10 @@ static void gen_farith (DisasContext *ctx, uint32_t op1,
6351 6332 case FOP(62, 22):
6352 6333 case FOP(63, 22):
6353 6334 check_cp1_64bitmode(ctx);
6354   - GEN_LOAD_FREG_FTN(WT0, fs);
6355   - GEN_LOAD_FREG_FTN(WTH0, fs);
6356   - GEN_LOAD_FREG_FTN(WT1, ft);
6357   - GEN_LOAD_FREG_FTN(WTH1, ft);
  6335 + gen_load_fpr32(fpu32_T[0], fs);
  6336 + gen_load_fpr32h(fpu32h_T[0], fs);
  6337 + gen_load_fpr32(fpu32_T[1], ft);
  6338 + gen_load_fpr32h(fpu32h_T[1], ft);
6358 6339 if (ctx->opcode & (1 << 6)) {
6359 6340 gen_cmpabs_ps(func-48, cc);
6360 6341 opn = condnames_abs[func-48];
... ... @@ -6402,41 +6383,41 @@ static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc,
6402 6383 switch (opc) {
6403 6384 case OPC_LWXC1:
6404 6385 check_cop1x(ctx);
6405   - op_ldst_lwc1(ctx);
6406   - GEN_STORE_FTN_FREG(fd, WT0);
  6386 + tcg_gen_qemu_ld32s(fpu32_T[0], cpu_T[0], ctx->mem_idx);
  6387 + gen_store_fpr32(fpu32_T[0], fd);
6407 6388 opn = "lwxc1";
6408 6389 break;
6409 6390 case OPC_LDXC1:
6410 6391 check_cop1x(ctx);
6411 6392 check_cp1_registers(ctx, fd);
6412   - op_ldst_ldc1(ctx);
6413   - GEN_STORE_FTN_FREG(fd, DT0);
  6393 + tcg_gen_qemu_ld64(fpu64_T[0], cpu_T[0], ctx->mem_idx);
  6394 + gen_store_fpr64(ctx, fpu64_T[0], fd);
6414 6395 opn = "ldxc1";
6415 6396 break;
6416 6397 case OPC_LUXC1:
6417 6398 check_cp1_64bitmode(ctx);
6418 6399 op_ldst(luxc1);
6419   - GEN_STORE_FTN_FREG(fd, DT0);
  6400 + gen_store_fpr64(ctx, fpu64_T[0], fd);
6420 6401 opn = "luxc1";
6421 6402 break;
6422 6403 case OPC_SWXC1:
6423 6404 check_cop1x(ctx);
6424   - GEN_LOAD_FREG_FTN(WT0, fs);
6425   - op_ldst_swc1(ctx);
  6405 + gen_load_fpr32(fpu32_T[0], fs);
  6406 + tcg_gen_qemu_st32(fpu32_T[0], cpu_T[0], ctx->mem_idx);
6426 6407 opn = "swxc1";
6427 6408 store = 1;
6428 6409 break;
6429 6410 case OPC_SDXC1:
6430 6411 check_cop1x(ctx);
6431 6412 check_cp1_registers(ctx, fs);
6432   - GEN_LOAD_FREG_FTN(DT0, fs);
6433   - op_ldst_sdc1(ctx);
  6413 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  6414 + tcg_gen_qemu_st64(fpu64_T[0], cpu_T[0], ctx->mem_idx);
6434 6415 opn = "sdxc1";
6435 6416 store = 1;
6436 6417 break;
6437 6418 case OPC_SUXC1:
6438 6419 check_cp1_64bitmode(ctx);
6439   - GEN_LOAD_FREG_FTN(DT0, fs);
  6420 + gen_load_fpr64(ctx, fpu64_T[0], fs);
6440 6421 op_ldst(suxc1);
6441 6422 opn = "suxc1";
6442 6423 store = 1;
... ... @@ -6459,138 +6440,138 @@ static void gen_flt3_arith (DisasContext *ctx, uint32_t opc,
6459 6440 case OPC_ALNV_PS:
6460 6441 check_cp1_64bitmode(ctx);
6461 6442 gen_load_gpr(cpu_T[0], fr);
6462   - GEN_LOAD_FREG_FTN(DT0, fs);
6463   - GEN_LOAD_FREG_FTN(DT1, ft);
  6443 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  6444 + gen_load_fpr64(ctx, fpu64_T[1], ft);
6464 6445 gen_op_float_alnv_ps();
6465   - GEN_STORE_FTN_FREG(fd, DT2);
  6446 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6466 6447 opn = "alnv.ps";
6467 6448 break;
6468 6449 case OPC_MADD_S:
6469 6450 check_cop1x(ctx);
6470   - GEN_LOAD_FREG_FTN(WT0, fs);
6471   - GEN_LOAD_FREG_FTN(WT1, ft);
6472   - GEN_LOAD_FREG_FTN(WT2, fr);
  6451 + gen_load_fpr32(fpu32_T[0], fs);
  6452 + gen_load_fpr32(fpu32_T[1], ft);
  6453 + gen_load_fpr32(fpu32_T[2], fr);
6473 6454 gen_op_float_muladd_s();
6474   - GEN_STORE_FTN_FREG(fd, WT2);
  6455 + gen_store_fpr32(fpu32_T[2], fd);
6475 6456 opn = "madd.s";
6476 6457 break;
6477 6458 case OPC_MADD_D:
6478 6459 check_cop1x(ctx);
6479 6460 check_cp1_registers(ctx, fd | fs | ft | fr);
6480   - GEN_LOAD_FREG_FTN(DT0, fs);
6481   - GEN_LOAD_FREG_FTN(DT1, ft);
6482   - GEN_LOAD_FREG_FTN(DT2, fr);
  6461 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  6462 + gen_load_fpr64(ctx, fpu64_T[1], ft);
  6463 + gen_load_fpr64(ctx, fpu64_T[2], fr);
6483 6464 gen_op_float_muladd_d();
6484   - GEN_STORE_FTN_FREG(fd, DT2);
  6465 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6485 6466 opn = "madd.d";
6486 6467 break;
6487 6468 case OPC_MADD_PS:
6488 6469 check_cp1_64bitmode(ctx);
6489   - GEN_LOAD_FREG_FTN(WT0, fs);
6490   - GEN_LOAD_FREG_FTN(WTH0, fs);
6491   - GEN_LOAD_FREG_FTN(WT1, ft);
6492   - GEN_LOAD_FREG_FTN(WTH1, ft);
6493   - GEN_LOAD_FREG_FTN(WT2, fr);
6494   - GEN_LOAD_FREG_FTN(WTH2, fr);
  6470 + gen_load_fpr32(fpu32_T[0], fs);
  6471 + gen_load_fpr32h(fpu32h_T[0], fs);
  6472 + gen_load_fpr32(fpu32_T[1], ft);
  6473 + gen_load_fpr32h(fpu32h_T[1], ft);
  6474 + gen_load_fpr32(fpu32_T[2], fr);
  6475 + gen_load_fpr32h(fpu32h_T[2], fr);
6495 6476 gen_op_float_muladd_ps();
6496   - GEN_STORE_FTN_FREG(fd, WT2);
6497   - GEN_STORE_FTN_FREG(fd, WTH2);
  6477 + gen_store_fpr32(fpu32_T[2], fd);
  6478 + gen_store_fpr32h(fpu32h_T[2], fd);
6498 6479 opn = "madd.ps";
6499 6480 break;
6500 6481 case OPC_MSUB_S:
6501 6482 check_cop1x(ctx);
6502   - GEN_LOAD_FREG_FTN(WT0, fs);
6503   - GEN_LOAD_FREG_FTN(WT1, ft);
6504   - GEN_LOAD_FREG_FTN(WT2, fr);
  6483 + gen_load_fpr32(fpu32_T[0], fs);
  6484 + gen_load_fpr32(fpu32_T[1], ft);
  6485 + gen_load_fpr32(fpu32_T[2], fr);
6505 6486 gen_op_float_mulsub_s();
6506   - GEN_STORE_FTN_FREG(fd, WT2);
  6487 + gen_store_fpr32(fpu32_T[2], fd);
6507 6488 opn = "msub.s";
6508 6489 break;
6509 6490 case OPC_MSUB_D:
6510 6491 check_cop1x(ctx);
6511 6492 check_cp1_registers(ctx, fd | fs | ft | fr);
6512   - GEN_LOAD_FREG_FTN(DT0, fs);
6513   - GEN_LOAD_FREG_FTN(DT1, ft);
6514   - GEN_LOAD_FREG_FTN(DT2, fr);
  6493 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  6494 + gen_load_fpr64(ctx, fpu64_T[1], ft);
  6495 + gen_load_fpr64(ctx, fpu64_T[2], fr);
6515 6496 gen_op_float_mulsub_d();
6516   - GEN_STORE_FTN_FREG(fd, DT2);
  6497 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6517 6498 opn = "msub.d";
6518 6499 break;
6519 6500 case OPC_MSUB_PS:
6520 6501 check_cp1_64bitmode(ctx);
6521   - GEN_LOAD_FREG_FTN(WT0, fs);
6522   - GEN_LOAD_FREG_FTN(WTH0, fs);
6523   - GEN_LOAD_FREG_FTN(WT1, ft);
6524   - GEN_LOAD_FREG_FTN(WTH1, ft);
6525   - GEN_LOAD_FREG_FTN(WT2, fr);
6526   - GEN_LOAD_FREG_FTN(WTH2, fr);
  6502 + gen_load_fpr32(fpu32_T[0], fs);
  6503 + gen_load_fpr32h(fpu32h_T[0], fs);
  6504 + gen_load_fpr32(fpu32_T[1], ft);
  6505 + gen_load_fpr32h(fpu32h_T[1], ft);
  6506 + gen_load_fpr32(fpu32_T[2], fr);
  6507 + gen_load_fpr32h(fpu32h_T[2], fr);
6527 6508 gen_op_float_mulsub_ps();
6528   - GEN_STORE_FTN_FREG(fd, WT2);
6529   - GEN_STORE_FTN_FREG(fd, WTH2);
  6509 + gen_store_fpr32(fpu32_T[2], fd);
  6510 + gen_store_fpr32h(fpu32h_T[2], fd);
6530 6511 opn = "msub.ps";
6531 6512 break;
6532 6513 case OPC_NMADD_S:
6533 6514 check_cop1x(ctx);
6534   - GEN_LOAD_FREG_FTN(WT0, fs);
6535   - GEN_LOAD_FREG_FTN(WT1, ft);
6536   - GEN_LOAD_FREG_FTN(WT2, fr);
  6515 + gen_load_fpr32(fpu32_T[0], fs);
  6516 + gen_load_fpr32(fpu32_T[1], ft);
  6517 + gen_load_fpr32(fpu32_T[2], fr);
6537 6518 gen_op_float_nmuladd_s();
6538   - GEN_STORE_FTN_FREG(fd, WT2);
  6519 + gen_store_fpr32(fpu32_T[2], fd);
6539 6520 opn = "nmadd.s";
6540 6521 break;
6541 6522 case OPC_NMADD_D:
6542 6523 check_cop1x(ctx);
6543 6524 check_cp1_registers(ctx, fd | fs | ft | fr);
6544   - GEN_LOAD_FREG_FTN(DT0, fs);
6545   - GEN_LOAD_FREG_FTN(DT1, ft);
6546   - GEN_LOAD_FREG_FTN(DT2, fr);
  6525 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  6526 + gen_load_fpr64(ctx, fpu64_T[1], ft);
  6527 + gen_load_fpr64(ctx, fpu64_T[2], fr);
6547 6528 gen_op_float_nmuladd_d();
6548   - GEN_STORE_FTN_FREG(fd, DT2);
  6529 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6549 6530 opn = "nmadd.d";
6550 6531 break;
6551 6532 case OPC_NMADD_PS:
6552 6533 check_cp1_64bitmode(ctx);
6553   - GEN_LOAD_FREG_FTN(WT0, fs);
6554   - GEN_LOAD_FREG_FTN(WTH0, fs);
6555   - GEN_LOAD_FREG_FTN(WT1, ft);
6556   - GEN_LOAD_FREG_FTN(WTH1, ft);
6557   - GEN_LOAD_FREG_FTN(WT2, fr);
6558   - GEN_LOAD_FREG_FTN(WTH2, fr);
  6534 + gen_load_fpr32(fpu32_T[0], fs);
  6535 + gen_load_fpr32h(fpu32h_T[0], fs);
  6536 + gen_load_fpr32(fpu32_T[1], ft);
  6537 + gen_load_fpr32h(fpu32h_T[1], ft);
  6538 + gen_load_fpr32(fpu32_T[2], fr);
  6539 + gen_load_fpr32h(fpu32h_T[2], fr);
6559 6540 gen_op_float_nmuladd_ps();
6560   - GEN_STORE_FTN_FREG(fd, WT2);
6561   - GEN_STORE_FTN_FREG(fd, WTH2);
  6541 + gen_store_fpr32(fpu32_T[2], fd);
  6542 + gen_store_fpr32h(fpu32h_T[2], fd);
6562 6543 opn = "nmadd.ps";
6563 6544 break;
6564 6545 case OPC_NMSUB_S:
6565 6546 check_cop1x(ctx);
6566   - GEN_LOAD_FREG_FTN(WT0, fs);
6567   - GEN_LOAD_FREG_FTN(WT1, ft);
6568   - GEN_LOAD_FREG_FTN(WT2, fr);
  6547 + gen_load_fpr32(fpu32_T[0], fs);
  6548 + gen_load_fpr32(fpu32_T[1], ft);
  6549 + gen_load_fpr32(fpu32_T[2], fr);
6569 6550 gen_op_float_nmulsub_s();
6570   - GEN_STORE_FTN_FREG(fd, WT2);
  6551 + gen_store_fpr32(fpu32_T[2], fd);
6571 6552 opn = "nmsub.s";
6572 6553 break;
6573 6554 case OPC_NMSUB_D:
6574 6555 check_cop1x(ctx);
6575 6556 check_cp1_registers(ctx, fd | fs | ft | fr);
6576   - GEN_LOAD_FREG_FTN(DT0, fs);
6577   - GEN_LOAD_FREG_FTN(DT1, ft);
6578   - GEN_LOAD_FREG_FTN(DT2, fr);
  6557 + gen_load_fpr64(ctx, fpu64_T[0], fs);
  6558 + gen_load_fpr64(ctx, fpu64_T[1], ft);
  6559 + gen_load_fpr64(ctx, fpu64_T[2], fr);
6579 6560 gen_op_float_nmulsub_d();
6580   - GEN_STORE_FTN_FREG(fd, DT2);
  6561 + gen_store_fpr64(ctx, fpu64_T[2], fd);
6581 6562 opn = "nmsub.d";
6582 6563 break;
6583 6564 case OPC_NMSUB_PS:
6584 6565 check_cp1_64bitmode(ctx);
6585   - GEN_LOAD_FREG_FTN(WT0, fs);
6586   - GEN_LOAD_FREG_FTN(WTH0, fs);
6587   - GEN_LOAD_FREG_FTN(WT1, ft);
6588   - GEN_LOAD_FREG_FTN(WTH1, ft);
6589   - GEN_LOAD_FREG_FTN(WT2, fr);
6590   - GEN_LOAD_FREG_FTN(WTH2, fr);
  6566 + gen_load_fpr32(fpu32_T[0], fs);
  6567 + gen_load_fpr32h(fpu32h_T[0], fs);
  6568 + gen_load_fpr32(fpu32_T[1], ft);
  6569 + gen_load_fpr32h(fpu32h_T[1], ft);
  6570 + gen_load_fpr32(fpu32_T[2], fr);
  6571 + gen_load_fpr32h(fpu32h_T[2], fr);
6591 6572 gen_op_float_nmulsub_ps();
6592   - GEN_STORE_FTN_FREG(fd, WT2);
6593   - GEN_STORE_FTN_FREG(fd, WTH2);
  6573 + gen_store_fpr32(fpu32_T[2], fd);
  6574 + gen_store_fpr32h(fpu32h_T[2], fd);
6594 6575 opn = "nmsub.ps";
6595 6576 break;
6596 6577 default:
... ... @@ -7294,6 +7275,9 @@ gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb,
7294 7275 if (gen_opc_ptr >= gen_opc_end)
7295 7276 break;
7296 7277  
  7278 + if (gen_opc_ptr >= gen_opc_end)
  7279 + break;
  7280 +
7297 7281 #if defined (MIPS_SINGLE_STEP)
7298 7282 break;
7299 7283 #endif
... ... @@ -7487,6 +7471,10 @@ static void mips_tcg_init(void)
7487 7471 TCG_AREG0,
7488 7472 offsetof(CPUState, current_tc_hi),
7489 7473 "current_tc_hi");
  7474 + current_fpu = tcg_global_mem_new(TCG_TYPE_PTR,
  7475 + TCG_AREG0,
  7476 + offsetof(CPUState, fpu),
  7477 + "current_fpu");
7490 7478 #if TARGET_LONG_BITS > HOST_LONG_BITS
7491 7479 cpu_T[0] = tcg_global_mem_new(TCG_TYPE_TL,
7492 7480 TCG_AREG0, offsetof(CPUState, t0), "T0");
... ... @@ -7502,6 +7490,16 @@ static void mips_tcg_init(void)
7502 7490 #define DEF_HELPER(ret, name, params) tcg_register_helper(name, #name);
7503 7491 #include "helper.h"
7504 7492  
  7493 + fpu32_T[0] = tcg_global_mem_new(TCG_TYPE_I32, TCG_AREG0, offsetof(CPUState, ft0.w[FP_ENDIAN_IDX]), "WT0");
  7494 + fpu32_T[1] = tcg_global_mem_new(TCG_TYPE_I32, TCG_AREG0, offsetof(CPUState, ft1.w[FP_ENDIAN_IDX]), "WT1");
  7495 + fpu32_T[2] = tcg_global_mem_new(TCG_TYPE_I32, TCG_AREG0, offsetof(CPUState, ft2.w[FP_ENDIAN_IDX]), "WT2");
  7496 + fpu64_T[0] = tcg_global_mem_new(TCG_TYPE_I64, TCG_AREG0, offsetof(CPUState, ft0.d), "DT0");
  7497 + fpu64_T[1] = tcg_global_mem_new(TCG_TYPE_I64, TCG_AREG0, offsetof(CPUState, ft1.d), "DT1");
  7498 + fpu64_T[2] = tcg_global_mem_new(TCG_TYPE_I64, TCG_AREG0, offsetof(CPUState, ft2.d), "DT2");
  7499 + fpu32h_T[0] = tcg_global_mem_new(TCG_TYPE_I32, TCG_AREG0, offsetof(CPUState, ft0.w[!FP_ENDIAN_IDX]), "WTH0");
  7500 + fpu32h_T[1] = tcg_global_mem_new(TCG_TYPE_I32, TCG_AREG0, offsetof(CPUState, ft1.w[!FP_ENDIAN_IDX]), "WTH1");
  7501 + fpu32h_T[2] = tcg_global_mem_new(TCG_TYPE_I32, TCG_AREG0, offsetof(CPUState, ft2.w[!FP_ENDIAN_IDX]), "WTH2");
  7502 +
7505 7503 inited = 1;
7506 7504 }
7507 7505  
... ...