mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 09:43:56 -06:00
target/arm: Implement MVE DLSTP
Implement the MVE DLSTP insn; this is like the existing DLS insn, except that it must do an FPU access check and it sets LTPSIZE to the value specified in the insn. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20210614151007.4545-9-peter.maydell@linaro.org
This commit is contained in:
parent
6822abfdf8
commit
40a36f003c
2 changed files with 27 additions and 5 deletions
|
@ -8114,13 +8114,32 @@ static bool trans_DLS(DisasContext *s, arg_DLS *a)
|
|||
return false;
|
||||
}
|
||||
if (a->rn == 13 || a->rn == 15) {
|
||||
/* CONSTRAINED UNPREDICTABLE: we choose to UNDEF */
|
||||
/*
|
||||
* For DLSTP rn == 15 is a related encoding (LCTP); the
|
||||
* other cases caught by this condition are all
|
||||
* CONSTRAINED UNPREDICTABLE: we choose to UNDEF
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Not a while loop, no tail predication: just set LR to the count */
|
||||
if (a->size != 4) {
|
||||
/* DLSTP */
|
||||
if (!dc_isar_feature(aa32_mve, s)) {
|
||||
return false;
|
||||
}
|
||||
if (!vfp_access_check(s)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* Not a while loop: set LR to the count, and set LTPSIZE for DLSTP */
|
||||
tmp = load_reg(s, a->rn);
|
||||
store_reg(s, 14, tmp);
|
||||
if (a->size != 4) {
|
||||
/* DLSTP: set FPSCR.LTPSIZE */
|
||||
tmp = tcg_const_i32(a->size);
|
||||
store_cpu_field(tmp, v7m.ltpsize);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue