1 ;; Instruction Classification for ARM for GNU compiler.
3 ;; Copyright (C) 1991-2025 Free Software Foundation, Inc.
4 ;; Contributed by ARM Ltd.
6 ;; This file is part of GCC.
8 ;; GCC is free software; you can redistribute it and/or modify it
9 ;; under the terms of the GNU General Public License as published
10 ;; by the Free Software Foundation; either version 3, or (at your
11 ;; option) any later version.
13 ;; GCC is distributed in the hope that it will be useful, but WITHOUT
14 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 ;; License for more details.
18 ;; You should have received a copy of the GNU General Public License
19 ;; along with GCC; see the file COPYING3. If not see
20 ;; <http://www.gnu.org/licenses/>.
22 ; The insn need to autodetect for specific type attribute
23 (define_attr "autodetect_type"
33 (const_string "none"))
35 ; TYPE attribute is used to classify instructions for use in scheduling.
37 ; Instruction classification:
39 ; adc_imm add/subtract with carry and with an immediate operand.
40 ; adc_reg add/subtract with carry and no immediate operand.
41 ; adcs_imm as adc_imm, setting condition flags.
42 ; adcs_reg as adc_reg, setting condition flags.
43 ; adr calculate address.
44 ; alu_ext From ARMv8-A: any arithmetic instruction that has a
48 ; alu_imm any arithmetic instruction that doesn't have a shifted
49 ; operand and has an immediate operand. This
50 ; excludes MOV, MVN and RSB(S) immediate.
51 ; alu_sreg any arithmetic instruction that doesn't have a shifted
52 ; or an immediate operand. This excludes
53 ; MOV and MVN but includes MOVT. This also excludes
54 ; DSP-kind instructions. This is also the default.
55 ; alu_shift_imm_lsl_1to4
56 ; any arithmetic instruction that has a source operand
57 ; shifted left by a constant in range 1 to 4. This
58 ; excludes simple shifts.
60 ; as alu_shift_imm_lsl_1to4, with the shift type is LSR or
61 ; ASR, or the shift amount is greater than or equal 5.
62 ; alu_shift_reg as alu_shift_imm_*, with the shift amount specified in a
64 ; alu_dsp_reg any DSP-kind instruction like QSUB8.
65 ; alus_ext From ARMv8-A: as alu_ext, setting condition flags.
67 ; alus_imm as alu_imm, setting condition flags.
68 ; alus_sreg as alu_sreg, setting condition flags.
69 ; alus_shift_imm as alu_shift_imm_*, setting condition flags.
70 ; alus_shift_reg as alu_shift_reg, setting condition flags.
71 ; bfm bitfield move operation.
72 ; bfx bitfield extract operation.
73 ; block blockage insn, this blocks all functional units.
75 ; call subroutine call.
76 ; clz count leading zeros (CLZ).
77 ; csel From ARMv8-A: conditional select.
78 ; extend extend instruction (SXTB, SXTH, UXTB, UXTH).
79 ; f_cvt conversion between float representations.
80 ; f_cvtf2i conversion between float and integral types.
81 ; f_cvti2f conversion between integral and float types.
82 ; f_flag transfer of co-processor flags to the CPSR.
83 ; f_load[d,s] double/single load from memory. Used for VFP unit.
84 ; f_mcr transfer arm to vfp reg.
85 ; f_mcrr transfer two arm regs to vfp reg.
86 ; f_minmax[d,s] double/single floating point minimum/maximum.
87 ; f_mrc transfer vfp to arm reg.
88 ; f_mrrc transfer vfp to two arm regs.
89 ; f_rint[d,s] double/single floating point rount to integral.
90 ; f_store[d,s] double/single store to memory. Used for VFP unit.
91 ; fadd[d,s] double/single floating-point scalar addition.
92 ; fccmp[d,s] From ARMv8-A: floating-point conditional compare.
93 ; fcmp[d,s] double/single floating-point compare.
94 ; fconst[d,s] double/single load immediate.
95 ; fcsel From ARMv8-A: Floating-point conditional select.
96 ; fdiv[d,s] double/single precision floating point division.
97 ; ffarith[d,s] double/single floating point abs/neg/cpy.
98 ; ffma[d,s] double/single floating point fused multiply-accumulate.
99 ; float floating point arithmetic operation.
100 ; fmac[d,s] double/single floating point multiply-accumulate.
101 ; fmov floating point to floating point register move.
102 ; fmul[d,s] double/single floating point multiply.
103 ; fsqrt[d,s] double/single precision floating point square root.
104 ; load_acq load-acquire.
105 ; load_byte load 1 byte from memory.
106 ; load_4 load 4 bytes from memory.
107 ; load_8 load 8 bytes from memory.
108 ; load_12 load 12 bytes from memory.
109 ; load_16 load 16 bytes from memory.
110 ; logic_imm any logical instruction that doesn't have a shifted
111 ; operand and has an immediate operand.
112 ; logic_reg any logical instruction that doesn't have a shifted
113 ; operand or an immediate operand.
114 ; logic_shift_imm any logical instruction that has a source operand
115 ; shifted by a constant. This excludes simple shifts.
116 ; logic_shift_reg as logic_shift_imm, with the shift amount specified in a
118 ; logics_imm as logic_imm, setting condition flags.
119 ; logics_reg as logic_reg, setting condition flags.
120 ; logics_shift_imm as logic_shift_imm, setting condition flags.
121 ; logics_shift_reg as logic_shift_reg, setting condition flags.
122 ; mla integer multiply accumulate.
123 ; mlas integer multiply accumulate, flag setting.
124 ; mov_imm simple MOV instruction that moves an immediate to
125 ; register. This includes MOVW, but not MOVT.
126 ; mov_reg simple MOV instruction that moves a register to another
127 ; register. This includes MOVW, but not MOVT.
128 ; mov_shift simple MOV instruction, shifted operand by a constant.
129 ; mov_shift_reg simple MOV instruction, shifted operand by a register.
130 ; mrs system/special/co-processor register move.
131 ; mul integer multiply.
132 ; muls integer multiply, flag setting.
133 ; multiple more than one instruction, candidate for future
134 ; splitting, or better modeling.
135 ; mvn_imm inverting move instruction, immediate.
136 ; mvn_reg inverting move instruction, register.
137 ; mvn_shift inverting move instruction, shifted operand by a constant.
138 ; mvn_shift_reg inverting move instruction, shifted operand by a register.
139 ; no_insn an insn which does not represent an instruction in the
140 ; final output, thus having no impact on scheduling.
143 ; rotate_imm rotate by immediate.
144 ; sdiv signed division.
145 ; shift_imm simple shift operation (LSL, LSR, ASR, ROR) with an
147 ; shift_reg simple shift by a register.
148 ; smlad signed multiply accumulate dual.
149 ; smladx signed multiply accumulate dual reverse.
150 ; smlal signed multiply accumulate long.
151 ; smlald signed multiply accumulate long dual.
152 ; smlals signed multiply accumulate long, flag setting.
153 ; smlalxy signed multiply accumulate, 16x16-bit, 64-bit accumulate.
154 ; smlawx signed multiply accumulate, 32x16-bit, 32-bit accumulate.
155 ; smlawy signed multiply accumulate wide, 32x16-bit,
157 ; smlaxy signed multiply accumulate, 16x16-bit, 32-bit accumulate.
158 ; smlsd signed multiply subtract dual.
159 ; smlsdx signed multiply subtract dual reverse.
160 ; smlsld signed multiply subtract long dual.
161 ; smmla signed most significant word multiply accumulate.
162 ; smmul signed most significant word multiply.
163 ; smmulr signed most significant word multiply, rounded.
164 ; smuad signed dual multiply add.
165 ; smuadx signed dual multiply add reverse.
166 ; smull signed multiply long.
167 ; smulls signed multiply long, flag setting.
168 ; smulwy signed multiply wide, 32x16-bit, 32-bit accumulate.
169 ; smulxy signed multiply, 16x16-bit, 32-bit accumulate.
170 ; smusd signed dual multiply subtract.
171 ; smusdx signed dual multiply subtract reverse.
172 ; store_rel store-release.
173 ; store_4 store 4 bytes to memory.
174 ; store_8 store 8 bytes to memory.
175 ; store_12 store 12 bytes to memory.
176 ; store_16 store 16 bytes (or more) to memory.
177 ; trap cause a trap in the kernel.
178 ; udiv unsigned division.
179 ; umaal unsigned multiply accumulate accumulate long.
180 ; umlal unsigned multiply accumulate long.
181 ; umlals unsigned multiply accumulate long, flag setting.
182 ; umull unsigned multiply long.
183 ; umulls unsigned multiply long, flag setting.
184 ; untyped insn without type information - default, and error,
187 ; The classification below is for instructions used by the Wireless MMX
188 ; Technology. Each attribute value is used to classify an instruction of the
189 ; same name or family.
251 ; The classification below is for NEON instructions. If a new neon type is
252 ; added, please ensure this is added to the is_neon_type attribute below too.
262 ; neon_add_halve_narrow_q
271 ; neon_sub_halve_narrow_q
288 ; neon_compare_zero_q
293 ; neon_reduc_add_long
295 ; neon_reduc_add_acc_q
297 ; neon_reduc_minmax_q
304 ; neon_shift_imm_narrow_q
305 ; neon_shift_imm_long
311 ; neon_sat_shift_imm_q
312 ; neon_sat_shift_imm_narrow_q
314 ; neon_sat_shift_reg_q
357 ; neon_mul_h_scalar_q
359 ; neon_mul_s_scalar_q
360 ; neon_mul_h_scalar_long
361 ; neon_mul_s_scalar_long
368 ; neon_sat_mul_b_long
369 ; neon_sat_mul_h_long
370 ; neon_sat_mul_s_long
371 ; neon_sat_mul_h_scalar
372 ; neon_sat_mul_h_scalar_q
373 ; neon_sat_mul_s_scalar
374 ; neon_sat_mul_s_scalar_q
375 ; neon_sat_mul_h_scalar_long
376 ; neon_sat_mul_s_scalar_long
387 ; neon_mla_h_scalar_q
389 ; neon_mla_s_scalar_q
390 ; neon_mla_h_scalar_long
391 ; neon_mla_s_scalar_long
392 ; neon_sat_mla_b_long
393 ; neon_sat_mla_h_long
394 ; neon_sat_mla_s_long
395 ; neon_sat_mla_h_scalar_long
396 ; neon_sat_mla_s_scalar_long
412 ; neon_load1_all_lanes
413 ; neon_load1_all_lanes_q
414 ; neon_load1_one_lane
415 ; neon_load1_one_lane_q
420 ; neon_load2_all_lanes
421 ; neon_load2_all_lanes_q
422 ; neon_load2_one_lane
423 ; neon_load2_one_lane_q
426 ; neon_load3_all_lanes
427 ; neon_load3_all_lanes_q
428 ; neon_load3_one_lane
429 ; neon_load3_one_lane_q
432 ; neon_load4_all_lanes
433 ; neon_load4_all_lanes_q
434 ; neon_load4_one_lane
435 ; neon_load4_one_lane_q
447 ; neon_store1_one_lane
448 ; neon_store1_one_lane_q
453 ; neon_store2_one_lane
454 ; neon_store2_one_lane_q
457 ; neon_store3_one_lane
458 ; neon_store3_one_lane_q
461 ; neon_store4_one_lane
462 ; neon_store4_one_lane_q
480 ; neon_fp_compare_s_q
482 ; neon_fp_compare_d_q
487 ; neon_fp_reduc_add_s
488 ; neon_fp_reduc_add_s_q
489 ; neon_fp_reduc_add_d
490 ; neon_fp_reduc_add_d_q
491 ; neon_fp_reduc_minmax_s
492 ; neon_fp_reduc_minmax_s_q
493 ; neon_fp_reduc_minmax_d
494 ; neon_fp_reduc_minmax_d_q
495 ; neon_fp_cvt_narrow_s_q
496 ; neon_fp_cvt_narrow_d_q
497 ; neon_fp_cvt_widen_h
498 ; neon_fp_cvt_widen_s
533 ; neon_fp_mul_s_scalar
534 ; neon_fp_mul_s_scalar_q
537 ; neon_fp_mul_d_scalar_q
540 ; neon_fp_mla_s_scalar
541 ; neon_fp_mla_s_scalar_q
544 ; neon_fp_mla_d_scalar_q
554 ; The classification below is for Crypto instructions.
565 ; The classification below is for coprocessor instructions
569 ; The classification below is for TME instructions
572 ; The classification below is for M-profile Vector Extension instructions
588 alu_shift_imm_lsl_1to4,\
589 alu_shift_imm_other,\
785 neon_add_halve_narrow_q,\
795 neon_sub_halve_narrow_q,\
819 neon_compare_zero_q,\
825 neon_reduc_add_long,\
827 neon_reduc_add_acc_q,\
829 neon_reduc_minmax_q,\
837 neon_shift_imm_narrow_q,\
838 neon_shift_imm_long,\
844 neon_sat_shift_imm_q,\
845 neon_sat_shift_imm_narrow_q,\
847 neon_sat_shift_reg_q,\
893 neon_mul_h_scalar_q,\
895 neon_mul_s_scalar_q,\
896 neon_mul_h_scalar_long,\
897 neon_mul_s_scalar_long,\
905 neon_sat_mul_b_long,\
906 neon_sat_mul_h_long,\
907 neon_sat_mul_s_long,\
908 neon_sat_mul_h_scalar,\
909 neon_sat_mul_h_scalar_q,\
910 neon_sat_mul_s_scalar,\
911 neon_sat_mul_s_scalar_q,\
912 neon_sat_mul_h_scalar_long,\
913 neon_sat_mul_s_scalar_long,\
925 neon_mla_h_scalar_q,\
927 neon_mla_s_scalar_q,\
928 neon_mla_h_scalar_long,\
929 neon_mla_s_scalar_long,\
931 neon_sat_mla_b_long,\
932 neon_sat_mla_h_long,\
933 neon_sat_mla_s_long,\
934 neon_sat_mla_h_scalar_long,\
935 neon_sat_mla_s_scalar_long,\
953 neon_load1_all_lanes,\
954 neon_load1_all_lanes_q,\
955 neon_load1_one_lane,\
956 neon_load1_one_lane_q,\
962 neon_load2_all_lanes,\
963 neon_load2_all_lanes_q,\
964 neon_load2_one_lane,\
965 neon_load2_one_lane_q,\
969 neon_load3_all_lanes,\
970 neon_load3_all_lanes_q,\
971 neon_load3_one_lane,\
972 neon_load3_one_lane_q,\
976 neon_load4_all_lanes,\
977 neon_load4_all_lanes_q,\
978 neon_load4_one_lane,\
979 neon_load4_one_lane_q,\
992 neon_store1_one_lane,\
993 neon_store1_one_lane_q,\
999 neon_store2_one_lane,\
1000 neon_store2_one_lane_q,\
1003 neon_store3_3reg_q,\
1004 neon_store3_one_lane,\
1005 neon_store3_one_lane_q,\
1008 neon_store4_4reg_q,\
1009 neon_store4_one_lane,\
1010 neon_store4_one_lane_q,\
1026 neon_fp_addsub_s_q,\
1028 neon_fp_addsub_d_q,\
1030 neon_fp_compare_s_q,\
1032 neon_fp_compare_d_q,\
1034 neon_fp_minmax_s_q,\
1036 neon_fp_minmax_d_q,\
1038 neon_fp_reduc_add_s,\
1039 neon_fp_reduc_add_s_q,\
1040 neon_fp_reduc_add_d,\
1041 neon_fp_reduc_add_d_q,\
1042 neon_fp_reduc_minmax_s,\
1043 neon_fp_reduc_minmax_s_q,\
1044 neon_fp_reduc_minmax_d,\
1045 neon_fp_reduc_minmax_d_q,\
1047 neon_fp_cvt_narrow_s_q,\
1048 neon_fp_cvt_narrow_d_q,\
1049 neon_fp_cvt_widen_h,\
1050 neon_fp_cvt_widen_s,\
1053 neon_fp_to_int_s_q,\
1055 neon_fp_to_int_d_q,\
1057 neon_int_to_fp_s_q,\
1059 neon_int_to_fp_d_q,\
1079 neon_fp_rsqrte_s_q,\
1081 neon_fp_rsqrte_d_q,\
1083 neon_fp_rsqrts_s_q,\
1085 neon_fp_rsqrts_d_q,\
1089 neon_fp_mul_s_scalar,\
1090 neon_fp_mul_s_scalar_q,\
1093 neon_fp_mul_d_scalar_q,\
1097 neon_fp_mla_s_scalar,\
1098 neon_fp_mla_s_scalar_q,\
1101 neon_fp_mla_d_scalar_q,\
1117 crypto_sha256_fast,\
1118 crypto_sha256_slow,\
1132 (cond [(eq_attr "autodetect_type" "alu_shift_lsr_op2,alu_shift_asr_op2")
1133 (const_string "alu_shift_imm_other")
1134 (eq_attr "autodetect_type" "alu_shift_lsl_op2")
1135 (if_then_else (match_operand 2 "const_1_to_4_operand")
1136 (const_string "alu_shift_imm_lsl_1to4")
1137 (const_string "alu_shift_imm_other"))
1138 (eq_attr "autodetect_type" "alu_shift_mul_op3")
1139 (if_then_else (match_operand 3 "const_2_4_8_16_operand")
1140 (const_string "alu_shift_imm_lsl_1to4")
1141 (const_string "alu_shift_imm_other"))
1142 (eq_attr "autodetect_type" "alu_shift_operator1")
1143 (if_then_else (match_operand 1 "alu_shift_reg_p")
1144 (const_string "alu_shift_reg")
1145 (if_then_else (match_operand 1 "alu_shift_operator_lsl_1_to_4")
1146 (const_string "alu_shift_imm_lsl_1to4")
1147 (const_string "alu_shift_imm_other")))
1148 (eq_attr "autodetect_type" "alu_shift_operator2")
1149 (if_then_else (match_operand 2 "alu_shift_reg_p")
1150 (const_string "alu_shift_reg")
1151 (if_then_else (match_operand 2 "alu_shift_operator_lsl_1_to_4")
1152 (const_string "alu_shift_imm_lsl_1to4")
1153 (const_string "alu_shift_imm_other")))
1154 (eq_attr "autodetect_type" "alu_shift_operator3")
1155 (if_then_else (match_operand 3 "alu_shift_reg_p")
1156 (const_string "alu_shift_reg")
1157 (if_then_else (match_operand 3 "alu_shift_operator_lsl_1_to_4")
1158 (const_string "alu_shift_imm_lsl_1to4")
1159 (const_string "alu_shift_imm_other")))
1160 (eq_attr "autodetect_type" "alu_shift_operator4")
1161 (if_then_else (match_operand 4 "alu_shift_reg_p")
1162 (const_string "alu_shift_reg")
1163 (if_then_else (match_operand 4 "alu_shift_operator_lsl_1_to_4")
1164 (const_string "alu_shift_imm_lsl_1to4")
1165 (const_string "alu_shift_imm_other")))
1167 (const_string "untyped")))
1170 ; Is this an (integer side) multiply with a 32-bit (or smaller) result?
1171 (define_attr "mul32" "no,yes"
1174 "smulxy,smlaxy,smulwy,smlawx,mul,muls,mla,mlas,smlawy,smuad,smuadx,\
1175 smlad,smladx,smusd,smusdx,smlsd,smlsdx,smmul,smmulr,smmla,smlald,smlsld")
1176 (const_string "yes")
1177 (const_string "no")))
1179 ; Is this an (integer side) widening multiply with a 64-bit result?
1180 (define_attr "widen_mul64" "no,yes"
1183 "smlalxy,umull,umulls,umaal,umlal,umlals,smull,smulls,smlal,smlals")
1184 (const_string "yes")
1185 (const_string "no")))
1187 ; YES if the "type" attribute assigned to the insn denotes an
1188 ; Advanced SIMD instruction, NO otherwise.
1189 (define_attr "is_neon_type" "yes,no"
1190 (if_then_else (eq_attr "type"
1191 "neon_add, neon_add_q, neon_add_widen, neon_add_long,\
1192 neon_qadd, neon_qadd_q, neon_add_halve, neon_add_halve_q,\
1193 neon_add_halve_narrow_q,\
1194 neon_sub, neon_sub_q, neon_sub_widen, neon_sub_long, neon_qsub,\
1195 neon_qsub_q, neon_sub_halve, neon_sub_halve_q,\
1196 neon_sub_halve_narrow_q,\
1197 neon_abs, neon_abs_q, neon_dot, neon_dot_q, neon_neg, neon_neg_q,\
1198 neon_qneg, neon_qneg_q, neon_qabs, neon_qabs_q, neon_abd, neon_abd_q,\
1199 neon_abd_long, neon_minmax, neon_minmax_q, neon_compare,\
1200 neon_compare_q, neon_compare_zero, neon_compare_zero_q,\
1201 neon_arith_acc, neon_arith_acc_q, neon_reduc_add,\
1202 neon_reduc_add_q, neon_reduc_add_long, neon_reduc_add_acc,\
1203 neon_reduc_add_acc_q, neon_reduc_minmax, neon_reduc_minmax_q,\
1204 neon_logic, neon_logic_q, neon_tst, neon_tst_q,\
1205 neon_shift_imm, neon_shift_imm_q, neon_shift_imm_narrow_q,\
1206 neon_shift_imm_long, neon_shift_reg, neon_shift_reg_q,\
1207 neon_shift_acc, neon_shift_acc_q, neon_sat_shift_imm,\
1208 neon_sat_shift_imm_q, neon_sat_shift_imm_narrow_q,\
1209 neon_sat_shift_reg, neon_sat_shift_reg_q,\
1210 neon_ins, neon_ins_q, neon_move, neon_move_q, neon_move_narrow_q,\
1211 neon_permute, neon_permute_q, neon_zip, neon_zip_q, neon_tbl1,\
1212 neon_tbl1_q, neon_tbl2, neon_tbl2_q, neon_tbl3, neon_tbl3_q,\
1213 neon_tbl4, neon_tbl4_q, neon_bsl, neon_bsl_q, neon_cls,\
1214 neon_cls_q, neon_cnt, neon_cnt_q, neon_dup, neon_dup_q,\
1215 neon_ext, neon_ext_q, neon_rbit, neon_rbit_q,\
1216 neon_rev, neon_rev_q, neon_mul_b, neon_mul_b_q, neon_mul_h,\
1217 neon_mul_h_q, neon_mul_s, neon_mul_s_q, neon_mul_b_long,\
1218 neon_mul_h_long, neon_mul_s_long, neon_mul_d_long, neon_mul_h_scalar,\
1219 neon_mul_h_scalar_q, neon_mul_s_scalar, neon_mul_s_scalar_q,\
1220 neon_mul_h_scalar_long, neon_mul_s_scalar_long, neon_sat_mul_b,\
1221 neon_sat_mul_b_q, neon_sat_mul_h, neon_sat_mul_h_q,\
1222 neon_sat_mul_s, neon_sat_mul_s_q, neon_sat_mul_b_long,\
1223 neon_sat_mul_h_long, neon_sat_mul_s_long, neon_sat_mul_h_scalar,\
1224 neon_sat_mul_h_scalar_q, neon_sat_mul_s_scalar,\
1225 neon_sat_mul_s_scalar_q, neon_sat_mul_h_scalar_long,\
1226 neon_sat_mul_s_scalar_long, neon_mla_b, neon_mla_b_q, neon_mla_h,\
1227 neon_mla_h_q, neon_mla_s, neon_mla_s_q, neon_mla_b_long,\
1228 neon_mla_h_long, neon_mla_s_long, neon_mla_h_scalar,\
1229 neon_mla_h_scalar_q, neon_mla_s_scalar, neon_mla_s_scalar_q,\
1230 neon_mla_h_scalar_long, neon_mla_s_scalar_long,\
1231 neon_sat_mla_b_long, neon_sat_mla_h_long,\
1232 neon_sat_mla_s_long, neon_sat_mla_h_scalar_long,\
1233 neon_sat_mla_s_scalar_long,\
1234 neon_to_gp, neon_to_gp_q, neon_from_gp, neon_from_gp_q,\
1235 neon_ldr, neon_ldp, neon_ldp_q,\
1236 neon_load1_1reg, neon_load1_1reg_q, neon_load1_2reg,\
1237 neon_load1_2reg_q, neon_load1_3reg, neon_load1_3reg_q,\
1238 neon_load1_4reg, neon_load1_4reg_q, neon_load1_all_lanes,\
1239 neon_load1_all_lanes_q, neon_load1_one_lane, neon_load1_one_lane_q,\
1240 neon_load2_2reg, neon_load2_2reg_q, neon_load2_4reg,\
1241 neon_load2_4reg_q, neon_load2_all_lanes, neon_load2_all_lanes_q,\
1242 neon_load2_one_lane, neon_load2_one_lane_q,\
1243 neon_load3_3reg, neon_load3_3reg_q, neon_load3_all_lanes,\
1244 neon_load3_all_lanes_q, neon_load3_one_lane, neon_load3_one_lane_q,\
1245 neon_load4_4reg, neon_load4_4reg_q, neon_load4_all_lanes,\
1246 neon_load4_all_lanes_q, neon_load4_one_lane, neon_load4_one_lane_q,\
1247 neon_str, neon_stp, neon_stp_q,\
1248 neon_store1_1reg, neon_store1_1reg_q, neon_store1_2reg,\
1249 neon_store1_2reg_q, neon_store1_3reg, neon_store1_3reg_q,\
1250 neon_store1_4reg, neon_store1_4reg_q, neon_store1_one_lane,\
1251 neon_store1_one_lane_q, neon_store2_2reg, neon_store2_2reg_q,\
1252 neon_store2_4reg, neon_store2_4reg_q, neon_store2_one_lane,\
1253 neon_store2_one_lane_q, neon_store3_3reg, neon_store3_3reg_q,\
1254 neon_store3_one_lane, neon_store3_one_lane_q, neon_store4_4reg,\
1255 neon_store4_4reg_q, neon_store4_one_lane, neon_store4_one_lane_q,\
1256 neon_fp_abd_s, neon_fp_abd_s_q, neon_fp_abd_d, neon_fp_abd_d_q,\
1257 neon_fp_abs_s, neon_fp_abs_s_q, neon_fp_abs_d, neon_fp_abs_d_q,\
1258 neon_fp_addsub_s, neon_fp_addsub_s_q, neon_fp_addsub_d,\
1259 neon_fp_addsub_d_q, neon_fp_compare_s, neon_fp_compare_s_q,\
1260 neon_fp_compare_d, neon_fp_compare_d_q, neon_fp_minmax_s,\
1261 neon_fp_minmax_s_q, neon_fp_minmax_d, neon_fp_minmax_d_q,\
1262 neon_fp_neg_s, neon_fp_neg_s_q, neon_fp_neg_d, neon_fp_neg_d_q,\
1263 neon_fp_reduc_add_s, neon_fp_reduc_add_s_q, neon_fp_reduc_add_d,\
1264 neon_fp_reduc_add_d_q, neon_fp_reduc_minmax_s,
1265 neon_fp_reduc_minmax_s_q, neon_fp_reduc_minmax_d,\
1266 neon_fp_reduc_minmax_d_q,\
1267 neon_fp_cvt_narrow_s_q, neon_fp_cvt_narrow_d_q,\
1268 neon_fp_cvt_widen_h, neon_fp_cvt_widen_s, neon_fp_to_int_s,\
1269 neon_fp_to_int_s_q, neon_int_to_fp_s, neon_int_to_fp_s_q,\
1270 neon_fp_to_int_d, neon_fp_to_int_d_q,\
1271 neon_int_to_fp_d, neon_int_to_fp_d_q,\
1272 neon_fp_round_s, neon_fp_round_s_q, neon_fp_recpe_s,\
1274 neon_fp_recpe_d, neon_fp_recpe_d_q, neon_fp_recps_s,\
1275 neon_fp_recps_s_q, neon_fp_recps_d, neon_fp_recps_d_q,\
1276 neon_fp_recpx_s, neon_fp_recpx_s_q, neon_fp_recpx_d,\
1277 neon_fp_recpx_d_q, neon_fp_rsqrte_s, neon_fp_rsqrte_s_q,\
1278 neon_fp_rsqrte_d, neon_fp_rsqrte_d_q, neon_fp_rsqrts_s,\
1279 neon_fp_rsqrts_s_q, neon_fp_rsqrts_d, neon_fp_rsqrts_d_q,\
1280 neon_fp_mul_s, neon_fp_mul_s_q, neon_fp_mul_s_scalar,\
1281 neon_fp_mul_s_scalar_q, neon_fp_mul_d, neon_fp_mul_d_q,\
1282 neon_fp_mul_d_scalar_q, neon_fp_mla_s, neon_fp_mla_s_q,\
1283 neon_fp_mla_s_scalar, neon_fp_mla_s_scalar_q, neon_fp_mla_d,\
1284 neon_fp_mla_d_q, neon_fp_mla_d_scalar_q, neon_fp_sqrt_s,\
1285 neon_fp_sqrt_s_q, neon_fp_sqrt_d, neon_fp_sqrt_d_q,\
1286 neon_fp_div_s, neon_fp_div_s_q, neon_fp_div_d, neon_fp_div_d_q, crypto_aese,\
1287 neon_fcadd, neon_fcmla, \
1288 crypto_aesmc, crypto_sha1_xor, crypto_sha1_fast, crypto_sha1_slow,\
1289 crypto_sha256_fast, crypto_sha256_slow")
1290 (const_string "yes")
1291 (const_string "no")))
1293 ;; YES if the "type" attribute assigned to the insn denotes an MVE instruction,
1295 (define_attr "is_mve_type" "yes,no"
1296 (if_then_else (eq_attr "type"
1297 "mve_move, mve_load, mve_store, mrs, mve_misc")
1298 (const_string "yes")
1299 (const_string "no")))
1301 (define_insn_reservation "no_reservation" 0
1302 (eq_attr "type" "no_insn")