Fix problems with sandboxing and the ARM integrated assembler.

Fixes (at least) the obvious problems with sandboxing and the
integrated assembler. This includes:

Added assembly instruction Nop.

Fixed implementation of padWithNop.

Fixed linking to local label to only fire when persistent (i.e.  last
pass of assembly generation).

Removed restriction on single register push/pop, since the ARM
integrated assembler converts it to a corresopnding str/ldr.

Fixed OperandARM32FlexImm to use smallest rotation value, so that
external assemblers and the ARM integrated assembler will agree on
encoding.

Fixed ARM sandboxing requires test in sandboxing.ll

BUG=None
R=stichnot@chromium.org

Review URL: https://codereview.chromium.org/1511653002 .
diff --git a/src/IceAssembler.cpp b/src/IceAssembler.cpp
index 04cb949..44c4ee2 100644
--- a/src/IceAssembler.cpp
+++ b/src/IceAssembler.cpp
@@ -35,6 +35,17 @@
   return Result;
 }
 
+void Label::linkTo(const Assembler &Asm, intptr_t Pos) {
+  // We must not set the link until the position is absolutely known. This means
+  // not during the preliminary (sandboxing) pass, and not when the instruction
+  // needs a text fixup (hybrid iasm mode).
+  if (Asm.getPreliminary() || Asm.needsTextFixup())
+    return;
+  assert(!isBound());
+  Position = Pos + kWordSize;
+  assert(isLinked());
+}
+
 void AssemblerBuffer::installFixup(AssemblerFixup *F) {
   if (!Assemblr.getPreliminary())
     Fixups.push_back(F);