blob: 3308cc2e6a03d559196eae979f607327e2c7fb63 [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 Lattnerb36cbd02005-07-01 22:44:09 +000019
Chris Lattner40e3c7a2009-06-24 05:46:28 +000020class MCStreamer;
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
Bill Wendling57f0db82009-02-24 08:30:20 +000026 public:
Chris Lattnerb23569a2010-04-04 08:18:47 +000027 explicit X86AsmPrinter(TargetMachine &TM, MCStreamer &Streamer)
Stephen Hines36b56882014-04-23 16:57:46 -070028 : AsmPrinter(TM, Streamer), SM(*this) {
Anton Korobeynikov75b68822008-06-28 11:08:27 +000029 Subtarget = &TM.getSubtarget<X86Subtarget>();
30 }
Chris Lattnerb36cbd02005-07-01 22:44:09 +000031
Stephen Hines36b56882014-04-23 16:57:46 -070032 const char *getPassName() const override {
Eli Benderskyfaec9a32013-02-19 16:38:32 +000033 return "X86 Assembly / Object Emitter";
Chris Lattnerb36cbd02005-07-01 22:44:09 +000034 }
Chad Rosiera20e1e72012-08-01 18:39:17 +000035
Chris Lattner8fea32f2009-09-12 20:34:57 +000036 const X86Subtarget &getSubtarget() const { return *Subtarget; }
Chris Lattnerb36cbd02005-07-01 22:44:09 +000037
Stephen Hines36b56882014-04-23 16:57:46 -070038 void EmitStartOfAsmFile(Module &M) override;
Chris Lattner1bd1e6d2010-03-13 02:10:00 +000039
Stephen Hines36b56882014-04-23 16:57:46 -070040 void EmitEndOfAsmFile(Module &M) override;
Chad Rosiera20e1e72012-08-01 18:39:17 +000041
Stephen Hines36b56882014-04-23 16:57:46 -070042 void EmitInstruction(const MachineInstr *MI) override;
Chad Rosiera20e1e72012-08-01 18:39:17 +000043
Stephen Hines36b56882014-04-23 16:57:46 -070044 bool PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
45 unsigned AsmVariant, const char *ExtraCode,
46 raw_ostream &OS) override;
47 bool PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
48 unsigned AsmVariant, const char *ExtraCode,
49 raw_ostream &OS) override;
Chris Lattnerb36cbd02005-07-01 22:44:09 +000050
Stephen Hines36b56882014-04-23 16:57:46 -070051 bool runOnMachineFunction(MachineFunction &F) override;
Chris Lattnerb36cbd02005-07-01 22:44:09 +000052};
53
Chris Lattnerb36cbd02005-07-01 22:44:09 +000054} // end namespace llvm
55
56#endif