diff options
Diffstat (limited to 'lib/Target/ARM/ARMAsmPrinter.h')
-rw-r--r-- | lib/Target/ARM/ARMAsmPrinter.h | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/lib/Target/ARM/ARMAsmPrinter.h b/lib/Target/ARM/ARMAsmPrinter.h index 5ff20ce..50cb954 100644 --- a/lib/Target/ARM/ARMAsmPrinter.h +++ b/lib/Target/ARM/ARMAsmPrinter.h @@ -20,6 +20,7 @@ class ARMFunctionInfo; class MCOperand; class MachineConstantPool; class MachineOperand; +class MCSymbol; namespace ARM { enum DW_ISA { @@ -45,12 +46,14 @@ class LLVM_LIBRARY_VISIBILITY ARMAsmPrinter : public AsmPrinter { /// InConstantPool - Maintain state when emitting a sequence of constant /// pool entries so we can properly mark them as data regions. bool InConstantPool; + + /// ThumbIndirectPads - These maintain a per-function list of jump pad + /// labels used for ARMv4t thumb code to make register indirect calls. + SmallVector<std::pair<unsigned, MCSymbol*>, 4> ThumbIndirectPads; + public: - explicit ARMAsmPrinter(TargetMachine &TM, MCStreamer &Streamer) - : AsmPrinter(TM, Streamer), AFI(nullptr), MCP(nullptr), - InConstantPool(false) { - Subtarget = &TM.getSubtarget<ARMSubtarget>(); - } + explicit ARMAsmPrinter(TargetMachine &TM, + std::unique_ptr<MCStreamer> Streamer); const char *getPassName() const override { return "ARM Assembly / Object Emitter"; @@ -100,12 +103,13 @@ private: const MachineInstr *MI); public: - unsigned getISAEncoding() override { + unsigned getISAEncoding(const Function *F) override { // ARM/Darwin adds ISA to the DWARF info for each function. - if (!Subtarget->isTargetMachO()) + Triple TT(TM.getTargetTriple()); + if (!TT.isOSBinFormatMachO()) return 0; - return Subtarget->isThumb() ? - ARM::DW_ISA_ARM_thumb : ARM::DW_ISA_ARM_arm; + const ARMSubtarget &STI = TM.getSubtarget<ARMSubtarget>(*F); + return STI.isThumb() ? ARM::DW_ISA_ARM_thumb : ARM::DW_ISA_ARM_arm; } private: |