39 #define DEBUG_TYPE "asm-printer" 44 MSP430AsmPrinter(
TargetMachine &
TM, std::unique_ptr<MCStreamer> Streamer)
47 StringRef getPassName()
const override {
return "MSP430 Assembly Printer"; }
53 void printSrcMemOperand(
const MachineInstr *MI,
int OpNum,
55 bool PrintAsmOperand(
const MachineInstr *MI,
unsigned OpNo,
56 unsigned AsmVariant,
const char *ExtraCode,
59 unsigned OpNo,
unsigned AsmVariant,
77 if (!Modifier || strcmp(Modifier,
"nohash"))
85 bool isMemOp = Modifier && !strcmp(Modifier,
"mem");
94 if (!Modifier || strcmp(Modifier,
"nohash"))
95 O << (isMemOp ?
'&' :
'#');
97 O <<
'(' << Offset <<
'+';
109 void MSP430AsmPrinter::printSrcMemOperand(
const MachineInstr *MI,
int OpNum,
131 bool MSP430AsmPrinter::PrintAsmOperand(
const MachineInstr *MI,
unsigned OpNo,
135 if (ExtraCode && ExtraCode[0])
142 bool MSP430AsmPrinter::PrintAsmMemoryOperand(
const MachineInstr *MI,
143 unsigned OpNo,
unsigned AsmVariant,
144 const char *ExtraCode,
146 if (ExtraCode && ExtraCode[0]) {
149 printSrcMemOperand(MI, OpNo, O);
154 void MSP430AsmPrinter::EmitInstruction(
const MachineInstr *MI) {
158 MCInstLowering.
Lower(MI, TmpInst);
159 EmitToStreamer(*OutStreamer, TmpInst);
162 void MSP430AsmPrinter::EmitInterruptVectorSection(
MachineFunction &ISR) {
163 MCSection *Cur = OutStreamer->getCurrentSectionOnly();
165 assert(
F->hasFnAttribute(
"interrupt") &&
166 "Functions with MSP430_INTR CC should have 'interrupt' attribute");
167 StringRef IVIdx =
F->getFnAttribute(
"interrupt").getValueAsString();
168 MCSection *IV = OutStreamer->getContext().getELFSection(
169 "__interrupt_vector_" + IVIdx,
171 OutStreamer->SwitchSection(IV);
174 OutStreamer->EmitSymbolValue(FunctionSymbol,
TM.getProgramPointerSize());
175 OutStreamer->SwitchSection(Cur);
181 EmitInterruptVectorSection(MF);
183 SetupMachineFunction(MF);
Instances of this class represent a uniqued identifier for a section in the current translation unit...
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
Target & getTheMSP430Target()
MachineBasicBlock * getMBB() const
This class represents lattice values for constants.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
static const char * getRegisterName(unsigned RegNo)
unsigned getReg() const
getReg - Returns the register number.
MachineBasicBlock reference.
bool isImm() const
isImm - Tests if this is a MO_Immediate operand.
This file declares the MachineConstantPool class which is an abstract constant pool to keep track of ...
RegisterAsmPrinter - Helper template for registering a target specific assembly printer, for use in the target machine initialization function.
MSP430MCInstLower - This class is used to lower an MachineInstr into an MCInst.
Expected< const typename ELFT::Sym * > getSymbol(typename ELFT::SymRange Symbols, uint32_t Index)
Instances of this class represent a single low-level machine instruction.
Address of a global value.
This file contains the declarations for the subclasses of Constant, which represent the different fla...
const GlobalValue * getGlobal() const
This class is intended to be used as a driving class for all asm writers.
static void print(raw_ostream &Out, object::Archive::Kind Kind, T Val)
void LLVMInitializeMSP430AsmPrinter()
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
CallingConv::ID getCallingConv() const
getCallingConv()/setCallingConv(CC) - These method get and set the calling convention of this functio...
MachineOperand class - Representation of each machine instruction operand.
Module.h This file contains the declarations for the Module class.
const Function & getFunction() const
Return the LLVM function that this machine code represents.
void Lower(const MachineInstr *MI, MCInst &OutMI) const
Representation of each machine instruction.
static bool printOperand(raw_ostream &OS, const SelectionDAG *G, const SDValue Value)
int64_t getOffset() const
Return the offset from the symbol in this operand.
MCSymbol * getSymbol() const
Return the MCSymbol for this basic block.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This class implements an extremely fast bulk output stream that can only output to a stream...
Primary interface to the complete machine description for the target machine.
StringRef - Represent a constant reference to a string, i.e.
const MachineOperand & getOperand(unsigned i) const
MachineOperandType getType() const
getType - Returns the MachineOperandType for this operand.
MSP430_INTR - Calling convention used for MSP430 interrupt routines.
void print(raw_ostream &OS, const MCAsmInfo *MAI) const
print - Print the value to the stream OS.