• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  //===-- PPCMCAsmInfo.cpp - PPC 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 MCAsmInfoDarwin properties.
11  //
12  //===----------------------------------------------------------------------===//
13  
14  #include "PPCMCAsmInfo.h"
15  #include "llvm/ADT/Triple.h"
16  
17  using namespace llvm;
18  
anchor()19  void PPCMCAsmInfoDarwin::anchor() { }
20  
PPCMCAsmInfoDarwin(bool is64Bit,const Triple & T)21  PPCMCAsmInfoDarwin::PPCMCAsmInfoDarwin(bool is64Bit, const Triple& T) {
22    if (is64Bit) {
23      PointerSize = CalleeSaveStackSlotSize = 8;
24    }
25    IsLittleEndian = false;
26  
27    CommentString = ";";
28    ExceptionsType = ExceptionHandling::DwarfCFI;
29  
30    if (!is64Bit)
31      Data64bitsDirective = nullptr; // We can't emit a 64-bit unit in PPC32 mode.
32  
33    AssemblerDialect = 1;           // New-Style mnemonics.
34    SupportsDebugInformation= true; // Debug information.
35  
36    // The installed assembler for OSX < 10.6 lacks some directives.
37    // FIXME: this should really be a check on the assembler characteristics
38    // rather than OS version
39    if (T.isMacOSX() && T.isMacOSXVersionLT(10, 6))
40      HasWeakDefCanBeHiddenDirective = false;
41  
42    UseIntegratedAssembler = true;
43  }
44  
anchor()45  void PPCELFMCAsmInfo::anchor() { }
46  
PPCELFMCAsmInfo(bool is64Bit,const Triple & T)47  PPCELFMCAsmInfo::PPCELFMCAsmInfo(bool is64Bit, const Triple& T) {
48    // FIXME: This is not always needed. For example, it is not needed in the
49    // v2 abi.
50    NeedsLocalForSize = true;
51  
52    if (is64Bit) {
53      PointerSize = CalleeSaveStackSlotSize = 8;
54    }
55    IsLittleEndian = T.getArch() == Triple::ppc64le;
56  
57    // ".comm align is in bytes but .align is pow-2."
58    AlignmentIsInBytes = false;
59  
60    CommentString = "#";
61  
62    // Uses '.section' before '.bss' directive
63    UsesELFSectionDirectiveForBSS = true;
64  
65    // Debug Information
66    SupportsDebugInformation = true;
67  
68    DollarIsPC = true;
69  
70    // Set up DWARF directives
71    MinInstAlignment = 4;
72  
73    // Exceptions handling
74    ExceptionsType = ExceptionHandling::DwarfCFI;
75  
76    ZeroDirective = "\t.space\t";
77    Data64bitsDirective = is64Bit ? "\t.quad\t" : nullptr;
78    AssemblerDialect = 1;           // New-Style mnemonics.
79    LCOMMDirectiveAlignmentType = LCOMM::ByteAlignment;
80  
81    UseIntegratedAssembler = true;
82  }
83  
84