//===-- SparcFixupKinds.h - Sparc Specific Fixup Entries --------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIB_TARGET_SPARC_MCTARGETDESC_SPARCFIXUPKINDS_H
#define LLVM_LIB_TARGET_SPARC_MCTARGETDESC_SPARCFIXUPKINDS_H

#include "llvm/MC/MCFixup.h"

namespace llvm {
  namespace Sparc {
    enum Fixups {
      // fixup_sparc_call30 - 30-bit PC relative relocation for call
      fixup_sparc_call30 = FirstTargetFixupKind,

      /// fixup_sparc_br22 - 22-bit PC relative relocation for
      /// branches
      fixup_sparc_br22,

      /// fixup_sparc_br19 - 19-bit PC relative relocation for
      /// branches on icc/xcc
      fixup_sparc_br19,

      /// fixup_sparc_bpr  - 16-bit fixup for bpr
      fixup_sparc_br16_2,
      fixup_sparc_br16_14,

      /// fixup_sparc_13 - 13-bit fixup
      fixup_sparc_13,

      /// fixup_sparc_hi22  - 22-bit fixup corresponding to %hi(foo)
      /// for sethi
      fixup_sparc_hi22,

      /// fixup_sparc_lo10  - 10-bit fixup corresponding to %lo(foo)
      fixup_sparc_lo10,

      /// fixup_sparc_h44  - 22-bit fixup corresponding to %h44(foo)
      fixup_sparc_h44,

      /// fixup_sparc_m44  - 10-bit fixup corresponding to %m44(foo)
      fixup_sparc_m44,

      /// fixup_sparc_l44  - 12-bit fixup corresponding to %l44(foo)
      fixup_sparc_l44,

      /// fixup_sparc_hh  -  22-bit fixup corresponding to %hh(foo)
      fixup_sparc_hh,

      /// fixup_sparc_hm  -  10-bit fixup corresponding to %hm(foo)
      fixup_sparc_hm,

      /// fixup_sparc_lm  -  22-bit fixup corresponding to %lm(foo)
      fixup_sparc_lm,

      /// fixup_sparc_pc22 - 22-bit fixup corresponding to %pc22(foo)
      fixup_sparc_pc22,

      /// fixup_sparc_pc10 - 10-bit fixup corresponding to %pc10(foo)
      fixup_sparc_pc10,

      /// fixup_sparc_got22 - 22-bit fixup corresponding to %got22(foo)
      fixup_sparc_got22,

      /// fixup_sparc_got10 - 10-bit fixup corresponding to %got10(foo)
      fixup_sparc_got10,

      /// fixup_sparc_got13 - 13-bit fixup corresponding to %got13(foo)
      fixup_sparc_got13,

      /// fixup_sparc_wplt30
      fixup_sparc_wplt30,

      /// fixups for Thread Local Storage
      fixup_sparc_tls_gd_hi22,
      fixup_sparc_tls_gd_lo10,
      fixup_sparc_tls_gd_add,
      fixup_sparc_tls_gd_call,
      fixup_sparc_tls_ldm_hi22,
      fixup_sparc_tls_ldm_lo10,
      fixup_sparc_tls_ldm_add,
      fixup_sparc_tls_ldm_call,
      fixup_sparc_tls_ldo_hix22,
      fixup_sparc_tls_ldo_lox10,
      fixup_sparc_tls_ldo_add,
      fixup_sparc_tls_ie_hi22,
      fixup_sparc_tls_ie_lo10,
      fixup_sparc_tls_ie_ld,
      fixup_sparc_tls_ie_ldx,
      fixup_sparc_tls_ie_add,
      fixup_sparc_tls_le_hix22,
      fixup_sparc_tls_le_lox10,

      // Marker
      LastTargetFixupKind,
      NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind
    };
  }
}

#endif
