1dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines//===-- AArch64MCInstLower.h - Lower MachineInstr to MCInst ---------------===//
236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//                     The LLVM Compiler Infrastructure
436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// This file is distributed under the University of Illinois Open Source
636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// License. See LICENSE.TXT for details.
736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//
836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===----------------------------------------------------------------------===//
936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
10dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#ifndef AArch64_MCINSTLOWER_H
11dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define AArch64_MCINSTLOWER_H
1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/ADT/Triple.h"
1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Support/Compiler.h"
1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesnamespace llvm {
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass AsmPrinter;
1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MCAsmInfo;
1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MCContext;
2036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MCInst;
2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MCOperand;
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MCSymbol;
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MachineInstr;
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MachineModuleInfoMachO;
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass MachineOperand;
2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesclass Mangler;
2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
28dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines/// AArch64MCInstLower - This class is used to lower an MachineInstr
2936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// into an MCInst.
30dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesclass LLVM_LIBRARY_VISIBILITY AArch64MCInstLower {
3136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  MCContext &Ctx;
3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  AsmPrinter &Printer;
3336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  Triple TargetTriple;
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinespublic:
36dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  AArch64MCInstLower(MCContext &ctx, Mangler &mang, AsmPrinter &printer);
3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
3836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  bool lowerOperand(const MachineOperand &MO, MCOperand &MCOp) const;
3936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  void Lower(const MachineInstr *MI, MCInst &OutMI) const;
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  MCOperand lowerSymbolOperandDarwin(const MachineOperand &MO,
4236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                     MCSymbol *Sym) const;
4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  MCOperand lowerSymbolOperandELF(const MachineOperand &MO,
4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                  MCSymbol *Sym) const;
4536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  MCOperand LowerSymbolOperand(const MachineOperand &MO, MCSymbol *Sym) const;
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  MCSymbol *GetGlobalAddressSymbol(const MachineOperand &MO) const;
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  MCSymbol *GetExternalSymbolSymbol(const MachineOperand &MO) const;
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines};
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#endif
53