blob: e4eef5dbd79642208558c7313187f8965aeb8aa4 [file] [log] [blame]
Eli Benderskyfaec9a32013-02-19 16:38:32 +00001//===-- X86AsmPrinter.h - X86 implementation of AsmPrinter ------*- C++ -*-===//
Chris Lattnerb36cbd02005-07-01 22:44:09 +00002//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Chris Lattnerb36cbd02005-07-01 22:44:09 +00007//
8//===----------------------------------------------------------------------===//
Chris Lattnerb36cbd02005-07-01 22:44:09 +00009
Chris Lattner0dc32ea2009-09-20 07:41:30 +000010#ifndef X86ASMPRINTER_H
11#define X86ASMPRINTER_H
Chris Lattnerb36cbd02005-07-01 22:44:09 +000012
Stephen Hines36b56882014-04-23 16:57:46 -070013#include "X86Subtarget.h"
Anton Korobeynikov75b68822008-06-28 11:08:27 +000014#include "llvm/CodeGen/AsmPrinter.h"
Andrew Trick3d74dea2013-10-31 22:11:56 +000015#include "llvm/CodeGen/StackMaps.h"
Stephen Hines36b56882014-04-23 16:57:46 -070016#include "llvm/Target/TargetMachine.h"
Chris Lattnerb36cbd02005-07-01 22:44:09 +000017
18namespace llvm {
Chris Lattner40e3c7a2009-06-24 05:46:28 +000019class MCStreamer;
Stephen Hinesdce4a402014-05-29 02:49:00 -070020class MCSymbol;
Anton Korobeynikov75b68822008-06-28 11:08:27 +000021
Duncan Sands16d8f8b2010-05-11 20:16:09 +000022class LLVM_LIBRARY_VISIBILITY X86AsmPrinter : public AsmPrinter {
Anton Korobeynikov75b68822008-06-28 11:08:27 +000023 const X86Subtarget *Subtarget;
Andrew Trick3d74dea2013-10-31 22:11:56 +000024 StackMaps SM;
25
Stephen Hinesdce4a402014-05-29 02:49:00 -070026 void GenerateExportDirective(const MCSymbol *Sym, bool IsData);
27
Bill Wendling57f0db82009-02-24 08:30:20 +000028 public:
Chris Lattnerb23569a2010-04-04 08:18:47 +000029 explicit X86AsmPrinter(TargetMachine &TM, MCStreamer &Streamer)
Stephen Hines36b56882014-04-23 16:57:46 -070030 : AsmPrinter(TM, Streamer), SM(*this) {
Anton Korobeynikov75b68822008-06-28 11:08:27 +000031 Subtarget = &TM.getSubtarget<X86Subtarget>();
32 }
Chris Lattnerb36cbd02005-07-01 22:44:09 +000033
Stephen Hines36b56882014-04-23 16:57:46 -070034 const char *getPassName() const override {
Eli Benderskyfaec9a32013-02-19 16:38:32 +000035 return "X86 Assembly / Object Emitter";
Chris Lattnerb36cbd02005-07-01 22:44:09 +000036 }
Chad Rosiera20e1e72012-08-01 18:39:17 +000037
Chris Lattner8fea32f2009-09-12 20:34:57 +000038 const X86Subtarget &getSubtarget() const { return *Subtarget; }
Chris Lattnerb36cbd02005-07-01 22:44:09 +000039
Stephen Hines36b56882014-04-23 16:57:46 -070040 void EmitStartOfAsmFile(Module &M) override;
Chris Lattner1bd1e6d2010-03-13 02:10:00 +000041
Stephen Hines36b56882014-04-23 16:57:46 -070042 void EmitEndOfAsmFile(Module &M) override;
Chad Rosiera20e1e72012-08-01 18:39:17 +000043
Stephen Hines36b56882014-04-23 16:57:46 -070044 void EmitInstruction(const MachineInstr *MI) override;
Chad Rosiera20e1e72012-08-01 18:39:17 +000045
Stephen Hines36b56882014-04-23 16:57:46 -070046 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
47 unsigned AsmVariant, const char *ExtraCode,
48 raw_ostream &OS) override;
49 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
50 unsigned AsmVariant, const char *ExtraCode,
51 raw_ostream &OS) override;
Chris Lattnerb36cbd02005-07-01 22:44:09 +000052
Stephen Hines36b56882014-04-23 16:57:46 -070053 bool runOnMachineFunction(MachineFunction &F) override;
Chris Lattnerb36cbd02005-07-01 22:44:09 +000054};
55
Chris Lattnerb36cbd02005-07-01 22:44:09 +000056} // end namespace llvm
57
58#endif