brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · cc5cc7a Raw
81 lines · c
1//===-- M68kMemOperandPrinter.h - Memory operands printing ------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8///9/// \file10/// This file contains memory operand printing logics shared between AsmPrinter11//  and MCInstPrinter.12///13//===----------------------------------------------------------------------===//14 15#ifndef LLVM_LIB_TARGET_M68K_MEMOPERANDPRINTER_M68KINSTPRINTER_H16#define LLVM_LIB_TARGET_M68K_MEMOPERANDPRINTER_M68KINSTPRINTER_H17 18#include "M68kBaseInfo.h"19 20#include "llvm/Support/raw_ostream.h"21 22namespace llvm {23template <class Derived, typename InstTy> class M68kMemOperandPrinter {24  Derived &impl() { return *static_cast<Derived *>(this); }25 26protected:27  void printARIMem(const InstTy *MI, unsigned OpNum, raw_ostream &O) {28    O << '(';29    impl().printOperand(MI, OpNum, O);30    O << ')';31  }32 33  void printARIPIMem(const InstTy *MI, unsigned OpNum, raw_ostream &O) {34    O << "(";35    impl().printOperand(MI, OpNum, O);36    O << ")+";37  }38 39  void printARIPDMem(const InstTy *MI, unsigned OpNum, raw_ostream &O) {40    O << "-(";41    impl().printOperand(MI, OpNum, O);42    O << ")";43  }44 45  void printARIDMem(const InstTy *MI, unsigned OpNum, raw_ostream &O) {46    O << '(';47    impl().printDisp(MI, OpNum + M68k::MemDisp, O);48    O << ',';49    impl().printOperand(MI, OpNum + M68k::MemBase, O);50    O << ')';51  }52 53  void printARIIMem(const InstTy *MI, unsigned OpNum, raw_ostream &O) {54    O << '(';55    impl().printDisp(MI, OpNum + M68k::MemDisp, O);56    O << ',';57    impl().printOperand(MI, OpNum + M68k::MemBase, O);58    O << ',';59    impl().printOperand(MI, OpNum + M68k::MemIndex, O);60    O << ')';61  }62 63  void printPCDMem(const InstTy *MI, uint64_t Address, unsigned OpNum,64                   raw_ostream &O) {65    O << '(';66    impl().printDisp(MI, OpNum + M68k::PCRelDisp, O);67    O << ",%pc)";68  }69 70  void printPCIMem(const InstTy *MI, uint64_t Address, unsigned OpNum,71                   raw_ostream &O) {72    O << '(';73    impl().printDisp(MI, OpNum + M68k::PCRelDisp, O);74    O << ",%pc,";75    impl().printOperand(MI, OpNum + M68k::PCRelIndex, O);76    O << ')';77  }78};79} // end namespace llvm80#endif81