Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCAsmInfo.cpp
35294 views
1
//===- SparcMCAsmInfo.cpp - Sparc asm properties --------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file contains the declarations of the SparcMCAsmInfo properties.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#include "SparcMCAsmInfo.h"
14
#include "SparcMCExpr.h"
15
#include "llvm/BinaryFormat/Dwarf.h"
16
#include "llvm/MC/MCExpr.h"
17
#include "llvm/MC/MCStreamer.h"
18
#include "llvm/MC/MCTargetOptions.h"
19
#include "llvm/TargetParser/Triple.h"
20
21
using namespace llvm;
22
23
void SparcELFMCAsmInfo::anchor() {}
24
25
SparcELFMCAsmInfo::SparcELFMCAsmInfo(const Triple &TheTriple) {
26
bool isV9 = (TheTriple.getArch() == Triple::sparcv9);
27
IsLittleEndian = (TheTriple.getArch() == Triple::sparcel);
28
29
if (isV9) {
30
CodePointerSize = CalleeSaveStackSlotSize = 8;
31
}
32
33
Data16bitsDirective = "\t.half\t";
34
Data32bitsDirective = "\t.word\t";
35
// .xword is only supported by V9.
36
Data64bitsDirective = (isV9) ? "\t.xword\t" : nullptr;
37
ZeroDirective = "\t.skip\t";
38
CommentString = "!";
39
SupportsDebugInformation = true;
40
41
ExceptionsType = ExceptionHandling::DwarfCFI;
42
43
UsesELFSectionDirectiveForBSS = true;
44
}
45
46
const MCExpr*
47
SparcELFMCAsmInfo::getExprForPersonalitySymbol(const MCSymbol *Sym,
48
unsigned Encoding,
49
MCStreamer &Streamer) const {
50
if (Encoding & dwarf::DW_EH_PE_pcrel) {
51
MCContext &Ctx = Streamer.getContext();
52
return SparcMCExpr::create(SparcMCExpr::VK_Sparc_R_DISP32,
53
MCSymbolRefExpr::create(Sym, Ctx), Ctx);
54
}
55
56
return MCAsmInfo::getExprForPersonalitySymbol(Sym, Encoding, Streamer);
57
}
58
59
const MCExpr*
60
SparcELFMCAsmInfo::getExprForFDESymbol(const MCSymbol *Sym,
61
unsigned Encoding,
62
MCStreamer &Streamer) const {
63
if (Encoding & dwarf::DW_EH_PE_pcrel) {
64
MCContext &Ctx = Streamer.getContext();
65
return SparcMCExpr::create(SparcMCExpr::VK_Sparc_R_DISP32,
66
MCSymbolRefExpr::create(Sym, Ctx), Ctx);
67
}
68
return MCAsmInfo::getExprForFDESymbol(Sym, Encoding, Streamer);
69
}
70
71