mirror of https://gitee.com/openkylin/qemu.git
target/arm: Implement MVE LCTP
Implement the MVE LCTP instruction. We put its decode and implementation with the other low-overhead-branch insns because although it is only present if MVE is implemented it is logically in the same group as the other LOB insns. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20210614151007.4545-7-peter.maydell@linaro.org
This commit is contained in:
parent
9a486856e9
commit
76c32d721d
|
@ -674,5 +674,7 @@ BL 1111 0. .......... 11.1 ............ @branch24
|
|||
DLS 1111 0 0000 100 rn:4 1110 0000 0000 0001
|
||||
WLS 1111 0 0000 100 rn:4 1100 . .......... 1 imm=%lob_imm
|
||||
LE 1111 0 0000 0 f:1 0 1111 1100 . .......... 1 imm=%lob_imm
|
||||
|
||||
LCTP 1111 0 0000 000 1111 1110 0000 0000 0001
|
||||
]
|
||||
}
|
||||
|
|
|
@ -8191,6 +8191,30 @@ static bool trans_LE(DisasContext *s, arg_LE *a)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool trans_LCTP(DisasContext *s, arg_LCTP *a)
|
||||
{
|
||||
/*
|
||||
* M-profile Loop Clear with Tail Predication. Since our implementation
|
||||
* doesn't cache branch information, all we need to do is reset
|
||||
* FPSCR.LTPSIZE to 4.
|
||||
*/
|
||||
TCGv_i32 ltpsize;
|
||||
|
||||
if (!dc_isar_feature(aa32_lob, s) ||
|
||||
!dc_isar_feature(aa32_mve, s)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!vfp_access_check(s)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
ltpsize = tcg_const_i32(4);
|
||||
store_cpu_field(ltpsize, v7m.ltpsize);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static bool op_tbranch(DisasContext *s, arg_tbranch *a, bool half)
|
||||
{
|
||||
TCGv_i32 addr, tmp;
|
||||
|
|
Loading…
Reference in New Issue