]>
Commit | Line | Data |
---|---|---|
a0f06fc9 | 1 | ;; Machine description for AppliedMicro xgene1 core. |
a5544970 | 2 | ;; Copyright (C) 2012-2019 Free Software Foundation, Inc. |
a0f06fc9 PT |
3 | ;; Contributed by Theobroma Systems Design und Consulting GmbH. |
4 | ;; | |
5 | ;; This file is part of GCC. | |
6 | ;; | |
7 | ;; GCC is free software; you can redistribute it and/or modify it | |
8 | ;; under the terms of the GNU General Public License as published by | |
9 | ;; the Free Software Foundation; either version 3, or (at your option) | |
10 | ;; any later version. | |
11 | ;; | |
12 | ;; GCC is distributed in the hope that it will be useful, but | |
13 | ;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | ;; General Public License for more details. | |
16 | ;; | |
17 | ;; You should have received a copy of the GNU General Public License | |
18 | ;; along with GCC; see the file COPYING3. If not see | |
19 | ;; <http://www.gnu.org/licenses/>. | |
20 | ||
21 | ;; Pipeline description for the xgene1 micro-architecture | |
22 | ||
1e46ecae | 23 | (define_automaton "xgene1_main, xgene1_decoder, xgene1_div, xgene1_simd") |
a0f06fc9 | 24 | |
1e46ecae DI |
25 | (define_cpu_unit "xgene1_decode_out0" "xgene1_decoder") |
26 | (define_cpu_unit "xgene1_decode_out1" "xgene1_decoder") | |
27 | (define_cpu_unit "xgene1_decode_out2" "xgene1_decoder") | |
28 | (define_cpu_unit "xgene1_decode_out3" "xgene1_decoder") | |
a0f06fc9 | 29 | |
1e46ecae DI |
30 | (define_cpu_unit "xgene1_IXA" "xgene1_main") |
31 | (define_cpu_unit "xgene1_IXB" "xgene1_main") | |
32 | (define_cpu_unit "xgene1_IXB_compl" "xgene1_main") | |
33 | ||
34 | (define_reservation "xgene1_IXn" "(xgene1_IXA | xgene1_IXB)") | |
35 | ||
36 | (define_cpu_unit "xgene1_multiply" "xgene1_main") | |
37 | (define_cpu_unit "xgene1_divide" "xgene1_div") | |
38 | (define_cpu_unit "xgene1_fp_divide" "xgene1_div") | |
39 | (define_cpu_unit "xgene1_fsu" "xgene1_simd") | |
40 | (define_cpu_unit "xgene1_fcmp" "xgene1_simd") | |
41 | (define_cpu_unit "xgene1_ld" "xgene1_main") | |
42 | (define_cpu_unit "xgene1_st" "xgene1_main") | |
a0f06fc9 PT |
43 | |
44 | (define_reservation "xgene1_decode1op" | |
45 | "( xgene1_decode_out0 ) | |
46 | |( xgene1_decode_out1 ) | |
47 | |( xgene1_decode_out2 ) | |
48 | |( xgene1_decode_out3 )" | |
49 | ) | |
50 | (define_reservation "xgene1_decode2op" | |
51 | "( xgene1_decode_out0 + xgene1_decode_out1 ) | |
52 | |( xgene1_decode_out0 + xgene1_decode_out2 ) | |
53 | |( xgene1_decode_out0 + xgene1_decode_out3 ) | |
54 | |( xgene1_decode_out1 + xgene1_decode_out2 ) | |
55 | |( xgene1_decode_out1 + xgene1_decode_out3 ) | |
56 | |( xgene1_decode_out2 + xgene1_decode_out3 )" | |
57 | ) | |
58 | (define_reservation "xgene1_decodeIsolated" | |
59 | "( xgene1_decode_out0 + xgene1_decode_out1 + xgene1_decode_out2 + xgene1_decode_out3 )" | |
60 | ) | |
61 | ||
62 | (define_insn_reservation "xgene1_branch" 1 | |
63 | (and (eq_attr "tune" "xgene1") | |
64 | (eq_attr "type" "branch")) | |
65 | "xgene1_decode1op") | |
66 | ||
67 | (define_insn_reservation "xgene1_nop" 1 | |
68 | (and (eq_attr "tune" "xgene1") | |
69 | (eq_attr "type" "no_insn")) | |
70 | "xgene1_decode1op") | |
71 | ||
72 | (define_insn_reservation "xgene1_call" 1 | |
73 | (and (eq_attr "tune" "xgene1") | |
74 | (eq_attr "type" "call")) | |
75 | "xgene1_decode2op") | |
76 | ||
77 | (define_insn_reservation "xgene1_f_load" 10 | |
78 | (and (eq_attr "tune" "xgene1") | |
79 | (eq_attr "type" "f_loadd,f_loads")) | |
1e46ecae | 80 | "xgene1_decode2op, xgene1_ld") |
a0f06fc9 PT |
81 | |
82 | (define_insn_reservation "xgene1_f_store" 4 | |
83 | (and (eq_attr "tune" "xgene1") | |
84 | (eq_attr "type" "f_stored,f_stores")) | |
1e46ecae | 85 | "xgene1_decode2op, xgene1_st") |
a0f06fc9 PT |
86 | |
87 | (define_insn_reservation "xgene1_fmov" 2 | |
88 | (and (eq_attr "tune" "xgene1") | |
89 | (eq_attr "type" "fmov,fconsts,fconstd")) | |
90 | "xgene1_decode1op") | |
91 | ||
92 | (define_insn_reservation "xgene1_f_mcr" 10 | |
93 | (and (eq_attr "tune" "xgene1") | |
94 | (eq_attr "type" "f_mcr")) | |
95 | "xgene1_decodeIsolated") | |
96 | ||
97 | (define_insn_reservation "xgene1_f_mrc" 4 | |
98 | (and (eq_attr "tune" "xgene1") | |
99 | (eq_attr "type" "f_mrc")) | |
100 | "xgene1_decode2op") | |
101 | ||
102 | (define_insn_reservation "xgene1_load_pair" 6 | |
103 | (and (eq_attr "tune" "xgene1") | |
1e46ecae DI |
104 | (eq_attr "type" "load_16")) |
105 | "xgene1_decodeIsolated, xgene1_ld*2") | |
a0f06fc9 PT |
106 | |
107 | (define_insn_reservation "xgene1_store_pair" 2 | |
108 | (and (eq_attr "tune" "xgene1") | |
1e46ecae DI |
109 | (eq_attr "type" "store_16")) |
110 | "xgene1_decodeIsolated, xgene1_st*2") | |
a0f06fc9 PT |
111 | |
112 | (define_insn_reservation "xgene1_fp_load1" 10 | |
113 | (and (eq_attr "tune" "xgene1") | |
1e46ecae | 114 | (eq_attr "type" "load_4, load_8") |
a0f06fc9 | 115 | (eq_attr "fp" "yes")) |
1e46ecae | 116 | "xgene1_decode1op, xgene1_ld") |
a0f06fc9 PT |
117 | |
118 | (define_insn_reservation "xgene1_load1" 5 | |
119 | (and (eq_attr "tune" "xgene1") | |
1e46ecae DI |
120 | (eq_attr "type" "load_4, load_8")) |
121 | "xgene1_decode1op, xgene1_ld") | |
a0f06fc9 | 122 | |
1e46ecae | 123 | (define_insn_reservation "xgene1_store1" 1 |
a0f06fc9 | 124 | (and (eq_attr "tune" "xgene1") |
1e46ecae DI |
125 | (eq_attr "type" "store_4, store_8")) |
126 | "xgene1_decode1op, xgene1_st") | |
a0f06fc9 PT |
127 | |
128 | (define_insn_reservation "xgene1_move" 1 | |
129 | (and (eq_attr "tune" "xgene1") | |
130 | (eq_attr "type" "mov_reg,mov_imm,mrs")) | |
1e46ecae DI |
131 | "xgene1_decode1op, xgene1_IXn") |
132 | ||
133 | (define_insn_reservation "xgene1_alu_cond" 1 | |
134 | (and (eq_attr "tune" "xgene1") | |
135 | (eq_attr "type" "csel")) | |
136 | "xgene1_decode1op, xgene1_IXn") | |
a0f06fc9 PT |
137 | |
138 | (define_insn_reservation "xgene1_alu" 1 | |
139 | (and (eq_attr "tune" "xgene1") | |
140 | (eq_attr "type" "alu_imm,alu_sreg,alu_shift_imm,\ | |
1e46ecae | 141 | alu_ext,adc_reg,logic_imm,\ |
a0f06fc9 | 142 | logic_reg,logic_shift_imm,clz,\ |
1e46ecae DI |
143 | rbit,adr,mov_reg,shift_imm,\ |
144 | mov_imm,extend,multiple")) | |
145 | "xgene1_decode1op, xgene1_IXn") | |
146 | ||
147 | (define_insn_reservation "xgene1_shift_rotate" 2 | |
148 | (and (eq_attr "tune" "xgene1") | |
149 | (eq_attr "type" "shift_reg")) | |
150 | "xgene1_decode1op, xgene1_IXB, xgene1_IXB_compl") | |
a0f06fc9 | 151 | |
1e46ecae | 152 | (define_insn_reservation "xgene1_simd" 2 |
a0f06fc9 PT |
153 | (and (eq_attr "tune" "xgene1") |
154 | (eq_attr "type" "rev")) | |
1e46ecae | 155 | "xgene1_decode1op, xgene1_IXB, xgene1_IXB_compl") |
a0f06fc9 PT |
156 | |
157 | (define_insn_reservation "xgene1_alus" 1 | |
158 | (and (eq_attr "tune" "xgene1") | |
1e46ecae | 159 | (eq_attr "type" "alus_imm,alus_sreg,alus_shift_imm,\ |
a0f06fc9 PT |
160 | alus_ext,logics_imm,logics_reg,\ |
161 | logics_shift_imm")) | |
1e46ecae DI |
162 | "xgene1_decode1op, xgene1_IXB, xgene1_IXB_compl") |
163 | ||
164 | (define_bypass 2 "xgene1_alus" | |
165 | "xgene1_alu_cond, xgene1_branch") | |
a0f06fc9 | 166 | |
1e46ecae | 167 | (define_insn_reservation "xgene1_mul32" 4 |
a0f06fc9 | 168 | (and (eq_attr "tune" "xgene1") |
1e46ecae DI |
169 | (eq_attr "mul32" "yes")) |
170 | "xgene1_decode2op, xgene1_IXB + xgene1_multiply, xgene1_multiply, nothing, xgene1_IXB_compl") | |
171 | ||
f51c724c | 172 | (define_insn_reservation "xgene1_widen_mul64" 5 |
1e46ecae | 173 | (and (eq_attr "tune" "xgene1") |
f51c724c | 174 | (eq_attr "widen_mul64" "yes")) |
1e46ecae | 175 | "xgene1_decode2op, xgene1_IXB + xgene1_multiply, xgene1_multiply, nothing*2, xgene1_IXB_compl") |
a0f06fc9 PT |
176 | |
177 | (define_insn_reservation "xgene1_div" 34 | |
178 | (and (eq_attr "tune" "xgene1") | |
179 | (eq_attr "type" "sdiv,udiv")) | |
1e46ecae | 180 | "xgene1_decode1op, xgene1_IXB + xgene1_divide*7") |
a0f06fc9 PT |
181 | |
182 | (define_insn_reservation "xgene1_fcmp" 10 | |
183 | (and (eq_attr "tune" "xgene1") | |
c297d256 | 184 | (eq_attr "type" "fcmpd,fcmps,fccmpd,fccmps")) |
1e46ecae | 185 | "xgene1_decode1op, xgene1_fsu + xgene1_fcmp*3") |
a0f06fc9 PT |
186 | |
187 | (define_insn_reservation "xgene1_fcsel" 3 | |
188 | (and (eq_attr "tune" "xgene1") | |
189 | (eq_attr "type" "fcsel")) | |
1e46ecae DI |
190 | "xgene1_decode1op, xgene1_fsu") |
191 | ||
192 | (define_insn_reservation "xgene1_bfx" 1 | |
193 | (and (eq_attr "tune" "xgene1") | |
194 | (eq_attr "type" "bfx")) | |
195 | "xgene1_decode1op, xgene1_IXn") | |
a0f06fc9 PT |
196 | |
197 | (define_insn_reservation "xgene1_bfm" 2 | |
198 | (and (eq_attr "tune" "xgene1") | |
1e46ecae DI |
199 | (eq_attr "type" "bfm")) |
200 | "xgene1_decode1op, xgene1_IXB, xgene1_IXB_compl") | |
a0f06fc9 PT |
201 | |
202 | (define_insn_reservation "xgene1_f_rint" 5 | |
203 | (and (eq_attr "tune" "xgene1") | |
204 | (eq_attr "type" "f_rintd,f_rints")) | |
1e46ecae | 205 | "xgene1_decode1op, xgene1_fsu") |
a0f06fc9 PT |
206 | |
207 | (define_insn_reservation "xgene1_f_cvt" 3 | |
208 | (and (eq_attr "tune" "xgene1") | |
209 | (eq_attr "type" "f_cvt")) | |
210 | "xgene1_decode1op,xgene1_fsu") | |
211 | ||
212 | (define_insn_reservation "xgene1_f_cvtf2i" 11 | |
213 | (and (eq_attr "tune" "xgene1") | |
214 | (eq_attr "type" "f_cvtf2i")) | |
215 | "xgene1_decodeIsolated,xgene1_fsu") | |
216 | ||
217 | (define_insn_reservation "xgene1_f_cvti2f" 14 | |
218 | (and (eq_attr "tune" "xgene1") | |
219 | (eq_attr "type" "f_cvti2f")) | |
220 | "xgene1_decodeIsolated,xgene1_fsu") | |
221 | ||
222 | (define_insn_reservation "xgene1_f_add" 5 | |
223 | (and (eq_attr "tune" "xgene1") | |
224 | (eq_attr "type" "faddd,fadds,fmuld,fmuls")) | |
225 | "xgene1_decode1op,xgene1_fsu") | |
226 | ||
227 | (define_insn_reservation "xgene1_f_divs" 22 | |
228 | (and (eq_attr "tune" "xgene1") | |
229 | (eq_attr "type" "fdivs,fsqrts")) | |
230 | "xgene1_decode1op,(xgene1_fp_divide+xgene1_fsu)*8,xgene1_fp_divide*14") | |
231 | ||
232 | (define_insn_reservation "xgene1_f_divd" 28 | |
233 | (and (eq_attr "tune" "xgene1") | |
234 | (eq_attr "type" "fdivd")) | |
235 | "xgene1_decode1op,(xgene1_fp_divide+xgene1_fsu)*11,xgene1_fp_divide*17") | |
236 | ||
237 | (define_insn_reservation "xgene1_f_sqrtd" 28 | |
238 | (and (eq_attr "tune" "xgene1") | |
239 | (eq_attr "type" "fsqrtd")) | |
240 | "xgene1_decode1op,(xgene1_fp_divide+xgene1_fsu)*17,xgene1_fp_divide*11") | |
241 | ||
242 | (define_insn_reservation "xgene1_f_arith" 2 | |
243 | (and (eq_attr "tune" "xgene1") | |
244 | (eq_attr "type" "ffarithd,ffariths")) | |
245 | "xgene1_decode1op,xgene1_fsu") | |
246 | ||
247 | (define_insn_reservation "xgene1_f_select" 3 | |
248 | (and (eq_attr "tune" "xgene1") | |
249 | (eq_attr "type" "f_minmaxd,f_minmaxs")) | |
250 | "xgene1_decode1op,xgene1_fsu") | |
251 | ||
252 | (define_insn_reservation "xgene1_neon_dup" 3 | |
253 | (and (eq_attr "tune" "xgene1") | |
254 | (eq_attr "type" "neon_dup,neon_dup_q")) | |
255 | "xgene1_decode1op,xgene1_fsu") | |
256 | ||
257 | (define_insn_reservation "xgene1_neon_load1" 11 | |
258 | (and (eq_attr "tune" "xgene1") | |
259 | (eq_attr "type" "neon_load1_1reg, neon_load1_1reg_q")) | |
1e46ecae | 260 | "xgene1_decode2op, xgene1_ld") |
a0f06fc9 PT |
261 | |
262 | (define_insn_reservation "xgene1_neon_store1" 5 | |
263 | (and (eq_attr "tune" "xgene1") | |
264 | (eq_attr "type" "neon_store1_1reg, neon_store1_1reg_q")) | |
1e46ecae | 265 | "xgene1_decode2op, xgene1_st") |
a0f06fc9 PT |
266 | |
267 | (define_insn_reservation "xgene1_neon_logic" 2 | |
268 | (and (eq_attr "tune" "xgene1") | |
269 | (eq_attr "type" "neon_logic,\ | |
270 | neon_logic_q,\ | |
271 | neon_bsl,\ | |
272 | neon_bsl_q,\ | |
273 | neon_move,\ | |
274 | neon_move_q,\ | |
275 | ")) | |
276 | "xgene1_decode1op,xgene1_fsu") | |
277 | ||
278 | (define_insn_reservation "xgene1_neon_umov" 7 | |
279 | (and (eq_attr "tune" "xgene1") | |
280 | (eq_attr "type" "neon_to_gp, neon_to_gp_q")) | |
281 | "xgene1_decodeIsolated") | |
282 | ||
283 | (define_insn_reservation "xgene1_neon_ins" 14 | |
284 | (and (eq_attr "tune" "xgene1") | |
285 | (eq_attr "type" "neon_from_gp,\ | |
286 | neon_from_gp_q,\ | |
287 | neon_ins,\ | |
288 | neon_ins_q,\ | |
289 | ")) | |
290 | "xgene1_decodeIsolated,xgene1_fsu") | |
291 | ||
292 | (define_insn_reservation "xgene1_neon_shift" 3 | |
293 | (and (eq_attr "tune" "xgene1") | |
294 | (eq_attr "type" "neon_shift_imm,\ | |
295 | neon_shift_imm_q,\ | |
296 | neon_shift_reg,\ | |
297 | neon_shift_reg_q,\ | |
298 | neon_shift_imm_long,\ | |
299 | neon_sat_shift_imm,\ | |
300 | neon_sat_shift_imm_q,\ | |
301 | neon_sat_shift_imm_narrow_q,\ | |
302 | neon_sat_shift_reg,\ | |
303 | neon_sat_shift_reg_q,\ | |
304 | neon_shift_imm_narrow_q,\ | |
305 | ")) | |
306 | "xgene1_decode1op,xgene1_fsu") | |
307 | ||
308 | (define_insn_reservation "xgene1_neon_arith" 3 | |
309 | (and (eq_attr "tune" "xgene1") | |
310 | (eq_attr "type" "neon_add,\ | |
311 | neon_add_q,\ | |
312 | neon_sub,\ | |
313 | neon_sub_q,\ | |
314 | neon_neg,\ | |
315 | neon_neg_q,\ | |
316 | neon_abs,\ | |
317 | neon_abs_q,\ | |
318 | neon_abd_q,\ | |
319 | neon_arith_acc,\ | |
320 | neon_arith_acc_q,\ | |
321 | neon_reduc_add,\ | |
322 | neon_reduc_add_q,\ | |
323 | neon_add_halve,\ | |
324 | neon_add_halve_q,\ | |
325 | neon_sub_halve,\ | |
326 | neon_sub_halve_q,\ | |
327 | neon_qadd,\ | |
328 | neon_qadd_q,\ | |
329 | neon_compare,\ | |
330 | neon_compare_q,\ | |
331 | neon_compare_zero,\ | |
332 | neon_compare_zero_q,\ | |
333 | neon_tst,\ | |
334 | neon_tst_q,\ | |
1e46ecae DI |
335 | neon_minmax,\ |
336 | neon_minmax_q,\ | |
a0f06fc9 PT |
337 | ")) |
338 | "xgene1_decode1op,xgene1_fsu") | |
339 | ||
340 | (define_insn_reservation "xgene1_neon_abs_diff" 6 | |
341 | (and (eq_attr "tune" "xgene1") | |
342 | (eq_attr "type" "neon_arith_acc,neon_arith_acc_q")) | |
343 | "xgene1_decode2op,xgene1_fsu*2") | |
344 | ||
345 | (define_insn_reservation "xgene1_neon_mul" 5 | |
346 | (and (eq_attr "tune" "xgene1") | |
347 | (eq_attr "type" "neon_mul_b,\ | |
348 | neon_mul_b_q,\ | |
349 | neon_mul_h,\ | |
350 | neon_mul_h_q,\ | |
351 | neon_mul_s,\ | |
352 | neon_mul_s_q,\ | |
353 | neon_fp_mul_s_scalar,\ | |
354 | neon_fp_mul_s_scalar_q,\ | |
355 | neon_fp_mul_d_scalar_q,\ | |
356 | neon_mla_b,neon_mla_b_q,\ | |
357 | neon_mla_h,neon_mla_h_q,\ | |
358 | neon_mla_s,neon_mla_s_q,\ | |
359 | neon_mla_h_scalar,\ | |
360 | neon_mla_h_scalar_q,\ | |
361 | neon_mla_s_scalar,\ | |
362 | neon_mla_s_scalar_q,\ | |
363 | neon_mla_b_long,\ | |
364 | neon_mla_h_long,\ | |
365 | neon_mla_s_long,\ | |
366 | neon_fp_mul_s,\ | |
367 | neon_fp_mul_s_q,\ | |
368 | neon_fp_mul_d,\ | |
369 | neon_fp_mul_d_q,\ | |
370 | neon_fp_mla_s,\ | |
371 | neon_fp_mla_s_q,\ | |
372 | neon_fp_mla_d,\ | |
373 | neon_fp_mla_d_q,\ | |
374 | neon_fp_mla_s_scalar,\ | |
375 | neon_fp_mla_s_scalar_q,\ | |
376 | neon_fp_mla_d_scalar_q,\ | |
377 | neon_sat_mul_b,\ | |
378 | neon_sat_mul_b_q,\ | |
379 | neon_sat_mul_h,\ | |
380 | neon_sat_mul_h_q,\ | |
381 | neon_sat_mul_s,\ | |
382 | neon_sat_mul_s_q,\ | |
383 | neon_sat_mul_h_scalar,\ | |
384 | neon_sat_mul_h_scalar_q,\ | |
385 | neon_sat_mul_s_scalar,\ | |
386 | neon_sat_mul_s_scalar_q,\ | |
387 | neon_sat_mul_h_scalar_long,\ | |
388 | neon_sat_mul_s_scalar_long,\ | |
389 | neon_sat_mla_b_long,\ | |
390 | neon_sat_mla_h_long,\ | |
391 | neon_sat_mla_s_long,\ | |
392 | neon_sat_mla_h_scalar_long,\ | |
393 | neon_sat_mla_s_scalar_long,\ | |
394 | ")) | |
395 | "xgene1_decode2op,xgene1_fsu*2") | |
396 | ||
397 | (define_insn_reservation "xgene1_fp_abd_diff" 5 | |
398 | (and (eq_attr "tune" "xgene1") | |
399 | (eq_attr "type" "neon_fp_abd_s,\ | |
400 | neon_fp_abd_s_q,\ | |
401 | neon_fp_abd_d,\ | |
402 | neon_fp_abd_d_q,\ | |
403 | ")) | |
404 | "xgene1_decode1op,xgene1_fsu") | |
405 | ||
406 | (define_insn_reservation "xgene1_neon_f_add" 5 | |
407 | (and (eq_attr "tune" "xgene1") | |
408 | (eq_attr "type" "neon_fp_addsub_s,\ | |
409 | neon_fp_addsub_s_q,\ | |
410 | neon_fp_addsub_d,\ | |
411 | neon_fp_addsub_d_q,\ | |
412 | ")) | |
413 | "xgene1_decode1op") | |
414 | ||
415 | (define_insn_reservation "xgene1_neon_f_div" 2 | |
416 | (and (eq_attr "tune" "xgene1") | |
417 | (eq_attr "type" "neon_fp_div_s,\ | |
418 | neon_fp_div_s_q,\ | |
419 | neon_fp_div_d,\ | |
420 | neon_fp_div_d_q,\ | |
421 | ")) | |
422 | "xgene1_decode1op,(xgene1_fsu+xgene1_fp_divide)") | |
423 | ||
424 | (define_insn_reservation "xgene1_neon_f_neg" 2 | |
425 | (and (eq_attr "tune" "xgene1") | |
426 | (eq_attr "type" "neon_fp_neg_s,\ | |
427 | neon_fp_neg_s_q,\ | |
428 | neon_fp_neg_d,\ | |
429 | neon_fp_neg_d_q,\ | |
430 | neon_fp_abs_s,\ | |
431 | neon_fp_abs_s_q,\ | |
432 | neon_fp_abs_d,\ | |
433 | neon_fp_abs_d_q,\ | |
434 | ")) | |
435 | "xgene1_decode1op") | |
436 | ||
437 | (define_insn_reservation "xgene1_neon_f_round" 5 | |
438 | (and (eq_attr "tune" "xgene1") | |
439 | (eq_attr "type" "neon_fp_round_s,\ | |
440 | neon_fp_round_s_q,\ | |
441 | neon_fp_round_d,\ | |
442 | neon_fp_round_d_q,\ | |
443 | ")) | |
444 | "xgene1_decode1op") | |
445 | ||
446 | (define_insn_reservation "xgene1_neon_f_cvt" 5 | |
447 | (and (eq_attr "tune" "xgene1") | |
448 | (eq_attr "type" "neon_int_to_fp_s,\ | |
449 | neon_int_to_fp_s_q,\ | |
450 | neon_int_to_fp_d,\ | |
451 | neon_int_to_fp_d_q,\ | |
452 | neon_fp_cvt_widen_s,\ | |
453 | neon_fp_cvt_narrow_s_q,\ | |
454 | neon_fp_cvt_narrow_d_q,\ | |
455 | ")) | |
456 | "xgene1_decode1op") | |
457 | ||
458 | (define_insn_reservation "xgene1_neon_f_reduc" 5 | |
459 | (and (eq_attr "tune" "xgene1") | |
460 | (eq_attr "type" "neon_fp_reduc_add_s,\ | |
461 | neon_fp_reduc_add_s_q,\ | |
462 | neon_fp_reduc_add_d,\ | |
463 | neon_fp_reduc_add_d_q,\ | |
464 | ")) | |
465 | "xgene1_decode1op") | |
466 | ||
467 | (define_insn_reservation "xgene1_neon_cls" 2 | |
468 | (and (eq_attr "tune" "xgene1") | |
469 | (eq_attr "type" "neon_cls,neon_cls_q")) | |
470 | "xgene1_decode1op") | |
471 | ||
472 | (define_insn_reservation "xgene1_neon_st1" 4 | |
473 | (and (eq_attr "tune" "xgene1") | |
474 | (eq_attr "type" "neon_store1_one_lane,\ | |
475 | neon_store1_one_lane_q,\ | |
1e46ecae DI |
476 | neon_stp,\ |
477 | neon_stp_q,\ | |
a0f06fc9 | 478 | ")) |
1e46ecae | 479 | "xgene1_decodeIsolated, xgene1_st") |
a0f06fc9 PT |
480 | |
481 | (define_insn_reservation "xgene1_neon_halve_narrow" 6 | |
482 | (and (eq_attr "tune" "xgene1") | |
483 | (eq_attr "type" "neon_sub_halve_narrow_q,\ | |
484 | neon_add_halve_narrow_q,\ | |
485 | ")) | |
486 | "xgene1_decodeIsolated") | |
487 | ||
488 | (define_insn_reservation "xgene1_neon_shift_acc" 6 | |
489 | (and (eq_attr "tune" "xgene1") | |
490 | (eq_attr "type" "neon_shift_acc,\ | |
491 | neon_shift_acc_q,\ | |
492 | ")) | |
493 | "xgene1_decode2op") | |
494 | ||
495 | (define_insn_reservation "xgene1_neon_fp_compare" 3 | |
496 | (and (eq_attr "tune" "xgene1") | |
497 | (eq_attr "type" "neon_fp_compare_s,\ | |
498 | neon_fp_compare_s_q,\ | |
499 | neon_fp_compare_d,\ | |
500 | neon_fp_compare_d_q,\ | |
501 | ")) | |
502 | "xgene1_decode1op") | |
503 | ||
504 | (define_insn_reservation "xgene1_neon_fp_sqrt" 2 | |
505 | (and (eq_attr "tune" "xgene1") | |
506 | (eq_attr "type" "neon_fp_sqrt_s,\ | |
507 | neon_fp_sqrt_s_q,\ | |
508 | neon_fp_sqrt_d,\ | |
509 | neon_fp_sqrt_d_q,\ | |
510 | ")) | |
511 | "xgene1_decode1op,(xgene1_fsu+xgene1_fp_divide)") | |
512 | ||
513 | (define_insn_reservation "xgene1_neon_tbl1" 4 | |
514 | (and (eq_attr "tune" "xgene1") | |
515 | (eq_attr "type" "neon_tbl1,\ | |
516 | neon_tbl1_q,\ | |
517 | ")) | |
518 | "xgene1_decode2op") | |
519 | ||
520 | (define_insn_reservation "xgene1_neon_tbl2" 8 | |
521 | (and (eq_attr "tune" "xgene1") | |
522 | (eq_attr "type" "neon_tbl2,\ | |
523 | neon_tbl2_q,\ | |
524 | ")) | |
525 | "xgene1_decodeIsolated") | |
526 | ||
527 | (define_insn_reservation "xgene1_neon_permute" 3 | |
528 | (and (eq_attr "tune" "xgene1") | |
529 | (eq_attr "type" "neon_permute,\ | |
530 | neon_permute_q,\ | |
531 | ")) | |
532 | "xgene1_decode2op") | |
533 | ||
534 | (define_insn_reservation "xgene1_neon_ld1r" 10 | |
535 | (and (eq_attr "tune" "xgene1") | |
536 | (eq_attr "type" "neon_load1_all_lanes,\ | |
537 | ")) | |
1e46ecae | 538 | "xgene1_decode1op, xgene1_ld") |
a0f06fc9 PT |
539 | |
540 | (define_insn_reservation "xgene1_neon_fp_recp" 3 | |
541 | (and (eq_attr "tune" "xgene1") | |
542 | (eq_attr "type" "neon_fp_recpe_s,\ | |
543 | neon_fp_recpe_s_q,\ | |
544 | neon_fp_recpe_d,\ | |
545 | neon_fp_recpe_d_q,\ | |
546 | neon_fp_recpx_s,\ | |
547 | neon_fp_recpx_s_q,\ | |
548 | neon_fp_recpx_d,\ | |
549 | neon_fp_recpx_d_q,\ | |
550 | ")) | |
551 | "xgene1_decode1op") | |
552 | ||
553 | ||
554 | (define_insn_reservation "xgene1_neon_fp_recp_s" 5 | |
555 | (and (eq_attr "tune" "xgene1") | |
556 | (eq_attr "type" "neon_fp_recps_s,\ | |
557 | neon_fp_recps_s_q,\ | |
558 | neon_fp_recps_d,\ | |
559 | neon_fp_recps_d_q,\ | |
560 | ")) | |
561 | "xgene1_decode1op") | |
562 | ||
563 | (define_insn_reservation "xgene1_neon_pmull" 5 | |
564 | (and (eq_attr "tune" "xgene1") | |
565 | (eq_attr "type" "neon_mul_d_long,\ | |
a2074e9c JB |
566 | crypto_pmull,\ |
567 | ")) | |
a0f06fc9 | 568 | "xgene1_decode2op") |