1//=- AArch64/AArch64FixupKinds.h - AArch64 Specific Fixup Entries -*- C++ -*-=//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file describes the LLVM fixups applied to MCInsts in the AArch64
11// backend.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_AARCH64_AARCH64FIXUPKINDS_H
16#define LLVM_AARCH64_AARCH64FIXUPKINDS_H
17
18#include "llvm/MC/MCFixup.h"
19
20namespace llvm {
21  namespace AArch64 {
22    enum Fixups {
23      fixup_a64_ld_prel = FirstTargetFixupKind,
24      fixup_a64_adr_prel,
25      fixup_a64_adr_prel_page,
26
27      fixup_a64_add_lo12,
28
29      fixup_a64_ldst8_lo12,
30      fixup_a64_ldst16_lo12,
31      fixup_a64_ldst32_lo12,
32      fixup_a64_ldst64_lo12,
33      fixup_a64_ldst128_lo12,
34
35      fixup_a64_tstbr,
36      fixup_a64_condbr,
37      fixup_a64_uncondbr,
38      fixup_a64_call,
39
40      fixup_a64_movw_uabs_g0,
41      fixup_a64_movw_uabs_g0_nc,
42      fixup_a64_movw_uabs_g1,
43      fixup_a64_movw_uabs_g1_nc,
44      fixup_a64_movw_uabs_g2,
45      fixup_a64_movw_uabs_g2_nc,
46      fixup_a64_movw_uabs_g3,
47
48      fixup_a64_movw_sabs_g0,
49      fixup_a64_movw_sabs_g1,
50      fixup_a64_movw_sabs_g2,
51
52      fixup_a64_adr_prel_got_page,
53      fixup_a64_ld64_got_lo12_nc,
54
55      // Produce offsets relative to the module's dynamic TLS area.
56      fixup_a64_movw_dtprel_g2,
57      fixup_a64_movw_dtprel_g1,
58      fixup_a64_movw_dtprel_g1_nc,
59      fixup_a64_movw_dtprel_g0,
60      fixup_a64_movw_dtprel_g0_nc,
61      fixup_a64_add_dtprel_hi12,
62      fixup_a64_add_dtprel_lo12,
63      fixup_a64_add_dtprel_lo12_nc,
64      fixup_a64_ldst8_dtprel_lo12,
65      fixup_a64_ldst8_dtprel_lo12_nc,
66      fixup_a64_ldst16_dtprel_lo12,
67      fixup_a64_ldst16_dtprel_lo12_nc,
68      fixup_a64_ldst32_dtprel_lo12,
69      fixup_a64_ldst32_dtprel_lo12_nc,
70      fixup_a64_ldst64_dtprel_lo12,
71      fixup_a64_ldst64_dtprel_lo12_nc,
72
73      // Produce the GOT entry containing a variable's address in TLS's
74      // initial-exec mode.
75      fixup_a64_movw_gottprel_g1,
76      fixup_a64_movw_gottprel_g0_nc,
77      fixup_a64_adr_gottprel_page,
78      fixup_a64_ld64_gottprel_lo12_nc,
79      fixup_a64_ld_gottprel_prel19,
80
81      // Produce offsets relative to the thread pointer: TPIDR_EL0.
82      fixup_a64_movw_tprel_g2,
83      fixup_a64_movw_tprel_g1,
84      fixup_a64_movw_tprel_g1_nc,
85      fixup_a64_movw_tprel_g0,
86      fixup_a64_movw_tprel_g0_nc,
87      fixup_a64_add_tprel_hi12,
88      fixup_a64_add_tprel_lo12,
89      fixup_a64_add_tprel_lo12_nc,
90      fixup_a64_ldst8_tprel_lo12,
91      fixup_a64_ldst8_tprel_lo12_nc,
92      fixup_a64_ldst16_tprel_lo12,
93      fixup_a64_ldst16_tprel_lo12_nc,
94      fixup_a64_ldst32_tprel_lo12,
95      fixup_a64_ldst32_tprel_lo12_nc,
96      fixup_a64_ldst64_tprel_lo12,
97      fixup_a64_ldst64_tprel_lo12_nc,
98
99      // Produce the special fixups used by the general-dynamic TLS model.
100      fixup_a64_tlsdesc_adr_page,
101      fixup_a64_tlsdesc_ld64_lo12_nc,
102      fixup_a64_tlsdesc_add_lo12_nc,
103      fixup_a64_tlsdesc_call,
104
105
106      // Marker
107      LastTargetFixupKind,
108      NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind
109    };
110  }
111}
112
113#endif
114