mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 17:23:56 -06:00
target/arm: Implement SME LDR, STR
We can reuse the SVE functions for LDR and STR, passing in the base of the ZA vector and a zero offset. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20220708151540.18136-23-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
8713f73e53
commit
4c46a5f12c
2 changed files with 31 additions and 0 deletions
|
@ -46,3 +46,10 @@ LDST1 1110000 0 esz:2 st:1 rm:5 v:1 .. pg:3 rn:5 0 za_imm:4 \
|
||||||
&ldst rs=%mova_rs
|
&ldst rs=%mova_rs
|
||||||
LDST1 1110000 111 st:1 rm:5 v:1 .. pg:3 rn:5 0 za_imm:4 \
|
LDST1 1110000 111 st:1 rm:5 v:1 .. pg:3 rn:5 0 za_imm:4 \
|
||||||
&ldst esz=4 rs=%mova_rs
|
&ldst esz=4 rs=%mova_rs
|
||||||
|
|
||||||
|
&ldstr rv rn imm
|
||||||
|
@ldstr ....... ... . ...... .. ... rn:5 . imm:4 \
|
||||||
|
&ldstr rv=%mova_rs
|
||||||
|
|
||||||
|
LDR 1110000 100 0 000000 .. 000 ..... 0 .... @ldstr
|
||||||
|
STR 1110000 100 1 000000 .. 000 ..... 0 .... @ldstr
|
||||||
|
|
|
@ -243,3 +243,27 @@ static bool trans_LDST1(DisasContext *s, arg_LDST1 *a)
|
||||||
tcg_temp_free_i64(addr);
|
tcg_temp_free_i64(addr);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef void GenLdStR(DisasContext *, TCGv_ptr, int, int, int, int);
|
||||||
|
|
||||||
|
static bool do_ldst_r(DisasContext *s, arg_ldstr *a, GenLdStR *fn)
|
||||||
|
{
|
||||||
|
int svl = streaming_vec_reg_size(s);
|
||||||
|
int imm = a->imm;
|
||||||
|
TCGv_ptr base;
|
||||||
|
|
||||||
|
if (!sme_za_enabled_check(s)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ZA[n] equates to ZA0H.B[n]. */
|
||||||
|
base = get_tile_rowcol(s, MO_8, a->rv, imm, false);
|
||||||
|
|
||||||
|
fn(s, base, 0, svl, a->rn, imm * svl);
|
||||||
|
|
||||||
|
tcg_temp_free_ptr(base);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRANS_FEAT(LDR, aa64_sme, do_ldst_r, a, gen_sve_ldr)
|
||||||
|
TRANS_FEAT(STR, aa64_sme, do_ldst_r, a, gen_sve_str)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue