backend/arm64/a32_address_space: Terminate early if halted prior to execution beginning

This commit is contained in:
Merry
2022-11-08 20:05:58 +00:00
parent 282bd3ad5c
commit 7dbd87ba2d
2 changed files with 5 additions and 0 deletions

View File

@@ -196,6 +196,9 @@ void A32AddressSpace::EmitPrelude() {
code.STR(Wscratch1, SP, offsetof(StackLayout, save_host_fpcr));
code.MSR(oaknut::SystemReg::FPCR, Xscratch0);
code.LDAR(Wscratch0, Xhalt);
code.CBNZ(Wscratch0, return_from_run_code);
code.BR(X19);
}
@@ -221,6 +224,7 @@ void A32AddressSpace::EmitPrelude() {
oaknut::Label step_hr_loop;
code.l(step_hr_loop);
code.LDAXR(Wscratch0, Xhalt);
code.CBNZ(Wscratch0, return_from_run_code);
code.ORR(Wscratch0, Wscratch0, static_cast<u32>(HaltReason::Step));
code.STLXR(Wscratch1, Wscratch0, Xhalt);
code.CBNZ(Wscratch1, step_hr_loop);