1224133Sdim//===-- SparcMCAsmInfo.cpp - Sparc asm properties -------------------------===// 2224133Sdim// 3224133Sdim// The LLVM Compiler Infrastructure 4224133Sdim// 5224133Sdim// This file is distributed under the University of Illinois Open Source 6224133Sdim// License. See LICENSE.TXT for details. 7224133Sdim// 8224133Sdim//===----------------------------------------------------------------------===// 9224133Sdim// 10224133Sdim// This file contains the declarations of the SparcMCAsmInfo properties. 11224133Sdim// 12224133Sdim//===----------------------------------------------------------------------===// 13224133Sdim 14224133Sdim#include "SparcMCAsmInfo.h" 15263764Sdim#include "SparcMCExpr.h" 16224133Sdim#include "llvm/ADT/Triple.h" 17263764Sdim#include "llvm/MC/MCStreamer.h" 18224133Sdim 19224133Sdimusing namespace llvm; 20224133Sdim 21235633Sdimvoid SparcELFMCAsmInfo::anchor() { } 22235633Sdim 23263509SdimSparcELFMCAsmInfo::SparcELFMCAsmInfo(StringRef TT) { 24224133Sdim IsLittleEndian = false; 25224133Sdim Triple TheTriple(TT); 26263509Sdim bool isV9 = (TheTriple.getArch() == Triple::sparcv9); 27263509Sdim 28263509Sdim if (isV9) { 29252723Sdim PointerSize = CalleeSaveStackSlotSize = 8; 30252723Sdim } 31224133Sdim 32224133Sdim Data16bitsDirective = "\t.half\t"; 33224133Sdim Data32bitsDirective = "\t.word\t"; 34263509Sdim // .xword is only supported by V9. 35263509Sdim Data64bitsDirective = (isV9) ? "\t.xword\t" : 0; 36224133Sdim ZeroDirective = "\t.skip\t"; 37224133Sdim CommentString = "!"; 38224133Sdim HasLEB128 = true; 39224133Sdim SupportsDebugInformation = true; 40263509Sdim 41263509Sdim ExceptionsType = ExceptionHandling::DwarfCFI; 42263509Sdim 43224133Sdim SunStyleELFSectionSwitchSyntax = true; 44224133Sdim UsesELFSectionDirectiveForBSS = true; 45224133Sdim 46224133Sdim PrivateGlobalPrefix = ".L"; 47224133Sdim} 48224133Sdim 49263764Sdimconst MCExpr* 50263764SdimSparcELFMCAsmInfo::getExprForPersonalitySymbol(const MCSymbol *Sym, 51263764Sdim unsigned Encoding, 52263764Sdim MCStreamer &Streamer) const { 53263764Sdim if (Encoding & dwarf::DW_EH_PE_pcrel) { 54263764Sdim MCContext &Ctx = Streamer.getContext(); 55263764Sdim return SparcMCExpr::Create(SparcMCExpr::VK_Sparc_R_DISP32, 56263764Sdim MCSymbolRefExpr::Create(Sym, Ctx), Ctx); 57263764Sdim } 58224133Sdim 59263764Sdim return MCAsmInfo::getExprForPersonalitySymbol(Sym, Encoding, Streamer); 60263764Sdim} 61263764Sdim 62263764Sdimconst MCExpr* 63263764SdimSparcELFMCAsmInfo::getExprForFDESymbol(const MCSymbol *Sym, 64263764Sdim unsigned Encoding, 65263764Sdim MCStreamer &Streamer) const { 66263764Sdim if (Encoding & dwarf::DW_EH_PE_pcrel) { 67263764Sdim MCContext &Ctx = Streamer.getContext(); 68263764Sdim return SparcMCExpr::Create(SparcMCExpr::VK_Sparc_R_DISP32, 69263764Sdim MCSymbolRefExpr::Create(Sym, Ctx), Ctx); 70263764Sdim } 71263764Sdim return MCAsmInfo::getExprForFDESymbol(Sym, Encoding, Streamer); 72263764Sdim} 73