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