blob: c13d45ceec7cf9ad209dc450cfe69b6f898388fb [file] [log] [blame]
Dan Gohmanf17a25c2007-07-18 16:29:46 +00001//===-- SparcTargetAsmInfo.cpp - Sparc asm properties -----------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner081ce942007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Dan Gohmanf17a25c2007-07-18 16:29:46 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the declarations of the SparcTargetAsmInfo properties.
11//
12//===----------------------------------------------------------------------===//
13
14#include "SparcTargetAsmInfo.h"
15
16using namespace llvm;
17
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000018SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM):
19 ELFTargetAsmInfo(TM) {
Dan Gohmanf17a25c2007-07-18 16:29:46 +000020 Data16bitsDirective = "\t.half\t";
21 Data32bitsDirective = "\t.word\t";
22 Data64bitsDirective = 0; // .xword is only supported by V9.
23 ZeroDirective = "\t.skip\t";
24 CommentString = "!";
25 ConstantPoolSection = "\t.section \".rodata\",#alloc\n";
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000026 COMMDirectiveTakesAlignment = true;
Anton Korobeynikovb3b5d9b2008-08-08 18:25:29 +000027 CStringSection=".rodata.str";
asla1c96962008-08-16 12:58:12 +000028
29 // Sparc normally uses named section for BSS.
30 BSSSection_ = getNamedSection("\t.bss",
31 SectionFlags::Writeable | SectionFlags::BSS,
32 /* Override */ true);
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000033}
34
asl27ffd262008-08-16 12:57:07 +000035std::string SparcELFTargetAsmInfo::printSectionFlags(unsigned flags) const {
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000036 if (flags & SectionFlags::Mergeable)
asl27ffd262008-08-16 12:57:07 +000037 return ELFTargetAsmInfo::printSectionFlags(flags);
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000038
Anton Korobeynikovb35071f2008-08-08 18:26:10 +000039 std::string Flags;
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000040 if (!(flags & SectionFlags::Debug))
Anton Korobeynikovb35071f2008-08-08 18:26:10 +000041 Flags += ",#alloc";
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000042 if (flags & SectionFlags::Code)
Anton Korobeynikovb35071f2008-08-08 18:26:10 +000043 Flags += ",#execinstr";
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000044 if (flags & SectionFlags::Writeable)
Anton Korobeynikovb35071f2008-08-08 18:26:10 +000045 Flags += ",#write";
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000046 if (flags & SectionFlags::TLS)
Anton Korobeynikovb35071f2008-08-08 18:26:10 +000047 Flags += ",#tls";
Anton Korobeynikovdb9a8952008-08-07 09:51:25 +000048
49 return Flags;
Dan Gohmanf17a25c2007-07-18 16:29:46 +000050}