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,12 +461,6 @@ void op_dmultu (void) | ||
| 461 | #endif | 461 | #endif |
| 462 | 462 | ||
| 463 | /* CP0 functions */ | 463 | /* CP0 functions */ |
| 464 | -void op_mfc0_index (void) | ||
| 465 | -{ | ||
| 466 | - T0 = env->CP0_Index; | ||
| 467 | - FORCE_RET(); | ||
| 468 | -} | ||
| 469 | - | ||
| 470 | void op_mfc0_mvpcontrol (void) | 464 | void op_mfc0_mvpcontrol (void) |
| 471 | { | 465 | { |
| 472 | T0 = env->mvp->CP0_MVPControl; | 466 | T0 = env->mvp->CP0_MVPControl; |
| @@ -491,54 +485,6 @@ void op_mfc0_random (void) | @@ -491,54 +485,6 @@ void op_mfc0_random (void) | ||
| 491 | FORCE_RET(); | 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 | void op_mfc0_tcstatus (void) | 488 | void op_mfc0_tcstatus (void) |
| 543 | { | 489 | { |
| 544 | T0 = env->CP0_TCStatus[env->current_tc]; | 490 | T0 = env->CP0_TCStatus[env->current_tc]; |
| @@ -637,90 +583,12 @@ void op_mftc0_tcschefback(void) | @@ -637,90 +583,12 @@ void op_mftc0_tcschefback(void) | ||
| 637 | FORCE_RET(); | 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 | void op_mfc0_count (void) | 586 | void op_mfc0_count (void) |
| 713 | { | 587 | { |
| 714 | CALL_FROM_TB0(do_mfc0_count); | 588 | CALL_FROM_TB0(do_mfc0_count); |
| 715 | FORCE_RET(); | 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 | void op_mftc0_entryhi(void) | 592 | void op_mftc0_entryhi(void) |
| 725 | { | 593 | { |
| 726 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 594 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
| @@ -729,18 +597,6 @@ void op_mftc0_entryhi(void) | @@ -729,18 +597,6 @@ void op_mftc0_entryhi(void) | ||
| 729 | FORCE_RET(); | 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 | void op_mftc0_status(void) | 600 | void op_mftc0_status(void) |
| 745 | { | 601 | { |
| 746 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); | 602 | int other_tc = env->CP0_VPEControl & (0xff << CP0VPECo_TargTC); |
| @@ -753,84 +609,6 @@ void op_mftc0_status(void) | @@ -753,84 +609,6 @@ void op_mftc0_status(void) | ||
| 753 | FORCE_RET(); | 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 | void op_mfc0_lladdr (void) | 612 | void op_mfc0_lladdr (void) |
| 835 | { | 613 | { |
| 836 | T0 = (int32_t)env->CP0_LLAddr >> 4; | 614 | T0 = (int32_t)env->CP0_LLAddr >> 4; |
| @@ -849,18 +627,6 @@ void op_mfc0_watchhi (void) | @@ -849,18 +627,6 @@ void op_mfc0_watchhi (void) | ||
| 849 | FORCE_RET(); | 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 | void op_mfc0_debug (void) | 630 | void op_mfc0_debug (void) |
| 865 | { | 631 | { |
| 866 | T0 = env->CP0_Debug; | 632 | T0 = env->CP0_Debug; |
| @@ -880,54 +646,6 @@ void op_mftc0_debug(void) | @@ -880,54 +646,6 @@ void op_mftc0_debug(void) | ||
| 880 | FORCE_RET(); | 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 | void op_mtc0_index (void) | 649 | void op_mtc0_index (void) |
| 932 | { | 650 | { |
| 933 | int num = 1; | 651 | int num = 1; |
| @@ -1488,30 +1206,6 @@ void op_mtc0_desave (void) | @@ -1488,30 +1206,6 @@ void op_mtc0_desave (void) | ||
| 1488 | } | 1206 | } |
| 1489 | 1207 | ||
| 1490 | #if defined(TARGET_MIPS64) | 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 | void op_dmfc0_tcrestart (void) | 1209 | void op_dmfc0_tcrestart (void) |
| 1516 | { | 1210 | { |
| 1517 | T0 = env->PC[env->current_tc]; | 1211 | T0 = env->PC[env->current_tc]; |
| @@ -1542,36 +1236,6 @@ void op_dmfc0_tcschefback (void) | @@ -1542,36 +1236,6 @@ void op_dmfc0_tcschefback (void) | ||
| 1542 | FORCE_RET(); | 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 | void op_dmfc0_lladdr (void) | 1239 | void op_dmfc0_lladdr (void) |
| 1576 | { | 1240 | { |
| 1577 | T0 = env->CP0_LLAddr >> 4; | 1241 | T0 = env->CP0_LLAddr >> 4; |
| @@ -1583,24 +1247,6 @@ void op_dmfc0_watchlo (void) | @@ -1583,24 +1247,6 @@ void op_dmfc0_watchlo (void) | ||
| 1583 | T0 = env->CP0_WatchLo[PARAM1]; | 1247 | T0 = env->CP0_WatchLo[PARAM1]; |
| 1584 | FORCE_RET(); | 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 | #endif /* TARGET_MIPS64 */ | 1250 | #endif /* TARGET_MIPS64 */ |
| 1605 | 1251 | ||
| 1606 | /* MIPS MT functions */ | 1252 | /* MIPS MT functions */ |
target-mips/translate.c
| @@ -997,7 +997,7 @@ void inline op_ldst_##insn(DisasContext *ctx) \ | @@ -997,7 +997,7 @@ void inline op_ldst_##insn(DisasContext *ctx) \ | ||
| 997 | tcg_gen_andi_tl(r_tmp, cpu_T[0], almask); \ | 997 | tcg_gen_andi_tl(r_tmp, cpu_T[0], almask); \ |
| 998 | tcg_gen_brcond_tl(TCG_COND_EQ, r_tmp, tcg_const_tl(0), l1); \ | 998 | tcg_gen_brcond_tl(TCG_COND_EQ, r_tmp, tcg_const_tl(0), l1); \ |
| 999 | tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_BadVAddr)); \ | 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 | gen_set_label(l1); \ | 1001 | gen_set_label(l1); \ |
| 1002 | tcg_gen_ld_tl(r_tmp, cpu_env, offsetof(CPUState, CP0_LLAddr)); \ | 1002 | tcg_gen_ld_tl(r_tmp, cpu_env, offsetof(CPUState, CP0_LLAddr)); \ |
| 1003 | tcg_gen_brcond_tl(TCG_COND_NE, cpu_T[0], r_tmp, l2); \ | 1003 | tcg_gen_brcond_tl(TCG_COND_NE, cpu_T[0], r_tmp, l2); \ |
| @@ -2568,6 +2568,8 @@ fail: | @@ -2568,6 +2568,8 @@ fail: | ||
| 2568 | static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | 2568 | static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 2569 | { | 2569 | { |
| 2570 | const char *rn = "invalid"; | 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 | if (sel != 0) | 2574 | if (sel != 0) |
| 2573 | check_insn(env, ctx, ISA_MIPS32); | 2575 | check_insn(env, ctx, ISA_MIPS32); |
| @@ -2576,7 +2578,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2576,7 +2578,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2576 | case 0: | 2578 | case 0: |
| 2577 | switch (sel) { | 2579 | switch (sel) { |
| 2578 | case 0: | 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 | rn = "Index"; | 2583 | rn = "Index"; |
| 2581 | break; | 2584 | break; |
| 2582 | case 1: | 2585 | case 1: |
| @@ -2606,37 +2609,44 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2606,37 +2609,44 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2606 | break; | 2609 | break; |
| 2607 | case 1: | 2610 | case 1: |
| 2608 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEControl"; | 2614 | rn = "VPEControl"; |
| 2611 | break; | 2615 | break; |
| 2612 | case 2: | 2616 | case 2: |
| 2613 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEConf0"; | 2620 | rn = "VPEConf0"; |
| 2616 | break; | 2621 | break; |
| 2617 | case 3: | 2622 | case 3: |
| 2618 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEConf1"; | 2626 | rn = "VPEConf1"; |
| 2621 | break; | 2627 | break; |
| 2622 | case 4: | 2628 | case 4: |
| 2623 | check_insn(env, ctx, ASE_MT); | 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 | rn = "YQMask"; | 2632 | rn = "YQMask"; |
| 2626 | break; | 2633 | break; |
| 2627 | case 5: | 2634 | case 5: |
| 2628 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPESchedule"; | 2638 | rn = "VPESchedule"; |
| 2631 | break; | 2639 | break; |
| 2632 | case 6: | 2640 | case 6: |
| 2633 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEScheFBack"; | 2644 | rn = "VPEScheFBack"; |
| 2636 | break; | 2645 | break; |
| 2637 | case 7: | 2646 | case 7: |
| 2638 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEOpt"; | 2650 | rn = "VPEOpt"; |
| 2641 | break; | 2651 | break; |
| 2642 | default: | 2652 | default: |
| @@ -2646,7 +2656,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2646,7 +2656,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2646 | case 2: | 2656 | case 2: |
| 2647 | switch (sel) { | 2657 | switch (sel) { |
| 2648 | case 0: | 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 | rn = "EntryLo0"; | 2661 | rn = "EntryLo0"; |
| 2651 | break; | 2662 | break; |
| 2652 | case 1: | 2663 | case 1: |
| @@ -2691,7 +2702,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2691,7 +2702,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2691 | case 3: | 2702 | case 3: |
| 2692 | switch (sel) { | 2703 | switch (sel) { |
| 2693 | case 0: | 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 | rn = "EntryLo1"; | 2707 | rn = "EntryLo1"; |
| 2696 | break; | 2708 | break; |
| 2697 | default: | 2709 | default: |
| @@ -2701,7 +2713,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2701,7 +2713,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2701 | case 4: | 2713 | case 4: |
| 2702 | switch (sel) { | 2714 | switch (sel) { |
| 2703 | case 0: | 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 | rn = "Context"; | 2718 | rn = "Context"; |
| 2706 | break; | 2719 | break; |
| 2707 | case 1: | 2720 | case 1: |
| @@ -2715,12 +2728,14 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2715,12 +2728,14 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2715 | case 5: | 2728 | case 5: |
| 2716 | switch (sel) { | 2729 | switch (sel) { |
| 2717 | case 0: | 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 | rn = "PageMask"; | 2733 | rn = "PageMask"; |
| 2720 | break; | 2734 | break; |
| 2721 | case 1: | 2735 | case 1: |
| 2722 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "PageGrain"; | 2739 | rn = "PageGrain"; |
| 2725 | break; | 2740 | break; |
| 2726 | default: | 2741 | default: |
| @@ -2730,32 +2745,38 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2730,32 +2745,38 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2730 | case 6: | 2745 | case 6: |
| 2731 | switch (sel) { | 2746 | switch (sel) { |
| 2732 | case 0: | 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 | rn = "Wired"; | 2750 | rn = "Wired"; |
| 2735 | break; | 2751 | break; |
| 2736 | case 1: | 2752 | case 1: |
| 2737 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf0"; | 2756 | rn = "SRSConf0"; |
| 2740 | break; | 2757 | break; |
| 2741 | case 2: | 2758 | case 2: |
| 2742 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf1"; | 2762 | rn = "SRSConf1"; |
| 2745 | break; | 2763 | break; |
| 2746 | case 3: | 2764 | case 3: |
| 2747 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf2"; | 2768 | rn = "SRSConf2"; |
| 2750 | break; | 2769 | break; |
| 2751 | case 4: | 2770 | case 4: |
| 2752 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf3"; | 2774 | rn = "SRSConf3"; |
| 2755 | break; | 2775 | break; |
| 2756 | case 5: | 2776 | case 5: |
| 2757 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf4"; | 2780 | rn = "SRSConf4"; |
| 2760 | break; | 2781 | break; |
| 2761 | default: | 2782 | default: |
| @@ -2766,7 +2787,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2766,7 +2787,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2766 | switch (sel) { | 2787 | switch (sel) { |
| 2767 | case 0: | 2788 | case 0: |
| 2768 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "HWREna"; | 2792 | rn = "HWREna"; |
| 2771 | break; | 2793 | break; |
| 2772 | default: | 2794 | default: |
| @@ -2776,8 +2798,9 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2776,8 +2798,9 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2776 | case 8: | 2798 | case 8: |
| 2777 | switch (sel) { | 2799 | switch (sel) { |
| 2778 | case 0: | 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 | break; | 2804 | break; |
| 2782 | default: | 2805 | default: |
| 2783 | goto die; | 2806 | goto die; |
| @@ -2797,7 +2820,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2797,7 +2820,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2797 | case 10: | 2820 | case 10: |
| 2798 | switch (sel) { | 2821 | switch (sel) { |
| 2799 | case 0: | 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 | rn = "EntryHi"; | 2825 | rn = "EntryHi"; |
| 2802 | break; | 2826 | break; |
| 2803 | default: | 2827 | default: |
| @@ -2807,7 +2831,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2807,7 +2831,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2807 | case 11: | 2831 | case 11: |
| 2808 | switch (sel) { | 2832 | switch (sel) { |
| 2809 | case 0: | 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 | rn = "Compare"; | 2836 | rn = "Compare"; |
| 2812 | break; | 2837 | break; |
| 2813 | /* 6,7 are implementation dependent */ | 2838 | /* 6,7 are implementation dependent */ |
| @@ -2818,22 +2843,26 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2818,22 +2843,26 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2818 | case 12: | 2843 | case 12: |
| 2819 | switch (sel) { | 2844 | switch (sel) { |
| 2820 | case 0: | 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 | rn = "Status"; | 2848 | rn = "Status"; |
| 2823 | break; | 2849 | break; |
| 2824 | case 1: | 2850 | case 1: |
| 2825 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "IntCtl"; | 2854 | rn = "IntCtl"; |
| 2828 | break; | 2855 | break; |
| 2829 | case 2: | 2856 | case 2: |
| 2830 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSCtl"; | 2860 | rn = "SRSCtl"; |
| 2833 | break; | 2861 | break; |
| 2834 | case 3: | 2862 | case 3: |
| 2835 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSMap"; | 2866 | rn = "SRSMap"; |
| 2838 | break; | 2867 | break; |
| 2839 | default: | 2868 | default: |
| @@ -2843,7 +2872,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2843,7 +2872,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2843 | case 13: | 2872 | case 13: |
| 2844 | switch (sel) { | 2873 | switch (sel) { |
| 2845 | case 0: | 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 | rn = "Cause"; | 2877 | rn = "Cause"; |
| 2848 | break; | 2878 | break; |
| 2849 | default: | 2879 | default: |
| @@ -2853,7 +2883,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2853,7 +2883,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2853 | case 14: | 2883 | case 14: |
| 2854 | switch (sel) { | 2884 | switch (sel) { |
| 2855 | case 0: | 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 | rn = "EPC"; | 2888 | rn = "EPC"; |
| 2858 | break; | 2889 | break; |
| 2859 | default: | 2890 | default: |
| @@ -2863,12 +2894,14 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2863,12 +2894,14 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2863 | case 15: | 2894 | case 15: |
| 2864 | switch (sel) { | 2895 | switch (sel) { |
| 2865 | case 0: | 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 | rn = "PRid"; | 2899 | rn = "PRid"; |
| 2868 | break; | 2900 | break; |
| 2869 | case 1: | 2901 | case 1: |
| 2870 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "EBase"; | 2905 | rn = "EBase"; |
| 2873 | break; | 2906 | break; |
| 2874 | default: | 2907 | default: |
| @@ -2878,29 +2911,35 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2878,29 +2911,35 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2878 | case 16: | 2911 | case 16: |
| 2879 | switch (sel) { | 2912 | switch (sel) { |
| 2880 | case 0: | 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 | rn = "Config"; | 2916 | rn = "Config"; |
| 2883 | break; | 2917 | break; |
| 2884 | case 1: | 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 | rn = "Config1"; | 2921 | rn = "Config1"; |
| 2887 | break; | 2922 | break; |
| 2888 | case 2: | 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 | rn = "Config2"; | 2926 | rn = "Config2"; |
| 2891 | break; | 2927 | break; |
| 2892 | case 3: | 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 | rn = "Config3"; | 2931 | rn = "Config3"; |
| 2895 | break; | 2932 | break; |
| 2896 | /* 4,5 are reserved */ | 2933 | /* 4,5 are reserved */ |
| 2897 | /* 6,7 are implementation dependent */ | 2934 | /* 6,7 are implementation dependent */ |
| 2898 | case 6: | 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 | rn = "Config6"; | 2938 | rn = "Config6"; |
| 2901 | break; | 2939 | break; |
| 2902 | case 7: | 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 | rn = "Config7"; | 2943 | rn = "Config7"; |
| 2905 | break; | 2944 | break; |
| 2906 | default: | 2945 | default: |
| @@ -2942,7 +2981,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2942,7 +2981,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2942 | case 0: | 2981 | case 0: |
| 2943 | #if defined(TARGET_MIPS64) | 2982 | #if defined(TARGET_MIPS64) |
| 2944 | check_insn(env, ctx, ISA_MIPS3); | 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 | rn = "XContext"; | 2986 | rn = "XContext"; |
| 2947 | break; | 2987 | break; |
| 2948 | #endif | 2988 | #endif |
| @@ -2954,7 +2994,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2954,7 +2994,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2954 | /* Officially reserved, but sel 0 is used for R1x000 framemask */ | 2994 | /* Officially reserved, but sel 0 is used for R1x000 framemask */ |
| 2955 | switch (sel) { | 2995 | switch (sel) { |
| 2956 | case 0: | 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 | rn = "Framemask"; | 2999 | rn = "Framemask"; |
| 2959 | break; | 3000 | break; |
| 2960 | default: | 3001 | default: |
| @@ -2994,7 +3035,9 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -2994,7 +3035,9 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 2994 | case 24: | 3035 | case 24: |
| 2995 | switch (sel) { | 3036 | switch (sel) { |
| 2996 | case 0: | 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 | rn = "DEPC"; | 3041 | rn = "DEPC"; |
| 2999 | break; | 3042 | break; |
| 3000 | default: | 3043 | default: |
| @@ -3004,7 +3047,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3004,7 +3047,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3004 | case 25: | 3047 | case 25: |
| 3005 | switch (sel) { | 3048 | switch (sel) { |
| 3006 | case 0: | 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 | rn = "Performance0"; | 3052 | rn = "Performance0"; |
| 3009 | break; | 3053 | break; |
| 3010 | case 1: | 3054 | case 1: |
| @@ -3058,14 +3102,16 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3058,14 +3102,16 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3058 | case 2: | 3102 | case 2: |
| 3059 | case 4: | 3103 | case 4: |
| 3060 | case 6: | 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 | rn = "TagLo"; | 3107 | rn = "TagLo"; |
| 3063 | break; | 3108 | break; |
| 3064 | case 1: | 3109 | case 1: |
| 3065 | case 3: | 3110 | case 3: |
| 3066 | case 5: | 3111 | case 5: |
| 3067 | case 7: | 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 | rn = "DataLo"; | 3115 | rn = "DataLo"; |
| 3070 | break; | 3116 | break; |
| 3071 | default: | 3117 | default: |
| @@ -3078,14 +3124,16 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3078,14 +3124,16 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3078 | case 2: | 3124 | case 2: |
| 3079 | case 4: | 3125 | case 4: |
| 3080 | case 6: | 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 | rn = "TagHi"; | 3129 | rn = "TagHi"; |
| 3083 | break; | 3130 | break; |
| 3084 | case 1: | 3131 | case 1: |
| 3085 | case 3: | 3132 | case 3: |
| 3086 | case 5: | 3133 | case 5: |
| 3087 | case 7: | 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 | rn = "DataHi"; | 3137 | rn = "DataHi"; |
| 3090 | break; | 3138 | break; |
| 3091 | default: | 3139 | default: |
| @@ -3095,7 +3143,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3095,7 +3143,8 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3095 | case 30: | 3143 | case 30: |
| 3096 | switch (sel) { | 3144 | switch (sel) { |
| 3097 | case 0: | 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 | rn = "ErrorEPC"; | 3148 | rn = "ErrorEPC"; |
| 3100 | break; | 3149 | break; |
| 3101 | default: | 3150 | default: |
| @@ -3105,7 +3154,9 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3105,7 +3154,9 @@ static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3105 | case 31: | 3154 | case 31: |
| 3106 | switch (sel) { | 3155 | switch (sel) { |
| 3107 | case 0: | 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 | rn = "DESAVE"; | 3160 | rn = "DESAVE"; |
| 3110 | break; | 3161 | break; |
| 3111 | default: | 3162 | default: |
| @@ -3343,7 +3394,7 @@ static void gen_mtc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3343,7 +3394,7 @@ static void gen_mtc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3343 | break; | 3394 | break; |
| 3344 | case 8: | 3395 | case 8: |
| 3345 | /* ignored */ | 3396 | /* ignored */ |
| 3346 | - rn = "BadVaddr"; | 3397 | + rn = "BadVAddr"; |
| 3347 | break; | 3398 | break; |
| 3348 | case 9: | 3399 | case 9: |
| 3349 | switch (sel) { | 3400 | switch (sel) { |
| @@ -3736,6 +3787,7 @@ die: | @@ -3736,6 +3787,7 @@ die: | ||
| 3736 | static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | 3787 | static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) |
| 3737 | { | 3788 | { |
| 3738 | const char *rn = "invalid"; | 3789 | const char *rn = "invalid"; |
| 3790 | + TCGv r_tmp = tcg_temp_new(TCG_TYPE_I32); | ||
| 3739 | 3791 | ||
| 3740 | if (sel != 0) | 3792 | if (sel != 0) |
| 3741 | check_insn(env, ctx, ISA_MIPS64); | 3793 | check_insn(env, ctx, ISA_MIPS64); |
| @@ -3744,7 +3796,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3744,7 +3796,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3744 | case 0: | 3796 | case 0: |
| 3745 | switch (sel) { | 3797 | switch (sel) { |
| 3746 | case 0: | 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 | rn = "Index"; | 3801 | rn = "Index"; |
| 3749 | break; | 3802 | break; |
| 3750 | case 1: | 3803 | case 1: |
| @@ -3774,37 +3827,41 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3774,37 +3827,41 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3774 | break; | 3827 | break; |
| 3775 | case 1: | 3828 | case 1: |
| 3776 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEControl"; | 3832 | rn = "VPEControl"; |
| 3779 | break; | 3833 | break; |
| 3780 | case 2: | 3834 | case 2: |
| 3781 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEConf0"; | 3838 | rn = "VPEConf0"; |
| 3784 | break; | 3839 | break; |
| 3785 | case 3: | 3840 | case 3: |
| 3786 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEConf1"; | 3844 | rn = "VPEConf1"; |
| 3789 | break; | 3845 | break; |
| 3790 | case 4: | 3846 | case 4: |
| 3791 | check_insn(env, ctx, ASE_MT); | 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 | rn = "YQMask"; | 3849 | rn = "YQMask"; |
| 3794 | break; | 3850 | break; |
| 3795 | case 5: | 3851 | case 5: |
| 3796 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPESchedule"; | 3854 | rn = "VPESchedule"; |
| 3799 | break; | 3855 | break; |
| 3800 | case 6: | 3856 | case 6: |
| 3801 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEScheFBack"; | 3859 | rn = "VPEScheFBack"; |
| 3804 | break; | 3860 | break; |
| 3805 | case 7: | 3861 | case 7: |
| 3806 | check_insn(env, ctx, ASE_MT); | 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 | rn = "VPEOpt"; | 3865 | rn = "VPEOpt"; |
| 3809 | break; | 3866 | break; |
| 3810 | default: | 3867 | default: |
| @@ -3814,7 +3871,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3814,7 +3871,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3814 | case 2: | 3871 | case 2: |
| 3815 | switch (sel) { | 3872 | switch (sel) { |
| 3816 | case 0: | 3873 | case 0: |
| 3817 | - gen_op_dmfc0_entrylo0(); | 3874 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo0)); |
| 3818 | rn = "EntryLo0"; | 3875 | rn = "EntryLo0"; |
| 3819 | break; | 3876 | break; |
| 3820 | case 1: | 3877 | case 1: |
| @@ -3859,7 +3916,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3859,7 +3916,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3859 | case 3: | 3916 | case 3: |
| 3860 | switch (sel) { | 3917 | switch (sel) { |
| 3861 | case 0: | 3918 | case 0: |
| 3862 | - gen_op_dmfc0_entrylo1(); | 3919 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo1)); |
| 3863 | rn = "EntryLo1"; | 3920 | rn = "EntryLo1"; |
| 3864 | break; | 3921 | break; |
| 3865 | default: | 3922 | default: |
| @@ -3869,7 +3926,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3869,7 +3926,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3869 | case 4: | 3926 | case 4: |
| 3870 | switch (sel) { | 3927 | switch (sel) { |
| 3871 | case 0: | 3928 | case 0: |
| 3872 | - gen_op_dmfc0_context(); | 3929 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_Context)); |
| 3873 | rn = "Context"; | 3930 | rn = "Context"; |
| 3874 | break; | 3931 | break; |
| 3875 | case 1: | 3932 | case 1: |
| @@ -3883,12 +3940,14 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3883,12 +3940,14 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3883 | case 5: | 3940 | case 5: |
| 3884 | switch (sel) { | 3941 | switch (sel) { |
| 3885 | case 0: | 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 | rn = "PageMask"; | 3945 | rn = "PageMask"; |
| 3888 | break; | 3946 | break; |
| 3889 | case 1: | 3947 | case 1: |
| 3890 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "PageGrain"; | 3951 | rn = "PageGrain"; |
| 3893 | break; | 3952 | break; |
| 3894 | default: | 3953 | default: |
| @@ -3898,32 +3957,38 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3898,32 +3957,38 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3898 | case 6: | 3957 | case 6: |
| 3899 | switch (sel) { | 3958 | switch (sel) { |
| 3900 | case 0: | 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 | rn = "Wired"; | 3962 | rn = "Wired"; |
| 3903 | break; | 3963 | break; |
| 3904 | case 1: | 3964 | case 1: |
| 3905 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf0"; | 3968 | rn = "SRSConf0"; |
| 3908 | break; | 3969 | break; |
| 3909 | case 2: | 3970 | case 2: |
| 3910 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf1"; | 3974 | rn = "SRSConf1"; |
| 3913 | break; | 3975 | break; |
| 3914 | case 3: | 3976 | case 3: |
| 3915 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf2"; | 3980 | rn = "SRSConf2"; |
| 3918 | break; | 3981 | break; |
| 3919 | case 4: | 3982 | case 4: |
| 3920 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf3"; | 3986 | rn = "SRSConf3"; |
| 3923 | break; | 3987 | break; |
| 3924 | case 5: | 3988 | case 5: |
| 3925 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSConf4"; | 3992 | rn = "SRSConf4"; |
| 3928 | break; | 3993 | break; |
| 3929 | default: | 3994 | default: |
| @@ -3934,7 +3999,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3934,7 +3999,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3934 | switch (sel) { | 3999 | switch (sel) { |
| 3935 | case 0: | 4000 | case 0: |
| 3936 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "HWREna"; | 4004 | rn = "HWREna"; |
| 3939 | break; | 4005 | break; |
| 3940 | default: | 4006 | default: |
| @@ -3944,8 +4010,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3944,8 +4010,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3944 | case 8: | 4010 | case 8: |
| 3945 | switch (sel) { | 4011 | switch (sel) { |
| 3946 | case 0: | 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 | break; | 4015 | break; |
| 3950 | default: | 4016 | default: |
| 3951 | goto die; | 4017 | goto die; |
| @@ -3965,7 +4031,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3965,7 +4031,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3965 | case 10: | 4031 | case 10: |
| 3966 | switch (sel) { | 4032 | switch (sel) { |
| 3967 | case 0: | 4033 | case 0: |
| 3968 | - gen_op_dmfc0_entryhi(); | 4034 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryHi)); |
| 3969 | rn = "EntryHi"; | 4035 | rn = "EntryHi"; |
| 3970 | break; | 4036 | break; |
| 3971 | default: | 4037 | default: |
| @@ -3975,7 +4041,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3975,7 +4041,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3975 | case 11: | 4041 | case 11: |
| 3976 | switch (sel) { | 4042 | switch (sel) { |
| 3977 | case 0: | 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 | rn = "Compare"; | 4046 | rn = "Compare"; |
| 3980 | break; | 4047 | break; |
| 3981 | /* 6,7 are implementation dependent */ | 4048 | /* 6,7 are implementation dependent */ |
| @@ -3986,22 +4053,26 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -3986,22 +4053,26 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 3986 | case 12: | 4053 | case 12: |
| 3987 | switch (sel) { | 4054 | switch (sel) { |
| 3988 | case 0: | 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 | rn = "Status"; | 4058 | rn = "Status"; |
| 3991 | break; | 4059 | break; |
| 3992 | case 1: | 4060 | case 1: |
| 3993 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "IntCtl"; | 4064 | rn = "IntCtl"; |
| 3996 | break; | 4065 | break; |
| 3997 | case 2: | 4066 | case 2: |
| 3998 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSCtl"; | 4070 | rn = "SRSCtl"; |
| 4001 | break; | 4071 | break; |
| 4002 | case 3: | 4072 | case 3: |
| 4003 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "SRSMap"; | 4076 | rn = "SRSMap"; |
| 4006 | break; | 4077 | break; |
| 4007 | default: | 4078 | default: |
| @@ -4011,7 +4082,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4011,7 +4082,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4011 | case 13: | 4082 | case 13: |
| 4012 | switch (sel) { | 4083 | switch (sel) { |
| 4013 | case 0: | 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 | rn = "Cause"; | 4087 | rn = "Cause"; |
| 4016 | break; | 4088 | break; |
| 4017 | default: | 4089 | default: |
| @@ -4021,7 +4093,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4021,7 +4093,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4021 | case 14: | 4093 | case 14: |
| 4022 | switch (sel) { | 4094 | switch (sel) { |
| 4023 | case 0: | 4095 | case 0: |
| 4024 | - gen_op_dmfc0_epc(); | 4096 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EPC)); |
| 4025 | rn = "EPC"; | 4097 | rn = "EPC"; |
| 4026 | break; | 4098 | break; |
| 4027 | default: | 4099 | default: |
| @@ -4031,12 +4103,14 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4031,12 +4103,14 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4031 | case 15: | 4103 | case 15: |
| 4032 | switch (sel) { | 4104 | switch (sel) { |
| 4033 | case 0: | 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 | rn = "PRid"; | 4108 | rn = "PRid"; |
| 4036 | break; | 4109 | break; |
| 4037 | case 1: | 4110 | case 1: |
| 4038 | check_insn(env, ctx, ISA_MIPS32R2); | 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 | rn = "EBase"; | 4114 | rn = "EBase"; |
| 4041 | break; | 4115 | break; |
| 4042 | default: | 4116 | default: |
| @@ -4046,22 +4120,36 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4046,22 +4120,36 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4046 | case 16: | 4120 | case 16: |
| 4047 | switch (sel) { | 4121 | switch (sel) { |
| 4048 | case 0: | 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 | rn = "Config"; | 4125 | rn = "Config"; |
| 4051 | break; | 4126 | break; |
| 4052 | case 1: | 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 | rn = "Config1"; | 4130 | rn = "Config1"; |
| 4055 | break; | 4131 | break; |
| 4056 | case 2: | 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 | rn = "Config2"; | 4135 | rn = "Config2"; |
| 4059 | break; | 4136 | break; |
| 4060 | case 3: | 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 | rn = "Config3"; | 4140 | rn = "Config3"; |
| 4063 | break; | 4141 | break; |
| 4064 | /* 6,7 are implementation dependent */ | 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 | default: | 4153 | default: |
| 4066 | goto die; | 4154 | goto die; |
| 4067 | } | 4155 | } |
| @@ -4100,7 +4188,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4100,7 +4188,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4100 | switch (sel) { | 4188 | switch (sel) { |
| 4101 | case 0: | 4189 | case 0: |
| 4102 | check_insn(env, ctx, ISA_MIPS3); | 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 | rn = "XContext"; | 4192 | rn = "XContext"; |
| 4105 | break; | 4193 | break; |
| 4106 | default: | 4194 | default: |
| @@ -4111,7 +4199,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4111,7 +4199,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4111 | /* Officially reserved, but sel 0 is used for R1x000 framemask */ | 4199 | /* Officially reserved, but sel 0 is used for R1x000 framemask */ |
| 4112 | switch (sel) { | 4200 | switch (sel) { |
| 4113 | case 0: | 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 | rn = "Framemask"; | 4204 | rn = "Framemask"; |
| 4116 | break; | 4205 | break; |
| 4117 | default: | 4206 | default: |
| @@ -4151,7 +4240,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4151,7 +4240,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4151 | case 24: | 4240 | case 24: |
| 4152 | switch (sel) { | 4241 | switch (sel) { |
| 4153 | case 0: | 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 | rn = "DEPC"; | 4245 | rn = "DEPC"; |
| 4156 | break; | 4246 | break; |
| 4157 | default: | 4247 | default: |
| @@ -4161,7 +4251,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4161,7 +4251,8 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4161 | case 25: | 4251 | case 25: |
| 4162 | switch (sel) { | 4252 | switch (sel) { |
| 4163 | case 0: | 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 | rn = "Performance0"; | 4256 | rn = "Performance0"; |
| 4166 | break; | 4257 | break; |
| 4167 | case 1: | 4258 | case 1: |
| @@ -4215,14 +4306,16 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4215,14 +4306,16 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4215 | case 2: | 4306 | case 2: |
| 4216 | case 4: | 4307 | case 4: |
| 4217 | case 6: | 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 | rn = "TagLo"; | 4311 | rn = "TagLo"; |
| 4220 | break; | 4312 | break; |
| 4221 | case 1: | 4313 | case 1: |
| 4222 | case 3: | 4314 | case 3: |
| 4223 | case 5: | 4315 | case 5: |
| 4224 | case 7: | 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 | rn = "DataLo"; | 4319 | rn = "DataLo"; |
| 4227 | break; | 4320 | break; |
| 4228 | default: | 4321 | default: |
| @@ -4235,14 +4328,16 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4235,14 +4328,16 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4235 | case 2: | 4328 | case 2: |
| 4236 | case 4: | 4329 | case 4: |
| 4237 | case 6: | 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 | rn = "TagHi"; | 4333 | rn = "TagHi"; |
| 4240 | break; | 4334 | break; |
| 4241 | case 1: | 4335 | case 1: |
| 4242 | case 3: | 4336 | case 3: |
| 4243 | case 5: | 4337 | case 5: |
| 4244 | case 7: | 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 | rn = "DataHi"; | 4341 | rn = "DataHi"; |
| 4247 | break; | 4342 | break; |
| 4248 | default: | 4343 | default: |
| @@ -4252,7 +4347,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4252,7 +4347,7 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4252 | case 30: | 4347 | case 30: |
| 4253 | switch (sel) { | 4348 | switch (sel) { |
| 4254 | case 0: | 4349 | case 0: |
| 4255 | - gen_op_dmfc0_errorepc(); | 4350 | + tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_ErrorEPC)); |
| 4256 | rn = "ErrorEPC"; | 4351 | rn = "ErrorEPC"; |
| 4257 | break; | 4352 | break; |
| 4258 | default: | 4353 | default: |
| @@ -4262,7 +4357,9 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4262,7 +4357,9 @@ static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4262 | case 31: | 4357 | case 31: |
| 4263 | switch (sel) { | 4358 | switch (sel) { |
| 4264 | case 0: | 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 | rn = "DESAVE"; | 4363 | rn = "DESAVE"; |
| 4267 | break; | 4364 | break; |
| 4268 | default: | 4365 | default: |
| @@ -4500,7 +4597,7 @@ static void gen_dmtc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | @@ -4500,7 +4597,7 @@ static void gen_dmtc0 (CPUState *env, DisasContext *ctx, int reg, int sel) | ||
| 4500 | break; | 4597 | break; |
| 4501 | case 8: | 4598 | case 8: |
| 4502 | /* ignored */ | 4599 | /* ignored */ |
| 4503 | - rn = "BadVaddr"; | 4600 | + rn = "BadVAddr"; |
| 4504 | break; | 4601 | break; |
| 4505 | case 9: | 4602 | case 9: |
| 4506 | switch (sel) { | 4603 | switch (sel) { |