Commit 0c8aacd466ae0f1c78dc8fce215115d5c6052424
1 parent
1c97856d
target-ppc: include the instruction name in load/store handlers name
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5784 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
59 additions
and
59 deletions
target-ppc/translate.c
| @@ -2776,17 +2776,17 @@ static always_inline void gen_qemu_st32(TCGv arg0, TCGv arg1, int flags) | @@ -2776,17 +2776,17 @@ static always_inline void gen_qemu_st32(TCGv arg0, TCGv arg1, int flags) | ||
| 2776 | 2776 | ||
| 2777 | #endif | 2777 | #endif |
| 2778 | 2778 | ||
| 2779 | -#define GEN_LD(width, opc, type) \ | ||
| 2780 | -GEN_HANDLER(l##width, opc, 0xFF, 0xFF, 0x00000000, type) \ | 2779 | +#define GEN_LD(name, ldop, opc, type) \ |
| 2780 | +GEN_HANDLER(name, opc, 0xFF, 0xFF, 0x00000000, type) \ | ||
| 2781 | { \ | 2781 | { \ |
| 2782 | - TCGv EA = tcg_temp_new(); \ | 2782 | + TCGv EA = tcg_temp_new(); \ |
| 2783 | gen_addr_imm_index(EA, ctx, 0); \ | 2783 | gen_addr_imm_index(EA, ctx, 0); \ |
| 2784 | - gen_qemu_ld##width(cpu_gpr[rD(ctx->opcode)], EA, ctx->mem_idx); \ | 2784 | + gen_qemu_##ldop(cpu_gpr[rD(ctx->opcode)], EA, ctx->mem_idx); \ |
| 2785 | tcg_temp_free(EA); \ | 2785 | tcg_temp_free(EA); \ |
| 2786 | } | 2786 | } |
| 2787 | 2787 | ||
| 2788 | -#define GEN_LDU(width, opc, type) \ | ||
| 2789 | -GEN_HANDLER(l##width##u, opc, 0xFF, 0xFF, 0x00000000, type) \ | 2788 | +#define GEN_LDU(name, ldop, opc, type) \ |
| 2789 | +GEN_HANDLER(name##u, opc, 0xFF, 0xFF, 0x00000000, type) \ | ||
| 2790 | { \ | 2790 | { \ |
| 2791 | TCGv EA; \ | 2791 | TCGv EA; \ |
| 2792 | if (unlikely(rA(ctx->opcode) == 0 || \ | 2792 | if (unlikely(rA(ctx->opcode) == 0 || \ |
| @@ -2794,18 +2794,18 @@ GEN_HANDLER(l##width##u, opc, 0xFF, 0xFF, 0x00000000, type) \ | @@ -2794,18 +2794,18 @@ GEN_HANDLER(l##width##u, opc, 0xFF, 0xFF, 0x00000000, type) \ | ||
| 2794 | GEN_EXCP_INVAL(ctx); \ | 2794 | GEN_EXCP_INVAL(ctx); \ |
| 2795 | return; \ | 2795 | return; \ |
| 2796 | } \ | 2796 | } \ |
| 2797 | - EA = tcg_temp_new(); \ | 2797 | + EA = tcg_temp_new(); \ |
| 2798 | if (type == PPC_64B) \ | 2798 | if (type == PPC_64B) \ |
| 2799 | gen_addr_imm_index(EA, ctx, 0x03); \ | 2799 | gen_addr_imm_index(EA, ctx, 0x03); \ |
| 2800 | else \ | 2800 | else \ |
| 2801 | gen_addr_imm_index(EA, ctx, 0); \ | 2801 | gen_addr_imm_index(EA, ctx, 0); \ |
| 2802 | - gen_qemu_ld##width(cpu_gpr[rD(ctx->opcode)], EA, ctx->mem_idx); \ | 2802 | + gen_qemu_##ldop(cpu_gpr[rD(ctx->opcode)], EA, ctx->mem_idx); \ |
| 2803 | tcg_gen_mov_tl(cpu_gpr[rA(ctx->opcode)], EA); \ | 2803 | tcg_gen_mov_tl(cpu_gpr[rA(ctx->opcode)], EA); \ |
| 2804 | tcg_temp_free(EA); \ | 2804 | tcg_temp_free(EA); \ |
| 2805 | } | 2805 | } |
| 2806 | 2806 | ||
| 2807 | -#define GEN_LDUX(width, opc2, opc3, type) \ | ||
| 2808 | -GEN_HANDLER(l##width##ux, 0x1F, opc2, opc3, 0x00000001, type) \ | 2807 | +#define GEN_LDUX(name, ldop, opc2, opc3, type) \ |
| 2808 | +GEN_HANDLER(name##ux, 0x1F, opc2, opc3, 0x00000001, type) \ | ||
| 2809 | { \ | 2809 | { \ |
| 2810 | TCGv EA; \ | 2810 | TCGv EA; \ |
| 2811 | if (unlikely(rA(ctx->opcode) == 0 || \ | 2811 | if (unlikely(rA(ctx->opcode) == 0 || \ |
| @@ -2813,45 +2813,45 @@ GEN_HANDLER(l##width##ux, 0x1F, opc2, opc3, 0x00000001, type) \ | @@ -2813,45 +2813,45 @@ GEN_HANDLER(l##width##ux, 0x1F, opc2, opc3, 0x00000001, type) \ | ||
| 2813 | GEN_EXCP_INVAL(ctx); \ | 2813 | GEN_EXCP_INVAL(ctx); \ |
| 2814 | return; \ | 2814 | return; \ |
| 2815 | } \ | 2815 | } \ |
| 2816 | - EA = tcg_temp_new(); \ | 2816 | + EA = tcg_temp_new(); \ |
| 2817 | gen_addr_reg_index(EA, ctx); \ | 2817 | gen_addr_reg_index(EA, ctx); \ |
| 2818 | - gen_qemu_ld##width(cpu_gpr[rD(ctx->opcode)], EA, ctx->mem_idx); \ | 2818 | + gen_qemu_##ldop(cpu_gpr[rD(ctx->opcode)], EA, ctx->mem_idx); \ |
| 2819 | tcg_gen_mov_tl(cpu_gpr[rA(ctx->opcode)], EA); \ | 2819 | tcg_gen_mov_tl(cpu_gpr[rA(ctx->opcode)], EA); \ |
| 2820 | tcg_temp_free(EA); \ | 2820 | tcg_temp_free(EA); \ |
| 2821 | } | 2821 | } |
| 2822 | 2822 | ||
| 2823 | -#define GEN_LDX(width, opc2, opc3, type) \ | ||
| 2824 | -GEN_HANDLER(l##width##x, 0x1F, opc2, opc3, 0x00000001, type) \ | 2823 | +#define GEN_LDX(name, ldop, opc2, opc3, type) \ |
| 2824 | +GEN_HANDLER(name##x, 0x1F, opc2, opc3, 0x00000001, type) \ | ||
| 2825 | { \ | 2825 | { \ |
| 2826 | - TCGv EA = tcg_temp_new(); \ | 2826 | + TCGv EA = tcg_temp_new(); \ |
| 2827 | gen_addr_reg_index(EA, ctx); \ | 2827 | gen_addr_reg_index(EA, ctx); \ |
| 2828 | - gen_qemu_ld##width(cpu_gpr[rD(ctx->opcode)], EA, ctx->mem_idx); \ | 2828 | + gen_qemu_##ldop(cpu_gpr[rD(ctx->opcode)], EA, ctx->mem_idx); \ |
| 2829 | tcg_temp_free(EA); \ | 2829 | tcg_temp_free(EA); \ |
| 2830 | } | 2830 | } |
| 2831 | 2831 | ||
| 2832 | -#define GEN_LDS(width, op, type) \ | ||
| 2833 | -GEN_LD(width, op | 0x20, type); \ | ||
| 2834 | -GEN_LDU(width, op | 0x21, type); \ | ||
| 2835 | -GEN_LDUX(width, 0x17, op | 0x01, type); \ | ||
| 2836 | -GEN_LDX(width, 0x17, op | 0x00, type) | 2832 | +#define GEN_LDS(name, ldop, op, type) \ |
| 2833 | +GEN_LD(name, ldop, op | 0x20, type); \ | ||
| 2834 | +GEN_LDU(name, ldop, op | 0x21, type); \ | ||
| 2835 | +GEN_LDUX(name, ldop, 0x17, op | 0x01, type); \ | ||
| 2836 | +GEN_LDX(name, ldop, 0x17, op | 0x00, type) | ||
| 2837 | 2837 | ||
| 2838 | /* lbz lbzu lbzux lbzx */ | 2838 | /* lbz lbzu lbzux lbzx */ |
| 2839 | -GEN_LDS(8u, 0x02, PPC_INTEGER); | 2839 | +GEN_LDS(lbz, ld8u, 0x02, PPC_INTEGER); |
| 2840 | /* lha lhau lhaux lhax */ | 2840 | /* lha lhau lhaux lhax */ |
| 2841 | -GEN_LDS(16s, 0x0A, PPC_INTEGER); | 2841 | +GEN_LDS(lha, ld16s, 0x0A, PPC_INTEGER); |
| 2842 | /* lhz lhzu lhzux lhzx */ | 2842 | /* lhz lhzu lhzux lhzx */ |
| 2843 | -GEN_LDS(16u, 0x08, PPC_INTEGER); | 2843 | +GEN_LDS(lhz, ld16u, 0x08, PPC_INTEGER); |
| 2844 | /* lwz lwzu lwzux lwzx */ | 2844 | /* lwz lwzu lwzux lwzx */ |
| 2845 | -GEN_LDS(32u, 0x00, PPC_INTEGER); | 2845 | +GEN_LDS(lwz, ld32u, 0x00, PPC_INTEGER); |
| 2846 | #if defined(TARGET_PPC64) | 2846 | #if defined(TARGET_PPC64) |
| 2847 | /* lwaux */ | 2847 | /* lwaux */ |
| 2848 | -GEN_LDUX(32s, 0x15, 0x0B, PPC_64B); | 2848 | +GEN_LDUX(lwa, ld32s, 0x15, 0x0B, PPC_64B); |
| 2849 | /* lwax */ | 2849 | /* lwax */ |
| 2850 | -GEN_LDX(32s, 0x15, 0x0A, PPC_64B); | 2850 | +GEN_LDX(lwa, ld32s, 0x15, 0x0A, PPC_64B); |
| 2851 | /* ldux */ | 2851 | /* ldux */ |
| 2852 | -GEN_LDUX(64, 0x15, 0x01, PPC_64B); | 2852 | +GEN_LDUX(ld, ld64, 0x15, 0x01, PPC_64B); |
| 2853 | /* ldx */ | 2853 | /* ldx */ |
| 2854 | -GEN_LDX(64, 0x15, 0x00, PPC_64B); | 2854 | +GEN_LDX(ld, ld64, 0x15, 0x00, PPC_64B); |
| 2855 | GEN_HANDLER(ld, 0x3A, 0xFF, 0xFF, 0x00000000, PPC_64B) | 2855 | GEN_HANDLER(ld, 0x3A, 0xFF, 0xFF, 0x00000000, PPC_64B) |
| 2856 | { | 2856 | { |
| 2857 | TCGv EA; | 2857 | TCGv EA; |
| @@ -2911,72 +2911,72 @@ GEN_HANDLER(lq, 0x38, 0xFF, 0xFF, 0x00000000, PPC_64BX) | @@ -2911,72 +2911,72 @@ GEN_HANDLER(lq, 0x38, 0xFF, 0xFF, 0x00000000, PPC_64BX) | ||
| 2911 | #endif | 2911 | #endif |
| 2912 | 2912 | ||
| 2913 | /*** Integer store ***/ | 2913 | /*** Integer store ***/ |
| 2914 | -#define GEN_ST(width, opc, type) \ | ||
| 2915 | -GEN_HANDLER(st##width, opc, 0xFF, 0xFF, 0x00000000, type) \ | 2914 | +#define GEN_ST(name, stop, opc, type) \ |
| 2915 | +GEN_HANDLER(name, opc, 0xFF, 0xFF, 0x00000000, type) \ | ||
| 2916 | { \ | 2916 | { \ |
| 2917 | - TCGv EA = tcg_temp_new(); \ | 2917 | + TCGv EA = tcg_temp_new(); \ |
| 2918 | gen_addr_imm_index(EA, ctx, 0); \ | 2918 | gen_addr_imm_index(EA, ctx, 0); \ |
| 2919 | - gen_qemu_st##width(cpu_gpr[rS(ctx->opcode)], EA, ctx->mem_idx); \ | 2919 | + gen_qemu_##stop(cpu_gpr[rS(ctx->opcode)], EA, ctx->mem_idx); \ |
| 2920 | tcg_temp_free(EA); \ | 2920 | tcg_temp_free(EA); \ |
| 2921 | } | 2921 | } |
| 2922 | 2922 | ||
| 2923 | -#define GEN_STU(width, opc, type) \ | ||
| 2924 | -GEN_HANDLER(st##width##u, opc, 0xFF, 0xFF, 0x00000000, type) \ | 2923 | +#define GEN_STU(name, stop, opc, type) \ |
| 2924 | +GEN_HANDLER(stop##u, opc, 0xFF, 0xFF, 0x00000000, type) \ | ||
| 2925 | { \ | 2925 | { \ |
| 2926 | TCGv EA; \ | 2926 | TCGv EA; \ |
| 2927 | if (unlikely(rA(ctx->opcode) == 0)) { \ | 2927 | if (unlikely(rA(ctx->opcode) == 0)) { \ |
| 2928 | GEN_EXCP_INVAL(ctx); \ | 2928 | GEN_EXCP_INVAL(ctx); \ |
| 2929 | return; \ | 2929 | return; \ |
| 2930 | } \ | 2930 | } \ |
| 2931 | - EA = tcg_temp_new(); \ | 2931 | + EA = tcg_temp_new(); \ |
| 2932 | if (type == PPC_64B) \ | 2932 | if (type == PPC_64B) \ |
| 2933 | gen_addr_imm_index(EA, ctx, 0x03); \ | 2933 | gen_addr_imm_index(EA, ctx, 0x03); \ |
| 2934 | else \ | 2934 | else \ |
| 2935 | gen_addr_imm_index(EA, ctx, 0); \ | 2935 | gen_addr_imm_index(EA, ctx, 0); \ |
| 2936 | - gen_qemu_st##width(cpu_gpr[rS(ctx->opcode)], EA, ctx->mem_idx); \ | 2936 | + gen_qemu_##stop(cpu_gpr[rS(ctx->opcode)], EA, ctx->mem_idx); \ |
| 2937 | tcg_gen_mov_tl(cpu_gpr[rA(ctx->opcode)], EA); \ | 2937 | tcg_gen_mov_tl(cpu_gpr[rA(ctx->opcode)], EA); \ |
| 2938 | tcg_temp_free(EA); \ | 2938 | tcg_temp_free(EA); \ |
| 2939 | } | 2939 | } |
| 2940 | 2940 | ||
| 2941 | -#define GEN_STUX(width, opc2, opc3, type) \ | ||
| 2942 | -GEN_HANDLER(st##width##ux, 0x1F, opc2, opc3, 0x00000001, type) \ | 2941 | +#define GEN_STUX(name, stop, opc2, opc3, type) \ |
| 2942 | +GEN_HANDLER(name##ux, 0x1F, opc2, opc3, 0x00000001, type) \ | ||
| 2943 | { \ | 2943 | { \ |
| 2944 | TCGv EA; \ | 2944 | TCGv EA; \ |
| 2945 | if (unlikely(rA(ctx->opcode) == 0)) { \ | 2945 | if (unlikely(rA(ctx->opcode) == 0)) { \ |
| 2946 | GEN_EXCP_INVAL(ctx); \ | 2946 | GEN_EXCP_INVAL(ctx); \ |
| 2947 | return; \ | 2947 | return; \ |
| 2948 | } \ | 2948 | } \ |
| 2949 | - EA = tcg_temp_new(); \ | 2949 | + EA = tcg_temp_new(); \ |
| 2950 | gen_addr_reg_index(EA, ctx); \ | 2950 | gen_addr_reg_index(EA, ctx); \ |
| 2951 | - gen_qemu_st##width(cpu_gpr[rS(ctx->opcode)], EA, ctx->mem_idx); \ | 2951 | + gen_qemu_##stop(cpu_gpr[rS(ctx->opcode)], EA, ctx->mem_idx); \ |
| 2952 | tcg_gen_mov_tl(cpu_gpr[rA(ctx->opcode)], EA); \ | 2952 | tcg_gen_mov_tl(cpu_gpr[rA(ctx->opcode)], EA); \ |
| 2953 | tcg_temp_free(EA); \ | 2953 | tcg_temp_free(EA); \ |
| 2954 | } | 2954 | } |
| 2955 | 2955 | ||
| 2956 | -#define GEN_STX(width, opc2, opc3, type) \ | ||
| 2957 | -GEN_HANDLER(st##width##x, 0x1F, opc2, opc3, 0x00000001, type) \ | 2956 | +#define GEN_STX(name, stop, opc2, opc3, type) \ |
| 2957 | +GEN_HANDLER(name##x, 0x1F, opc2, opc3, 0x00000001, type) \ | ||
| 2958 | { \ | 2958 | { \ |
| 2959 | - TCGv EA = tcg_temp_new(); \ | 2959 | + TCGv EA = tcg_temp_new(); \ |
| 2960 | gen_addr_reg_index(EA, ctx); \ | 2960 | gen_addr_reg_index(EA, ctx); \ |
| 2961 | - gen_qemu_st##width(cpu_gpr[rS(ctx->opcode)], EA, ctx->mem_idx); \ | 2961 | + gen_qemu_##stop(cpu_gpr[rS(ctx->opcode)], EA, ctx->mem_idx); \ |
| 2962 | tcg_temp_free(EA); \ | 2962 | tcg_temp_free(EA); \ |
| 2963 | } | 2963 | } |
| 2964 | 2964 | ||
| 2965 | -#define GEN_STS(width, op, type) \ | ||
| 2966 | -GEN_ST(width, op | 0x20, type); \ | ||
| 2967 | -GEN_STU(width, op | 0x21, type); \ | ||
| 2968 | -GEN_STUX(width, 0x17, op | 0x01, type); \ | ||
| 2969 | -GEN_STX(width, 0x17, op | 0x00, type) | 2965 | +#define GEN_STS(name, stop, op, type) \ |
| 2966 | +GEN_ST(name, stop, op | 0x20, type); \ | ||
| 2967 | +GEN_STU(name, stop, op | 0x21, type); \ | ||
| 2968 | +GEN_STUX(name, stop, 0x17, op | 0x01, type); \ | ||
| 2969 | +GEN_STX(name, stop, 0x17, op | 0x00, type) | ||
| 2970 | 2970 | ||
| 2971 | /* stb stbu stbux stbx */ | 2971 | /* stb stbu stbux stbx */ |
| 2972 | -GEN_STS(8, 0x06, PPC_INTEGER); | 2972 | +GEN_STS(stb, st8, 0x06, PPC_INTEGER); |
| 2973 | /* sth sthu sthux sthx */ | 2973 | /* sth sthu sthux sthx */ |
| 2974 | -GEN_STS(16, 0x0C, PPC_INTEGER); | 2974 | +GEN_STS(sth, st16, 0x0C, PPC_INTEGER); |
| 2975 | /* stw stwu stwux stwx */ | 2975 | /* stw stwu stwux stwx */ |
| 2976 | -GEN_STS(32, 0x04, PPC_INTEGER); | 2976 | +GEN_STS(stw, st32, 0x04, PPC_INTEGER); |
| 2977 | #if defined(TARGET_PPC64) | 2977 | #if defined(TARGET_PPC64) |
| 2978 | -GEN_STUX(64, 0x15, 0x05, PPC_64B); | ||
| 2979 | -GEN_STX(64, 0x15, 0x04, PPC_64B); | 2978 | +GEN_STUX(std, st64, 0x15, 0x05, PPC_64B); |
| 2979 | +GEN_STX(std, st64, 0x15, 0x04, PPC_64B); | ||
| 2980 | GEN_HANDLER(std, 0x3E, 0xFF, 0xFF, 0x00000000, PPC_64B) | 2980 | GEN_HANDLER(std, 0x3E, 0xFF, 0xFF, 0x00000000, PPC_64B) |
| 2981 | { | 2981 | { |
| 2982 | int rs; | 2982 | int rs; |
| @@ -3036,7 +3036,7 @@ void always_inline gen_qemu_ld16ur(TCGv t0, TCGv t1, int flags) | @@ -3036,7 +3036,7 @@ void always_inline gen_qemu_ld16ur(TCGv t0, TCGv t1, int flags) | ||
| 3036 | tcg_gen_extu_i32_tl(t0, temp); | 3036 | tcg_gen_extu_i32_tl(t0, temp); |
| 3037 | tcg_temp_free_i32(temp); | 3037 | tcg_temp_free_i32(temp); |
| 3038 | } | 3038 | } |
| 3039 | -GEN_LDX(16ur, 0x16, 0x18, PPC_INTEGER); | 3039 | +GEN_LDX(lhbr, ld16ur, 0x16, 0x18, PPC_INTEGER); |
| 3040 | 3040 | ||
| 3041 | /* lwbrx */ | 3041 | /* lwbrx */ |
| 3042 | void always_inline gen_qemu_ld32ur(TCGv t0, TCGv t1, int flags) | 3042 | void always_inline gen_qemu_ld32ur(TCGv t0, TCGv t1, int flags) |
| @@ -3048,7 +3048,7 @@ void always_inline gen_qemu_ld32ur(TCGv t0, TCGv t1, int flags) | @@ -3048,7 +3048,7 @@ void always_inline gen_qemu_ld32ur(TCGv t0, TCGv t1, int flags) | ||
| 3048 | tcg_gen_extu_i32_tl(t0, temp); | 3048 | tcg_gen_extu_i32_tl(t0, temp); |
| 3049 | tcg_temp_free_i32(temp); | 3049 | tcg_temp_free_i32(temp); |
| 3050 | } | 3050 | } |
| 3051 | -GEN_LDX(32ur, 0x16, 0x10, PPC_INTEGER); | 3051 | +GEN_LDX(lwbr, ld32ur, 0x16, 0x10, PPC_INTEGER); |
| 3052 | 3052 | ||
| 3053 | /* sthbrx */ | 3053 | /* sthbrx */ |
| 3054 | void always_inline gen_qemu_st16r(TCGv t0, TCGv t1, int flags) | 3054 | void always_inline gen_qemu_st16r(TCGv t0, TCGv t1, int flags) |
| @@ -3063,7 +3063,7 @@ void always_inline gen_qemu_st16r(TCGv t0, TCGv t1, int flags) | @@ -3063,7 +3063,7 @@ void always_inline gen_qemu_st16r(TCGv t0, TCGv t1, int flags) | ||
| 3063 | gen_qemu_st16(t2, t1, flags); | 3063 | gen_qemu_st16(t2, t1, flags); |
| 3064 | tcg_temp_free(t2); | 3064 | tcg_temp_free(t2); |
| 3065 | } | 3065 | } |
| 3066 | -GEN_STX(16r, 0x16, 0x1C, PPC_INTEGER); | 3066 | +GEN_STX(sthbr, st16r, 0x16, 0x1C, PPC_INTEGER); |
| 3067 | 3067 | ||
| 3068 | /* stwbrx */ | 3068 | /* stwbrx */ |
| 3069 | void always_inline gen_qemu_st32r(TCGv t0, TCGv t1, int flags) | 3069 | void always_inline gen_qemu_st32r(TCGv t0, TCGv t1, int flags) |
| @@ -3077,7 +3077,7 @@ void always_inline gen_qemu_st32r(TCGv t0, TCGv t1, int flags) | @@ -3077,7 +3077,7 @@ void always_inline gen_qemu_st32r(TCGv t0, TCGv t1, int flags) | ||
| 3077 | gen_qemu_st32(t2, t1, flags); | 3077 | gen_qemu_st32(t2, t1, flags); |
| 3078 | tcg_temp_free(t2); | 3078 | tcg_temp_free(t2); |
| 3079 | } | 3079 | } |
| 3080 | -GEN_STX(32r, 0x16, 0x14, PPC_INTEGER); | 3080 | +GEN_STX(stwbr, st32r, 0x16, 0x14, PPC_INTEGER); |
| 3081 | 3081 | ||
| 3082 | /*** Integer load and store multiple ***/ | 3082 | /*** Integer load and store multiple ***/ |
| 3083 | #define op_ldstm(name, reg) (*gen_op_##name[ctx->mem_idx])(reg) | 3083 | #define op_ldstm(name, reg) (*gen_op_##name[ctx->mem_idx])(reg) |