blob: 3a5fa6d2bafffcc58972d02706683c3beea8cdae [file] [log] [blame]
Dan Gohmanf17a25c2007-07-18 16:29:46 +00001//=====-- X86TargetAsmInfo.h - X86 asm properties -------------*- C++ -*--====//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner081ce942007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Dan Gohmanf17a25c2007-07-18 16:29:46 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the declaration of the X86TargetAsmInfo class.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef X86TARGETASMINFO_H
15#define X86TARGETASMINFO_H
16
Anton Korobeynikovc059d032008-09-24 22:21:39 +000017#include "X86TargetMachine.h"
Dan Gohmanf17a25c2007-07-18 16:29:46 +000018#include "llvm/Target/TargetAsmInfo.h"
asl631323b2008-07-19 13:15:21 +000019#include "llvm/Target/ELFTargetAsmInfo.h"
20#include "llvm/Target/DarwinTargetAsmInfo.h"
Dan Gohmanf17a25c2007-07-18 16:29:46 +000021
22namespace llvm {
23
Anton Korobeynikovc059d032008-09-24 22:21:39 +000024 extern const char *const x86_asm_table[];
Dan Gohmanf17a25c2007-07-18 16:29:46 +000025
Anton Korobeynikovc059d032008-09-24 22:21:39 +000026 template <class BaseTAI>
27 struct X86TargetAsmInfo : public BaseTAI {
28 explicit X86TargetAsmInfo(const X86TargetMachine &TM):
29 BaseTAI(TM) {
30 const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
31
32 BaseTAI::AsmTransCBE = x86_asm_table;
33 BaseTAI::AssemblerDialect = Subtarget->getAsmFlavor();
34 }
Anton Korobeynikov8bf5d342008-07-09 13:19:08 +000035
Dan Gohmanf17a25c2007-07-18 16:29:46 +000036 virtual bool ExpandInlineAsm(CallInst *CI) const;
Anton Korobeynikov65c0d872008-02-27 23:33:50 +000037
Dan Gohmanf17a25c2007-07-18 16:29:46 +000038 private:
Dan Gohmanf17a25c2007-07-18 16:29:46 +000039 bool LowerToBSwap(CallInst *CI) const;
Anton Korobeynikovf700e682008-07-09 13:20:48 +000040 };
41
Anton Korobeynikovc059d032008-09-24 22:21:39 +000042 typedef X86TargetAsmInfo<TargetAsmInfo> X86GenericTargetAsmInfo;
43
44 struct X86DarwinTargetAsmInfo : public X86TargetAsmInfo<DarwinTargetAsmInfo> {
Anton Korobeynikovf700e682008-07-09 13:20:48 +000045 explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM);
Anton Korobeynikovcd2a4e52008-07-09 13:21:08 +000046 virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
47 bool Global) const;
Anton Korobeynikovf700e682008-07-09 13:20:48 +000048 };
49
Anton Korobeynikovc059d032008-09-24 22:21:39 +000050 struct X86ELFTargetAsmInfo : public X86TargetAsmInfo<ELFTargetAsmInfo> {
Anton Korobeynikovf700e682008-07-09 13:20:48 +000051 explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM);
Anton Korobeynikovcd2a4e52008-07-09 13:21:08 +000052 virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
53 bool Global) const;
Anton Korobeynikovf700e682008-07-09 13:20:48 +000054 };
55
Anton Korobeynikovc059d032008-09-24 22:21:39 +000056 struct X86COFFTargetAsmInfo : public X86GenericTargetAsmInfo {
Anton Korobeynikovf700e682008-07-09 13:20:48 +000057 explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM);
Anton Korobeynikovcd2a4e52008-07-09 13:21:08 +000058 virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
59 bool Global) const;
Anton Korobeynikov52069b52008-07-09 13:21:29 +000060 virtual std::string UniqueSectionForGlobal(const GlobalValue* GV,
61 SectionKind::Kind kind) const;
asl27ffd262008-08-16 12:57:07 +000062 virtual std::string printSectionFlags(unsigned flags) const;
asl631323b2008-07-19 13:15:21 +000063 protected:
64 const X86TargetMachine *X86TM;
Anton Korobeynikovf700e682008-07-09 13:20:48 +000065 };
66
Anton Korobeynikovc059d032008-09-24 22:21:39 +000067 struct X86WinTargetAsmInfo : public X86GenericTargetAsmInfo {
Anton Korobeynikovf700e682008-07-09 13:20:48 +000068 explicit X86WinTargetAsmInfo(const X86TargetMachine &TM);
Dan Gohmanf17a25c2007-07-18 16:29:46 +000069 };
Anton Korobeynikovc059d032008-09-24 22:21:39 +000070
Dan Gohmanf17a25c2007-07-18 16:29:46 +000071} // namespace llvm
72
73#endif
Anton Korobeynikovc059d032008-09-24 22:21:39 +000074