Add initial integrated assembler w/ some Xmm ops.

Add a flag to use the integrated assembler.

Handle simple XMM binary op instructions as an initial example of how
instructions might be handled. This tests fixups in a very limited sense --
Track buffer locations of fixups for floating point immediates.

Patchset one shows the original dart assembler code (revision 39313), so that
it can be diffed.

BUG=none
R=stichnot@chromium.org

Review URL: https://codereview.chromium.org/574133002
diff --git a/src/IceTargetLowering.cpp b/src/IceTargetLowering.cpp
index 3bae591..f663155 100644
--- a/src/IceTargetLowering.cpp
+++ b/src/IceTargetLowering.cpp
@@ -15,6 +15,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "assembler_ia32.h"
 #include "IceCfg.h" // setError()
 #include "IceCfgNode.h"
 #include "IceOperand.h"
@@ -97,6 +98,15 @@
   return NULL;
 }
 
+Assembler *TargetLowering::createAssembler(TargetArch Target, Cfg *Func) {
+  // These statements can be #ifdef'd to specialize the assembler
+  // to a subset of the available targets.  TODO: use CRTP.
+  if (Target == Target_X8632)
+    return new x86::AssemblerX86();
+  Func->setError("Unsupported target");
+  return NULL;
+}
+
 void TargetLowering::doAddressOpt() {
   if (llvm::isa<InstLoad>(*Context.getCur()))
     doAddressOptLoad();