Index: lib/Target/ARM/MCTargetDesc/ARMAsmBackendNaClELF.h |
diff --git a/lib/Target/ARM/MCTargetDesc/ARMAsmBackendNaClELF.h b/lib/Target/ARM/MCTargetDesc/ARMAsmBackendNaClELF.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c2caf15bd16ceaab0a2c46959944d1d4c573e23c |
--- /dev/null |
+++ b/lib/Target/ARM/MCTargetDesc/ARMAsmBackendNaClELF.h |
@@ -0,0 +1,47 @@ |
+//===-- ARMAsmBackendNaClELF.h ARM Asm Backend NaCl ELF --------*- C++ -*-===// |
+// |
+// The LLVM Compiler Infrastructure |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+ |
+#ifndef LLVM_LIB_TARGET_ARM_ARMASMBACKENDNACLELF_H |
+#define LLVM_LIB_TARGET_ARM_ARMASMBACKENDNACLELF_H |
+ |
+// This whole file is a @LOCALMOD |
+#include "MCTargetDesc/ARMAsmBackendELF.h" |
+#include "MCTargetDesc/ARMMCNaCl.h" |
+ |
+using namespace llvm; |
+ |
+namespace { |
+class ARMAsmBackendNaClELF : public ARMAsmBackendELF { |
+public: |
+ ARMAsmBackendNaClELF(const Target &T, const StringRef TT, uint8_t _OSABI, |
+ bool isLittle) |
+ : ARMAsmBackendELF(T, TT, _OSABI, isLittle), |
+ STI(ARM_MC::createARMMCSubtargetInfo(TT, "", "")) { |
+ assert(isLittle && "NaCl only supports little-endian"); |
+ State.SaveCount = 0; |
+ State.I = 0; |
+ State.RecursiveCall = false; |
+ } |
+ |
+ ~ARMAsmBackendNaClELF() override {} |
+ |
+ bool CustomExpandInst(const MCInst &Inst, MCStreamer &Out) override { |
+ return CustomExpandInstNaClARM(*STI, Inst, Out, State); |
+ } |
+ |
+private: |
+ // TODO(jfb) When upstreaming this class we can drop STI since ARMAsmBackend |
+ // already has one. It's unfortunately private so we recreate one |
+ // here to avoid the extra localmod. |
+ std::unique_ptr<MCSubtargetInfo> STI; |
+ ARMMCNaClSFIState State; |
+}; |
+} // end anonymous namespace |
+ |
+#endif |