diff --git a/src/frontend/A32/decoder/thumb32.inc b/src/frontend/A32/decoder/thumb32.inc
index a8c396bd..3c4a29bb 100644
--- a/src/frontend/A32/decoder/thumb32.inc
+++ b/src/frontend/A32/decoder/thumb32.inc
@@ -77,6 +77,7 @@ INST(thumb32_MOVW_imm,       "MOVW (imm)",               "11110i100100iiii0iiidd
 //INST(thumb32_ADR,            "ADR",                      "11110-10101011110---------------")
 INST(thumb32_SUB_imm_2,      "SUB (imm)",                "11110i10101011010iiiddddiiiiiiii")
 INST(thumb32_MOVT,           "MOVT",                     "11110i101100iiii0iiiddddiiiiiiii")
+INST(thumb32_UDF,            "Invalid decoding",         "11110011-010----0000----0001----")
 INST(thumb32_SSAT16,         "SSAT16",                   "111100110010nnnn0000dddd0000iiii")
 INST(thumb32_USAT16,         "USAT16",                   "111100111010nnnn0000dddd0000iiii")
 INST(thumb32_SSAT,           "SSAT",                     "1111001100s0nnnn0iiiddddii0bbbbb")
diff --git a/src/frontend/A32/translate/impl/thumb32_data_processing_plain_binary_immediate.cpp b/src/frontend/A32/translate/impl/thumb32_data_processing_plain_binary_immediate.cpp
index 44b9a4b5..5094ac31 100644
--- a/src/frontend/A32/translate/impl/thumb32_data_processing_plain_binary_immediate.cpp
+++ b/src/frontend/A32/translate/impl/thumb32_data_processing_plain_binary_immediate.cpp
@@ -19,14 +19,12 @@ static IR::U16 MostSignificantHalf(A32::IREmitter& ir, IR::U32 value) {
 using SaturationFunction = IR::ResultAndOverflow<IR::U32> (IREmitter::*)(const IR::U32&, size_t);
 
 static bool Saturation(ThumbTranslatorVisitor& v, bool sh, Reg n, Reg d, Imm<5> shift_amount, size_t saturate_to, SaturationFunction sat_fn) {
+    ASSERT_MSG(!(sh && shift_amount == 0), "Invalid decode");
+
     if (d == Reg::PC || n == Reg::PC) {
         return v.UnpredictableInstruction();
     }
 
-    if (sh && shift_amount == 0) {
-        ASSERT_FALSE("Invalid decode");
-    }
-
     const auto shift = sh ? ShiftType::ASR : ShiftType::LSL;
     const auto operand = v.EmitImmShift(v.ir.GetRegister(n), shift, shift_amount, v.ir.GetCFlag());
     const auto result = (v.ir.*sat_fn)(operand.result, saturate_to);