| //=- SystemZHLASMInstPrinter.cpp - Convert SystemZ MCInst to HLASM assembly -=// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "SystemZHLASMInstPrinter.h" |
| #include "llvm/MC/MCInst.h" |
| #include "llvm/MC/MCRegister.h" |
| #include "llvm/Support/raw_ostream.h" |
| |
| using namespace llvm; |
| |
| #define DEBUG_TYPE "asm-printer" |
| |
| #include "SystemZGenHLASMAsmWriter.inc" |
| |
| void SystemZHLASMInstPrinter::printFormattedRegName(const MCAsmInfo *MAI, |
| MCRegister Reg, |
| raw_ostream &O) { |
| const char *RegName = getRegisterName(Reg); |
| // Skip register prefix so that only register number is left |
| assert(isalpha(RegName[0]) && isdigit(RegName[1])); |
| markup(O, Markup::Register) << (RegName + 1); |
| } |
| |
| void SystemZHLASMInstPrinter::printInst(const MCInst *MI, uint64_t Address, |
| StringRef Annot, |
| const MCSubtargetInfo &STI, |
| raw_ostream &O) { |
| std::string Str; |
| raw_string_ostream RSO(Str); |
| printInstruction(MI, Address, RSO); |
| // Eat the first tab character and replace it with a space since it is |
| // hardcoded in AsmWriterEmitter::EmitPrintInstruction |
| // TODO: introduce a line prefix member to AsmWriter to avoid this problem |
| if (!Str.empty() && Str.front() == '\t') |
| O << " " << Str.substr(1, Str.length()); |
| else |
| O << Str; |
| |
| printAnnotation(O, Annot); |
| } |