Correct immediate range for shifter operands.  Patch by James Molloy, with additional encoding fixes added by me.

llvm-svn: 137322
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
index e047fb8..ee720d7 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
@@ -1032,7 +1032,10 @@
 
   // Encode shift_imm bit[11:7].
   Binary |= SBits << 4;
-  return Binary | ARM_AM::getSORegOffset(MO1.getImm()) << 7;
+  unsigned Offset = ARM_AM::getSORegOffset(MO1.getImm());
+  assert(Offset && "Offset must be in range 1-32!");
+  if (Offset == 32) Offset = 0;
+  return Binary | (Offset << 7);
 }