RISC-V: Error if function declared with different interrupt modes.
[official-gcc.git] / gcc / config / c6x / c6x-sched.md
blob39a8800c1deb3e9f9947bdf5fd3b5903cb518b6b
1 ;; -*- buffer-read-only: t -*-
2 ;; Generated automatically from c6x-sched.md.in by gensched.sh
4 ;; Definitions for side 1, cross n
6 ;; Scheduling description for TI C6X.
7 ;; Copyright (C) 2010-2018 Free Software Foundation, Inc.
8 ;; Contributed by Bernd Schmidt <bernds@codesourcery.com>
9 ;; Contributed by CodeSourcery.
11 ;; This file is part of GCC.
13 ;; GCC is free software; you can redistribute it and/or modify
14 ;; it under the terms of the GNU General Public License as published by
15 ;; the Free Software Foundation; either version 3, or (at your option)
16 ;; any later version.
18 ;; GCC is distributed in the hope that it will be useful,
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 ;; GNU General Public License for more details.
23 ;; You should have received a copy of the GNU General Public License
24 ;; along with GCC; see the file COPYING3.  If not see
25 ;; <http://www.gnu.org/licenses/>.
27 ;; Input file for gensched.sh We process this file multiple times,
28 ;; replacing 1 with either 1 or 2 for each of the sides of the
29 ;; machine, and a correspondingly with "a" or "b".  n and
30 ;;  are replaced with yes/no and the appropriate reservation.
32 (define_insn_reservation "load_d1n" 5
33   (and (eq_attr "type" "load")
34        (and (eq_attr "cross" "n")
35             (and (eq_attr "units" "d_addr")
36                  (eq_attr "addr_regfile" "a"))))
37   "d1+t1")
39 (define_insn_reservation "store_d1n" 1
40   (and (eq_attr "type" "store")
41        (and (eq_attr "cross" "n")
42             (and (eq_attr "units" "d_addr")
43                  (eq_attr "addr_regfile" "a"))))
44   "d1+t1")
46 (define_insn_reservation "loadn_d1n" 5
47   (and (eq_attr "type" "loadn")
48        (and (eq_attr "cross" "n")
49             (and (eq_attr "units" "d_addr")
50                  (eq_attr "addr_regfile" "a"))))
51   "d1+t1+t2")
53 (define_insn_reservation "storen_d1n" 1
54   (and (eq_attr "type" "storen")
55        (and (eq_attr "cross" "n")
56             (and (eq_attr "units" "d_addr")
57                  (eq_attr "addr_regfile" "a"))))
58   "d1+t1+t2")
60 (define_insn_reservation "single_d1n" 1
61   (and (eq_attr "type" "single")
62        (and (eq_attr "cross" "n")
63             (and (eq_attr "units" "d")
64                  (eq_attr "dest_regfile" "a"))))
65   "d1")
67 (define_insn_reservation "single_l1n" 1
68   (and (eq_attr "type" "single")
69        (and (eq_attr "cross" "n")
70             (and (eq_attr "units" "l")
71                  (eq_attr "dest_regfile" "a"))))
72   "l1+l1w")
74 (define_insn_reservation "fp4_l1n" 4
75   (and (eq_attr "type" "fp4")
76        (and (eq_attr "cross" "n")
77             (and (eq_attr "units" "l")
78                  (eq_attr "dest_regfile" "a"))))
79   "l1,nothing*2,l1w")
81 (define_insn_reservation "intdp_l1n" 5
82   (and (eq_attr "type" "intdp")
83        (and (eq_attr "cross" "n")
84             (and (eq_attr "units" "l")
85                  (eq_attr "dest_regfile" "a"))))
86   "l1,nothing*2,l1w*2")
88 (define_insn_reservation "adddp_l1n" 7
89   (and (eq_attr "type" "adddp")
90        (and (eq_attr "cross" "n")
91             (and (eq_attr "units" "l")
92                  (eq_attr "dest_regfile" "a"))))
93   "(l1)*2,nothing*3,l1w*2")
95 (define_insn_reservation "branch_s1n" 6
96   (and (eq_attr "type" "branch")
97        (and (eq_attr "cross" "n")
98             (and (eq_attr "units" "s")
99                  (eq_attr "dest_regfile" "a"))))
100   "(s1+s1w)+br1")
102 (define_insn_reservation "call_addkpc_s1n" 6
103   (and (eq_attr "type" "call")
104        (and (ne (symbol_ref "TARGET_INSNS_64") (const_int 0))
105             (and (eq_attr "cross" "n")
106                  (and (eq_attr "units" "s")
107                       (eq_attr "dest_regfile" "a")))))
108   "(s1+s1w)+br1,s2+br0+br1")
110 (define_insn_reservation "call_mvk_s1n" 6
111   (and (eq_attr "type" "call")
112        (and (eq (symbol_ref "TARGET_INSNS_64") (const_int 0))
113             (and (eq_attr "cross" "n")
114                  (and (eq_attr "units" "s")
115                       (eq_attr "dest_regfile" "a")))))
116   "(s1+s1w)+br1,s2,s2")
118 (define_insn_reservation "single_s1n" 1
119   (and (eq_attr "type" "single")
120        (and (eq_attr "cross" "n")
121             (and (eq_attr "units" "s")
122                  (eq_attr "dest_regfile" "a"))))
123   "(s1+s1w)")
125 (define_insn_reservation "cmpdp_s1n" 2
126   (and (eq_attr "type" "cmpdp")
127        (and (eq_attr "cross" "n")
128             (and (eq_attr "units" "s")
129                  (eq_attr "dest_regfile" "a"))))
130   "s1,(s1)+s1w")
132 (define_insn_reservation "dp2_s1n" 2
133   (and (eq_attr "type" "dp2")
134        (and (eq_attr "cross" "n")
135             (and (eq_attr "units" "s")
136                  (eq_attr "dest_regfile" "a"))))
137   "s1+s1w,s1w")
139 (define_insn_reservation "fp4_s1n" 4
140   (and (eq_attr "type" "fp4")
141        (and (eq_attr "cross" "n")
142             (and (eq_attr "units" "s")
143                  (eq_attr "dest_regfile" "a"))))
144   "s1,nothing*2,s1w")
146 (define_insn_reservation "mvilc4_s1n" 4
147   (and (eq_attr "type" "mvilc")
148        (and (eq_attr "cross" "n")
149             (and (eq_attr "units" "s")
150                  (eq_attr "dest_regfile" "a"))))
151   "(s1+s1w)")
153 (define_insn_reservation "single_dl1n" 1
154   (and (eq_attr "type" "single")
155        (and (eq_attr "cross" "n")
156             (and (eq_attr "units" "dl")
157                  (eq_attr "dest_regfile" "a"))))
158   "(d1|(l1+l1w))")
160 (define_insn_reservation "single_ds1n" 1
161   (and (eq_attr "type" "single")
162        (and (eq_attr "cross" "n")
163             (and (eq_attr "units" "ds")
164                  (eq_attr "dest_regfile" "a"))))
165   "(d1|(s1+s1w))")
167 (define_insn_reservation "single_ls1n" 1
168   (and (eq_attr "type" "single")
169        (and (eq_attr "cross" "n")
170             (and (eq_attr "units" "ls")
171                  (eq_attr "dest_regfile" "a"))))
172   "((l1+l1w)|(s1+s1w))")
174 (define_insn_reservation "dp2_l1n" 2
175   (and (eq_attr "type" "dp2")
176        (and (eq_attr "cross" "n")
177             (and (eq_attr "units" "l")
178                  (eq_attr "dest_regfile" "a"))))
179   "l1+l1w,l1w")
181 (define_insn_reservation "fp4_ls1n" 4
182   (and (eq_attr "type" "fp4")
183        (and (eq_attr "cross" "n")
184             (and (eq_attr "units" "ls")
185                  (eq_attr "dest_regfile" "a"))))
186   "(fps1+s1,nothing*2,s1w)|(fpl1+l1,nothing*2,l1w)")
188 (define_insn_reservation "adddp_ls1n" 7
189   (and (eq_attr "type" "adddp")
190        (and (eq_attr "cross" "n")
191             (and (eq_attr "units" "ls")
192                  (eq_attr "dest_regfile" "a"))))
193   "(adddps1+(s1)*2,nothing*3,s1w*2)|(adddpl1+(l1)*2,nothing*3,l1w*2)")
195 (define_insn_reservation "single_dls1n" 1
196   (and (eq_attr "type" "single")
197        (and (eq_attr "cross" "n")
198             (and (eq_attr "units" "dls")
199                  (eq_attr "dest_regfile" "a"))))
200   "(d1|(l1+l1w)|(s1+s1w))")
202 (define_insn_reservation "mpy2_m1n" 2
203   (and (eq_attr "type" "mpy2")
204        (and (eq_attr "cross" "n")
205             (and (eq_attr "units" "m")
206                  (eq_attr "dest_regfile" "a"))))
207   "m1,m1w")
209 (define_insn_reservation "mpy4_m1n" 4
210   (and (eq_attr "type" "mpy4")
211        (and (eq_attr "cross" "n")
212             (and (eq_attr "units" "m")
213                  (eq_attr "dest_regfile" "a"))))
214   "m1,nothing,nothing,m1w")
216 (define_insn_reservation "mpydp_m1n" 10
217   (and (eq_attr "type" "mpydp")
218        (and (eq_attr "cross" "n")
219             (and (eq_attr "units" "m")
220                  (eq_attr "dest_regfile" "a"))))
221   "(m1)*4,nothing*4,m1w*2")
223 (define_insn_reservation "mpyspdp_m1n" 7
224   (and (eq_attr "type" "mpyspdp")
225        (and (eq_attr "cross" "n")
226             (and (eq_attr "units" "m")
227                  (eq_attr "dest_regfile" "a"))))
228   "(m1)*2,nothing*3,m1w*2")
230 (define_insn_reservation "mpysp2dp_m1n" 5
231   (and (eq_attr "type" "mpysp2dp")
232        (and (eq_attr "cross" "n")
233             (and (eq_attr "units" "m")
234                  (eq_attr "dest_regfile" "a"))))
235   "m1,nothing*2,m1w*2")
237 ;; Definitions for side 2, cross n
239 ;; Scheduling description for TI C6X.
240 ;; Copyright (C) 2010-2018 Free Software Foundation, Inc.
241 ;; Contributed by Bernd Schmidt <bernds@codesourcery.com>
242 ;; Contributed by CodeSourcery.
244 ;; This file is part of GCC.
246 ;; GCC is free software; you can redistribute it and/or modify
247 ;; it under the terms of the GNU General Public License as published by
248 ;; the Free Software Foundation; either version 3, or (at your option)
249 ;; any later version.
251 ;; GCC is distributed in the hope that it will be useful,
252 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
253 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
254 ;; GNU General Public License for more details.
256 ;; You should have received a copy of the GNU General Public License
257 ;; along with GCC; see the file COPYING3.  If not see
258 ;; <http://www.gnu.org/licenses/>.
260 ;; Input file for gensched.sh We process this file multiple times,
261 ;; replacing 2 with either 1 or 2 for each of the sides of the
262 ;; machine, and b correspondingly with "a" or "b".  n and
263 ;;  are replaced with yes/no and the appropriate reservation.
265 (define_insn_reservation "load_d2n" 5
266   (and (eq_attr "type" "load")
267        (and (eq_attr "cross" "n")
268             (and (eq_attr "units" "d_addr")
269                  (eq_attr "addr_regfile" "b"))))
270   "d2+t2")
272 (define_insn_reservation "store_d2n" 1
273   (and (eq_attr "type" "store")
274        (and (eq_attr "cross" "n")
275             (and (eq_attr "units" "d_addr")
276                  (eq_attr "addr_regfile" "b"))))
277   "d2+t2")
279 (define_insn_reservation "loadn_d2n" 5
280   (and (eq_attr "type" "loadn")
281        (and (eq_attr "cross" "n")
282             (and (eq_attr "units" "d_addr")
283                  (eq_attr "addr_regfile" "b"))))
284   "d2+t1+t2")
286 (define_insn_reservation "storen_d2n" 1
287   (and (eq_attr "type" "storen")
288        (and (eq_attr "cross" "n")
289             (and (eq_attr "units" "d_addr")
290                  (eq_attr "addr_regfile" "b"))))
291   "d2+t1+t2")
293 (define_insn_reservation "single_d2n" 1
294   (and (eq_attr "type" "single")
295        (and (eq_attr "cross" "n")
296             (and (eq_attr "units" "d")
297                  (eq_attr "dest_regfile" "b"))))
298   "d2")
300 (define_insn_reservation "single_l2n" 1
301   (and (eq_attr "type" "single")
302        (and (eq_attr "cross" "n")
303             (and (eq_attr "units" "l")
304                  (eq_attr "dest_regfile" "b"))))
305   "l2+l2w")
307 (define_insn_reservation "fp4_l2n" 4
308   (and (eq_attr "type" "fp4")
309        (and (eq_attr "cross" "n")
310             (and (eq_attr "units" "l")
311                  (eq_attr "dest_regfile" "b"))))
312   "l2,nothing*2,l2w")
314 (define_insn_reservation "intdp_l2n" 5
315   (and (eq_attr "type" "intdp")
316        (and (eq_attr "cross" "n")
317             (and (eq_attr "units" "l")
318                  (eq_attr "dest_regfile" "b"))))
319   "l2,nothing*2,l2w*2")
321 (define_insn_reservation "adddp_l2n" 7
322   (and (eq_attr "type" "adddp")
323        (and (eq_attr "cross" "n")
324             (and (eq_attr "units" "l")
325                  (eq_attr "dest_regfile" "b"))))
326   "(l2)*2,nothing*3,l2w*2")
328 (define_insn_reservation "branch_s2n" 6
329   (and (eq_attr "type" "branch")
330        (and (eq_attr "cross" "n")
331             (and (eq_attr "units" "s")
332                  (eq_attr "dest_regfile" "b"))))
333   "(s2+s2w)+br1")
335 (define_insn_reservation "call_addkpc_s2n" 6
336   (and (eq_attr "type" "call")
337        (and (ne (symbol_ref "TARGET_INSNS_64") (const_int 0))
338             (and (eq_attr "cross" "n")
339                  (and (eq_attr "units" "s")
340                       (eq_attr "dest_regfile" "b")))))
341   "(s2+s2w)+br1,s2+br0+br1")
343 (define_insn_reservation "call_mvk_s2n" 6
344   (and (eq_attr "type" "call")
345        (and (eq (symbol_ref "TARGET_INSNS_64") (const_int 0))
346             (and (eq_attr "cross" "n")
347                  (and (eq_attr "units" "s")
348                       (eq_attr "dest_regfile" "b")))))
349   "(s2+s2w)+br1,s2,s2")
351 (define_insn_reservation "single_s2n" 1
352   (and (eq_attr "type" "single")
353        (and (eq_attr "cross" "n")
354             (and (eq_attr "units" "s")
355                  (eq_attr "dest_regfile" "b"))))
356   "(s2+s2w)")
358 (define_insn_reservation "cmpdp_s2n" 2
359   (and (eq_attr "type" "cmpdp")
360        (and (eq_attr "cross" "n")
361             (and (eq_attr "units" "s")
362                  (eq_attr "dest_regfile" "b"))))
363   "s2,(s2)+s2w")
365 (define_insn_reservation "dp2_s2n" 2
366   (and (eq_attr "type" "dp2")
367        (and (eq_attr "cross" "n")
368             (and (eq_attr "units" "s")
369                  (eq_attr "dest_regfile" "b"))))
370   "s2+s2w,s2w")
372 (define_insn_reservation "fp4_s2n" 4
373   (and (eq_attr "type" "fp4")
374        (and (eq_attr "cross" "n")
375             (and (eq_attr "units" "s")
376                  (eq_attr "dest_regfile" "b"))))
377   "s2,nothing*2,s2w")
379 (define_insn_reservation "mvilc4_s2n" 4
380   (and (eq_attr "type" "mvilc")
381        (and (eq_attr "cross" "n")
382             (and (eq_attr "units" "s")
383                  (eq_attr "dest_regfile" "b"))))
384   "(s2+s2w)")
386 (define_insn_reservation "single_dl2n" 1
387   (and (eq_attr "type" "single")
388        (and (eq_attr "cross" "n")
389             (and (eq_attr "units" "dl")
390                  (eq_attr "dest_regfile" "b"))))
391   "(d2|(l2+l2w))")
393 (define_insn_reservation "single_ds2n" 1
394   (and (eq_attr "type" "single")
395        (and (eq_attr "cross" "n")
396             (and (eq_attr "units" "ds")
397                  (eq_attr "dest_regfile" "b"))))
398   "(d2|(s2+s2w))")
400 (define_insn_reservation "single_ls2n" 1
401   (and (eq_attr "type" "single")
402        (and (eq_attr "cross" "n")
403             (and (eq_attr "units" "ls")
404                  (eq_attr "dest_regfile" "b"))))
405   "((l2+l2w)|(s2+s2w))")
407 (define_insn_reservation "dp2_l2n" 2
408   (and (eq_attr "type" "dp2")
409        (and (eq_attr "cross" "n")
410             (and (eq_attr "units" "l")
411                  (eq_attr "dest_regfile" "b"))))
412   "l2+l2w,l2w")
414 (define_insn_reservation "fp4_ls2n" 4
415   (and (eq_attr "type" "fp4")
416        (and (eq_attr "cross" "n")
417             (and (eq_attr "units" "ls")
418                  (eq_attr "dest_regfile" "b"))))
419   "(fps2+s2,nothing*2,s2w)|(fpl2+l2,nothing*2,l2w)")
421 (define_insn_reservation "adddp_ls2n" 7
422   (and (eq_attr "type" "adddp")
423        (and (eq_attr "cross" "n")
424             (and (eq_attr "units" "ls")
425                  (eq_attr "dest_regfile" "b"))))
426   "(adddps2+(s2)*2,nothing*3,s2w*2)|(adddpl2+(l2)*2,nothing*3,l2w*2)")
428 (define_insn_reservation "single_dls2n" 1
429   (and (eq_attr "type" "single")
430        (and (eq_attr "cross" "n")
431             (and (eq_attr "units" "dls")
432                  (eq_attr "dest_regfile" "b"))))
433   "(d2|(l2+l2w)|(s2+s2w))")
435 (define_insn_reservation "mpy2_m2n" 2
436   (and (eq_attr "type" "mpy2")
437        (and (eq_attr "cross" "n")
438             (and (eq_attr "units" "m")
439                  (eq_attr "dest_regfile" "b"))))
440   "m2,m2w")
442 (define_insn_reservation "mpy4_m2n" 4
443   (and (eq_attr "type" "mpy4")
444        (and (eq_attr "cross" "n")
445             (and (eq_attr "units" "m")
446                  (eq_attr "dest_regfile" "b"))))
447   "m2,nothing,nothing,m2w")
449 (define_insn_reservation "mpydp_m2n" 10
450   (and (eq_attr "type" "mpydp")
451        (and (eq_attr "cross" "n")
452             (and (eq_attr "units" "m")
453                  (eq_attr "dest_regfile" "b"))))
454   "(m2)*4,nothing*4,m2w*2")
456 (define_insn_reservation "mpyspdp_m2n" 7
457   (and (eq_attr "type" "mpyspdp")
458        (and (eq_attr "cross" "n")
459             (and (eq_attr "units" "m")
460                  (eq_attr "dest_regfile" "b"))))
461   "(m2)*2,nothing*3,m2w*2")
463 (define_insn_reservation "mpysp2dp_m2n" 5
464   (and (eq_attr "type" "mpysp2dp")
465        (and (eq_attr "cross" "n")
466             (and (eq_attr "units" "m")
467                  (eq_attr "dest_regfile" "b"))))
468   "m2,nothing*2,m2w*2")
470 ;; Definitions for side 1, cross y
472 ;; Scheduling description for TI C6X.
473 ;; Copyright (C) 2010-2018 Free Software Foundation, Inc.
474 ;; Contributed by Bernd Schmidt <bernds@codesourcery.com>
475 ;; Contributed by CodeSourcery.
477 ;; This file is part of GCC.
479 ;; GCC is free software; you can redistribute it and/or modify
480 ;; it under the terms of the GNU General Public License as published by
481 ;; the Free Software Foundation; either version 3, or (at your option)
482 ;; any later version.
484 ;; GCC is distributed in the hope that it will be useful,
485 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
486 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
487 ;; GNU General Public License for more details.
489 ;; You should have received a copy of the GNU General Public License
490 ;; along with GCC; see the file COPYING3.  If not see
491 ;; <http://www.gnu.org/licenses/>.
493 ;; Input file for gensched.sh We process this file multiple times,
494 ;; replacing 1 with either 1 or 2 for each of the sides of the
495 ;; machine, and a correspondingly with "a" or "b".  y and
496 ;; +x1 are replaced with yes/no and the appropriate reservation.
498 (define_insn_reservation "load_d1y" 5
499   (and (eq_attr "type" "load")
500        (and (eq_attr "cross" "y")
501             (and (eq_attr "units" "d_addr")
502                  (eq_attr "addr_regfile" "a"))))
503   "d1+t2")
505 (define_insn_reservation "store_d1y" 1
506   (and (eq_attr "type" "store")
507        (and (eq_attr "cross" "y")
508             (and (eq_attr "units" "d_addr")
509                  (eq_attr "addr_regfile" "a"))))
510   "d1+t2")
512 (define_insn_reservation "loadn_d1y" 5
513   (and (eq_attr "type" "loadn")
514        (and (eq_attr "cross" "y")
515             (and (eq_attr "units" "d_addr")
516                  (eq_attr "addr_regfile" "a"))))
517   "d1+t1+t2")
519 (define_insn_reservation "storen_d1y" 1
520   (and (eq_attr "type" "storen")
521        (and (eq_attr "cross" "y")
522             (and (eq_attr "units" "d_addr")
523                  (eq_attr "addr_regfile" "a"))))
524   "d1+t1+t2")
526 (define_insn_reservation "single_d1y" 1
527   (and (eq_attr "type" "single")
528        (and (eq_attr "cross" "y")
529             (and (eq_attr "units" "d")
530                  (eq_attr "dest_regfile" "a"))))
531   "d1+x1")
533 (define_insn_reservation "single_l1y" 1
534   (and (eq_attr "type" "single")
535        (and (eq_attr "cross" "y")
536             (and (eq_attr "units" "l")
537                  (eq_attr "dest_regfile" "a"))))
538   "l1+l1w+x1")
540 (define_insn_reservation "fp4_l1y" 4
541   (and (eq_attr "type" "fp4")
542        (and (eq_attr "cross" "y")
543             (and (eq_attr "units" "l")
544                  (eq_attr "dest_regfile" "a"))))
545   "l1+x1,nothing*2,l1w")
547 (define_insn_reservation "intdp_l1y" 5
548   (and (eq_attr "type" "intdp")
549        (and (eq_attr "cross" "y")
550             (and (eq_attr "units" "l")
551                  (eq_attr "dest_regfile" "a"))))
552   "l1+x1,nothing*2,l1w*2")
554 (define_insn_reservation "adddp_l1y" 7
555   (and (eq_attr "type" "adddp")
556        (and (eq_attr "cross" "y")
557             (and (eq_attr "units" "l")
558                  (eq_attr "dest_regfile" "a"))))
559   "(l1+x1)*2,nothing*3,l1w*2")
561 (define_insn_reservation "branch_s1y" 6
562   (and (eq_attr "type" "branch")
563        (and (eq_attr "cross" "y")
564             (and (eq_attr "units" "s")
565                  (eq_attr "dest_regfile" "a"))))
566   "(s1+s1w)+x1+br1")
568 (define_insn_reservation "call_addkpc_s1y" 6
569   (and (eq_attr "type" "call")
570        (and (ne (symbol_ref "TARGET_INSNS_64") (const_int 0))
571             (and (eq_attr "cross" "y")
572                  (and (eq_attr "units" "s")
573                       (eq_attr "dest_regfile" "a")))))
574   "(s1+s1w)+x1+br1,s2+br0+br1")
576 (define_insn_reservation "call_mvk_s1y" 6
577   (and (eq_attr "type" "call")
578        (and (eq (symbol_ref "TARGET_INSNS_64") (const_int 0))
579             (and (eq_attr "cross" "y")
580                  (and (eq_attr "units" "s")
581                       (eq_attr "dest_regfile" "a")))))
582   "(s1+s1w)+x1+br1,s2,s2")
584 (define_insn_reservation "single_s1y" 1
585   (and (eq_attr "type" "single")
586        (and (eq_attr "cross" "y")
587             (and (eq_attr "units" "s")
588                  (eq_attr "dest_regfile" "a"))))
589   "(s1+s1w)+x1")
591 (define_insn_reservation "cmpdp_s1y" 2
592   (and (eq_attr "type" "cmpdp")
593        (and (eq_attr "cross" "y")
594             (and (eq_attr "units" "s")
595                  (eq_attr "dest_regfile" "a"))))
596   "s1+x1,(s1+x1)+s1w")
598 (define_insn_reservation "dp2_s1y" 2
599   (and (eq_attr "type" "dp2")
600        (and (eq_attr "cross" "y")
601             (and (eq_attr "units" "s")
602                  (eq_attr "dest_regfile" "a"))))
603   "s1+s1w+x1,s1w")
605 (define_insn_reservation "fp4_s1y" 4
606   (and (eq_attr "type" "fp4")
607        (and (eq_attr "cross" "y")
608             (and (eq_attr "units" "s")
609                  (eq_attr "dest_regfile" "a"))))
610   "s1+x1,nothing*2,s1w")
612 (define_insn_reservation "mvilc4_s1y" 4
613   (and (eq_attr "type" "mvilc")
614        (and (eq_attr "cross" "y")
615             (and (eq_attr "units" "s")
616                  (eq_attr "dest_regfile" "a"))))
617   "(s1+s1w)+x1")
619 (define_insn_reservation "single_dl1y" 1
620   (and (eq_attr "type" "single")
621        (and (eq_attr "cross" "y")
622             (and (eq_attr "units" "dl")
623                  (eq_attr "dest_regfile" "a"))))
624   "(d1|(l1+l1w))+x1")
626 (define_insn_reservation "single_ds1y" 1
627   (and (eq_attr "type" "single")
628        (and (eq_attr "cross" "y")
629             (and (eq_attr "units" "ds")
630                  (eq_attr "dest_regfile" "a"))))
631   "(d1|(s1+s1w))+x1")
633 (define_insn_reservation "single_ls1y" 1
634   (and (eq_attr "type" "single")
635        (and (eq_attr "cross" "y")
636             (and (eq_attr "units" "ls")
637                  (eq_attr "dest_regfile" "a"))))
638   "((l1+l1w)|(s1+s1w))+x1")
640 (define_insn_reservation "dp2_l1y" 2
641   (and (eq_attr "type" "dp2")
642        (and (eq_attr "cross" "y")
643             (and (eq_attr "units" "l")
644                  (eq_attr "dest_regfile" "a"))))
645   "l1+l1w+x1,l1w")
647 (define_insn_reservation "fp4_ls1y" 4
648   (and (eq_attr "type" "fp4")
649        (and (eq_attr "cross" "y")
650             (and (eq_attr "units" "ls")
651                  (eq_attr "dest_regfile" "a"))))
652   "(fps1+s1+x1,nothing*2,s1w)|(fpl1+l1+x1,nothing*2,l1w)")
654 (define_insn_reservation "adddp_ls1y" 7
655   (and (eq_attr "type" "adddp")
656        (and (eq_attr "cross" "y")
657             (and (eq_attr "units" "ls")
658                  (eq_attr "dest_regfile" "a"))))
659   "(adddps1+(s1+x1)*2,nothing*3,s1w*2)|(adddpl1+(l1+x1)*2,nothing*3,l1w*2)")
661 (define_insn_reservation "single_dls1y" 1
662   (and (eq_attr "type" "single")
663        (and (eq_attr "cross" "y")
664             (and (eq_attr "units" "dls")
665                  (eq_attr "dest_regfile" "a"))))
666   "(d1|(l1+l1w)|(s1+s1w))+x1")
668 (define_insn_reservation "mpy2_m1y" 2
669   (and (eq_attr "type" "mpy2")
670        (and (eq_attr "cross" "y")
671             (and (eq_attr "units" "m")
672                  (eq_attr "dest_regfile" "a"))))
673   "m1+x1,m1w")
675 (define_insn_reservation "mpy4_m1y" 4
676   (and (eq_attr "type" "mpy4")
677        (and (eq_attr "cross" "y")
678             (and (eq_attr "units" "m")
679                  (eq_attr "dest_regfile" "a"))))
680   "m1+x1,nothing,nothing,m1w")
682 (define_insn_reservation "mpydp_m1y" 10
683   (and (eq_attr "type" "mpydp")
684        (and (eq_attr "cross" "y")
685             (and (eq_attr "units" "m")
686                  (eq_attr "dest_regfile" "a"))))
687   "(m1+x1)*4,nothing*4,m1w*2")
689 (define_insn_reservation "mpyspdp_m1y" 7
690   (and (eq_attr "type" "mpyspdp")
691        (and (eq_attr "cross" "y")
692             (and (eq_attr "units" "m")
693                  (eq_attr "dest_regfile" "a"))))
694   "(m1+x1)*2,nothing*3,m1w*2")
696 (define_insn_reservation "mpysp2dp_m1y" 5
697   (and (eq_attr "type" "mpysp2dp")
698        (and (eq_attr "cross" "y")
699             (and (eq_attr "units" "m")
700                  (eq_attr "dest_regfile" "a"))))
701   "m1+x1,nothing*2,m1w*2")
703 ;; Definitions for side 2, cross y
705 ;; Scheduling description for TI C6X.
706 ;; Copyright (C) 2010-2018 Free Software Foundation, Inc.
707 ;; Contributed by Bernd Schmidt <bernds@codesourcery.com>
708 ;; Contributed by CodeSourcery.
710 ;; This file is part of GCC.
712 ;; GCC is free software; you can redistribute it and/or modify
713 ;; it under the terms of the GNU General Public License as published by
714 ;; the Free Software Foundation; either version 3, or (at your option)
715 ;; any later version.
717 ;; GCC is distributed in the hope that it will be useful,
718 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
719 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
720 ;; GNU General Public License for more details.
722 ;; You should have received a copy of the GNU General Public License
723 ;; along with GCC; see the file COPYING3.  If not see
724 ;; <http://www.gnu.org/licenses/>.
726 ;; Input file for gensched.sh We process this file multiple times,
727 ;; replacing 2 with either 1 or 2 for each of the sides of the
728 ;; machine, and b correspondingly with "a" or "b".  y and
729 ;; +x2 are replaced with yes/no and the appropriate reservation.
731 (define_insn_reservation "load_d2y" 5
732   (and (eq_attr "type" "load")
733        (and (eq_attr "cross" "y")
734             (and (eq_attr "units" "d_addr")
735                  (eq_attr "addr_regfile" "b"))))
736   "d2+t1")
738 (define_insn_reservation "store_d2y" 1
739   (and (eq_attr "type" "store")
740        (and (eq_attr "cross" "y")
741             (and (eq_attr "units" "d_addr")
742                  (eq_attr "addr_regfile" "b"))))
743   "d2+t1")
745 (define_insn_reservation "loadn_d2y" 5
746   (and (eq_attr "type" "loadn")
747        (and (eq_attr "cross" "y")
748             (and (eq_attr "units" "d_addr")
749                  (eq_attr "addr_regfile" "b"))))
750   "d2+t1+t2")
752 (define_insn_reservation "storen_d2y" 1
753   (and (eq_attr "type" "storen")
754        (and (eq_attr "cross" "y")
755             (and (eq_attr "units" "d_addr")
756                  (eq_attr "addr_regfile" "b"))))
757   "d2+t1+t2")
759 (define_insn_reservation "single_d2y" 1
760   (and (eq_attr "type" "single")
761        (and (eq_attr "cross" "y")
762             (and (eq_attr "units" "d")
763                  (eq_attr "dest_regfile" "b"))))
764   "d2+x2")
766 (define_insn_reservation "single_l2y" 1
767   (and (eq_attr "type" "single")
768        (and (eq_attr "cross" "y")
769             (and (eq_attr "units" "l")
770                  (eq_attr "dest_regfile" "b"))))
771   "l2+l2w+x2")
773 (define_insn_reservation "fp4_l2y" 4
774   (and (eq_attr "type" "fp4")
775        (and (eq_attr "cross" "y")
776             (and (eq_attr "units" "l")
777                  (eq_attr "dest_regfile" "b"))))
778   "l2+x2,nothing*2,l2w")
780 (define_insn_reservation "intdp_l2y" 5
781   (and (eq_attr "type" "intdp")
782        (and (eq_attr "cross" "y")
783             (and (eq_attr "units" "l")
784                  (eq_attr "dest_regfile" "b"))))
785   "l2+x2,nothing*2,l2w*2")
787 (define_insn_reservation "adddp_l2y" 7
788   (and (eq_attr "type" "adddp")
789        (and (eq_attr "cross" "y")
790             (and (eq_attr "units" "l")
791                  (eq_attr "dest_regfile" "b"))))
792   "(l2+x2)*2,nothing*3,l2w*2")
794 (define_insn_reservation "branch_s2y" 6
795   (and (eq_attr "type" "branch")
796        (and (eq_attr "cross" "y")
797             (and (eq_attr "units" "s")
798                  (eq_attr "dest_regfile" "b"))))
799   "(s2+s2w)+x2+br1")
801 (define_insn_reservation "call_addkpc_s2y" 6
802   (and (eq_attr "type" "call")
803        (and (ne (symbol_ref "TARGET_INSNS_64") (const_int 0))
804             (and (eq_attr "cross" "y")
805                  (and (eq_attr "units" "s")
806                       (eq_attr "dest_regfile" "b")))))
807   "(s2+s2w)+x2+br1,s2+br0+br1")
809 (define_insn_reservation "call_mvk_s2y" 6
810   (and (eq_attr "type" "call")
811        (and (eq (symbol_ref "TARGET_INSNS_64") (const_int 0))
812             (and (eq_attr "cross" "y")
813                  (and (eq_attr "units" "s")
814                       (eq_attr "dest_regfile" "b")))))
815   "(s2+s2w)+x2+br1,s2,s2")
817 (define_insn_reservation "single_s2y" 1
818   (and (eq_attr "type" "single")
819        (and (eq_attr "cross" "y")
820             (and (eq_attr "units" "s")
821                  (eq_attr "dest_regfile" "b"))))
822   "(s2+s2w)+x2")
824 (define_insn_reservation "cmpdp_s2y" 2
825   (and (eq_attr "type" "cmpdp")
826        (and (eq_attr "cross" "y")
827             (and (eq_attr "units" "s")
828                  (eq_attr "dest_regfile" "b"))))
829   "s2+x2,(s2+x2)+s2w")
831 (define_insn_reservation "dp2_s2y" 2
832   (and (eq_attr "type" "dp2")
833        (and (eq_attr "cross" "y")
834             (and (eq_attr "units" "s")
835                  (eq_attr "dest_regfile" "b"))))
836   "s2+s2w+x2,s2w")
838 (define_insn_reservation "fp4_s2y" 4
839   (and (eq_attr "type" "fp4")
840        (and (eq_attr "cross" "y")
841             (and (eq_attr "units" "s")
842                  (eq_attr "dest_regfile" "b"))))
843   "s2+x2,nothing*2,s2w")
845 (define_insn_reservation "mvilc4_s2y" 4
846   (and (eq_attr "type" "mvilc")
847        (and (eq_attr "cross" "y")
848             (and (eq_attr "units" "s")
849                  (eq_attr "dest_regfile" "b"))))
850   "(s2+s2w)+x2")
852 (define_insn_reservation "single_dl2y" 1
853   (and (eq_attr "type" "single")
854        (and (eq_attr "cross" "y")
855             (and (eq_attr "units" "dl")
856                  (eq_attr "dest_regfile" "b"))))
857   "(d2|(l2+l2w))+x2")
859 (define_insn_reservation "single_ds2y" 1
860   (and (eq_attr "type" "single")
861        (and (eq_attr "cross" "y")
862             (and (eq_attr "units" "ds")
863                  (eq_attr "dest_regfile" "b"))))
864   "(d2|(s2+s2w))+x2")
866 (define_insn_reservation "single_ls2y" 1
867   (and (eq_attr "type" "single")
868        (and (eq_attr "cross" "y")
869             (and (eq_attr "units" "ls")
870                  (eq_attr "dest_regfile" "b"))))
871   "((l2+l2w)|(s2+s2w))+x2")
873 (define_insn_reservation "dp2_l2y" 2
874   (and (eq_attr "type" "dp2")
875        (and (eq_attr "cross" "y")
876             (and (eq_attr "units" "l")
877                  (eq_attr "dest_regfile" "b"))))
878   "l2+l2w+x2,l2w")
880 (define_insn_reservation "fp4_ls2y" 4
881   (and (eq_attr "type" "fp4")
882        (and (eq_attr "cross" "y")
883             (and (eq_attr "units" "ls")
884                  (eq_attr "dest_regfile" "b"))))
885   "(fps2+s2+x2,nothing*2,s2w)|(fpl2+l2+x2,nothing*2,l2w)")
887 (define_insn_reservation "adddp_ls2y" 7
888   (and (eq_attr "type" "adddp")
889        (and (eq_attr "cross" "y")
890             (and (eq_attr "units" "ls")
891                  (eq_attr "dest_regfile" "b"))))
892   "(adddps2+(s2+x2)*2,nothing*3,s2w*2)|(adddpl2+(l2+x2)*2,nothing*3,l2w*2)")
894 (define_insn_reservation "single_dls2y" 1
895   (and (eq_attr "type" "single")
896        (and (eq_attr "cross" "y")
897             (and (eq_attr "units" "dls")
898                  (eq_attr "dest_regfile" "b"))))
899   "(d2|(l2+l2w)|(s2+s2w))+x2")
901 (define_insn_reservation "mpy2_m2y" 2
902   (and (eq_attr "type" "mpy2")
903        (and (eq_attr "cross" "y")
904             (and (eq_attr "units" "m")
905                  (eq_attr "dest_regfile" "b"))))
906   "m2+x2,m2w")
908 (define_insn_reservation "mpy4_m2y" 4
909   (and (eq_attr "type" "mpy4")
910        (and (eq_attr "cross" "y")
911             (and (eq_attr "units" "m")
912                  (eq_attr "dest_regfile" "b"))))
913   "m2+x2,nothing,nothing,m2w")
915 (define_insn_reservation "mpydp_m2y" 10
916   (and (eq_attr "type" "mpydp")
917        (and (eq_attr "cross" "y")
918             (and (eq_attr "units" "m")
919                  (eq_attr "dest_regfile" "b"))))
920   "(m2+x2)*4,nothing*4,m2w*2")
922 (define_insn_reservation "mpyspdp_m2y" 7
923   (and (eq_attr "type" "mpyspdp")
924        (and (eq_attr "cross" "y")
925             (and (eq_attr "units" "m")
926                  (eq_attr "dest_regfile" "b"))))
927   "(m2+x2)*2,nothing*3,m2w*2")
929 (define_insn_reservation "mpysp2dp_m2y" 5
930   (and (eq_attr "type" "mpysp2dp")
931        (and (eq_attr "cross" "y")
932             (and (eq_attr "units" "m")
933                  (eq_attr "dest_regfile" "b"))))
934   "m2+x2,nothing*2,m2w*2")