Subzero. Adds x86-64 to the list of supported Subzero targets.

Related changes:
NaCl change: https://codereview.chromium.org/1201483005
LLVM change: https://codereview.chromium.org/1193843016

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

Review URL: https://codereview.chromium.org/1199043006.
diff --git a/Makefile.standalone b/Makefile.standalone
index c00022f..f11f097 100644
--- a/Makefile.standalone
+++ b/Makefile.standalone
@@ -178,6 +178,7 @@
 SRCS = \
 	IceAssembler.cpp \
 	IceAssemblerX8632.cpp \
+	IceAssemblerX8664.cpp \
 	IceBrowserCompileServer.cpp \
 	IceCfg.cpp \
 	IceCfgNode.cpp \
@@ -201,6 +202,7 @@
 	IceTargetLoweringARM32.cpp \
 	IceTargetLoweringMIPS32.cpp \
 	IceTargetLoweringX8632.cpp \
+	IceTargetLoweringX8664.cpp \
 	IceThreading.cpp \
 	IceTimerTree.cpp \
 	IceTranslator.cpp \
diff --git a/src/IceAssemblerX8664.cpp b/src/IceAssemblerX8664.cpp
new file mode 100644
index 0000000..e56ada6
--- /dev/null
+++ b/src/IceAssemblerX8664.cpp
@@ -0,0 +1,47 @@
+//===- subzero/src/IceAssemblerX8664.cpp ----------------------------------===//
+//
+//                        The Subzero Code Generator
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the Assembler class for x86-64.
+//
+//===----------------------------------------------------------------------===//
+
+#include "IceAssemblerX8664.h"
+
+namespace Ice {
+namespace X8664 {
+
+void AssemblerX8664::alignFunction() {
+  llvm::report_fatal_error("Not yet implemented");
+}
+
+void AssemblerX8664::padWithNop(intptr_t) {
+  llvm::report_fatal_error("Not yet implemented");
+}
+
+SizeT AssemblerX8664::getBundleAlignLog2Bytes() const {
+  llvm::report_fatal_error("Not yet implemented");
+}
+const char *AssemblerX8664::getNonExecPadDirective() const {
+  llvm::report_fatal_error("Not yet implemented");
+}
+
+llvm::ArrayRef<uint8_t> AssemblerX8664::getNonExecBundlePadding() const {
+  llvm::report_fatal_error("Not yet implemented");
+}
+
+void AssemblerX8664::bindCfgNodeLabel(SizeT) {
+  llvm::report_fatal_error("Not yet implemented");
+}
+
+bool AssemblerX8664::fixupIsPCRel(FixupKind) const {
+  llvm::report_fatal_error("Not yet implemented");
+}
+
+} // namespace X8664
+} // namespace Ice
diff --git a/src/IceAssemblerX8664.h b/src/IceAssemblerX8664.h
index 3ed52a8..de19b65 100644
--- a/src/IceAssemblerX8664.h
+++ b/src/IceAssemblerX8664.h
@@ -1,4 +1,4 @@
-//===- subzero/src/IceAssemberX8664.h - Assembler for x86-64 ----*- C++ -*-===//
+//===- subzero/src/IceAssemblerX8664.h - Assembler for x86-64 -*- C++ -*---===//
 //
 //                        The Subzero Code Generator
 //
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// This file implements the Assembler class for x86-64.h.
+// This file implements the Assembler class for x86-64.
 //
 //===----------------------------------------------------------------------===//
 
@@ -15,6 +15,7 @@
 #define SUBZERO_SRC_ICEASSEMBLERX8664_H
 
 #include "IceAssembler.h"
+#include "IceDefs.h"
 
 namespace Ice {
 namespace X8664 {
@@ -25,36 +26,20 @@
 
 public:
   explicit AssemblerX8664(bool use_far_branches = false) : Assembler() {
+    assert(!use_far_branches);
+    (void)use_far_branches;
     llvm::report_fatal_error("Not yet implemented");
   }
 
-  void alignFunction() override {
-    llvm::report_fatal_error("Not yet implemented");
-  }
+  ~AssemblerX8664() override = default;
 
-  void padWithNop(intptr_t Padding) override {
-    llvm::report_fatal_error("Not yet implemented");
-  }
-
-  SizeT getBundleAlignLog2Bytes() const override {
-    llvm::report_fatal_error("Not yet implemented");
-  }
-
-  const char *getNonExecPadDirective() const override {
-    llvm::report_fatal_error("Not yet implemented");
-  }
-
-  llvm::ArrayRef<uint8_t> getNonExecBundlePadding() const override {
-    llvm::report_fatal_error("Not yet implemented");
-  }
-
-  void bindCfgNodeLabel(SizeT NodeNumber) override {
-    llvm::report_fatal_error("Not yet implemented");
-  }
-
-  bool fixupIsPCRel(FixupKind Kind) const override {
-    llvm::report_fatal_error("Not yet implemented");
-  }
+  void alignFunction() override;
+  void padWithNop(intptr_t Padding) override;
+  SizeT getBundleAlignLog2Bytes() const override;
+  const char *getNonExecPadDirective() const override;
+  llvm::ArrayRef<uint8_t> getNonExecBundlePadding() const override;
+  void bindCfgNodeLabel(SizeT NodeNumber) override;
+  bool fixupIsPCRel(FixupKind Kind) const override;
 };
 
 } // end of namespace X8664
diff --git a/src/IceTargetLoweringX8664.cpp b/src/IceTargetLoweringX8664.cpp
new file mode 100644
index 0000000..21be080
--- /dev/null
+++ b/src/IceTargetLoweringX8664.cpp
@@ -0,0 +1,31 @@
+//===- subzero/src/IceTargetLoweringX8664.cpp - lowering for x86-64 -------===//
+//
+//                        The Subzero Code Generator
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Implements the Target Lowering for x86-64.
+//
+//===----------------------------------------------------------------------===//
+
+#include "IceDefs.h"
+#include "IceTargetLoweringX8664.h"
+
+namespace Ice {
+
+TargetX8664 *TargetX8664::create(Cfg *) {
+  llvm::report_fatal_error("Not yet implemented");
+}
+void TargetDataX8664::lowerGlobals(const VariableDeclarationList &,
+                                   const IceString &) {
+  llvm::report_fatal_error("Not yet implemented");
+}
+
+void TargetDataX8664::lowerConstants() {
+  llvm::report_fatal_error("Not yet implemented");
+}
+
+} // end of namespace Ice
diff --git a/src/IceTargetLoweringX8664.h b/src/IceTargetLoweringX8664.h
index 90daf8c..302fb0f 100644
--- a/src/IceTargetLoweringX8664.h
+++ b/src/IceTargetLoweringX8664.h
@@ -1,4 +1,4 @@
-//===- subzero/src/IceTargetLoweringX8664.h - x86-64 lowering ---*- C++ -*-===//
+//===- subzero/src/IceTargetLoweringX8664.h - lowering for x86-64 -*- C++ -*-=//
 //
 //                        The Subzero Code Generator
 //
@@ -7,15 +7,16 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// This file declares the TargetLoweringX8664 class, which
-// implements the TargetLowering interface for the x86-64
-// architecture.
+// This file declares the TargetLoweringX8664 class, which implements the
+// TargetLowering interface for the X86 64-bit architecture.
 //
 //===----------------------------------------------------------------------===//
+
 #ifndef SUBZERO_SRC_ICETARGETLOWERINGX8664_H
 #define SUBZERO_SRC_ICETARGETLOWERINGX8664_H
 
-#include "IceDefs.h"
+#include "IceCfg.h"
+#include "IceGlobalContext.h"
 #include "IceTargetLowering.h"
 
 namespace Ice {
@@ -26,9 +27,10 @@
   TargetX8664 &operator=(const TargetX8664 &) = delete;
 
 public:
-  static TargetX8664 *create(Cfg *) {
-    llvm::report_fatal_error("Not yet implemented");
-  }
+  static TargetX8664 *create(Cfg *Func);
+
+private:
+  explicit TargetX8664(Cfg *Func) : TargetLowering(Func) {}
 };
 
 class TargetDataX8664 : public TargetDataLowering {
@@ -37,9 +39,21 @@
   TargetDataX8664 &operator=(const TargetDataX8664 &) = delete;
 
 public:
+  ~TargetDataX8664() override = default;
+
   static std::unique_ptr<TargetDataLowering> create(GlobalContext *Ctx) {
-    llvm::report_fatal_error("Not yet implemented");
+    return makeUnique<TargetDataX8664>(Ctx);
   }
+
+  void lowerGlobals(const VariableDeclarationList &Vars,
+                    const IceString &SectionSuffix) override;
+
+  void lowerConstants() override;
+
+private:
+  ENABLE_MAKE_UNIQUE;
+
+  explicit TargetDataX8664(GlobalContext *Ctx) : TargetDataLowering(Ctx) {}
 };
 
 class TargetHeaderX8664 : public TargetHeaderLowering {
@@ -48,11 +62,17 @@
   TargetHeaderX8664 &operator=(const TargetHeaderX8664 &) = delete;
 
 public:
-  static std::unique_ptr<TargetHeaderLowering> create(GlobalContext *Ctx) {
-    llvm::report_fatal_error("Not yet implemented");
-  }
-};
+  ~TargetHeaderX8664() = default;
 
+  static std::unique_ptr<TargetHeaderLowering> create(GlobalContext *Ctx) {
+    return makeUnique<TargetHeaderX8664>(Ctx);
+  }
+
+private:
+  ENABLE_MAKE_UNIQUE;
+
+  explicit TargetHeaderX8664(GlobalContext *Ctx) : TargetHeaderLowering(Ctx) {}
+};
 } // end of namespace Ice
 
-#endif // SUBZERO_SRC_ICETARGETLOWERINGX8664_H
+#endif  // SUBZERO_SRC_ICETARGETLOWERINGX8664_H