On Mon, 19 Aug 2019 at 22:38, Richard Henderson
<[email protected]> wrote:
>
> Signed-off-by: Richard Henderson <[email protected]>
> ---
> target/arm/translate.c | 560 ++++++++++++++++++++++-------------------
> target/arm/a32.decode | 48 ++++
> target/arm/t32.decode | 46 ++++
> 3 files changed, 396 insertions(+), 258 deletions(-)
> +static bool op_stl(DisasContext *s, arg_STL *a, TCGMemOp mop)
> +{
> + TCGv_i32 addr, tmp;
> +
> + if (!ENABLE_ARCH_8) {
> + return false;
> + }
> + addr = load_reg(s, a->rn);
> +
> + tmp = load_reg(s, a->rt);
> + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_STRL);
> + gen_aa32_st_i32(s, tmp, addr, get_mem_index(s), mop | s->be_data);
> + disas_set_da_iss(s, mop, a->rt | ISSIsAcqRel | ISSIsWrite);
> +
> + tcg_temp_free_i32(tmp);
> + tcg_temp_free_i32(addr);
> + return true;
> +}
> +
> - rm = insn & 0xf;
> - tmp = load_reg(s, rm);
> - switch (op1) {
> - case 0: /* stl */
> - gen_aa32_st32_iss(s, tmp, addr,
> - get_mem_index(s),
> - rm | ISSIsAcqRel);
> - break;
> - case 2: /* stlb */
> - gen_aa32_st8_iss(s, tmp, addr,
> - get_mem_index(s),
> - rm | ISSIsAcqRel);
> - break;
> - case 3: /* stlh */
> - gen_aa32_st16_iss(s, tmp, addr,
> - get_mem_index(s),
> - rm | ISSIsAcqRel);
> - break;
Any particular reason for doing separate gen_aa32_st_i32()
and disas_set_da_iss() calls rather than using the _gen_aa32_st32_iss()
function that the old decoder did?
either way
Reviewed-by: Peter Maydell <[email protected]>
thanks
-- PMM