LLVM: lib/Target/M68k/M68kAsmPrinter.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

18

23

25

26using namespace llvm;

27

28#define DEBUG_TYPE "m68k-asm-printer"

29

32 MCInstLowering = std::make_unique(MF, *this);

34 return true;

35}

36

37void M68kAsmPrinter::printOperand(const MachineInstr *MI, int OpNum,

43 break;

45 OS << '#' << MO.getImm();

46 break;

49 break;

52 break;

55 break;

60 break;

61 }

62 default:

64 }

65}

66

69

70 if (!ExtraCode || !ExtraCode[0]) {

71 printOperand(MI, OpNo, OS);

72 return false;

73 }

74

75

77}

78

79void M68kAsmPrinter::printDisp(const MachineInstr *MI, unsigned opNum,

81

83 if (Op.isImm()) {

84 O << Op.getImm();

85 return;

86 }

87

88

90}

91

92void M68kAsmPrinter::printAbsMem(const MachineInstr *MI, unsigned OpNum,

94 const MachineOperand &MO = MI->getOperand(OpNum);

97 else

99}

100

102 unsigned OpNo, const char *ExtraCode,

107

108

109 using namespace M68k;

110

111 ++OpNo;

112

113 switch (static_cast<MemAddrModeKind>(MO.getImm())) {

114 case MemAddrModeKind::j:

116 break;

117 case MemAddrModeKind::o:

119 break;

120 case MemAddrModeKind::e:

122 break;

123 case MemAddrModeKind::p:

125 break;

126 case MemAddrModeKind::f:

127 case MemAddrModeKind::F:

129 break;

130 case MemAddrModeKind::k:

132 break;

133 case MemAddrModeKind::q:

135 break;

136 case MemAddrModeKind::b:

137 printAbsMem(MI, OpNo, OS);

138 break;

139 default:

141 }

142 return false;

145 return false;

148 return false;

150

151

154 return false;

155 }

156 break;

157 default:

158 break;

159 }

161}

162

164 M68k_MC::verifyInstructionPredicates(MI->getOpcode(),

166

167 switch (MI->getOpcode()) {

168 default: {

169 if (MI->isPseudo()) {

171 << ") found in EmitInstruction()\n");

173 }

174 break;

175 }

176 case M68k::TAILJMPj:

177 case M68k::TAILJMPq:

178

180 break;

181 }

182

186}

187

189

191

195

197

199

201 false, false)

202

205}

MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL

#define LLVM_EXTERNAL_VISIBILITY

This file contains M68k assembler printer declarations.

This file contains declarations for an M68k MCInst printer.

This file declares the M68k specific subclass of MachineFunctionInfo.

This file contains the entry points for global functions defined in the M68k target library,...

#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)

static bool printOperand(raw_ostream &OS, const SelectionDAG *G, const SDValue Value)

static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")

virtual void PrintSymbolOperand(const MachineOperand &MO, raw_ostream &OS)

Print the MachineOperand as a symbol.

const MCAsmInfo * MAI

Target Asm Printer information.

MachineFunction * MF

The current machine function.

unsigned getFunctionNumber() const

Return a unique ID for the current function.

bool runOnMachineFunction(MachineFunction &MF) override

Emit the specified function out to the OutStreamer.

std::unique_ptr< MCStreamer > OutStreamer

This is the MCStreamer object for the file we are generating.

virtual bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &OS)

Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant as...

MCSymbol * GetBlockAddressSymbol(const BlockAddress *BA) const

Return the MCSymbol used to satisfy BlockAddress uses of the specified basic block.

const DataLayout & getDataLayout() const

Return information about data layout.

const MCSubtargetInfo & getSubtargetInfo() const

Return information about subtarget.

virtual bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &OS)

Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant.

A parsed version of the target data layout string in and methods for querying it.

void emitFunctionBodyStart() override

Targets can override this to emit stuff before the first basic block in the function.

Definition M68kAsmPrinter.cpp:188

virtual bool runOnMachineFunction(MachineFunction &MF) override

Emit the specified function out to the OutStreamer.

Definition M68kAsmPrinter.cpp:30

bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &OS) override

Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant as...

Definition M68kAsmPrinter.cpp:101

bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, const char *ExtraCode, raw_ostream &OS) override

Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant.

Definition M68kAsmPrinter.cpp:67

void emitInstruction(const MachineInstr *MI) override

Targets should implement this to emit instructions.

Definition M68kAsmPrinter.cpp:163

void emitEndOfAsmFile(Module &M) override

This virtual method can be overridden by targets that want to emit something at the end of their file...

Definition M68kAsmPrinter.cpp:196

void emitStartOfAsmFile(Module &M) override

This virtual method can be overridden by targets that want to emit something at the start of their fi...

Definition M68kAsmPrinter.cpp:192

std::unique_ptr< M68kMCInstLower > MCInstLowering

void emitFunctionBodyEnd() override

Targets can override this to emit stuff after the last basic block in the function.

Definition M68kAsmPrinter.cpp:190

const M68kMachineFunctionInfo * MMFI

static const char * getRegisterName(MCRegister Reg)

void printARIDMem(const MachineInstr *MI, unsigned OpNum, raw_ostream &O)

void printPCDMem(const MachineInstr *MI, uint64_t Address, unsigned OpNum, raw_ostream &O)

void printPCIMem(const MachineInstr *MI, uint64_t Address, unsigned OpNum, raw_ostream &O)

void printARIPDMem(const MachineInstr *MI, unsigned OpNum, raw_ostream &O)

void printARIPIMem(const MachineInstr *MI, unsigned OpNum, raw_ostream &O)

void printARIIMem(const MachineInstr *MI, unsigned OpNum, raw_ostream &O)

void printARIMem(const MachineInstr *MI, unsigned OpNum, raw_ostream &O)

Instances of this class represent a single low-level machine instruction.

LLVM_ABI void print(raw_ostream &OS, const MCAsmInfo *MAI) const

print - Print the value to the stream OS.

LLVM_ABI MCSymbol * getSymbol() const

Return the MCSymbol for this basic block.

Representation of each machine instruction.

MachineOperand class - Representation of each machine instruction operand.

MachineBasicBlock * getMBB() const

bool isImm() const

isImm - Tests if this is a MO_Immediate operand.

const BlockAddress * getBlockAddress() const

MachineOperandType getType() const

getType - Returns the MachineOperandType for this operand.

Register getReg() const

getReg - Returns the register number.

@ MO_Immediate

Immediate operand.

@ MO_ConstantPoolIndex

Address of indexed Constant in Constant Pool.

@ MO_GlobalAddress

Address of a global value.

@ MO_BlockAddress

Address of a basic block.

@ MO_MachineBasicBlock

MachineBasicBlock reference.

@ MO_Register

Register operand.

A Module instance is used to store all the information related to an LLVM module.

This class implements an extremely fast bulk output stream that can only output to a stream.

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

static bool isAddressRegister(unsigned RegNo)

Define some predicates that are used for node matching.

This is an optimization pass for GlobalISel generic memory operations.

LLVM_ABI raw_ostream & dbgs()

dbgs() - This returns a reference to a raw_ostream for debugging messages.

format_object< Ts... > format(const char *Fmt, const Ts &... Vals)

These are helper functions used to produce formatted output.

DWARFExpression::Operation Op

Target & getTheM68kTarget()

RegisterAsmPrinter - Helper template for registering a target specific assembly printer,...