Fix invalid encoding for single register push/pop.

LDMIA/STMDB are CONSTRAINED UNPREDICTABLE when used with a single
register argument. In such cases, encode a single-register push/pop
instead.
diff --git a/src/aarch32/macro-assembler-aarch32.h b/src/aarch32/macro-assembler-aarch32.h
index 6d76642..62c116d 100644
--- a/src/aarch32/macro-assembler-aarch32.h
+++ b/src/aarch32/macro-assembler-aarch32.h
@@ -2897,7 +2897,12 @@
     VIXL_ASSERT(OutsideITBlock());
     MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond, guard);
-    pop(cond, registers);
+    if (registers.IsSingleRegister() &&
+        (!IsUsingT32() || !registers.IsR0toR7orPC())) {
+      pop(cond, registers.GetFirstAvailableRegister());
+    } else if (!registers.IsEmpty()) {
+      pop(cond, registers);
+    }
   }
   void Pop(RegisterList registers) { Pop(al, registers); }
 
@@ -2917,7 +2922,12 @@
     VIXL_ASSERT(OutsideITBlock());
     MacroEmissionCheckScope guard(this);
     ITScope it_scope(this, &cond, guard);
-    push(cond, registers);
+    if (registers.IsSingleRegister() &&
+        (!IsUsingT32() || !registers.IsR0toR7orLR())) {
+      push(cond, registers.GetFirstAvailableRegister());
+    } else if (!registers.IsEmpty()) {
+      push(cond, registers);
+    }
   }
   void Push(RegisterList registers) { Push(al, registers); }