1//===-- PPCMCAsmInfo.cpp - PPC asm properties -----------------------------===//
2//
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
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains the declarations of the MCAsmInfoDarwin properties.
10//
11//===----------------------------------------------------------------------===//
12
13#include "PPCMCAsmInfo.h"
14#include "llvm/TargetParser/Triple.h"
15
16using namespace llvm;
17
18void PPCELFMCAsmInfo::anchor() { }
19
20PPCELFMCAsmInfo::PPCELFMCAsmInfo(bool is64Bit, const Triple& T) {
21 // FIXME: This is not always needed. For example, it is not needed in the
22 // v2 abi.
23 NeedsLocalForSize = true;
24
25 if (is64Bit) {
26 CodePointerSize = CalleeSaveStackSlotSize = 8;
27 }
28 IsLittleEndian =
29 T.getArch() == Triple::ppc64le || T.getArch() == Triple::ppcle;
30
31 // ".comm align is in bytes but .align is pow-2."
32 AlignmentIsInBytes = false;
33
34 CommentString = "#";
35
36 // Uses '.section' before '.bss' directive
37 UsesELFSectionDirectiveForBSS = true;
38
39 // Debug Information
40 SupportsDebugInformation = true;
41
42 DollarIsPC = true;
43
44 // Set up DWARF directives
45 MinInstAlignment = 4;
46
47 // Exceptions handling
48 ExceptionsType = ExceptionHandling::DwarfCFI;
49
50 ZeroDirective = "\t.space\t";
51 Data64bitsDirective = is64Bit ? "\t.quad\t" : nullptr;
52 AssemblerDialect = 1; // New-Style mnemonics.
53 LCOMMDirectiveAlignmentType = LCOMM::ByteAlignment;
54}
55
56void PPCXCOFFMCAsmInfo::anchor() {}
57
58PPCXCOFFMCAsmInfo::PPCXCOFFMCAsmInfo(bool Is64Bit, const Triple &T) {
59 if (T.getArch() == Triple::ppc64le || T.getArch() == Triple::ppcle)
60 report_fatal_error(reason: "XCOFF is not supported for little-endian targets");
61 CodePointerSize = CalleeSaveStackSlotSize = Is64Bit ? 8 : 4;
62
63 // A size of 8 is only supported by the assembler under 64-bit.
64 Data64bitsDirective = Is64Bit ? "\t.vbyte\t8, " : nullptr;
65
66 // Debug Information
67 SupportsDebugInformation = true;
68
69 // Set up DWARF directives
70 MinInstAlignment = 4;
71
72 // Support $ as PC in inline asm
73 DollarIsPC = true;
74}
75