997 |
997 |
tcg_gen_andi_tl(r_tmp, cpu_T[0], almask); \
|
998 |
998 |
tcg_gen_brcond_tl(TCG_COND_EQ, r_tmp, tcg_const_tl(0), l1); \
|
999 |
999 |
tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_BadVAddr)); \
|
1000 |
|
generate_exception(ctx, EXCP_AdES); \
|
|
1000 |
generate_exception(ctx, EXCP_AdES); \
|
1001 |
1001 |
gen_set_label(l1); \
|
1002 |
1002 |
tcg_gen_ld_tl(r_tmp, cpu_env, offsetof(CPUState, CP0_LLAddr)); \
|
1003 |
1003 |
tcg_gen_brcond_tl(TCG_COND_NE, cpu_T[0], r_tmp, l2); \
|
... | ... | |
2568 |
2568 |
static void gen_mfc0 (CPUState *env, DisasContext *ctx, int reg, int sel)
|
2569 |
2569 |
{
|
2570 |
2570 |
const char *rn = "invalid";
|
|
2571 |
TCGv r_tmp = tcg_temp_new(TCG_TYPE_I32);
|
|
2572 |
TCGv r_tmp64 = tcg_temp_new(TCG_TYPE_I64);
|
2571 |
2573 |
|
2572 |
2574 |
if (sel != 0)
|
2573 |
2575 |
check_insn(env, ctx, ISA_MIPS32);
|
... | ... | |
2576 |
2578 |
case 0:
|
2577 |
2579 |
switch (sel) {
|
2578 |
2580 |
case 0:
|
2579 |
|
gen_op_mfc0_index();
|
|
2581 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Index));
|
|
2582 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2580 |
2583 |
rn = "Index";
|
2581 |
2584 |
break;
|
2582 |
2585 |
case 1:
|
... | ... | |
2606 |
2609 |
break;
|
2607 |
2610 |
case 1:
|
2608 |
2611 |
check_insn(env, ctx, ASE_MT);
|
2609 |
|
gen_op_mfc0_vpecontrol();
|
|
2612 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEControl));
|
|
2613 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2610 |
2614 |
rn = "VPEControl";
|
2611 |
2615 |
break;
|
2612 |
2616 |
case 2:
|
2613 |
2617 |
check_insn(env, ctx, ASE_MT);
|
2614 |
|
gen_op_mfc0_vpeconf0();
|
|
2618 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEConf0));
|
|
2619 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2615 |
2620 |
rn = "VPEConf0";
|
2616 |
2621 |
break;
|
2617 |
2622 |
case 3:
|
2618 |
2623 |
check_insn(env, ctx, ASE_MT);
|
2619 |
|
gen_op_mfc0_vpeconf1();
|
|
2624 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEConf1));
|
|
2625 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2620 |
2626 |
rn = "VPEConf1";
|
2621 |
2627 |
break;
|
2622 |
2628 |
case 4:
|
2623 |
2629 |
check_insn(env, ctx, ASE_MT);
|
2624 |
|
gen_op_mfc0_yqmask();
|
|
2630 |
tcg_gen_ld_i64(r_tmp64, cpu_env, offsetof(CPUState, CP0_YQMask));
|
|
2631 |
tcg_gen_trunc_i64_tl(cpu_T[0], r_tmp64);
|
2625 |
2632 |
rn = "YQMask";
|
2626 |
2633 |
break;
|
2627 |
2634 |
case 5:
|
2628 |
2635 |
check_insn(env, ctx, ASE_MT);
|
2629 |
|
gen_op_mfc0_vpeschedule();
|
|
2636 |
tcg_gen_ld_tl(r_tmp64, cpu_env, offsetof(CPUState, CP0_VPESchedule));
|
|
2637 |
tcg_gen_trunc_i64_tl(cpu_T[0], r_tmp64);
|
2630 |
2638 |
rn = "VPESchedule";
|
2631 |
2639 |
break;
|
2632 |
2640 |
case 6:
|
2633 |
2641 |
check_insn(env, ctx, ASE_MT);
|
2634 |
|
gen_op_mfc0_vpeschefback();
|
|
2642 |
tcg_gen_ld_tl(r_tmp64, cpu_env, offsetof(CPUState, CP0_VPEScheFBack));
|
|
2643 |
tcg_gen_trunc_i64_tl(cpu_T[0], r_tmp64);
|
2635 |
2644 |
rn = "VPEScheFBack";
|
2636 |
2645 |
break;
|
2637 |
2646 |
case 7:
|
2638 |
2647 |
check_insn(env, ctx, ASE_MT);
|
2639 |
|
gen_op_mfc0_vpeopt();
|
|
2648 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEOpt));
|
|
2649 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2640 |
2650 |
rn = "VPEOpt";
|
2641 |
2651 |
break;
|
2642 |
2652 |
default:
|
... | ... | |
2646 |
2656 |
case 2:
|
2647 |
2657 |
switch (sel) {
|
2648 |
2658 |
case 0:
|
2649 |
|
gen_op_mfc0_entrylo0();
|
|
2659 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo0));
|
|
2660 |
tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]);
|
2650 |
2661 |
rn = "EntryLo0";
|
2651 |
2662 |
break;
|
2652 |
2663 |
case 1:
|
... | ... | |
2691 |
2702 |
case 3:
|
2692 |
2703 |
switch (sel) {
|
2693 |
2704 |
case 0:
|
2694 |
|
gen_op_mfc0_entrylo1();
|
|
2705 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo1));
|
|
2706 |
tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]);
|
2695 |
2707 |
rn = "EntryLo1";
|
2696 |
2708 |
break;
|
2697 |
2709 |
default:
|
... | ... | |
2701 |
2713 |
case 4:
|
2702 |
2714 |
switch (sel) {
|
2703 |
2715 |
case 0:
|
2704 |
|
gen_op_mfc0_context();
|
|
2716 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_Context));
|
|
2717 |
tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]);
|
2705 |
2718 |
rn = "Context";
|
2706 |
2719 |
break;
|
2707 |
2720 |
case 1:
|
... | ... | |
2715 |
2728 |
case 5:
|
2716 |
2729 |
switch (sel) {
|
2717 |
2730 |
case 0:
|
2718 |
|
gen_op_mfc0_pagemask();
|
|
2731 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PageMask));
|
|
2732 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2719 |
2733 |
rn = "PageMask";
|
2720 |
2734 |
break;
|
2721 |
2735 |
case 1:
|
2722 |
2736 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2723 |
|
gen_op_mfc0_pagegrain();
|
|
2737 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PageGrain));
|
|
2738 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2724 |
2739 |
rn = "PageGrain";
|
2725 |
2740 |
break;
|
2726 |
2741 |
default:
|
... | ... | |
2730 |
2745 |
case 6:
|
2731 |
2746 |
switch (sel) {
|
2732 |
2747 |
case 0:
|
2733 |
|
gen_op_mfc0_wired();
|
|
2748 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Wired));
|
|
2749 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2734 |
2750 |
rn = "Wired";
|
2735 |
2751 |
break;
|
2736 |
2752 |
case 1:
|
2737 |
2753 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2738 |
|
gen_op_mfc0_srsconf0();
|
|
2754 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf0));
|
|
2755 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2739 |
2756 |
rn = "SRSConf0";
|
2740 |
2757 |
break;
|
2741 |
2758 |
case 2:
|
2742 |
2759 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2743 |
|
gen_op_mfc0_srsconf1();
|
|
2760 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf1));
|
|
2761 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2744 |
2762 |
rn = "SRSConf1";
|
2745 |
2763 |
break;
|
2746 |
2764 |
case 3:
|
2747 |
2765 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2748 |
|
gen_op_mfc0_srsconf2();
|
|
2766 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf2));
|
|
2767 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2749 |
2768 |
rn = "SRSConf2";
|
2750 |
2769 |
break;
|
2751 |
2770 |
case 4:
|
2752 |
2771 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2753 |
|
gen_op_mfc0_srsconf3();
|
|
2772 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf3));
|
|
2773 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2754 |
2774 |
rn = "SRSConf3";
|
2755 |
2775 |
break;
|
2756 |
2776 |
case 5:
|
2757 |
2777 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2758 |
|
gen_op_mfc0_srsconf4();
|
|
2778 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf4));
|
|
2779 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2759 |
2780 |
rn = "SRSConf4";
|
2760 |
2781 |
break;
|
2761 |
2782 |
default:
|
... | ... | |
2766 |
2787 |
switch (sel) {
|
2767 |
2788 |
case 0:
|
2768 |
2789 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2769 |
|
gen_op_mfc0_hwrena();
|
|
2790 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_HWREna));
|
|
2791 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2770 |
2792 |
rn = "HWREna";
|
2771 |
2793 |
break;
|
2772 |
2794 |
default:
|
... | ... | |
2776 |
2798 |
case 8:
|
2777 |
2799 |
switch (sel) {
|
2778 |
2800 |
case 0:
|
2779 |
|
gen_op_mfc0_badvaddr();
|
2780 |
|
rn = "BadVaddr";
|
|
2801 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_BadVAddr));
|
|
2802 |
tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]);
|
|
2803 |
rn = "BadVAddr";
|
2781 |
2804 |
break;
|
2782 |
2805 |
default:
|
2783 |
2806 |
goto die;
|
... | ... | |
2797 |
2820 |
case 10:
|
2798 |
2821 |
switch (sel) {
|
2799 |
2822 |
case 0:
|
2800 |
|
gen_op_mfc0_entryhi();
|
|
2823 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryHi));
|
|
2824 |
tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]);
|
2801 |
2825 |
rn = "EntryHi";
|
2802 |
2826 |
break;
|
2803 |
2827 |
default:
|
... | ... | |
2807 |
2831 |
case 11:
|
2808 |
2832 |
switch (sel) {
|
2809 |
2833 |
case 0:
|
2810 |
|
gen_op_mfc0_compare();
|
|
2834 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Compare));
|
|
2835 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2811 |
2836 |
rn = "Compare";
|
2812 |
2837 |
break;
|
2813 |
2838 |
/* 6,7 are implementation dependent */
|
... | ... | |
2818 |
2843 |
case 12:
|
2819 |
2844 |
switch (sel) {
|
2820 |
2845 |
case 0:
|
2821 |
|
gen_op_mfc0_status();
|
|
2846 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Status));
|
|
2847 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2822 |
2848 |
rn = "Status";
|
2823 |
2849 |
break;
|
2824 |
2850 |
case 1:
|
2825 |
2851 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2826 |
|
gen_op_mfc0_intctl();
|
|
2852 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_IntCtl));
|
|
2853 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2827 |
2854 |
rn = "IntCtl";
|
2828 |
2855 |
break;
|
2829 |
2856 |
case 2:
|
2830 |
2857 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2831 |
|
gen_op_mfc0_srsctl();
|
|
2858 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSCtl));
|
|
2859 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2832 |
2860 |
rn = "SRSCtl";
|
2833 |
2861 |
break;
|
2834 |
2862 |
case 3:
|
2835 |
2863 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2836 |
|
gen_op_mfc0_srsmap();
|
|
2864 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSMap));
|
|
2865 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2837 |
2866 |
rn = "SRSMap";
|
2838 |
2867 |
break;
|
2839 |
2868 |
default:
|
... | ... | |
2843 |
2872 |
case 13:
|
2844 |
2873 |
switch (sel) {
|
2845 |
2874 |
case 0:
|
2846 |
|
gen_op_mfc0_cause();
|
|
2875 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Cause));
|
|
2876 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2847 |
2877 |
rn = "Cause";
|
2848 |
2878 |
break;
|
2849 |
2879 |
default:
|
... | ... | |
2853 |
2883 |
case 14:
|
2854 |
2884 |
switch (sel) {
|
2855 |
2885 |
case 0:
|
2856 |
|
gen_op_mfc0_epc();
|
|
2886 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EPC));
|
|
2887 |
tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]);
|
2857 |
2888 |
rn = "EPC";
|
2858 |
2889 |
break;
|
2859 |
2890 |
default:
|
... | ... | |
2863 |
2894 |
case 15:
|
2864 |
2895 |
switch (sel) {
|
2865 |
2896 |
case 0:
|
2866 |
|
gen_op_mfc0_prid();
|
|
2897 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PRid));
|
|
2898 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2867 |
2899 |
rn = "PRid";
|
2868 |
2900 |
break;
|
2869 |
2901 |
case 1:
|
2870 |
2902 |
check_insn(env, ctx, ISA_MIPS32R2);
|
2871 |
|
gen_op_mfc0_ebase();
|
|
2903 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_EBase));
|
|
2904 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2872 |
2905 |
rn = "EBase";
|
2873 |
2906 |
break;
|
2874 |
2907 |
default:
|
... | ... | |
2878 |
2911 |
case 16:
|
2879 |
2912 |
switch (sel) {
|
2880 |
2913 |
case 0:
|
2881 |
|
gen_op_mfc0_config0();
|
|
2914 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config0));
|
|
2915 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2882 |
2916 |
rn = "Config";
|
2883 |
2917 |
break;
|
2884 |
2918 |
case 1:
|
2885 |
|
gen_op_mfc0_config1();
|
|
2919 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config1));
|
|
2920 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2886 |
2921 |
rn = "Config1";
|
2887 |
2922 |
break;
|
2888 |
2923 |
case 2:
|
2889 |
|
gen_op_mfc0_config2();
|
|
2924 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config2));
|
|
2925 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2890 |
2926 |
rn = "Config2";
|
2891 |
2927 |
break;
|
2892 |
2928 |
case 3:
|
2893 |
|
gen_op_mfc0_config3();
|
|
2929 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config3));
|
|
2930 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2894 |
2931 |
rn = "Config3";
|
2895 |
2932 |
break;
|
2896 |
2933 |
/* 4,5 are reserved */
|
2897 |
2934 |
/* 6,7 are implementation dependent */
|
2898 |
2935 |
case 6:
|
2899 |
|
gen_op_mfc0_config6();
|
|
2936 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config6));
|
|
2937 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2900 |
2938 |
rn = "Config6";
|
2901 |
2939 |
break;
|
2902 |
2940 |
case 7:
|
2903 |
|
gen_op_mfc0_config7();
|
|
2941 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config7));
|
|
2942 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2904 |
2943 |
rn = "Config7";
|
2905 |
2944 |
break;
|
2906 |
2945 |
default:
|
... | ... | |
2942 |
2981 |
case 0:
|
2943 |
2982 |
#if defined(TARGET_MIPS64)
|
2944 |
2983 |
check_insn(env, ctx, ISA_MIPS3);
|
2945 |
|
gen_op_mfc0_xcontext();
|
|
2984 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_XContext));
|
|
2985 |
tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]);
|
2946 |
2986 |
rn = "XContext";
|
2947 |
2987 |
break;
|
2948 |
2988 |
#endif
|
... | ... | |
2954 |
2994 |
/* Officially reserved, but sel 0 is used for R1x000 framemask */
|
2955 |
2995 |
switch (sel) {
|
2956 |
2996 |
case 0:
|
2957 |
|
gen_op_mfc0_framemask();
|
|
2997 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Framemask));
|
|
2998 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
2958 |
2999 |
rn = "Framemask";
|
2959 |
3000 |
break;
|
2960 |
3001 |
default:
|
... | ... | |
2994 |
3035 |
case 24:
|
2995 |
3036 |
switch (sel) {
|
2996 |
3037 |
case 0:
|
2997 |
|
gen_op_mfc0_depc(); /* EJTAG support */
|
|
3038 |
/* EJTAG support */
|
|
3039 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_DEPC));
|
|
3040 |
tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]);
|
2998 |
3041 |
rn = "DEPC";
|
2999 |
3042 |
break;
|
3000 |
3043 |
default:
|
... | ... | |
3004 |
3047 |
case 25:
|
3005 |
3048 |
switch (sel) {
|
3006 |
3049 |
case 0:
|
3007 |
|
gen_op_mfc0_performance0();
|
|
3050 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Performance0));
|
|
3051 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3008 |
3052 |
rn = "Performance0";
|
3009 |
3053 |
break;
|
3010 |
3054 |
case 1:
|
... | ... | |
3058 |
3102 |
case 2:
|
3059 |
3103 |
case 4:
|
3060 |
3104 |
case 6:
|
3061 |
|
gen_op_mfc0_taglo();
|
|
3105 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_TagLo));
|
|
3106 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3062 |
3107 |
rn = "TagLo";
|
3063 |
3108 |
break;
|
3064 |
3109 |
case 1:
|
3065 |
3110 |
case 3:
|
3066 |
3111 |
case 5:
|
3067 |
3112 |
case 7:
|
3068 |
|
gen_op_mfc0_datalo();
|
|
3113 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DataLo));
|
|
3114 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3069 |
3115 |
rn = "DataLo";
|
3070 |
3116 |
break;
|
3071 |
3117 |
default:
|
... | ... | |
3078 |
3124 |
case 2:
|
3079 |
3125 |
case 4:
|
3080 |
3126 |
case 6:
|
3081 |
|
gen_op_mfc0_taghi();
|
|
3127 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_TagHi));
|
|
3128 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3082 |
3129 |
rn = "TagHi";
|
3083 |
3130 |
break;
|
3084 |
3131 |
case 1:
|
3085 |
3132 |
case 3:
|
3086 |
3133 |
case 5:
|
3087 |
3134 |
case 7:
|
3088 |
|
gen_op_mfc0_datahi();
|
|
3135 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DataHi));
|
|
3136 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3089 |
3137 |
rn = "DataHi";
|
3090 |
3138 |
break;
|
3091 |
3139 |
default:
|
... | ... | |
3095 |
3143 |
case 30:
|
3096 |
3144 |
switch (sel) {
|
3097 |
3145 |
case 0:
|
3098 |
|
gen_op_mfc0_errorepc();
|
|
3146 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_ErrorEPC));
|
|
3147 |
tcg_gen_ext32s_tl(cpu_T[0], cpu_T[0]);
|
3099 |
3148 |
rn = "ErrorEPC";
|
3100 |
3149 |
break;
|
3101 |
3150 |
default:
|
... | ... | |
3105 |
3154 |
case 31:
|
3106 |
3155 |
switch (sel) {
|
3107 |
3156 |
case 0:
|
3108 |
|
gen_op_mfc0_desave(); /* EJTAG support */
|
|
3157 |
/* EJTAG support */
|
|
3158 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DESAVE));
|
|
3159 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3109 |
3160 |
rn = "DESAVE";
|
3110 |
3161 |
break;
|
3111 |
3162 |
default:
|
... | ... | |
3343 |
3394 |
break;
|
3344 |
3395 |
case 8:
|
3345 |
3396 |
/* ignored */
|
3346 |
|
rn = "BadVaddr";
|
|
3397 |
rn = "BadVAddr";
|
3347 |
3398 |
break;
|
3348 |
3399 |
case 9:
|
3349 |
3400 |
switch (sel) {
|
... | ... | |
3736 |
3787 |
static void gen_dmfc0 (CPUState *env, DisasContext *ctx, int reg, int sel)
|
3737 |
3788 |
{
|
3738 |
3789 |
const char *rn = "invalid";
|
|
3790 |
TCGv r_tmp = tcg_temp_new(TCG_TYPE_I32);
|
3739 |
3791 |
|
3740 |
3792 |
if (sel != 0)
|
3741 |
3793 |
check_insn(env, ctx, ISA_MIPS64);
|
... | ... | |
3744 |
3796 |
case 0:
|
3745 |
3797 |
switch (sel) {
|
3746 |
3798 |
case 0:
|
3747 |
|
gen_op_mfc0_index();
|
|
3799 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Index));
|
|
3800 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3748 |
3801 |
rn = "Index";
|
3749 |
3802 |
break;
|
3750 |
3803 |
case 1:
|
... | ... | |
3774 |
3827 |
break;
|
3775 |
3828 |
case 1:
|
3776 |
3829 |
check_insn(env, ctx, ASE_MT);
|
3777 |
|
gen_op_mfc0_vpecontrol();
|
|
3830 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEControl));
|
|
3831 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3778 |
3832 |
rn = "VPEControl";
|
3779 |
3833 |
break;
|
3780 |
3834 |
case 2:
|
3781 |
3835 |
check_insn(env, ctx, ASE_MT);
|
3782 |
|
gen_op_mfc0_vpeconf0();
|
|
3836 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEConf0));
|
|
3837 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3783 |
3838 |
rn = "VPEConf0";
|
3784 |
3839 |
break;
|
3785 |
3840 |
case 3:
|
3786 |
3841 |
check_insn(env, ctx, ASE_MT);
|
3787 |
|
gen_op_mfc0_vpeconf1();
|
|
3842 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEConf1));
|
|
3843 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3788 |
3844 |
rn = "VPEConf1";
|
3789 |
3845 |
break;
|
3790 |
3846 |
case 4:
|
3791 |
3847 |
check_insn(env, ctx, ASE_MT);
|
3792 |
|
gen_op_dmfc0_yqmask();
|
|
3848 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_YQMask));
|
3793 |
3849 |
rn = "YQMask";
|
3794 |
3850 |
break;
|
3795 |
3851 |
case 5:
|
3796 |
3852 |
check_insn(env, ctx, ASE_MT);
|
3797 |
|
gen_op_dmfc0_vpeschedule();
|
|
3853 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_VPESchedule));
|
3798 |
3854 |
rn = "VPESchedule";
|
3799 |
3855 |
break;
|
3800 |
3856 |
case 6:
|
3801 |
3857 |
check_insn(env, ctx, ASE_MT);
|
3802 |
|
gen_op_dmfc0_vpeschefback();
|
|
3858 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_VPEScheFBack));
|
3803 |
3859 |
rn = "VPEScheFBack";
|
3804 |
3860 |
break;
|
3805 |
3861 |
case 7:
|
3806 |
3862 |
check_insn(env, ctx, ASE_MT);
|
3807 |
|
gen_op_mfc0_vpeopt();
|
|
3863 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_VPEOpt));
|
|
3864 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3808 |
3865 |
rn = "VPEOpt";
|
3809 |
3866 |
break;
|
3810 |
3867 |
default:
|
... | ... | |
3814 |
3871 |
case 2:
|
3815 |
3872 |
switch (sel) {
|
3816 |
3873 |
case 0:
|
3817 |
|
gen_op_dmfc0_entrylo0();
|
|
3874 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo0));
|
3818 |
3875 |
rn = "EntryLo0";
|
3819 |
3876 |
break;
|
3820 |
3877 |
case 1:
|
... | ... | |
3859 |
3916 |
case 3:
|
3860 |
3917 |
switch (sel) {
|
3861 |
3918 |
case 0:
|
3862 |
|
gen_op_dmfc0_entrylo1();
|
|
3919 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryLo1));
|
3863 |
3920 |
rn = "EntryLo1";
|
3864 |
3921 |
break;
|
3865 |
3922 |
default:
|
... | ... | |
3869 |
3926 |
case 4:
|
3870 |
3927 |
switch (sel) {
|
3871 |
3928 |
case 0:
|
3872 |
|
gen_op_dmfc0_context();
|
|
3929 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_Context));
|
3873 |
3930 |
rn = "Context";
|
3874 |
3931 |
break;
|
3875 |
3932 |
case 1:
|
... | ... | |
3883 |
3940 |
case 5:
|
3884 |
3941 |
switch (sel) {
|
3885 |
3942 |
case 0:
|
3886 |
|
gen_op_mfc0_pagemask();
|
|
3943 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PageMask));
|
|
3944 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3887 |
3945 |
rn = "PageMask";
|
3888 |
3946 |
break;
|
3889 |
3947 |
case 1:
|
3890 |
3948 |
check_insn(env, ctx, ISA_MIPS32R2);
|
3891 |
|
gen_op_mfc0_pagegrain();
|
|
3949 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PageGrain));
|
|
3950 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3892 |
3951 |
rn = "PageGrain";
|
3893 |
3952 |
break;
|
3894 |
3953 |
default:
|
... | ... | |
3898 |
3957 |
case 6:
|
3899 |
3958 |
switch (sel) {
|
3900 |
3959 |
case 0:
|
3901 |
|
gen_op_mfc0_wired();
|
|
3960 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Wired));
|
|
3961 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3902 |
3962 |
rn = "Wired";
|
3903 |
3963 |
break;
|
3904 |
3964 |
case 1:
|
3905 |
3965 |
check_insn(env, ctx, ISA_MIPS32R2);
|
3906 |
|
gen_op_mfc0_srsconf0();
|
|
3966 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf0));
|
|
3967 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3907 |
3968 |
rn = "SRSConf0";
|
3908 |
3969 |
break;
|
3909 |
3970 |
case 2:
|
3910 |
3971 |
check_insn(env, ctx, ISA_MIPS32R2);
|
3911 |
|
gen_op_mfc0_srsconf1();
|
|
3972 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf1));
|
|
3973 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3912 |
3974 |
rn = "SRSConf1";
|
3913 |
3975 |
break;
|
3914 |
3976 |
case 3:
|
3915 |
3977 |
check_insn(env, ctx, ISA_MIPS32R2);
|
3916 |
|
gen_op_mfc0_srsconf2();
|
|
3978 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf2));
|
|
3979 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3917 |
3980 |
rn = "SRSConf2";
|
3918 |
3981 |
break;
|
3919 |
3982 |
case 4:
|
3920 |
3983 |
check_insn(env, ctx, ISA_MIPS32R2);
|
3921 |
|
gen_op_mfc0_srsconf3();
|
|
3984 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf3));
|
|
3985 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3922 |
3986 |
rn = "SRSConf3";
|
3923 |
3987 |
break;
|
3924 |
3988 |
case 5:
|
3925 |
3989 |
check_insn(env, ctx, ISA_MIPS32R2);
|
3926 |
|
gen_op_mfc0_srsconf4();
|
|
3990 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSConf4));
|
|
3991 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3927 |
3992 |
rn = "SRSConf4";
|
3928 |
3993 |
break;
|
3929 |
3994 |
default:
|
... | ... | |
3934 |
3999 |
switch (sel) {
|
3935 |
4000 |
case 0:
|
3936 |
4001 |
check_insn(env, ctx, ISA_MIPS32R2);
|
3937 |
|
gen_op_mfc0_hwrena();
|
|
4002 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_HWREna));
|
|
4003 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3938 |
4004 |
rn = "HWREna";
|
3939 |
4005 |
break;
|
3940 |
4006 |
default:
|
... | ... | |
3944 |
4010 |
case 8:
|
3945 |
4011 |
switch (sel) {
|
3946 |
4012 |
case 0:
|
3947 |
|
gen_op_dmfc0_badvaddr();
|
3948 |
|
rn = "BadVaddr";
|
|
4013 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_BadVAddr));
|
|
4014 |
rn = "BadVAddr";
|
3949 |
4015 |
break;
|
3950 |
4016 |
default:
|
3951 |
4017 |
goto die;
|
... | ... | |
3965 |
4031 |
case 10:
|
3966 |
4032 |
switch (sel) {
|
3967 |
4033 |
case 0:
|
3968 |
|
gen_op_dmfc0_entryhi();
|
|
4034 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EntryHi));
|
3969 |
4035 |
rn = "EntryHi";
|
3970 |
4036 |
break;
|
3971 |
4037 |
default:
|
... | ... | |
3975 |
4041 |
case 11:
|
3976 |
4042 |
switch (sel) {
|
3977 |
4043 |
case 0:
|
3978 |
|
gen_op_mfc0_compare();
|
|
4044 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Compare));
|
|
4045 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3979 |
4046 |
rn = "Compare";
|
3980 |
4047 |
break;
|
3981 |
4048 |
/* 6,7 are implementation dependent */
|
... | ... | |
3986 |
4053 |
case 12:
|
3987 |
4054 |
switch (sel) {
|
3988 |
4055 |
case 0:
|
3989 |
|
gen_op_mfc0_status();
|
|
4056 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Status));
|
|
4057 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3990 |
4058 |
rn = "Status";
|
3991 |
4059 |
break;
|
3992 |
4060 |
case 1:
|
3993 |
4061 |
check_insn(env, ctx, ISA_MIPS32R2);
|
3994 |
|
gen_op_mfc0_intctl();
|
|
4062 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_IntCtl));
|
|
4063 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
3995 |
4064 |
rn = "IntCtl";
|
3996 |
4065 |
break;
|
3997 |
4066 |
case 2:
|
3998 |
4067 |
check_insn(env, ctx, ISA_MIPS32R2);
|
3999 |
|
gen_op_mfc0_srsctl();
|
|
4068 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSCtl));
|
|
4069 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4000 |
4070 |
rn = "SRSCtl";
|
4001 |
4071 |
break;
|
4002 |
4072 |
case 3:
|
4003 |
4073 |
check_insn(env, ctx, ISA_MIPS32R2);
|
4004 |
|
gen_op_mfc0_srsmap();
|
|
4074 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_SRSMap));
|
|
4075 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4005 |
4076 |
rn = "SRSMap";
|
4006 |
4077 |
break;
|
4007 |
4078 |
default:
|
... | ... | |
4011 |
4082 |
case 13:
|
4012 |
4083 |
switch (sel) {
|
4013 |
4084 |
case 0:
|
4014 |
|
gen_op_mfc0_cause();
|
|
4085 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Cause));
|
|
4086 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4015 |
4087 |
rn = "Cause";
|
4016 |
4088 |
break;
|
4017 |
4089 |
default:
|
... | ... | |
4021 |
4093 |
case 14:
|
4022 |
4094 |
switch (sel) {
|
4023 |
4095 |
case 0:
|
4024 |
|
gen_op_dmfc0_epc();
|
|
4096 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_EPC));
|
4025 |
4097 |
rn = "EPC";
|
4026 |
4098 |
break;
|
4027 |
4099 |
default:
|
... | ... | |
4031 |
4103 |
case 15:
|
4032 |
4104 |
switch (sel) {
|
4033 |
4105 |
case 0:
|
4034 |
|
gen_op_mfc0_prid();
|
|
4106 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_PRid));
|
|
4107 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4035 |
4108 |
rn = "PRid";
|
4036 |
4109 |
break;
|
4037 |
4110 |
case 1:
|
4038 |
4111 |
check_insn(env, ctx, ISA_MIPS32R2);
|
4039 |
|
gen_op_mfc0_ebase();
|
|
4112 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_EBase));
|
|
4113 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4040 |
4114 |
rn = "EBase";
|
4041 |
4115 |
break;
|
4042 |
4116 |
default:
|
... | ... | |
4046 |
4120 |
case 16:
|
4047 |
4121 |
switch (sel) {
|
4048 |
4122 |
case 0:
|
4049 |
|
gen_op_mfc0_config0();
|
|
4123 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config0));
|
|
4124 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4050 |
4125 |
rn = "Config";
|
4051 |
4126 |
break;
|
4052 |
4127 |
case 1:
|
4053 |
|
gen_op_mfc0_config1();
|
|
4128 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config1));
|
|
4129 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4054 |
4130 |
rn = "Config1";
|
4055 |
4131 |
break;
|
4056 |
4132 |
case 2:
|
4057 |
|
gen_op_mfc0_config2();
|
|
4133 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config2));
|
|
4134 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4058 |
4135 |
rn = "Config2";
|
4059 |
4136 |
break;
|
4060 |
4137 |
case 3:
|
4061 |
|
gen_op_mfc0_config3();
|
|
4138 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config3));
|
|
4139 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4062 |
4140 |
rn = "Config3";
|
4063 |
4141 |
break;
|
4064 |
4142 |
/* 6,7 are implementation dependent */
|
|
4143 |
case 6:
|
|
4144 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config6));
|
|
4145 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
|
4146 |
rn = "Config6";
|
|
4147 |
break;
|
|
4148 |
case 7:
|
|
4149 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Config7));
|
|
4150 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
|
4151 |
rn = "Config7";
|
|
4152 |
break;
|
4065 |
4153 |
default:
|
4066 |
4154 |
goto die;
|
4067 |
4155 |
}
|
... | ... | |
4100 |
4188 |
switch (sel) {
|
4101 |
4189 |
case 0:
|
4102 |
4190 |
check_insn(env, ctx, ISA_MIPS3);
|
4103 |
|
gen_op_dmfc0_xcontext();
|
|
4191 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_XContext));
|
4104 |
4192 |
rn = "XContext";
|
4105 |
4193 |
break;
|
4106 |
4194 |
default:
|
... | ... | |
4111 |
4199 |
/* Officially reserved, but sel 0 is used for R1x000 framemask */
|
4112 |
4200 |
switch (sel) {
|
4113 |
4201 |
case 0:
|
4114 |
|
gen_op_mfc0_framemask();
|
|
4202 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Framemask));
|
|
4203 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4115 |
4204 |
rn = "Framemask";
|
4116 |
4205 |
break;
|
4117 |
4206 |
default:
|
... | ... | |
4151 |
4240 |
case 24:
|
4152 |
4241 |
switch (sel) {
|
4153 |
4242 |
case 0:
|
4154 |
|
gen_op_dmfc0_depc(); /* EJTAG support */
|
|
4243 |
/* EJTAG support */
|
|
4244 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_DEPC));
|
4155 |
4245 |
rn = "DEPC";
|
4156 |
4246 |
break;
|
4157 |
4247 |
default:
|
... | ... | |
4161 |
4251 |
case 25:
|
4162 |
4252 |
switch (sel) {
|
4163 |
4253 |
case 0:
|
4164 |
|
gen_op_mfc0_performance0();
|
|
4254 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_Performance0));
|
|
4255 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4165 |
4256 |
rn = "Performance0";
|
4166 |
4257 |
break;
|
4167 |
4258 |
case 1:
|
... | ... | |
4215 |
4306 |
case 2:
|
4216 |
4307 |
case 4:
|
4217 |
4308 |
case 6:
|
4218 |
|
gen_op_mfc0_taglo();
|
|
4309 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_TagLo));
|
|
4310 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4219 |
4311 |
rn = "TagLo";
|
4220 |
4312 |
break;
|
4221 |
4313 |
case 1:
|
4222 |
4314 |
case 3:
|
4223 |
4315 |
case 5:
|
4224 |
4316 |
case 7:
|
4225 |
|
gen_op_mfc0_datalo();
|
|
4317 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DataLo));
|
|
4318 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4226 |
4319 |
rn = "DataLo";
|
4227 |
4320 |
break;
|
4228 |
4321 |
default:
|
... | ... | |
4235 |
4328 |
case 2:
|
4236 |
4329 |
case 4:
|
4237 |
4330 |
case 6:
|
4238 |
|
gen_op_mfc0_taghi();
|
|
4331 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_TagHi));
|
|
4332 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4239 |
4333 |
rn = "TagHi";
|
4240 |
4334 |
break;
|
4241 |
4335 |
case 1:
|
4242 |
4336 |
case 3:
|
4243 |
4337 |
case 5:
|
4244 |
4338 |
case 7:
|
4245 |
|
gen_op_mfc0_datahi();
|
|
4339 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DataHi));
|
|
4340 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4246 |
4341 |
rn = "DataHi";
|
4247 |
4342 |
break;
|
4248 |
4343 |
default:
|
... | ... | |
4252 |
4347 |
case 30:
|
4253 |
4348 |
switch (sel) {
|
4254 |
4349 |
case 0:
|
4255 |
|
gen_op_dmfc0_errorepc();
|
|
4350 |
tcg_gen_ld_tl(cpu_T[0], cpu_env, offsetof(CPUState, CP0_ErrorEPC));
|
4256 |
4351 |
rn = "ErrorEPC";
|
4257 |
4352 |
break;
|
4258 |
4353 |
default:
|
... | ... | |
4262 |
4357 |
case 31:
|
4263 |
4358 |
switch (sel) {
|
4264 |
4359 |
case 0:
|
4265 |
|
gen_op_mfc0_desave(); /* EJTAG support */
|
|
4360 |
/* EJTAG support */
|
|
4361 |
tcg_gen_ld_i32(r_tmp, cpu_env, offsetof(CPUState, CP0_DESAVE));
|
|
4362 |
tcg_gen_ext_i32_tl(cpu_T[0], r_tmp);
|
4266 |
4363 |
rn = "DESAVE";
|
4267 |
4364 |
break;
|
4268 |
4365 |
default:
|
... | ... | |
4500 |
4597 |
break;
|
4501 |
4598 |
case 8:
|
4502 |
4599 |
/* ignored */
|
4503 |
|
rn = "BadVaddr";
|
|
4600 |
rn = "BadVAddr";
|
4504 |
4601 |
break;
|
4505 |
4602 |
case 9:
|
4506 |
4603 |
switch (sel) {
|