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