mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 07:29:55 +00:00
This is currently considered experimental, but most of the more commonly used instructions should work. So far only SI has been extensively tested, CI and VI probably work too, but may be buggy. The current set of tests cases do not give complete coverage, but I think it is sufficient for an experimental assembler. See the documentation in R600Usage for more information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234381 91177308-0d34-0410-b5e6-96231b3b80d8
89 lines
4.5 KiB
C++
89 lines
4.5 KiB
C++
//===-- AMDGPUInstPrinter.h - AMDGPU MC Inst -> ASM interface ---*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
/// \file
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_R600_INSTPRINTER_AMDGPUINSTPRINTER_H
|
|
#define LLVM_LIB_TARGET_R600_INSTPRINTER_AMDGPUINSTPRINTER_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/MC/MCInstPrinter.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
namespace llvm {
|
|
|
|
class AMDGPUInstPrinter : public MCInstPrinter {
|
|
public:
|
|
AMDGPUInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII,
|
|
const MCRegisterInfo &MRI)
|
|
: MCInstPrinter(MAI, MII, MRI) {}
|
|
|
|
//Autogenerated by tblgen
|
|
void printInstruction(const MCInst *MI, raw_ostream &O);
|
|
static const char *getRegisterName(unsigned RegNo);
|
|
|
|
void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
|
|
const MCSubtargetInfo &STI) override;
|
|
static void printRegOperand(unsigned RegNo, raw_ostream &O,
|
|
const MCRegisterInfo &MRI);
|
|
|
|
private:
|
|
void printU8ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printU16ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printU8ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printU16ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printU32ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printOffen(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printIdxen(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printAddr64(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printMBUFOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printDSOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printDSOffset0(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printDSOffset1(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printGDS(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printGLC(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printSLC(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printTFE(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printRegOperand(unsigned RegNo, raw_ostream &O);
|
|
void printVOPDst(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printImmediate32(uint32_t I, raw_ostream &O);
|
|
void printImmediate64(uint64_t I, raw_ostream &O);
|
|
void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
void printOperandAndMods(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printInterpSlot(const MCInst *MI, unsigned OpNum, raw_ostream &O);
|
|
void printMemOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printIfSet(const MCInst *MI, unsigned OpNo, raw_ostream &O,
|
|
StringRef Asm, StringRef Default = "");
|
|
static void printAbs(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printClamp(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printClampSI(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printOModSI(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printLiteral(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printLast(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printNeg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printOMOD(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printRel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printUpdateExecMask(const MCInst *MI, unsigned OpNo,
|
|
raw_ostream &O);
|
|
static void printUpdatePred(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printWrite(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printSel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printBankSwizzle(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printRSel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printCT(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printKCache(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printSendMsg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
static void printWaitFlag(const MCInst *MI, unsigned OpNo, raw_ostream &O);
|
|
};
|
|
|
|
} // End namespace llvm
|
|
|
|
#endif
|