~ubuntu-branches/ubuntu/saucy/clamav/saucy

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/lib/Target/X86/X86MCAsmInfo.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Leonel Nunez
  • Date: 2008-02-11 22:52:13 UTC
  • mfrom: (1.1.6 upstream)
  • mto: This revision was merged to the branch mainline in revision 38.
  • Revision ID: james.westby@ubuntu.com-20080211225213-p2uwj4czso1w2f8h
Tags: upstream-0.92~dfsg
ImportĀ upstreamĀ versionĀ 0.92~dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//===-- X86MCAsmInfo.cpp - X86 asm properties -----------------------------===//
2
 
//
3
 
//                     The LLVM Compiler Infrastructure
4
 
//
5
 
// This file is distributed under the University of Illinois Open Source
6
 
// License. See LICENSE.TXT for details.
7
 
//
8
 
//===----------------------------------------------------------------------===//
9
 
//
10
 
// This file contains the declarations of the X86MCAsmInfo properties.
11
 
//
12
 
//===----------------------------------------------------------------------===//
13
 
 
14
 
#include "X86MCAsmInfo.h"
15
 
#include "X86TargetMachine.h"
16
 
#include "llvm/ADT/Triple.h"
17
 
#include "llvm/MC/MCContext.h"
18
 
#include "llvm/MC/MCSectionELF.h"
19
 
#include "llvm/Support/CommandLine.h"
20
 
using namespace llvm;
21
 
 
22
 
enum AsmWriterFlavorTy {
23
 
  // Note: This numbering has to match the GCC assembler dialects for inline
24
 
  // asm alternatives to work right.
25
 
  ATT = 0, Intel = 1
26
 
};
27
 
 
28
 
static cl::opt<AsmWriterFlavorTy>
29
 
AsmWriterFlavor("x86-asm-syntax", cl::init(ATT),
30
 
  cl::desc("Choose style of code to emit from X86 backend:"),
31
 
  cl::values(clEnumValN(ATT,   "att",   "Emit AT&T-style assembly"),
32
 
             clEnumValN(Intel, "intel", "Emit Intel-style assembly"),
33
 
             clEnumValEnd));
34
 
 
35
 
 
36
 
static const char *const x86_asm_table[] = {
37
 
  "{si}", "S",
38
 
  "{di}", "D",
39
 
  "{ax}", "a",
40
 
  "{cx}", "c",
41
 
  "{memory}", "memory",
42
 
  "{flags}", "",
43
 
  "{dirflag}", "",
44
 
  "{fpsr}", "",
45
 
  "{cc}", "cc",
46
 
  0,0};
47
 
 
48
 
X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(const Triple &Triple) {
49
 
  AsmTransCBE = x86_asm_table;
50
 
  AssemblerDialect = AsmWriterFlavor;
51
 
    
52
 
  bool is64Bit = Triple.getArch() == Triple::x86_64;
53
 
 
54
 
  TextAlignFillValue = 0x90;
55
 
 
56
 
  if (!is64Bit)
57
 
    Data64bitsDirective = 0;       // we can't emit a 64-bit unit
58
 
 
59
 
  // Use ## as a comment string so that .s files generated by llvm can go
60
 
  // through the GCC preprocessor without causing an error.  This is needed
61
 
  // because "clang foo.s" runs the C preprocessor, which is usually reserved
62
 
  // for .S files on other systems.  Perhaps this is because the file system
63
 
  // wasn't always case preserving or something.
64
 
  CommentString = "##";
65
 
  PCSymbol = ".";
66
 
 
67
 
  SupportsDebugInformation = true;
68
 
  DwarfUsesInlineInfoSection = true;
69
 
 
70
 
  // Exceptions handling
71
 
  ExceptionsType = ExceptionHandling::Dwarf;
72
 
}
73
 
 
74
 
X86ELFMCAsmInfo::X86ELFMCAsmInfo(const Triple &T) {
75
 
  AsmTransCBE = x86_asm_table;
76
 
  AssemblerDialect = AsmWriterFlavor;
77
 
 
78
 
  TextAlignFillValue = 0x90;
79
 
 
80
 
  PrivateGlobalPrefix = ".L";
81
 
  WeakRefDirective = "\t.weak\t";
82
 
  PCSymbol = ".";
83
 
 
84
 
  // Set up DWARF directives
85
 
  HasLEB128 = true;  // Target asm supports leb128 directives (little-endian)
86
 
 
87
 
  // Debug Information
88
 
  SupportsDebugInformation = true;
89
 
 
90
 
  // Exceptions handling
91
 
  ExceptionsType = ExceptionHandling::Dwarf;
92
 
  
93
 
  // OpenBSD has buggy support for .quad in 32-bit mode, just split into two
94
 
  // .words.
95
 
  if (T.getOS() == Triple::OpenBSD && T.getArch() == Triple::x86)
96
 
    Data64bitsDirective = 0;
97
 
}
98
 
 
99
 
const MCSection *X86ELFMCAsmInfo::
100
 
getNonexecutableStackSection(MCContext &Ctx) const {
101
 
  return Ctx.getELFSection(".note.GNU-stack", MCSectionELF::SHT_PROGBITS,
102
 
                           0, SectionKind::getMetadata(), false);
103
 
}
104
 
 
105
 
X86MCAsmInfoCOFF::X86MCAsmInfoCOFF(const Triple &Triple) {
106
 
  if (Triple.getArch() == Triple::x86_64)
107
 
    GlobalPrefix = "";
108
 
 
109
 
  AsmTransCBE = x86_asm_table;
110
 
  AssemblerDialect = AsmWriterFlavor;
111
 
 
112
 
  TextAlignFillValue = 0x90;
113
 
}