From 05a6b5f62349babf64703777f92633643565409f Mon Sep 17 00:00:00 2001 From: MerryMage Date: Fri, 7 May 2021 08:40:19 +0100 Subject: [PATCH] translate_thumb: Permit ASIMD element or structure load/store instructions to be translated --- src/frontend/A32/translate/translate_thumb.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/A32/translate/translate_thumb.cpp b/src/frontend/A32/translate/translate_thumb.cpp index a1a47cfc..e4d62c0b 100644 --- a/src/frontend/A32/translate/translate_thumb.cpp +++ b/src/frontend/A32/translate/translate_thumb.cpp @@ -104,7 +104,7 @@ IR::Block TranslateThumb(LocationDescriptor descriptor, MemoryReadCodeFuncType m } else { if (const auto decoder = DecodeThumb32(thumb_instruction)) { should_continue = decoder->get().call(visitor, thumb_instruction); - } else if ((thumb_instruction & 0xEC000000) == 0xEC000000) { + } else if ((thumb_instruction & 0xEC000000) == 0xEC000000 || (thumb_instruction & 0xFF100000) == 0xF9000000) { if (const auto vfp_decoder = DecodeVFP(thumb_instruction)) { should_continue = vfp_decoder->get().call(visitor, thumb_instruction); } else if (const auto asimd_decoder = DecodeASIMD(ConvertASIMDInstruction(thumb_instruction))) { @@ -158,7 +158,7 @@ bool TranslateSingleThumbInstruction(IR::Block& block, LocationDescriptor descri thumb_instruction = Common::SwapHalves32(thumb_instruction); if (const auto decoder = DecodeThumb32(thumb_instruction)) { should_continue = decoder->get().call(visitor, thumb_instruction); - } else if ((thumb_instruction & 0xEC000000) == 0xEC000000) { + } else if ((thumb_instruction & 0xEC000000) == 0xEC000000 || (thumb_instruction & 0xFF100000) == 0xF9000000) { if (const auto vfp_decoder = DecodeVFP(thumb_instruction)) { should_continue = vfp_decoder->get().call(visitor, thumb_instruction); } else if (const auto asimd_decoder = DecodeASIMD(ConvertASIMDInstruction(thumb_instruction))) {