Commit aa0bf00b659111905887269775f1f611c8cda74b
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
Showing
3 changed files
with
426 additions
and
587 deletions
target-mips/op.c
| @@ -48,103 +48,6 @@ | @@ -48,103 +48,6 @@ | ||
| 48 | func(arg0, arg1, arg2, arg3) | 48 | func(arg0, arg1, arg2, arg3) |
| 49 | #endif | 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 | /* Load and store */ | 51 | /* Load and store */ |
| 149 | #define MEMSUFFIX _raw | 52 | #define MEMSUFFIX _raw |
| 150 | #include "op_mem.c" | 53 | #include "op_mem.c" |
| @@ -467,48 +370,6 @@ void op_dmultu (void) | @@ -467,48 +370,6 @@ void op_dmultu (void) | ||
| 467 | # define DEBUG_FPU_STATE() do { } while(0) | 370 | # define DEBUG_FPU_STATE() do { } while(0) |
| 468 | #endif | 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 | /* Float support. | 373 | /* Float support. |
| 513 | Single precition routines have a "s" suffix, double precision a | 374 | Single precition routines have a "s" suffix, double precision a |
| 514 | "d" suffix, 32bit integer "w", 64bit integer "l", paired singe "ps", | 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,26 +268,6 @@ void glue(op_sdr, MEMSUFFIX) (void) | ||
| 268 | } | 268 | } |
| 269 | #endif /* TARGET_MIPS64 */ | 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 | void glue(op_luxc1, MEMSUFFIX) (void) | 271 | void glue(op_luxc1, MEMSUFFIX) (void) |
| 292 | { | 272 | { |
| 293 | DT0 = glue(ldq, MEMSUFFIX)(T0 & ~0x7); | 273 | DT0 = glue(ldq, MEMSUFFIX)(T0 & ~0x7); |
target-mips/translate.c
| @@ -423,7 +423,10 @@ enum { | @@ -423,7 +423,10 @@ enum { | ||
| 423 | }; | 423 | }; |
| 424 | 424 | ||
| 425 | /* global register indices */ | 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 | static inline void tcg_gen_helper_0_1i(void *func, TCGv arg) | 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,58 +575,60 @@ static inline void gen_store_srsgpr (TCGv t, int reg) | ||
| 572 | } | 575 | } |
| 573 | 576 | ||
| 574 | /* Floating point register moves. */ | 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 | #define FOP_CONDS(type, fmt) \ | 633 | #define FOP_CONDS(type, fmt) \ |
| 629 | static GenOpFunc1 * gen_op_cmp ## type ## _ ## fmt ## _table[16] = { \ | 634 | static GenOpFunc1 * gen_op_cmp ## type ## _ ## fmt ## _table[16] = { \ |
| @@ -950,10 +955,6 @@ OP_LD_TABLE(wl); | @@ -950,10 +955,6 @@ OP_LD_TABLE(wl); | ||
| 950 | OP_LD_TABLE(wr); | 955 | OP_LD_TABLE(wr); |
| 951 | OP_ST_TABLE(wl); | 956 | OP_ST_TABLE(wl); |
| 952 | OP_ST_TABLE(wr); | 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 | OP_LD_TABLE(uxc1); | 958 | OP_LD_TABLE(uxc1); |
| 958 | OP_ST_TABLE(uxc1); | 959 | OP_ST_TABLE(uxc1); |
| 959 | 960 | ||
| @@ -1028,26 +1029,6 @@ OP_ST_ATOMIC(scd,st64,0x7); | @@ -1028,26 +1029,6 @@ OP_ST_ATOMIC(scd,st64,0x7); | ||
| 1028 | #endif | 1029 | #endif |
| 1029 | #undef OP_ST_ATOMIC | 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 | /* Load and store */ | 1032 | /* Load and store */ |
| 1052 | static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt, | 1033 | static void gen_ldst (DisasContext *ctx, uint32_t opc, int rt, |
| 1053 | int base, int16_t offset) | 1034 | int base, int16_t offset) |
| @@ -1218,23 +1199,23 @@ static void gen_flt_ldst (DisasContext *ctx, uint32_t opc, int ft, | @@ -1218,23 +1199,23 @@ static void gen_flt_ldst (DisasContext *ctx, uint32_t opc, int ft, | ||
| 1218 | memory access. */ | 1199 | memory access. */ |
| 1219 | switch (opc) { | 1200 | switch (opc) { |
| 1220 | case OPC_LWC1: | 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 | opn = "lwc1"; | 1204 | opn = "lwc1"; |
| 1224 | break; | 1205 | break; |
| 1225 | case OPC_SWC1: | 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 | opn = "swc1"; | 1209 | opn = "swc1"; |
| 1229 | break; | 1210 | break; |
| 1230 | case OPC_LDC1: | 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 | opn = "ldc1"; | 1214 | opn = "ldc1"; |
| 1234 | break; | 1215 | break; |
| 1235 | case OPC_SDC1: | 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 | opn = "sdc1"; | 1219 | opn = "sdc1"; |
| 1239 | break; | 1220 | break; |
| 1240 | default: | 1221 | default: |
| @@ -5073,11 +5054,11 @@ static void gen_mftr(CPUState *env, DisasContext *ctx, int rt, | @@ -5073,11 +5054,11 @@ static void gen_mftr(CPUState *env, DisasContext *ctx, int rt, | ||
| 5073 | case 2: | 5054 | case 2: |
| 5074 | /* XXX: For now we support only a single FPU context. */ | 5055 | /* XXX: For now we support only a single FPU context. */ |
| 5075 | if (h == 0) { | 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 | } else { | 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 | break; | 5063 | break; |
| 5083 | case 3: | 5064 | case 3: |
| @@ -5237,11 +5218,11 @@ static void gen_mttr(CPUState *env, DisasContext *ctx, int rd, | @@ -5237,11 +5218,11 @@ static void gen_mttr(CPUState *env, DisasContext *ctx, int rd, | ||
| 5237 | case 2: | 5218 | case 2: |
| 5238 | /* XXX: For now we support only a single FPU context. */ | 5219 | /* XXX: For now we support only a single FPU context. */ |
| 5239 | if (h == 0) { | 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 | } else { | 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 | break; | 5227 | break; |
| 5247 | case 3: | 5228 | case 3: |
| @@ -5464,15 +5445,15 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) | @@ -5464,15 +5445,15 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) | ||
| 5464 | 5445 | ||
| 5465 | switch (opc) { | 5446 | switch (opc) { |
| 5466 | case OPC_MFC1: | 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 | gen_store_gpr(cpu_T[0], rt); | 5450 | gen_store_gpr(cpu_T[0], rt); |
| 5470 | opn = "mfc1"; | 5451 | opn = "mfc1"; |
| 5471 | break; | 5452 | break; |
| 5472 | case OPC_MTC1: | 5453 | case OPC_MTC1: |
| 5473 | gen_load_gpr(cpu_T[0], rt); | 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 | opn = "mtc1"; | 5457 | opn = "mtc1"; |
| 5477 | break; | 5458 | break; |
| 5478 | case OPC_CFC1: | 5459 | case OPC_CFC1: |
| @@ -5486,27 +5467,27 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) | @@ -5486,27 +5467,27 @@ static void gen_cp1 (DisasContext *ctx, uint32_t opc, int rt, int fs) | ||
| 5486 | opn = "ctc1"; | 5467 | opn = "ctc1"; |
| 5487 | break; | 5468 | break; |
| 5488 | case OPC_DMFC1: | 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 | gen_store_gpr(cpu_T[0], rt); | 5472 | gen_store_gpr(cpu_T[0], rt); |
| 5492 | opn = "dmfc1"; | 5473 | opn = "dmfc1"; |
| 5493 | break; | 5474 | break; |
| 5494 | case OPC_DMTC1: | 5475 | case OPC_DMTC1: |
| 5495 | gen_load_gpr(cpu_T[0], rt); | 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 | opn = "dmtc1"; | 5479 | opn = "dmtc1"; |
| 5499 | break; | 5480 | break; |
| 5500 | case OPC_MFHC1: | 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 | gen_store_gpr(cpu_T[0], rt); | 5484 | gen_store_gpr(cpu_T[0], rt); |
| 5504 | opn = "mfhc1"; | 5485 | opn = "mfhc1"; |
| 5505 | break; | 5486 | break; |
| 5506 | case OPC_MTHC1: | 5487 | case OPC_MTHC1: |
| 5507 | gen_load_gpr(cpu_T[0], rt); | 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 | opn = "mthc1"; | 5491 | opn = "mthc1"; |
| 5511 | break; | 5492 | break; |
| 5512 | default: | 5493 | default: |
| @@ -5614,207 +5595,207 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | @@ -5614,207 +5595,207 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | ||
| 5614 | 5595 | ||
| 5615 | switch (ctx->opcode & FOP(0x3f, 0x1f)) { | 5596 | switch (ctx->opcode & FOP(0x3f, 0x1f)) { |
| 5616 | case FOP(0, 16): | 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 | gen_op_float_add_s(); | 5600 | gen_op_float_add_s(); |
| 5620 | - GEN_STORE_FTN_FREG(fd, WT2); | 5601 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5621 | opn = "add.s"; | 5602 | opn = "add.s"; |
| 5622 | optype = BINOP; | 5603 | optype = BINOP; |
| 5623 | break; | 5604 | break; |
| 5624 | case FOP(1, 16): | 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 | gen_op_float_sub_s(); | 5608 | gen_op_float_sub_s(); |
| 5628 | - GEN_STORE_FTN_FREG(fd, WT2); | 5609 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5629 | opn = "sub.s"; | 5610 | opn = "sub.s"; |
| 5630 | optype = BINOP; | 5611 | optype = BINOP; |
| 5631 | break; | 5612 | break; |
| 5632 | case FOP(2, 16): | 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 | gen_op_float_mul_s(); | 5616 | gen_op_float_mul_s(); |
| 5636 | - GEN_STORE_FTN_FREG(fd, WT2); | 5617 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5637 | opn = "mul.s"; | 5618 | opn = "mul.s"; |
| 5638 | optype = BINOP; | 5619 | optype = BINOP; |
| 5639 | break; | 5620 | break; |
| 5640 | case FOP(3, 16): | 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 | gen_op_float_div_s(); | 5624 | gen_op_float_div_s(); |
| 5644 | - GEN_STORE_FTN_FREG(fd, WT2); | 5625 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5645 | opn = "div.s"; | 5626 | opn = "div.s"; |
| 5646 | optype = BINOP; | 5627 | optype = BINOP; |
| 5647 | break; | 5628 | break; |
| 5648 | case FOP(4, 16): | 5629 | case FOP(4, 16): |
| 5649 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5630 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5650 | gen_op_float_sqrt_s(); | 5631 | gen_op_float_sqrt_s(); |
| 5651 | - GEN_STORE_FTN_FREG(fd, WT2); | 5632 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5652 | opn = "sqrt.s"; | 5633 | opn = "sqrt.s"; |
| 5653 | break; | 5634 | break; |
| 5654 | case FOP(5, 16): | 5635 | case FOP(5, 16): |
| 5655 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5636 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5656 | gen_op_float_abs_s(); | 5637 | gen_op_float_abs_s(); |
| 5657 | - GEN_STORE_FTN_FREG(fd, WT2); | 5638 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5658 | opn = "abs.s"; | 5639 | opn = "abs.s"; |
| 5659 | break; | 5640 | break; |
| 5660 | case FOP(6, 16): | 5641 | case FOP(6, 16): |
| 5661 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5642 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5662 | gen_op_float_mov_s(); | 5643 | gen_op_float_mov_s(); |
| 5663 | - GEN_STORE_FTN_FREG(fd, WT2); | 5644 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5664 | opn = "mov.s"; | 5645 | opn = "mov.s"; |
| 5665 | break; | 5646 | break; |
| 5666 | case FOP(7, 16): | 5647 | case FOP(7, 16): |
| 5667 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5648 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5668 | gen_op_float_chs_s(); | 5649 | gen_op_float_chs_s(); |
| 5669 | - GEN_STORE_FTN_FREG(fd, WT2); | 5650 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5670 | opn = "neg.s"; | 5651 | opn = "neg.s"; |
| 5671 | break; | 5652 | break; |
| 5672 | case FOP(8, 16): | 5653 | case FOP(8, 16): |
| 5673 | check_cp1_64bitmode(ctx); | 5654 | check_cp1_64bitmode(ctx); |
| 5674 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5655 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5675 | gen_op_float_roundl_s(); | 5656 | gen_op_float_roundl_s(); |
| 5676 | - GEN_STORE_FTN_FREG(fd, DT2); | 5657 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5677 | opn = "round.l.s"; | 5658 | opn = "round.l.s"; |
| 5678 | break; | 5659 | break; |
| 5679 | case FOP(9, 16): | 5660 | case FOP(9, 16): |
| 5680 | check_cp1_64bitmode(ctx); | 5661 | check_cp1_64bitmode(ctx); |
| 5681 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5662 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5682 | gen_op_float_truncl_s(); | 5663 | gen_op_float_truncl_s(); |
| 5683 | - GEN_STORE_FTN_FREG(fd, DT2); | 5664 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5684 | opn = "trunc.l.s"; | 5665 | opn = "trunc.l.s"; |
| 5685 | break; | 5666 | break; |
| 5686 | case FOP(10, 16): | 5667 | case FOP(10, 16): |
| 5687 | check_cp1_64bitmode(ctx); | 5668 | check_cp1_64bitmode(ctx); |
| 5688 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5669 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5689 | gen_op_float_ceill_s(); | 5670 | gen_op_float_ceill_s(); |
| 5690 | - GEN_STORE_FTN_FREG(fd, DT2); | 5671 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5691 | opn = "ceil.l.s"; | 5672 | opn = "ceil.l.s"; |
| 5692 | break; | 5673 | break; |
| 5693 | case FOP(11, 16): | 5674 | case FOP(11, 16): |
| 5694 | check_cp1_64bitmode(ctx); | 5675 | check_cp1_64bitmode(ctx); |
| 5695 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5676 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5696 | gen_op_float_floorl_s(); | 5677 | gen_op_float_floorl_s(); |
| 5697 | - GEN_STORE_FTN_FREG(fd, DT2); | 5678 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5698 | opn = "floor.l.s"; | 5679 | opn = "floor.l.s"; |
| 5699 | break; | 5680 | break; |
| 5700 | case FOP(12, 16): | 5681 | case FOP(12, 16): |
| 5701 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5682 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5702 | gen_op_float_roundw_s(); | 5683 | gen_op_float_roundw_s(); |
| 5703 | - GEN_STORE_FTN_FREG(fd, WT2); | 5684 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5704 | opn = "round.w.s"; | 5685 | opn = "round.w.s"; |
| 5705 | break; | 5686 | break; |
| 5706 | case FOP(13, 16): | 5687 | case FOP(13, 16): |
| 5707 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5688 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5708 | gen_op_float_truncw_s(); | 5689 | gen_op_float_truncw_s(); |
| 5709 | - GEN_STORE_FTN_FREG(fd, WT2); | 5690 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5710 | opn = "trunc.w.s"; | 5691 | opn = "trunc.w.s"; |
| 5711 | break; | 5692 | break; |
| 5712 | case FOP(14, 16): | 5693 | case FOP(14, 16): |
| 5713 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5694 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5714 | gen_op_float_ceilw_s(); | 5695 | gen_op_float_ceilw_s(); |
| 5715 | - GEN_STORE_FTN_FREG(fd, WT2); | 5696 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5716 | opn = "ceil.w.s"; | 5697 | opn = "ceil.w.s"; |
| 5717 | break; | 5698 | break; |
| 5718 | case FOP(15, 16): | 5699 | case FOP(15, 16): |
| 5719 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5700 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5720 | gen_op_float_floorw_s(); | 5701 | gen_op_float_floorw_s(); |
| 5721 | - GEN_STORE_FTN_FREG(fd, WT2); | 5702 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5722 | opn = "floor.w.s"; | 5703 | opn = "floor.w.s"; |
| 5723 | break; | 5704 | break; |
| 5724 | case FOP(17, 16): | 5705 | case FOP(17, 16): |
| 5725 | gen_load_gpr(cpu_T[0], ft); | 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 | gen_movcf_s(ctx, (ft >> 2) & 0x7, ft & 0x1); | 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 | opn = "movcf.s"; | 5711 | opn = "movcf.s"; |
| 5731 | break; | 5712 | break; |
| 5732 | case FOP(18, 16): | 5713 | case FOP(18, 16): |
| 5733 | gen_load_gpr(cpu_T[0], ft); | 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 | gen_op_float_movz_s(); | 5717 | gen_op_float_movz_s(); |
| 5737 | - GEN_STORE_FTN_FREG(fd, WT2); | 5718 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5738 | opn = "movz.s"; | 5719 | opn = "movz.s"; |
| 5739 | break; | 5720 | break; |
| 5740 | case FOP(19, 16): | 5721 | case FOP(19, 16): |
| 5741 | gen_load_gpr(cpu_T[0], ft); | 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 | gen_op_float_movn_s(); | 5725 | gen_op_float_movn_s(); |
| 5745 | - GEN_STORE_FTN_FREG(fd, WT2); | 5726 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5746 | opn = "movn.s"; | 5727 | opn = "movn.s"; |
| 5747 | break; | 5728 | break; |
| 5748 | case FOP(21, 16): | 5729 | case FOP(21, 16): |
| 5749 | check_cop1x(ctx); | 5730 | check_cop1x(ctx); |
| 5750 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5731 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5751 | gen_op_float_recip_s(); | 5732 | gen_op_float_recip_s(); |
| 5752 | - GEN_STORE_FTN_FREG(fd, WT2); | 5733 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5753 | opn = "recip.s"; | 5734 | opn = "recip.s"; |
| 5754 | break; | 5735 | break; |
| 5755 | case FOP(22, 16): | 5736 | case FOP(22, 16): |
| 5756 | check_cop1x(ctx); | 5737 | check_cop1x(ctx); |
| 5757 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5738 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5758 | gen_op_float_rsqrt_s(); | 5739 | gen_op_float_rsqrt_s(); |
| 5759 | - GEN_STORE_FTN_FREG(fd, WT2); | 5740 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5760 | opn = "rsqrt.s"; | 5741 | opn = "rsqrt.s"; |
| 5761 | break; | 5742 | break; |
| 5762 | case FOP(28, 16): | 5743 | case FOP(28, 16): |
| 5763 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_recip2_s(); | 5747 | gen_op_float_recip2_s(); |
| 5767 | - GEN_STORE_FTN_FREG(fd, WT2); | 5748 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5768 | opn = "recip2.s"; | 5749 | opn = "recip2.s"; |
| 5769 | break; | 5750 | break; |
| 5770 | case FOP(29, 16): | 5751 | case FOP(29, 16): |
| 5771 | check_cp1_64bitmode(ctx); | 5752 | check_cp1_64bitmode(ctx); |
| 5772 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5753 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5773 | gen_op_float_recip1_s(); | 5754 | gen_op_float_recip1_s(); |
| 5774 | - GEN_STORE_FTN_FREG(fd, WT2); | 5755 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5775 | opn = "recip1.s"; | 5756 | opn = "recip1.s"; |
| 5776 | break; | 5757 | break; |
| 5777 | case FOP(30, 16): | 5758 | case FOP(30, 16): |
| 5778 | check_cp1_64bitmode(ctx); | 5759 | check_cp1_64bitmode(ctx); |
| 5779 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5760 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5780 | gen_op_float_rsqrt1_s(); | 5761 | gen_op_float_rsqrt1_s(); |
| 5781 | - GEN_STORE_FTN_FREG(fd, WT2); | 5762 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5782 | opn = "rsqrt1.s"; | 5763 | opn = "rsqrt1.s"; |
| 5783 | break; | 5764 | break; |
| 5784 | case FOP(31, 16): | 5765 | case FOP(31, 16): |
| 5785 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_rsqrt2_s(); | 5769 | gen_op_float_rsqrt2_s(); |
| 5789 | - GEN_STORE_FTN_FREG(fd, WT2); | 5770 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5790 | opn = "rsqrt2.s"; | 5771 | opn = "rsqrt2.s"; |
| 5791 | break; | 5772 | break; |
| 5792 | case FOP(33, 16): | 5773 | case FOP(33, 16): |
| 5793 | check_cp1_registers(ctx, fd); | 5774 | check_cp1_registers(ctx, fd); |
| 5794 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5775 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5795 | gen_op_float_cvtd_s(); | 5776 | gen_op_float_cvtd_s(); |
| 5796 | - GEN_STORE_FTN_FREG(fd, DT2); | 5777 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5797 | opn = "cvt.d.s"; | 5778 | opn = "cvt.d.s"; |
| 5798 | break; | 5779 | break; |
| 5799 | case FOP(36, 16): | 5780 | case FOP(36, 16): |
| 5800 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5781 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5801 | gen_op_float_cvtw_s(); | 5782 | gen_op_float_cvtw_s(); |
| 5802 | - GEN_STORE_FTN_FREG(fd, WT2); | 5783 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5803 | opn = "cvt.w.s"; | 5784 | opn = "cvt.w.s"; |
| 5804 | break; | 5785 | break; |
| 5805 | case FOP(37, 16): | 5786 | case FOP(37, 16): |
| 5806 | check_cp1_64bitmode(ctx); | 5787 | check_cp1_64bitmode(ctx); |
| 5807 | - GEN_LOAD_FREG_FTN(WT0, fs); | 5788 | + gen_load_fpr32(fpu32_T[0], fs); |
| 5808 | gen_op_float_cvtl_s(); | 5789 | gen_op_float_cvtl_s(); |
| 5809 | - GEN_STORE_FTN_FREG(fd, DT2); | 5790 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5810 | opn = "cvt.l.s"; | 5791 | opn = "cvt.l.s"; |
| 5811 | break; | 5792 | break; |
| 5812 | case FOP(38, 16): | 5793 | case FOP(38, 16): |
| 5813 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_cvtps_s(); | 5797 | gen_op_float_cvtps_s(); |
| 5817 | - GEN_STORE_FTN_FREG(fd, DT2); | 5798 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5818 | opn = "cvt.ps.s"; | 5799 | opn = "cvt.ps.s"; |
| 5819 | break; | 5800 | break; |
| 5820 | case FOP(48, 16): | 5801 | case FOP(48, 16): |
| @@ -5833,8 +5814,8 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | @@ -5833,8 +5814,8 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | ||
| 5833 | case FOP(61, 16): | 5814 | case FOP(61, 16): |
| 5834 | case FOP(62, 16): | 5815 | case FOP(62, 16): |
| 5835 | case FOP(63, 16): | 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 | if (ctx->opcode & (1 << 6)) { | 5819 | if (ctx->opcode & (1 << 6)) { |
| 5839 | check_cop1x(ctx); | 5820 | check_cop1x(ctx); |
| 5840 | gen_cmpabs_s(func-48, cc); | 5821 | gen_cmpabs_s(func-48, cc); |
| @@ -5846,190 +5827,190 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | @@ -5846,190 +5827,190 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | ||
| 5846 | break; | 5827 | break; |
| 5847 | case FOP(0, 17): | 5828 | case FOP(0, 17): |
| 5848 | check_cp1_registers(ctx, fs | ft | fd); | 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 | gen_op_float_add_d(); | 5832 | gen_op_float_add_d(); |
| 5852 | - GEN_STORE_FTN_FREG(fd, DT2); | 5833 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5853 | opn = "add.d"; | 5834 | opn = "add.d"; |
| 5854 | optype = BINOP; | 5835 | optype = BINOP; |
| 5855 | break; | 5836 | break; |
| 5856 | case FOP(1, 17): | 5837 | case FOP(1, 17): |
| 5857 | check_cp1_registers(ctx, fs | ft | fd); | 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 | gen_op_float_sub_d(); | 5841 | gen_op_float_sub_d(); |
| 5861 | - GEN_STORE_FTN_FREG(fd, DT2); | 5842 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5862 | opn = "sub.d"; | 5843 | opn = "sub.d"; |
| 5863 | optype = BINOP; | 5844 | optype = BINOP; |
| 5864 | break; | 5845 | break; |
| 5865 | case FOP(2, 17): | 5846 | case FOP(2, 17): |
| 5866 | check_cp1_registers(ctx, fs | ft | fd); | 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 | gen_op_float_mul_d(); | 5850 | gen_op_float_mul_d(); |
| 5870 | - GEN_STORE_FTN_FREG(fd, DT2); | 5851 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5871 | opn = "mul.d"; | 5852 | opn = "mul.d"; |
| 5872 | optype = BINOP; | 5853 | optype = BINOP; |
| 5873 | break; | 5854 | break; |
| 5874 | case FOP(3, 17): | 5855 | case FOP(3, 17): |
| 5875 | check_cp1_registers(ctx, fs | ft | fd); | 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 | gen_op_float_div_d(); | 5859 | gen_op_float_div_d(); |
| 5879 | - GEN_STORE_FTN_FREG(fd, DT2); | 5860 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5880 | opn = "div.d"; | 5861 | opn = "div.d"; |
| 5881 | optype = BINOP; | 5862 | optype = BINOP; |
| 5882 | break; | 5863 | break; |
| 5883 | case FOP(4, 17): | 5864 | case FOP(4, 17): |
| 5884 | check_cp1_registers(ctx, fs | fd); | 5865 | check_cp1_registers(ctx, fs | fd); |
| 5885 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5866 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5886 | gen_op_float_sqrt_d(); | 5867 | gen_op_float_sqrt_d(); |
| 5887 | - GEN_STORE_FTN_FREG(fd, DT2); | 5868 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5888 | opn = "sqrt.d"; | 5869 | opn = "sqrt.d"; |
| 5889 | break; | 5870 | break; |
| 5890 | case FOP(5, 17): | 5871 | case FOP(5, 17): |
| 5891 | check_cp1_registers(ctx, fs | fd); | 5872 | check_cp1_registers(ctx, fs | fd); |
| 5892 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5873 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5893 | gen_op_float_abs_d(); | 5874 | gen_op_float_abs_d(); |
| 5894 | - GEN_STORE_FTN_FREG(fd, DT2); | 5875 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5895 | opn = "abs.d"; | 5876 | opn = "abs.d"; |
| 5896 | break; | 5877 | break; |
| 5897 | case FOP(6, 17): | 5878 | case FOP(6, 17): |
| 5898 | check_cp1_registers(ctx, fs | fd); | 5879 | check_cp1_registers(ctx, fs | fd); |
| 5899 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5880 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5900 | gen_op_float_mov_d(); | 5881 | gen_op_float_mov_d(); |
| 5901 | - GEN_STORE_FTN_FREG(fd, DT2); | 5882 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5902 | opn = "mov.d"; | 5883 | opn = "mov.d"; |
| 5903 | break; | 5884 | break; |
| 5904 | case FOP(7, 17): | 5885 | case FOP(7, 17): |
| 5905 | check_cp1_registers(ctx, fs | fd); | 5886 | check_cp1_registers(ctx, fs | fd); |
| 5906 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5887 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5907 | gen_op_float_chs_d(); | 5888 | gen_op_float_chs_d(); |
| 5908 | - GEN_STORE_FTN_FREG(fd, DT2); | 5889 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5909 | opn = "neg.d"; | 5890 | opn = "neg.d"; |
| 5910 | break; | 5891 | break; |
| 5911 | case FOP(8, 17): | 5892 | case FOP(8, 17): |
| 5912 | check_cp1_64bitmode(ctx); | 5893 | check_cp1_64bitmode(ctx); |
| 5913 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5894 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5914 | gen_op_float_roundl_d(); | 5895 | gen_op_float_roundl_d(); |
| 5915 | - GEN_STORE_FTN_FREG(fd, DT2); | 5896 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5916 | opn = "round.l.d"; | 5897 | opn = "round.l.d"; |
| 5917 | break; | 5898 | break; |
| 5918 | case FOP(9, 17): | 5899 | case FOP(9, 17): |
| 5919 | check_cp1_64bitmode(ctx); | 5900 | check_cp1_64bitmode(ctx); |
| 5920 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5901 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5921 | gen_op_float_truncl_d(); | 5902 | gen_op_float_truncl_d(); |
| 5922 | - GEN_STORE_FTN_FREG(fd, DT2); | 5903 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5923 | opn = "trunc.l.d"; | 5904 | opn = "trunc.l.d"; |
| 5924 | break; | 5905 | break; |
| 5925 | case FOP(10, 17): | 5906 | case FOP(10, 17): |
| 5926 | check_cp1_64bitmode(ctx); | 5907 | check_cp1_64bitmode(ctx); |
| 5927 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5908 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5928 | gen_op_float_ceill_d(); | 5909 | gen_op_float_ceill_d(); |
| 5929 | - GEN_STORE_FTN_FREG(fd, DT2); | 5910 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5930 | opn = "ceil.l.d"; | 5911 | opn = "ceil.l.d"; |
| 5931 | break; | 5912 | break; |
| 5932 | case FOP(11, 17): | 5913 | case FOP(11, 17): |
| 5933 | check_cp1_64bitmode(ctx); | 5914 | check_cp1_64bitmode(ctx); |
| 5934 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5915 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5935 | gen_op_float_floorl_d(); | 5916 | gen_op_float_floorl_d(); |
| 5936 | - GEN_STORE_FTN_FREG(fd, DT2); | 5917 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5937 | opn = "floor.l.d"; | 5918 | opn = "floor.l.d"; |
| 5938 | break; | 5919 | break; |
| 5939 | case FOP(12, 17): | 5920 | case FOP(12, 17): |
| 5940 | check_cp1_registers(ctx, fs); | 5921 | check_cp1_registers(ctx, fs); |
| 5941 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5922 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5942 | gen_op_float_roundw_d(); | 5923 | gen_op_float_roundw_d(); |
| 5943 | - GEN_STORE_FTN_FREG(fd, WT2); | 5924 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5944 | opn = "round.w.d"; | 5925 | opn = "round.w.d"; |
| 5945 | break; | 5926 | break; |
| 5946 | case FOP(13, 17): | 5927 | case FOP(13, 17): |
| 5947 | check_cp1_registers(ctx, fs); | 5928 | check_cp1_registers(ctx, fs); |
| 5948 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5929 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5949 | gen_op_float_truncw_d(); | 5930 | gen_op_float_truncw_d(); |
| 5950 | - GEN_STORE_FTN_FREG(fd, WT2); | 5931 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5951 | opn = "trunc.w.d"; | 5932 | opn = "trunc.w.d"; |
| 5952 | break; | 5933 | break; |
| 5953 | case FOP(14, 17): | 5934 | case FOP(14, 17): |
| 5954 | check_cp1_registers(ctx, fs); | 5935 | check_cp1_registers(ctx, fs); |
| 5955 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5936 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5956 | gen_op_float_ceilw_d(); | 5937 | gen_op_float_ceilw_d(); |
| 5957 | - GEN_STORE_FTN_FREG(fd, WT2); | 5938 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5958 | opn = "ceil.w.d"; | 5939 | opn = "ceil.w.d"; |
| 5959 | break; | 5940 | break; |
| 5960 | case FOP(15, 17): | 5941 | case FOP(15, 17): |
| 5961 | check_cp1_registers(ctx, fs); | 5942 | check_cp1_registers(ctx, fs); |
| 5962 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5943 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5963 | gen_op_float_floorw_d(); | 5944 | gen_op_float_floorw_d(); |
| 5964 | - GEN_STORE_FTN_FREG(fd, WT2); | 5945 | + gen_store_fpr32(fpu32_T[2], fd); |
| 5965 | opn = "floor.w.d"; | 5946 | opn = "floor.w.d"; |
| 5966 | break; | 5947 | break; |
| 5967 | case FOP(17, 17): | 5948 | case FOP(17, 17): |
| 5968 | gen_load_gpr(cpu_T[0], ft); | 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 | gen_movcf_d(ctx, (ft >> 2) & 0x7, ft & 0x1); | 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 | opn = "movcf.d"; | 5954 | opn = "movcf.d"; |
| 5974 | break; | 5955 | break; |
| 5975 | case FOP(18, 17): | 5956 | case FOP(18, 17): |
| 5976 | gen_load_gpr(cpu_T[0], ft); | 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 | gen_op_float_movz_d(); | 5960 | gen_op_float_movz_d(); |
| 5980 | - GEN_STORE_FTN_FREG(fd, DT2); | 5961 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5981 | opn = "movz.d"; | 5962 | opn = "movz.d"; |
| 5982 | break; | 5963 | break; |
| 5983 | case FOP(19, 17): | 5964 | case FOP(19, 17): |
| 5984 | gen_load_gpr(cpu_T[0], ft); | 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 | gen_op_float_movn_d(); | 5968 | gen_op_float_movn_d(); |
| 5988 | - GEN_STORE_FTN_FREG(fd, DT2); | 5969 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5989 | opn = "movn.d"; | 5970 | opn = "movn.d"; |
| 5990 | break; | 5971 | break; |
| 5991 | case FOP(21, 17): | 5972 | case FOP(21, 17): |
| 5992 | check_cp1_64bitmode(ctx); | 5973 | check_cp1_64bitmode(ctx); |
| 5993 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5974 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5994 | gen_op_float_recip_d(); | 5975 | gen_op_float_recip_d(); |
| 5995 | - GEN_STORE_FTN_FREG(fd, DT2); | 5976 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5996 | opn = "recip.d"; | 5977 | opn = "recip.d"; |
| 5997 | break; | 5978 | break; |
| 5998 | case FOP(22, 17): | 5979 | case FOP(22, 17): |
| 5999 | check_cp1_64bitmode(ctx); | 5980 | check_cp1_64bitmode(ctx); |
| 6000 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5981 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6001 | gen_op_float_rsqrt_d(); | 5982 | gen_op_float_rsqrt_d(); |
| 6002 | - GEN_STORE_FTN_FREG(fd, DT2); | 5983 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6003 | opn = "rsqrt.d"; | 5984 | opn = "rsqrt.d"; |
| 6004 | break; | 5985 | break; |
| 6005 | case FOP(28, 17): | 5986 | case FOP(28, 17): |
| 6006 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_recip2_d(); | 5990 | gen_op_float_recip2_d(); |
| 6010 | - GEN_STORE_FTN_FREG(fd, DT2); | 5991 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6011 | opn = "recip2.d"; | 5992 | opn = "recip2.d"; |
| 6012 | break; | 5993 | break; |
| 6013 | case FOP(29, 17): | 5994 | case FOP(29, 17): |
| 6014 | check_cp1_64bitmode(ctx); | 5995 | check_cp1_64bitmode(ctx); |
| 6015 | - GEN_LOAD_FREG_FTN(DT0, fs); | 5996 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6016 | gen_op_float_recip1_d(); | 5997 | gen_op_float_recip1_d(); |
| 6017 | - GEN_STORE_FTN_FREG(fd, DT2); | 5998 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6018 | opn = "recip1.d"; | 5999 | opn = "recip1.d"; |
| 6019 | break; | 6000 | break; |
| 6020 | case FOP(30, 17): | 6001 | case FOP(30, 17): |
| 6021 | check_cp1_64bitmode(ctx); | 6002 | check_cp1_64bitmode(ctx); |
| 6022 | - GEN_LOAD_FREG_FTN(DT0, fs); | 6003 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6023 | gen_op_float_rsqrt1_d(); | 6004 | gen_op_float_rsqrt1_d(); |
| 6024 | - GEN_STORE_FTN_FREG(fd, DT2); | 6005 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6025 | opn = "rsqrt1.d"; | 6006 | opn = "rsqrt1.d"; |
| 6026 | break; | 6007 | break; |
| 6027 | case FOP(31, 17): | 6008 | case FOP(31, 17): |
| 6028 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_rsqrt2_d(); | 6012 | gen_op_float_rsqrt2_d(); |
| 6032 | - GEN_STORE_FTN_FREG(fd, DT2); | 6013 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6033 | opn = "rsqrt2.d"; | 6014 | opn = "rsqrt2.d"; |
| 6034 | break; | 6015 | break; |
| 6035 | case FOP(48, 17): | 6016 | case FOP(48, 17): |
| @@ -6048,8 +6029,8 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | @@ -6048,8 +6029,8 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | ||
| 6048 | case FOP(61, 17): | 6029 | case FOP(61, 17): |
| 6049 | case FOP(62, 17): | 6030 | case FOP(62, 17): |
| 6050 | case FOP(63, 17): | 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 | if (ctx->opcode & (1 << 6)) { | 6034 | if (ctx->opcode & (1 << 6)) { |
| 6054 | check_cop1x(ctx); | 6035 | check_cop1x(ctx); |
| 6055 | check_cp1_registers(ctx, fs | ft); | 6036 | check_cp1_registers(ctx, fs | ft); |
| @@ -6063,275 +6044,275 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | @@ -6063,275 +6044,275 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | ||
| 6063 | break; | 6044 | break; |
| 6064 | case FOP(32, 17): | 6045 | case FOP(32, 17): |
| 6065 | check_cp1_registers(ctx, fs); | 6046 | check_cp1_registers(ctx, fs); |
| 6066 | - GEN_LOAD_FREG_FTN(DT0, fs); | 6047 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6067 | gen_op_float_cvts_d(); | 6048 | gen_op_float_cvts_d(); |
| 6068 | - GEN_STORE_FTN_FREG(fd, WT2); | 6049 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6069 | opn = "cvt.s.d"; | 6050 | opn = "cvt.s.d"; |
| 6070 | break; | 6051 | break; |
| 6071 | case FOP(36, 17): | 6052 | case FOP(36, 17): |
| 6072 | check_cp1_registers(ctx, fs); | 6053 | check_cp1_registers(ctx, fs); |
| 6073 | - GEN_LOAD_FREG_FTN(DT0, fs); | 6054 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6074 | gen_op_float_cvtw_d(); | 6055 | gen_op_float_cvtw_d(); |
| 6075 | - GEN_STORE_FTN_FREG(fd, WT2); | 6056 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6076 | opn = "cvt.w.d"; | 6057 | opn = "cvt.w.d"; |
| 6077 | break; | 6058 | break; |
| 6078 | case FOP(37, 17): | 6059 | case FOP(37, 17): |
| 6079 | check_cp1_64bitmode(ctx); | 6060 | check_cp1_64bitmode(ctx); |
| 6080 | - GEN_LOAD_FREG_FTN(DT0, fs); | 6061 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6081 | gen_op_float_cvtl_d(); | 6062 | gen_op_float_cvtl_d(); |
| 6082 | - GEN_STORE_FTN_FREG(fd, DT2); | 6063 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6083 | opn = "cvt.l.d"; | 6064 | opn = "cvt.l.d"; |
| 6084 | break; | 6065 | break; |
| 6085 | case FOP(32, 20): | 6066 | case FOP(32, 20): |
| 6086 | - GEN_LOAD_FREG_FTN(WT0, fs); | 6067 | + gen_load_fpr32(fpu32_T[0], fs); |
| 6087 | gen_op_float_cvts_w(); | 6068 | gen_op_float_cvts_w(); |
| 6088 | - GEN_STORE_FTN_FREG(fd, WT2); | 6069 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6089 | opn = "cvt.s.w"; | 6070 | opn = "cvt.s.w"; |
| 6090 | break; | 6071 | break; |
| 6091 | case FOP(33, 20): | 6072 | case FOP(33, 20): |
| 6092 | check_cp1_registers(ctx, fd); | 6073 | check_cp1_registers(ctx, fd); |
| 6093 | - GEN_LOAD_FREG_FTN(WT0, fs); | 6074 | + gen_load_fpr32(fpu32_T[0], fs); |
| 6094 | gen_op_float_cvtd_w(); | 6075 | gen_op_float_cvtd_w(); |
| 6095 | - GEN_STORE_FTN_FREG(fd, DT2); | 6076 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6096 | opn = "cvt.d.w"; | 6077 | opn = "cvt.d.w"; |
| 6097 | break; | 6078 | break; |
| 6098 | case FOP(32, 21): | 6079 | case FOP(32, 21): |
| 6099 | check_cp1_64bitmode(ctx); | 6080 | check_cp1_64bitmode(ctx); |
| 6100 | - GEN_LOAD_FREG_FTN(DT0, fs); | 6081 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6101 | gen_op_float_cvts_l(); | 6082 | gen_op_float_cvts_l(); |
| 6102 | - GEN_STORE_FTN_FREG(fd, WT2); | 6083 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6103 | opn = "cvt.s.l"; | 6084 | opn = "cvt.s.l"; |
| 6104 | break; | 6085 | break; |
| 6105 | case FOP(33, 21): | 6086 | case FOP(33, 21): |
| 6106 | check_cp1_64bitmode(ctx); | 6087 | check_cp1_64bitmode(ctx); |
| 6107 | - GEN_LOAD_FREG_FTN(DT0, fs); | 6088 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6108 | gen_op_float_cvtd_l(); | 6089 | gen_op_float_cvtd_l(); |
| 6109 | - GEN_STORE_FTN_FREG(fd, DT2); | 6090 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6110 | opn = "cvt.d.l"; | 6091 | opn = "cvt.d.l"; |
| 6111 | break; | 6092 | break; |
| 6112 | case FOP(38, 20): | 6093 | case FOP(38, 20): |
| 6113 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_cvtps_pw(); | 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 | opn = "cvt.ps.pw"; | 6100 | opn = "cvt.ps.pw"; |
| 6120 | break; | 6101 | break; |
| 6121 | case FOP(0, 22): | 6102 | case FOP(0, 22): |
| 6122 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_add_ps(); | 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 | opn = "add.ps"; | 6111 | opn = "add.ps"; |
| 6131 | break; | 6112 | break; |
| 6132 | case FOP(1, 22): | 6113 | case FOP(1, 22): |
| 6133 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_sub_ps(); | 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 | opn = "sub.ps"; | 6122 | opn = "sub.ps"; |
| 6142 | break; | 6123 | break; |
| 6143 | case FOP(2, 22): | 6124 | case FOP(2, 22): |
| 6144 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_mul_ps(); | 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 | opn = "mul.ps"; | 6133 | opn = "mul.ps"; |
| 6153 | break; | 6134 | break; |
| 6154 | case FOP(5, 22): | 6135 | case FOP(5, 22): |
| 6155 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_abs_ps(); | 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 | opn = "abs.ps"; | 6142 | opn = "abs.ps"; |
| 6162 | break; | 6143 | break; |
| 6163 | case FOP(6, 22): | 6144 | case FOP(6, 22): |
| 6164 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_mov_ps(); | 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 | opn = "mov.ps"; | 6151 | opn = "mov.ps"; |
| 6171 | break; | 6152 | break; |
| 6172 | case FOP(7, 22): | 6153 | case FOP(7, 22): |
| 6173 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_chs_ps(); | 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 | opn = "neg.ps"; | 6160 | opn = "neg.ps"; |
| 6180 | break; | 6161 | break; |
| 6181 | case FOP(17, 22): | 6162 | case FOP(17, 22): |
| 6182 | check_cp1_64bitmode(ctx); | 6163 | check_cp1_64bitmode(ctx); |
| 6183 | gen_load_gpr(cpu_T[0], ft); | 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 | if (ft & 0x1) | 6169 | if (ft & 0x1) |
| 6189 | gen_op_float_movt_ps ((ft >> 2) & 0x7); | 6170 | gen_op_float_movt_ps ((ft >> 2) & 0x7); |
| 6190 | else | 6171 | else |
| 6191 | gen_op_float_movf_ps ((ft >> 2) & 0x7); | 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 | opn = "movcf.ps"; | 6175 | opn = "movcf.ps"; |
| 6195 | break; | 6176 | break; |
| 6196 | case FOP(18, 22): | 6177 | case FOP(18, 22): |
| 6197 | check_cp1_64bitmode(ctx); | 6178 | check_cp1_64bitmode(ctx); |
| 6198 | gen_load_gpr(cpu_T[0], ft); | 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 | gen_op_float_movz_ps(); | 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 | opn = "movz.ps"; | 6187 | opn = "movz.ps"; |
| 6207 | break; | 6188 | break; |
| 6208 | case FOP(19, 22): | 6189 | case FOP(19, 22): |
| 6209 | check_cp1_64bitmode(ctx); | 6190 | check_cp1_64bitmode(ctx); |
| 6210 | gen_load_gpr(cpu_T[0], ft); | 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 | gen_op_float_movn_ps(); | 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 | opn = "movn.ps"; | 6199 | opn = "movn.ps"; |
| 6219 | break; | 6200 | break; |
| 6220 | case FOP(24, 22): | 6201 | case FOP(24, 22): |
| 6221 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_addr_ps(); | 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 | opn = "addr.ps"; | 6210 | opn = "addr.ps"; |
| 6230 | break; | 6211 | break; |
| 6231 | case FOP(26, 22): | 6212 | case FOP(26, 22): |
| 6232 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_mulr_ps(); | 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 | opn = "mulr.ps"; | 6221 | opn = "mulr.ps"; |
| 6241 | break; | 6222 | break; |
| 6242 | case FOP(28, 22): | 6223 | case FOP(28, 22): |
| 6243 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_recip2_ps(); | 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 | opn = "recip2.ps"; | 6232 | opn = "recip2.ps"; |
| 6252 | break; | 6233 | break; |
| 6253 | case FOP(29, 22): | 6234 | case FOP(29, 22): |
| 6254 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_recip1_ps(); | 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 | opn = "recip1.ps"; | 6241 | opn = "recip1.ps"; |
| 6261 | break; | 6242 | break; |
| 6262 | case FOP(30, 22): | 6243 | case FOP(30, 22): |
| 6263 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_rsqrt1_ps(); | 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 | opn = "rsqrt1.ps"; | 6250 | opn = "rsqrt1.ps"; |
| 6270 | break; | 6251 | break; |
| 6271 | case FOP(31, 22): | 6252 | case FOP(31, 22): |
| 6272 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_rsqrt2_ps(); | 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 | opn = "rsqrt2.ps"; | 6261 | opn = "rsqrt2.ps"; |
| 6281 | break; | 6262 | break; |
| 6282 | case FOP(32, 22): | 6263 | case FOP(32, 22): |
| 6283 | check_cp1_64bitmode(ctx); | 6264 | check_cp1_64bitmode(ctx); |
| 6284 | - GEN_LOAD_FREG_FTN(WTH0, fs); | 6265 | + gen_load_fpr32h(fpu32h_T[0], fs); |
| 6285 | gen_op_float_cvts_pu(); | 6266 | gen_op_float_cvts_pu(); |
| 6286 | - GEN_STORE_FTN_FREG(fd, WT2); | 6267 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6287 | opn = "cvt.s.pu"; | 6268 | opn = "cvt.s.pu"; |
| 6288 | break; | 6269 | break; |
| 6289 | case FOP(36, 22): | 6270 | case FOP(36, 22): |
| 6290 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_cvtpw_ps(); | 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 | opn = "cvt.pw.ps"; | 6277 | opn = "cvt.pw.ps"; |
| 6297 | break; | 6278 | break; |
| 6298 | case FOP(40, 22): | 6279 | case FOP(40, 22): |
| 6299 | check_cp1_64bitmode(ctx); | 6280 | check_cp1_64bitmode(ctx); |
| 6300 | - GEN_LOAD_FREG_FTN(WT0, fs); | 6281 | + gen_load_fpr32(fpu32_T[0], fs); |
| 6301 | gen_op_float_cvts_pl(); | 6282 | gen_op_float_cvts_pl(); |
| 6302 | - GEN_STORE_FTN_FREG(fd, WT2); | 6283 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6303 | opn = "cvt.s.pl"; | 6284 | opn = "cvt.s.pl"; |
| 6304 | break; | 6285 | break; |
| 6305 | case FOP(44, 22): | 6286 | case FOP(44, 22): |
| 6306 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_pll_ps(); | 6290 | gen_op_float_pll_ps(); |
| 6310 | - GEN_STORE_FTN_FREG(fd, DT2); | 6291 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6311 | opn = "pll.ps"; | 6292 | opn = "pll.ps"; |
| 6312 | break; | 6293 | break; |
| 6313 | case FOP(45, 22): | 6294 | case FOP(45, 22): |
| 6314 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_plu_ps(); | 6298 | gen_op_float_plu_ps(); |
| 6318 | - GEN_STORE_FTN_FREG(fd, DT2); | 6299 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6319 | opn = "plu.ps"; | 6300 | opn = "plu.ps"; |
| 6320 | break; | 6301 | break; |
| 6321 | case FOP(46, 22): | 6302 | case FOP(46, 22): |
| 6322 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_pul_ps(); | 6306 | gen_op_float_pul_ps(); |
| 6326 | - GEN_STORE_FTN_FREG(fd, DT2); | 6307 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6327 | opn = "pul.ps"; | 6308 | opn = "pul.ps"; |
| 6328 | break; | 6309 | break; |
| 6329 | case FOP(47, 22): | 6310 | case FOP(47, 22): |
| 6330 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_puu_ps(); | 6314 | gen_op_float_puu_ps(); |
| 6334 | - GEN_STORE_FTN_FREG(fd, DT2); | 6315 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6335 | opn = "puu.ps"; | 6316 | opn = "puu.ps"; |
| 6336 | break; | 6317 | break; |
| 6337 | case FOP(48, 22): | 6318 | case FOP(48, 22): |
| @@ -6351,10 +6332,10 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | @@ -6351,10 +6332,10 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, | ||
| 6351 | case FOP(62, 22): | 6332 | case FOP(62, 22): |
| 6352 | case FOP(63, 22): | 6333 | case FOP(63, 22): |
| 6353 | check_cp1_64bitmode(ctx); | 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 | if (ctx->opcode & (1 << 6)) { | 6339 | if (ctx->opcode & (1 << 6)) { |
| 6359 | gen_cmpabs_ps(func-48, cc); | 6340 | gen_cmpabs_ps(func-48, cc); |
| 6360 | opn = condnames_abs[func-48]; | 6341 | opn = condnames_abs[func-48]; |
| @@ -6402,41 +6383,41 @@ static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, | @@ -6402,41 +6383,41 @@ static void gen_flt3_ldst (DisasContext *ctx, uint32_t opc, | ||
| 6402 | switch (opc) { | 6383 | switch (opc) { |
| 6403 | case OPC_LWXC1: | 6384 | case OPC_LWXC1: |
| 6404 | check_cop1x(ctx); | 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 | opn = "lwxc1"; | 6388 | opn = "lwxc1"; |
| 6408 | break; | 6389 | break; |
| 6409 | case OPC_LDXC1: | 6390 | case OPC_LDXC1: |
| 6410 | check_cop1x(ctx); | 6391 | check_cop1x(ctx); |
| 6411 | check_cp1_registers(ctx, fd); | 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 | opn = "ldxc1"; | 6395 | opn = "ldxc1"; |
| 6415 | break; | 6396 | break; |
| 6416 | case OPC_LUXC1: | 6397 | case OPC_LUXC1: |
| 6417 | check_cp1_64bitmode(ctx); | 6398 | check_cp1_64bitmode(ctx); |
| 6418 | op_ldst(luxc1); | 6399 | op_ldst(luxc1); |
| 6419 | - GEN_STORE_FTN_FREG(fd, DT0); | 6400 | + gen_store_fpr64(ctx, fpu64_T[0], fd); |
| 6420 | opn = "luxc1"; | 6401 | opn = "luxc1"; |
| 6421 | break; | 6402 | break; |
| 6422 | case OPC_SWXC1: | 6403 | case OPC_SWXC1: |
| 6423 | check_cop1x(ctx); | 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 | opn = "swxc1"; | 6407 | opn = "swxc1"; |
| 6427 | store = 1; | 6408 | store = 1; |
| 6428 | break; | 6409 | break; |
| 6429 | case OPC_SDXC1: | 6410 | case OPC_SDXC1: |
| 6430 | check_cop1x(ctx); | 6411 | check_cop1x(ctx); |
| 6431 | check_cp1_registers(ctx, fs); | 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 | opn = "sdxc1"; | 6415 | opn = "sdxc1"; |
| 6435 | store = 1; | 6416 | store = 1; |
| 6436 | break; | 6417 | break; |
| 6437 | case OPC_SUXC1: | 6418 | case OPC_SUXC1: |
| 6438 | check_cp1_64bitmode(ctx); | 6419 | check_cp1_64bitmode(ctx); |
| 6439 | - GEN_LOAD_FREG_FTN(DT0, fs); | 6420 | + gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6440 | op_ldst(suxc1); | 6421 | op_ldst(suxc1); |
| 6441 | opn = "suxc1"; | 6422 | opn = "suxc1"; |
| 6442 | store = 1; | 6423 | store = 1; |
| @@ -6459,138 +6440,138 @@ static void gen_flt3_arith (DisasContext *ctx, uint32_t opc, | @@ -6459,138 +6440,138 @@ static void gen_flt3_arith (DisasContext *ctx, uint32_t opc, | ||
| 6459 | case OPC_ALNV_PS: | 6440 | case OPC_ALNV_PS: |
| 6460 | check_cp1_64bitmode(ctx); | 6441 | check_cp1_64bitmode(ctx); |
| 6461 | gen_load_gpr(cpu_T[0], fr); | 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 | gen_op_float_alnv_ps(); | 6445 | gen_op_float_alnv_ps(); |
| 6465 | - GEN_STORE_FTN_FREG(fd, DT2); | 6446 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6466 | opn = "alnv.ps"; | 6447 | opn = "alnv.ps"; |
| 6467 | break; | 6448 | break; |
| 6468 | case OPC_MADD_S: | 6449 | case OPC_MADD_S: |
| 6469 | check_cop1x(ctx); | 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 | gen_op_float_muladd_s(); | 6454 | gen_op_float_muladd_s(); |
| 6474 | - GEN_STORE_FTN_FREG(fd, WT2); | 6455 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6475 | opn = "madd.s"; | 6456 | opn = "madd.s"; |
| 6476 | break; | 6457 | break; |
| 6477 | case OPC_MADD_D: | 6458 | case OPC_MADD_D: |
| 6478 | check_cop1x(ctx); | 6459 | check_cop1x(ctx); |
| 6479 | check_cp1_registers(ctx, fd | fs | ft | fr); | 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 | gen_op_float_muladd_d(); | 6464 | gen_op_float_muladd_d(); |
| 6484 | - GEN_STORE_FTN_FREG(fd, DT2); | 6465 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6485 | opn = "madd.d"; | 6466 | opn = "madd.d"; |
| 6486 | break; | 6467 | break; |
| 6487 | case OPC_MADD_PS: | 6468 | case OPC_MADD_PS: |
| 6488 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_muladd_ps(); | 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 | opn = "madd.ps"; | 6479 | opn = "madd.ps"; |
| 6499 | break; | 6480 | break; |
| 6500 | case OPC_MSUB_S: | 6481 | case OPC_MSUB_S: |
| 6501 | check_cop1x(ctx); | 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 | gen_op_float_mulsub_s(); | 6486 | gen_op_float_mulsub_s(); |
| 6506 | - GEN_STORE_FTN_FREG(fd, WT2); | 6487 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6507 | opn = "msub.s"; | 6488 | opn = "msub.s"; |
| 6508 | break; | 6489 | break; |
| 6509 | case OPC_MSUB_D: | 6490 | case OPC_MSUB_D: |
| 6510 | check_cop1x(ctx); | 6491 | check_cop1x(ctx); |
| 6511 | check_cp1_registers(ctx, fd | fs | ft | fr); | 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 | gen_op_float_mulsub_d(); | 6496 | gen_op_float_mulsub_d(); |
| 6516 | - GEN_STORE_FTN_FREG(fd, DT2); | 6497 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6517 | opn = "msub.d"; | 6498 | opn = "msub.d"; |
| 6518 | break; | 6499 | break; |
| 6519 | case OPC_MSUB_PS: | 6500 | case OPC_MSUB_PS: |
| 6520 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_mulsub_ps(); | 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 | opn = "msub.ps"; | 6511 | opn = "msub.ps"; |
| 6531 | break; | 6512 | break; |
| 6532 | case OPC_NMADD_S: | 6513 | case OPC_NMADD_S: |
| 6533 | check_cop1x(ctx); | 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 | gen_op_float_nmuladd_s(); | 6518 | gen_op_float_nmuladd_s(); |
| 6538 | - GEN_STORE_FTN_FREG(fd, WT2); | 6519 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6539 | opn = "nmadd.s"; | 6520 | opn = "nmadd.s"; |
| 6540 | break; | 6521 | break; |
| 6541 | case OPC_NMADD_D: | 6522 | case OPC_NMADD_D: |
| 6542 | check_cop1x(ctx); | 6523 | check_cop1x(ctx); |
| 6543 | check_cp1_registers(ctx, fd | fs | ft | fr); | 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 | gen_op_float_nmuladd_d(); | 6528 | gen_op_float_nmuladd_d(); |
| 6548 | - GEN_STORE_FTN_FREG(fd, DT2); | 6529 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6549 | opn = "nmadd.d"; | 6530 | opn = "nmadd.d"; |
| 6550 | break; | 6531 | break; |
| 6551 | case OPC_NMADD_PS: | 6532 | case OPC_NMADD_PS: |
| 6552 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_nmuladd_ps(); | 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 | opn = "nmadd.ps"; | 6543 | opn = "nmadd.ps"; |
| 6563 | break; | 6544 | break; |
| 6564 | case OPC_NMSUB_S: | 6545 | case OPC_NMSUB_S: |
| 6565 | check_cop1x(ctx); | 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 | gen_op_float_nmulsub_s(); | 6550 | gen_op_float_nmulsub_s(); |
| 6570 | - GEN_STORE_FTN_FREG(fd, WT2); | 6551 | + gen_store_fpr32(fpu32_T[2], fd); |
| 6571 | opn = "nmsub.s"; | 6552 | opn = "nmsub.s"; |
| 6572 | break; | 6553 | break; |
| 6573 | case OPC_NMSUB_D: | 6554 | case OPC_NMSUB_D: |
| 6574 | check_cop1x(ctx); | 6555 | check_cop1x(ctx); |
| 6575 | check_cp1_registers(ctx, fd | fs | ft | fr); | 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 | gen_op_float_nmulsub_d(); | 6560 | gen_op_float_nmulsub_d(); |
| 6580 | - GEN_STORE_FTN_FREG(fd, DT2); | 6561 | + gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6581 | opn = "nmsub.d"; | 6562 | opn = "nmsub.d"; |
| 6582 | break; | 6563 | break; |
| 6583 | case OPC_NMSUB_PS: | 6564 | case OPC_NMSUB_PS: |
| 6584 | check_cp1_64bitmode(ctx); | 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 | gen_op_float_nmulsub_ps(); | 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 | opn = "nmsub.ps"; | 6575 | opn = "nmsub.ps"; |
| 6595 | break; | 6576 | break; |
| 6596 | default: | 6577 | default: |
| @@ -7294,6 +7275,9 @@ gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, | @@ -7294,6 +7275,9 @@ gen_intermediate_code_internal (CPUState *env, TranslationBlock *tb, | ||
| 7294 | if (gen_opc_ptr >= gen_opc_end) | 7275 | if (gen_opc_ptr >= gen_opc_end) |
| 7295 | break; | 7276 | break; |
| 7296 | 7277 | ||
| 7278 | + if (gen_opc_ptr >= gen_opc_end) | ||
| 7279 | + break; | ||
| 7280 | + | ||
| 7297 | #if defined (MIPS_SINGLE_STEP) | 7281 | #if defined (MIPS_SINGLE_STEP) |
| 7298 | break; | 7282 | break; |
| 7299 | #endif | 7283 | #endif |
| @@ -7487,6 +7471,10 @@ static void mips_tcg_init(void) | @@ -7487,6 +7471,10 @@ static void mips_tcg_init(void) | ||
| 7487 | TCG_AREG0, | 7471 | TCG_AREG0, |
| 7488 | offsetof(CPUState, current_tc_hi), | 7472 | offsetof(CPUState, current_tc_hi), |
| 7489 | "current_tc_hi"); | 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 | #if TARGET_LONG_BITS > HOST_LONG_BITS | 7478 | #if TARGET_LONG_BITS > HOST_LONG_BITS |
| 7491 | cpu_T[0] = tcg_global_mem_new(TCG_TYPE_TL, | 7479 | cpu_T[0] = tcg_global_mem_new(TCG_TYPE_TL, |
| 7492 | TCG_AREG0, offsetof(CPUState, t0), "T0"); | 7480 | TCG_AREG0, offsetof(CPUState, t0), "T0"); |
| @@ -7502,6 +7490,16 @@ static void mips_tcg_init(void) | @@ -7502,6 +7490,16 @@ static void mips_tcg_init(void) | ||
| 7502 | #define DEF_HELPER(ret, name, params) tcg_register_helper(name, #name); | 7490 | #define DEF_HELPER(ret, name, params) tcg_register_helper(name, #name); |
| 7503 | #include "helper.h" | 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 | inited = 1; | 7503 | inited = 1; |
| 7506 | } | 7504 | } |
| 7507 | 7505 |