SparcMCAsmInfo.cpp revision 6948897e478cbd66626159776a8017b3c18579b9
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