112 case SystemZ::CondReturn:
116 .addReg(SystemZ::R14D);
119 case SystemZ::CRBReturn:
124 .addReg(SystemZ::R14D)
128 case SystemZ::CGRBReturn:
133 .addReg(SystemZ::R14D)
137 case SystemZ::CIBReturn:
142 .addReg(SystemZ::R14D)
146 case SystemZ::CGIBReturn:
151 .addReg(SystemZ::R14D)
155 case SystemZ::CLRBReturn:
160 .addReg(SystemZ::R14D)
164 case SystemZ::CLGRBReturn:
169 .addReg(SystemZ::R14D)
173 case SystemZ::CLIBReturn:
178 .addReg(SystemZ::R14D)
182 case SystemZ::CLGIBReturn:
187 .addReg(SystemZ::R14D)
191 case SystemZ::CallBRASL:
197 case SystemZ::CallBASR:
203 case SystemZ::CallJG:
208 case SystemZ::CallBRCL:
215 case SystemZ::CallBR:
219 case SystemZ::CallBCR:
223 .addReg(SystemZ::R1D);
226 case SystemZ::CRBCall:
231 .addReg(SystemZ::R1D)
235 case SystemZ::CGRBCall:
240 .addReg(SystemZ::R1D)
244 case SystemZ::CIBCall:
249 .addReg(SystemZ::R1D)
253 case SystemZ::CGIBCall:
258 .addReg(SystemZ::R1D)
262 case SystemZ::CLRBCall:
267 .addReg(SystemZ::R1D)
271 case SystemZ::CLGRBCall:
276 .addReg(SystemZ::R1D)
280 case SystemZ::CLIBCall:
285 .addReg(SystemZ::R1D)
289 case SystemZ::CLGIBCall:
294 .addReg(SystemZ::R1D)
318 case SystemZ::IILF64:
324 case SystemZ::IIHF64:
330 case SystemZ::RISBHH:
331 case SystemZ::RISBHL:
335 case SystemZ::RISBLH:
336 case SystemZ::RISBLL:
340 case SystemZ::VLVGP32:
385 #define LOWER_LOW(NAME) \
386 case SystemZ::NAME##64: LoweredMI = lowerRILow(MI, SystemZ::NAME); break
402 #define LOWER_HIGH(NAME) \
403 case SystemZ::NAME##64: LoweredMI = lowerRIHigh(MI, SystemZ::NAME); break
419 case SystemZ::Serialize:
429 case SystemZ::MemBarrier:
437 case SystemZ::Trap: {
450 case SystemZ::CondTrap: {
464 Lower.lower(MI, LoweredMI);
499 const char *ExtraCode,
501 if (ExtraCode && *ExtraCode ==
'n') {
516 const char *ExtraCode,
std::unique_ptr< MCStreamer > OutStreamer
This is the MCStreamer object for the file we are generating.
static void printAddress(unsigned Base, int64_t Disp, unsigned Index, raw_ostream &O)
MCSymbol * getSymbol(const GlobalValue *GV) const
static const MCSymbolRefExpr * create(const MCSymbol *Symbol, MCContext &Ctx)
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
const DataLayout & getDataLayout() const
Return information about data layout.
MCContext & OutContext
This is the context for the output file that we are streaming.
void LLVMInitializeSystemZAsmPrinter()
const MachineFunction * MF
The current machine function.
bool hasFastSerialization() const
static MCInst lowerSubvectorLoad(const MachineInstr *MI, unsigned Opcode)
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
unsigned getRegAsGRH32(unsigned Reg)
bool isImm() const
isImm - Tests if this is a MO_Immediate operand.
unsigned getRegAsGR32(unsigned Reg)
Base class for the full range of assembler expressions which are needed for parsing.
Represent a reference to a symbol from inside an expression.
void EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) override
Context object for machine code objects.
static const MCBinaryExpr * createAdd(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
MCContext & getContext() const
MCInstBuilder & addExpr(const MCExpr *Val)
Add a new MCExpr operand.
Instances of this class represent a single low-level machine instruction.
unsigned getOpcode() const
Returns the opcode of this MachineInstr.
static MCInst lowerSubvectorStore(const MachineInstr *MI, unsigned Opcode)
MCInstBuilder & addReg(unsigned Reg)
Add a new register operand.
Control flow instructions. These all have token chains.
MCSymbol * createTempSymbol(bool CanBeUnnamed=true)
Create and return a new assembler temporary symbol with a unique but unspecified name.
const MCAsmInfo * MAI
Target Asm Printer information.
static MCInst lowerRIEfLow(const MachineInstr *MI, unsigned Opcode)
const MachineOperand & getOperand(unsigned i) const
static MCInst lowerRIHigh(const MachineInstr *MI, unsigned Opcode)
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang","erlang-compatible garbage collector")
MCInstBuilder & addImm(int64_t Val)
Add a new integer immediate operand.
Abstract base class for all machine specific constantpool value subclasses.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
static const MCSymbolRefExpr * getTLSGetOffset(MCContext &Context)
bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, unsigned AsmVariant, const char *ExtraCode, raw_ostream &OS) override
Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant...
uint64_t getTypeAllocSize(Type *Ty) const
Returns the offset in bytes between successive objects of the specified type, including alignment pad...
bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, unsigned AsmVariant, const char *ExtraCode, raw_ostream &OS) override
Print the specified operand of MI, an INLINEASM instruction, using the specified assembler variant as...
void EmitToStreamer(MCStreamer &S, const MCInst &Inst)
static MCSymbolRefExpr::VariantKind getModifierVariantKind(SystemZCP::SystemZCPModifier Modifier)
unsigned getRegAsGR64(unsigned Reg)
unsigned getRegAsVR128(unsigned Reg)
bool isCompare(QueryType Type=IgnoreBundle) const
Return true if this instruction is a comparison.
static MCInst lowerRILow(const MachineInstr *MI, unsigned Opcode)
Target & getTheSystemZTarget()
Representation of each machine instruction.
MCSymbol * getOrCreateSymbol(const Twine &Name)
Lookup the symbol inside with the specified Name.
void EmitInstruction(const MachineInstr *MI) override
Targets should implement this to emit instructions.
static const MCSymbolRefExpr * getGlobalOffsetTable(MCContext &Context)
unsigned getReg() const
getReg - Returns the register number.
static void printOperand(const MCOperand &MO, const MCAsmInfo *MAI, raw_ostream &O)
RegisterAsmPrinter - Helper template for registering a target specific assembly printer, for use in the target machine initialization function.
This class implements an extremely fast bulk output stream that can only output to a stream...
A SystemZ-specific constant pool value.
StringRef - Represent a constant reference to a string, i.e.
Instances of this class represent operands of the MCInst class.
static const MCConstantExpr * create(int64_t Value, MCContext &Ctx)