]>
Commit | Line | Data |
---|---|---|
bcead286 | 1 | ;; Scheduling description for TI C6X. |
a5544970 | 2 | ;; Copyright (C) 2010-2019 Free Software Foundation, Inc. |
bcead286 BS |
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_")))) | |
6bd9bf42 | 181 | "(fps_N_+s_N__CUNIT_,nothing*2,s_N_w)|(fpl_N_+l_N__CUNIT_,nothing*2,l_N_w)") |
bcead286 BS |
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_")))) | |
6bd9bf42 | 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)") |
bcead286 BS |
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") |