Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchFixupKinds.h
35294 views
1
//===- LoongArchFixupKinds.h - LoongArch Specific Fixup Entries -*- C++ -*-===//
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
#ifndef LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHFIXUPKINDS_H
10
#define LLVM_LIB_TARGET_LOONGARCH_MCTARGETDESC_LOONGARCHFIXUPKINDS_H
11
12
#include "llvm/BinaryFormat/ELF.h"
13
#include "llvm/MC/MCFixup.h"
14
15
#undef LoongArch
16
17
namespace llvm {
18
namespace LoongArch {
19
//
20
// This table *must* be in the same order of
21
// MCFixupKindInfo Infos[LoongArch::NumTargetFixupKinds] in
22
// LoongArchAsmBackend.cpp.
23
//
24
enum Fixups {
25
// Define fixups can be handled by LoongArchAsmBackend::applyFixup.
26
// 16-bit fixup corresponding to %b16(foo) for instructions like bne.
27
fixup_loongarch_b16 = FirstTargetFixupKind,
28
// 21-bit fixup corresponding to %b21(foo) for instructions like bnez.
29
fixup_loongarch_b21,
30
// 26-bit fixup corresponding to %b26(foo)/%plt(foo) for instructions b/bl.
31
fixup_loongarch_b26,
32
// 20-bit fixup corresponding to %abs_hi20(foo) for instruction lu12i.w.
33
fixup_loongarch_abs_hi20,
34
// 12-bit fixup corresponding to %abs_lo12(foo) for instruction ori.
35
fixup_loongarch_abs_lo12,
36
// 20-bit fixup corresponding to %abs64_lo20(foo) for instruction lu32i.d.
37
fixup_loongarch_abs64_lo20,
38
// 12-bit fixup corresponding to %abs_hi12(foo) for instruction lu52i.d.
39
fixup_loongarch_abs64_hi12,
40
// 20-bit fixup corresponding to %le_hi20(foo) for instruction lu12i.w.
41
fixup_loongarch_tls_le_hi20,
42
// 12-bit fixup corresponding to %le_lo12(foo) for instruction ori.
43
fixup_loongarch_tls_le_lo12,
44
// 20-bit fixup corresponding to %le64_lo20(foo) for instruction lu32i.d.
45
fixup_loongarch_tls_le64_lo20,
46
// 12-bit fixup corresponding to %le64_hi12(foo) for instruction lu52i.d.
47
fixup_loongarch_tls_le64_hi12,
48
// TODO: Add more fixup kind.
49
50
// Used as a sentinel, must be the last of the fixup which can be handled by
51
// LoongArchAsmBackend::applyFixup.
52
fixup_loongarch_invalid,
53
NumTargetFixupKinds = fixup_loongarch_invalid - FirstTargetFixupKind,
54
55
// Define fixups for force relocation as FirstLiteralRelocationKind+V
56
// represents the relocation type with number V.
57
// 20-bit fixup corresponding to %pc_hi20(foo) for instruction pcalau12i.
58
fixup_loongarch_pcala_hi20 =
59
FirstLiteralRelocationKind + ELF::R_LARCH_PCALA_HI20,
60
// 12-bit fixup corresponding to %pc_lo12(foo) for instructions like addi.w/d.
61
fixup_loongarch_pcala_lo12,
62
// 20-bit fixup corresponding to %pc64_lo20(foo) for instruction lu32i.d.
63
fixup_loongarch_pcala64_lo20,
64
// 12-bit fixup corresponding to %pc64_hi12(foo) for instruction lu52i.d.
65
fixup_loongarch_pcala64_hi12,
66
// 20-bit fixup corresponding to %got_pc_hi20(foo) for instruction pcalau12i.
67
fixup_loongarch_got_pc_hi20,
68
// 12-bit fixup corresponding to %got_pc_lo12(foo) for instructions
69
// ld.w/ld.d/add.d.
70
fixup_loongarch_got_pc_lo12,
71
// 20-bit fixup corresponding to %got64_pc_lo20(foo) for instruction lu32i.d.
72
fixup_loongarch_got64_pc_lo20,
73
// 12-bit fixup corresponding to %got64_pc_hi12(foo) for instruction lu52i.d.
74
fixup_loongarch_got64_pc_hi12,
75
// 20-bit fixup corresponding to %got_hi20(foo) for instruction lu12i.w.
76
fixup_loongarch_got_hi20,
77
// 12-bit fixup corresponding to %got_lo12(foo) for instruction ori.
78
fixup_loongarch_got_lo12,
79
// 20-bit fixup corresponding to %got64_lo20(foo) for instruction lu32i.d.
80
fixup_loongarch_got64_lo20,
81
// 12-bit fixup corresponding to %got64_hi12(foo) for instruction lu52i.d.
82
fixup_loongarch_got64_hi12,
83
// Skip R_LARCH_TLS_LE_*.
84
// 20-bit fixup corresponding to %ie_pc_hi20(foo) for instruction pcalau12i.
85
fixup_loongarch_tls_ie_pc_hi20 =
86
FirstLiteralRelocationKind + ELF::R_LARCH_TLS_IE_PC_HI20,
87
// 12-bit fixup corresponding to %ie_pc_lo12(foo) for instructions
88
// ld.w/ld.d/add.d.
89
fixup_loongarch_tls_ie_pc_lo12,
90
// 20-bit fixup corresponding to %ie64_pc_lo20(foo) for instruction lu32i.d.
91
fixup_loongarch_tls_ie64_pc_lo20,
92
// 12-bit fixup corresponding to %ie64_pc_hi12(foo) for instruction lu52i.d.
93
fixup_loongarch_tls_ie64_pc_hi12,
94
// 20-bit fixup corresponding to %ie_hi20(foo) for instruction lu12i.w.
95
fixup_loongarch_tls_ie_hi20,
96
// 12-bit fixup corresponding to %ie_lo12(foo) for instruction ori.
97
fixup_loongarch_tls_ie_lo12,
98
// 20-bit fixup corresponding to %ie64_lo20(foo) for instruction lu32i.d.
99
fixup_loongarch_tls_ie64_lo20,
100
// 12-bit fixup corresponding to %ie64_hi12(foo) for instruction lu52i.d.
101
fixup_loongarch_tls_ie64_hi12,
102
// 20-bit fixup corresponding to %ld_pc_hi20(foo) for instruction pcalau12i.
103
fixup_loongarch_tls_ld_pc_hi20,
104
// 20-bit fixup corresponding to %ld_hi20(foo) for instruction lu12i.w.
105
fixup_loongarch_tls_ld_hi20,
106
// 20-bit fixup corresponding to %gd_pc_hi20(foo) for instruction pcalau12i.
107
fixup_loongarch_tls_gd_pc_hi20,
108
// 20-bit fixup corresponding to %gd_hi20(foo) for instruction lu12i.w.
109
fixup_loongarch_tls_gd_hi20,
110
// Generate an R_LARCH_RELAX which indicates the linker may relax here.
111
fixup_loongarch_relax = FirstLiteralRelocationKind + ELF::R_LARCH_RELAX,
112
// Generate an R_LARCH_ALIGN which indicates the linker may fixup align here.
113
fixup_loongarch_align = FirstLiteralRelocationKind + ELF::R_LARCH_ALIGN,
114
// 20-bit fixup corresponding to %pcrel_20(foo) for instruction pcaddi.
115
fixup_loongarch_pcrel20_s2,
116
// 36-bit fixup corresponding to %call36(foo) for a pair instructions:
117
// pcaddu18i+jirl.
118
fixup_loongarch_call36 = FirstLiteralRelocationKind + ELF::R_LARCH_CALL36,
119
// 20-bit fixup corresponding to %desc_pc_hi20(foo) for instruction pcalau12i.
120
fixup_loongarch_tls_desc_pc_hi20 =
121
FirstLiteralRelocationKind + ELF::R_LARCH_TLS_DESC_PC_HI20,
122
// 12-bit fixup corresponding to %desc_pc_lo12(foo) for instructions like
123
// addi.w/d.
124
fixup_loongarch_tls_desc_pc_lo12,
125
// 20-bit fixup corresponding to %desc64_pc_lo20(foo) for instruction lu32i.d.
126
fixup_loongarch_tls_desc64_pc_lo20,
127
// 12-bit fixup corresponding to %desc64_pc_hi12(foo) for instruction lu52i.d.
128
fixup_loongarch_tls_desc64_pc_hi12,
129
// 20-bit fixup corresponding to %desc_hi20(foo) for instruction lu12i.w.
130
fixup_loongarch_tls_desc_hi20,
131
// 12-bit fixup corresponding to %desc_lo12(foo) for instruction ori.
132
fixup_loongarch_tls_desc_lo12,
133
// 20-bit fixup corresponding to %desc64_lo20(foo) for instruction lu32i.d.
134
fixup_loongarch_tls_desc64_lo20,
135
// 12-bit fixup corresponding to %desc64_hi12(foo) for instruction lu52i.d.
136
fixup_loongarch_tls_desc64_hi12,
137
// 12-bit fixup corresponding to %desc_ld(foo) for instruction ld.w/d.
138
fixup_loongarch_tls_desc_ld,
139
// 12-bit fixup corresponding to %desc_call(foo) for instruction jirl.
140
fixup_loongarch_tls_desc_call,
141
// 20-bit fixup corresponding to %le_hi20_r(foo) for instruction lu12i.w.
142
fixup_loongarch_tls_le_hi20_r,
143
// Fixup corresponding to %le_add_r(foo) for instruction PseudoAddTPRel_W/D.
144
fixup_loongarch_tls_le_add_r,
145
// 12-bit fixup corresponding to %le_lo12_r(foo) for instruction addi.w/d.
146
fixup_loongarch_tls_le_lo12_r,
147
// 20-bit fixup corresponding to %ld_pcrel_20(foo) for instruction pcaddi.
148
fixup_loongarch_tls_ld_pcrel20_s2,
149
// 20-bit fixup corresponding to %gd_pcrel_20(foo) for instruction pcaddi.
150
fixup_loongarch_tls_gd_pcrel20_s2,
151
// 20-bit fixup corresponding to %desc_pcrel_20(foo) for instruction pcaddi.
152
fixup_loongarch_tls_desc_pcrel20_s2,
153
};
154
} // end namespace LoongArch
155
} // end namespace llvm
156
157
#endif
158
159