//===--- ARMEHABI.h - ARM Exception Handling ABI ----------------*- 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
//
//===----------------------------------------------------------------------===//
//
// This file defines the constants for the ARM unwind opcodes and exception
// handling table entry kinds.
//
// The enumerations and constants in this file reflect the ARM EHABI
// Specification as published by ARM.
//
// Exception Handling ABI for the ARM Architecture r2.09 - November 30, 2012
//
// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038a/IHI0038A_ehabi.pdf
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_SUPPORT_ARMEHABI_H
#define LLVM_SUPPORT_ARMEHABI_H

namespace llvm {
namespace ARM {
namespace EHABI {
  /// ARM exception handling table entry kinds
  enum EHTEntryKind {
    EHT_GENERIC = 0x00,
    EHT_COMPACT = 0x80
  };

  enum {
    /// Special entry for the function never unwind
    EXIDX_CANTUNWIND = 0x1
  };

  /// ARM-defined frame unwinding opcodes
  enum UnwindOpcodes {
    // Format: 00xxxxxx
    // Purpose: vsp = vsp + ((x << 2) + 4)
    UNWIND_OPCODE_INC_VSP = 0x00,

    // Format: 01xxxxxx
    // Purpose: vsp = vsp - ((x << 2) + 4)
    UNWIND_OPCODE_DEC_VSP = 0x40,

    // Format: 10000000 00000000
    // Purpose: refuse to unwind
    UNWIND_OPCODE_REFUSE = 0x8000,

    // Format: 1000xxxx xxxxxxxx
    // Purpose: pop r[15:12], r[11:4]
    // Constraint: x != 0
    UNWIND_OPCODE_POP_REG_MASK_R4 = 0x8000,

    // Format: 1001xxxx
    // Purpose: vsp = r[x]
    // Constraint: x != 13 && x != 15
    UNWIND_OPCODE_SET_VSP = 0x90,

    // Format: 10100xxx
    // Purpose: pop r[(4+x):4]
    UNWIND_OPCODE_POP_REG_RANGE_R4 = 0xa0,

    // Format: 10101xxx
    // Purpose: pop r14, r[(4+x):4]
    UNWIND_OPCODE_POP_REG_RANGE_R4_R14 = 0xa8,

    // Format: 10110000
    // Purpose: finish
    UNWIND_OPCODE_FINISH = 0xb0,

    // Format: 10110100
    // Purpose: Pop Return Address Authetication Code
    UNWIND_OPCODE_POP_RA_AUTH_CODE = 0xb4,

    // Format: 10110001 0000xxxx
    // Purpose: pop r[3:0]
    // Constraint: x != 0
    UNWIND_OPCODE_POP_REG_MASK = 0xb100,

    // Format: 10110010 x(uleb128)
    // Purpose: vsp = vsp + ((x << 2) + 0x204)
    UNWIND_OPCODE_INC_VSP_ULEB128 = 0xb2,

    // Format: 10110011 xxxxyyyy
    // Purpose: pop d[(x+y):x]
    UNWIND_OPCODE_POP_VFP_REG_RANGE_FSTMFDX = 0xb300,

    // Format: 10111xxx
    // Purpose: pop d[(8+x):8]
    UNWIND_OPCODE_POP_VFP_REG_RANGE_FSTMFDX_D8 = 0xb8,

    // Format: 11000xxx
    // Purpose: pop wR[(10+x):10]
    UNWIND_OPCODE_POP_WIRELESS_MMX_REG_RANGE_WR10 = 0xc0,

    // Format: 11000110 xxxxyyyy
    // Purpose: pop wR[(x+y):x]
    UNWIND_OPCODE_POP_WIRELESS_MMX_REG_RANGE = 0xc600,

    // Format: 11000111 0000xxxx
    // Purpose: pop wCGR[3:0]
    // Constraint: x != 0
    UNWIND_OPCODE_POP_WIRELESS_MMX_REG_MASK = 0xc700,

    // Format: 11001000 xxxxyyyy
    // Purpose: pop d[(16+x+y):(16+x)]
    UNWIND_OPCODE_POP_VFP_REG_RANGE_FSTMFDD_D16 = 0xc800,

    // Format: 11001001 xxxxyyyy
    // Purpose: pop d[(x+y):x]
    UNWIND_OPCODE_POP_VFP_REG_RANGE_FSTMFDD = 0xc900,

    // Format: 11010xxx
    // Purpose: pop d[(8+x):8]
    UNWIND_OPCODE_POP_VFP_REG_RANGE_FSTMFDD_D8 = 0xd0
  };

  /// ARM-defined Personality Routine Index
  enum PersonalityRoutineIndex {
    // To make the exception handling table become more compact, ARM defined
    // several personality routines in EHABI.  There are 3 different
    // personality routines in ARM EHABI currently.  It is possible to have 16
    // pre-defined personality routines at most.
    AEABI_UNWIND_CPP_PR0 = 0,
    AEABI_UNWIND_CPP_PR1 = 1,
    AEABI_UNWIND_CPP_PR2 = 2,

    NUM_PERSONALITY_INDEX
  };
}
}
}

#endif
