1af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner//===-- SparcMCAsmInfo.cpp - Sparc asm properties -------------------------===//
28e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey//
38e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey//                     The LLVM Compiler Infrastructure
48e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
78e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey//
88e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey//===----------------------------------------------------------------------===//
98e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey//
10af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner// This file contains the declarations of the SparcMCAsmInfo properties.
118e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey//
128e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey//===----------------------------------------------------------------------===//
138e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey
14af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner#include "SparcMCAsmInfo.h"
1536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "SparcMCExpr.h"
161be0e271a07925b928ba89848934f1ea6f1854e2Evan Cheng#include "llvm/ADT/Triple.h"
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/MC/MCStreamer.h"
181be0e271a07925b928ba89848934f1ea6f1854e2Evan Cheng
198e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskeyusing namespace llvm;
208e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey
216948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainarvoid SparcELFMCAsmInfo::anchor() {}
222d24e2a396a1d211baaeedf32148a3b657240170David Blaikie
236948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga NainarSparcELFMCAsmInfo::SparcELFMCAsmInfo(const Triple &TheTriple) {
24d8de58e24cf5874c0d6f903d15333406787ea944Venkatraman Govindaraju  bool isV9 = (TheTriple.getArch() == Triple::sparcv9);
256948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar  IsLittleEndian = (TheTriple.getArch() == Triple::sparcel);
26d8de58e24cf5874c0d6f903d15333406787ea944Venkatraman Govindaraju
27d8de58e24cf5874c0d6f903d15333406787ea944Venkatraman Govindaraju  if (isV9) {
28e752feee5228bfa33acee35ef9c606ce12f0f173Eli Bendersky    PointerSize = CalleeSaveStackSlotSize = 8;
29e752feee5228bfa33acee35ef9c606ce12f0f173Eli Bendersky  }
301be0e271a07925b928ba89848934f1ea6f1854e2Evan Cheng
318e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey  Data16bitsDirective = "\t.half\t";
328e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey  Data32bitsDirective = "\t.word\t";
33d8de58e24cf5874c0d6f903d15333406787ea944Venkatraman Govindaraju  // .xword is only supported by V9.
34dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines  Data64bitsDirective = (isV9) ? "\t.xword\t" : nullptr;
358e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey  ZeroDirective = "\t.skip\t";
368e8de8f7765a08ab3aa4f48b302cf19ccb9740e2Jim Laskey  CommentString = "!";
37930e4d96e8718abcb56212676c35e6f7ea0ab605Richard Pennington  SupportsDebugInformation = true;
38d8de58e24cf5874c0d6f903d15333406787ea944Venkatraman Govindaraju
3930ec8a3658b1f06bb94d392c55feb7f107517bf8Venkatraman Govindaraju  ExceptionsType = ExceptionHandling::DwarfCFI;
4030ec8a3658b1f06bb94d392c55feb7f107517bf8Venkatraman Govindaraju
415277b22687d3513dd29d5a9c8510cac740f933f6Chris Lattner  SunStyleELFSectionSwitchSyntax = true;
42eb2aa096bb8aba742b87a99d561185bb3f8863c5Venkatraman Govindaraju  UsesELFSectionDirectiveForBSS = true;
43eb2aa096bb8aba742b87a99d561185bb3f8863c5Venkatraman Govindaraju
44ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines  UseIntegratedAssembler = true;
455b794b98cebbc3982b87780657e0d280c2bcdd04Anton Korobeynikov}
465b794b98cebbc3982b87780657e0d280c2bcdd04Anton Korobeynikov
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesconst MCExpr*
4836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesSparcELFMCAsmInfo::getExprForPersonalitySymbol(const MCSymbol *Sym,
4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                               unsigned Encoding,
5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                               MCStreamer &Streamer) const {
5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  if (Encoding & dwarf::DW_EH_PE_pcrel) {
5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    MCContext &Ctx = Streamer.getContext();
536948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar    return SparcMCExpr::create(SparcMCExpr::VK_Sparc_R_DISP32,
546948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar                               MCSymbolRefExpr::create(Sym, Ctx), Ctx);
5536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  }
5636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
5736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  return MCAsmInfo::getExprForPersonalitySymbol(Sym, Encoding, Streamer);
5836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
595b794b98cebbc3982b87780657e0d280c2bcdd04Anton Korobeynikov
6036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesconst MCExpr*
6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesSparcELFMCAsmInfo::getExprForFDESymbol(const MCSymbol *Sym,
6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                       unsigned Encoding,
6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines                                       MCStreamer &Streamer) const {
6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  if (Encoding & dwarf::DW_EH_PE_pcrel) {
6536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    MCContext &Ctx = Streamer.getContext();
666948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar    return SparcMCExpr::create(SparcMCExpr::VK_Sparc_R_DISP32,
676948897e478cbd66626159776a8017b3c18579b9Pirama Arumuga Nainar                               MCSymbolRefExpr::create(Sym, Ctx), Ctx);
6836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  }
6936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  return MCAsmInfo::getExprForFDESymbol(Sym, Encoding, Streamer);
7036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
71