/* Generated automatically by the program 'build/genpreds'
   from the machine description file '/home/gapoist/arc-toolchain/arc_gnu_2016.03_sources/gcc/gcc/config/arc/arc.md'.  */

#ifndef GCC_TM_PREDS_H
#define GCC_TM_PREDS_H

#ifdef HAVE_MACHINE_MODES
extern int general_operand (rtx, enum machine_mode);
extern int address_operand (rtx, enum machine_mode);
extern int register_operand (rtx, enum machine_mode);
extern int pmode_register_operand (rtx, enum machine_mode);
extern int scratch_operand (rtx, enum machine_mode);
extern int immediate_operand (rtx, enum machine_mode);
extern int const_int_operand (rtx, enum machine_mode);
extern int const_double_operand (rtx, enum machine_mode);
extern int nonimmediate_operand (rtx, enum machine_mode);
extern int nonmemory_operand (rtx, enum machine_mode);
extern int push_operand (rtx, enum machine_mode);
extern int pop_operand (rtx, enum machine_mode);
extern int memory_operand (rtx, enum machine_mode);
extern int indirect_operand (rtx, enum machine_mode);
extern int ordered_comparison_operator (rtx, enum machine_mode);
extern int comparison_operator (rtx, enum machine_mode);
extern int dest_reg_operand (rtx, enum machine_mode);
extern int mpy_dest_reg_operand (rtx, enum machine_mode);
extern int symbolic_operand (rtx, enum machine_mode);
extern int call_address_operand (rtx, enum machine_mode);
extern int call_operand (rtx, enum machine_mode);
extern int u6_immediate_operand (rtx, enum machine_mode);
extern int short_immediate_operand (rtx, enum machine_mode);
extern int p2_immediate_operand (rtx, enum machine_mode);
extern int long_immediate_operand (rtx, enum machine_mode);
extern int long_immediate_loadstore_operand (rtx, enum machine_mode);
extern int compact_register_operand (rtx, enum machine_mode);
extern int compact_store_memory_operand (rtx, enum machine_mode);
extern int move_src_operand (rtx, enum machine_mode);
extern int move_double_src_operand (rtx, enum machine_mode);
extern int move_dest_operand (rtx, enum machine_mode);
extern int load_update_operand (rtx, enum machine_mode);
extern int store_update_operand (rtx, enum machine_mode);
extern int nonvol_nonimm_operand (rtx, enum machine_mode);
extern int proper_comparison_operator (rtx, enum machine_mode);
extern int fpu_comparison_operator (rtx, enum machine_mode);
extern int equality_comparison_operator (rtx, enum machine_mode);
extern int brcc_nolimm_operator (rtx, enum machine_mode);
extern int cc_register (rtx, enum machine_mode);
extern int cc_set_register (rtx, enum machine_mode);
extern int cc_use_register (rtx, enum machine_mode);
extern int zn_compare_operator (rtx, enum machine_mode);
extern int shift_operator (rtx, enum machine_mode);
extern int shiftl4_operator (rtx, enum machine_mode);
extern int shiftr4_operator (rtx, enum machine_mode);
extern int shift4_operator (rtx, enum machine_mode);
extern int mult_operator (rtx, enum machine_mode);
extern int commutative_operator (rtx, enum machine_mode);
extern int commutative_operator_sans_mult (rtx, enum machine_mode);
extern int noncommutative_operator (rtx, enum machine_mode);
extern int unary_operator (rtx, enum machine_mode);
extern int _2_4_8_operand (rtx, enum machine_mode);
extern int arc_double_register_operand (rtx, enum machine_mode);
extern int shouldbe_register_operand (rtx, enum machine_mode);
extern int vector_register_operand (rtx, enum machine_mode);
extern int vector_register_or_memory_operand (rtx, enum machine_mode);
extern int arc_dpfp_operator (rtx, enum machine_mode);
extern int arc_simd_dma_register_operand (rtx, enum machine_mode);
extern int acc1_operand (rtx, enum machine_mode);
extern int acc2_operand (rtx, enum machine_mode);
extern int mlo_operand (rtx, enum machine_mode);
extern int mhi_operand (rtx, enum machine_mode);
extern int extend_operand (rtx, enum machine_mode);
extern int millicode_store_operation (rtx, enum machine_mode);
extern int millicode_load_operation (rtx, enum machine_mode);
extern int millicode_load_clob_operation (rtx, enum machine_mode);
extern int immediate_usidi_operand (rtx, enum machine_mode);
extern int mpy_reg_operand (rtx, enum machine_mode);
extern int mem_noofs_operand (rtx, enum machine_mode);
extern int even_register_operand (rtx, enum machine_mode);
extern int short_const_int_operand (rtx, enum machine_mode);
#endif /* HAVE_MACHINE_MODES */

#define CONSTRAINT_NUM_DEFINED_P 1
enum constraint_num
{
  CONSTRAINT__UNKNOWN = 0,
  CONSTRAINT_c,
  CONSTRAINT_Rac,
  CONSTRAINT_w,
  CONSTRAINT_W,
  CONSTRAINT_l,
  CONSTRAINT_x,
  CONSTRAINT_Rgp,
  CONSTRAINT_f,
  CONSTRAINT_b,
  CONSTRAINT_k,
  CONSTRAINT_q,
  CONSTRAINT_e,
  CONSTRAINT_D,
  CONSTRAINT_d,
  CONSTRAINT_v,
  CONSTRAINT_Rsc,
  CONSTRAINT_I,
  CONSTRAINT_K,
  CONSTRAINT_L,
  CONSTRAINT_CnL,
  CONSTRAINT_CmL,
  CONSTRAINT_M,
  CONSTRAINT_N,
  CONSTRAINT_O,
  CONSTRAINT_P,
  CONSTRAINT_C__0,
  CONSTRAINT_Cca,
  CONSTRAINT_CL2,
  CONSTRAINT_CM4,
  CONSTRAINT_Csp,
  CONSTRAINT_C2a,
  CONSTRAINT_C0p,
  CONSTRAINT_C1p,
  CONSTRAINT_C2p,
  CONSTRAINT_C3p,
  CONSTRAINT_Ccp,
  CONSTRAINT_Cux,
  CONSTRAINT_Crr,
  CONSTRAINT_G,
  CONSTRAINT_H,
  CONSTRAINT_T,
  CONSTRAINT_Uts,
  CONSTRAINT_S,
  CONSTRAINT_Usd,
  CONSTRAINT_Usc,
  CONSTRAINT_Us_l,
  CONSTRAINT_Us_g,
  CONSTRAINT_Ucd,
  CONSTRAINT_ATO,
  CONSTRAINT_Cbr,
  CONSTRAINT_Cbp,
  CONSTRAINT_Cpc,
  CONSTRAINT_Clb,
  CONSTRAINT_Cal,
  CONSTRAINT_C16,
  CONSTRAINT_C32,
  CONSTRAINT_Rcq,
  CONSTRAINT_Rcw,
  CONSTRAINT_Rcr,
  CONSTRAINT_Rcb,
  CONSTRAINT_Rck,
  CONSTRAINT_Rs5,
  CONSTRAINT_Rcc,
  CONSTRAINT_Q,
  CONSTRAINT_Cm1,
  CONSTRAINT_Cm2,
  CONSTRAINT_Cm3,
  CONSTRAINT_C62,
  CONSTRAINT_Rcd,
  CONSTRAINT_Rsd,
  CONSTRAINT_h,
  CONSTRAINT__LIMIT
};

extern enum constraint_num lookup_constraint (const char *);
extern bool constraint_satisfied_p (rtx, enum constraint_num);

static inline size_t
insn_constraint_len (char fc, const char *str ATTRIBUTE_UNUSED)
{
  switch (fc)
    {
    case 'A': return 3;
    case 'C': return 3;
    case 'R': return 3;
    case 'U': return 3;
    default: break;
    }
  return 1;
}

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

extern enum reg_class regclass_for_constraint (enum constraint_num);
#define REG_CLASS_FROM_CONSTRAINT(c_,s_) \
    regclass_for_constraint (lookup_constraint (s_))
#define REG_CLASS_FOR_CONSTRAINT(x_) \
    regclass_for_constraint (x_)

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_))

#define CONST_DOUBLE_OK_FOR_CONSTRAINT_P(v_,c_,s_) \
    constraint_satisfied_p (v_, lookup_constraint (s_))

#define EXTRA_CONSTRAINT_STR(v_,c_,s_) \
    constraint_satisfied_p (v_, lookup_constraint (s_))

extern bool insn_extra_memory_constraint (enum constraint_num);
#define EXTRA_MEMORY_CONSTRAINT(c_,s_) insn_extra_memory_constraint (lookup_constraint (s_))

#define EXTRA_ADDRESS_CONSTRAINT(c_,s_) false

#endif /* tm-preds.h */
