Unfortunately we can't enable it for all N64 because it is not yet possible to distinguish N32 from N64. N64 has been confirmed to produce identical (within reason) objects to GAS during stage 2 of compiler recursion on N64-abit Fedora. Unfortunately, Fedora's triples do not distinguish N32 from N64 so I can't enable it by default there. I'm currently repeating this testing for Debian mips64el but it's very unlikely to produce a different result. Patch by: Daniel Sanders Reviewers: sdardis Differential Review: https://reviews.llvm.org/D22678 llvm-svn: 281607
67 lines
2.3 KiB
C++
67 lines
2.3 KiB
C++
//===-- MipsMCAsmInfo.cpp - Mips Asm Properties ---------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file contains the declarations of the MipsMCAsmInfo properties.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "MipsMCAsmInfo.h"
|
|
#include "llvm/ADT/Triple.h"
|
|
|
|
using namespace llvm;
|
|
|
|
void MipsMCAsmInfo::anchor() { }
|
|
|
|
MipsMCAsmInfo::MipsMCAsmInfo(const Triple &TheTriple) {
|
|
if ((TheTriple.getArch() == Triple::mips) ||
|
|
(TheTriple.getArch() == Triple::mips64))
|
|
IsLittleEndian = false;
|
|
|
|
if ((TheTriple.getArch() == Triple::mips64el) ||
|
|
(TheTriple.getArch() == Triple::mips64)) {
|
|
PointerSize = CalleeSaveStackSlotSize = 8;
|
|
}
|
|
|
|
// FIXME: This condition isn't quite right but it's the best we can do until
|
|
// this object can identify the ABI. It will misbehave when using O32
|
|
// on a mips64*-* triple.
|
|
if ((TheTriple.getArch() == Triple::mipsel) ||
|
|
(TheTriple.getArch() == Triple::mips)) {
|
|
PrivateGlobalPrefix = "$";
|
|
PrivateLabelPrefix = "$";
|
|
}
|
|
|
|
AlignmentIsInBytes = false;
|
|
Data16bitsDirective = "\t.2byte\t";
|
|
Data32bitsDirective = "\t.4byte\t";
|
|
Data64bitsDirective = "\t.8byte\t";
|
|
CommentString = "#";
|
|
ZeroDirective = "\t.space\t";
|
|
GPRel32Directive = "\t.gpword\t";
|
|
GPRel64Directive = "\t.gpdword\t";
|
|
DTPRel32Directive = "\t.dtprelword\t";
|
|
DTPRel64Directive = "\t.dtpreldword\t";
|
|
TPRel32Directive = "\t.tprelword\t";
|
|
TPRel64Directive = "\t.tpreldword\t";
|
|
UseAssignmentForEHBegin = true;
|
|
SupportsDebugInformation = true;
|
|
ExceptionsType = ExceptionHandling::DwarfCFI;
|
|
DwarfRegNumForCFI = true;
|
|
HasMipsExpressions = true;
|
|
|
|
// Enable IAS by default for O32.
|
|
if (TheTriple.getArch() == Triple::mips ||
|
|
TheTriple.getArch() == Triple::mipsel)
|
|
UseIntegratedAssembler = true;
|
|
|
|
// Enable IAS by default for Debian mips64/mips64el.
|
|
if (TheTriple.getEnvironment() == Triple::GNUABI64)
|
|
UseIntegratedAssembler = true;
|
|
}
|