Revision f0b3f3ae target-mips/translate.c
b/target-mips/translate.c | ||
---|---|---|
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) { |
Also available in: Unified diff