]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/c6x/c6x-sched.md.in
Update copyright years.
[thirdparty/gcc.git] / gcc / config / c6x / c6x-sched.md.in
1 ;; Scheduling description for TI C6X.
2 ;; Copyright (C) 2010-2021 Free Software Foundation, Inc.
3 ;; Contributed by Bernd Schmidt <bernds@codesourcery.com>
4 ;; Contributed by CodeSourcery.
5 ;;
6 ;; This file is part of GCC.
7 ;;
8 ;; GCC is free software; you can redistribute it and/or modify
9 ;; it under the terms of the GNU General Public License as published by
10 ;; the Free Software Foundation; either version 3, or (at your option)
11 ;; any later version.
12 ;;
13 ;; GCC is distributed in the hope that it will be useful,
14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ;; GNU General Public License for more details.
17 ;;
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/>.
21
22 ;; Input file for gensched.sh We process this file multiple times,
23 ;; replacing _N_ with either 1 or 2 for each of the sides of the
24 ;; machine, and _RF_ correspondingly with "a" or "b". _CROSS_ and
25 ;; _CUNIT_ are replaced with yes/no and the appropriate reservation.
26
27 (define_insn_reservation "load_d_N__CROSS_" 5
28 (and (eq_attr "type" "load")
29 (and (eq_attr "cross" "_CROSS_")
30 (and (eq_attr "units" "d_addr")
31 (eq_attr "addr_regfile" "_RF_"))))
32 "d_N_+t_NX_")
33
34 (define_insn_reservation "store_d_N__CROSS_" 1
35 (and (eq_attr "type" "store")
36 (and (eq_attr "cross" "_CROSS_")
37 (and (eq_attr "units" "d_addr")
38 (eq_attr "addr_regfile" "_RF_"))))
39 "d_N_+t_NX_")
40
41 (define_insn_reservation "loadn_d_N__CROSS_" 5
42 (and (eq_attr "type" "loadn")
43 (and (eq_attr "cross" "_CROSS_")
44 (and (eq_attr "units" "d_addr")
45 (eq_attr "addr_regfile" "_RF_"))))
46 "d_N_+t1+t2")
47
48 (define_insn_reservation "storen_d_N__CROSS_" 1
49 (and (eq_attr "type" "storen")
50 (and (eq_attr "cross" "_CROSS_")
51 (and (eq_attr "units" "d_addr")
52 (eq_attr "addr_regfile" "_RF_"))))
53 "d_N_+t1+t2")
54
55 (define_insn_reservation "single_d_N__CROSS_" 1
56 (and (eq_attr "type" "single")
57 (and (eq_attr "cross" "_CROSS_")
58 (and (eq_attr "units" "d")
59 (eq_attr "dest_regfile" "_RF_"))))
60 "d_N__CUNIT_")
61
62 (define_insn_reservation "single_l_N__CROSS_" 1
63 (and (eq_attr "type" "single")
64 (and (eq_attr "cross" "_CROSS_")
65 (and (eq_attr "units" "l")
66 (eq_attr "dest_regfile" "_RF_"))))
67 "l_N_+l_N_w_CUNIT_")
68
69 (define_insn_reservation "fp4_l_N__CROSS_" 4
70 (and (eq_attr "type" "fp4")
71 (and (eq_attr "cross" "_CROSS_")
72 (and (eq_attr "units" "l")
73 (eq_attr "dest_regfile" "_RF_"))))
74 "l_N__CUNIT_,nothing*2,l_N_w")
75
76 (define_insn_reservation "intdp_l_N__CROSS_" 5
77 (and (eq_attr "type" "intdp")
78 (and (eq_attr "cross" "_CROSS_")
79 (and (eq_attr "units" "l")
80 (eq_attr "dest_regfile" "_RF_"))))
81 "l_N__CUNIT_,nothing*2,l_N_w*2")
82
83 (define_insn_reservation "adddp_l_N__CROSS_" 7
84 (and (eq_attr "type" "adddp")
85 (and (eq_attr "cross" "_CROSS_")
86 (and (eq_attr "units" "l")
87 (eq_attr "dest_regfile" "_RF_"))))
88 "(l_N__CUNIT_)*2,nothing*3,l_N_w*2")
89
90 (define_insn_reservation "branch_s_N__CROSS_" 6
91 (and (eq_attr "type" "branch")
92 (and (eq_attr "cross" "_CROSS_")
93 (and (eq_attr "units" "s")
94 (eq_attr "dest_regfile" "_RF_"))))
95 "(s_N_+s_N_w)_CUNIT_+br1")
96
97 (define_insn_reservation "call_addkpc_s_N__CROSS_" 6
98 (and (eq_attr "type" "call")
99 (and (ne (symbol_ref "TARGET_INSNS_64") (const_int 0))
100 (and (eq_attr "cross" "_CROSS_")
101 (and (eq_attr "units" "s")
102 (eq_attr "dest_regfile" "_RF_")))))
103 "(s_N_+s_N_w)_CUNIT_+br1,s2+br0+br1")
104
105 (define_insn_reservation "call_mvk_s_N__CROSS_" 6
106 (and (eq_attr "type" "call")
107 (and (eq (symbol_ref "TARGET_INSNS_64") (const_int 0))
108 (and (eq_attr "cross" "_CROSS_")
109 (and (eq_attr "units" "s")
110 (eq_attr "dest_regfile" "_RF_")))))
111 "(s_N_+s_N_w)_CUNIT_+br1,s2,s2")
112
113 (define_insn_reservation "single_s_N__CROSS_" 1
114 (and (eq_attr "type" "single")
115 (and (eq_attr "cross" "_CROSS_")
116 (and (eq_attr "units" "s")
117 (eq_attr "dest_regfile" "_RF_"))))
118 "(s_N_+s_N_w)_CUNIT_")
119
120 (define_insn_reservation "cmpdp_s_N__CROSS_" 2
121 (and (eq_attr "type" "cmpdp")
122 (and (eq_attr "cross" "_CROSS_")
123 (and (eq_attr "units" "s")
124 (eq_attr "dest_regfile" "_RF_"))))
125 "s_N__CUNIT_,(s_N__CUNIT_)+s_N_w")
126
127 (define_insn_reservation "dp2_s_N__CROSS_" 2
128 (and (eq_attr "type" "dp2")
129 (and (eq_attr "cross" "_CROSS_")
130 (and (eq_attr "units" "s")
131 (eq_attr "dest_regfile" "_RF_"))))
132 "s_N_+s_N_w_CUNIT_,s_N_w")
133
134 (define_insn_reservation "fp4_s_N__CROSS_" 4
135 (and (eq_attr "type" "fp4")
136 (and (eq_attr "cross" "_CROSS_")
137 (and (eq_attr "units" "s")
138 (eq_attr "dest_regfile" "_RF_"))))
139 "s_N__CUNIT_,nothing*2,s_N_w")
140
141 (define_insn_reservation "mvilc4_s_N__CROSS_" 4
142 (and (eq_attr "type" "mvilc")
143 (and (eq_attr "cross" "_CROSS_")
144 (and (eq_attr "units" "s")
145 (eq_attr "dest_regfile" "_RF_"))))
146 "(s_N_+s_N_w)_CUNIT_")
147
148 (define_insn_reservation "single_dl_N__CROSS_" 1
149 (and (eq_attr "type" "single")
150 (and (eq_attr "cross" "_CROSS_")
151 (and (eq_attr "units" "dl")
152 (eq_attr "dest_regfile" "_RF_"))))
153 "(d_N_|(l_N_+l_N_w))_CUNIT_")
154
155 (define_insn_reservation "single_ds_N__CROSS_" 1
156 (and (eq_attr "type" "single")
157 (and (eq_attr "cross" "_CROSS_")
158 (and (eq_attr "units" "ds")
159 (eq_attr "dest_regfile" "_RF_"))))
160 "(d_N_|(s_N_+s_N_w))_CUNIT_")
161
162 (define_insn_reservation "single_ls_N__CROSS_" 1
163 (and (eq_attr "type" "single")
164 (and (eq_attr "cross" "_CROSS_")
165 (and (eq_attr "units" "ls")
166 (eq_attr "dest_regfile" "_RF_"))))
167 "((l_N_+l_N_w)|(s_N_+s_N_w))_CUNIT_")
168
169 (define_insn_reservation "dp2_l_N__CROSS_" 2
170 (and (eq_attr "type" "dp2")
171 (and (eq_attr "cross" "_CROSS_")
172 (and (eq_attr "units" "l")
173 (eq_attr "dest_regfile" "_RF_"))))
174 "l_N_+l_N_w_CUNIT_,l_N_w")
175
176 (define_insn_reservation "fp4_ls_N__CROSS_" 4
177 (and (eq_attr "type" "fp4")
178 (and (eq_attr "cross" "_CROSS_")
179 (and (eq_attr "units" "ls")
180 (eq_attr "dest_regfile" "_RF_"))))
181 "(fps_N_+s_N__CUNIT_,nothing*2,s_N_w)|(fpl_N_+l_N__CUNIT_,nothing*2,l_N_w)")
182
183 (define_insn_reservation "adddp_ls_N__CROSS_" 7
184 (and (eq_attr "type" "adddp")
185 (and (eq_attr "cross" "_CROSS_")
186 (and (eq_attr "units" "ls")
187 (eq_attr "dest_regfile" "_RF_"))))
188 "(adddps_N_+(s_N__CUNIT_)*2,nothing*3,s_N_w*2)|(adddpl_N_+(l_N__CUNIT_)*2,nothing*3,l_N_w*2)")
189
190 (define_insn_reservation "single_dls_N__CROSS_" 1
191 (and (eq_attr "type" "single")
192 (and (eq_attr "cross" "_CROSS_")
193 (and (eq_attr "units" "dls")
194 (eq_attr "dest_regfile" "_RF_"))))
195 "(d_N_|(l_N_+l_N_w)|(s_N_+s_N_w))_CUNIT_")
196
197 (define_insn_reservation "mpy2_m_N__CROSS_" 2
198 (and (eq_attr "type" "mpy2")
199 (and (eq_attr "cross" "_CROSS_")
200 (and (eq_attr "units" "m")
201 (eq_attr "dest_regfile" "_RF_"))))
202 "m_N__CUNIT_,m_N_w")
203
204 (define_insn_reservation "mpy4_m_N__CROSS_" 4
205 (and (eq_attr "type" "mpy4")
206 (and (eq_attr "cross" "_CROSS_")
207 (and (eq_attr "units" "m")
208 (eq_attr "dest_regfile" "_RF_"))))
209 "m_N__CUNIT_,nothing,nothing,m_N_w")
210
211 (define_insn_reservation "mpydp_m_N__CROSS_" 10
212 (and (eq_attr "type" "mpydp")
213 (and (eq_attr "cross" "_CROSS_")
214 (and (eq_attr "units" "m")
215 (eq_attr "dest_regfile" "_RF_"))))
216 "(m_N__CUNIT_)*4,nothing*4,m_N_w*2")
217
218 (define_insn_reservation "mpyspdp_m_N__CROSS_" 7
219 (and (eq_attr "type" "mpyspdp")
220 (and (eq_attr "cross" "_CROSS_")
221 (and (eq_attr "units" "m")
222 (eq_attr "dest_regfile" "_RF_"))))
223 "(m_N__CUNIT_)*2,nothing*3,m_N_w*2")
224
225 (define_insn_reservation "mpysp2dp_m_N__CROSS_" 5
226 (and (eq_attr "type" "mpysp2dp")
227 (and (eq_attr "cross" "_CROSS_")
228 (and (eq_attr "units" "m")
229 (eq_attr "dest_regfile" "_RF_"))))
230 "m_N__CUNIT_,nothing*2,m_N_w*2")