Revision f8edcbaa tcg/ppc/tcg-target.c

b/tcg/ppc/tcg-target.c
474 474

  
475 475
static void tcg_out_qemu_ld (TCGContext *s, const TCGArg *args, int opc)
476 476
{
477
    int addr_reg, data_reg, data_reg2, r0, mem_index, s_bits, bswap;
477
    int addr_reg, data_reg, data_reg2, r0, r1, mem_index, s_bits, bswap;
478 478
#ifdef CONFIG_SOFTMMU
479
    int r1, r2;
479
    int r2;
480 480
    void *label1_ptr, *label2_ptr;
481 481
#endif
482 482
#if TARGET_LONG_BITS == 64
......
599 599

  
600 600
#else  /* !CONFIG_SOFTMMU */
601 601
    r0 = addr_reg;
602
    r1 = 3;
602 603
#endif
603 604

  
604 605
#ifdef TARGET_WORDS_BIGENDIAN
......
632 633
        break;
633 634
    case 3:
634 635
        if (bswap) {
635
            if (r0 == data_reg) {
636
                tcg_out32 (s, LWBRX | RT (0) | RB (r0));
637
                tcg_out32 (s, ADDI | RT (r0) | RA (r0) |  4);
638
                tcg_out32 (s, LWBRX | RT (data_reg2) | RB (r0));
639
                tcg_out_mov (s, data_reg, 0);
640
            }
641
            else {
642
                tcg_out32 (s, LWBRX | RT (data_reg) | RB (r0));
643
                tcg_out32 (s, ADDI | RT (r0) | RA (r0) |  4);
644
                tcg_out32 (s, LWBRX | RT (data_reg2) | RB (r0));
645
            }
636
            tcg_out32 (s, ADDI | RT (r1) | RA (r0) |  4);
637
            tcg_out32 (s, LWBRX | RT (data_reg) | RB (r0));
638
            tcg_out32 (s, LWBRX | RT (data_reg2) | RB (r1));
646 639
        }
647 640
        else {
648 641
            if (r0 == data_reg2) {

Also available in: Unified diff