mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-22 23:11:03 +00:00
target/arm: Add v8M stack checks for VLDM/VSTM
Add the v8M stack checks for the VLDM/VSTM (aka VPUSH/VPOP) instructions. This code is currently unreachable because we haven't yet implemented M profile floating point support, but since the change is simple, we add it now because otherwise we're likely to forget to do it later. Backports commit 8a954faf5412d5073d585d85a1da63a09bb5d84e from qemu
This commit is contained in:
parent
37d0c7fcf1
commit
76f521e6c3
|
@ -4349,6 +4349,18 @@ static int disas_vfp_insn(DisasContext *s, uint32_t insn)
|
|||
if (insn & (1 << 24)) /* pre-decrement */
|
||||
tcg_gen_addi_i32(tcg_ctx, addr, addr, 0-((insn & 0xff) << 2));
|
||||
|
||||
if (s->v8m_stackcheck && rn == 13 && w) {
|
||||
/*
|
||||
* Here 'addr' is the lowest address we will store to,
|
||||
* and is either the old SP (if post-increment) or
|
||||
* the new SP (if pre-decrement). For post-increment
|
||||
* where the old value is below the limit and the new
|
||||
* value is above, it is UNKNOWN whether the limit check
|
||||
* triggers; we choose to trigger.
|
||||
*/
|
||||
gen_helper_v8m_stackcheck(tcg_ctx, tcg_ctx->cpu_env, addr);
|
||||
}
|
||||
|
||||
if (dp)
|
||||
offset = 8;
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue