blob: adec722805e2ca63ca43ddc6103ee018a29ed874 [file] [log] [blame]
Jim Laskey8e8de8f2006-09-07 22:05:02 +00001//===-- SparcTargetAsmInfo.cpp - Sparc asm properties -----------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Jim Laskey8e8de8f2006-09-07 22:05:02 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file contains the declarations of the SparcTargetAsmInfo properties.
11//
12//===----------------------------------------------------------------------===//
13
14#include "SparcTargetAsmInfo.h"
Chris Lattnerf40761d2009-07-26 07:33:58 +000015#include "llvm/ADT/SmallVector.h"
Jim Laskey8e8de8f2006-09-07 22:05:02 +000016using namespace llvm;
17
Chris Lattner0fcf4dc2009-07-26 19:23:28 +000018SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM)
19 : ELFTargetAsmInfo(TM) {
Jim Laskey8e8de8f2006-09-07 22:05:02 +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 Korobeynikov5b794b92008-08-07 09:51:25 +000026 COMMDirectiveTakesAlignment = true;
Anton Korobeynikov25c6a082008-08-08 18:25:29 +000027 CStringSection=".rodata.str";
Anton Korobeynikov328da652008-08-16 12:58:12 +000028
29 // Sparc normally uses named section for BSS.
Chris Lattner0fcf4dc2009-07-26 19:23:28 +000030 BSSSection_ = getNamedSection("\t.bss",
31 SectionFlags::Writable | SectionFlags::BSS);
Anton Korobeynikov5b794b92008-08-07 09:51:25 +000032}
33
Anton Korobeynikov5b794b92008-08-07 09:51:25 +000034
Chris Lattnerf40761d2009-07-26 07:33:58 +000035void SparcELFTargetAsmInfo::getSectionFlags(unsigned Flags,
36 SmallVectorImpl<char> &Str) const {
37 if (Flags & SectionFlags::Mergeable)
38 return ELFTargetAsmInfo::getSectionFlags(Flags, Str);
Anton Korobeynikov5b794b92008-08-07 09:51:25 +000039
Chris Lattnerf40761d2009-07-26 07:33:58 +000040 // FIXME: Inefficient.
41 std::string Res;
42 if (!(Flags & SectionFlags::Debug))
43 Res += ",#alloc";
44 if (Flags & SectionFlags::Code)
45 Res += ",#execinstr";
46 if (Flags & SectionFlags::Writable)
47 Res += ",#write";
48 if (Flags & SectionFlags::TLS)
49 Res += ",#tls";
50
51 Str.append(Res.begin(), Res.end());
Jim Laskey8e8de8f2006-09-07 22:05:02 +000052}