blob: 3cc027185c90458db9e182dab58326c7d136fb4c [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 Korobeynikov3829e8a2008-09-25 21:00:33 +000017#include "X86TargetMachine.h"
Dan Gohmanf17a25c2007-07-18 16:29:46 +000018#include "llvm/Target/TargetAsmInfo.h"
Chris Lattner9418a392009-07-27 16:45:59 +000019#include "llvm/Target/COFFTargetAsmInfo.h"
asl631323b2008-07-19 13:15:21 +000020#include "llvm/Target/DarwinTargetAsmInfo.h"
Chris Lattner9418a392009-07-27 16:45:59 +000021#include "llvm/Target/ELFTargetAsmInfo.h"
Anton Korobeynikov3829e8a2008-09-25 21:00:33 +000022#include "llvm/Support/Compiler.h"
Dan Gohmanf17a25c2007-07-18 16:29:46 +000023
24namespace llvm {
25
Anton Korobeynikov3829e8a2008-09-25 21:00:33 +000026 extern const char *const x86_asm_table[];
Dan Gohmanf17a25c2007-07-18 16:29:46 +000027
Anton Korobeynikov3829e8a2008-09-25 21:00:33 +000028 template <class BaseTAI>
29 struct X86TargetAsmInfo : public BaseTAI {
Chris Lattnerecb3eaf2009-07-20 17:59:32 +000030 explicit X86TargetAsmInfo(const X86TargetMachine &TM) : BaseTAI(TM) {
Anton Korobeynikov3829e8a2008-09-25 21:00:33 +000031 BaseTAI::AsmTransCBE = x86_asm_table;
Chris Lattnerecb3eaf2009-07-20 17:59:32 +000032 BaseTAI::AssemblerDialect =TM.getSubtarget<X86Subtarget>().getAsmFlavor();
Anton Korobeynikov3829e8a2008-09-25 21:00:33 +000033 }
Anton Korobeynikovf700e682008-07-09 13:20:48 +000034 };
35
Anton Korobeynikov3829e8a2008-09-25 21:00:33 +000036 EXTERN_TEMPLATE_INSTANTIATION(class X86TargetAsmInfo<TargetAsmInfo>);
37
38 struct X86DarwinTargetAsmInfo : public X86TargetAsmInfo<DarwinTargetAsmInfo> {
Anton Korobeynikovf700e682008-07-09 13:20:48 +000039 explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM);
Chris Lattner8b0bb372009-07-31 21:39:55 +000040 virtual unsigned PreferredEHDataFormat() const;
Rafael Espindola1a931842008-12-19 10:55:56 +000041 virtual const char *getEHGlobalPrefix() const;
Anton Korobeynikovf700e682008-07-09 13:20:48 +000042 };
43
Anton Korobeynikov3829e8a2008-09-25 21:00:33 +000044 struct X86ELFTargetAsmInfo : public X86TargetAsmInfo<ELFTargetAsmInfo> {
Anton Korobeynikovf700e682008-07-09 13:20:48 +000045 explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM);
Chris Lattner8b0bb372009-07-31 21:39:55 +000046 virtual unsigned PreferredEHDataFormat() const;
Anton Korobeynikovf700e682008-07-09 13:20:48 +000047 };
48
Chris Lattner9418a392009-07-27 16:45:59 +000049 struct X86COFFTargetAsmInfo : public X86TargetAsmInfo<COFFTargetAsmInfo> {
50 explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM) :
51 X86TargetAsmInfo<COFFTargetAsmInfo>(TM) {}
Chris Lattner8b0bb372009-07-31 21:39:55 +000052 virtual unsigned PreferredEHDataFormat() const;
Anton Korobeynikovf700e682008-07-09 13:20:48 +000053 };
Chris Lattner9418a392009-07-27 16:45:59 +000054
Anton Korobeynikovf700e682008-07-09 13:20:48 +000055
Chris Lattnerc4c40a92009-07-28 03:13:23 +000056 struct X86WinTargetAsmInfo : public X86TargetAsmInfo<TargetAsmInfo> {
Anton Korobeynikovf700e682008-07-09 13:20:48 +000057 explicit X86WinTargetAsmInfo(const X86TargetMachine &TM);
Dan Gohmanf17a25c2007-07-18 16:29:46 +000058 };
Anton Korobeynikov3829e8a2008-09-25 21:00:33 +000059
Dan Gohmanf17a25c2007-07-18 16:29:46 +000060} // namespace llvm
61
62#endif