Revision fa3966a3
b/target-ppc/translate.c | ||
---|---|---|
2580 | 2580 |
{ |
2581 | 2581 |
tcg_gen_qemu_ld16u(arg1, arg2, ctx->mem_idx); |
2582 | 2582 |
if (unlikely(ctx->le_mode)) { |
2583 |
#if defined(TARGET_PPC64) |
|
2584 |
TCGv_i32 t0 = tcg_temp_new_i32(); |
|
2585 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
2586 |
tcg_gen_bswap16_i32(t0, t0); |
|
2587 |
tcg_gen_extu_i32_tl(arg1, t0); |
|
2588 |
tcg_temp_free_i32(t0); |
|
2589 |
#else |
|
2590 |
tcg_gen_bswap16_i32(arg1, arg1); |
|
2591 |
#endif |
|
2583 |
tcg_gen_bswap16_tl(arg1, arg1); |
|
2592 | 2584 |
} |
2593 | 2585 |
} |
2594 | 2586 |
|
2595 | 2587 |
static always_inline void gen_qemu_ld16s(DisasContext *ctx, TCGv arg1, TCGv arg2) |
2596 | 2588 |
{ |
2597 | 2589 |
if (unlikely(ctx->le_mode)) { |
2598 |
#if defined(TARGET_PPC64) |
|
2599 |
TCGv_i32 t0; |
|
2600 | 2590 |
tcg_gen_qemu_ld16u(arg1, arg2, ctx->mem_idx); |
2601 |
t0 = tcg_temp_new_i32(); |
|
2602 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
2603 |
tcg_gen_bswap16_i32(t0, t0); |
|
2604 |
tcg_gen_extu_i32_tl(arg1, t0); |
|
2591 |
tcg_gen_bswap16_tl(arg1, arg1); |
|
2605 | 2592 |
tcg_gen_ext16s_tl(arg1, arg1); |
2606 |
tcg_temp_free_i32(t0); |
|
2607 |
#else |
|
2608 |
tcg_gen_qemu_ld16u(arg1, arg2, ctx->mem_idx); |
|
2609 |
tcg_gen_bswap16_i32(arg1, arg1); |
|
2610 |
tcg_gen_ext16s_i32(arg1, arg1); |
|
2611 |
#endif |
|
2612 | 2593 |
} else { |
2613 | 2594 |
tcg_gen_qemu_ld16s(arg1, arg2, ctx->mem_idx); |
2614 | 2595 |
} |
... | ... | |
2618 | 2599 |
{ |
2619 | 2600 |
tcg_gen_qemu_ld32u(arg1, arg2, ctx->mem_idx); |
2620 | 2601 |
if (unlikely(ctx->le_mode)) { |
2621 |
#if defined(TARGET_PPC64) |
|
2622 |
TCGv_i32 t0 = tcg_temp_new_i32(); |
|
2623 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
2624 |
tcg_gen_bswap32_i32(t0, t0); |
|
2625 |
tcg_gen_extu_i32_tl(arg1, t0); |
|
2626 |
tcg_temp_free_i32(t0); |
|
2627 |
#else |
|
2628 |
tcg_gen_bswap32_i32(arg1, arg1); |
|
2629 |
#endif |
|
2602 |
tcg_gen_bswap32_tl(arg1, arg1); |
|
2630 | 2603 |
} |
2631 | 2604 |
} |
2632 | 2605 |
|
... | ... | |
2634 | 2607 |
static always_inline void gen_qemu_ld32s(DisasContext *ctx, TCGv arg1, TCGv arg2) |
2635 | 2608 |
{ |
2636 | 2609 |
if (unlikely(ctx->le_mode)) { |
2637 |
TCGv_i32 t0; |
|
2638 | 2610 |
tcg_gen_qemu_ld32u(arg1, arg2, ctx->mem_idx); |
2639 |
t0 = tcg_temp_new_i32(); |
|
2640 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
2641 |
tcg_gen_bswap32_i32(t0, t0); |
|
2642 |
tcg_gen_ext_i32_tl(arg1, t0); |
|
2643 |
tcg_temp_free_i32(t0); |
|
2611 |
tcg_gen_bswap32_tl(arg1, arg1); |
|
2612 |
tcg_gen_ext32s_tl(arg1, arg1); |
|
2644 | 2613 |
} else |
2645 | 2614 |
tcg_gen_qemu_ld32s(arg1, arg2, ctx->mem_idx); |
2646 | 2615 |
} |
... | ... | |
2662 | 2631 |
static always_inline void gen_qemu_st16(DisasContext *ctx, TCGv arg1, TCGv arg2) |
2663 | 2632 |
{ |
2664 | 2633 |
if (unlikely(ctx->le_mode)) { |
2665 |
#if defined(TARGET_PPC64) |
|
2666 |
TCGv_i32 t0; |
|
2667 |
TCGv t1; |
|
2668 |
t0 = tcg_temp_new_i32(); |
|
2669 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
2670 |
tcg_gen_ext16u_i32(t0, t0); |
|
2671 |
tcg_gen_bswap16_i32(t0, t0); |
|
2672 |
t1 = tcg_temp_new(); |
|
2673 |
tcg_gen_extu_i32_tl(t1, t0); |
|
2674 |
tcg_temp_free_i32(t0); |
|
2675 |
tcg_gen_qemu_st16(t1, arg2, ctx->mem_idx); |
|
2676 |
tcg_temp_free(t1); |
|
2677 |
#else |
|
2678 | 2634 |
TCGv t0 = tcg_temp_new(); |
2679 | 2635 |
tcg_gen_ext16u_tl(t0, arg1); |
2680 |
tcg_gen_bswap16_i32(t0, t0);
|
|
2636 |
tcg_gen_bswap16_tl(t0, t0);
|
|
2681 | 2637 |
tcg_gen_qemu_st16(t0, arg2, ctx->mem_idx); |
2682 | 2638 |
tcg_temp_free(t0); |
2683 |
#endif |
|
2684 | 2639 |
} else { |
2685 | 2640 |
tcg_gen_qemu_st16(arg1, arg2, ctx->mem_idx); |
2686 | 2641 |
} |
... | ... | |
2689 | 2644 |
static always_inline void gen_qemu_st32(DisasContext *ctx, TCGv arg1, TCGv arg2) |
2690 | 2645 |
{ |
2691 | 2646 |
if (unlikely(ctx->le_mode)) { |
2692 |
#if defined(TARGET_PPC64) |
|
2693 |
TCGv_i32 t0; |
|
2694 |
TCGv t1; |
|
2695 |
t0 = tcg_temp_new_i32(); |
|
2696 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
2697 |
tcg_gen_bswap32_i32(t0, t0); |
|
2698 |
t1 = tcg_temp_new(); |
|
2699 |
tcg_gen_extu_i32_tl(t1, t0); |
|
2700 |
tcg_temp_free_i32(t0); |
|
2701 |
tcg_gen_qemu_st32(t1, arg2, ctx->mem_idx); |
|
2702 |
tcg_temp_free(t1); |
|
2703 |
#else |
|
2704 |
TCGv t0 = tcg_temp_new_i32(); |
|
2705 |
tcg_gen_bswap32_i32(t0, arg1); |
|
2647 |
TCGv t0 = tcg_temp_new(); |
|
2648 |
tcg_gen_ext32u_tl(t0, arg1); |
|
2649 |
tcg_gen_bswap32_tl(t0, t0); |
|
2706 | 2650 |
tcg_gen_qemu_st32(t0, arg2, ctx->mem_idx); |
2707 | 2651 |
tcg_temp_free(t0); |
2708 |
#endif |
|
2709 | 2652 |
} else { |
2710 | 2653 |
tcg_gen_qemu_st32(arg1, arg2, ctx->mem_idx); |
2711 | 2654 |
} |
... | ... | |
2993 | 2936 |
{ |
2994 | 2937 |
tcg_gen_qemu_ld16u(arg1, arg2, ctx->mem_idx); |
2995 | 2938 |
if (likely(!ctx->le_mode)) { |
2996 |
#if defined(TARGET_PPC64) |
|
2997 |
TCGv_i32 t0 = tcg_temp_new_i32(); |
|
2998 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
2999 |
tcg_gen_bswap16_i32(t0, t0); |
|
3000 |
tcg_gen_extu_i32_tl(arg1, t0); |
|
3001 |
tcg_temp_free_i32(t0); |
|
3002 |
#else |
|
3003 |
tcg_gen_bswap16_i32(arg1, arg1); |
|
3004 |
#endif |
|
2939 |
tcg_gen_bswap16_tl(arg1, arg1); |
|
3005 | 2940 |
} |
3006 | 2941 |
} |
3007 | 2942 |
GEN_LDX(lhbr, ld16ur, 0x16, 0x18, PPC_INTEGER); |
... | ... | |
3011 | 2946 |
{ |
3012 | 2947 |
tcg_gen_qemu_ld32u(arg1, arg2, ctx->mem_idx); |
3013 | 2948 |
if (likely(!ctx->le_mode)) { |
3014 |
#if defined(TARGET_PPC64) |
|
3015 |
TCGv_i32 t0 = tcg_temp_new_i32(); |
|
3016 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
3017 |
tcg_gen_bswap32_i32(t0, t0); |
|
3018 |
tcg_gen_extu_i32_tl(arg1, t0); |
|
3019 |
tcg_temp_free_i32(t0); |
|
3020 |
#else |
|
3021 |
tcg_gen_bswap32_i32(arg1, arg1); |
|
3022 |
#endif |
|
2949 |
tcg_gen_bswap32_tl(arg1, arg1); |
|
3023 | 2950 |
} |
3024 | 2951 |
} |
3025 | 2952 |
GEN_LDX(lwbr, ld32ur, 0x16, 0x10, PPC_INTEGER); |
... | ... | |
3028 | 2955 |
static void always_inline gen_qemu_st16r(DisasContext *ctx, TCGv arg1, TCGv arg2) |
3029 | 2956 |
{ |
3030 | 2957 |
if (likely(!ctx->le_mode)) { |
3031 |
#if defined(TARGET_PPC64) |
|
3032 |
TCGv_i32 t0; |
|
3033 |
TCGv t1; |
|
3034 |
t0 = tcg_temp_new_i32(); |
|
3035 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
3036 |
tcg_gen_ext16u_i32(t0, t0); |
|
3037 |
tcg_gen_bswap16_i32(t0, t0); |
|
3038 |
t1 = tcg_temp_new(); |
|
3039 |
tcg_gen_extu_i32_tl(t1, t0); |
|
3040 |
tcg_temp_free_i32(t0); |
|
3041 |
tcg_gen_qemu_st16(t1, arg2, ctx->mem_idx); |
|
3042 |
tcg_temp_free(t1); |
|
3043 |
#else |
|
3044 | 2958 |
TCGv t0 = tcg_temp_new(); |
3045 | 2959 |
tcg_gen_ext16u_tl(t0, arg1); |
3046 |
tcg_gen_bswap16_i32(t0, t0);
|
|
2960 |
tcg_gen_bswap16_tl(t0, t0);
|
|
3047 | 2961 |
tcg_gen_qemu_st16(t0, arg2, ctx->mem_idx); |
3048 | 2962 |
tcg_temp_free(t0); |
3049 |
#endif |
|
3050 | 2963 |
} else { |
3051 | 2964 |
tcg_gen_qemu_st16(arg1, arg2, ctx->mem_idx); |
3052 | 2965 |
} |
... | ... | |
3057 | 2970 |
static void always_inline gen_qemu_st32r(DisasContext *ctx, TCGv arg1, TCGv arg2) |
3058 | 2971 |
{ |
3059 | 2972 |
if (likely(!ctx->le_mode)) { |
3060 |
#if defined(TARGET_PPC64) |
|
3061 |
TCGv_i32 t0; |
|
3062 |
TCGv t1; |
|
3063 |
t0 = tcg_temp_new_i32(); |
|
3064 |
tcg_gen_trunc_tl_i32(t0, arg1); |
|
3065 |
tcg_gen_bswap32_i32(t0, t0); |
|
3066 |
t1 = tcg_temp_new(); |
|
3067 |
tcg_gen_extu_i32_tl(t1, t0); |
|
3068 |
tcg_temp_free_i32(t0); |
|
3069 |
tcg_gen_qemu_st32(t1, arg2, ctx->mem_idx); |
|
3070 |
tcg_temp_free(t1); |
|
3071 |
#else |
|
3072 |
TCGv t0 = tcg_temp_new_i32(); |
|
3073 |
tcg_gen_bswap32_i32(t0, arg1); |
|
2973 |
TCGv t0 = tcg_temp_new(); |
|
2974 |
tcg_gen_ext32u_tl(t0, arg1); |
|
2975 |
tcg_gen_bswap32_tl(t0, t0); |
|
3074 | 2976 |
tcg_gen_qemu_st32(t0, arg2, ctx->mem_idx); |
3075 | 2977 |
tcg_temp_free(t0); |
3076 |
#endif |
|
3077 | 2978 |
} else { |
3078 | 2979 |
tcg_gen_qemu_st32(arg1, arg2, ctx->mem_idx); |
3079 | 2980 |
} |
Also available in: Unified diff