Commit f0b3f3ae5d7002b2280c07619c45399ab4e80e2c

Authored by ths
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
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) {