blob: d64aaa6edb84d3c89199dcf870c465b00d9794ed [file] [log] [blame]
Chris Lattnerb36cbd02005-07-01 22:44:09 +00001//===-- X86AsmPrinter.cpp - Convert X86 LLVM IR to X86 assembly -----------===//
Misha Brukman0e0a7a452005-04-21 23:38:14 +00002//
John Criswellb576c942003-10-20 19:43:21 +00003// 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.
Misha Brukman0e0a7a452005-04-21 23:38:14 +00007//
John Criswellb576c942003-10-20 19:43:21 +00008//===----------------------------------------------------------------------===//
Chris Lattner72614082002-10-25 22:55:53 +00009//
Chris Lattnerb36cbd02005-07-01 22:44:09 +000010// This file the shared super class printer that converts from our internal
11// representation of machine-dependent LLVM code to Intel and AT&T format
12// assembly language.
13// This printer is the output mechanism used by `llc'.
Chris Lattner72614082002-10-25 22:55:53 +000014//
15//===----------------------------------------------------------------------===//
16
Chris Lattnerb36cbd02005-07-01 22:44:09 +000017#include "X86ATTAsmPrinter.h"
18#include "X86IntelAsmPrinter.h"
Cedric Venetd85f51a2008-08-24 12:30:46 +000019#include "X86Subtarget.h"
Chris Lattner300d0ed2004-02-14 06:00:36 +000020using namespace llvm;
Brian Gaeked0fde302003-11-11 22:41:34 +000021
Chris Lattnerac5701c2004-10-04 07:24:48 +000022/// createX86CodePrinterPass - Returns a pass that prints the X86 assembly code
23/// for a MachineFunction to the given output stream, using the given target
24/// machine description.
25///
Owen Andersoncb371882008-08-21 00:14:44 +000026FunctionPass *llvm::createX86CodePrinterPass(raw_ostream &o,
Bill Wendling57f0db82009-02-24 08:30:20 +000027 X86TargetMachine &tm,
Bill Wendlingc69d56f2009-04-28 01:04:53 +000028 bool fast, bool verbose) {
Jim Laskey05a059d2006-09-07 12:23:47 +000029 const X86Subtarget *Subtarget = &tm.getSubtarget<X86Subtarget>();
Jim Laskey563321a2006-09-06 18:34:40 +000030
Jim Laskey05a059d2006-09-07 12:23:47 +000031 if (Subtarget->isFlavorIntel()) {
Bill Wendlingc69d56f2009-04-28 01:04:53 +000032 return new X86IntelAsmPrinter(o, tm, tm.getTargetAsmInfo(), fast, verbose);
Jim Laskey05a059d2006-09-07 12:23:47 +000033 } else {
Bill Wendlingc69d56f2009-04-28 01:04:53 +000034 return new X86ATTAsmPrinter(o, tm, tm.getTargetAsmInfo(), fast, verbose);
Chris Lattnerac5701c2004-10-04 07:24:48 +000035 }
Brian Gaeke9e474c42003-06-19 19:32:32 +000036}
Anton Korobeynikov3c3bc482008-08-17 13:53:59 +000037
38namespace {
39 static struct Register {
40 Register() {
41 X86TargetMachine::registerAsmPrinter(createX86CodePrinterPass);
42 }
43 } Registrator;
44}
Oscar Fuentes92adc192008-11-15 21:36:30 +000045
46extern "C" int X86AsmPrinterForceLink;
47int X86AsmPrinterForceLink = 0;