Start incorporating the ARM integrated assembler.

Extends the ARM32 assembler to be able to generate a trivial function
footprint using the -filetype=iasm option.

Also does a couple of cleanups:

1) Move UnimplementedError macro to common location so that it can be
used by everyone.

2) Add a GlobalContext argument to the assembler, so that it can
look at flags etc.

BUG= https://code.google.com/p/nativeclient/issues/detail?id=4334
R=stichnot@chromium.org

Review URL: https://codereview.chromium.org/1397933002 .
diff --git a/src/IceTargetLowering.h b/src/IceTargetLowering.h
index 32fdc44..ee0de8f 100644
--- a/src/IceTargetLowering.h
+++ b/src/IceTargetLowering.h
@@ -28,6 +28,18 @@
 
 namespace Ice {
 
+// UnimplementedError is defined as a macro so that we can get actual line
+// numbers.
+#define UnimplementedError(Flags)                                              \
+  do {                                                                         \
+    if (!static_cast<const ClFlags &>(Flags).getSkipUnimplemented()) {         \
+      /* Use llvm_unreachable instead of report_fatal_error, which gives       \
+         better stack traces. */                                               \
+      llvm_unreachable("Not yet implemented");                                 \
+      abort();                                                                 \
+    }                                                                          \
+  } while (0)
+
 /// LoweringContext makes it easy to iterate through non-deleted instructions in
 /// a node, and insert new (lowered) instructions at the current point. Along
 /// with the instruction list container and associated iterators, it holds the