blob: f89171d3da713535192da53e8aecde54b6de3530 [file] [log] [blame]
Jim Laskey8e8de8f2006-09-07 22:05:02 +00001//=====-- X86TargetAsmInfo.h - X86 asm properties -------------*- C++ -*--====//
2//
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.
Jim Laskey8e8de8f2006-09-07 22:05:02 +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 Korobeynikov32b952a2008-09-25 21:00:33 +000017#include "X86TargetMachine.h"
Jim Laskey8e8de8f2006-09-07 22:05:02 +000018#include "llvm/Target/TargetAsmInfo.h"
Anton Korobeynikov18f6ed92008-07-19 13:15:21 +000019#include "llvm/Target/ELFTargetAsmInfo.h"
20#include "llvm/Target/DarwinTargetAsmInfo.h"
Anton Korobeynikov32b952a2008-09-25 21:00:33 +000021#include "llvm/Support/Compiler.h"
Jim Laskey8e8de8f2006-09-07 22:05:02 +000022
23namespace llvm {
Bill Wendlingeb9a42c2007-01-16 03:42:04 +000024
Anton Korobeynikov32b952a2008-09-25 21:00:33 +000025 extern const char *const x86_asm_table[];
Jim Laskey8e8de8f2006-09-07 22:05:02 +000026
Anton Korobeynikov32b952a2008-09-25 21:00:33 +000027 template <class BaseTAI>
28 struct X86TargetAsmInfo : public BaseTAI {
29 explicit X86TargetAsmInfo(const X86TargetMachine &TM):
30 BaseTAI(TM) {
31 const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
32
33 BaseTAI::AsmTransCBE = x86_asm_table;
34 BaseTAI::AssemblerDialect = Subtarget->getAsmFlavor();
35 }
Anton Korobeynikovc0f41db2008-07-09 13:19:08 +000036
Chris Lattner625bd052006-11-29 01:14:06 +000037 virtual bool ExpandInlineAsm(CallInst *CI) const;
Anton Korobeynikovcee750f2008-02-27 23:33:50 +000038
Chris Lattner625bd052006-11-29 01:14:06 +000039 private:
40 bool LowerToBSwap(CallInst *CI) const;
Anton Korobeynikov4468b7a2008-07-09 13:20:48 +000041 };
42
Anton Korobeynikov32b952a2008-09-25 21:00:33 +000043 typedef X86TargetAsmInfo<TargetAsmInfo> X86GenericTargetAsmInfo;
44
45 EXTERN_TEMPLATE_INSTANTIATION(class X86TargetAsmInfo<TargetAsmInfo>);
46
47 struct X86DarwinTargetAsmInfo : public X86TargetAsmInfo<DarwinTargetAsmInfo> {
Anton Korobeynikov4468b7a2008-07-09 13:20:48 +000048 explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM);
Anton Korobeynikovb9e58ef2008-07-09 13:21:08 +000049 virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
50 bool Global) const;
Rafael Espindola2f6fea92008-12-19 10:55:56 +000051 virtual const char *getEHGlobalPrefix() const;
Anton Korobeynikov4468b7a2008-07-09 13:20:48 +000052 };
53
Anton Korobeynikov32b952a2008-09-25 21:00:33 +000054 struct X86ELFTargetAsmInfo : public X86TargetAsmInfo<ELFTargetAsmInfo> {
Anton Korobeynikov4468b7a2008-07-09 13:20:48 +000055 explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM);
Anton Korobeynikovb9e58ef2008-07-09 13:21:08 +000056 virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
57 bool Global) const;
Anton Korobeynikov4468b7a2008-07-09 13:20:48 +000058 };
59
Anton Korobeynikov32b952a2008-09-25 21:00:33 +000060 struct X86COFFTargetAsmInfo : public X86GenericTargetAsmInfo {
Anton Korobeynikov4468b7a2008-07-09 13:20:48 +000061 explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM);
Anton Korobeynikovb9e58ef2008-07-09 13:21:08 +000062 virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
63 bool Global) const;
Anton Korobeynikovb9a02fc2008-07-09 13:21:29 +000064 virtual std::string UniqueSectionForGlobal(const GlobalValue* GV,
65 SectionKind::Kind kind) const;
Anton Korobeynikovd0c1e292008-08-16 12:57:07 +000066 virtual std::string printSectionFlags(unsigned flags) const;
Anton Korobeynikov4468b7a2008-07-09 13:20:48 +000067 };
68
Anton Korobeynikov32b952a2008-09-25 21:00:33 +000069 struct X86WinTargetAsmInfo : public X86GenericTargetAsmInfo {
Anton Korobeynikov4468b7a2008-07-09 13:20:48 +000070 explicit X86WinTargetAsmInfo(const X86TargetMachine &TM);
Jim Laskey8e8de8f2006-09-07 22:05:02 +000071 };
Anton Korobeynikov32b952a2008-09-25 21:00:33 +000072
Jim Laskey8e8de8f2006-09-07 22:05:02 +000073} // namespace llvm
74
75#endif