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
17using namespace llvm;
18
19void PPCMCAsmInfoDarwin::anchor() { }
20
21PPCMCAsmInfoDarwin::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
45void PPCLinuxMCAsmInfo::anchor() { }
46
47PPCLinuxMCAsmInfo::PPCLinuxMCAsmInfo(bool is64Bit, const Triple& T) {
48  if (is64Bit) {
49    PointerSize = CalleeSaveStackSlotSize = 8;
50  }
51  IsLittleEndian = T.getArch() == Triple::ppc64le;
52
53  // ".comm align is in bytes but .align is pow-2."
54  AlignmentIsInBytes = false;
55
56  CommentString = "#";
57
58  // Uses '.section' before '.bss' directive
59  UsesELFSectionDirectiveForBSS = true;
60
61  // Debug Information
62  SupportsDebugInformation = true;
63
64  DollarIsPC = true;
65
66  // Set up DWARF directives
67  HasLEB128 = true;  // Target asm supports leb128 directives (little-endian)
68  MinInstAlignment = 4;
69
70  // Exceptions handling
71  ExceptionsType = ExceptionHandling::DwarfCFI;
72
73  ZeroDirective = "\t.space\t";
74  Data64bitsDirective = is64Bit ? "\t.quad\t" : nullptr;
75  AssemblerDialect = 1;           // New-Style mnemonics.
76
77  if (T.getOS() == llvm::Triple::FreeBSD ||
78      (T.getOS() == llvm::Triple::NetBSD && !is64Bit) ||
79      (T.getOS() == llvm::Triple::OpenBSD && !is64Bit))
80    UseIntegratedAssembler = true;
81}
82
83