Commit 5d0fc900d35e9f272c79d199e5854be8301dccf3
1 parent
0d1d0094
Call most FP helpers without deroute through op.c
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4734 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
154 additions
and
364 deletions
target-mips/exec.h
| ... | ... | @@ -103,79 +103,6 @@ void cpu_mips_update_irq (CPUState *env); |
| 103 | 103 | void cpu_mips_clock_init (CPUState *env); |
| 104 | 104 | void cpu_mips_tlb_flush (CPUState *env, int flush_global); |
| 105 | 105 | |
| 106 | -#define FOP_PROTO(op) \ | |
| 107 | -void do_float_ ## op ## _s(void); \ | |
| 108 | -void do_float_ ## op ## _d(void); | |
| 109 | -FOP_PROTO(roundl) | |
| 110 | -FOP_PROTO(roundw) | |
| 111 | -FOP_PROTO(truncl) | |
| 112 | -FOP_PROTO(truncw) | |
| 113 | -FOP_PROTO(ceill) | |
| 114 | -FOP_PROTO(ceilw) | |
| 115 | -FOP_PROTO(floorl) | |
| 116 | -FOP_PROTO(floorw) | |
| 117 | -FOP_PROTO(rsqrt) | |
| 118 | -FOP_PROTO(recip) | |
| 119 | -#undef FOP_PROTO | |
| 120 | - | |
| 121 | -#define FOP_PROTO(op) \ | |
| 122 | -void do_float_ ## op ## _s(void); \ | |
| 123 | -void do_float_ ## op ## _d(void); \ | |
| 124 | -void do_float_ ## op ## _ps(void); | |
| 125 | -FOP_PROTO(add) | |
| 126 | -FOP_PROTO(sub) | |
| 127 | -FOP_PROTO(mul) | |
| 128 | -FOP_PROTO(div) | |
| 129 | -FOP_PROTO(recip1) | |
| 130 | -FOP_PROTO(recip2) | |
| 131 | -FOP_PROTO(rsqrt1) | |
| 132 | -FOP_PROTO(rsqrt2) | |
| 133 | -#undef FOP_PROTO | |
| 134 | - | |
| 135 | -void do_float_cvtd_s(void); | |
| 136 | -void do_float_cvtd_w(void); | |
| 137 | -void do_float_cvtd_l(void); | |
| 138 | -void do_float_cvtl_d(void); | |
| 139 | -void do_float_cvtl_s(void); | |
| 140 | -void do_float_cvtps_pw(void); | |
| 141 | -void do_float_cvtpw_ps(void); | |
| 142 | -void do_float_cvts_d(void); | |
| 143 | -void do_float_cvts_w(void); | |
| 144 | -void do_float_cvts_l(void); | |
| 145 | -void do_float_cvts_pl(void); | |
| 146 | -void do_float_cvts_pu(void); | |
| 147 | -void do_float_cvtw_s(void); | |
| 148 | -void do_float_cvtw_d(void); | |
| 149 | - | |
| 150 | -void do_float_addr_ps(void); | |
| 151 | -void do_float_mulr_ps(void); | |
| 152 | - | |
| 153 | -#define FOP_PROTO(op) \ | |
| 154 | -void do_cmp_d_ ## op(long cc); \ | |
| 155 | -void do_cmpabs_d_ ## op(long cc); \ | |
| 156 | -void do_cmp_s_ ## op(long cc); \ | |
| 157 | -void do_cmpabs_s_ ## op(long cc); \ | |
| 158 | -void do_cmp_ps_ ## op(long cc); \ | |
| 159 | -void do_cmpabs_ps_ ## op(long cc); | |
| 160 | - | |
| 161 | -FOP_PROTO(f) | |
| 162 | -FOP_PROTO(un) | |
| 163 | -FOP_PROTO(eq) | |
| 164 | -FOP_PROTO(ueq) | |
| 165 | -FOP_PROTO(olt) | |
| 166 | -FOP_PROTO(ult) | |
| 167 | -FOP_PROTO(ole) | |
| 168 | -FOP_PROTO(ule) | |
| 169 | -FOP_PROTO(sf) | |
| 170 | -FOP_PROTO(ngle) | |
| 171 | -FOP_PROTO(seq) | |
| 172 | -FOP_PROTO(ngl) | |
| 173 | -FOP_PROTO(lt) | |
| 174 | -FOP_PROTO(nge) | |
| 175 | -FOP_PROTO(le) | |
| 176 | -FOP_PROTO(ngt) | |
| 177 | -#undef FOP_PROTO | |
| 178 | - | |
| 179 | 106 | static always_inline void env_to_regs(void) |
| 180 | 107 | { |
| 181 | 108 | } | ... | ... |
target-mips/helper.h
| ... | ... | @@ -130,3 +130,75 @@ DEF_HELPER(void, do_yield, (void)) |
| 130 | 130 | /* CP1 functions */ |
| 131 | 131 | DEF_HELPER(void, do_cfc1, (uint32_t reg)) |
| 132 | 132 | DEF_HELPER(void, do_ctc1, (uint32_t reg)) |
| 133 | + | |
| 134 | +DEF_HELPER(void, do_float_cvtd_s, (void)) | |
| 135 | +DEF_HELPER(void, do_float_cvtd_w, (void)) | |
| 136 | +DEF_HELPER(void, do_float_cvtd_l, (void)) | |
| 137 | +DEF_HELPER(void, do_float_cvtl_d, (void)) | |
| 138 | +DEF_HELPER(void, do_float_cvtl_s, (void)) | |
| 139 | +DEF_HELPER(void, do_float_cvtps_pw, (void)) | |
| 140 | +DEF_HELPER(void, do_float_cvtpw_ps, (void)) | |
| 141 | +DEF_HELPER(void, do_float_cvts_d, (void)) | |
| 142 | +DEF_HELPER(void, do_float_cvts_w, (void)) | |
| 143 | +DEF_HELPER(void, do_float_cvts_l, (void)) | |
| 144 | +DEF_HELPER(void, do_float_cvts_pl, (void)) | |
| 145 | +DEF_HELPER(void, do_float_cvts_pu, (void)) | |
| 146 | +DEF_HELPER(void, do_float_cvtw_s, (void)) | |
| 147 | +DEF_HELPER(void, do_float_cvtw_d, (void)) | |
| 148 | + | |
| 149 | +DEF_HELPER(void, do_float_addr_ps, (void)) | |
| 150 | +DEF_HELPER(void, do_float_mulr_ps, (void)) | |
| 151 | + | |
| 152 | +#define FOP_PROTO(op) \ | |
| 153 | +DEF_HELPER(void, do_float_ ## op ## _s, (void)) \ | |
| 154 | +DEF_HELPER(void, do_float_ ## op ## _d, (void)) | |
| 155 | +FOP_PROTO(roundl) | |
| 156 | +FOP_PROTO(roundw) | |
| 157 | +FOP_PROTO(truncl) | |
| 158 | +FOP_PROTO(truncw) | |
| 159 | +FOP_PROTO(ceill) | |
| 160 | +FOP_PROTO(ceilw) | |
| 161 | +FOP_PROTO(floorl) | |
| 162 | +FOP_PROTO(floorw) | |
| 163 | +FOP_PROTO(rsqrt) | |
| 164 | +FOP_PROTO(recip) | |
| 165 | +#undef FOP_PROTO | |
| 166 | + | |
| 167 | +#define FOP_PROTO(op) \ | |
| 168 | +DEF_HELPER(void, do_float_ ## op ## _s, (void)) \ | |
| 169 | +DEF_HELPER(void, do_float_ ## op ## _d, (void)) \ | |
| 170 | +DEF_HELPER(void, do_float_ ## op ## _ps, (void)) | |
| 171 | +FOP_PROTO(add) | |
| 172 | +FOP_PROTO(sub) | |
| 173 | +FOP_PROTO(mul) | |
| 174 | +FOP_PROTO(div) | |
| 175 | +FOP_PROTO(recip1) | |
| 176 | +FOP_PROTO(recip2) | |
| 177 | +FOP_PROTO(rsqrt1) | |
| 178 | +FOP_PROTO(rsqrt2) | |
| 179 | +#undef FOP_PROTO | |
| 180 | + | |
| 181 | +#define FOP_PROTO(op) \ | |
| 182 | +DEF_HELPER(void, do_cmp_d_ ## op, (long cc)) \ | |
| 183 | +DEF_HELPER(void, do_cmpabs_d_ ## op, (long cc)) \ | |
| 184 | +DEF_HELPER(void, do_cmp_s_ ## op, (long cc)) \ | |
| 185 | +DEF_HELPER(void, do_cmpabs_s_ ## op, (long cc)) \ | |
| 186 | +DEF_HELPER(void, do_cmp_ps_ ## op, (long cc)) \ | |
| 187 | +DEF_HELPER(void, do_cmpabs_ps_ ## op, (long cc)) | |
| 188 | +FOP_PROTO(f) | |
| 189 | +FOP_PROTO(un) | |
| 190 | +FOP_PROTO(eq) | |
| 191 | +FOP_PROTO(ueq) | |
| 192 | +FOP_PROTO(olt) | |
| 193 | +FOP_PROTO(ult) | |
| 194 | +FOP_PROTO(ole) | |
| 195 | +FOP_PROTO(ule) | |
| 196 | +FOP_PROTO(sf) | |
| 197 | +FOP_PROTO(ngle) | |
| 198 | +FOP_PROTO(seq) | |
| 199 | +FOP_PROTO(ngl) | |
| 200 | +FOP_PROTO(lt) | |
| 201 | +FOP_PROTO(nge) | |
| 202 | +FOP_PROTO(le) | |
| 203 | +FOP_PROTO(ngt) | |
| 204 | +#undef FOP_PROTO | ... | ... |
target-mips/op.c
| ... | ... | @@ -377,36 +377,6 @@ void op_dmultu (void) |
| 377 | 377 | |
| 378 | 378 | #define FLOAT_OP(name, p) void OPPROTO op_float_##name##_##p(void) |
| 379 | 379 | |
| 380 | -FLOAT_OP(cvtd, s) | |
| 381 | -{ | |
| 382 | - CALL_FROM_TB0(do_float_cvtd_s); | |
| 383 | - DEBUG_FPU_STATE(); | |
| 384 | - FORCE_RET(); | |
| 385 | -} | |
| 386 | -FLOAT_OP(cvtd, w) | |
| 387 | -{ | |
| 388 | - CALL_FROM_TB0(do_float_cvtd_w); | |
| 389 | - DEBUG_FPU_STATE(); | |
| 390 | - FORCE_RET(); | |
| 391 | -} | |
| 392 | -FLOAT_OP(cvtd, l) | |
| 393 | -{ | |
| 394 | - CALL_FROM_TB0(do_float_cvtd_l); | |
| 395 | - DEBUG_FPU_STATE(); | |
| 396 | - FORCE_RET(); | |
| 397 | -} | |
| 398 | -FLOAT_OP(cvtl, d) | |
| 399 | -{ | |
| 400 | - CALL_FROM_TB0(do_float_cvtl_d); | |
| 401 | - DEBUG_FPU_STATE(); | |
| 402 | - FORCE_RET(); | |
| 403 | -} | |
| 404 | -FLOAT_OP(cvtl, s) | |
| 405 | -{ | |
| 406 | - CALL_FROM_TB0(do_float_cvtl_s); | |
| 407 | - DEBUG_FPU_STATE(); | |
| 408 | - FORCE_RET(); | |
| 409 | -} | |
| 410 | 380 | FLOAT_OP(cvtps, s) |
| 411 | 381 | { |
| 412 | 382 | WT2 = WT0; |
| ... | ... | @@ -414,60 +384,6 @@ FLOAT_OP(cvtps, s) |
| 414 | 384 | DEBUG_FPU_STATE(); |
| 415 | 385 | FORCE_RET(); |
| 416 | 386 | } |
| 417 | -FLOAT_OP(cvtps, pw) | |
| 418 | -{ | |
| 419 | - CALL_FROM_TB0(do_float_cvtps_pw); | |
| 420 | - DEBUG_FPU_STATE(); | |
| 421 | - FORCE_RET(); | |
| 422 | -} | |
| 423 | -FLOAT_OP(cvtpw, ps) | |
| 424 | -{ | |
| 425 | - CALL_FROM_TB0(do_float_cvtpw_ps); | |
| 426 | - DEBUG_FPU_STATE(); | |
| 427 | - FORCE_RET(); | |
| 428 | -} | |
| 429 | -FLOAT_OP(cvts, d) | |
| 430 | -{ | |
| 431 | - CALL_FROM_TB0(do_float_cvts_d); | |
| 432 | - DEBUG_FPU_STATE(); | |
| 433 | - FORCE_RET(); | |
| 434 | -} | |
| 435 | -FLOAT_OP(cvts, w) | |
| 436 | -{ | |
| 437 | - CALL_FROM_TB0(do_float_cvts_w); | |
| 438 | - DEBUG_FPU_STATE(); | |
| 439 | - FORCE_RET(); | |
| 440 | -} | |
| 441 | -FLOAT_OP(cvts, l) | |
| 442 | -{ | |
| 443 | - CALL_FROM_TB0(do_float_cvts_l); | |
| 444 | - DEBUG_FPU_STATE(); | |
| 445 | - FORCE_RET(); | |
| 446 | -} | |
| 447 | -FLOAT_OP(cvts, pl) | |
| 448 | -{ | |
| 449 | - CALL_FROM_TB0(do_float_cvts_pl); | |
| 450 | - DEBUG_FPU_STATE(); | |
| 451 | - FORCE_RET(); | |
| 452 | -} | |
| 453 | -FLOAT_OP(cvts, pu) | |
| 454 | -{ | |
| 455 | - CALL_FROM_TB0(do_float_cvts_pu); | |
| 456 | - DEBUG_FPU_STATE(); | |
| 457 | - FORCE_RET(); | |
| 458 | -} | |
| 459 | -FLOAT_OP(cvtw, s) | |
| 460 | -{ | |
| 461 | - CALL_FROM_TB0(do_float_cvtw_s); | |
| 462 | - DEBUG_FPU_STATE(); | |
| 463 | - FORCE_RET(); | |
| 464 | -} | |
| 465 | -FLOAT_OP(cvtw, d) | |
| 466 | -{ | |
| 467 | - CALL_FROM_TB0(do_float_cvtw_d); | |
| 468 | - DEBUG_FPU_STATE(); | |
| 469 | - FORCE_RET(); | |
| 470 | -} | |
| 471 | 387 | |
| 472 | 388 | FLOAT_OP(pll, ps) |
| 473 | 389 | { |
| ... | ... | @@ -494,35 +410,6 @@ FLOAT_OP(puu, ps) |
| 494 | 410 | FORCE_RET(); |
| 495 | 411 | } |
| 496 | 412 | |
| 497 | -#define FLOAT_ROUNDOP(op, ttype, stype) \ | |
| 498 | -FLOAT_OP(op ## ttype, stype) \ | |
| 499 | -{ \ | |
| 500 | - CALL_FROM_TB0(do_float_ ## op ## ttype ## _ ## stype); \ | |
| 501 | - DEBUG_FPU_STATE(); \ | |
| 502 | - FORCE_RET(); \ | |
| 503 | -} | |
| 504 | - | |
| 505 | -FLOAT_ROUNDOP(round, l, d) | |
| 506 | -FLOAT_ROUNDOP(round, l, s) | |
| 507 | -FLOAT_ROUNDOP(round, w, d) | |
| 508 | -FLOAT_ROUNDOP(round, w, s) | |
| 509 | - | |
| 510 | -FLOAT_ROUNDOP(trunc, l, d) | |
| 511 | -FLOAT_ROUNDOP(trunc, l, s) | |
| 512 | -FLOAT_ROUNDOP(trunc, w, d) | |
| 513 | -FLOAT_ROUNDOP(trunc, w, s) | |
| 514 | - | |
| 515 | -FLOAT_ROUNDOP(ceil, l, d) | |
| 516 | -FLOAT_ROUNDOP(ceil, l, s) | |
| 517 | -FLOAT_ROUNDOP(ceil, w, d) | |
| 518 | -FLOAT_ROUNDOP(ceil, w, s) | |
| 519 | - | |
| 520 | -FLOAT_ROUNDOP(floor, l, d) | |
| 521 | -FLOAT_ROUNDOP(floor, l, s) | |
| 522 | -FLOAT_ROUNDOP(floor, w, d) | |
| 523 | -FLOAT_ROUNDOP(floor, w, s) | |
| 524 | -#undef FLOAR_ROUNDOP | |
| 525 | - | |
| 526 | 413 | FLOAT_OP(movf, d) |
| 527 | 414 | { |
| 528 | 415 | if (!(env->fpu->fcr31 & PARAM1)) |
| ... | ... | @@ -618,66 +505,6 @@ FLOAT_OP(movn, ps) |
| 618 | 505 | FORCE_RET(); |
| 619 | 506 | } |
| 620 | 507 | |
| 621 | -/* operations calling helpers, for s, d and ps */ | |
| 622 | -#define FLOAT_HOP(name) \ | |
| 623 | -FLOAT_OP(name, d) \ | |
| 624 | -{ \ | |
| 625 | - CALL_FROM_TB0(do_float_ ## name ## _d); \ | |
| 626 | - DEBUG_FPU_STATE(); \ | |
| 627 | - FORCE_RET(); \ | |
| 628 | -} \ | |
| 629 | -FLOAT_OP(name, s) \ | |
| 630 | -{ \ | |
| 631 | - CALL_FROM_TB0(do_float_ ## name ## _s); \ | |
| 632 | - DEBUG_FPU_STATE(); \ | |
| 633 | - FORCE_RET(); \ | |
| 634 | -} \ | |
| 635 | -FLOAT_OP(name, ps) \ | |
| 636 | -{ \ | |
| 637 | - CALL_FROM_TB0(do_float_ ## name ## _ps); \ | |
| 638 | - DEBUG_FPU_STATE(); \ | |
| 639 | - FORCE_RET(); \ | |
| 640 | -} | |
| 641 | -FLOAT_HOP(add) | |
| 642 | -FLOAT_HOP(sub) | |
| 643 | -FLOAT_HOP(mul) | |
| 644 | -FLOAT_HOP(div) | |
| 645 | -FLOAT_HOP(recip2) | |
| 646 | -FLOAT_HOP(rsqrt2) | |
| 647 | -FLOAT_HOP(rsqrt1) | |
| 648 | -FLOAT_HOP(recip1) | |
| 649 | -#undef FLOAT_HOP | |
| 650 | - | |
| 651 | -/* operations calling helpers, for s and d */ | |
| 652 | -#define FLOAT_HOP(name) \ | |
| 653 | -FLOAT_OP(name, d) \ | |
| 654 | -{ \ | |
| 655 | - CALL_FROM_TB0(do_float_ ## name ## _d); \ | |
| 656 | - DEBUG_FPU_STATE(); \ | |
| 657 | - FORCE_RET(); \ | |
| 658 | -} \ | |
| 659 | -FLOAT_OP(name, s) \ | |
| 660 | -{ \ | |
| 661 | - CALL_FROM_TB0(do_float_ ## name ## _s); \ | |
| 662 | - DEBUG_FPU_STATE(); \ | |
| 663 | - FORCE_RET(); \ | |
| 664 | -} | |
| 665 | -FLOAT_HOP(rsqrt) | |
| 666 | -FLOAT_HOP(recip) | |
| 667 | -#undef FLOAT_HOP | |
| 668 | - | |
| 669 | -/* operations calling helpers, for ps */ | |
| 670 | -#define FLOAT_HOP(name) \ | |
| 671 | -FLOAT_OP(name, ps) \ | |
| 672 | -{ \ | |
| 673 | - CALL_FROM_TB0(do_float_ ## name ## _ps); \ | |
| 674 | - DEBUG_FPU_STATE(); \ | |
| 675 | - FORCE_RET(); \ | |
| 676 | -} | |
| 677 | -FLOAT_HOP(addr) | |
| 678 | -FLOAT_HOP(mulr) | |
| 679 | -#undef FLOAT_HOP | |
| 680 | - | |
| 681 | 508 | /* ternary operations */ |
| 682 | 509 | #define FLOAT_TERNOP(name1, name2) \ |
| 683 | 510 | FLOAT_OP(name1 ## name2, d) \ |
| ... | ... | @@ -836,43 +663,6 @@ FLOAT_OP(alnv, ps) |
| 836 | 663 | |
| 837 | 664 | extern void dump_fpu_s(CPUState *env); |
| 838 | 665 | |
| 839 | -#define CMP_OP(fmt, op) \ | |
| 840 | -void OPPROTO op_cmp ## _ ## fmt ## _ ## op(void) \ | |
| 841 | -{ \ | |
| 842 | - CALL_FROM_TB1(do_cmp ## _ ## fmt ## _ ## op, PARAM1); \ | |
| 843 | - DEBUG_FPU_STATE(); \ | |
| 844 | - FORCE_RET(); \ | |
| 845 | -} \ | |
| 846 | -void OPPROTO op_cmpabs ## _ ## fmt ## _ ## op(void) \ | |
| 847 | -{ \ | |
| 848 | - CALL_FROM_TB1(do_cmpabs ## _ ## fmt ## _ ## op, PARAM1); \ | |
| 849 | - DEBUG_FPU_STATE(); \ | |
| 850 | - FORCE_RET(); \ | |
| 851 | -} | |
| 852 | -#define CMP_OPS(op) \ | |
| 853 | -CMP_OP(d, op) \ | |
| 854 | -CMP_OP(s, op) \ | |
| 855 | -CMP_OP(ps, op) | |
| 856 | - | |
| 857 | -CMP_OPS(f) | |
| 858 | -CMP_OPS(un) | |
| 859 | -CMP_OPS(eq) | |
| 860 | -CMP_OPS(ueq) | |
| 861 | -CMP_OPS(olt) | |
| 862 | -CMP_OPS(ult) | |
| 863 | -CMP_OPS(ole) | |
| 864 | -CMP_OPS(ule) | |
| 865 | -CMP_OPS(sf) | |
| 866 | -CMP_OPS(ngle) | |
| 867 | -CMP_OPS(seq) | |
| 868 | -CMP_OPS(ngl) | |
| 869 | -CMP_OPS(lt) | |
| 870 | -CMP_OPS(nge) | |
| 871 | -CMP_OPS(le) | |
| 872 | -CMP_OPS(ngt) | |
| 873 | -#undef CMP_OPS | |
| 874 | -#undef CMP_OP | |
| 875 | - | |
| 876 | 666 | void op_bc1f (void) |
| 877 | 667 | { |
| 878 | 668 | T0 = !!(~GET_FP_COND(env->fpu) & (0x1 << PARAM1)); | ... | ... |
target-mips/translate.c
| ... | ... | @@ -630,28 +630,28 @@ static inline void gen_store_fpr32h (TCGv t, int reg) |
| 630 | 630 | tcg_gen_st_i32(t, current_fpu, 8 * reg + 4 * !FP_ENDIAN_IDX); |
| 631 | 631 | } |
| 632 | 632 | |
| 633 | -#define FOP_CONDS(type, fmt) \ | |
| 634 | -static GenOpFunc1 * gen_op_cmp ## type ## _ ## fmt ## _table[16] = { \ | |
| 635 | - gen_op_cmp ## type ## _ ## fmt ## _f, \ | |
| 636 | - gen_op_cmp ## type ## _ ## fmt ## _un, \ | |
| 637 | - gen_op_cmp ## type ## _ ## fmt ## _eq, \ | |
| 638 | - gen_op_cmp ## type ## _ ## fmt ## _ueq, \ | |
| 639 | - gen_op_cmp ## type ## _ ## fmt ## _olt, \ | |
| 640 | - gen_op_cmp ## type ## _ ## fmt ## _ult, \ | |
| 641 | - gen_op_cmp ## type ## _ ## fmt ## _ole, \ | |
| 642 | - gen_op_cmp ## type ## _ ## fmt ## _ule, \ | |
| 643 | - gen_op_cmp ## type ## _ ## fmt ## _sf, \ | |
| 644 | - gen_op_cmp ## type ## _ ## fmt ## _ngle, \ | |
| 645 | - gen_op_cmp ## type ## _ ## fmt ## _seq, \ | |
| 646 | - gen_op_cmp ## type ## _ ## fmt ## _ngl, \ | |
| 647 | - gen_op_cmp ## type ## _ ## fmt ## _lt, \ | |
| 648 | - gen_op_cmp ## type ## _ ## fmt ## _nge, \ | |
| 649 | - gen_op_cmp ## type ## _ ## fmt ## _le, \ | |
| 650 | - gen_op_cmp ## type ## _ ## fmt ## _ngt, \ | |
| 651 | -}; \ | |
| 652 | -static always_inline void gen_cmp ## type ## _ ## fmt(int n, long cc) \ | |
| 653 | -{ \ | |
| 654 | - gen_op_cmp ## type ## _ ## fmt ## _table[n](cc); \ | |
| 633 | +#define FOP_CONDS(type, fmt) \ | |
| 634 | +static GenOpFunc1 * fcmp ## type ## _ ## fmt ## _table[16] = { \ | |
| 635 | + do_cmp ## type ## _ ## fmt ## _f, \ | |
| 636 | + do_cmp ## type ## _ ## fmt ## _un, \ | |
| 637 | + do_cmp ## type ## _ ## fmt ## _eq, \ | |
| 638 | + do_cmp ## type ## _ ## fmt ## _ueq, \ | |
| 639 | + do_cmp ## type ## _ ## fmt ## _olt, \ | |
| 640 | + do_cmp ## type ## _ ## fmt ## _ult, \ | |
| 641 | + do_cmp ## type ## _ ## fmt ## _ole, \ | |
| 642 | + do_cmp ## type ## _ ## fmt ## _ule, \ | |
| 643 | + do_cmp ## type ## _ ## fmt ## _sf, \ | |
| 644 | + do_cmp ## type ## _ ## fmt ## _ngle, \ | |
| 645 | + do_cmp ## type ## _ ## fmt ## _seq, \ | |
| 646 | + do_cmp ## type ## _ ## fmt ## _ngl, \ | |
| 647 | + do_cmp ## type ## _ ## fmt ## _lt, \ | |
| 648 | + do_cmp ## type ## _ ## fmt ## _nge, \ | |
| 649 | + do_cmp ## type ## _ ## fmt ## _le, \ | |
| 650 | + do_cmp ## type ## _ ## fmt ## _ngt, \ | |
| 651 | +}; \ | |
| 652 | +static inline void gen_cmp ## type ## _ ## fmt(int n, long cc) \ | |
| 653 | +{ \ | |
| 654 | + tcg_gen_helper_0_1i(fcmp ## type ## _ ## fmt ## _table[n], cc); \ | |
| 655 | 655 | } |
| 656 | 656 | |
| 657 | 657 | FOP_CONDS(, d) |
| ... | ... | @@ -660,6 +660,7 @@ FOP_CONDS(, s) |
| 660 | 660 | FOP_CONDS(abs, s) |
| 661 | 661 | FOP_CONDS(, ps) |
| 662 | 662 | FOP_CONDS(abs, ps) |
| 663 | +#undef FOP_CONDS | |
| 663 | 664 | |
| 664 | 665 | /* Tests */ |
| 665 | 666 | #define OP_COND(name, cond) \ |
| ... | ... | @@ -5597,7 +5598,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5597 | 5598 | case FOP(0, 16): |
| 5598 | 5599 | gen_load_fpr32(fpu32_T[0], fs); |
| 5599 | 5600 | gen_load_fpr32(fpu32_T[1], ft); |
| 5600 | - gen_op_float_add_s(); | |
| 5601 | + tcg_gen_helper_0_0(do_float_add_s); | |
| 5601 | 5602 | gen_store_fpr32(fpu32_T[2], fd); |
| 5602 | 5603 | opn = "add.s"; |
| 5603 | 5604 | optype = BINOP; |
| ... | ... | @@ -5605,7 +5606,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5605 | 5606 | case FOP(1, 16): |
| 5606 | 5607 | gen_load_fpr32(fpu32_T[0], fs); |
| 5607 | 5608 | gen_load_fpr32(fpu32_T[1], ft); |
| 5608 | - gen_op_float_sub_s(); | |
| 5609 | + tcg_gen_helper_0_0(do_float_sub_s); | |
| 5609 | 5610 | gen_store_fpr32(fpu32_T[2], fd); |
| 5610 | 5611 | opn = "sub.s"; |
| 5611 | 5612 | optype = BINOP; |
| ... | ... | @@ -5613,7 +5614,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5613 | 5614 | case FOP(2, 16): |
| 5614 | 5615 | gen_load_fpr32(fpu32_T[0], fs); |
| 5615 | 5616 | gen_load_fpr32(fpu32_T[1], ft); |
| 5616 | - gen_op_float_mul_s(); | |
| 5617 | + tcg_gen_helper_0_0(do_float_mul_s); | |
| 5617 | 5618 | gen_store_fpr32(fpu32_T[2], fd); |
| 5618 | 5619 | opn = "mul.s"; |
| 5619 | 5620 | optype = BINOP; |
| ... | ... | @@ -5621,7 +5622,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5621 | 5622 | case FOP(3, 16): |
| 5622 | 5623 | gen_load_fpr32(fpu32_T[0], fs); |
| 5623 | 5624 | gen_load_fpr32(fpu32_T[1], ft); |
| 5624 | - gen_op_float_div_s(); | |
| 5625 | + tcg_gen_helper_0_0(do_float_div_s); | |
| 5625 | 5626 | gen_store_fpr32(fpu32_T[2], fd); |
| 5626 | 5627 | opn = "div.s"; |
| 5627 | 5628 | optype = BINOP; |
| ... | ... | @@ -5653,52 +5654,52 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5653 | 5654 | case FOP(8, 16): |
| 5654 | 5655 | check_cp1_64bitmode(ctx); |
| 5655 | 5656 | gen_load_fpr32(fpu32_T[0], fs); |
| 5656 | - gen_op_float_roundl_s(); | |
| 5657 | + tcg_gen_helper_0_0(do_float_roundl_s); | |
| 5657 | 5658 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5658 | 5659 | opn = "round.l.s"; |
| 5659 | 5660 | break; |
| 5660 | 5661 | case FOP(9, 16): |
| 5661 | 5662 | check_cp1_64bitmode(ctx); |
| 5662 | 5663 | gen_load_fpr32(fpu32_T[0], fs); |
| 5663 | - gen_op_float_truncl_s(); | |
| 5664 | + tcg_gen_helper_0_0(do_float_truncl_s); | |
| 5664 | 5665 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5665 | 5666 | opn = "trunc.l.s"; |
| 5666 | 5667 | break; |
| 5667 | 5668 | case FOP(10, 16): |
| 5668 | 5669 | check_cp1_64bitmode(ctx); |
| 5669 | 5670 | gen_load_fpr32(fpu32_T[0], fs); |
| 5670 | - gen_op_float_ceill_s(); | |
| 5671 | + tcg_gen_helper_0_0(do_float_ceill_s); | |
| 5671 | 5672 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5672 | 5673 | opn = "ceil.l.s"; |
| 5673 | 5674 | break; |
| 5674 | 5675 | case FOP(11, 16): |
| 5675 | 5676 | check_cp1_64bitmode(ctx); |
| 5676 | 5677 | gen_load_fpr32(fpu32_T[0], fs); |
| 5677 | - gen_op_float_floorl_s(); | |
| 5678 | + tcg_gen_helper_0_0(do_float_floorl_s); | |
| 5678 | 5679 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5679 | 5680 | opn = "floor.l.s"; |
| 5680 | 5681 | break; |
| 5681 | 5682 | case FOP(12, 16): |
| 5682 | 5683 | gen_load_fpr32(fpu32_T[0], fs); |
| 5683 | - gen_op_float_roundw_s(); | |
| 5684 | + tcg_gen_helper_0_0(do_float_roundw_s); | |
| 5684 | 5685 | gen_store_fpr32(fpu32_T[2], fd); |
| 5685 | 5686 | opn = "round.w.s"; |
| 5686 | 5687 | break; |
| 5687 | 5688 | case FOP(13, 16): |
| 5688 | 5689 | gen_load_fpr32(fpu32_T[0], fs); |
| 5689 | - gen_op_float_truncw_s(); | |
| 5690 | + tcg_gen_helper_0_0(do_float_truncw_s); | |
| 5690 | 5691 | gen_store_fpr32(fpu32_T[2], fd); |
| 5691 | 5692 | opn = "trunc.w.s"; |
| 5692 | 5693 | break; |
| 5693 | 5694 | case FOP(14, 16): |
| 5694 | 5695 | gen_load_fpr32(fpu32_T[0], fs); |
| 5695 | - gen_op_float_ceilw_s(); | |
| 5696 | + tcg_gen_helper_0_0(do_float_ceilw_s); | |
| 5696 | 5697 | gen_store_fpr32(fpu32_T[2], fd); |
| 5697 | 5698 | opn = "ceil.w.s"; |
| 5698 | 5699 | break; |
| 5699 | 5700 | case FOP(15, 16): |
| 5700 | 5701 | gen_load_fpr32(fpu32_T[0], fs); |
| 5701 | - gen_op_float_floorw_s(); | |
| 5702 | + tcg_gen_helper_0_0(do_float_floorw_s); | |
| 5702 | 5703 | gen_store_fpr32(fpu32_T[2], fd); |
| 5703 | 5704 | opn = "floor.w.s"; |
| 5704 | 5705 | break; |
| ... | ... | @@ -5729,14 +5730,14 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5729 | 5730 | case FOP(21, 16): |
| 5730 | 5731 | check_cop1x(ctx); |
| 5731 | 5732 | gen_load_fpr32(fpu32_T[0], fs); |
| 5732 | - gen_op_float_recip_s(); | |
| 5733 | + tcg_gen_helper_0_0(do_float_recip_s); | |
| 5733 | 5734 | gen_store_fpr32(fpu32_T[2], fd); |
| 5734 | 5735 | opn = "recip.s"; |
| 5735 | 5736 | break; |
| 5736 | 5737 | case FOP(22, 16): |
| 5737 | 5738 | check_cop1x(ctx); |
| 5738 | 5739 | gen_load_fpr32(fpu32_T[0], fs); |
| 5739 | - gen_op_float_rsqrt_s(); | |
| 5740 | + tcg_gen_helper_0_0(do_float_rsqrt_s); | |
| 5740 | 5741 | gen_store_fpr32(fpu32_T[2], fd); |
| 5741 | 5742 | opn = "rsqrt.s"; |
| 5742 | 5743 | break; |
| ... | ... | @@ -5744,21 +5745,21 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5744 | 5745 | check_cp1_64bitmode(ctx); |
| 5745 | 5746 | gen_load_fpr32(fpu32_T[0], fs); |
| 5746 | 5747 | gen_load_fpr32(fpu32_T[2], fd); |
| 5747 | - gen_op_float_recip2_s(); | |
| 5748 | + tcg_gen_helper_0_0(do_float_recip2_s); | |
| 5748 | 5749 | gen_store_fpr32(fpu32_T[2], fd); |
| 5749 | 5750 | opn = "recip2.s"; |
| 5750 | 5751 | break; |
| 5751 | 5752 | case FOP(29, 16): |
| 5752 | 5753 | check_cp1_64bitmode(ctx); |
| 5753 | 5754 | gen_load_fpr32(fpu32_T[0], fs); |
| 5754 | - gen_op_float_recip1_s(); | |
| 5755 | + tcg_gen_helper_0_0(do_float_recip1_s); | |
| 5755 | 5756 | gen_store_fpr32(fpu32_T[2], fd); |
| 5756 | 5757 | opn = "recip1.s"; |
| 5757 | 5758 | break; |
| 5758 | 5759 | case FOP(30, 16): |
| 5759 | 5760 | check_cp1_64bitmode(ctx); |
| 5760 | 5761 | gen_load_fpr32(fpu32_T[0], fs); |
| 5761 | - gen_op_float_rsqrt1_s(); | |
| 5762 | + tcg_gen_helper_0_0(do_float_rsqrt1_s); | |
| 5762 | 5763 | gen_store_fpr32(fpu32_T[2], fd); |
| 5763 | 5764 | opn = "rsqrt1.s"; |
| 5764 | 5765 | break; |
| ... | ... | @@ -5766,27 +5767,27 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5766 | 5767 | check_cp1_64bitmode(ctx); |
| 5767 | 5768 | gen_load_fpr32(fpu32_T[0], fs); |
| 5768 | 5769 | gen_load_fpr32(fpu32_T[2], ft); |
| 5769 | - gen_op_float_rsqrt2_s(); | |
| 5770 | + tcg_gen_helper_0_0(do_float_rsqrt2_s); | |
| 5770 | 5771 | gen_store_fpr32(fpu32_T[2], fd); |
| 5771 | 5772 | opn = "rsqrt2.s"; |
| 5772 | 5773 | break; |
| 5773 | 5774 | case FOP(33, 16): |
| 5774 | 5775 | check_cp1_registers(ctx, fd); |
| 5775 | 5776 | gen_load_fpr32(fpu32_T[0], fs); |
| 5776 | - gen_op_float_cvtd_s(); | |
| 5777 | + tcg_gen_helper_0_0(do_float_cvtd_s); | |
| 5777 | 5778 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5778 | 5779 | opn = "cvt.d.s"; |
| 5779 | 5780 | break; |
| 5780 | 5781 | case FOP(36, 16): |
| 5781 | 5782 | gen_load_fpr32(fpu32_T[0], fs); |
| 5782 | - gen_op_float_cvtw_s(); | |
| 5783 | + tcg_gen_helper_0_0(do_float_cvtw_s); | |
| 5783 | 5784 | gen_store_fpr32(fpu32_T[2], fd); |
| 5784 | 5785 | opn = "cvt.w.s"; |
| 5785 | 5786 | break; |
| 5786 | 5787 | case FOP(37, 16): |
| 5787 | 5788 | check_cp1_64bitmode(ctx); |
| 5788 | 5789 | gen_load_fpr32(fpu32_T[0], fs); |
| 5789 | - gen_op_float_cvtl_s(); | |
| 5790 | + tcg_gen_helper_0_0(do_float_cvtl_s); | |
| 5790 | 5791 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5791 | 5792 | opn = "cvt.l.s"; |
| 5792 | 5793 | break; |
| ... | ... | @@ -5829,7 +5830,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5829 | 5830 | check_cp1_registers(ctx, fs | ft | fd); |
| 5830 | 5831 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5831 | 5832 | gen_load_fpr64(ctx, fpu64_T[1], ft); |
| 5832 | - gen_op_float_add_d(); | |
| 5833 | + tcg_gen_helper_0_0(do_float_add_d); | |
| 5833 | 5834 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5834 | 5835 | opn = "add.d"; |
| 5835 | 5836 | optype = BINOP; |
| ... | ... | @@ -5838,7 +5839,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5838 | 5839 | check_cp1_registers(ctx, fs | ft | fd); |
| 5839 | 5840 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5840 | 5841 | gen_load_fpr64(ctx, fpu64_T[1], ft); |
| 5841 | - gen_op_float_sub_d(); | |
| 5842 | + tcg_gen_helper_0_0(do_float_sub_d); | |
| 5842 | 5843 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5843 | 5844 | opn = "sub.d"; |
| 5844 | 5845 | optype = BINOP; |
| ... | ... | @@ -5847,7 +5848,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5847 | 5848 | check_cp1_registers(ctx, fs | ft | fd); |
| 5848 | 5849 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5849 | 5850 | gen_load_fpr64(ctx, fpu64_T[1], ft); |
| 5850 | - gen_op_float_mul_d(); | |
| 5851 | + tcg_gen_helper_0_0(do_float_mul_d); | |
| 5851 | 5852 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5852 | 5853 | opn = "mul.d"; |
| 5853 | 5854 | optype = BINOP; |
| ... | ... | @@ -5856,7 +5857,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5856 | 5857 | check_cp1_registers(ctx, fs | ft | fd); |
| 5857 | 5858 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5858 | 5859 | gen_load_fpr64(ctx, fpu64_T[1], ft); |
| 5859 | - gen_op_float_div_d(); | |
| 5860 | + tcg_gen_helper_0_0(do_float_div_d); | |
| 5860 | 5861 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5861 | 5862 | opn = "div.d"; |
| 5862 | 5863 | optype = BINOP; |
| ... | ... | @@ -5892,56 +5893,56 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5892 | 5893 | case FOP(8, 17): |
| 5893 | 5894 | check_cp1_64bitmode(ctx); |
| 5894 | 5895 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5895 | - gen_op_float_roundl_d(); | |
| 5896 | + tcg_gen_helper_0_0(do_float_roundl_d); | |
| 5896 | 5897 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5897 | 5898 | opn = "round.l.d"; |
| 5898 | 5899 | break; |
| 5899 | 5900 | case FOP(9, 17): |
| 5900 | 5901 | check_cp1_64bitmode(ctx); |
| 5901 | 5902 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5902 | - gen_op_float_truncl_d(); | |
| 5903 | + tcg_gen_helper_0_0(do_float_truncl_d); | |
| 5903 | 5904 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5904 | 5905 | opn = "trunc.l.d"; |
| 5905 | 5906 | break; |
| 5906 | 5907 | case FOP(10, 17): |
| 5907 | 5908 | check_cp1_64bitmode(ctx); |
| 5908 | 5909 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5909 | - gen_op_float_ceill_d(); | |
| 5910 | + tcg_gen_helper_0_0(do_float_ceill_d); | |
| 5910 | 5911 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5911 | 5912 | opn = "ceil.l.d"; |
| 5912 | 5913 | break; |
| 5913 | 5914 | case FOP(11, 17): |
| 5914 | 5915 | check_cp1_64bitmode(ctx); |
| 5915 | 5916 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5916 | - gen_op_float_floorl_d(); | |
| 5917 | + tcg_gen_helper_0_0(do_float_floorl_d); | |
| 5917 | 5918 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5918 | 5919 | opn = "floor.l.d"; |
| 5919 | 5920 | break; |
| 5920 | 5921 | case FOP(12, 17): |
| 5921 | 5922 | check_cp1_registers(ctx, fs); |
| 5922 | 5923 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5923 | - gen_op_float_roundw_d(); | |
| 5924 | + tcg_gen_helper_0_0(do_float_roundw_d); | |
| 5924 | 5925 | gen_store_fpr32(fpu32_T[2], fd); |
| 5925 | 5926 | opn = "round.w.d"; |
| 5926 | 5927 | break; |
| 5927 | 5928 | case FOP(13, 17): |
| 5928 | 5929 | check_cp1_registers(ctx, fs); |
| 5929 | 5930 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5930 | - gen_op_float_truncw_d(); | |
| 5931 | + tcg_gen_helper_0_0(do_float_truncw_d); | |
| 5931 | 5932 | gen_store_fpr32(fpu32_T[2], fd); |
| 5932 | 5933 | opn = "trunc.w.d"; |
| 5933 | 5934 | break; |
| 5934 | 5935 | case FOP(14, 17): |
| 5935 | 5936 | check_cp1_registers(ctx, fs); |
| 5936 | 5937 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5937 | - gen_op_float_ceilw_d(); | |
| 5938 | + tcg_gen_helper_0_0(do_float_ceilw_d); | |
| 5938 | 5939 | gen_store_fpr32(fpu32_T[2], fd); |
| 5939 | 5940 | opn = "ceil.w.d"; |
| 5940 | 5941 | break; |
| 5941 | 5942 | case FOP(15, 17): |
| 5942 | 5943 | check_cp1_registers(ctx, fs); |
| 5943 | 5944 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5944 | - gen_op_float_floorw_d(); | |
| 5945 | + tcg_gen_helper_0_0(do_float_floorw_d); | |
| 5945 | 5946 | gen_store_fpr32(fpu32_T[2], fd); |
| 5946 | 5947 | opn = "floor.w.d"; |
| 5947 | 5948 | break; |
| ... | ... | @@ -5972,14 +5973,14 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5972 | 5973 | case FOP(21, 17): |
| 5973 | 5974 | check_cp1_64bitmode(ctx); |
| 5974 | 5975 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5975 | - gen_op_float_recip_d(); | |
| 5976 | + tcg_gen_helper_0_0(do_float_recip_d); | |
| 5976 | 5977 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5977 | 5978 | opn = "recip.d"; |
| 5978 | 5979 | break; |
| 5979 | 5980 | case FOP(22, 17): |
| 5980 | 5981 | check_cp1_64bitmode(ctx); |
| 5981 | 5982 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5982 | - gen_op_float_rsqrt_d(); | |
| 5983 | + tcg_gen_helper_0_0(do_float_rsqrt_d); | |
| 5983 | 5984 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5984 | 5985 | opn = "rsqrt.d"; |
| 5985 | 5986 | break; |
| ... | ... | @@ -5987,21 +5988,21 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 5987 | 5988 | check_cp1_64bitmode(ctx); |
| 5988 | 5989 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5989 | 5990 | gen_load_fpr64(ctx, fpu64_T[2], ft); |
| 5990 | - gen_op_float_recip2_d(); | |
| 5991 | + tcg_gen_helper_0_0(do_float_recip2_d); | |
| 5991 | 5992 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5992 | 5993 | opn = "recip2.d"; |
| 5993 | 5994 | break; |
| 5994 | 5995 | case FOP(29, 17): |
| 5995 | 5996 | check_cp1_64bitmode(ctx); |
| 5996 | 5997 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 5997 | - gen_op_float_recip1_d(); | |
| 5998 | + tcg_gen_helper_0_0(do_float_recip1_d); | |
| 5998 | 5999 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 5999 | 6000 | opn = "recip1.d"; |
| 6000 | 6001 | break; |
| 6001 | 6002 | case FOP(30, 17): |
| 6002 | 6003 | check_cp1_64bitmode(ctx); |
| 6003 | 6004 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6004 | - gen_op_float_rsqrt1_d(); | |
| 6005 | + tcg_gen_helper_0_0(do_float_rsqrt1_d); | |
| 6005 | 6006 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6006 | 6007 | opn = "rsqrt1.d"; |
| 6007 | 6008 | break; |
| ... | ... | @@ -6009,7 +6010,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6009 | 6010 | check_cp1_64bitmode(ctx); |
| 6010 | 6011 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6011 | 6012 | gen_load_fpr64(ctx, fpu64_T[2], ft); |
| 6012 | - gen_op_float_rsqrt2_d(); | |
| 6013 | + tcg_gen_helper_0_0(do_float_rsqrt2_d); | |
| 6013 | 6014 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6014 | 6015 | opn = "rsqrt2.d"; |
| 6015 | 6016 | break; |
| ... | ... | @@ -6045,48 +6046,48 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6045 | 6046 | case FOP(32, 17): |
| 6046 | 6047 | check_cp1_registers(ctx, fs); |
| 6047 | 6048 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6048 | - gen_op_float_cvts_d(); | |
| 6049 | + tcg_gen_helper_0_0(do_float_cvts_d); | |
| 6049 | 6050 | gen_store_fpr32(fpu32_T[2], fd); |
| 6050 | 6051 | opn = "cvt.s.d"; |
| 6051 | 6052 | break; |
| 6052 | 6053 | case FOP(36, 17): |
| 6053 | 6054 | check_cp1_registers(ctx, fs); |
| 6054 | 6055 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6055 | - gen_op_float_cvtw_d(); | |
| 6056 | + tcg_gen_helper_0_0(do_float_cvtw_d); | |
| 6056 | 6057 | gen_store_fpr32(fpu32_T[2], fd); |
| 6057 | 6058 | opn = "cvt.w.d"; |
| 6058 | 6059 | break; |
| 6059 | 6060 | case FOP(37, 17): |
| 6060 | 6061 | check_cp1_64bitmode(ctx); |
| 6061 | 6062 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6062 | - gen_op_float_cvtl_d(); | |
| 6063 | + tcg_gen_helper_0_0(do_float_cvtl_d); | |
| 6063 | 6064 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6064 | 6065 | opn = "cvt.l.d"; |
| 6065 | 6066 | break; |
| 6066 | 6067 | case FOP(32, 20): |
| 6067 | 6068 | gen_load_fpr32(fpu32_T[0], fs); |
| 6068 | - gen_op_float_cvts_w(); | |
| 6069 | + tcg_gen_helper_0_0(do_float_cvts_w); | |
| 6069 | 6070 | gen_store_fpr32(fpu32_T[2], fd); |
| 6070 | 6071 | opn = "cvt.s.w"; |
| 6071 | 6072 | break; |
| 6072 | 6073 | case FOP(33, 20): |
| 6073 | 6074 | check_cp1_registers(ctx, fd); |
| 6074 | 6075 | gen_load_fpr32(fpu32_T[0], fs); |
| 6075 | - gen_op_float_cvtd_w(); | |
| 6076 | + tcg_gen_helper_0_0(do_float_cvtd_w); | |
| 6076 | 6077 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6077 | 6078 | opn = "cvt.d.w"; |
| 6078 | 6079 | break; |
| 6079 | 6080 | case FOP(32, 21): |
| 6080 | 6081 | check_cp1_64bitmode(ctx); |
| 6081 | 6082 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6082 | - gen_op_float_cvts_l(); | |
| 6083 | + tcg_gen_helper_0_0(do_float_cvts_l); | |
| 6083 | 6084 | gen_store_fpr32(fpu32_T[2], fd); |
| 6084 | 6085 | opn = "cvt.s.l"; |
| 6085 | 6086 | break; |
| 6086 | 6087 | case FOP(33, 21): |
| 6087 | 6088 | check_cp1_64bitmode(ctx); |
| 6088 | 6089 | gen_load_fpr64(ctx, fpu64_T[0], fs); |
| 6089 | - gen_op_float_cvtd_l(); | |
| 6090 | + tcg_gen_helper_0_0(do_float_cvtd_l); | |
| 6090 | 6091 | gen_store_fpr64(ctx, fpu64_T[2], fd); |
| 6091 | 6092 | opn = "cvt.d.l"; |
| 6092 | 6093 | break; |
| ... | ... | @@ -6094,7 +6095,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6094 | 6095 | check_cp1_64bitmode(ctx); |
| 6095 | 6096 | gen_load_fpr32(fpu32_T[0], fs); |
| 6096 | 6097 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6097 | - gen_op_float_cvtps_pw(); | |
| 6098 | + tcg_gen_helper_0_0(do_float_cvtps_pw); | |
| 6098 | 6099 | gen_store_fpr32(fpu32_T[2], fd); |
| 6099 | 6100 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6100 | 6101 | opn = "cvt.ps.pw"; |
| ... | ... | @@ -6105,7 +6106,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6105 | 6106 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6106 | 6107 | gen_load_fpr32(fpu32_T[1], ft); |
| 6107 | 6108 | gen_load_fpr32h(fpu32h_T[1], ft); |
| 6108 | - gen_op_float_add_ps(); | |
| 6109 | + tcg_gen_helper_0_0(do_float_add_ps); | |
| 6109 | 6110 | gen_store_fpr32(fpu32_T[2], fd); |
| 6110 | 6111 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6111 | 6112 | opn = "add.ps"; |
| ... | ... | @@ -6116,7 +6117,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6116 | 6117 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6117 | 6118 | gen_load_fpr32(fpu32_T[1], ft); |
| 6118 | 6119 | gen_load_fpr32h(fpu32h_T[1], ft); |
| 6119 | - gen_op_float_sub_ps(); | |
| 6120 | + tcg_gen_helper_0_0(do_float_sub_ps); | |
| 6120 | 6121 | gen_store_fpr32(fpu32_T[2], fd); |
| 6121 | 6122 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6122 | 6123 | opn = "sub.ps"; |
| ... | ... | @@ -6127,7 +6128,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6127 | 6128 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6128 | 6129 | gen_load_fpr32(fpu32_T[1], ft); |
| 6129 | 6130 | gen_load_fpr32h(fpu32h_T[1], ft); |
| 6130 | - gen_op_float_mul_ps(); | |
| 6131 | + tcg_gen_helper_0_0(do_float_mul_ps); | |
| 6131 | 6132 | gen_store_fpr32(fpu32_T[2], fd); |
| 6132 | 6133 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6133 | 6134 | opn = "mul.ps"; |
| ... | ... | @@ -6204,7 +6205,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6204 | 6205 | gen_load_fpr32h(fpu32h_T[0], ft); |
| 6205 | 6206 | gen_load_fpr32(fpu32_T[1], fs); |
| 6206 | 6207 | gen_load_fpr32h(fpu32h_T[1], fs); |
| 6207 | - gen_op_float_addr_ps(); | |
| 6208 | + tcg_gen_helper_0_0(do_float_addr_ps); | |
| 6208 | 6209 | gen_store_fpr32(fpu32_T[2], fd); |
| 6209 | 6210 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6210 | 6211 | opn = "addr.ps"; |
| ... | ... | @@ -6215,7 +6216,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6215 | 6216 | gen_load_fpr32h(fpu32h_T[0], ft); |
| 6216 | 6217 | gen_load_fpr32(fpu32_T[1], fs); |
| 6217 | 6218 | gen_load_fpr32h(fpu32h_T[1], fs); |
| 6218 | - gen_op_float_mulr_ps(); | |
| 6219 | + tcg_gen_helper_0_0(do_float_mulr_ps); | |
| 6219 | 6220 | gen_store_fpr32(fpu32_T[2], fd); |
| 6220 | 6221 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6221 | 6222 | opn = "mulr.ps"; |
| ... | ... | @@ -6226,7 +6227,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6226 | 6227 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6227 | 6228 | gen_load_fpr32(fpu32_T[2], fd); |
| 6228 | 6229 | gen_load_fpr32h(fpu32h_T[2], fd); |
| 6229 | - gen_op_float_recip2_ps(); | |
| 6230 | + tcg_gen_helper_0_0(do_float_recip2_ps); | |
| 6230 | 6231 | gen_store_fpr32(fpu32_T[2], fd); |
| 6231 | 6232 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6232 | 6233 | opn = "recip2.ps"; |
| ... | ... | @@ -6235,7 +6236,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6235 | 6236 | check_cp1_64bitmode(ctx); |
| 6236 | 6237 | gen_load_fpr32(fpu32_T[0], fs); |
| 6237 | 6238 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6238 | - gen_op_float_recip1_ps(); | |
| 6239 | + tcg_gen_helper_0_0(do_float_recip1_ps); | |
| 6239 | 6240 | gen_store_fpr32(fpu32_T[2], fd); |
| 6240 | 6241 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6241 | 6242 | opn = "recip1.ps"; |
| ... | ... | @@ -6244,7 +6245,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6244 | 6245 | check_cp1_64bitmode(ctx); |
| 6245 | 6246 | gen_load_fpr32(fpu32_T[0], fs); |
| 6246 | 6247 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6247 | - gen_op_float_rsqrt1_ps(); | |
| 6248 | + tcg_gen_helper_0_0(do_float_rsqrt1_ps); | |
| 6248 | 6249 | gen_store_fpr32(fpu32_T[2], fd); |
| 6249 | 6250 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6250 | 6251 | opn = "rsqrt1.ps"; |
| ... | ... | @@ -6255,7 +6256,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6255 | 6256 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6256 | 6257 | gen_load_fpr32(fpu32_T[2], ft); |
| 6257 | 6258 | gen_load_fpr32h(fpu32h_T[2], ft); |
| 6258 | - gen_op_float_rsqrt2_ps(); | |
| 6259 | + tcg_gen_helper_0_0(do_float_rsqrt2_ps); | |
| 6259 | 6260 | gen_store_fpr32(fpu32_T[2], fd); |
| 6260 | 6261 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6261 | 6262 | opn = "rsqrt2.ps"; |
| ... | ... | @@ -6263,7 +6264,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6263 | 6264 | case FOP(32, 22): |
| 6264 | 6265 | check_cp1_64bitmode(ctx); |
| 6265 | 6266 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6266 | - gen_op_float_cvts_pu(); | |
| 6267 | + tcg_gen_helper_0_0(do_float_cvts_pu); | |
| 6267 | 6268 | gen_store_fpr32(fpu32_T[2], fd); |
| 6268 | 6269 | opn = "cvt.s.pu"; |
| 6269 | 6270 | break; |
| ... | ... | @@ -6271,7 +6272,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6271 | 6272 | check_cp1_64bitmode(ctx); |
| 6272 | 6273 | gen_load_fpr32(fpu32_T[0], fs); |
| 6273 | 6274 | gen_load_fpr32h(fpu32h_T[0], fs); |
| 6274 | - gen_op_float_cvtpw_ps(); | |
| 6275 | + tcg_gen_helper_0_0(do_float_cvtpw_ps); | |
| 6275 | 6276 | gen_store_fpr32(fpu32_T[2], fd); |
| 6276 | 6277 | gen_store_fpr32h(fpu32h_T[2], fd); |
| 6277 | 6278 | opn = "cvt.pw.ps"; |
| ... | ... | @@ -6279,7 +6280,7 @@ static void gen_farith (DisasContext *ctx, uint32_t op1, |
| 6279 | 6280 | case FOP(40, 22): |
| 6280 | 6281 | check_cp1_64bitmode(ctx); |
| 6281 | 6282 | gen_load_fpr32(fpu32_T[0], fs); |
| 6282 | - gen_op_float_cvts_pl(); | |
| 6283 | + tcg_gen_helper_0_0(do_float_cvts_pl); | |
| 6283 | 6284 | gen_store_fpr32(fpu32_T[2], fd); |
| 6284 | 6285 | opn = "cvt.s.pl"; |
| 6285 | 6286 | break; | ... | ... |