annotate gcc/config/arm/aarch-cost-tables.h @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* RTX cost tables shared between arm and aarch64.
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 Copyright (C) 2013-2017 Free Software Foundation, Inc.
kono
parents:
diff changeset
4 Contributed by ARM Ltd.
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 This file is part of GCC.
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 GCC is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
9 under the terms of the GNU General Public License as published
kono
parents:
diff changeset
10 by the Free Software Foundation; either version 3, or (at your
kono
parents:
diff changeset
11 option) any later version.
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 GCC is distributed in the hope that it will be useful, but WITHOUT
kono
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
kono
parents:
diff changeset
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
kono
parents:
diff changeset
16 License for more details.
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
19 along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
20 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 #ifndef GCC_AARCH_COST_TABLES_H
kono
parents:
diff changeset
23 #define GCC_AARCH_COST_TABLES_H
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 const struct cpu_cost_table generic_extra_costs =
kono
parents:
diff changeset
26 {
kono
parents:
diff changeset
27 /* ALU */
kono
parents:
diff changeset
28 {
kono
parents:
diff changeset
29 0, /* arith. */
kono
parents:
diff changeset
30 0, /* logical. */
kono
parents:
diff changeset
31 0, /* shift. */
kono
parents:
diff changeset
32 COSTS_N_INSNS (1), /* shift_reg. */
kono
parents:
diff changeset
33 0, /* arith_shift. */
kono
parents:
diff changeset
34 COSTS_N_INSNS (1), /* arith_shift_reg. */
kono
parents:
diff changeset
35 0, /* log_shift. */
kono
parents:
diff changeset
36 COSTS_N_INSNS (1), /* log_shift_reg. */
kono
parents:
diff changeset
37 0, /* extend. */
kono
parents:
diff changeset
38 COSTS_N_INSNS (1), /* extend_arith. */
kono
parents:
diff changeset
39 0, /* bfi. */
kono
parents:
diff changeset
40 0, /* bfx. */
kono
parents:
diff changeset
41 0, /* clz. */
kono
parents:
diff changeset
42 0, /* rev. */
kono
parents:
diff changeset
43 COSTS_N_INSNS (1), /* non_exec. */
kono
parents:
diff changeset
44 false /* non_exec_costs_exec. */
kono
parents:
diff changeset
45 },
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 /* MULT SImode */
kono
parents:
diff changeset
48 {
kono
parents:
diff changeset
49 COSTS_N_INSNS (2), /* simple. */
kono
parents:
diff changeset
50 COSTS_N_INSNS (1), /* flag_setting. */
kono
parents:
diff changeset
51 COSTS_N_INSNS (2), /* extend. */
kono
parents:
diff changeset
52 COSTS_N_INSNS (3), /* add. */
kono
parents:
diff changeset
53 COSTS_N_INSNS (3), /* extend_add. */
kono
parents:
diff changeset
54 COSTS_N_INSNS (8) /* idiv. */
kono
parents:
diff changeset
55 },
kono
parents:
diff changeset
56 /* MULT DImode */
kono
parents:
diff changeset
57 {
kono
parents:
diff changeset
58 0, /* simple (N/A). */
kono
parents:
diff changeset
59 0, /* flag_setting (N/A). */
kono
parents:
diff changeset
60 COSTS_N_INSNS (2), /* extend. */
kono
parents:
diff changeset
61 0, /* add (N/A). */
kono
parents:
diff changeset
62 COSTS_N_INSNS (3), /* extend_add. */
kono
parents:
diff changeset
63 0 /* idiv (N/A). */
kono
parents:
diff changeset
64 }
kono
parents:
diff changeset
65 },
kono
parents:
diff changeset
66 /* LD/ST */
kono
parents:
diff changeset
67 {
kono
parents:
diff changeset
68 COSTS_N_INSNS (2), /* load. */
kono
parents:
diff changeset
69 COSTS_N_INSNS (2), /* load_sign_extend. */
kono
parents:
diff changeset
70 COSTS_N_INSNS (3), /* ldrd. */
kono
parents:
diff changeset
71 COSTS_N_INSNS (2), /* ldm_1st. */
kono
parents:
diff changeset
72 1, /* ldm_regs_per_insn_1st. */
kono
parents:
diff changeset
73 1, /* ldm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
74 COSTS_N_INSNS (2), /* loadf. */
kono
parents:
diff changeset
75 COSTS_N_INSNS (3), /* loadd. */
kono
parents:
diff changeset
76 COSTS_N_INSNS (1), /* load_unaligned. */
kono
parents:
diff changeset
77 COSTS_N_INSNS (2), /* store. */
kono
parents:
diff changeset
78 COSTS_N_INSNS (3), /* strd. */
kono
parents:
diff changeset
79 COSTS_N_INSNS (2), /* stm_1st. */
kono
parents:
diff changeset
80 1, /* stm_regs_per_insn_1st. */
kono
parents:
diff changeset
81 1, /* stm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
82 COSTS_N_INSNS (2), /* storef. */
kono
parents:
diff changeset
83 COSTS_N_INSNS (3), /* stored. */
kono
parents:
diff changeset
84 COSTS_N_INSNS (1), /* store_unaligned. */
kono
parents:
diff changeset
85 COSTS_N_INSNS (1), /* loadv. */
kono
parents:
diff changeset
86 COSTS_N_INSNS (1) /* storev. */
kono
parents:
diff changeset
87 },
kono
parents:
diff changeset
88 {
kono
parents:
diff changeset
89 /* FP SFmode */
kono
parents:
diff changeset
90 {
kono
parents:
diff changeset
91 COSTS_N_INSNS (7), /* div. */
kono
parents:
diff changeset
92 COSTS_N_INSNS (2), /* mult. */
kono
parents:
diff changeset
93 COSTS_N_INSNS (3), /* mult_addsub. */
kono
parents:
diff changeset
94 COSTS_N_INSNS (3), /* fma. */
kono
parents:
diff changeset
95 COSTS_N_INSNS (1), /* addsub. */
kono
parents:
diff changeset
96 0, /* fpconst. */
kono
parents:
diff changeset
97 0, /* neg. */
kono
parents:
diff changeset
98 0, /* compare. */
kono
parents:
diff changeset
99 0, /* widen. */
kono
parents:
diff changeset
100 0, /* narrow. */
kono
parents:
diff changeset
101 0, /* toint. */
kono
parents:
diff changeset
102 0, /* fromint. */
kono
parents:
diff changeset
103 0 /* roundint. */
kono
parents:
diff changeset
104 },
kono
parents:
diff changeset
105 /* FP DFmode */
kono
parents:
diff changeset
106 {
kono
parents:
diff changeset
107 COSTS_N_INSNS (15), /* div. */
kono
parents:
diff changeset
108 COSTS_N_INSNS (5), /* mult. */
kono
parents:
diff changeset
109 COSTS_N_INSNS (7), /* mult_addsub. */
kono
parents:
diff changeset
110 COSTS_N_INSNS (7), /* fma. */
kono
parents:
diff changeset
111 COSTS_N_INSNS (3), /* addsub. */
kono
parents:
diff changeset
112 0, /* fpconst. */
kono
parents:
diff changeset
113 0, /* neg. */
kono
parents:
diff changeset
114 0, /* compare. */
kono
parents:
diff changeset
115 0, /* widen. */
kono
parents:
diff changeset
116 0, /* narrow. */
kono
parents:
diff changeset
117 0, /* toint. */
kono
parents:
diff changeset
118 0, /* fromint. */
kono
parents:
diff changeset
119 0 /* roundint. */
kono
parents:
diff changeset
120 }
kono
parents:
diff changeset
121 },
kono
parents:
diff changeset
122 /* Vector */
kono
parents:
diff changeset
123 {
kono
parents:
diff changeset
124 COSTS_N_INSNS (1) /* alu. */
kono
parents:
diff changeset
125 }
kono
parents:
diff changeset
126 };
kono
parents:
diff changeset
127
kono
parents:
diff changeset
128 const struct cpu_cost_table cortexa53_extra_costs =
kono
parents:
diff changeset
129 {
kono
parents:
diff changeset
130 /* ALU */
kono
parents:
diff changeset
131 {
kono
parents:
diff changeset
132 0, /* arith. */
kono
parents:
diff changeset
133 0, /* logical. */
kono
parents:
diff changeset
134 COSTS_N_INSNS (1), /* shift. */
kono
parents:
diff changeset
135 0, /* shift_reg. */
kono
parents:
diff changeset
136 COSTS_N_INSNS (1), /* arith_shift. */
kono
parents:
diff changeset
137 COSTS_N_INSNS (1), /* arith_shift_reg. */
kono
parents:
diff changeset
138 COSTS_N_INSNS (1), /* log_shift. */
kono
parents:
diff changeset
139 COSTS_N_INSNS (1), /* log_shift_reg. */
kono
parents:
diff changeset
140 COSTS_N_INSNS (1), /* extend. */
kono
parents:
diff changeset
141 COSTS_N_INSNS (1), /* extend_arith. */
kono
parents:
diff changeset
142 COSTS_N_INSNS (1), /* bfi. */
kono
parents:
diff changeset
143 COSTS_N_INSNS (1), /* bfx. */
kono
parents:
diff changeset
144 0, /* clz. */
kono
parents:
diff changeset
145 0, /* rev. */
kono
parents:
diff changeset
146 0, /* non_exec. */
kono
parents:
diff changeset
147 true /* non_exec_costs_exec. */
kono
parents:
diff changeset
148 },
kono
parents:
diff changeset
149 {
kono
parents:
diff changeset
150 /* MULT SImode */
kono
parents:
diff changeset
151 {
kono
parents:
diff changeset
152 COSTS_N_INSNS (1), /* simple. */
kono
parents:
diff changeset
153 COSTS_N_INSNS (2), /* flag_setting. */
kono
parents:
diff changeset
154 COSTS_N_INSNS (1), /* extend. */
kono
parents:
diff changeset
155 COSTS_N_INSNS (1), /* add. */
kono
parents:
diff changeset
156 COSTS_N_INSNS (1), /* extend_add. */
kono
parents:
diff changeset
157 COSTS_N_INSNS (9) /* idiv. */
kono
parents:
diff changeset
158 },
kono
parents:
diff changeset
159 /* MULT DImode */
kono
parents:
diff changeset
160 {
kono
parents:
diff changeset
161 COSTS_N_INSNS (2), /* simple. */
kono
parents:
diff changeset
162 0, /* flag_setting (N/A). */
kono
parents:
diff changeset
163 COSTS_N_INSNS (2), /* extend. */
kono
parents:
diff changeset
164 COSTS_N_INSNS (2), /* add. */
kono
parents:
diff changeset
165 COSTS_N_INSNS (2), /* extend_add. */
kono
parents:
diff changeset
166 COSTS_N_INSNS (15) /* idiv. */
kono
parents:
diff changeset
167 }
kono
parents:
diff changeset
168 },
kono
parents:
diff changeset
169 /* LD/ST */
kono
parents:
diff changeset
170 {
kono
parents:
diff changeset
171 COSTS_N_INSNS (1), /* load. */
kono
parents:
diff changeset
172 COSTS_N_INSNS (1), /* load_sign_extend. */
kono
parents:
diff changeset
173 COSTS_N_INSNS (1), /* ldrd. */
kono
parents:
diff changeset
174 COSTS_N_INSNS (1), /* ldm_1st. */
kono
parents:
diff changeset
175 1, /* ldm_regs_per_insn_1st. */
kono
parents:
diff changeset
176 2, /* ldm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
177 COSTS_N_INSNS (1), /* loadf. */
kono
parents:
diff changeset
178 COSTS_N_INSNS (1), /* loadd. */
kono
parents:
diff changeset
179 COSTS_N_INSNS (1), /* load_unaligned. */
kono
parents:
diff changeset
180 0, /* store. */
kono
parents:
diff changeset
181 0, /* strd. */
kono
parents:
diff changeset
182 0, /* stm_1st. */
kono
parents:
diff changeset
183 1, /* stm_regs_per_insn_1st. */
kono
parents:
diff changeset
184 2, /* stm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
185 0, /* storef. */
kono
parents:
diff changeset
186 0, /* stored. */
kono
parents:
diff changeset
187 COSTS_N_INSNS (1), /* store_unaligned. */
kono
parents:
diff changeset
188 COSTS_N_INSNS (1), /* loadv. */
kono
parents:
diff changeset
189 COSTS_N_INSNS (1) /* storev. */
kono
parents:
diff changeset
190 },
kono
parents:
diff changeset
191 {
kono
parents:
diff changeset
192 /* FP SFmode */
kono
parents:
diff changeset
193 {
kono
parents:
diff changeset
194 COSTS_N_INSNS (5), /* div. */
kono
parents:
diff changeset
195 COSTS_N_INSNS (1), /* mult. */
kono
parents:
diff changeset
196 COSTS_N_INSNS (2), /* mult_addsub. */
kono
parents:
diff changeset
197 COSTS_N_INSNS (2), /* fma. */
kono
parents:
diff changeset
198 COSTS_N_INSNS (1), /* addsub. */
kono
parents:
diff changeset
199 0, /* fpconst. */
kono
parents:
diff changeset
200 COSTS_N_INSNS (1), /* neg. */
kono
parents:
diff changeset
201 0, /* compare. */
kono
parents:
diff changeset
202 COSTS_N_INSNS (1), /* widen. */
kono
parents:
diff changeset
203 COSTS_N_INSNS (1), /* narrow. */
kono
parents:
diff changeset
204 COSTS_N_INSNS (1), /* toint. */
kono
parents:
diff changeset
205 COSTS_N_INSNS (1), /* fromint. */
kono
parents:
diff changeset
206 COSTS_N_INSNS (1) /* roundint. */
kono
parents:
diff changeset
207 },
kono
parents:
diff changeset
208 /* FP DFmode */
kono
parents:
diff changeset
209 {
kono
parents:
diff changeset
210 COSTS_N_INSNS (10), /* div. */
kono
parents:
diff changeset
211 COSTS_N_INSNS (1), /* mult. */
kono
parents:
diff changeset
212 COSTS_N_INSNS (2), /* mult_addsub. */
kono
parents:
diff changeset
213 COSTS_N_INSNS (2), /* fma. */
kono
parents:
diff changeset
214 COSTS_N_INSNS (1), /* addsub. */
kono
parents:
diff changeset
215 0, /* fpconst. */
kono
parents:
diff changeset
216 COSTS_N_INSNS (1), /* neg. */
kono
parents:
diff changeset
217 0, /* compare. */
kono
parents:
diff changeset
218 COSTS_N_INSNS (1), /* widen. */
kono
parents:
diff changeset
219 COSTS_N_INSNS (1), /* narrow. */
kono
parents:
diff changeset
220 COSTS_N_INSNS (1), /* toint. */
kono
parents:
diff changeset
221 COSTS_N_INSNS (1), /* fromint. */
kono
parents:
diff changeset
222 COSTS_N_INSNS (1) /* roundint. */
kono
parents:
diff changeset
223 }
kono
parents:
diff changeset
224 },
kono
parents:
diff changeset
225 /* Vector */
kono
parents:
diff changeset
226 {
kono
parents:
diff changeset
227 COSTS_N_INSNS (1) /* alu. */
kono
parents:
diff changeset
228 }
kono
parents:
diff changeset
229 };
kono
parents:
diff changeset
230
kono
parents:
diff changeset
231 const struct cpu_cost_table cortexa57_extra_costs =
kono
parents:
diff changeset
232 {
kono
parents:
diff changeset
233 /* ALU */
kono
parents:
diff changeset
234 {
kono
parents:
diff changeset
235 0, /* arith. */
kono
parents:
diff changeset
236 0, /* logical. */
kono
parents:
diff changeset
237 0, /* shift. */
kono
parents:
diff changeset
238 COSTS_N_INSNS (1), /* shift_reg. */
kono
parents:
diff changeset
239 COSTS_N_INSNS (1), /* arith_shift. */
kono
parents:
diff changeset
240 COSTS_N_INSNS (1), /* arith_shift_reg. */
kono
parents:
diff changeset
241 COSTS_N_INSNS (1), /* log_shift. */
kono
parents:
diff changeset
242 COSTS_N_INSNS (1), /* log_shift_reg. */
kono
parents:
diff changeset
243 0, /* extend. */
kono
parents:
diff changeset
244 COSTS_N_INSNS (1), /* extend_arith. */
kono
parents:
diff changeset
245 COSTS_N_INSNS (1), /* bfi. */
kono
parents:
diff changeset
246 0, /* bfx. */
kono
parents:
diff changeset
247 0, /* clz. */
kono
parents:
diff changeset
248 0, /* rev. */
kono
parents:
diff changeset
249 0, /* non_exec. */
kono
parents:
diff changeset
250 true /* non_exec_costs_exec. */
kono
parents:
diff changeset
251 },
kono
parents:
diff changeset
252 {
kono
parents:
diff changeset
253 /* MULT SImode */
kono
parents:
diff changeset
254 {
kono
parents:
diff changeset
255 COSTS_N_INSNS (2), /* simple. */
kono
parents:
diff changeset
256 COSTS_N_INSNS (3), /* flag_setting. */
kono
parents:
diff changeset
257 COSTS_N_INSNS (2), /* extend. */
kono
parents:
diff changeset
258 COSTS_N_INSNS (2), /* add. */
kono
parents:
diff changeset
259 COSTS_N_INSNS (2), /* extend_add. */
kono
parents:
diff changeset
260 COSTS_N_INSNS (18) /* idiv. */
kono
parents:
diff changeset
261 },
kono
parents:
diff changeset
262 /* MULT DImode */
kono
parents:
diff changeset
263 {
kono
parents:
diff changeset
264 COSTS_N_INSNS (4), /* simple. */
kono
parents:
diff changeset
265 0, /* flag_setting (N/A). */
kono
parents:
diff changeset
266 COSTS_N_INSNS (2), /* extend. */
kono
parents:
diff changeset
267 COSTS_N_INSNS (4), /* add. */
kono
parents:
diff changeset
268 COSTS_N_INSNS (2), /* extend_add. */
kono
parents:
diff changeset
269 COSTS_N_INSNS (34) /* idiv. */
kono
parents:
diff changeset
270 }
kono
parents:
diff changeset
271 },
kono
parents:
diff changeset
272 /* LD/ST */
kono
parents:
diff changeset
273 {
kono
parents:
diff changeset
274 COSTS_N_INSNS (3), /* load. */
kono
parents:
diff changeset
275 COSTS_N_INSNS (3), /* load_sign_extend. */
kono
parents:
diff changeset
276 COSTS_N_INSNS (3), /* ldrd. */
kono
parents:
diff changeset
277 COSTS_N_INSNS (2), /* ldm_1st. */
kono
parents:
diff changeset
278 1, /* ldm_regs_per_insn_1st. */
kono
parents:
diff changeset
279 2, /* ldm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
280 COSTS_N_INSNS (4), /* loadf. */
kono
parents:
diff changeset
281 COSTS_N_INSNS (4), /* loadd. */
kono
parents:
diff changeset
282 COSTS_N_INSNS (5), /* load_unaligned. */
kono
parents:
diff changeset
283 0, /* store. */
kono
parents:
diff changeset
284 0, /* strd. */
kono
parents:
diff changeset
285 0, /* stm_1st. */
kono
parents:
diff changeset
286 1, /* stm_regs_per_insn_1st. */
kono
parents:
diff changeset
287 2, /* stm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
288 0, /* storef. */
kono
parents:
diff changeset
289 0, /* stored. */
kono
parents:
diff changeset
290 COSTS_N_INSNS (1), /* store_unaligned. */
kono
parents:
diff changeset
291 COSTS_N_INSNS (1), /* loadv. */
kono
parents:
diff changeset
292 COSTS_N_INSNS (1) /* storev. */
kono
parents:
diff changeset
293 },
kono
parents:
diff changeset
294 {
kono
parents:
diff changeset
295 /* FP SFmode */
kono
parents:
diff changeset
296 {
kono
parents:
diff changeset
297 COSTS_N_INSNS (6), /* div. */
kono
parents:
diff changeset
298 COSTS_N_INSNS (1), /* mult. */
kono
parents:
diff changeset
299 COSTS_N_INSNS (2), /* mult_addsub. */
kono
parents:
diff changeset
300 COSTS_N_INSNS (2), /* fma. */
kono
parents:
diff changeset
301 COSTS_N_INSNS (1), /* addsub. */
kono
parents:
diff changeset
302 0, /* fpconst. */
kono
parents:
diff changeset
303 0, /* neg. */
kono
parents:
diff changeset
304 0, /* compare. */
kono
parents:
diff changeset
305 COSTS_N_INSNS (1), /* widen. */
kono
parents:
diff changeset
306 COSTS_N_INSNS (1), /* narrow. */
kono
parents:
diff changeset
307 COSTS_N_INSNS (1), /* toint. */
kono
parents:
diff changeset
308 COSTS_N_INSNS (1), /* fromint. */
kono
parents:
diff changeset
309 COSTS_N_INSNS (1) /* roundint. */
kono
parents:
diff changeset
310 },
kono
parents:
diff changeset
311 /* FP DFmode */
kono
parents:
diff changeset
312 {
kono
parents:
diff changeset
313 COSTS_N_INSNS (11), /* div. */
kono
parents:
diff changeset
314 COSTS_N_INSNS (1), /* mult. */
kono
parents:
diff changeset
315 COSTS_N_INSNS (2), /* mult_addsub. */
kono
parents:
diff changeset
316 COSTS_N_INSNS (2), /* fma. */
kono
parents:
diff changeset
317 COSTS_N_INSNS (1), /* addsub. */
kono
parents:
diff changeset
318 0, /* fpconst. */
kono
parents:
diff changeset
319 0, /* neg. */
kono
parents:
diff changeset
320 0, /* compare. */
kono
parents:
diff changeset
321 COSTS_N_INSNS (1), /* widen. */
kono
parents:
diff changeset
322 COSTS_N_INSNS (1), /* narrow. */
kono
parents:
diff changeset
323 COSTS_N_INSNS (1), /* toint. */
kono
parents:
diff changeset
324 COSTS_N_INSNS (1), /* fromint. */
kono
parents:
diff changeset
325 COSTS_N_INSNS (1) /* roundint. */
kono
parents:
diff changeset
326 }
kono
parents:
diff changeset
327 },
kono
parents:
diff changeset
328 /* Vector */
kono
parents:
diff changeset
329 {
kono
parents:
diff changeset
330 COSTS_N_INSNS (1) /* alu. */
kono
parents:
diff changeset
331 }
kono
parents:
diff changeset
332 };
kono
parents:
diff changeset
333
kono
parents:
diff changeset
334 const struct cpu_cost_table exynosm1_extra_costs =
kono
parents:
diff changeset
335 {
kono
parents:
diff changeset
336 /* ALU */
kono
parents:
diff changeset
337 {
kono
parents:
diff changeset
338 0, /* arith. */
kono
parents:
diff changeset
339 0, /* logical. */
kono
parents:
diff changeset
340 0, /* shift. */
kono
parents:
diff changeset
341 COSTS_N_INSNS (0), /* shift_reg. */
kono
parents:
diff changeset
342 0, /* arith_shift. */
kono
parents:
diff changeset
343 COSTS_N_INSNS (1), /* arith_shift_reg. */
kono
parents:
diff changeset
344 0, /* log_shift. */
kono
parents:
diff changeset
345 COSTS_N_INSNS (1), /* log_shift_reg. */
kono
parents:
diff changeset
346 0, /* extend. */
kono
parents:
diff changeset
347 COSTS_N_INSNS (1), /* extend_arith. */
kono
parents:
diff changeset
348 0, /* bfi. */
kono
parents:
diff changeset
349 0, /* bfx. */
kono
parents:
diff changeset
350 0, /* clz. */
kono
parents:
diff changeset
351 0, /* rev. */
kono
parents:
diff changeset
352 0, /* non_exec. */
kono
parents:
diff changeset
353 true /* non_exec_costs_exec. */
kono
parents:
diff changeset
354 },
kono
parents:
diff changeset
355 {
kono
parents:
diff changeset
356 /* MULT SImode */
kono
parents:
diff changeset
357 {
kono
parents:
diff changeset
358 COSTS_N_INSNS (2), /* simple. */
kono
parents:
diff changeset
359 COSTS_N_INSNS (3), /* flag_setting. */
kono
parents:
diff changeset
360 COSTS_N_INSNS (4), /* extend. */
kono
parents:
diff changeset
361 COSTS_N_INSNS (2), /* add. */
kono
parents:
diff changeset
362 COSTS_N_INSNS (4), /* extend_add. */
kono
parents:
diff changeset
363 COSTS_N_INSNS (19) /* idiv. */
kono
parents:
diff changeset
364 },
kono
parents:
diff changeset
365 /* MULT DImode */
kono
parents:
diff changeset
366 {
kono
parents:
diff changeset
367 COSTS_N_INSNS (3), /* simple. */
kono
parents:
diff changeset
368 0, /* flag_setting (N/A). */
kono
parents:
diff changeset
369 COSTS_N_INSNS (4), /* extend. */
kono
parents:
diff changeset
370 COSTS_N_INSNS (3), /* add. */
kono
parents:
diff changeset
371 COSTS_N_INSNS (4), /* extend_add. */
kono
parents:
diff changeset
372 COSTS_N_INSNS (35) /* idiv. */
kono
parents:
diff changeset
373 }
kono
parents:
diff changeset
374 },
kono
parents:
diff changeset
375 /* LD/ST */
kono
parents:
diff changeset
376 {
kono
parents:
diff changeset
377 COSTS_N_INSNS (3), /* load. */
kono
parents:
diff changeset
378 COSTS_N_INSNS (4), /* load_sign_extend. */
kono
parents:
diff changeset
379 COSTS_N_INSNS (3), /* ldrd. */
kono
parents:
diff changeset
380 COSTS_N_INSNS (2), /* ldm_1st. */
kono
parents:
diff changeset
381 1, /* ldm_regs_per_insn_1st. */
kono
parents:
diff changeset
382 2, /* ldm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
383 COSTS_N_INSNS (4), /* loadf. */
kono
parents:
diff changeset
384 COSTS_N_INSNS (4), /* loadd. */
kono
parents:
diff changeset
385 COSTS_N_INSNS (4), /* load_unaligned. */
kono
parents:
diff changeset
386 0, /* store. */
kono
parents:
diff changeset
387 0, /* strd. */
kono
parents:
diff changeset
388 0, /* stm_1st. */
kono
parents:
diff changeset
389 1, /* stm_regs_per_insn_1st. */
kono
parents:
diff changeset
390 2, /* stm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
391 0, /* storef. */
kono
parents:
diff changeset
392 0, /* stored. */
kono
parents:
diff changeset
393 0, /* store_unaligned. */
kono
parents:
diff changeset
394 COSTS_N_INSNS (1), /* loadv. */
kono
parents:
diff changeset
395 COSTS_N_INSNS (1) /* storev. */
kono
parents:
diff changeset
396 },
kono
parents:
diff changeset
397 {
kono
parents:
diff changeset
398 /* FP SFmode */
kono
parents:
diff changeset
399 {
kono
parents:
diff changeset
400 COSTS_N_INSNS (21), /* div. */
kono
parents:
diff changeset
401 COSTS_N_INSNS (3), /* mult. */
kono
parents:
diff changeset
402 COSTS_N_INSNS (4), /* mult_addsub. */
kono
parents:
diff changeset
403 COSTS_N_INSNS (4), /* fma. */
kono
parents:
diff changeset
404 COSTS_N_INSNS (2), /* addsub. */
kono
parents:
diff changeset
405 COSTS_N_INSNS (0), /* fpconst. */
kono
parents:
diff changeset
406 COSTS_N_INSNS (0), /* neg. */
kono
parents:
diff changeset
407 COSTS_N_INSNS (3), /* compare. */
kono
parents:
diff changeset
408 COSTS_N_INSNS (2), /* widen. */
kono
parents:
diff changeset
409 COSTS_N_INSNS (2), /* narrow. */
kono
parents:
diff changeset
410 COSTS_N_INSNS (12), /* toint. */
kono
parents:
diff changeset
411 COSTS_N_INSNS (7), /* fromint. */
kono
parents:
diff changeset
412 COSTS_N_INSNS (2) /* roundint. */
kono
parents:
diff changeset
413 },
kono
parents:
diff changeset
414 /* FP DFmode */
kono
parents:
diff changeset
415 {
kono
parents:
diff changeset
416 COSTS_N_INSNS (34), /* div. */
kono
parents:
diff changeset
417 COSTS_N_INSNS (3), /* mult. */
kono
parents:
diff changeset
418 COSTS_N_INSNS (4), /* mult_addsub. */
kono
parents:
diff changeset
419 COSTS_N_INSNS (4), /* fma. */
kono
parents:
diff changeset
420 COSTS_N_INSNS (2), /* addsub. */
kono
parents:
diff changeset
421 COSTS_N_INSNS (0), /* fpconst. */
kono
parents:
diff changeset
422 COSTS_N_INSNS (0), /* neg. */
kono
parents:
diff changeset
423 COSTS_N_INSNS (3), /* compare. */
kono
parents:
diff changeset
424 COSTS_N_INSNS (2), /* widen. */
kono
parents:
diff changeset
425 COSTS_N_INSNS (2), /* narrow. */
kono
parents:
diff changeset
426 COSTS_N_INSNS (12), /* toint. */
kono
parents:
diff changeset
427 COSTS_N_INSNS (7), /* fromint. */
kono
parents:
diff changeset
428 COSTS_N_INSNS (2) /* roundint. */
kono
parents:
diff changeset
429 }
kono
parents:
diff changeset
430 },
kono
parents:
diff changeset
431 /* Vector */
kono
parents:
diff changeset
432 {
kono
parents:
diff changeset
433 COSTS_N_INSNS (0) /* alu. */
kono
parents:
diff changeset
434 }
kono
parents:
diff changeset
435 };
kono
parents:
diff changeset
436
kono
parents:
diff changeset
437 const struct cpu_cost_table xgene1_extra_costs =
kono
parents:
diff changeset
438 {
kono
parents:
diff changeset
439 /* ALU */
kono
parents:
diff changeset
440 {
kono
parents:
diff changeset
441 0, /* arith. */
kono
parents:
diff changeset
442 0, /* logical. */
kono
parents:
diff changeset
443 0, /* shift. */
kono
parents:
diff changeset
444 COSTS_N_INSNS (1), /* shift_reg. */
kono
parents:
diff changeset
445 COSTS_N_INSNS (1), /* arith_shift. */
kono
parents:
diff changeset
446 COSTS_N_INSNS (1), /* arith_shift_reg. */
kono
parents:
diff changeset
447 COSTS_N_INSNS (1), /* log_shift. */
kono
parents:
diff changeset
448 COSTS_N_INSNS (1), /* log_shift_reg. */
kono
parents:
diff changeset
449 COSTS_N_INSNS (1), /* extend. */
kono
parents:
diff changeset
450 0, /* extend_arithm. */
kono
parents:
diff changeset
451 COSTS_N_INSNS (1), /* bfi. */
kono
parents:
diff changeset
452 COSTS_N_INSNS (1), /* bfx. */
kono
parents:
diff changeset
453 0, /* clz. */
kono
parents:
diff changeset
454 COSTS_N_INSNS (1), /* rev. */
kono
parents:
diff changeset
455 0, /* non_exec. */
kono
parents:
diff changeset
456 true /* non_exec_costs_exec. */
kono
parents:
diff changeset
457 },
kono
parents:
diff changeset
458 {
kono
parents:
diff changeset
459 /* MULT SImode */
kono
parents:
diff changeset
460 {
kono
parents:
diff changeset
461 COSTS_N_INSNS (4), /* simple. */
kono
parents:
diff changeset
462 COSTS_N_INSNS (4), /* flag_setting. */
kono
parents:
diff changeset
463 COSTS_N_INSNS (4), /* extend. */
kono
parents:
diff changeset
464 COSTS_N_INSNS (4), /* add. */
kono
parents:
diff changeset
465 COSTS_N_INSNS (4), /* extend_add. */
kono
parents:
diff changeset
466 COSTS_N_INSNS (20) /* idiv. */
kono
parents:
diff changeset
467 },
kono
parents:
diff changeset
468 /* MULT DImode */
kono
parents:
diff changeset
469 {
kono
parents:
diff changeset
470 COSTS_N_INSNS (5), /* simple. */
kono
parents:
diff changeset
471 0, /* flag_setting (N/A). */
kono
parents:
diff changeset
472 COSTS_N_INSNS (5), /* extend. */
kono
parents:
diff changeset
473 COSTS_N_INSNS (5), /* add. */
kono
parents:
diff changeset
474 COSTS_N_INSNS (5), /* extend_add. */
kono
parents:
diff changeset
475 COSTS_N_INSNS (21) /* idiv. */
kono
parents:
diff changeset
476 }
kono
parents:
diff changeset
477 },
kono
parents:
diff changeset
478 /* LD/ST */
kono
parents:
diff changeset
479 {
kono
parents:
diff changeset
480 COSTS_N_INSNS (5), /* load. */
kono
parents:
diff changeset
481 COSTS_N_INSNS (6), /* load_sign_extend. */
kono
parents:
diff changeset
482 COSTS_N_INSNS (5), /* ldrd. */
kono
parents:
diff changeset
483 COSTS_N_INSNS (5), /* ldm_1st. */
kono
parents:
diff changeset
484 1, /* ldm_regs_per_insn_1st. */
kono
parents:
diff changeset
485 1, /* ldm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
486 COSTS_N_INSNS (10), /* loadf. */
kono
parents:
diff changeset
487 COSTS_N_INSNS (10), /* loadd. */
kono
parents:
diff changeset
488 COSTS_N_INSNS (5), /* load_unaligned. */
kono
parents:
diff changeset
489 0, /* store. */
kono
parents:
diff changeset
490 0, /* strd. */
kono
parents:
diff changeset
491 0, /* stm_1st. */
kono
parents:
diff changeset
492 1, /* stm_regs_per_insn_1st. */
kono
parents:
diff changeset
493 1, /* stm_regs_per_insn_subsequent. */
kono
parents:
diff changeset
494 0, /* storef. */
kono
parents:
diff changeset
495 0, /* stored. */
kono
parents:
diff changeset
496 0, /* store_unaligned. */
kono
parents:
diff changeset
497 COSTS_N_INSNS (1), /* loadv. */
kono
parents:
diff changeset
498 COSTS_N_INSNS (1) /* storev. */
kono
parents:
diff changeset
499 },
kono
parents:
diff changeset
500 {
kono
parents:
diff changeset
501 /* FP SFmode */
kono
parents:
diff changeset
502 {
kono
parents:
diff changeset
503 COSTS_N_INSNS (23), /* div. */
kono
parents:
diff changeset
504 COSTS_N_INSNS (5), /* mult. */
kono
parents:
diff changeset
505 COSTS_N_INSNS (5), /* mult_addsub. */
kono
parents:
diff changeset
506 COSTS_N_INSNS (5), /* fma. */
kono
parents:
diff changeset
507 COSTS_N_INSNS (5), /* addsub. */
kono
parents:
diff changeset
508 COSTS_N_INSNS (2), /* fpconst. */
kono
parents:
diff changeset
509 COSTS_N_INSNS (3), /* neg. */
kono
parents:
diff changeset
510 COSTS_N_INSNS (2), /* compare. */
kono
parents:
diff changeset
511 COSTS_N_INSNS (6), /* widen. */
kono
parents:
diff changeset
512 COSTS_N_INSNS (6), /* narrow. */
kono
parents:
diff changeset
513 COSTS_N_INSNS (4), /* toint. */
kono
parents:
diff changeset
514 COSTS_N_INSNS (4), /* fromint. */
kono
parents:
diff changeset
515 COSTS_N_INSNS (4) /* roundint. */
kono
parents:
diff changeset
516 },
kono
parents:
diff changeset
517 /* FP DFmode */
kono
parents:
diff changeset
518 {
kono
parents:
diff changeset
519 COSTS_N_INSNS (29), /* div. */
kono
parents:
diff changeset
520 COSTS_N_INSNS (5), /* mult. */
kono
parents:
diff changeset
521 COSTS_N_INSNS (5), /* mult_addsub. */
kono
parents:
diff changeset
522 COSTS_N_INSNS (5), /* fma. */
kono
parents:
diff changeset
523 COSTS_N_INSNS (5), /* addsub. */
kono
parents:
diff changeset
524 COSTS_N_INSNS (3), /* fpconst. */
kono
parents:
diff changeset
525 COSTS_N_INSNS (3), /* neg. */
kono
parents:
diff changeset
526 COSTS_N_INSNS (2), /* compare. */
kono
parents:
diff changeset
527 COSTS_N_INSNS (6), /* widen. */
kono
parents:
diff changeset
528 COSTS_N_INSNS (6), /* narrow. */
kono
parents:
diff changeset
529 COSTS_N_INSNS (4), /* toint. */
kono
parents:
diff changeset
530 COSTS_N_INSNS (4), /* fromint. */
kono
parents:
diff changeset
531 COSTS_N_INSNS (4) /* roundint. */
kono
parents:
diff changeset
532 }
kono
parents:
diff changeset
533 },
kono
parents:
diff changeset
534 /* Vector */
kono
parents:
diff changeset
535 {
kono
parents:
diff changeset
536 COSTS_N_INSNS (2) /* alu. */
kono
parents:
diff changeset
537 }
kono
parents:
diff changeset
538 };
kono
parents:
diff changeset
539
kono
parents:
diff changeset
540 #endif /* GCC_AARCH_COST_TABLES_H */