| /* Generated automatically by the program 'build/genpreds' |
| from the machine description file '../../gcc/config/arc/arc.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_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 dest_reg_operand (rtx, machine_mode); |
| extern int mpy_dest_reg_operand (rtx, machine_mode); |
| extern int symbolic_operand (rtx, machine_mode); |
| extern int call_address_operand (rtx, machine_mode); |
| extern int call_operand (rtx, machine_mode); |
| extern int u6_immediate_operand (rtx, machine_mode); |
| extern int short_immediate_operand (rtx, machine_mode); |
| extern int p2_immediate_operand (rtx, machine_mode); |
| extern int long_immediate_operand (rtx, machine_mode); |
| extern int long_immediate_loadstore_operand (rtx, machine_mode); |
| extern int compact_register_operand (rtx, machine_mode); |
| extern int compact_store_memory_operand (rtx, machine_mode); |
| extern int move_src_operand (rtx, machine_mode); |
| extern int move_double_src_operand (rtx, machine_mode); |
| extern int move_dest_operand (rtx, machine_mode); |
| extern int nonvol_nonimm_operand (rtx, machine_mode); |
| extern int proper_comparison_operator (rtx, machine_mode); |
| extern int equality_comparison_operator (rtx, machine_mode); |
| extern int brcc_nolimm_operator (rtx, machine_mode); |
| extern int cc_register (rtx, machine_mode); |
| extern int cc_set_register (rtx, machine_mode); |
| extern int cc_use_register (rtx, machine_mode); |
| extern int zn_compare_operator (rtx, machine_mode); |
| extern int shift_operator (rtx, machine_mode); |
| extern int shiftl4_operator (rtx, machine_mode); |
| extern int shiftr4_operator (rtx, machine_mode); |
| extern int shift4_operator (rtx, machine_mode); |
| extern int mult_operator (rtx, machine_mode); |
| extern int commutative_operator (rtx, machine_mode); |
| extern int commutative_operator_sans_mult (rtx, machine_mode); |
| extern int noncommutative_operator (rtx, machine_mode); |
| extern int unary_operator (rtx, machine_mode); |
| extern int _2_4_8_operand (rtx, machine_mode); |
| extern int arc_double_register_operand (rtx, machine_mode); |
| extern int shouldbe_register_operand (rtx, machine_mode); |
| extern int vector_register_operand (rtx, machine_mode); |
| extern int vector_register_or_memory_operand (rtx, machine_mode); |
| extern int arc_dpfp_operator (rtx, machine_mode); |
| extern int arc_simd_dma_register_operand (rtx, machine_mode); |
| extern int acc1_operand (rtx, machine_mode); |
| extern int acc2_operand (rtx, machine_mode); |
| extern int mlo_operand (rtx, machine_mode); |
| extern int mhi_operand (rtx, machine_mode); |
| extern int extend_operand (rtx, machine_mode); |
| extern int millicode_store_operation (rtx, machine_mode); |
| extern int millicode_load_operation (rtx, machine_mode); |
| extern int millicode_load_clob_operation (rtx, machine_mode); |
| extern int immediate_usidi_operand (rtx, machine_mode); |
| extern int short_const_int_operand (rtx, machine_mode); |
| extern int mem_noofs_operand (rtx, machine_mode); |
| extern int any_mem_operand (rtx, machine_mode); |
| extern int even_register_operand (rtx, machine_mode); |
| extern int double_register_operand (rtx, machine_mode); |
| extern int cmem_address_0 (rtx, machine_mode); |
| extern int cmem_address_1 (rtx, machine_mode); |
| extern int cmem_address_2 (rtx, machine_mode); |
| extern int cmem_address (rtx, machine_mode); |
| extern int short_unsigned_const_operand (rtx, machine_mode); |
| extern int arc_short_operand (rtx, machine_mode); |
| #endif /* HAVE_MACHINE_MODES */ |
| |
| #define CONSTRAINT_NUM_DEFINED_P 1 |
| enum constraint_num |
| { |
| CONSTRAINT__UNKNOWN = 0, |
| CONSTRAINT_r, |
| CONSTRAINT_c, |
| CONSTRAINT_Rac, |
| CONSTRAINT_w, |
| CONSTRAINT_W, |
| CONSTRAINT_l, |
| CONSTRAINT_x, |
| CONSTRAINT_Rgp, |
| CONSTRAINT_f, |
| CONSTRAINT_b, |
| CONSTRAINT_k, |
| CONSTRAINT_q, |
| CONSTRAINT_Rrq, |
| CONSTRAINT_e, |
| CONSTRAINT_D, |
| CONSTRAINT_d, |
| CONSTRAINT_v, |
| CONSTRAINT_Rsc, |
| CONSTRAINT_h, |
| CONSTRAINT_Rcd, |
| CONSTRAINT_Rsd, |
| CONSTRAINT_Rzd, |
| CONSTRAINT_I, |
| CONSTRAINT_K, |
| CONSTRAINT_L, |
| CONSTRAINT_M, |
| CONSTRAINT_N, |
| CONSTRAINT_O, |
| CONSTRAINT_P, |
| CONSTRAINT_J12, |
| CONSTRAINT_J16, |
| CONSTRAINT_m, |
| CONSTRAINT_o, |
| CONSTRAINT_T, |
| CONSTRAINT_Uts, |
| CONSTRAINT_S, |
| CONSTRAINT_Uex, |
| CONSTRAINT_Usc, |
| CONSTRAINT_ATO, |
| CONSTRAINT_Ucd, |
| CONSTRAINT_p, |
| CONSTRAINT_CnL, |
| CONSTRAINT_CmL, |
| CONSTRAINT_C16, |
| CONSTRAINT_C__0, |
| CONSTRAINT_Cn0, |
| CONSTRAINT_Cca, |
| CONSTRAINT_CL2, |
| CONSTRAINT_CM4, |
| CONSTRAINT_Csp, |
| CONSTRAINT_C2a, |
| CONSTRAINT_C0p, |
| CONSTRAINT_C1p, |
| CONSTRAINT_C2p, |
| CONSTRAINT_C3p, |
| CONSTRAINT_Ccp, |
| CONSTRAINT_Cux, |
| CONSTRAINT_Chs, |
| CONSTRAINT_Clo, |
| CONSTRAINT_Chi, |
| CONSTRAINT_Cbf, |
| CONSTRAINT_Cbn, |
| CONSTRAINT_C18, |
| CONSTRAINT_Crr, |
| CONSTRAINT_Cbi, |
| CONSTRAINT_G, |
| CONSTRAINT_H, |
| CONSTRAINT_Cbr, |
| CONSTRAINT_Cbp, |
| CONSTRAINT_Clb, |
| CONSTRAINT_Q, |
| CONSTRAINT_Cm1, |
| CONSTRAINT_Cm2, |
| CONSTRAINT_Cm3, |
| CONSTRAINT_C62, |
| CONSTRAINT_Rcq, |
| CONSTRAINT_Rcw, |
| CONSTRAINT_Rcr, |
| CONSTRAINT_Rcb, |
| CONSTRAINT_Rck, |
| CONSTRAINT_Rs5, |
| CONSTRAINT_Rcc, |
| CONSTRAINT_V, |
| CONSTRAINT__l, |
| CONSTRAINT__g, |
| CONSTRAINT_Usd, |
| CONSTRAINT_Us_l, |
| CONSTRAINT_Us_g, |
| CONSTRAINT_Ucm, |
| CONSTRAINT_i, |
| CONSTRAINT_s, |
| CONSTRAINT_n, |
| CONSTRAINT_E, |
| CONSTRAINT_F, |
| CONSTRAINT_X, |
| CONSTRAINT_Cpc, |
| CONSTRAINT_Cal, |
| CONSTRAINT_C32, |
| 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_I; |
| 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_Rzd; |
| } |
| |
| static inline bool |
| insn_extra_memory_constraint (enum constraint_num c) |
| { |
| return c >= CONSTRAINT_m && c <= CONSTRAINT_Ucd; |
| } |
| |
| 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_CnL && c <= CONSTRAINT_C62) |
| return; |
| if (c >= CONSTRAINT_Rcq && c <= CONSTRAINT_Rcc) |
| { |
| *allows_reg = true; |
| return; |
| } |
| if (c >= CONSTRAINT_V && c <= CONSTRAINT_Ucm) |
| { |
| *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 'A': return 3; |
| case 'C': return 3; |
| case 'J': 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 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_CnL) |
| return CT_FIXED_FORM; |
| return CT_ADDRESS; |
| } |
| if (c >= CONSTRAINT_m) |
| return CT_MEMORY; |
| if (c >= CONSTRAINT_I) |
| return CT_CONST_INT; |
| return CT_REGISTER; |
| } |
| #endif /* tm-preds.h */ |