/* Generated automatically by the program 'build/genpreds'
   from the machine description file '/var/tmp/portage/cross-armv7a-cros-linux-gnueabihf/gcc-10.2.0-r29/work/gcc-10.2.0/gcc/config/arm/arm.md'.  */

#ifndef GCC_TM_PREDS_H
#define GCC_TM_PREDS_H

#ifdef HAVE_MACHINE_MODES
extern int general_operand (rtx, machine_mode);
extern int address_operand (rtx, machine_mode);
extern int register_operand (rtx, machine_mode);
extern int pmode_register_operand (rtx, machine_mode);
extern int scratch_operand (rtx, machine_mode);
extern int immediate_operand (rtx, machine_mode);
extern int const_int_operand (rtx, machine_mode);
extern int const_scalar_int_operand (rtx, machine_mode);
extern int const_double_operand (rtx, machine_mode);
extern int nonimmediate_operand (rtx, machine_mode);
extern int nonmemory_operand (rtx, machine_mode);
extern int push_operand (rtx, machine_mode);
extern int pop_operand (rtx, machine_mode);
extern int memory_operand (rtx, machine_mode);
extern int indirect_operand (rtx, machine_mode);
extern int ordered_comparison_operator (rtx, machine_mode);
extern int comparison_operator (rtx, machine_mode);
extern int s_register_operand (rtx, machine_mode);
extern int mve_memory_operand (rtx, machine_mode);
extern int mve_scatter_memory (rtx, machine_mode);
extern int mve_imm_16 (rtx, machine_mode);
extern int mve_imm_7 (rtx, machine_mode);
extern int mve_imm_8 (rtx, machine_mode);
extern int mve_imm_15 (rtx, machine_mode);
extern int mve_imm_31 (rtx, machine_mode);
extern int mve_imm_32 (rtx, machine_mode);
extern int mve_imm_selective_upto_8 (rtx, machine_mode);
extern int guard_addr_operand (rtx, machine_mode);
extern int guard_operand (rtx, machine_mode);
extern int vpr_register_operand (rtx, machine_mode);
extern int imm_for_neon_inv_logic_operand (rtx, machine_mode);
extern int neon_inv_logic_op2 (rtx, machine_mode);
extern int imm_for_neon_logic_operand (rtx, machine_mode);
extern int neon_logic_op2 (rtx, machine_mode);
extern int arm_hard_general_register_operand (rtx, machine_mode);
extern int low_register_operand (rtx, machine_mode);
extern int low_reg_or_int_operand (rtx, machine_mode);
extern int arm_general_register_operand (rtx, machine_mode);
extern int arm_low_register_operand (rtx, machine_mode);
extern int arm_general_adddi_operand (rtx, machine_mode);
extern int vfp_register_operand (rtx, machine_mode);
extern int vfp_hard_register_operand (rtx, machine_mode);
extern int zero_operand (rtx, machine_mode);
extern int reg_or_zero_operand (rtx, machine_mode);
extern int subreg_lowpart_operator (rtx, machine_mode);
extern int reg_or_int_operand (rtx, machine_mode);
extern int arm_immediate_operand (rtx, machine_mode);
extern int arm_immediate_di_operand (rtx, machine_mode);
extern int arm_neg_immediate_operand (rtx, machine_mode);
extern int arm_not_immediate_operand (rtx, machine_mode);
extern int const0_operand (rtx, machine_mode);
extern int arm_rhs_operand (rtx, machine_mode);
extern int arm_rhsm_operand (rtx, machine_mode);
extern int const_int_I_operand (rtx, machine_mode);
extern int const_int_M_operand (rtx, machine_mode);
extern int const_int_coproc_operand (rtx, machine_mode);
extern int const_int_ccde1_operand (rtx, machine_mode);
extern int const_int_ccde2_operand (rtx, machine_mode);
extern int const_int_ccde3_operand (rtx, machine_mode);
extern int const_int_vcde1_operand (rtx, machine_mode);
extern int const_int_vcde2_operand (rtx, machine_mode);
extern int const_int_vcde3_operand (rtx, machine_mode);
extern int const_int_mve_cde1_operand (rtx, machine_mode);
extern int const_int_mve_cde2_operand (rtx, machine_mode);
extern int const_int_mve_cde3_operand (rtx, machine_mode);
extern int shift_amount_operand (rtx, machine_mode);
extern int const_neon_scalar_shift_amount_operand (rtx, machine_mode);
extern int ssat16_imm (rtx, machine_mode);
extern int usat16_imm (rtx, machine_mode);
extern int ldrd_strd_offset_operand (rtx, machine_mode);
extern int arm_add_operand (rtx, machine_mode);
extern int arm_adddi_operand (rtx, machine_mode);
extern int arm_anddi_operand (rtx, machine_mode);
extern int arm_iordi_operand (rtx, machine_mode);
extern int arm_xordi_operand (rtx, machine_mode);
extern int arm_addimm_operand (rtx, machine_mode);
extern int arm_not_operand (rtx, machine_mode);
extern int arm_adcimm_operand (rtx, machine_mode);
extern int arm_di_operand (rtx, machine_mode);
extern int offsettable_memory_operand (rtx, machine_mode);
extern int call_memory_operand (rtx, machine_mode);
extern int arm_reload_memory_operand (rtx, machine_mode);
extern int vfp_compare_operand (rtx, machine_mode);
extern int index_operand (rtx, machine_mode);
extern int shiftable_operator (rtx, machine_mode);
extern int shiftable_operator_strict_it (rtx, machine_mode);
extern int logical_binary_operator (rtx, machine_mode);
extern int commutative_binary_operator (rtx, machine_mode);
extern int shift_operator (rtx, machine_mode);
extern int shift_nomul_operator (rtx, machine_mode);
extern int sat_shift_operator (rtx, machine_mode);
extern int long_shift_imm (rtx, machine_mode);
extern int arm_reg_or_long_shift_imm (rtx, machine_mode);
extern int mult_operator (rtx, machine_mode);
extern int thumb_16bit_operator (rtx, machine_mode);
extern int equality_operator (rtx, machine_mode);
extern int expandable_comparison_operator (rtx, machine_mode);
extern int arm_comparison_operator (rtx, machine_mode);
extern int arm_comparison_operator_mode (rtx, machine_mode);
extern int lt_ge_comparison_operator (rtx, machine_mode);
extern int arm_carry_operation (rtx, machine_mode);
extern int arm_borrow_operation (rtx, machine_mode);
extern int arm_vsel_comparison_operator (rtx, machine_mode);
extern int arm_cond_move_operator (rtx, machine_mode);
extern int nz_comparison_operator (rtx, machine_mode);
extern int minmax_operator (rtx, machine_mode);
extern int cc_register (rtx, machine_mode);
extern int dominant_cc_register (rtx, machine_mode);
extern int cc_register_operand (rtx, machine_mode);
extern int arm_extendqisi_mem_op (rtx, machine_mode);
extern int arm_reg_or_extendqisi_mem_op (rtx, machine_mode);
extern int power_of_two_operand (rtx, machine_mode);
extern int nonimmediate_di_operand (rtx, machine_mode);
extern int di_operand (rtx, machine_mode);
extern int nonimmediate_soft_df_operand (rtx, machine_mode);
extern int soft_df_operand (rtx, machine_mode);
extern int hard_sf_operand (rtx, machine_mode);
extern int hard_df_operand (rtx, machine_mode);
extern int clear_multiple_operation (rtx, machine_mode);
extern int clear_vfp_multiple_operation (rtx, machine_mode);
extern int load_multiple_operation (rtx, machine_mode);
extern int store_multiple_operation (rtx, machine_mode);
extern int pop_multiple_return (rtx, machine_mode);
extern int pop_multiple_fp (rtx, machine_mode);
extern int multi_register_push (rtx, machine_mode);
extern int push_mult_memory_operand (rtx, machine_mode);
extern int thumb1_cmp_operand (rtx, machine_mode);
extern int thumb1_cmpneg_operand (rtx, machine_mode);
extern int thumb_cbrch_target_operand (rtx, machine_mode);
extern int imm_or_reg_operand (rtx, machine_mode);
extern int const_multiple_of_8_operand (rtx, machine_mode);
extern int imm_for_neon_mov_operand (rtx, machine_mode);
extern int imm_for_neon_lshift_operand (rtx, machine_mode);
extern int imm_for_neon_rshift_operand (rtx, machine_mode);
extern int imm_lshift_or_reg_neon (rtx, machine_mode);
extern int imm_rshift_or_reg_neon (rtx, machine_mode);
extern int cmpdi_operand (rtx, machine_mode);
extern int arm_sync_memory_operand (rtx, machine_mode);
extern int vect_par_constant_high (rtx, machine_mode);
extern int vect_par_constant_low (rtx, machine_mode);
extern int const_double_vcvt_power_of_two_reciprocal (rtx, machine_mode);
extern int const_double_vcvt_power_of_two (rtx, machine_mode);
extern int neon_struct_operand (rtx, machine_mode);
extern int neon_permissive_struct_operand (rtx, machine_mode);
extern int neon_perm_struct_or_reg_operand (rtx, machine_mode);
extern int add_operator (rtx, machine_mode);
extern int mem_noofs_operand (rtx, machine_mode);
extern int call_insn_operand (rtx, machine_mode);
extern int aligned_operand (rtx, machine_mode);
extern int mve_vldrd_immediate (rtx, machine_mode);
#endif /* HAVE_MACHINE_MODES */

#define CONSTRAINT_NUM_DEFINED_P 1
enum constraint_num
{
  CONSTRAINT__UNKNOWN = 0,
  CONSTRAINT_r,
  CONSTRAINT_Up,
  CONSTRAINT_Uf,
  CONSTRAINT_Te,
  CONSTRAINT_t,
  CONSTRAINT_w,
  CONSTRAINT_x,
  CONSTRAINT_y,
  CONSTRAINT_z,
  CONSTRAINT_l,
  CONSTRAINT_h,
  CONSTRAINT_k,
  CONSTRAINT_b,
  CONSTRAINT_Cs,
  CONSTRAINT_Ts,
  CONSTRAINT_Pj,
  CONSTRAINT_PJ,
  CONSTRAINT_I,
  CONSTRAINT_J,
  CONSTRAINT_K,
  CONSTRAINT_L,
  CONSTRAINT_M,
  CONSTRAINT_N,
  CONSTRAINT_O,
  CONSTRAINT_Pa,
  CONSTRAINT_Pb,
  CONSTRAINT_Pc,
  CONSTRAINT_Pd,
  CONSTRAINT_Pe,
  CONSTRAINT_Pf,
  CONSTRAINT_Pg,
  CONSTRAINT_Ps,
  CONSTRAINT_Pt,
  CONSTRAINT_Pu,
  CONSTRAINT_Pv,
  CONSTRAINT_Pw,
  CONSTRAINT_Px,
  CONSTRAINT_Py,
  CONSTRAINT_Pz,
  CONSTRAINT_m,
  CONSTRAINT_o,
  CONSTRAINT_Ul,
  CONSTRAINT_Ua,
  CONSTRAINT_Uh,
  CONSTRAINT_Ut,
  CONSTRAINT_Uv,
  CONSTRAINT_Uy,
  CONSTRAINT_Un,
  CONSTRAINT_Um,
  CONSTRAINT_Us,
  CONSTRAINT_Ux,
  CONSTRAINT_Uq,
  CONSTRAINT_Q,
  CONSTRAINT_Uu,
  CONSTRAINT_Uw,
  CONSTRAINT_Uz,
  CONSTRAINT_p,
  CONSTRAINT_Ri,
  CONSTRAINT_Rd,
  CONSTRAINT_Ra,
  CONSTRAINT_Rb,
  CONSTRAINT_Rc,
  CONSTRAINT_Re,
  CONSTRAINT_Rf,
  CONSTRAINT_Rg,
  CONSTRAINT_j,
  CONSTRAINT_G,
  CONSTRAINT_Ha,
  CONSTRAINT_Dz,
  CONSTRAINT_Da,
  CONSTRAINT_Db,
  CONSTRAINT_Dc,
  CONSTRAINT_Dd,
  CONSTRAINT_Di,
  CONSTRAINT_Dm,
  CONSTRAINT_Dn,
  CONSTRAINT_DN,
  CONSTRAINT_Dl,
  CONSTRAINT_DL,
  CONSTRAINT_Do,
  CONSTRAINT_Dv,
  CONSTRAINT_Dy,
  CONSTRAINT_Dt,
  CONSTRAINT_Dp,
  CONSTRAINT_US,
  CONSTRAINT_c,
  CONSTRAINT_V,
  CONSTRAINT__l,
  CONSTRAINT__g,
  CONSTRAINT_i,
  CONSTRAINT_s,
  CONSTRAINT_n,
  CONSTRAINT_E,
  CONSTRAINT_F,
  CONSTRAINT_X,
  CONSTRAINT_Tu,
  CONSTRAINT__LIMIT
};

extern enum constraint_num lookup_constraint_1 (const char *);
extern const unsigned char lookup_constraint_array[];

/* Return the constraint at the beginning of P, or CONSTRAINT__UNKNOWN if it
   isn't recognized.  */

static inline enum constraint_num
lookup_constraint (const char *p)
{
  unsigned int index = lookup_constraint_array[(unsigned char) *p];
  return (index == UCHAR_MAX
          ? lookup_constraint_1 (p)
          : (enum constraint_num) index);
}

extern bool (*constraint_satisfied_p_array[]) (rtx);

/* Return true if X satisfies constraint C.  */

static inline bool
constraint_satisfied_p (rtx x, enum constraint_num c)
{
  int i = (int) c - (int) CONSTRAINT_Pj;
  return i >= 0 && constraint_satisfied_p_array[i] (x);
}

static inline bool
insn_extra_register_constraint (enum constraint_num c)
{
  return c >= CONSTRAINT_r && c <= CONSTRAINT_Ts;
}

static inline bool
insn_extra_memory_constraint (enum constraint_num c)
{
  return c >= CONSTRAINT_m && c <= CONSTRAINT_Uz;
}

static inline bool
insn_extra_special_memory_constraint (enum constraint_num)
{
  return false;
}

static inline bool
insn_extra_address_constraint (enum constraint_num c)
{
  return c >= CONSTRAINT_p && c <= CONSTRAINT_p;
}

static inline void
insn_extra_constraint_allows_reg_mem (enum constraint_num c,
				      bool *allows_reg, bool *allows_mem)
{
  if (c >= CONSTRAINT_Ri && c <= CONSTRAINT_US)
    return;
  if (c >= CONSTRAINT_c && c <= CONSTRAINT_c)
    {
      *allows_reg = true;
      return;
    }
  if (c >= CONSTRAINT_V && c <= CONSTRAINT__g)
    {
      *allows_mem = true;
      return;
    }
  (void) c;
  *allows_reg = true;
  *allows_mem = true;
}

static inline size_t
insn_constraint_len (char fc, const char *str ATTRIBUTE_UNUSED)
{
  switch (fc)
    {
    case 'C': return 2;
    case 'D': return 2;
    case 'H': return 2;
    case 'P': return 2;
    case 'R': return 2;
    case 'T': return 2;
    case 'U': return 2;
    default: break;
    }
  return 1;
}

#define CONSTRAINT_LEN(c_,s_) insn_constraint_len (c_,s_)

extern enum reg_class reg_class_for_constraint_1 (enum constraint_num);

static inline enum reg_class
reg_class_for_constraint (enum constraint_num c)
{
  if (insn_extra_register_constraint (c))
    return reg_class_for_constraint_1 (c);
  return NO_REGS;
}

extern bool insn_const_int_ok_for_constraint (HOST_WIDE_INT, enum constraint_num);
#define CONST_OK_FOR_CONSTRAINT_P(v_,c_,s_) \
    insn_const_int_ok_for_constraint (v_, lookup_constraint (s_))

enum constraint_type
{
  CT_REGISTER,
  CT_CONST_INT,
  CT_MEMORY,
  CT_SPECIAL_MEMORY,
  CT_ADDRESS,
  CT_FIXED_FORM
};

static inline enum constraint_type
get_constraint_type (enum constraint_num c)
{
  if (c >= CONSTRAINT_p)
    {
      if (c >= CONSTRAINT_Ri)
        return CT_FIXED_FORM;
      return CT_ADDRESS;
    }
  if (c >= CONSTRAINT_m)
    return CT_MEMORY;
  if (c >= CONSTRAINT_Pj)
    return CT_CONST_INT;
  return CT_REGISTER;
}
#endif /* tm-preds.h */
