From f0184c4b8d8128683b8156d832653181913a590b Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sat, 25 Aug 2018 23:01:08 +0100 Subject: [PATCH] a32/exception_generating: BPKT: Define unpredictable behaviour Define unpredictable behaviour to be BKPT executes conditionally --- .../translate/translate_arm/exception_generating.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/frontend/A32/translate/translate_arm/exception_generating.cpp b/src/frontend/A32/translate/translate_arm/exception_generating.cpp index 1fe76290..87a37642 100644 --- a/src/frontend/A32/translate/translate_arm/exception_generating.cpp +++ b/src/frontend/A32/translate/translate_arm/exception_generating.cpp @@ -11,13 +11,17 @@ namespace Dynarmic::A32 { bool ArmTranslatorVisitor::arm_BKPT(Cond cond, Imm12 /*imm12*/, Imm4 /*imm4*/) { - if (cond != Cond::AL) { + if (cond != Cond::AL && !options.define_unpredictable_behaviour) { return UnpredictableInstruction(); } + // UNPREDICTABLE: The instruction executes conditionally. - ir.ExceptionRaised(Exception::Breakpoint); - ir.SetTerm(IR::Term::CheckHalt{IR::Term::ReturnToDispatch{}}); - return false; + if (ConditionPassed(cond)) { + ir.ExceptionRaised(Exception::Breakpoint); + ir.SetTerm(IR::Term::CheckHalt{IR::Term::ReturnToDispatch{}}); + return false; + } + return true; } bool ArmTranslatorVisitor::arm_SVC(Cond cond, Imm24 imm24) {