Revision e318a60b
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