1 //===-- PPCMCAsmInfo.cpp - PPC asm properties -----------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file contains the declarations of the MCAsmInfoDarwin properties.
11 //===----------------------------------------------------------------------===//
13 #include "PPCMCAsmInfo.h"
14 #include "llvm/ADT/Triple.h"
18 void PPCMCAsmInfoDarwin::anchor() { }
20 PPCMCAsmInfoDarwin::PPCMCAsmInfoDarwin(bool is64Bit
, const Triple
& T
) {
22 CodePointerSize
= CalleeSaveStackSlotSize
= 8;
24 IsLittleEndian
= false;
26 SeparatorString
= "@";
28 ExceptionsType
= ExceptionHandling::DwarfCFI
;
31 Data64bitsDirective
= nullptr; // We can't emit a 64-bit unit in PPC32 mode.
33 AssemblerDialect
= 1; // New-Style mnemonics.
34 SupportsDebugInformation
= true; // Debug information.
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;
42 UseIntegratedAssembler
= true;
45 void PPCELFMCAsmInfo::anchor() { }
47 PPCELFMCAsmInfo::PPCELFMCAsmInfo(bool is64Bit
, const Triple
& T
) {
48 // FIXME: This is not always needed. For example, it is not needed in the
50 NeedsLocalForSize
= true;
53 CodePointerSize
= CalleeSaveStackSlotSize
= 8;
55 IsLittleEndian
= T
.getArch() == Triple::ppc64le
;
57 // ".comm align is in bytes but .align is pow-2."
58 AlignmentIsInBytes
= false;
62 // Uses '.section' before '.bss' directive
63 UsesELFSectionDirectiveForBSS
= true;
66 SupportsDebugInformation
= true;
70 // Set up DWARF directives
73 // Exceptions handling
74 ExceptionsType
= ExceptionHandling::DwarfCFI
;
76 ZeroDirective
= "\t.space\t";
77 Data64bitsDirective
= is64Bit
? "\t.quad\t" : nullptr;
78 AssemblerDialect
= 1; // New-Style mnemonics.
79 LCOMMDirectiveAlignmentType
= LCOMM::ByteAlignment
;
81 UseIntegratedAssembler
= true;
84 void PPCXCOFFMCAsmInfo::anchor() {}
86 PPCXCOFFMCAsmInfo::PPCXCOFFMCAsmInfo(bool Is64Bit
, const Triple
&T
) {
87 assert(!IsLittleEndian
&& "Little-endian XCOFF not supported.");
88 CodePointerSize
= CalleeSaveStackSlotSize
= Is64Bit
? 8 : 4;
89 ZeroDirective
= "\t.space\t";