LLVM: lib/Target/LoongArch/MCTargetDesc/LoongArchMCAsmInfo.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
19
20using namespace llvm;
21
24 return new (Ctx) LoongArchMCExpr(Expr, S, Hint);
25}
26
28 switch (S) {
29 default:
31 case ELF::R_LARCH_B16:
32 return "b16";
33 case ELF::R_LARCH_B21:
34 return "b21";
35 case ELF::R_LARCH_MARK_LA:
36 case ELF::R_LARCH_ABS_HI20:
37 return "abs_hi20";
38 case ELF::R_LARCH_ABS_LO12:
39 return "abs_lo12";
40 case ELF::R_LARCH_ABS64_LO20:
41 return "abs64_lo20";
42 case ELF::R_LARCH_ABS64_HI12:
43 return "abs64_hi12";
44 case ELF::R_LARCH_PCALA_HI20:
45 return "pc_hi20";
46 case ELF::R_LARCH_PCALA_LO12:
47 return "pc_lo12";
48 case ELF::R_LARCH_PCALA64_LO20:
49 return "pc64_lo20";
50 case ELF::R_LARCH_PCALA64_HI12:
51 return "pc64_hi12";
52 case ELF::R_LARCH_GOT_PC_HI20:
53 return "got_pc_hi20";
54 case ELF::R_LARCH_GOT_PC_LO12:
55 return "got_pc_lo12";
56 case ELF::R_LARCH_GOT64_PC_LO20:
57 return "got64_pc_lo20";
58 case ELF::R_LARCH_GOT64_PC_HI12:
59 return "got64_pc_hi12";
60 case ELF::R_LARCH_GOT_HI20:
61 return "got_hi20";
62 case ELF::R_LARCH_GOT_LO12:
63 return "got_lo12";
64 case ELF::R_LARCH_GOT64_LO20:
65 return "got64_lo20";
66 case ELF::R_LARCH_GOT64_HI12:
67 return "got64_hi12";
68 case ELF::R_LARCH_TLS_LE_HI20:
69 return "le_hi20";
70 case ELF::R_LARCH_TLS_LE_LO12:
71 return "le_lo12";
72 case ELF::R_LARCH_TLS_LE64_LO20:
73 return "le64_lo20";
74 case ELF::R_LARCH_TLS_LE64_HI12:
75 return "le64_hi12";
76 case ELF::R_LARCH_TLS_IE_PC_HI20:
77 return "ie_pc_hi20";
78 case ELF::R_LARCH_TLS_IE_PC_LO12:
79 return "ie_pc_lo12";
80 case ELF::R_LARCH_TLS_IE64_PC_LO20:
81 return "ie64_pc_lo20";
82 case ELF::R_LARCH_TLS_IE64_PC_HI12:
83 return "ie64_pc_hi12";
84 case ELF::R_LARCH_TLS_IE_HI20:
85 return "ie_hi20";
86 case ELF::R_LARCH_TLS_IE_LO12:
87 return "ie_lo12";
88 case ELF::R_LARCH_TLS_IE64_LO20:
89 return "ie64_lo20";
90 case ELF::R_LARCH_TLS_IE64_HI12:
91 return "ie64_hi12";
92 case ELF::R_LARCH_TLS_LD_PC_HI20:
93 return "ld_pc_hi20";
94 case ELF::R_LARCH_TLS_LD_HI20:
95 return "ld_hi20";
96 case ELF::R_LARCH_TLS_GD_PC_HI20:
97 return "gd_pc_hi20";
98 case ELF::R_LARCH_TLS_GD_HI20:
99 return "gd_hi20";
100 case ELF::R_LARCH_CALL36:
101 return "call36";
102 case ELF::R_LARCH_TLS_DESC_PC_HI20:
103 return "desc_pc_hi20";
104 case ELF::R_LARCH_TLS_DESC_PC_LO12:
105 return "desc_pc_lo12";
106 case ELF::R_LARCH_TLS_DESC64_PC_LO20:
107 return "desc64_pc_lo20";
108 case ELF::R_LARCH_TLS_DESC64_PC_HI12:
109 return "desc64_pc_hi12";
110 case ELF::R_LARCH_TLS_DESC_HI20:
111 return "desc_hi20";
112 case ELF::R_LARCH_TLS_DESC_LO12:
113 return "desc_lo12";
114 case ELF::R_LARCH_TLS_DESC64_LO20:
115 return "desc64_lo20";
116 case ELF::R_LARCH_TLS_DESC64_HI12:
117 return "desc64_hi12";
118 case ELF::R_LARCH_TLS_DESC_LD:
119 return "desc_ld";
120 case ELF::R_LARCH_TLS_DESC_CALL:
121 return "desc_call";
122 case ELF::R_LARCH_TLS_LE_HI20_R:
123 return "le_hi20_r";
124 case ELF::R_LARCH_TLS_LE_ADD_R:
125 return "le_add_r";
126 case ELF::R_LARCH_TLS_LE_LO12_R:
127 return "le_lo12_r";
128 case ELF::R_LARCH_PCREL20_S2:
129 return "pcrel_20";
130 case ELF::R_LARCH_TLS_LD_PCREL20_S2:
131 return "ld_pcrel_20";
132 case ELF::R_LARCH_TLS_GD_PCREL20_S2:
133 return "gd_pcrel_20";
134 case ELF::R_LARCH_TLS_DESC_PCREL20_S2:
135 return "desc_pcrel_20";
136 }
137}
138
141 .Case("plt", ELF::R_LARCH_B26)
142 .Case("b16", ELF::R_LARCH_B16)
143 .Case("b21", ELF::R_LARCH_B21)
144 .Case("b26", ELF::R_LARCH_B26)
145 .Case("abs_hi20", ELF::R_LARCH_ABS_HI20)
146 .Case("abs_lo12", ELF::R_LARCH_ABS_LO12)
147 .Case("abs64_lo20", ELF::R_LARCH_ABS64_LO20)
148 .Case("abs64_hi12", ELF::R_LARCH_ABS64_HI12)
149 .Case("pc_hi20", ELF::R_LARCH_PCALA_HI20)
150 .Case("pc_lo12", ELF::R_LARCH_PCALA_LO12)
151 .Case("pc64_lo20", ELF::R_LARCH_PCALA64_LO20)
152 .Case("pc64_hi12", ELF::R_LARCH_PCALA64_HI12)
153 .Case("got_pc_hi20", ELF::R_LARCH_GOT_PC_HI20)
154 .Case("got_pc_lo12", ELF::R_LARCH_GOT_PC_LO12)
155 .Case("got64_pc_lo20", ELF::R_LARCH_GOT64_PC_LO20)
156 .Case("got64_pc_hi12", ELF::R_LARCH_GOT64_PC_HI12)
157 .Case("got_hi20", ELF::R_LARCH_GOT_HI20)
158 .Case("got_lo12", ELF::R_LARCH_GOT_LO12)
159 .Case("got64_lo20", ELF::R_LARCH_GOT64_LO20)
160 .Case("got64_hi12", ELF::R_LARCH_GOT64_HI12)
161 .Case("le_hi20", ELF::R_LARCH_TLS_LE_HI20)
162 .Case("le_lo12", ELF::R_LARCH_TLS_LE_LO12)
163 .Case("le64_lo20", ELF::R_LARCH_TLS_LE64_LO20)
164 .Case("le64_hi12", ELF::R_LARCH_TLS_LE64_HI12)
165 .Case("ie_pc_hi20", ELF::R_LARCH_TLS_IE_PC_HI20)
166 .Case("ie_pc_lo12", ELF::R_LARCH_TLS_IE_PC_LO12)
167 .Case("ie64_pc_lo20", ELF::R_LARCH_TLS_IE64_PC_LO20)
168 .Case("ie64_pc_hi12", ELF::R_LARCH_TLS_IE64_PC_HI12)
169 .Case("ie_hi20", ELF::R_LARCH_TLS_IE_HI20)
170 .Case("ie_lo12", ELF::R_LARCH_TLS_IE_LO12)
171 .Case("ie64_lo20", ELF::R_LARCH_TLS_IE64_LO20)
172 .Case("ie64_hi12", ELF::R_LARCH_TLS_IE64_HI12)
173 .Case("ld_pc_hi20", ELF::R_LARCH_TLS_LD_PC_HI20)
174 .Case("ld_hi20", ELF::R_LARCH_TLS_LD_HI20)
175 .Case("gd_pc_hi20", ELF::R_LARCH_TLS_GD_PC_HI20)
176 .Case("gd_hi20", ELF::R_LARCH_TLS_GD_HI20)
177 .Case("call36", ELF::R_LARCH_CALL36)
178 .Case("desc_pc_hi20", ELF::R_LARCH_TLS_DESC_PC_HI20)
179 .Case("desc_pc_lo12", ELF::R_LARCH_TLS_DESC_PC_LO12)
180 .Case("desc64_pc_lo20", ELF::R_LARCH_TLS_DESC64_PC_LO20)
181 .Case("desc64_pc_hi12", ELF::R_LARCH_TLS_DESC64_PC_HI12)
182 .Case("desc_hi20", ELF::R_LARCH_TLS_DESC_HI20)
183 .Case("desc_lo12", ELF::R_LARCH_TLS_DESC_LO12)
184 .Case("desc64_lo20", ELF::R_LARCH_TLS_DESC64_LO20)
185 .Case("desc64_hi12", ELF::R_LARCH_TLS_DESC64_HI12)
186 .Case("desc_ld", ELF::R_LARCH_TLS_DESC_LD)
187 .Case("desc_call", ELF::R_LARCH_TLS_DESC_CALL)
188 .Case("le_hi20_r", ELF::R_LARCH_TLS_LE_HI20_R)
189 .Case("le_add_r", ELF::R_LARCH_TLS_LE_ADD_R)
190 .Case("le_lo12_r", ELF::R_LARCH_TLS_LE_LO12_R)
191 .Case("pcrel_20", ELF::R_LARCH_PCREL20_S2)
192 .Case("ld_pcrel_20", ELF::R_LARCH_TLS_LD_PCREL20_S2)
193 .Case("gd_pcrel_20", ELF::R_LARCH_TLS_GD_PCREL20_S2)
194 .Case("desc_pcrel_20", ELF::R_LARCH_TLS_DESC_PCREL20_S2)
196}
197
198void LoongArchMCAsmInfo::anchor() {}
199
214
218 bool HasSpecifier = S != 0 && S != ELF::R_LARCH_B26;
219 if (HasSpecifier)
222 if (HasSpecifier)
223 OS << ')';
224}
This file contains constants used for implementing Dwarf debug support.
static StringRef getLoongArchSpecifierName(uint16_t S)
Definition LoongArchMCAsmInfo.cpp:27
LoongArchMCAsmInfo(const Triple &TargetTriple)
Definition LoongArchMCAsmInfo.cpp:200
void printSpecifierExpr(raw_ostream &OS, const MCSpecifierExpr &Expr) const override
Definition LoongArchMCAsmInfo.cpp:215
static const LoongArchMCExpr * create(const MCExpr *Expr, uint16_t S, MCContext &Ctx, bool Hint=false)
Definition LoongArchMCAsmInfo.cpp:22
const char * Data16bitsDirective
const char * Data8bitsDirective
These directives are used to output some unit of integer data to the current section.
const char * Data64bitsDirective
ExceptionHandling ExceptionsType
Exception handling format for the target. Defaults to None.
bool AllowDollarAtStartOfIdentifier
This is true if the assembler allows the "$" character at the start of of a string to be lexed as an ...
const char * Data32bitsDirective
void printExpr(raw_ostream &, const MCExpr &) const
bool SupportsDebugInformation
True if target supports emission of debugging information.
bool AlignmentIsInBytes
If this is true (the default) then the asmprinter emits ".align N" directives, where N is the number ...
const char * ZeroDirective
This should be set to the directive used to get some number of zero (and non-zero if supported by the...
bool DwarfRegNumForCFI
True if dwarf register numbers are printed instead of symbolic register names in ....
unsigned CodePointerSize
Code pointer size in bytes. Default is 4.
unsigned CalleeSaveStackSlotSize
Size of the stack slot reserved for callee-saved registers, in bytes.
StringRef CommentString
This indicates the comment string used by the assembler.
Context object for machine code objects.
Base class for the full range of assembler expressions which are needed for parsing.
Extension point for target-specific MCExpr subclasses with a relocation specifier,...
const MCExpr * getSubExpr() const
Spec getSpecifier() const
StringRef - Represent a constant reference to a string, i.e.
A switch()-like statement whose cases are string literals.
StringSwitch & Case(StringLiteral S, T Value)
Triple - Helper class for working with autoconf configuration names.
This class implements an extremely fast bulk output stream that can only output to a stream.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
uint16_t parseSpecifier(StringRef name)
Definition LoongArchMCAsmInfo.cpp:139
This is an optimization pass for GlobalISel generic memory operations.
@ DwarfCFI
DWARF-like instruction based exceptions.