Revision fa3966a3 target-ppc/translate.c

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