Commit f0b3f3ae5d7002b2280c07619c45399ab4e80e2c
1 parent
e214b9bb
Swithc some MIPS CP0 accesses to TCG.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4546 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
194 additions
and
451 deletions
target-mips/op.c
| ... | ... | @@ -461,12 +461,6 @@ void op_dmultu (void) |
| 461 | 461 | #endif |
| 462 | 462 | |
| 463 | 463 | /* CP0 functions */ |
| 464 | -void op_mfc0_index (void) | |
| 465 | -{ | |
| 466 | - T0 = env->CP0_Index; | |
| 467 | - FORCE_RET(); | |
| 468 | -} | |
| 469 | - | |
| 470 | 464 | void op_mfc0_mvpcontrol (void) |
| 471 | 465 | { |
| 472 | 466 | T0 = env->mvp->CP0_MVPControl; |
| ... | ... | @@ -491,54 +485,6 @@ void op_mfc0_random (void) |
| 491 | 485 | FORCE_RET(); |
| 492 | 486 | } |
| 493 | 487 | |
| 494 | -void op_mfc0_vpecontrol (void) | |
| 495 | -{ | |
| 496 | - T0 = env->CP0_VPEControl; | |
| 497 | - FORCE_RET(); | |
| 498 | -} | |
| 499 | - | |
| 500 | -void op_mfc0_vpeconf0 (void) | |
| 501 | -{ | |
| 502 | - T0 = env->CP0_VPEConf0; | |
| 503 | - FORCE_RET(); | |
| 504 | -} | |
| 505 | - | |
| 506 | -void op_mfc0_vpeconf1 (void) | |
| 507 | -{ | |
| 508 | - T0 = env->CP0_VPEConf1; | |
| 509 | - FORCE_RET(); | |
| 510 | -} | |
| 511 | - | |
| 512 | -void op_mfc0_yqmask (void) | |
| 513 | -{ | |
| 514 | - T0 = env->CP0_YQMask; | |
| 515 | - FORCE_RET(); | |
| 516 | -} | |
| 517 | - | |
| 518 | -void op_mfc0_vpeschedule (void) | |
| 519 | -{ | |
| 520 | - T0 = env->CP0_VPESchedule; | |
| 521 | - FORCE_RET(); | |
| 522 | -} | |
| 523 | - | |
| 524 | -void op_mfc0_vpeschefback (void) | |
| 525 | -{ | |
| 526 | - T0 = env->CP0_VPEScheFBack; | |
| 527 | - FORCE_RET(); | |
| 528 | -} | |
| 529 | - | |
| 530 | -void op_mfc0_vpeopt (void) | |
| 531 | -{ | |
| 532 | - T0 = env->CP0_VPEOpt; | |
| 533 | - FORCE_RET(); | |
| 534 | -} | |
| 535 | - | |
| 536 | -void op_mfc0_entrylo0 (void) | |
| 537 | -{ | |
| 538 | - T0 = (int32_t)env->CP0_EntryLo0; | |
| 539 | - FORCE_RET(); | |
| 540 | -} | |
| 541 | - | |
| 542 | 488 | void op_mfc0_tcstatus (void) |
| 543 | 489 | { |
| 544 | 490 | T0 = env->CP0_TCStatus[env->current_tc]; |
| ... | ... | @@ -637,90 +583,12 @@ void op_mftc0_tcschefback(void) |
| 637 | 583 | FORCE_RET(); |
| 638 | 584 | } |
| 639 | 585 | |
| 640 | -void op_mfc0_entrylo1 (void) | |
| 641 | -{ | |
| 642 | - T0 = (int32_t)env->CP0_EntryLo1; | |
| 643 | - FORCE_RET(); | |
| 644 | -} | |
| 645 | - | |
| 646 | -void op_mfc0_context (void) | |
| 647 | -{ | |
| 648 | - T0 = (int32_t)env->CP0_Context; | |
| 649 | - FORCE_RET(); | |
| 650 | -} | |
| 651 | - | |
| 652 | -void op_mfc0_pagemask (void) | |
| 653 | -{ | |
| 654 | - T0 = env->CP0_PageMask; | |
| 655 | - FORCE_RET(); | |
| 656 | -} | |
| 657 | - | |
| 658 | -void op_mfc0_pagegrain (void) | |
| 659 | -{ | |
| 660 | - T0 = env->CP0_PageGrain; | |
| 661 | - FORCE_RET(); | |
| 662 | -} | |
| 663 | - | |
| 664 | -void op_mfc0_wired (void) | |
| 665 | -{ | |
| 666 | - T0 = env->CP0_Wired; | |
| 667 | - FORCE_RET(); | |
| 668 | -} | |
| 669 | - | |
| 670 | -void op_mfc0_srsconf0 (void) | |
| 671 | -{ | |
| 672 | - T0 = env->CP0_SRSConf0; | |
| 673 | - FORCE_RET(); | |
| 674 | -} | |
| 675 | - | |
| 676 | -void op_mfc0_srsconf1 (void) | |
| 677 | -{ | |
| 678 | - T0 = env->CP0_SRSConf1; | |
| 679 | - FORCE_RET(); | |
| 680 | -} | |
| 681 | - | |
| 682 | -void op_mfc0_srsconf2 (void) | |
| 683 | -{ | |
| 684 | - T0 = env->CP0_SRSConf2; | |
| 685 | - FORCE_RET(); | |
| 686 | -} | |
| 687 | - | |
| 688 | -void op_mfc0_srsconf3 (void) | |
| 689 | -{ | |
| 690 | - T0 = env->CP0_SRSConf3; | |
| 691 | - FORCE_RET(); | |
| 692 | -} | |
| 693 | - | |
| 694 | -void op_mfc0_srsconf4 (void) | |
| 695 | -{ | |
| 696 | - T0 = env->CP0_SRSConf4; | |
| 697 | - FORCE_RET(); | |
| 698 | -} | |
| 699 | - | |
| 700 | -void op_mfc0_hwrena (void) | |
| 701 | -{ | |
| 702 | - T0 = env->CP0_HWREna; | |
| 703 | - FORCE_RET(); | |
| 704 | -} | |
| 705 | - | |
| 706 | -void op_mfc0_badvaddr (void) | |
| 707 | -{ | |
| 708 | - T0 = (int32_t)env->CP0_BadVAddr; | |
| 709 | - FORCE_RET(); | |
| 710 | -} | |
| 711 | - | |
| 712 | 586 | void op_mfc0_count (void) |
| 713 | 587 | { |
| 714 | 588 | CALL_FROM_TB0(do_mfc0_count); |
| 715 | 589 | FORCE_RET(); |
| 716 | 590 | } |
| 717 | 591 | |
| 718 | -void op_mfc0_entryhi (void) | |
| 719 | -{ | |
| 720 | - T0 = (int32_t)env->CP0_EntryHi; | |
| 721 | - FORCE_RET(); | |
| 722 | -} | |
| 723 | - | |
| 724 | 592 | void op_mftc0_entryhi(void) |
| 725 | 593 | { |
| 726 | 594 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
| ... | ... | @@ -729,18 +597,6 @@ void op_mftc0_entryhi(void) |
| 729 | 597 | FORCE_RET(); |
| 730 | 598 | } |
| 731 | 599 | |
| 732 | -void op_mfc0_compare (void) | |
| 733 | -{ | |
| 734 | - T0 = env->CP0_Compare; | |
| 735 | - FORCE_RET(); | |
| 736 | -} | |
| 737 | - | |
| 738 | -void op_mfc0_status (void) | |
| 739 | -{ | |
| 740 | - T0 = env->CP0_Status; | |
| 741 | - FORCE_RET(); | |
| 742 | -} | |
| 743 | - | |
| 744 | 600 | void op_mftc0_status(void) |
| 745 | 601 | { |
| 746 | 602 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
| ... | ... | @@ -753,84 +609,6 @@ void op_mftc0_status(void) |
| 753 | 609 | FORCE_RET(); |
| 754 | 610 | } |
| 755 | 611 | |
| 756 | -void op_mfc0_intctl (void) | |
| 757 | -{ | |
| 758 | - T0 = env->CP0_IntCtl; | |
| 759 | - FORCE_RET(); | |
| 760 | -} | |
| 761 | - | |
| 762 | -void op_mfc0_srsctl (void) | |
| 763 | -{ | |
| 764 | - T0 = env->CP0_SRSCtl; | |
| 765 | - FORCE_RET(); | |
| 766 | -} | |
| 767 | - | |
| 768 | -void op_mfc0_srsmap (void) | |
| 769 | -{ | |
| 770 | - T0 = env->CP0_SRSMap; | |
| 771 | - FORCE_RET(); | |
| 772 | -} | |
| 773 | - | |
| 774 | -void op_mfc0_cause (void) | |
| 775 | -{ | |
| 776 | - T0 = env->CP0_Cause; | |
| 777 | - FORCE_RET(); | |
| 778 | -} | |
| 779 | - | |
| 780 | -void op_mfc0_epc (void) | |
| 781 | -{ | |
| 782 | - T0 = (int32_t)env->CP0_EPC; | |
| 783 | - FORCE_RET(); | |
| 784 | -} | |
| 785 | - | |
| 786 | -void op_mfc0_prid (void) | |
| 787 | -{ | |
| 788 | - T0 = env->CP0_PRid; | |
| 789 | - FORCE_RET(); | |
| 790 | -} | |
| 791 | - | |
| 792 | -void op_mfc0_ebase (void) | |
| 793 | -{ | |
| 794 | - T0 = env->CP0_EBase; | |
| 795 | - FORCE_RET(); | |
| 796 | -} | |
| 797 | - | |
| 798 | -void op_mfc0_config0 (void) | |
| 799 | -{ | |
| 800 | - T0 = env->CP0_Config0; | |
| 801 | - FORCE_RET(); | |
| 802 | -} | |
| 803 | - | |
| 804 | -void op_mfc0_config1 (void) | |
| 805 | -{ | |
| 806 | - T0 = env->CP0_Config1; | |
| 807 | - FORCE_RET(); | |
| 808 | -} | |
| 809 | - | |
| 810 | -void op_mfc0_config2 (void) | |
| 811 | -{ | |
| 812 | - T0 = env->CP0_Config2; | |
| 813 | - FORCE_RET(); | |
| 814 | -} | |
| 815 | - | |
| 816 | -void op_mfc0_config3 (void) | |
| 817 | -{ | |
| 818 | - T0 = env->CP0_Config3; | |
| 819 | - FORCE_RET(); | |
| 820 | -} | |
| 821 | - | |
| 822 | -void op_mfc0_config6 (void) | |
| 823 | -{ | |
| 824 | - T0 = env->CP0_Config6; | |
| 825 | - FORCE_RET(); | |
| 826 | -} | |
| 827 | - | |
| 828 | -void op_mfc0_config7 (void) | |
| 829 | -{ | |
| 830 | - T0 = env->CP0_Config7; | |
| 831 | - FORCE_RET(); | |
| 832 | -} | |
| 833 | - | |
| 834 | 612 | void op_mfc0_lladdr (void) |
| 835 | 613 | { |
| 836 | 614 | T0 = (int32_t)env->CP0_LLAddr >> 4; |
| ... | ... | @@ -849,18 +627,6 @@ void op_mfc0_watchhi (void) |
| 849 | 627 | FORCE_RET(); |
| 850 | 628 | } |
| 851 | 629 | |
| 852 | -void op_mfc0_xcontext (void) | |
| 853 | -{ | |
| 854 | - T0 = (int32_t)env->CP0_XContext; | |
| 855 | - FORCE_RET(); | |
| 856 | -} | |
| 857 | - | |
| 858 | -void op_mfc0_framemask (void) | |
| 859 | -{ | |
| 860 | - T0 = env->CP0_Framemask; | |
| 861 | - FORCE_RET(); | |
| 862 | -} | |
| 863 | - | |
| 864 | 630 | void op_mfc0_debug (void) |
| 865 | 631 | { |
| 866 | 632 | T0 = env->CP0_Debug; |
| ... | ... | @@ -880,54 +646,6 @@ void op_mftc0_debug(void) |
| 880 | 646 | FORCE_RET(); |
| 881 | 647 | } |
| 882 | 648 | |
| 883 | -void op_mfc0_depc (void) | |
| 884 | -{ | |
| 885 | - T0 = (int32_t)env->CP0_DEPC; | |
| 886 | - FORCE_RET(); | |
| 887 | -} | |
| 888 | - | |
| 889 | -void op_mfc0_performance0 (void) | |
| 890 | -{ | |
| 891 | - T0 = env->CP0_Performance0; | |
| 892 | - FORCE_RET(); | |
| 893 | -} | |
| 894 | - | |
| 895 | -void op_mfc0_taglo (void) | |
| 896 | -{ | |
| 897 | - T0 = env->CP0_TagLo; | |
| 898 | - FORCE_RET(); | |
| 899 | -} | |
| 900 | - | |
| 901 | -void op_mfc0_datalo (void) | |
| 902 | -{ | |
| 903 | - T0 = env->CP0_DataLo; | |
| 904 | - FORCE_RET(); | |
| 905 | -} | |
| 906 | - | |
| 907 | -void op_mfc0_taghi (void) | |
| 908 | -{ | |
| 909 | - T0 = env->CP0_TagHi; | |
| 910 | - FORCE_RET(); | |
| 911 | -} | |
| 912 | - | |
| 913 | -void op_mfc0_datahi (void) | |
| 914 | -{ | |
| 915 | - T0 = env->CP0_DataHi; | |
| 916 | - FORCE_RET(); | |
| 917 | -} | |
| 918 | - | |
| 919 | -void op_mfc0_errorepc (void) | |
| 920 | -{ | |
| 921 | - T0 = (int32_t)env->CP0_ErrorEPC; | |
| 922 | - FORCE_RET(); | |
| 923 | -} | |
| 924 | - | |
| 925 | -void op_mfc0_desave (void) | |
| 926 | -{ | |
| 927 | - T0 = env->CP0_DESAVE; | |
| 928 | - FORCE_RET(); | |
| 929 | -} | |
| 930 | - | |
| 931 | 649 | void op_mtc0_index (void) |
| 932 | 650 | { |
| 933 | 651 | int num = 1; |
| ... | ... | @@ -1488,30 +1206,6 @@ void op_mtc0_desave (void) |
| 1488 | 1206 | } |
| 1489 | 1207 | |
| 1490 | 1208 | #if defined(TARGET_MIPS64) |
| 1491 | -void op_dmfc0_yqmask (void) | |
| 1492 | -{ | |
| 1493 | - T0 = env->CP0_YQMask; | |
| 1494 | - FORCE_RET(); | |
| 1495 | -} | |
| 1496 | - | |
| 1497 | -void op_dmfc0_vpeschedule (void) | |
| 1498 | -{ | |
| 1499 | - T0 = env->CP0_VPESchedule; | |
| 1500 | - FORCE_RET(); | |
| 1501 | -} | |
| 1502 | - | |
| 1503 | -void op_dmfc0_vpeschefback (void) | |
| 1504 | -{ | |
| 1505 | - T0 = env->CP0_VPEScheFBack; | |
| 1506 | - FORCE_RET(); | |
| 1507 | -} | |
| 1508 | - | |
| 1509 | -void op_dmfc0_entrylo0 (void) | |
| 1510 | -{ | |
| 1511 | - T0 = env->CP0_EntryLo0; | |
| 1512 | - FORCE_RET(); | |
| 1513 | -} | |
| 1514 | - | |
| 1515 | 1209 | void op_dmfc0_tcrestart (void) |
| 1516 | 1210 | { |
| 1517 | 1211 | T0 = env->PC[env->current_tc]; |
| ... | ... | @@ -1542,36 +1236,6 @@ void op_dmfc0_tcschefback (void) |
| 1542 | 1236 | FORCE_RET(); |
| 1543 | 1237 | } |
| 1544 | 1238 | |
| 1545 | -void op_dmfc0_entrylo1 (void) | |
| 1546 | -{ | |
| 1547 | - T0 = env->CP0_EntryLo1; | |
| 1548 | - FORCE_RET(); | |
| 1549 | -} | |
| 1550 | - | |
| 1551 | -void op_dmfc0_context (void) | |
| 1552 | -{ | |
| 1553 | - T0 = env->CP0_Context; | |
| 1554 | - FORCE_RET(); | |
| 1555 | -} | |
| 1556 | - | |
| 1557 | -void op_dmfc0_badvaddr (void) | |
| 1558 | -{ | |
| 1559 | - T0 = env->CP0_BadVAddr; | |
| 1560 | - FORCE_RET(); | |
| 1561 | -} | |
| 1562 | - | |
| 1563 | -void op_dmfc0_entryhi (void) | |
| 1564 | -{ | |
| 1565 | - T0 = env->CP0_EntryHi; | |
| 1566 | - FORCE_RET(); | |
| 1567 | -} | |
| 1568 | - | |
| 1569 | -void op_dmfc0_epc (void) | |
| 1570 | -{ | |
| 1571 | - T0 = env->CP0_EPC; | |
| 1572 | - FORCE_RET(); | |
| 1573 | -} | |
| 1574 | - | |
| 1575 | 1239 | void op_dmfc0_lladdr (void) |
| 1576 | 1240 | { |
| 1577 | 1241 | T0 = env->CP0_LLAddr >> 4; |
| ... | ... | @@ -1583,24 +1247,6 @@ void op_dmfc0_watchlo (void) |
| 1583 | 1247 | T0 = env->CP0_WatchLo[PARAM1]; |
| 1584 | 1248 | FORCE_RET(); |
| 1585 | 1249 | } |
| 1586 | - | |
| 1587 | -void op_dmfc0_xcontext (void) | |
| 1588 | -{ | |
| 1589 | - T0 = env->CP0_XContext; | |
| 1590 | - FORCE_RET(); | |
| 1591 | -} | |
| 1592 | - | |
| 1593 | -void op_dmfc0_depc (void) | |
| 1594 | -{ | |
| 1595 | - T0 = env->CP0_DEPC; | |
| 1596 | - FORCE_RET(); | |
| 1597 | -} | |
| 1598 | - | |
| 1599 | -void op_dmfc0_errorepc (void) | |
| 1600 | -{ | |
| 1601 | - T0 = env->CP0_ErrorEPC; | |
| 1602 | - FORCE_RET(); | |
| 1603 | -} | |
| 1604 | 1250 | #endif /* TARGET_MIPS64 */ |
| 1605 | 1251 | |
| 1606 | 1252 | /* MIPS MT functions */ | ... | ... |
target-mips/translate.c
| ... | ... | @@ -997,7 +997,7 @@ void inline op_ldst_##insn(DisasContext *ctx) \ |
| 997 | 997 | tcg_gen_andi_tl(r_tmp, cpu_T[0], almask); \ |
| 998 | 998 | tcg_gen_brcond_tl(TCG_COND_EQ, r_tmp, tcg_const_tl(0), l1); \ |
| 999 | 999 | tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_BadVAddr)); \ |
| 1000 | - generate_exception(ctx, EXCP_AdES); \ | |
| 1000 | + generate_exception(ctx, EXCP_AdES); \ | |
| 1001 | 1001 | gen_set_label(l1); \ |
| 1002 | 1002 | tcg_gen_ld_tl(r_tmp, cpu_env, offsetof(CPUState, CP0_LLAddr)); \ |
| 1003 | 1003 | tcg_gen_brcond_tl(TCG_COND_NE, cpu_T[0], r_tmp, l2); \ |
| ... | ... | @@ -2568,6 +2568,8 @@ fail: |
| 2568 | 2568 | static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2569 | 2569 | { |
| 2570 | 2570 | const char *rn = "invalid"; |
| 2571 | + TCGv r_tmp = tcg_temp_new(TCG_TYPE_I32); | |
| 2572 | + TCGv r_tmp64 = tcg_temp_new(TCG_TYPE_I64); | |
| 2571 | 2573 | |
| 2572 | 2574 | if (sel != 0) |
| 2573 | 2575 | check_insn(env, ctx, ISA_MIPS32); |
| ... | ... | @@ -2576,7 +2578,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2576 | 2578 | case 0: |
| 2577 | 2579 | switch (sel) { |
| 2578 | 2580 | case 0: |
| 2579 | - gen_op_mfc0_index(); | |
| 2581 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Index)); | |
| 2582 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2580 | 2583 | rn = "Index"; |
| 2581 | 2584 | break; |
| 2582 | 2585 | case 1: |
| ... | ... | @@ -2606,37 +2609,44 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2606 | 2609 | break; |
| 2607 | 2610 | case 1: |
| 2608 | 2611 | check_insn(env, ctx, ASE_MT); |
| 2609 | - gen_op_mfc0_vpecontrol(); | |
| 2612 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEControl)); | |
| 2613 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2610 | 2614 | rn = "VPEControl"; |
| 2611 | 2615 | break; |
| 2612 | 2616 | case 2: |
| 2613 | 2617 | check_insn(env, ctx, ASE_MT); |
| 2614 | - gen_op_mfc0_vpeconf0(); | |
| 2618 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEConf0)); | |
| 2619 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2615 | 2620 | rn = "VPEConf0"; |
| 2616 | 2621 | break; |
| 2617 | 2622 | case 3: |
| 2618 | 2623 | check_insn(env, ctx, ASE_MT); |
| 2619 | - gen_op_mfc0_vpeconf1(); | |
| 2624 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEConf1)); | |
| 2625 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2620 | 2626 | rn = "VPEConf1"; |
| 2621 | 2627 | break; |
| 2622 | 2628 | case 4: |
| 2623 | 2629 | check_insn(env, ctx, ASE_MT); |
| 2624 | - gen_op_mfc0_yqmask(); | |
| 2630 | + tcg_gen_ld_i64(r_tmp64, cpu_env, offsetof(CPUState, CP0_YQMask)); | |
| 2631 | + tcg_gen_trunc_i64_tl(cpu_T[0], r_tmp64); | |
| 2625 | 2632 | rn = "YQMask"; |
| 2626 | 2633 | break; |
| 2627 | 2634 | case 5: |
| 2628 | 2635 | check_insn(env, ctx, ASE_MT); |
| 2629 | - gen_op_mfc0_vpeschedule(); | |
| 2636 | + tcg_gen_ld_tl(r_tmp64, cpu_env, offsetof(CPUState, CP0_VPESchedule)); | |
| 2637 | + tcg_gen_trunc_i64_tl(cpu_T[0], r_tmp64); | |
| 2630 | 2638 | rn = "VPESchedule"; |
| 2631 | 2639 | break; |
| 2632 | 2640 | case 6: |
| 2633 | 2641 | check_insn(env, ctx, ASE_MT); |
| 2634 | - gen_op_mfc0_vpeschefback(); | |
| 2642 | + tcg_gen_ld_tl(r_tmp64, cpu_env, offsetof(CPUState, CP0_VPEScheFBack)); | |
| 2643 | + tcg_gen_trunc_i64_tl(cpu_T[0], r_tmp64); | |
| 2635 | 2644 | rn = "VPEScheFBack"; |
| 2636 | 2645 | break; |
| 2637 | 2646 | case 7: |
| 2638 | 2647 | check_insn(env, ctx, ASE_MT); |
| 2639 | - gen_op_mfc0_vpeopt(); | |
| 2648 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEOpt)); | |
| 2649 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2640 | 2650 | rn = "VPEOpt"; |
| 2641 | 2651 | break; |
| 2642 | 2652 | default: |
| ... | ... | @@ -2646,7 +2656,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2646 | 2656 | case 2: |
| 2647 | 2657 | switch (sel) { |
| 2648 | 2658 | case 0: |
| 2649 | - gen_op_mfc0_entrylo0(); | |
| 2659 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo0)); | |
| 2660 | + tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]); | |
| 2650 | 2661 | rn = "EntryLo0"; |
| 2651 | 2662 | break; |
| 2652 | 2663 | case 1: |
| ... | ... | @@ -2691,7 +2702,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2691 | 2702 | case 3: |
| 2692 | 2703 | switch (sel) { |
| 2693 | 2704 | case 0: |
| 2694 | - gen_op_mfc0_entrylo1(); | |
| 2705 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo1)); | |
| 2706 | + tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]); | |
| 2695 | 2707 | rn = "EntryLo1"; |
| 2696 | 2708 | break; |
| 2697 | 2709 | default: |
| ... | ... | @@ -2701,7 +2713,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2701 | 2713 | case 4: |
| 2702 | 2714 | switch (sel) { |
| 2703 | 2715 | case 0: |
| 2704 | - gen_op_mfc0_context(); | |
| 2716 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_Context)); | |
| 2717 | + tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]); | |
| 2705 | 2718 | rn = "Context"; |
| 2706 | 2719 | break; |
| 2707 | 2720 | case 1: |
| ... | ... | @@ -2715,12 +2728,14 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2715 | 2728 | case 5: |
| 2716 | 2729 | switch (sel) { |
| 2717 | 2730 | case 0: |
| 2718 | - gen_op_mfc0_pagemask(); | |
| 2731 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PageMask)); | |
| 2732 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2719 | 2733 | rn = "PageMask"; |
| 2720 | 2734 | break; |
| 2721 | 2735 | case 1: |
| 2722 | 2736 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2723 | - gen_op_mfc0_pagegrain(); | |
| 2737 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PageGrain)); | |
| 2738 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2724 | 2739 | rn = "PageGrain"; |
| 2725 | 2740 | break; |
| 2726 | 2741 | default: |
| ... | ... | @@ -2730,32 +2745,38 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2730 | 2745 | case 6: |
| 2731 | 2746 | switch (sel) { |
| 2732 | 2747 | case 0: |
| 2733 | - gen_op_mfc0_wired(); | |
| 2748 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Wired)); | |
| 2749 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2734 | 2750 | rn = "Wired"; |
| 2735 | 2751 | break; |
| 2736 | 2752 | case 1: |
| 2737 | 2753 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2738 | - gen_op_mfc0_srsconf0(); | |
| 2754 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf0)); | |
| 2755 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2739 | 2756 | rn = "SRSConf0"; |
| 2740 | 2757 | break; |
| 2741 | 2758 | case 2: |
| 2742 | 2759 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2743 | - gen_op_mfc0_srsconf1(); | |
| 2760 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf1)); | |
| 2761 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2744 | 2762 | rn = "SRSConf1"; |
| 2745 | 2763 | break; |
| 2746 | 2764 | case 3: |
| 2747 | 2765 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2748 | - gen_op_mfc0_srsconf2(); | |
| 2766 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf2)); | |
| 2767 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2749 | 2768 | rn = "SRSConf2"; |
| 2750 | 2769 | break; |
| 2751 | 2770 | case 4: |
| 2752 | 2771 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2753 | - gen_op_mfc0_srsconf3(); | |
| 2772 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf3)); | |
| 2773 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2754 | 2774 | rn = "SRSConf3"; |
| 2755 | 2775 | break; |
| 2756 | 2776 | case 5: |
| 2757 | 2777 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2758 | - gen_op_mfc0_srsconf4(); | |
| 2778 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf4)); | |
| 2779 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2759 | 2780 | rn = "SRSConf4"; |
| 2760 | 2781 | break; |
| 2761 | 2782 | default: |
| ... | ... | @@ -2766,7 +2787,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2766 | 2787 | switch (sel) { |
| 2767 | 2788 | case 0: |
| 2768 | 2789 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2769 | - gen_op_mfc0_hwrena(); | |
| 2790 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_HWREna)); | |
| 2791 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2770 | 2792 | rn = "HWREna"; |
| 2771 | 2793 | break; |
| 2772 | 2794 | default: |
| ... | ... | @@ -2776,8 +2798,9 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2776 | 2798 | case 8: |
| 2777 | 2799 | switch (sel) { |
| 2778 | 2800 | case 0: |
| 2779 | - gen_op_mfc0_badvaddr(); | |
| 2780 | - rn = "BadVaddr"; | |
| 2801 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_BadVAddr)); | |
| 2802 | + tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]); | |
| 2803 | + rn = "BadVAddr"; | |
| 2781 | 2804 | break; |
| 2782 | 2805 | default: |
| 2783 | 2806 | goto die; |
| ... | ... | @@ -2797,7 +2820,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2797 | 2820 | case 10: |
| 2798 | 2821 | switch (sel) { |
| 2799 | 2822 | case 0: |
| 2800 | - gen_op_mfc0_entryhi(); | |
| 2823 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryHi)); | |
| 2824 | + tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]); | |
| 2801 | 2825 | rn = "EntryHi"; |
| 2802 | 2826 | break; |
| 2803 | 2827 | default: |
| ... | ... | @@ -2807,7 +2831,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2807 | 2831 | case 11: |
| 2808 | 2832 | switch (sel) { |
| 2809 | 2833 | case 0: |
| 2810 | - gen_op_mfc0_compare(); | |
| 2834 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Compare)); | |
| 2835 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2811 | 2836 | rn = "Compare"; |
| 2812 | 2837 | break; |
| 2813 | 2838 | /* 6,7 are implementation dependent */ |
| ... | ... | @@ -2818,22 +2843,26 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2818 | 2843 | case 12: |
| 2819 | 2844 | switch (sel) { |
| 2820 | 2845 | case 0: |
| 2821 | - gen_op_mfc0_status(); | |
| 2846 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Status)); | |
| 2847 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2822 | 2848 | rn = "Status"; |
| 2823 | 2849 | break; |
| 2824 | 2850 | case 1: |
| 2825 | 2851 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2826 | - gen_op_mfc0_intctl(); | |
| 2852 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_IntCtl)); | |
| 2853 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2827 | 2854 | rn = "IntCtl"; |
| 2828 | 2855 | break; |
| 2829 | 2856 | case 2: |
| 2830 | 2857 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2831 | - gen_op_mfc0_srsctl(); | |
| 2858 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSCtl)); | |
| 2859 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2832 | 2860 | rn = "SRSCtl"; |
| 2833 | 2861 | break; |
| 2834 | 2862 | case 3: |
| 2835 | 2863 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2836 | - gen_op_mfc0_srsmap(); | |
| 2864 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSMap)); | |
| 2865 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2837 | 2866 | rn = "SRSMap"; |
| 2838 | 2867 | break; |
| 2839 | 2868 | default: |
| ... | ... | @@ -2843,7 +2872,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2843 | 2872 | case 13: |
| 2844 | 2873 | switch (sel) { |
| 2845 | 2874 | case 0: |
| 2846 | - gen_op_mfc0_cause(); | |
| 2875 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Cause)); | |
| 2876 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2847 | 2877 | rn = "Cause"; |
| 2848 | 2878 | break; |
| 2849 | 2879 | default: |
| ... | ... | @@ -2853,7 +2883,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2853 | 2883 | case 14: |
| 2854 | 2884 | switch (sel) { |
| 2855 | 2885 | case 0: |
| 2856 | - gen_op_mfc0_epc(); | |
| 2886 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EPC)); | |
| 2887 | + tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]); | |
| 2857 | 2888 | rn = "EPC"; |
| 2858 | 2889 | break; |
| 2859 | 2890 | default: |
| ... | ... | @@ -2863,12 +2894,14 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2863 | 2894 | case 15: |
| 2864 | 2895 | switch (sel) { |
| 2865 | 2896 | case 0: |
| 2866 | - gen_op_mfc0_prid(); | |
| 2897 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PRid)); | |
| 2898 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2867 | 2899 | rn = "PRid"; |
| 2868 | 2900 | break; |
| 2869 | 2901 | case 1: |
| 2870 | 2902 | check_insn(env, ctx, ISA_MIPS32R2); |
| 2871 | - gen_op_mfc0_ebase(); | |
| 2903 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_EBase)); | |
| 2904 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2872 | 2905 | rn = "EBase"; |
| 2873 | 2906 | break; |
| 2874 | 2907 | default: |
| ... | ... | @@ -2878,29 +2911,35 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2878 | 2911 | case 16: |
| 2879 | 2912 | switch (sel) { |
| 2880 | 2913 | case 0: |
| 2881 | - gen_op_mfc0_config0(); | |
| 2914 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config0)); | |
| 2915 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2882 | 2916 | rn = "Config"; |
| 2883 | 2917 | break; |
| 2884 | 2918 | case 1: |
| 2885 | - gen_op_mfc0_config1(); | |
| 2919 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config1)); | |
| 2920 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2886 | 2921 | rn = "Config1"; |
| 2887 | 2922 | break; |
| 2888 | 2923 | case 2: |
| 2889 | - gen_op_mfc0_config2(); | |
| 2924 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config2)); | |
| 2925 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2890 | 2926 | rn = "Config2"; |
| 2891 | 2927 | break; |
| 2892 | 2928 | case 3: |
| 2893 | - gen_op_mfc0_config3(); | |
| 2929 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config3)); | |
| 2930 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2894 | 2931 | rn = "Config3"; |
| 2895 | 2932 | break; |
| 2896 | 2933 | /* 4,5 are reserved */ |
| 2897 | 2934 | /* 6,7 are implementation dependent */ |
| 2898 | 2935 | case 6: |
| 2899 | - gen_op_mfc0_config6(); | |
| 2936 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config6)); | |
| 2937 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2900 | 2938 | rn = "Config6"; |
| 2901 | 2939 | break; |
| 2902 | 2940 | case 7: |
| 2903 | - gen_op_mfc0_config7(); | |
| 2941 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config7)); | |
| 2942 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2904 | 2943 | rn = "Config7"; |
| 2905 | 2944 | break; |
| 2906 | 2945 | default: |
| ... | ... | @@ -2942,7 +2981,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2942 | 2981 | case 0: |
| 2943 | 2982 | #if defined(TARGET_MIPS64) |
| 2944 | 2983 | check_insn(env, ctx, ISA_MIPS3); |
| 2945 | - gen_op_mfc0_xcontext(); | |
| 2984 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_XContext)); | |
| 2985 | + tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]); | |
| 2946 | 2986 | rn = "XContext"; |
| 2947 | 2987 | break; |
| 2948 | 2988 | #endif |
| ... | ... | @@ -2954,7 +2994,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2954 | 2994 | /* Officially reserved, but sel 0 is used for R1x000 framemask */ |
| 2955 | 2995 | switch (sel) { |
| 2956 | 2996 | case 0: |
| 2957 | - gen_op_mfc0_framemask(); | |
| 2997 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Framemask)); | |
| 2998 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 2958 | 2999 | rn = "Framemask"; |
| 2959 | 3000 | break; |
| 2960 | 3001 | default: |
| ... | ... | @@ -2994,7 +3035,9 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2994 | 3035 | case 24: |
| 2995 | 3036 | switch (sel) { |
| 2996 | 3037 | case 0: |
| 2997 | - gen_op_mfc0_depc(); /* EJTAG support */ | |
| 3038 | + /* EJTAG support */ | |
| 3039 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_DEPC)); | |
| 3040 | + tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]); | |
| 2998 | 3041 | rn = "DEPC"; |
| 2999 | 3042 | break; |
| 3000 | 3043 | default: |
| ... | ... | @@ -3004,7 +3047,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3004 | 3047 | case 25: |
| 3005 | 3048 | switch (sel) { |
| 3006 | 3049 | case 0: |
| 3007 | - gen_op_mfc0_performance0(); | |
| 3050 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Performance0)); | |
| 3051 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3008 | 3052 | rn = "Performance0"; |
| 3009 | 3053 | break; |
| 3010 | 3054 | case 1: |
| ... | ... | @@ -3058,14 +3102,16 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3058 | 3102 | case 2: |
| 3059 | 3103 | case 4: |
| 3060 | 3104 | case 6: |
| 3061 | - gen_op_mfc0_taglo(); | |
| 3105 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_TagLo)); | |
| 3106 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3062 | 3107 | rn = "TagLo"; |
| 3063 | 3108 | break; |
| 3064 | 3109 | case 1: |
| 3065 | 3110 | case 3: |
| 3066 | 3111 | case 5: |
| 3067 | 3112 | case 7: |
| 3068 | - gen_op_mfc0_datalo(); | |
| 3113 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DataLo)); | |
| 3114 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3069 | 3115 | rn = "DataLo"; |
| 3070 | 3116 | break; |
| 3071 | 3117 | default: |
| ... | ... | @@ -3078,14 +3124,16 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3078 | 3124 | case 2: |
| 3079 | 3125 | case 4: |
| 3080 | 3126 | case 6: |
| 3081 | - gen_op_mfc0_taghi(); | |
| 3127 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_TagHi)); | |
| 3128 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3082 | 3129 | rn = "TagHi"; |
| 3083 | 3130 | break; |
| 3084 | 3131 | case 1: |
| 3085 | 3132 | case 3: |
| 3086 | 3133 | case 5: |
| 3087 | 3134 | case 7: |
| 3088 | - gen_op_mfc0_datahi(); | |
| 3135 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DataHi)); | |
| 3136 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3089 | 3137 | rn = "DataHi"; |
| 3090 | 3138 | break; |
| 3091 | 3139 | default: |
| ... | ... | @@ -3095,7 +3143,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3095 | 3143 | case 30: |
| 3096 | 3144 | switch (sel) { |
| 3097 | 3145 | case 0: |
| 3098 | - gen_op_mfc0_errorepc(); | |
| 3146 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_ErrorEPC)); | |
| 3147 | + tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]); | |
| 3099 | 3148 | rn = "ErrorEPC"; |
| 3100 | 3149 | break; |
| 3101 | 3150 | default: |
| ... | ... | @@ -3105,7 +3154,9 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3105 | 3154 | case 31: |
| 3106 | 3155 | switch (sel) { |
| 3107 | 3156 | case 0: |
| 3108 | - gen_op_mfc0_desave(); /* EJTAG support */ | |
| 3157 | + /* EJTAG support */ | |
| 3158 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DESAVE)); | |
| 3159 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3109 | 3160 | rn = "DESAVE"; |
| 3110 | 3161 | break; |
| 3111 | 3162 | default: |
| ... | ... | @@ -3343,7 +3394,7 @@ static void gen_mtc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3343 | 3394 | break; |
| 3344 | 3395 | case 8: |
| 3345 | 3396 | /* ignored */ |
| 3346 | - rn = "BadVaddr"; | |
| 3397 | + rn = "BadVAddr"; | |
| 3347 | 3398 | break; |
| 3348 | 3399 | case 9: |
| 3349 | 3400 | switch (sel) { |
| ... | ... | @@ -3736,6 +3787,7 @@ die: |
| 3736 | 3787 | static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3737 | 3788 | { |
| 3738 | 3789 | const char *rn = "invalid"; |
| 3790 | + TCGv r_tmp = tcg_temp_new(TCG_TYPE_I32); | |
| 3739 | 3791 | |
| 3740 | 3792 | if (sel != 0) |
| 3741 | 3793 | check_insn(env, ctx, ISA_MIPS64); |
| ... | ... | @@ -3744,7 +3796,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3744 | 3796 | case 0: |
| 3745 | 3797 | switch (sel) { |
| 3746 | 3798 | case 0: |
| 3747 | - gen_op_mfc0_index(); | |
| 3799 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Index)); | |
| 3800 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3748 | 3801 | rn = "Index"; |
| 3749 | 3802 | break; |
| 3750 | 3803 | case 1: |
| ... | ... | @@ -3774,37 +3827,41 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3774 | 3827 | break; |
| 3775 | 3828 | case 1: |
| 3776 | 3829 | check_insn(env, ctx, ASE_MT); |
| 3777 | - gen_op_mfc0_vpecontrol(); | |
| 3830 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEControl)); | |
| 3831 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3778 | 3832 | rn = "VPEControl"; |
| 3779 | 3833 | break; |
| 3780 | 3834 | case 2: |
| 3781 | 3835 | check_insn(env, ctx, ASE_MT); |
| 3782 | - gen_op_mfc0_vpeconf0(); | |
| 3836 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEConf0)); | |
| 3837 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3783 | 3838 | rn = "VPEConf0"; |
| 3784 | 3839 | break; |
| 3785 | 3840 | case 3: |
| 3786 | 3841 | check_insn(env, ctx, ASE_MT); |
| 3787 | - gen_op_mfc0_vpeconf1(); | |
| 3842 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEConf1)); | |
| 3843 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3788 | 3844 | rn = "VPEConf1"; |
| 3789 | 3845 | break; |
| 3790 | 3846 | case 4: |
| 3791 | 3847 | check_insn(env, ctx, ASE_MT); |
| 3792 | - gen_op_dmfc0_yqmask(); | |
| 3848 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_YQMask)); | |
| 3793 | 3849 | rn = "YQMask"; |
| 3794 | 3850 | break; |
| 3795 | 3851 | case 5: |
| 3796 | 3852 | check_insn(env, ctx, ASE_MT); |
| 3797 | - gen_op_dmfc0_vpeschedule(); | |
| 3853 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_VPESchedule)); | |
| 3798 | 3854 | rn = "VPESchedule"; |
| 3799 | 3855 | break; |
| 3800 | 3856 | case 6: |
| 3801 | 3857 | check_insn(env, ctx, ASE_MT); |
| 3802 | - gen_op_dmfc0_vpeschefback(); | |
| 3858 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_VPEScheFBack)); | |
| 3803 | 3859 | rn = "VPEScheFBack"; |
| 3804 | 3860 | break; |
| 3805 | 3861 | case 7: |
| 3806 | 3862 | check_insn(env, ctx, ASE_MT); |
| 3807 | - gen_op_mfc0_vpeopt(); | |
| 3863 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEOpt)); | |
| 3864 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3808 | 3865 | rn = "VPEOpt"; |
| 3809 | 3866 | break; |
| 3810 | 3867 | default: |
| ... | ... | @@ -3814,7 +3871,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3814 | 3871 | case 2: |
| 3815 | 3872 | switch (sel) { |
| 3816 | 3873 | case 0: |
| 3817 | - gen_op_dmfc0_entrylo0(); | |
| 3874 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo0)); | |
| 3818 | 3875 | rn = "EntryLo0"; |
| 3819 | 3876 | break; |
| 3820 | 3877 | case 1: |
| ... | ... | @@ -3859,7 +3916,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3859 | 3916 | case 3: |
| 3860 | 3917 | switch (sel) { |
| 3861 | 3918 | case 0: |
| 3862 | - gen_op_dmfc0_entrylo1(); | |
| 3919 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo1)); | |
| 3863 | 3920 | rn = "EntryLo1"; |
| 3864 | 3921 | break; |
| 3865 | 3922 | default: |
| ... | ... | @@ -3869,7 +3926,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3869 | 3926 | case 4: |
| 3870 | 3927 | switch (sel) { |
| 3871 | 3928 | case 0: |
| 3872 | - gen_op_dmfc0_context(); | |
| 3929 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_Context)); | |
| 3873 | 3930 | rn = "Context"; |
| 3874 | 3931 | break; |
| 3875 | 3932 | case 1: |
| ... | ... | @@ -3883,12 +3940,14 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3883 | 3940 | case 5: |
| 3884 | 3941 | switch (sel) { |
| 3885 | 3942 | case 0: |
| 3886 | - gen_op_mfc0_pagemask(); | |
| 3943 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PageMask)); | |
| 3944 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3887 | 3945 | rn = "PageMask"; |
| 3888 | 3946 | break; |
| 3889 | 3947 | case 1: |
| 3890 | 3948 | check_insn(env, ctx, ISA_MIPS32R2); |
| 3891 | - gen_op_mfc0_pagegrain(); | |
| 3949 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PageGrain)); | |
| 3950 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3892 | 3951 | rn = "PageGrain"; |
| 3893 | 3952 | break; |
| 3894 | 3953 | default: |
| ... | ... | @@ -3898,32 +3957,38 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3898 | 3957 | case 6: |
| 3899 | 3958 | switch (sel) { |
| 3900 | 3959 | case 0: |
| 3901 | - gen_op_mfc0_wired(); | |
| 3960 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Wired)); | |
| 3961 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3902 | 3962 | rn = "Wired"; |
| 3903 | 3963 | break; |
| 3904 | 3964 | case 1: |
| 3905 | 3965 | check_insn(env, ctx, ISA_MIPS32R2); |
| 3906 | - gen_op_mfc0_srsconf0(); | |
| 3966 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf0)); | |
| 3967 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3907 | 3968 | rn = "SRSConf0"; |
| 3908 | 3969 | break; |
| 3909 | 3970 | case 2: |
| 3910 | 3971 | check_insn(env, ctx, ISA_MIPS32R2); |
| 3911 | - gen_op_mfc0_srsconf1(); | |
| 3972 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf1)); | |
| 3973 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3912 | 3974 | rn = "SRSConf1"; |
| 3913 | 3975 | break; |
| 3914 | 3976 | case 3: |
| 3915 | 3977 | check_insn(env, ctx, ISA_MIPS32R2); |
| 3916 | - gen_op_mfc0_srsconf2(); | |
| 3978 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf2)); | |
| 3979 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3917 | 3980 | rn = "SRSConf2"; |
| 3918 | 3981 | break; |
| 3919 | 3982 | case 4: |
| 3920 | 3983 | check_insn(env, ctx, ISA_MIPS32R2); |
| 3921 | - gen_op_mfc0_srsconf3(); | |
| 3984 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf3)); | |
| 3985 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3922 | 3986 | rn = "SRSConf3"; |
| 3923 | 3987 | break; |
| 3924 | 3988 | case 5: |
| 3925 | 3989 | check_insn(env, ctx, ISA_MIPS32R2); |
| 3926 | - gen_op_mfc0_srsconf4(); | |
| 3990 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf4)); | |
| 3991 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3927 | 3992 | rn = "SRSConf4"; |
| 3928 | 3993 | break; |
| 3929 | 3994 | default: |
| ... | ... | @@ -3934,7 +3999,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3934 | 3999 | switch (sel) { |
| 3935 | 4000 | case 0: |
| 3936 | 4001 | check_insn(env, ctx, ISA_MIPS32R2); |
| 3937 | - gen_op_mfc0_hwrena(); | |
| 4002 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_HWREna)); | |
| 4003 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3938 | 4004 | rn = "HWREna"; |
| 3939 | 4005 | break; |
| 3940 | 4006 | default: |
| ... | ... | @@ -3944,8 +4010,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3944 | 4010 | case 8: |
| 3945 | 4011 | switch (sel) { |
| 3946 | 4012 | case 0: |
| 3947 | - gen_op_dmfc0_badvaddr(); | |
| 3948 | - rn = "BadVaddr"; | |
| 4013 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_BadVAddr)); | |
| 4014 | + rn = "BadVAddr"; | |
| 3949 | 4015 | break; |
| 3950 | 4016 | default: |
| 3951 | 4017 | goto die; |
| ... | ... | @@ -3965,7 +4031,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3965 | 4031 | case 10: |
| 3966 | 4032 | switch (sel) { |
| 3967 | 4033 | case 0: |
| 3968 | - gen_op_dmfc0_entryhi(); | |
| 4034 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryHi)); | |
| 3969 | 4035 | rn = "EntryHi"; |
| 3970 | 4036 | break; |
| 3971 | 4037 | default: |
| ... | ... | @@ -3975,7 +4041,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3975 | 4041 | case 11: |
| 3976 | 4042 | switch (sel) { |
| 3977 | 4043 | case 0: |
| 3978 | - gen_op_mfc0_compare(); | |
| 4044 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Compare)); | |
| 4045 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3979 | 4046 | rn = "Compare"; |
| 3980 | 4047 | break; |
| 3981 | 4048 | /* 6,7 are implementation dependent */ |
| ... | ... | @@ -3986,22 +4053,26 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3986 | 4053 | case 12: |
| 3987 | 4054 | switch (sel) { |
| 3988 | 4055 | case 0: |
| 3989 | - gen_op_mfc0_status(); | |
| 4056 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Status)); | |
| 4057 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3990 | 4058 | rn = "Status"; |
| 3991 | 4059 | break; |
| 3992 | 4060 | case 1: |
| 3993 | 4061 | check_insn(env, ctx, ISA_MIPS32R2); |
| 3994 | - gen_op_mfc0_intctl(); | |
| 4062 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_IntCtl)); | |
| 4063 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 3995 | 4064 | rn = "IntCtl"; |
| 3996 | 4065 | break; |
| 3997 | 4066 | case 2: |
| 3998 | 4067 | check_insn(env, ctx, ISA_MIPS32R2); |
| 3999 | - gen_op_mfc0_srsctl(); | |
| 4068 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSCtl)); | |
| 4069 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4000 | 4070 | rn = "SRSCtl"; |
| 4001 | 4071 | break; |
| 4002 | 4072 | case 3: |
| 4003 | 4073 | check_insn(env, ctx, ISA_MIPS32R2); |
| 4004 | - gen_op_mfc0_srsmap(); | |
| 4074 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSMap)); | |
| 4075 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4005 | 4076 | rn = "SRSMap"; |
| 4006 | 4077 | break; |
| 4007 | 4078 | default: |
| ... | ... | @@ -4011,7 +4082,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4011 | 4082 | case 13: |
| 4012 | 4083 | switch (sel) { |
| 4013 | 4084 | case 0: |
| 4014 | - gen_op_mfc0_cause(); | |
| 4085 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Cause)); | |
| 4086 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4015 | 4087 | rn = "Cause"; |
| 4016 | 4088 | break; |
| 4017 | 4089 | default: |
| ... | ... | @@ -4021,7 +4093,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4021 | 4093 | case 14: |
| 4022 | 4094 | switch (sel) { |
| 4023 | 4095 | case 0: |
| 4024 | - gen_op_dmfc0_epc(); | |
| 4096 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EPC)); | |
| 4025 | 4097 | rn = "EPC"; |
| 4026 | 4098 | break; |
| 4027 | 4099 | default: |
| ... | ... | @@ -4031,12 +4103,14 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4031 | 4103 | case 15: |
| 4032 | 4104 | switch (sel) { |
| 4033 | 4105 | case 0: |
| 4034 | - gen_op_mfc0_prid(); | |
| 4106 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PRid)); | |
| 4107 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4035 | 4108 | rn = "PRid"; |
| 4036 | 4109 | break; |
| 4037 | 4110 | case 1: |
| 4038 | 4111 | check_insn(env, ctx, ISA_MIPS32R2); |
| 4039 | - gen_op_mfc0_ebase(); | |
| 4112 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_EBase)); | |
| 4113 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4040 | 4114 | rn = "EBase"; |
| 4041 | 4115 | break; |
| 4042 | 4116 | default: |
| ... | ... | @@ -4046,22 +4120,36 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4046 | 4120 | case 16: |
| 4047 | 4121 | switch (sel) { |
| 4048 | 4122 | case 0: |
| 4049 | - gen_op_mfc0_config0(); | |
| 4123 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config0)); | |
| 4124 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4050 | 4125 | rn = "Config"; |
| 4051 | 4126 | break; |
| 4052 | 4127 | case 1: |
| 4053 | - gen_op_mfc0_config1(); | |
| 4128 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config1)); | |
| 4129 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4054 | 4130 | rn = "Config1"; |
| 4055 | 4131 | break; |
| 4056 | 4132 | case 2: |
| 4057 | - gen_op_mfc0_config2(); | |
| 4133 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config2)); | |
| 4134 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4058 | 4135 | rn = "Config2"; |
| 4059 | 4136 | break; |
| 4060 | 4137 | case 3: |
| 4061 | - gen_op_mfc0_config3(); | |
| 4138 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config3)); | |
| 4139 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4062 | 4140 | rn = "Config3"; |
| 4063 | 4141 | break; |
| 4064 | 4142 | /* 6,7 are implementation dependent */ |
| 4143 | + case 6: | |
| 4144 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config6)); | |
| 4145 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4146 | + rn = "Config6"; | |
| 4147 | + break; | |
| 4148 | + case 7: | |
| 4149 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config7)); | |
| 4150 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4151 | + rn = "Config7"; | |
| 4152 | + break; | |
| 4065 | 4153 | default: |
| 4066 | 4154 | goto die; |
| 4067 | 4155 | } |
| ... | ... | @@ -4100,7 +4188,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4100 | 4188 | switch (sel) { |
| 4101 | 4189 | case 0: |
| 4102 | 4190 | check_insn(env, ctx, ISA_MIPS3); |
| 4103 | - gen_op_dmfc0_xcontext(); | |
| 4191 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_XContext)); | |
| 4104 | 4192 | rn = "XContext"; |
| 4105 | 4193 | break; |
| 4106 | 4194 | default: |
| ... | ... | @@ -4111,7 +4199,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4111 | 4199 | /* Officially reserved, but sel 0 is used for R1x000 framemask */ |
| 4112 | 4200 | switch (sel) { |
| 4113 | 4201 | case 0: |
| 4114 | - gen_op_mfc0_framemask(); | |
| 4202 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Framemask)); | |
| 4203 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4115 | 4204 | rn = "Framemask"; |
| 4116 | 4205 | break; |
| 4117 | 4206 | default: |
| ... | ... | @@ -4151,7 +4240,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4151 | 4240 | case 24: |
| 4152 | 4241 | switch (sel) { |
| 4153 | 4242 | case 0: |
| 4154 | - gen_op_dmfc0_depc(); /* EJTAG support */ | |
| 4243 | + /* EJTAG support */ | |
| 4244 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_DEPC)); | |
| 4155 | 4245 | rn = "DEPC"; |
| 4156 | 4246 | break; |
| 4157 | 4247 | default: |
| ... | ... | @@ -4161,7 +4251,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4161 | 4251 | case 25: |
| 4162 | 4252 | switch (sel) { |
| 4163 | 4253 | case 0: |
| 4164 | - gen_op_mfc0_performance0(); | |
| 4254 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Performance0)); | |
| 4255 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4165 | 4256 | rn = "Performance0"; |
| 4166 | 4257 | break; |
| 4167 | 4258 | case 1: |
| ... | ... | @@ -4215,14 +4306,16 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4215 | 4306 | case 2: |
| 4216 | 4307 | case 4: |
| 4217 | 4308 | case 6: |
| 4218 | - gen_op_mfc0_taglo(); | |
| 4309 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_TagLo)); | |
| 4310 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4219 | 4311 | rn = "TagLo"; |
| 4220 | 4312 | break; |
| 4221 | 4313 | case 1: |
| 4222 | 4314 | case 3: |
| 4223 | 4315 | case 5: |
| 4224 | 4316 | case 7: |
| 4225 | - gen_op_mfc0_datalo(); | |
| 4317 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DataLo)); | |
| 4318 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4226 | 4319 | rn = "DataLo"; |
| 4227 | 4320 | break; |
| 4228 | 4321 | default: |
| ... | ... | @@ -4235,14 +4328,16 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4235 | 4328 | case 2: |
| 4236 | 4329 | case 4: |
| 4237 | 4330 | case 6: |
| 4238 | - gen_op_mfc0_taghi(); | |
| 4331 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_TagHi)); | |
| 4332 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4239 | 4333 | rn = "TagHi"; |
| 4240 | 4334 | break; |
| 4241 | 4335 | case 1: |
| 4242 | 4336 | case 3: |
| 4243 | 4337 | case 5: |
| 4244 | 4338 | case 7: |
| 4245 | - gen_op_mfc0_datahi(); | |
| 4339 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DataHi)); | |
| 4340 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4246 | 4341 | rn = "DataHi"; |
| 4247 | 4342 | break; |
| 4248 | 4343 | default: |
| ... | ... | @@ -4252,7 +4347,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4252 | 4347 | case 30: |
| 4253 | 4348 | switch (sel) { |
| 4254 | 4349 | case 0: |
| 4255 | - gen_op_dmfc0_errorepc(); | |
| 4350 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_ErrorEPC)); | |
| 4256 | 4351 | rn = "ErrorEPC"; |
| 4257 | 4352 | break; |
| 4258 | 4353 | default: |
| ... | ... | @@ -4262,7 +4357,9 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4262 | 4357 | case 31: |
| 4263 | 4358 | switch (sel) { |
| 4264 | 4359 | case 0: |
| 4265 | - gen_op_mfc0_desave(); /* EJTAG support */ | |
| 4360 | + /* EJTAG support */ | |
| 4361 | + tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DESAVE)); | |
| 4362 | + tcg_gen_ext_i32_tl(cpu_T[0], r_tmp); | |
| 4266 | 4363 | rn = "DESAVE"; |
| 4267 | 4364 | break; |
| 4268 | 4365 | default: |
| ... | ... | @@ -4500,7 +4597,7 @@ static void gen_dmtc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 4500 | 4597 | break; |
| 4501 | 4598 | case 8: |
| 4502 | 4599 | /* ignored */ |
| 4503 | - rn = "BadVaddr"; | |
| 4600 | + rn = "BadVAddr"; | |
| 4504 | 4601 | break; |
| 4505 | 4602 | case 9: |
| 4506 | 4603 | switch (sel) { | ... | ... |