Revision e318a60b target-arm/translate.c

b/target-arm/translate.c
3810 3810
    rn = (insn >> 16) & 0xf;
3811 3811
    rm = insn & 0xf;
3812 3812
    load = (insn & (1 << 21)) != 0;
3813
    addr = tcg_temp_new_i32();
3814 3813
    if ((insn & (1 << 23)) == 0) {
3815 3814
        /* Load store all elements.  */
3816 3815
        op = (insn >> 8) & 0xf;
......
3822 3821
        spacing = neon_ls_element_type[op].spacing;
3823 3822
        if (size == 3 && (interleave | spacing) != 1)
3824 3823
            return 1;
3824
        addr = tcg_temp_new_i32();
3825 3825
        load_reg_var(s, addr, rn);
3826 3826
        stride = (1 << size) * interleave;
3827 3827
        for (reg = 0; reg < nregs; reg++) {
......
3907 3907
            }
3908 3908
            rd += spacing;
3909 3909
        }
3910
        tcg_temp_free_i32(addr);
3910 3911
        stride = nregs * 8;
3911 3912
    } else {
3912 3913
        size = (insn >> 10) & 3;
......
3932 3933
            if (nregs == 3 && a == 1) {
3933 3934
                return 1;
3934 3935
            }
3936
            addr = tcg_temp_new_i32();
3935 3937
            load_reg_var(s, addr, rn);
3936 3938
            if (nregs == 1) {
3937 3939
                /* VLD1 to all lanes: bit 5 indicates how many Dregs to write */
......
3955 3957
                    rd += stride;
3956 3958
                }
3957 3959
            }
3960
            tcg_temp_free_i32(addr);
3958 3961
            stride = (1 << size) * nregs;
3959 3962
        } else {
3960 3963
            /* Single element.  */
......
3976 3979
                abort();
3977 3980
            }
3978 3981
            nregs = ((insn >> 8) & 3) + 1;
3982
            addr = tcg_temp_new_i32();
3979 3983
            load_reg_var(s, addr, rn);
3980 3984
            for (reg = 0; reg < nregs; reg++) {
3981 3985
                if (load) {
......
4017 4021
                rd += stride;
4018 4022
                tcg_gen_addi_i32(addr, addr, 1 << size);
4019 4023
            }
4024
            tcg_temp_free_i32(addr);
4020 4025
            stride = nregs * (1 << size);
4021 4026
        }
4022 4027
    }
4023
    tcg_temp_free_i32(addr);
4024 4028
    if (rm != 15) {
4025 4029
        TCGv base;
4026 4030

  

Also available in: Unified diff