diff --git a/src/frontend/A32/decoder/thumb16.h b/src/frontend/A32/decoder/thumb16.h index 7d73ecc7..77bcd797 100644 --- a/src/frontend/A32/decoder/thumb16.h +++ b/src/frontend/A32/decoder/thumb16.h @@ -90,6 +90,7 @@ std::optional>> DecodeThumb16(u16 // Hint instructions INST(&V::thumb16_NOP, "NOP", "1011111100000000"), // v6T2 INST(&V::thumb16_SEV, "SEV", "1011111101000000"), // v7 + INST(&V::thumb16_WFE, "WFE", "1011111100100000"), // v7 // Miscellaneous 16-bit instructions INST(&V::thumb16_SXTH, "SXTH", "1011001000mmmddd"), // v6 diff --git a/src/frontend/A32/disassembler/disassembler_thumb.cpp b/src/frontend/A32/disassembler/disassembler_thumb.cpp index b08e69f8..6949b07e 100644 --- a/src/frontend/A32/disassembler/disassembler_thumb.cpp +++ b/src/frontend/A32/disassembler/disassembler_thumb.cpp @@ -254,6 +254,10 @@ public: return "sev"; } + std::string thumb16_WFE() { + return "wfe"; + } + std::string thumb16_SXTH(Reg m, Reg d) { return fmt::format("sxth {}, {}", d, m); } diff --git a/src/frontend/A32/translate/translate_thumb.cpp b/src/frontend/A32/translate/translate_thumb.cpp index 8172f62e..bb9ddc1e 100644 --- a/src/frontend/A32/translate/translate_thumb.cpp +++ b/src/frontend/A32/translate/translate_thumb.cpp @@ -684,6 +684,11 @@ struct ThumbTranslatorVisitor final { return RaiseException(Exception::SendEvent); } + // WFE + bool thumb16_WFE() { + return RaiseException(Exception::WaitForEvent); + } + // SXTH , // Rd cannot encode R15. bool thumb16_SXTH(Reg m, Reg d) {