xref: /freebsd/contrib/llvm-project/llvm/lib/Target/AArch64/MCTargetDesc/AArch64FixupKinds.h (revision cb14a3fe5122c879eae1fb480ed7ce82a699ddb6)
10b57cec5SDimitry Andric //===-- AArch64FixupKinds.h - AArch64 Specific Fixup Entries ----*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64FIXUPKINDS_H
100b57cec5SDimitry Andric #define LLVM_LIB_TARGET_AARCH64_MCTARGETDESC_AARCH64FIXUPKINDS_H
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #include "llvm/MC/MCFixup.h"
130b57cec5SDimitry Andric 
140b57cec5SDimitry Andric namespace llvm {
150b57cec5SDimitry Andric namespace AArch64 {
160b57cec5SDimitry Andric 
170b57cec5SDimitry Andric enum Fixups {
180b57cec5SDimitry Andric   // A 21-bit pc-relative immediate inserted into an ADR instruction.
190b57cec5SDimitry Andric   fixup_aarch64_pcrel_adr_imm21 = FirstTargetFixupKind,
200b57cec5SDimitry Andric 
210b57cec5SDimitry Andric   // A 21-bit pc-relative immediate inserted into an ADRP instruction.
220b57cec5SDimitry Andric   fixup_aarch64_pcrel_adrp_imm21,
230b57cec5SDimitry Andric 
240b57cec5SDimitry Andric   // 12-bit fixup for add/sub instructions. No alignment adjustment. All value
250b57cec5SDimitry Andric   // bits are encoded.
260b57cec5SDimitry Andric   fixup_aarch64_add_imm12,
270b57cec5SDimitry Andric 
280b57cec5SDimitry Andric   // unsigned 12-bit fixups for load and store instructions.
290b57cec5SDimitry Andric   fixup_aarch64_ldst_imm12_scale1,
300b57cec5SDimitry Andric   fixup_aarch64_ldst_imm12_scale2,
310b57cec5SDimitry Andric   fixup_aarch64_ldst_imm12_scale4,
320b57cec5SDimitry Andric   fixup_aarch64_ldst_imm12_scale8,
330b57cec5SDimitry Andric   fixup_aarch64_ldst_imm12_scale16,
340b57cec5SDimitry Andric 
350b57cec5SDimitry Andric   // The high 19 bits of a 21-bit pc-relative immediate. Same encoding as
360b57cec5SDimitry Andric   // fixup_aarch64_pcrel_adrhi, except this is used by pc-relative loads and
370b57cec5SDimitry Andric   // generates relocations directly when necessary.
380b57cec5SDimitry Andric   fixup_aarch64_ldr_pcrel_imm19,
390b57cec5SDimitry Andric 
400b57cec5SDimitry Andric   // FIXME: comment
410b57cec5SDimitry Andric   fixup_aarch64_movw,
420b57cec5SDimitry Andric 
430b57cec5SDimitry Andric   // The high 14 bits of a 21-bit pc-relative immediate.
440b57cec5SDimitry Andric   fixup_aarch64_pcrel_branch14,
450b57cec5SDimitry Andric 
46*cb14a3feSDimitry Andric   // The high 16 bits of a 18-bit unsigned PC-relative immediate. Used by
47*cb14a3feSDimitry Andric   // pointer authentication, only within a function, so no relocation can be
48*cb14a3feSDimitry Andric   // generated.
49*cb14a3feSDimitry Andric   fixup_aarch64_pcrel_branch16,
50*cb14a3feSDimitry Andric 
510b57cec5SDimitry Andric   // The high 19 bits of a 21-bit pc-relative immediate. Same encoding as
520b57cec5SDimitry Andric   // fixup_aarch64_pcrel_adrhi, except this is use by b.cc and generates
530b57cec5SDimitry Andric   // relocations directly when necessary.
540b57cec5SDimitry Andric   fixup_aarch64_pcrel_branch19,
550b57cec5SDimitry Andric 
560b57cec5SDimitry Andric   // The high 26 bits of a 28-bit pc-relative immediate.
570b57cec5SDimitry Andric   fixup_aarch64_pcrel_branch26,
580b57cec5SDimitry Andric 
590b57cec5SDimitry Andric   // The high 26 bits of a 28-bit pc-relative immediate. Distinguished from
600b57cec5SDimitry Andric   // branch26 only on ELF.
610b57cec5SDimitry Andric   fixup_aarch64_pcrel_call26,
620b57cec5SDimitry Andric 
630b57cec5SDimitry Andric   // Marker
640b57cec5SDimitry Andric   LastTargetFixupKind,
650b57cec5SDimitry Andric   NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind
660b57cec5SDimitry Andric };
670b57cec5SDimitry Andric 
680b57cec5SDimitry Andric } // end namespace AArch64
690b57cec5SDimitry Andric } // end namespace llvm
700b57cec5SDimitry Andric 
710b57cec5SDimitry Andric #endif
72