| //===-- PPCMCAsmInfo.cpp - PPC asm properties -----------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file contains the declarations of the MCAsmInfoDarwin properties. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "PPCMCAsmInfo.h" | |
| #include "llvm/ADT/Triple.h" | |
| #include <cassert> | |
| using namespace llvm; | |
| void PPCELFMCAsmInfo::anchor() { } | |
| PPCELFMCAsmInfo::PPCELFMCAsmInfo(bool is64Bit, const Triple& T) { | |
| // FIXME: This is not always needed. For example, it is not needed in the | |
| // v2 abi. | |
| NeedsLocalForSize = true; | |
| if (is64Bit) { | |
| CodePointerSize = CalleeSaveStackSlotSize = 8; | |
| } | |
| IsLittleEndian = | |
| T.getArch() == Triple::ppc64le || T.getArch() == Triple::ppcle; | |
| // ".comm align is in bytes but .align is pow-2." | |
| AlignmentIsInBytes = false; | |
| CommentString = "#"; | |
| // Uses '.section' before '.bss' directive | |
| UsesELFSectionDirectiveForBSS = true; | |
| // Debug Information | |
| SupportsDebugInformation = true; | |
| DollarIsPC = true; | |
| // Set up DWARF directives | |
| MinInstAlignment = 4; | |
| // Exceptions handling | |
| ExceptionsType = ExceptionHandling::DwarfCFI; | |
| ZeroDirective = "\t.space\t"; | |
| Data64bitsDirective = is64Bit ? "\t.quad\t" : nullptr; | |
| AssemblerDialect = 1; // New-Style mnemonics. | |
| LCOMMDirectiveAlignmentType = LCOMM::ByteAlignment; | |
| } | |
| void PPCXCOFFMCAsmInfo::anchor() {} | |
| PPCXCOFFMCAsmInfo::PPCXCOFFMCAsmInfo(bool Is64Bit, const Triple &T) { | |
| if (T.getArch() == Triple::ppc64le || T.getArch() == Triple::ppcle) | |
| report_fatal_error("XCOFF is not supported for little-endian targets"); | |
| CodePointerSize = CalleeSaveStackSlotSize = Is64Bit ? 8 : 4; | |
| // A size of 8 is only supported by the assembler under 64-bit. | |
| Data64bitsDirective = Is64Bit ? "\t.vbyte\t8, " : nullptr; | |
| // Debug Information | |
| SupportsDebugInformation = true; | |
| // Set up DWARF directives | |
| MinInstAlignment = 4; | |
| // Support $ as PC in inline asm | |
| DollarIsPC = true; | |
| } |