1249259Sdim//=- AArch64/AArch64FixupKinds.h - AArch64 Specific Fixup Entries -*- C++ -*-=//
2249259Sdim//
3249259Sdim//                     The LLVM Compiler Infrastructure
4249259Sdim//
5249259Sdim// This file is distributed under the University of Illinois Open Source
6249259Sdim// License. See LICENSE.TXT for details.
7249259Sdim//
8249259Sdim//===----------------------------------------------------------------------===//
9249259Sdim//
10249259Sdim// This file describes the LLVM fixups applied to MCInsts in the AArch64
11249259Sdim// backend.
12249259Sdim//
13249259Sdim//===----------------------------------------------------------------------===//
14249259Sdim
15249259Sdim#ifndef LLVM_AARCH64_AARCH64FIXUPKINDS_H
16249259Sdim#define LLVM_AARCH64_AARCH64FIXUPKINDS_H
17249259Sdim
18249259Sdim#include "llvm/MC/MCFixup.h"
19249259Sdim
20249259Sdimnamespace llvm {
21249259Sdim  namespace AArch64 {
22249259Sdim    enum Fixups {
23249259Sdim      fixup_a64_ld_prel = FirstTargetFixupKind,
24249259Sdim      fixup_a64_adr_prel,
25249259Sdim      fixup_a64_adr_prel_page,
26249259Sdim
27249259Sdim      fixup_a64_add_lo12,
28249259Sdim
29249259Sdim      fixup_a64_ldst8_lo12,
30249259Sdim      fixup_a64_ldst16_lo12,
31249259Sdim      fixup_a64_ldst32_lo12,
32249259Sdim      fixup_a64_ldst64_lo12,
33249259Sdim      fixup_a64_ldst128_lo12,
34249259Sdim
35249259Sdim      fixup_a64_tstbr,
36249259Sdim      fixup_a64_condbr,
37249259Sdim      fixup_a64_uncondbr,
38249259Sdim      fixup_a64_call,
39249259Sdim
40249259Sdim      fixup_a64_movw_uabs_g0,
41249259Sdim      fixup_a64_movw_uabs_g0_nc,
42249259Sdim      fixup_a64_movw_uabs_g1,
43249259Sdim      fixup_a64_movw_uabs_g1_nc,
44249259Sdim      fixup_a64_movw_uabs_g2,
45249259Sdim      fixup_a64_movw_uabs_g2_nc,
46249259Sdim      fixup_a64_movw_uabs_g3,
47249259Sdim
48249259Sdim      fixup_a64_movw_sabs_g0,
49249259Sdim      fixup_a64_movw_sabs_g1,
50249259Sdim      fixup_a64_movw_sabs_g2,
51249259Sdim
52249259Sdim      fixup_a64_adr_prel_got_page,
53249259Sdim      fixup_a64_ld64_got_lo12_nc,
54249259Sdim
55249259Sdim      // Produce offsets relative to the module's dynamic TLS area.
56249259Sdim      fixup_a64_movw_dtprel_g2,
57249259Sdim      fixup_a64_movw_dtprel_g1,
58249259Sdim      fixup_a64_movw_dtprel_g1_nc,
59249259Sdim      fixup_a64_movw_dtprel_g0,
60249259Sdim      fixup_a64_movw_dtprel_g0_nc,
61249259Sdim      fixup_a64_add_dtprel_hi12,
62249259Sdim      fixup_a64_add_dtprel_lo12,
63249259Sdim      fixup_a64_add_dtprel_lo12_nc,
64249259Sdim      fixup_a64_ldst8_dtprel_lo12,
65249259Sdim      fixup_a64_ldst8_dtprel_lo12_nc,
66249259Sdim      fixup_a64_ldst16_dtprel_lo12,
67249259Sdim      fixup_a64_ldst16_dtprel_lo12_nc,
68249259Sdim      fixup_a64_ldst32_dtprel_lo12,
69249259Sdim      fixup_a64_ldst32_dtprel_lo12_nc,
70249259Sdim      fixup_a64_ldst64_dtprel_lo12,
71249259Sdim      fixup_a64_ldst64_dtprel_lo12_nc,
72249259Sdim
73249259Sdim      // Produce the GOT entry containing a variable's address in TLS's
74249259Sdim      // initial-exec mode.
75249259Sdim      fixup_a64_movw_gottprel_g1,
76249259Sdim      fixup_a64_movw_gottprel_g0_nc,
77249259Sdim      fixup_a64_adr_gottprel_page,
78249259Sdim      fixup_a64_ld64_gottprel_lo12_nc,
79249259Sdim      fixup_a64_ld_gottprel_prel19,
80249259Sdim
81249259Sdim      // Produce offsets relative to the thread pointer: TPIDR_EL0.
82249259Sdim      fixup_a64_movw_tprel_g2,
83249259Sdim      fixup_a64_movw_tprel_g1,
84249259Sdim      fixup_a64_movw_tprel_g1_nc,
85249259Sdim      fixup_a64_movw_tprel_g0,
86249259Sdim      fixup_a64_movw_tprel_g0_nc,
87249259Sdim      fixup_a64_add_tprel_hi12,
88249259Sdim      fixup_a64_add_tprel_lo12,
89249259Sdim      fixup_a64_add_tprel_lo12_nc,
90249259Sdim      fixup_a64_ldst8_tprel_lo12,
91249259Sdim      fixup_a64_ldst8_tprel_lo12_nc,
92249259Sdim      fixup_a64_ldst16_tprel_lo12,
93249259Sdim      fixup_a64_ldst16_tprel_lo12_nc,
94249259Sdim      fixup_a64_ldst32_tprel_lo12,
95249259Sdim      fixup_a64_ldst32_tprel_lo12_nc,
96249259Sdim      fixup_a64_ldst64_tprel_lo12,
97249259Sdim      fixup_a64_ldst64_tprel_lo12_nc,
98249259Sdim
99249259Sdim      // Produce the special fixups used by the general-dynamic TLS model.
100249259Sdim      fixup_a64_tlsdesc_adr_page,
101249259Sdim      fixup_a64_tlsdesc_ld64_lo12_nc,
102249259Sdim      fixup_a64_tlsdesc_add_lo12_nc,
103249259Sdim      fixup_a64_tlsdesc_call,
104249259Sdim
105249259Sdim
106249259Sdim      // Marker
107249259Sdim      LastTargetFixupKind,
108249259Sdim      NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind
109249259Sdim    };
110249259Sdim  }
111249259Sdim}
112249259Sdim
113249259Sdim#endif
114