You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

394 lines
13KB

  1. /* Generated automatically by the program 'build/genpreds'
  2. from the machine description file '/tmp/jenkins-GCC-10-pipeline-48_20201124_1606180639/src/gcc/gcc/config/arm/arm.md'. */
  3. #ifndef GCC_TM_PREDS_H
  4. #define GCC_TM_PREDS_H
  5. #ifdef HAVE_MACHINE_MODES
  6. extern int general_operand (rtx, machine_mode);
  7. extern int address_operand (rtx, machine_mode);
  8. extern int register_operand (rtx, machine_mode);
  9. extern int pmode_register_operand (rtx, machine_mode);
  10. extern int scratch_operand (rtx, machine_mode);
  11. extern int immediate_operand (rtx, machine_mode);
  12. extern int const_int_operand (rtx, machine_mode);
  13. extern int const_scalar_int_operand (rtx, machine_mode);
  14. extern int const_double_operand (rtx, machine_mode);
  15. extern int nonimmediate_operand (rtx, machine_mode);
  16. extern int nonmemory_operand (rtx, machine_mode);
  17. extern int push_operand (rtx, machine_mode);
  18. extern int pop_operand (rtx, machine_mode);
  19. extern int memory_operand (rtx, machine_mode);
  20. extern int indirect_operand (rtx, machine_mode);
  21. extern int ordered_comparison_operator (rtx, machine_mode);
  22. extern int comparison_operator (rtx, machine_mode);
  23. extern int s_register_operand (rtx, machine_mode);
  24. extern int mve_memory_operand (rtx, machine_mode);
  25. extern int mve_scatter_memory (rtx, machine_mode);
  26. extern int mve_imm_16 (rtx, machine_mode);
  27. extern int mve_imm_7 (rtx, machine_mode);
  28. extern int mve_imm_8 (rtx, machine_mode);
  29. extern int mve_imm_15 (rtx, machine_mode);
  30. extern int mve_imm_31 (rtx, machine_mode);
  31. extern int mve_imm_32 (rtx, machine_mode);
  32. extern int mve_imm_selective_upto_8 (rtx, machine_mode);
  33. extern int guard_addr_operand (rtx, machine_mode);
  34. extern int guard_operand (rtx, machine_mode);
  35. extern int vpr_register_operand (rtx, machine_mode);
  36. extern int imm_for_neon_inv_logic_operand (rtx, machine_mode);
  37. extern int neon_inv_logic_op2 (rtx, machine_mode);
  38. extern int imm_for_neon_logic_operand (rtx, machine_mode);
  39. extern int neon_logic_op2 (rtx, machine_mode);
  40. extern int arm_hard_general_register_operand (rtx, machine_mode);
  41. extern int low_register_operand (rtx, machine_mode);
  42. extern int low_reg_or_int_operand (rtx, machine_mode);
  43. extern int arm_general_register_operand (rtx, machine_mode);
  44. extern int arm_low_register_operand (rtx, machine_mode);
  45. extern int arm_general_adddi_operand (rtx, machine_mode);
  46. extern int vfp_register_operand (rtx, machine_mode);
  47. extern int vfp_hard_register_operand (rtx, machine_mode);
  48. extern int zero_operand (rtx, machine_mode);
  49. extern int reg_or_zero_operand (rtx, machine_mode);
  50. extern int subreg_lowpart_operator (rtx, machine_mode);
  51. extern int reg_or_int_operand (rtx, machine_mode);
  52. extern int arm_immediate_operand (rtx, machine_mode);
  53. extern int arm_immediate_di_operand (rtx, machine_mode);
  54. extern int arm_neg_immediate_operand (rtx, machine_mode);
  55. extern int arm_not_immediate_operand (rtx, machine_mode);
  56. extern int const0_operand (rtx, machine_mode);
  57. extern int arm_rhs_operand (rtx, machine_mode);
  58. extern int arm_rhsm_operand (rtx, machine_mode);
  59. extern int const_int_I_operand (rtx, machine_mode);
  60. extern int const_int_M_operand (rtx, machine_mode);
  61. extern int const_int_coproc_operand (rtx, machine_mode);
  62. extern int const_int_ccde1_operand (rtx, machine_mode);
  63. extern int const_int_ccde2_operand (rtx, machine_mode);
  64. extern int const_int_ccde3_operand (rtx, machine_mode);
  65. extern int const_int_vcde1_operand (rtx, machine_mode);
  66. extern int const_int_vcde2_operand (rtx, machine_mode);
  67. extern int const_int_vcde3_operand (rtx, machine_mode);
  68. extern int const_int_mve_cde1_operand (rtx, machine_mode);
  69. extern int const_int_mve_cde2_operand (rtx, machine_mode);
  70. extern int const_int_mve_cde3_operand (rtx, machine_mode);
  71. extern int shift_amount_operand (rtx, machine_mode);
  72. extern int const_neon_scalar_shift_amount_operand (rtx, machine_mode);
  73. extern int ssat16_imm (rtx, machine_mode);
  74. extern int usat16_imm (rtx, machine_mode);
  75. extern int ldrd_strd_offset_operand (rtx, machine_mode);
  76. extern int arm_add_operand (rtx, machine_mode);
  77. extern int arm_adddi_operand (rtx, machine_mode);
  78. extern int arm_anddi_operand (rtx, machine_mode);
  79. extern int arm_iordi_operand (rtx, machine_mode);
  80. extern int arm_xordi_operand (rtx, machine_mode);
  81. extern int arm_addimm_operand (rtx, machine_mode);
  82. extern int arm_not_operand (rtx, machine_mode);
  83. extern int arm_adcimm_operand (rtx, machine_mode);
  84. extern int arm_di_operand (rtx, machine_mode);
  85. extern int offsettable_memory_operand (rtx, machine_mode);
  86. extern int call_memory_operand (rtx, machine_mode);
  87. extern int arm_reload_memory_operand (rtx, machine_mode);
  88. extern int vfp_compare_operand (rtx, machine_mode);
  89. extern int index_operand (rtx, machine_mode);
  90. extern int shiftable_operator (rtx, machine_mode);
  91. extern int shiftable_operator_strict_it (rtx, machine_mode);
  92. extern int logical_binary_operator (rtx, machine_mode);
  93. extern int commutative_binary_operator (rtx, machine_mode);
  94. extern int shift_operator (rtx, machine_mode);
  95. extern int shift_nomul_operator (rtx, machine_mode);
  96. extern int sat_shift_operator (rtx, machine_mode);
  97. extern int long_shift_imm (rtx, machine_mode);
  98. extern int arm_reg_or_long_shift_imm (rtx, machine_mode);
  99. extern int mult_operator (rtx, machine_mode);
  100. extern int thumb_16bit_operator (rtx, machine_mode);
  101. extern int equality_operator (rtx, machine_mode);
  102. extern int expandable_comparison_operator (rtx, machine_mode);
  103. extern int arm_comparison_operator (rtx, machine_mode);
  104. extern int arm_comparison_operator_mode (rtx, machine_mode);
  105. extern int lt_ge_comparison_operator (rtx, machine_mode);
  106. extern int arm_carry_operation (rtx, machine_mode);
  107. extern int arm_borrow_operation (rtx, machine_mode);
  108. extern int arm_vsel_comparison_operator (rtx, machine_mode);
  109. extern int arm_cond_move_operator (rtx, machine_mode);
  110. extern int nz_comparison_operator (rtx, machine_mode);
  111. extern int minmax_operator (rtx, machine_mode);
  112. extern int cc_register (rtx, machine_mode);
  113. extern int dominant_cc_register (rtx, machine_mode);
  114. extern int cc_register_operand (rtx, machine_mode);
  115. extern int arm_extendqisi_mem_op (rtx, machine_mode);
  116. extern int arm_reg_or_extendqisi_mem_op (rtx, machine_mode);
  117. extern int power_of_two_operand (rtx, machine_mode);
  118. extern int nonimmediate_di_operand (rtx, machine_mode);
  119. extern int di_operand (rtx, machine_mode);
  120. extern int nonimmediate_soft_df_operand (rtx, machine_mode);
  121. extern int soft_df_operand (rtx, machine_mode);
  122. extern int hard_sf_operand (rtx, machine_mode);
  123. extern int hard_df_operand (rtx, machine_mode);
  124. extern int clear_multiple_operation (rtx, machine_mode);
  125. extern int clear_vfp_multiple_operation (rtx, machine_mode);
  126. extern int load_multiple_operation (rtx, machine_mode);
  127. extern int store_multiple_operation (rtx, machine_mode);
  128. extern int pop_multiple_return (rtx, machine_mode);
  129. extern int pop_multiple_fp (rtx, machine_mode);
  130. extern int multi_register_push (rtx, machine_mode);
  131. extern int push_mult_memory_operand (rtx, machine_mode);
  132. extern int thumb1_cmp_operand (rtx, machine_mode);
  133. extern int thumb1_cmpneg_operand (rtx, machine_mode);
  134. extern int thumb_cbrch_target_operand (rtx, machine_mode);
  135. extern int imm_or_reg_operand (rtx, machine_mode);
  136. extern int const_multiple_of_8_operand (rtx, machine_mode);
  137. extern int imm_for_neon_mov_operand (rtx, machine_mode);
  138. extern int imm_for_neon_lshift_operand (rtx, machine_mode);
  139. extern int imm_for_neon_rshift_operand (rtx, machine_mode);
  140. extern int imm_lshift_or_reg_neon (rtx, machine_mode);
  141. extern int imm_rshift_or_reg_neon (rtx, machine_mode);
  142. extern int cmpdi_operand (rtx, machine_mode);
  143. extern int arm_sync_memory_operand (rtx, machine_mode);
  144. extern int vect_par_constant_high (rtx, machine_mode);
  145. extern int vect_par_constant_low (rtx, machine_mode);
  146. extern int const_double_vcvt_power_of_two_reciprocal (rtx, machine_mode);
  147. extern int const_double_vcvt_power_of_two (rtx, machine_mode);
  148. extern int neon_struct_operand (rtx, machine_mode);
  149. extern int neon_permissive_struct_operand (rtx, machine_mode);
  150. extern int neon_perm_struct_or_reg_operand (rtx, machine_mode);
  151. extern int add_operator (rtx, machine_mode);
  152. extern int mem_noofs_operand (rtx, machine_mode);
  153. extern int call_insn_operand (rtx, machine_mode);
  154. extern int aligned_operand (rtx, machine_mode);
  155. extern int mve_vldrd_immediate (rtx, machine_mode);
  156. #endif /* HAVE_MACHINE_MODES */
  157. #define CONSTRAINT_NUM_DEFINED_P 1
  158. enum constraint_num
  159. {
  160. CONSTRAINT__UNKNOWN = 0,
  161. CONSTRAINT_r,
  162. CONSTRAINT_Up,
  163. CONSTRAINT_Uf,
  164. CONSTRAINT_Te,
  165. CONSTRAINT_t,
  166. CONSTRAINT_w,
  167. CONSTRAINT_x,
  168. CONSTRAINT_y,
  169. CONSTRAINT_z,
  170. CONSTRAINT_l,
  171. CONSTRAINT_h,
  172. CONSTRAINT_k,
  173. CONSTRAINT_b,
  174. CONSTRAINT_Cs,
  175. CONSTRAINT_Ts,
  176. CONSTRAINT_Pj,
  177. CONSTRAINT_PJ,
  178. CONSTRAINT_I,
  179. CONSTRAINT_J,
  180. CONSTRAINT_K,
  181. CONSTRAINT_L,
  182. CONSTRAINT_M,
  183. CONSTRAINT_N,
  184. CONSTRAINT_O,
  185. CONSTRAINT_Pa,
  186. CONSTRAINT_Pb,
  187. CONSTRAINT_Pc,
  188. CONSTRAINT_Pd,
  189. CONSTRAINT_Pe,
  190. CONSTRAINT_Pf,
  191. CONSTRAINT_Pg,
  192. CONSTRAINT_Ps,
  193. CONSTRAINT_Pt,
  194. CONSTRAINT_Pu,
  195. CONSTRAINT_Pv,
  196. CONSTRAINT_Pw,
  197. CONSTRAINT_Px,
  198. CONSTRAINT_Py,
  199. CONSTRAINT_Pz,
  200. CONSTRAINT_m,
  201. CONSTRAINT_o,
  202. CONSTRAINT_Ul,
  203. CONSTRAINT_Ua,
  204. CONSTRAINT_Uh,
  205. CONSTRAINT_Ut,
  206. CONSTRAINT_Uv,
  207. CONSTRAINT_Uj,
  208. CONSTRAINT_Uy,
  209. CONSTRAINT_Un,
  210. CONSTRAINT_Um,
  211. CONSTRAINT_Us,
  212. CONSTRAINT_Ux,
  213. CONSTRAINT_Uq,
  214. CONSTRAINT_Q,
  215. CONSTRAINT_Uu,
  216. CONSTRAINT_Uw,
  217. CONSTRAINT_Uz,
  218. CONSTRAINT_p,
  219. CONSTRAINT_Ri,
  220. CONSTRAINT_Rd,
  221. CONSTRAINT_Ra,
  222. CONSTRAINT_Rb,
  223. CONSTRAINT_Rc,
  224. CONSTRAINT_Re,
  225. CONSTRAINT_Rf,
  226. CONSTRAINT_Rg,
  227. CONSTRAINT_j,
  228. CONSTRAINT_G,
  229. CONSTRAINT_Ha,
  230. CONSTRAINT_Dz,
  231. CONSTRAINT_Da,
  232. CONSTRAINT_Db,
  233. CONSTRAINT_Dc,
  234. CONSTRAINT_Dd,
  235. CONSTRAINT_Di,
  236. CONSTRAINT_Dm,
  237. CONSTRAINT_Dn,
  238. CONSTRAINT_DN,
  239. CONSTRAINT_Dl,
  240. CONSTRAINT_DL,
  241. CONSTRAINT_Do,
  242. CONSTRAINT_Dv,
  243. CONSTRAINT_Dy,
  244. CONSTRAINT_Dt,
  245. CONSTRAINT_Dp,
  246. CONSTRAINT_US,
  247. CONSTRAINT_c,
  248. CONSTRAINT_V,
  249. CONSTRAINT__l,
  250. CONSTRAINT__g,
  251. CONSTRAINT_i,
  252. CONSTRAINT_s,
  253. CONSTRAINT_n,
  254. CONSTRAINT_E,
  255. CONSTRAINT_F,
  256. CONSTRAINT_X,
  257. CONSTRAINT_Tu,
  258. CONSTRAINT__LIMIT
  259. };
  260. extern enum constraint_num lookup_constraint_1 (const char *);
  261. extern const unsigned char lookup_constraint_array[];
  262. /* Return the constraint at the beginning of P, or CONSTRAINT__UNKNOWN if it
  263. isn't recognized. */
  264. static inline enum constraint_num
  265. lookup_constraint (const char *p)
  266. {
  267. unsigned int index = lookup_constraint_array[(unsigned char) *p];
  268. return (index == UCHAR_MAX
  269. ? lookup_constraint_1 (p)
  270. : (enum constraint_num) index);
  271. }
  272. extern bool (*constraint_satisfied_p_array[]) (rtx);
  273. /* Return true if X satisfies constraint C. */
  274. static inline bool
  275. constraint_satisfied_p (rtx x, enum constraint_num c)
  276. {
  277. int i = (int) c - (int) CONSTRAINT_Pj;
  278. return i >= 0 && constraint_satisfied_p_array[i] (x);
  279. }
  280. static inline bool
  281. insn_extra_register_constraint (enum constraint_num c)
  282. {
  283. return c >= CONSTRAINT_r && c <= CONSTRAINT_Ts;
  284. }
  285. static inline bool
  286. insn_extra_memory_constraint (enum constraint_num c)
  287. {
  288. return c >= CONSTRAINT_m && c <= CONSTRAINT_Uz;
  289. }
  290. static inline bool
  291. insn_extra_special_memory_constraint (enum constraint_num)
  292. {
  293. return false;
  294. }
  295. static inline bool
  296. insn_extra_address_constraint (enum constraint_num c)
  297. {
  298. return c >= CONSTRAINT_p && c <= CONSTRAINT_p;
  299. }
  300. static inline void
  301. insn_extra_constraint_allows_reg_mem (enum constraint_num c,
  302. bool *allows_reg, bool *allows_mem)
  303. {
  304. if (c >= CONSTRAINT_Ri && c <= CONSTRAINT_US)
  305. return;
  306. if (c >= CONSTRAINT_c && c <= CONSTRAINT_c)
  307. {
  308. *allows_reg = true;
  309. return;
  310. }
  311. if (c >= CONSTRAINT_V && c <= CONSTRAINT__g)
  312. {
  313. *allows_mem = true;
  314. return;
  315. }
  316. (void) c;
  317. *allows_reg = true;
  318. *allows_mem = true;
  319. }
  320. static inline size_t
  321. insn_constraint_len (char fc, const char *str ATTRIBUTE_UNUSED)
  322. {
  323. switch (fc)
  324. {
  325. case 'C': return 2;
  326. case 'D': return 2;
  327. case 'H': return 2;
  328. case 'P': return 2;
  329. case 'R': return 2;
  330. case 'T': return 2;
  331. case 'U': return 2;
  332. default: break;
  333. }
  334. return 1;
  335. }
  336. #define CONSTRAINT_LEN(c_,s_) insn_constraint_len (c_,s_)
  337. extern enum reg_class reg_class_for_constraint_1 (enum constraint_num);
  338. static inline enum reg_class
  339. reg_class_for_constraint (enum constraint_num c)
  340. {
  341. if (insn_extra_register_constraint (c))
  342. return reg_class_for_constraint_1 (c);
  343. return NO_REGS;
  344. }
  345. extern bool insn_const_int_ok_for_constraint (HOST_WIDE_INT, enum constraint_num);
  346. #define CONST_OK_FOR_CONSTRAINT_P(v_,c_,s_) \
  347. insn_const_int_ok_for_constraint (v_, lookup_constraint (s_))
  348. enum constraint_type
  349. {
  350. CT_REGISTER,
  351. CT_CONST_INT,
  352. CT_MEMORY,
  353. CT_SPECIAL_MEMORY,
  354. CT_ADDRESS,
  355. CT_FIXED_FORM
  356. };
  357. static inline enum constraint_type
  358. get_constraint_type (enum constraint_num c)
  359. {
  360. if (c >= CONSTRAINT_p)
  361. {
  362. if (c >= CONSTRAINT_Ri)
  363. return CT_FIXED_FORM;
  364. return CT_ADDRESS;
  365. }
  366. if (c >= CONSTRAINT_m)
  367. return CT_MEMORY;
  368. if (c >= CONSTRAINT_Pj)
  369. return CT_CONST_INT;
  370. return CT_REGISTER;
  371. }
  372. #endif /* tm-preds.h */