40#define DEBUG_TYPE "asm-printer"
42#define PRINT_ALIAS_INSTR
43#include "M68kGenAsmWriter.inc"
58void M68kInstPrinter::printOperand(
const MCInst *
MI,
unsigned OpNo,
67 printImmediate(
MI, OpNo, O);
71 assert(MO.
isExpr() &&
"Unknown operand kind in printOperand");
75void M68kInstPrinter::printImmediate(
const MCInst *
MI,
unsigned opNum,
77 const MCOperand &MO =
MI->getOperand(opNum);
87void M68kInstPrinter::printMoveMask(
const MCInst *
MI,
unsigned opNum,
89 unsigned Mask =
MI->getOperand(opNum).getImm();
90 assert((Mask & 0xFFFF) == Mask &&
"Mask is always 16 bits");
108 for (
int s = 0; s < 16; s += 8) {
109 HalfMask = (
Mask >> s) & 0xFF;
112 if (s != 0 && (Mask & 0xFF) && HalfMask)
115 for (
int i = 0; HalfMask; ++i) {
116 if ((HalfMask >> i) & 0b1) {
117 HalfMask ^= 0b1 << i;
122 while ((HalfMask >> (j + 1)) & 0b1)
123 HalfMask ^= 0b1 << ++
j;
140void M68kInstPrinter::printDisp(
const MCInst *
MI,
unsigned opNum,
142 const MCOperand &
Op =
MI->getOperand(opNum);
147 assert(
Op.isExpr() &&
"Unknown operand kind in printOperand");
148 MAI.printExpr(O, *
Op.getExpr());
152void M68kInstPrinter::printAbsMem(
const MCInst *
MI,
unsigned opNum,
154 const MCOperand &MO =
MI->getOperand(opNum);
161 assert(MO.
isImm() &&
"absolute memory addressing needs an immediate");
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file contains small standalone helper functions and enum definitions for the M68k target useful ...
This file contains declarations for an M68k MCInst printer.
bool printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS)
void printRegName(raw_ostream &OS, MCRegister Reg) override
Print the assembler register name.
void printInst(const MCInst *MI, uint64_t Address, StringRef Annot, const MCSubtargetInfo &STI, raw_ostream &O) override
Print the specified MCInst to the specified raw_ostream.
void printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O)
static const char * getRegisterName(MCRegister Reg)
void printAnnotation(raw_ostream &OS, StringRef Annot)
Utility function for printing annotations.
Instances of this class represent a single low-level machine instruction.
Instances of this class represent operands of the MCInst class.
MCRegister getReg() const
Returns the register number.
const MCExpr * getExpr() const
Wrapper class representing physical registers. Should be passed by value.
Generic base class for all target subtargets.
StringRef - Represent a constant reference to a string, i.e.
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.
constexpr std::underlying_type_t< E > Mask()
Get a bitmask with 1s in all places up to the high-order bit of E's largest value.
static unsigned getMaskedSpillRegister(unsigned order)
This is an optimization pass for GlobalISel generic memory operations.
format_object< Ts... > format(const char *Fmt, const Ts &... Vals)
These are helper functions used to produce formatted output.
DWARFExpression::Operation Op