OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc2/] [gcc/] [config/] [arm/] [cortex-a8-neon.md] - Blame information for rev 384

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 282 jeremybenn
;; ARM Cortex-A8 NEON scheduling description.
2
;; Copyright (C) 2007, 2008 Free Software Foundation, Inc.
3
;; Contributed by CodeSourcery.
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
9
;; by the Free Software Foundation; either version 3, or (at your
10
;; option) any later version.
11
 
12
;; GCC is distributed in the hope that it will be useful, but WITHOUT
13
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14
;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15
;; 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
;; .
20
 
21
 
22
(define_automaton "cortex_a8_neon")
23
 
24
;; Only one load, store, permute, MCR or MRC instruction can be issued
25
;; per cycle.
26
(define_cpu_unit "cortex_a8_neon_issue_perm" "cortex_a8_neon")
27
 
28
;; Only one data-processing instruction can be issued per cycle.
29
(define_cpu_unit "cortex_a8_neon_issue_dp" "cortex_a8_neon")
30
 
31
;; The VFPLite unit (non-pipelined).
32
(define_cpu_unit "cortex_a8_vfplite" "cortex_a8_neon")
33
 
34
;; We need a special mutual exclusion (to be used in addition to
35
;; cortex_a8_neon_issue_dp) for the case when an instruction such as
36
;; vmla.f is forwarded from E5 of the floating-point multiply pipeline to
37
;; E2 of the floating-point add pipeline.  On the cycle previous to that
38
;; forward we must prevent issue of any instruction to the floating-point
39
;; add pipeline, but still allow issue of a data-processing instruction
40
;; to any of the other pipelines.
41
(define_cpu_unit "cortex_a8_neon_issue_fadd" "cortex_a8_neon")
42
 
43
;; Patterns of reservation.
44
;; We model the NEON issue units as running in parallel with the core ones.
45
;; We assume that multi-cycle NEON instructions get decomposed into
46
;; micro-ops as they are issued into the NEON pipeline, and not as they
47
;; are issued into the ARM pipeline.  Dual issue may not occur except
48
;; upon the first and last cycles of a multi-cycle instruction, but it
49
;; is unclear whether two multi-cycle instructions can issue together (in
50
;; this model they cannot).  It is also unclear whether a pair of
51
;; a multi-cycle and single-cycle instructions, that could potentially
52
;; issue together, only do so if (say) the single-cycle one precedes
53
;; the other.
54
 
55
(define_reservation "cortex_a8_neon_dp"
56
                    "(cortex_a8_alu0|cortex_a8_alu1)+cortex_a8_neon_issue_dp")
57
(define_reservation "cortex_a8_neon_dp_2"
58
                    "(cortex_a8_alu0|cortex_a8_alu1)+cortex_a8_neon_issue_dp,\
59
                     cortex_a8_neon_issue_dp")
60
(define_reservation "cortex_a8_neon_dp_4"
61
                    "(cortex_a8_alu0|cortex_a8_alu1)+cortex_a8_neon_issue_dp,\
62
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_perm,\
63
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_perm,\
64
                     cortex_a8_neon_issue_dp")
65
 
66
(define_reservation "cortex_a8_neon_fadd"
67
                    "(cortex_a8_alu0|cortex_a8_alu1)+cortex_a8_neon_issue_dp+\
68
                     cortex_a8_neon_issue_fadd")
69
(define_reservation "cortex_a8_neon_fadd_2"
70
                    "(cortex_a8_alu0|cortex_a8_alu1)+cortex_a8_neon_issue_dp+\
71
                     cortex_a8_neon_issue_fadd,\
72
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_fadd")
73
 
74
(define_reservation "cortex_a8_neon_perm"
75
                    "(cortex_a8_alu0|cortex_a8_alu1)+\
76
                     cortex_a8_neon_issue_perm")
77
(define_reservation "cortex_a8_neon_perm_2"
78
                    "(cortex_a8_alu0|cortex_a8_alu1)+\
79
                     cortex_a8_neon_issue_perm,\
80
                     cortex_a8_neon_issue_perm")
81
(define_reservation "cortex_a8_neon_perm_3"
82
                    "(cortex_a8_alu0|cortex_a8_alu1)+\
83
                     cortex_a8_neon_issue_perm,\
84
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_perm,\
85
                     cortex_a8_neon_issue_perm")
86
 
87
(define_reservation "cortex_a8_neon_ls"
88
                    "cortex_a8_issue_ls+cortex_a8_neon_issue_perm")
89
(define_reservation "cortex_a8_neon_ls_2"
90
                    "cortex_a8_issue_ls+cortex_a8_neon_issue_perm,\
91
                     cortex_a8_neon_issue_perm")
92
(define_reservation "cortex_a8_neon_ls_3"
93
                    "cortex_a8_issue_ls+cortex_a8_neon_issue_perm,\
94
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_perm,\
95
                     cortex_a8_neon_issue_perm")
96
(define_reservation "cortex_a8_neon_ls_4"
97
                    "cortex_a8_issue_ls+cortex_a8_neon_issue_perm,\
98
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_perm,\
99
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_perm,\
100
                     cortex_a8_neon_issue_perm")
101
(define_reservation "cortex_a8_neon_ls_5"
102
                    "cortex_a8_issue_ls+cortex_a8_neon_issue_perm,\
103
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_perm,\
104
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_perm,\
105
                     cortex_a8_neon_issue_dp+cortex_a8_neon_issue_perm,\
106
                     cortex_a8_neon_issue_perm")
107
 
108
(define_reservation "cortex_a8_neon_fmul_then_fadd"
109
                    "(cortex_a8_alu0|cortex_a8_alu1)+cortex_a8_neon_issue_dp,\
110
                     nothing*3,\
111
                     cortex_a8_neon_issue_fadd")
112
(define_reservation "cortex_a8_neon_fmul_then_fadd_2"
113
                    "(cortex_a8_alu0|cortex_a8_alu1)+cortex_a8_neon_issue_dp,\
114
                     cortex_a8_neon_issue_dp,\
115
                     nothing*2,\
116
                     cortex_a8_neon_issue_fadd,\
117
                     cortex_a8_neon_issue_fadd")
118
 
119
;; VFP instructions can only be single-issued into the NEON pipeline.
120
(define_reservation "cortex_a8_vfp"
121
                    "(cortex_a8_alu0|cortex_a8_alu1)+cortex_a8_neon_issue_dp+\
122
                     cortex_a8_neon_issue_perm+cortex_a8_vfplite")
123
 
124
;; VFP instructions.
125
;; The VFPLite unit that executes these isn't pipelined; we give the
126
;; worst-case latencies (and choose the double-precision ones where we
127
;; do not distinguish on precision).  We assume RunFast mode is not
128
;; enabled and therefore do not model the possible VFP instruction
129
;; execution in the NEON floating point pipelines, nor additional
130
;; latencies for the processing of subnormals.
131
;;
132
;; TODO: RunFast mode could potentially be enabled when -ffast-math
133
;; is specified.
134
 
135
(define_insn_reservation "cortex_a8_vfp_add_sub" 10
136
  (and (eq_attr "tune" "cortexa8")
137
       (eq_attr "type" "fconsts,fconstd,fadds,faddd"))
138
  "cortex_a8_vfp,cortex_a8_vfplite*9")
139
 
140
(define_insn_reservation "cortex_a8_vfp_muls" 12
141
  (and (eq_attr "tune" "cortexa8")
142
       (eq_attr "type" "fmuls"))
143
  "cortex_a8_vfp,cortex_a8_vfplite*11")
144
 
145
(define_insn_reservation "cortex_a8_vfp_muld" 17
146
  (and (eq_attr "tune" "cortexa8")
147
       (eq_attr "type" "fmuld"))
148
  "cortex_a8_vfp,cortex_a8_vfplite*16")
149
 
150
(define_insn_reservation "cortex_a8_vfp_macs" 21
151
  (and (eq_attr "tune" "cortexa8")
152
       (eq_attr "type" "fmacs"))
153
  "cortex_a8_vfp,cortex_a8_vfplite*20")
154
 
155
(define_insn_reservation "cortex_a8_vfp_macd" 26
156
  (and (eq_attr "tune" "cortexa8")
157
       (eq_attr "type" "fmacd"))
158
  "cortex_a8_vfp,cortex_a8_vfplite*25")
159
 
160
(define_insn_reservation "cortex_a8_vfp_divs" 37
161
  (and (eq_attr "tune" "cortexa8")
162
       (eq_attr "type" "fdivs"))
163
  "cortex_a8_vfp,cortex_a8_vfplite*36")
164
 
165
(define_insn_reservation "cortex_a8_vfp_divd" 65
166
  (and (eq_attr "tune" "cortexa8")
167
       (eq_attr "type" "fdivd"))
168
  "cortex_a8_vfp,cortex_a8_vfplite*64")
169
 
170
;; Comparisons can actually take 7 cycles sometimes instead of four,
171
;; but given all the other instructions lumped into type=ffarith that
172
;; take four cycles, we pick that latency.
173
(define_insn_reservation "cortex_a8_vfp_farith" 4
174
  (and (eq_attr "tune" "cortexa8")
175
       (eq_attr "type" "fcpys,ffariths,ffarithd,fconsts,fconstd,fcmps,fcmpd"))
176
  "cortex_a8_vfp,cortex_a8_vfplite*3")
177
 
178
(define_insn_reservation "cortex_a8_vfp_cvt" 7
179
  (and (eq_attr "tune" "cortexa8")
180
       (eq_attr "type" "f_cvt"))
181
  "cortex_a8_vfp,cortex_a8_vfplite*6")
182
 
183
;; NEON -> core transfers.
184
 
185
(define_insn_reservation "neon_mrc" 20
186
  (and (eq_attr "tune" "cortexa8")
187
       (eq_attr "neon_type" "neon_mrc"))
188
  "cortex_a8_neon_ls")
189
 
190
(define_insn_reservation "neon_mrrc" 21
191
  (and (eq_attr "tune" "cortexa8")
192
       (eq_attr "neon_type" "neon_mrrc"))
193
  "cortex_a8_neon_ls_2")
194
 
195
;; The remainder of this file is auto-generated by neon-schedgen.
196
 
197
;; Instructions using this reservation read their source operands at N2, and
198
;; produce a result at N3.
199
(define_insn_reservation "neon_int_1" 3
200
  (and (eq_attr "tune" "cortexa8")
201
       (eq_attr "neon_type" "neon_int_1"))
202
  "cortex_a8_neon_dp")
203
 
204
;; Instructions using this reservation read their (D|Q)m operands at N1,
205
;; their (D|Q)n operands at N2, and produce a result at N3.
206
(define_insn_reservation "neon_int_2" 3
207
  (and (eq_attr "tune" "cortexa8")
208
       (eq_attr "neon_type" "neon_int_2"))
209
  "cortex_a8_neon_dp")
210
 
211
;; Instructions using this reservation read their source operands at N1, and
212
;; produce a result at N3.
213
(define_insn_reservation "neon_int_3" 3
214
  (and (eq_attr "tune" "cortexa8")
215
       (eq_attr "neon_type" "neon_int_3"))
216
  "cortex_a8_neon_dp")
217
 
218
;; Instructions using this reservation read their source operands at N2, and
219
;; produce a result at N4.
220
(define_insn_reservation "neon_int_4" 4
221
  (and (eq_attr "tune" "cortexa8")
222
       (eq_attr "neon_type" "neon_int_4"))
223
  "cortex_a8_neon_dp")
224
 
225
;; Instructions using this reservation read their (D|Q)m operands at N1,
226
;; their (D|Q)n operands at N2, and produce a result at N4.
227
(define_insn_reservation "neon_int_5" 4
228
  (and (eq_attr "tune" "cortexa8")
229
       (eq_attr "neon_type" "neon_int_5"))
230
  "cortex_a8_neon_dp")
231
 
232
;; Instructions using this reservation read their source operands at N1, and
233
;; produce a result at N4.
234
(define_insn_reservation "neon_vqneg_vqabs" 4
235
  (and (eq_attr "tune" "cortexa8")
236
       (eq_attr "neon_type" "neon_vqneg_vqabs"))
237
  "cortex_a8_neon_dp")
238
 
239
;; Instructions using this reservation produce a result at N3.
240
(define_insn_reservation "neon_vmov" 3
241
  (and (eq_attr "tune" "cortexa8")
242
       (eq_attr "neon_type" "neon_vmov"))
243
  "cortex_a8_neon_dp")
244
 
245
;; Instructions using this reservation read their (D|Q)n operands at N2,
246
;; their (D|Q)m operands at N1, their (D|Q)d operands at N3, and
247
;; produce a result at N6.
248
(define_insn_reservation "neon_vaba" 6
249
  (and (eq_attr "tune" "cortexa8")
250
       (eq_attr "neon_type" "neon_vaba"))
251
  "cortex_a8_neon_dp")
252
 
253
;; Instructions using this reservation read their (D|Q)n operands at N2,
254
;; their (D|Q)m operands at N1, their (D|Q)d operands at N3, and
255
;; produce a result at N6 on cycle 2.
256
(define_insn_reservation "neon_vaba_qqq" 7
257
  (and (eq_attr "tune" "cortexa8")
258
       (eq_attr "neon_type" "neon_vaba_qqq"))
259
  "cortex_a8_neon_dp_2")
260
 
261
;; Instructions using this reservation read their (D|Q)m operands at N1,
262
;; their (D|Q)d operands at N3, and produce a result at N6.
263
(define_insn_reservation "neon_vsma" 6
264
  (and (eq_attr "tune" "cortexa8")
265
       (eq_attr "neon_type" "neon_vsma"))
266
  "cortex_a8_neon_dp")
267
 
268
;; Instructions using this reservation read their source operands at N2, and
269
;; produce a result at N6.
270
(define_insn_reservation "neon_mul_ddd_8_16_qdd_16_8_long_32_16_long" 6
271
  (and (eq_attr "tune" "cortexa8")
272
       (eq_attr "neon_type" "neon_mul_ddd_8_16_qdd_16_8_long_32_16_long"))
273
  "cortex_a8_neon_dp")
274
 
275
;; Instructions using this reservation read their source operands at N2, and
276
;; produce a result at N6 on cycle 2.
277
(define_insn_reservation "neon_mul_qqq_8_16_32_ddd_32" 7
278
  (and (eq_attr "tune" "cortexa8")
279
       (eq_attr "neon_type" "neon_mul_qqq_8_16_32_ddd_32"))
280
  "cortex_a8_neon_dp_2")
281
 
282
;; Instructions using this reservation read their (D|Q)n operands at N2,
283
;; their (D|Q)m operands at N1, and produce a result at N6 on cycle 2.
284
(define_insn_reservation "neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar" 7
285
  (and (eq_attr "tune" "cortexa8")
286
       (eq_attr "neon_type" "neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar"))
287
  "cortex_a8_neon_dp_2")
288
 
289
;; Instructions using this reservation read their (D|Q)n operands at N2,
290
;; their (D|Q)m operands at N2, their (D|Q)d operands at N3, and
291
;; produce a result at N6.
292
(define_insn_reservation "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long" 6
293
  (and (eq_attr "tune" "cortexa8")
294
       (eq_attr "neon_type" "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long"))
295
  "cortex_a8_neon_dp")
296
 
297
;; Instructions using this reservation read their (D|Q)n operands at N2,
298
;; their (D|Q)m operands at N2, their (D|Q)d operands at N3, and
299
;; produce a result at N6 on cycle 2.
300
(define_insn_reservation "neon_mla_qqq_8_16" 7
301
  (and (eq_attr "tune" "cortexa8")
302
       (eq_attr "neon_type" "neon_mla_qqq_8_16"))
303
  "cortex_a8_neon_dp_2")
304
 
305
;; Instructions using this reservation read their (D|Q)n operands at N2,
306
;; their (D|Q)m operands at N1, their (D|Q)d operands at N3, and
307
;; produce a result at N6 on cycle 2.
308
(define_insn_reservation "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long" 7
309
  (and (eq_attr "tune" "cortexa8")
310
       (eq_attr "neon_type" "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long"))
311
  "cortex_a8_neon_dp_2")
312
 
313
;; Instructions using this reservation read their (D|Q)n operands at N2,
314
;; their (D|Q)m operands at N1, their (D|Q)d operands at N3, and
315
;; produce a result at N6 on cycle 4.
316
(define_insn_reservation "neon_mla_qqq_32_qqd_32_scalar" 9
317
  (and (eq_attr "tune" "cortexa8")
318
       (eq_attr "neon_type" "neon_mla_qqq_32_qqd_32_scalar"))
319
  "cortex_a8_neon_dp_4")
320
 
321
;; Instructions using this reservation read their (D|Q)n operands at N2,
322
;; their (D|Q)m operands at N1, and produce a result at N6.
323
(define_insn_reservation "neon_mul_ddd_16_scalar_32_16_long_scalar" 6
324
  (and (eq_attr "tune" "cortexa8")
325
       (eq_attr "neon_type" "neon_mul_ddd_16_scalar_32_16_long_scalar"))
326
  "cortex_a8_neon_dp")
327
 
328
;; Instructions using this reservation read their (D|Q)n operands at N2,
329
;; their (D|Q)m operands at N1, and produce a result at N6 on cycle 4.
330
(define_insn_reservation "neon_mul_qqd_32_scalar" 9
331
  (and (eq_attr "tune" "cortexa8")
332
       (eq_attr "neon_type" "neon_mul_qqd_32_scalar"))
333
  "cortex_a8_neon_dp_4")
334
 
335
;; Instructions using this reservation read their (D|Q)n operands at N2,
336
;; their (D|Q)m operands at N1, their (D|Q)d operands at N3, and
337
;; produce a result at N6.
338
(define_insn_reservation "neon_mla_ddd_16_scalar_qdd_32_16_long_scalar" 6
339
  (and (eq_attr "tune" "cortexa8")
340
       (eq_attr "neon_type" "neon_mla_ddd_16_scalar_qdd_32_16_long_scalar"))
341
  "cortex_a8_neon_dp")
342
 
343
;; Instructions using this reservation read their source operands at N1, and
344
;; produce a result at N3.
345
(define_insn_reservation "neon_shift_1" 3
346
  (and (eq_attr "tune" "cortexa8")
347
       (eq_attr "neon_type" "neon_shift_1"))
348
  "cortex_a8_neon_dp")
349
 
350
;; Instructions using this reservation read their source operands at N1, and
351
;; produce a result at N4.
352
(define_insn_reservation "neon_shift_2" 4
353
  (and (eq_attr "tune" "cortexa8")
354
       (eq_attr "neon_type" "neon_shift_2"))
355
  "cortex_a8_neon_dp")
356
 
357
;; Instructions using this reservation read their source operands at N1, and
358
;; produce a result at N3 on cycle 2.
359
(define_insn_reservation "neon_shift_3" 4
360
  (and (eq_attr "tune" "cortexa8")
361
       (eq_attr "neon_type" "neon_shift_3"))
362
  "cortex_a8_neon_dp_2")
363
 
364
;; Instructions using this reservation read their source operands at N1, and
365
;; produce a result at N1.
366
(define_insn_reservation "neon_vshl_ddd" 1
367
  (and (eq_attr "tune" "cortexa8")
368
       (eq_attr "neon_type" "neon_vshl_ddd"))
369
  "cortex_a8_neon_dp")
370
 
371
;; Instructions using this reservation read their source operands at N1, and
372
;; produce a result at N4 on cycle 2.
373
(define_insn_reservation "neon_vqshl_vrshl_vqrshl_qqq" 5
374
  (and (eq_attr "tune" "cortexa8")
375
       (eq_attr "neon_type" "neon_vqshl_vrshl_vqrshl_qqq"))
376
  "cortex_a8_neon_dp_2")
377
 
378
;; Instructions using this reservation read their (D|Q)m operands at N1,
379
;; their (D|Q)d operands at N3, and produce a result at N6.
380
(define_insn_reservation "neon_vsra_vrsra" 6
381
  (and (eq_attr "tune" "cortexa8")
382
       (eq_attr "neon_type" "neon_vsra_vrsra"))
383
  "cortex_a8_neon_dp")
384
 
385
;; Instructions using this reservation read their source operands at N2, and
386
;; produce a result at N5.
387
(define_insn_reservation "neon_fp_vadd_ddd_vabs_dd" 5
388
  (and (eq_attr "tune" "cortexa8")
389
       (eq_attr "neon_type" "neon_fp_vadd_ddd_vabs_dd"))
390
  "cortex_a8_neon_fadd")
391
 
392
;; Instructions using this reservation read their source operands at N2, and
393
;; produce a result at N5 on cycle 2.
394
(define_insn_reservation "neon_fp_vadd_qqq_vabs_qq" 6
395
  (and (eq_attr "tune" "cortexa8")
396
       (eq_attr "neon_type" "neon_fp_vadd_qqq_vabs_qq"))
397
  "cortex_a8_neon_fadd_2")
398
 
399
;; Instructions using this reservation read their source operands at N1, and
400
;; produce a result at N5.
401
(define_insn_reservation "neon_fp_vsum" 5
402
  (and (eq_attr "tune" "cortexa8")
403
       (eq_attr "neon_type" "neon_fp_vsum"))
404
  "cortex_a8_neon_fadd")
405
 
406
;; Instructions using this reservation read their (D|Q)n operands at N2,
407
;; their (D|Q)m operands at N1, and produce a result at N5.
408
(define_insn_reservation "neon_fp_vmul_ddd" 5
409
  (and (eq_attr "tune" "cortexa8")
410
       (eq_attr "neon_type" "neon_fp_vmul_ddd"))
411
  "cortex_a8_neon_dp")
412
 
413
;; Instructions using this reservation read their (D|Q)n operands at N2,
414
;; their (D|Q)m operands at N1, and produce a result at N5 on cycle 2.
415
(define_insn_reservation "neon_fp_vmul_qqd" 6
416
  (and (eq_attr "tune" "cortexa8")
417
       (eq_attr "neon_type" "neon_fp_vmul_qqd"))
418
  "cortex_a8_neon_dp_2")
419
 
420
;; Instructions using this reservation read their (D|Q)n operands at N2,
421
;; their (D|Q)m operands at N2, their (D|Q)d operands at N3, and
422
;; produce a result at N9.
423
(define_insn_reservation "neon_fp_vmla_ddd" 9
424
  (and (eq_attr "tune" "cortexa8")
425
       (eq_attr "neon_type" "neon_fp_vmla_ddd"))
426
  "cortex_a8_neon_fmul_then_fadd")
427
 
428
;; Instructions using this reservation read their (D|Q)n operands at N2,
429
;; their (D|Q)m operands at N2, their (D|Q)d operands at N3, and
430
;; produce a result at N9 on cycle 2.
431
(define_insn_reservation "neon_fp_vmla_qqq" 10
432
  (and (eq_attr "tune" "cortexa8")
433
       (eq_attr "neon_type" "neon_fp_vmla_qqq"))
434
  "cortex_a8_neon_fmul_then_fadd_2")
435
 
436
;; Instructions using this reservation read their (D|Q)n operands at N2,
437
;; their (D|Q)m operands at N1, their (D|Q)d operands at N3, and
438
;; produce a result at N9.
439
(define_insn_reservation "neon_fp_vmla_ddd_scalar" 9
440
  (and (eq_attr "tune" "cortexa8")
441
       (eq_attr "neon_type" "neon_fp_vmla_ddd_scalar"))
442
  "cortex_a8_neon_fmul_then_fadd")
443
 
444
;; Instructions using this reservation read their (D|Q)n operands at N2,
445
;; their (D|Q)m operands at N1, their (D|Q)d operands at N3, and
446
;; produce a result at N9 on cycle 2.
447
(define_insn_reservation "neon_fp_vmla_qqq_scalar" 10
448
  (and (eq_attr "tune" "cortexa8")
449
       (eq_attr "neon_type" "neon_fp_vmla_qqq_scalar"))
450
  "cortex_a8_neon_fmul_then_fadd_2")
451
 
452
;; Instructions using this reservation read their source operands at N2, and
453
;; produce a result at N9.
454
(define_insn_reservation "neon_fp_vrecps_vrsqrts_ddd" 9
455
  (and (eq_attr "tune" "cortexa8")
456
       (eq_attr "neon_type" "neon_fp_vrecps_vrsqrts_ddd"))
457
  "cortex_a8_neon_fmul_then_fadd")
458
 
459
;; Instructions using this reservation read their source operands at N2, and
460
;; produce a result at N9 on cycle 2.
461
(define_insn_reservation "neon_fp_vrecps_vrsqrts_qqq" 10
462
  (and (eq_attr "tune" "cortexa8")
463
       (eq_attr "neon_type" "neon_fp_vrecps_vrsqrts_qqq"))
464
  "cortex_a8_neon_fmul_then_fadd_2")
465
 
466
;; Instructions using this reservation read their source operands at N1, and
467
;; produce a result at N2.
468
(define_insn_reservation "neon_bp_simple" 2
469
  (and (eq_attr "tune" "cortexa8")
470
       (eq_attr "neon_type" "neon_bp_simple"))
471
  "cortex_a8_neon_perm")
472
 
473
;; Instructions using this reservation read their source operands at N1, and
474
;; produce a result at N2 on cycle 2.
475
(define_insn_reservation "neon_bp_2cycle" 3
476
  (and (eq_attr "tune" "cortexa8")
477
       (eq_attr "neon_type" "neon_bp_2cycle"))
478
  "cortex_a8_neon_perm_2")
479
 
480
;; Instructions using this reservation read their source operands at N1, and
481
;; produce a result at N2 on cycle 3.
482
(define_insn_reservation "neon_bp_3cycle" 4
483
  (and (eq_attr "tune" "cortexa8")
484
       (eq_attr "neon_type" "neon_bp_3cycle"))
485
  "cortex_a8_neon_perm_3")
486
 
487
;; Instructions using this reservation produce a result at N1.
488
(define_insn_reservation "neon_ldr" 1
489
  (and (eq_attr "tune" "cortexa8")
490
       (eq_attr "neon_type" "neon_ldr"))
491
  "cortex_a8_neon_ls")
492
 
493
;; Instructions using this reservation read their source operands at N1.
494
(define_insn_reservation "neon_str" 0
495
  (and (eq_attr "tune" "cortexa8")
496
       (eq_attr "neon_type" "neon_str"))
497
  "cortex_a8_neon_ls")
498
 
499
;; Instructions using this reservation produce a result at N1 on cycle 2.
500
(define_insn_reservation "neon_vld1_1_2_regs" 2
501
  (and (eq_attr "tune" "cortexa8")
502
       (eq_attr "neon_type" "neon_vld1_1_2_regs"))
503
  "cortex_a8_neon_ls_2")
504
 
505
;; Instructions using this reservation produce a result at N1 on cycle 3.
506
(define_insn_reservation "neon_vld1_3_4_regs" 3
507
  (and (eq_attr "tune" "cortexa8")
508
       (eq_attr "neon_type" "neon_vld1_3_4_regs"))
509
  "cortex_a8_neon_ls_3")
510
 
511
;; Instructions using this reservation produce a result at N2 on cycle 2.
512
(define_insn_reservation "neon_vld2_2_regs_vld1_vld2_all_lanes" 3
513
  (and (eq_attr "tune" "cortexa8")
514
       (eq_attr "neon_type" "neon_vld2_2_regs_vld1_vld2_all_lanes"))
515
  "cortex_a8_neon_ls_2")
516
 
517
;; Instructions using this reservation produce a result at N2 on cycle 3.
518
(define_insn_reservation "neon_vld2_4_regs" 4
519
  (and (eq_attr "tune" "cortexa8")
520
       (eq_attr "neon_type" "neon_vld2_4_regs"))
521
  "cortex_a8_neon_ls_3")
522
 
523
;; Instructions using this reservation produce a result at N2 on cycle 4.
524
(define_insn_reservation "neon_vld3_vld4" 5
525
  (and (eq_attr "tune" "cortexa8")
526
       (eq_attr "neon_type" "neon_vld3_vld4"))
527
  "cortex_a8_neon_ls_4")
528
 
529
;; Instructions using this reservation read their source operands at N1.
530
(define_insn_reservation "neon_vst1_1_2_regs_vst2_2_regs" 0
531
  (and (eq_attr "tune" "cortexa8")
532
       (eq_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs"))
533
  "cortex_a8_neon_ls_2")
534
 
535
;; Instructions using this reservation read their source operands at N1.
536
(define_insn_reservation "neon_vst1_3_4_regs" 0
537
  (and (eq_attr "tune" "cortexa8")
538
       (eq_attr "neon_type" "neon_vst1_3_4_regs"))
539
  "cortex_a8_neon_ls_3")
540
 
541
;; Instructions using this reservation read their source operands at N1.
542
(define_insn_reservation "neon_vst2_4_regs_vst3_vst4" 0
543
  (and (eq_attr "tune" "cortexa8")
544
       (eq_attr "neon_type" "neon_vst2_4_regs_vst3_vst4"))
545
  "cortex_a8_neon_ls_4")
546
 
547
;; Instructions using this reservation read their source operands at N1.
548
(define_insn_reservation "neon_vst3_vst4" 0
549
  (and (eq_attr "tune" "cortexa8")
550
       (eq_attr "neon_type" "neon_vst3_vst4"))
551
  "cortex_a8_neon_ls_4")
552
 
553
;; Instructions using this reservation read their source operands at N1, and
554
;; produce a result at N2 on cycle 3.
555
(define_insn_reservation "neon_vld1_vld2_lane" 4
556
  (and (eq_attr "tune" "cortexa8")
557
       (eq_attr "neon_type" "neon_vld1_vld2_lane"))
558
  "cortex_a8_neon_ls_3")
559
 
560
;; Instructions using this reservation read their source operands at N1, and
561
;; produce a result at N2 on cycle 5.
562
(define_insn_reservation "neon_vld3_vld4_lane" 6
563
  (and (eq_attr "tune" "cortexa8")
564
       (eq_attr "neon_type" "neon_vld3_vld4_lane"))
565
  "cortex_a8_neon_ls_5")
566
 
567
;; Instructions using this reservation read their source operands at N1.
568
(define_insn_reservation "neon_vst1_vst2_lane" 0
569
  (and (eq_attr "tune" "cortexa8")
570
       (eq_attr "neon_type" "neon_vst1_vst2_lane"))
571
  "cortex_a8_neon_ls_2")
572
 
573
;; Instructions using this reservation read their source operands at N1.
574
(define_insn_reservation "neon_vst3_vst4_lane" 0
575
  (and (eq_attr "tune" "cortexa8")
576
       (eq_attr "neon_type" "neon_vst3_vst4_lane"))
577
  "cortex_a8_neon_ls_3")
578
 
579
;; Instructions using this reservation produce a result at N2 on cycle 2.
580
(define_insn_reservation "neon_vld3_vld4_all_lanes" 3
581
  (and (eq_attr "tune" "cortexa8")
582
       (eq_attr "neon_type" "neon_vld3_vld4_all_lanes"))
583
  "cortex_a8_neon_ls_3")
584
 
585
;; Instructions using this reservation produce a result at N2.
586
(define_insn_reservation "neon_mcr" 2
587
  (and (eq_attr "tune" "cortexa8")
588
       (eq_attr "neon_type" "neon_mcr"))
589
  "cortex_a8_neon_perm")
590
 
591
;; Instructions using this reservation produce a result at N2.
592
(define_insn_reservation "neon_mcr_2_mcrr" 2
593
  (and (eq_attr "tune" "cortexa8")
594
       (eq_attr "neon_type" "neon_mcr_2_mcrr"))
595
  "cortex_a8_neon_perm_2")
596
 
597
;; Exceptions to the default latencies.
598
 
599
(define_bypass 1 "neon_mcr_2_mcrr"
600
               "neon_int_1,\
601
               neon_int_4,\
602
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
603
               neon_mul_qqq_8_16_32_ddd_32,\
604
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
605
               neon_mla_qqq_8_16,\
606
               neon_fp_vadd_ddd_vabs_dd,\
607
               neon_fp_vadd_qqq_vabs_qq,\
608
               neon_fp_vmla_ddd,\
609
               neon_fp_vmla_qqq,\
610
               neon_fp_vrecps_vrsqrts_ddd,\
611
               neon_fp_vrecps_vrsqrts_qqq")
612
 
613
(define_bypass 1 "neon_mcr"
614
               "neon_int_1,\
615
               neon_int_4,\
616
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
617
               neon_mul_qqq_8_16_32_ddd_32,\
618
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
619
               neon_mla_qqq_8_16,\
620
               neon_fp_vadd_ddd_vabs_dd,\
621
               neon_fp_vadd_qqq_vabs_qq,\
622
               neon_fp_vmla_ddd,\
623
               neon_fp_vmla_qqq,\
624
               neon_fp_vrecps_vrsqrts_ddd,\
625
               neon_fp_vrecps_vrsqrts_qqq")
626
 
627
(define_bypass 2 "neon_vld3_vld4_all_lanes"
628
               "neon_int_1,\
629
               neon_int_4,\
630
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
631
               neon_mul_qqq_8_16_32_ddd_32,\
632
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
633
               neon_mla_qqq_8_16,\
634
               neon_fp_vadd_ddd_vabs_dd,\
635
               neon_fp_vadd_qqq_vabs_qq,\
636
               neon_fp_vmla_ddd,\
637
               neon_fp_vmla_qqq,\
638
               neon_fp_vrecps_vrsqrts_ddd,\
639
               neon_fp_vrecps_vrsqrts_qqq")
640
 
641
(define_bypass 5 "neon_vld3_vld4_lane"
642
               "neon_int_1,\
643
               neon_int_4,\
644
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
645
               neon_mul_qqq_8_16_32_ddd_32,\
646
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
647
               neon_mla_qqq_8_16,\
648
               neon_fp_vadd_ddd_vabs_dd,\
649
               neon_fp_vadd_qqq_vabs_qq,\
650
               neon_fp_vmla_ddd,\
651
               neon_fp_vmla_qqq,\
652
               neon_fp_vrecps_vrsqrts_ddd,\
653
               neon_fp_vrecps_vrsqrts_qqq")
654
 
655
(define_bypass 3 "neon_vld1_vld2_lane"
656
               "neon_int_1,\
657
               neon_int_4,\
658
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
659
               neon_mul_qqq_8_16_32_ddd_32,\
660
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
661
               neon_mla_qqq_8_16,\
662
               neon_fp_vadd_ddd_vabs_dd,\
663
               neon_fp_vadd_qqq_vabs_qq,\
664
               neon_fp_vmla_ddd,\
665
               neon_fp_vmla_qqq,\
666
               neon_fp_vrecps_vrsqrts_ddd,\
667
               neon_fp_vrecps_vrsqrts_qqq")
668
 
669
(define_bypass 4 "neon_vld3_vld4"
670
               "neon_int_1,\
671
               neon_int_4,\
672
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
673
               neon_mul_qqq_8_16_32_ddd_32,\
674
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
675
               neon_mla_qqq_8_16,\
676
               neon_fp_vadd_ddd_vabs_dd,\
677
               neon_fp_vadd_qqq_vabs_qq,\
678
               neon_fp_vmla_ddd,\
679
               neon_fp_vmla_qqq,\
680
               neon_fp_vrecps_vrsqrts_ddd,\
681
               neon_fp_vrecps_vrsqrts_qqq")
682
 
683
(define_bypass 3 "neon_vld2_4_regs"
684
               "neon_int_1,\
685
               neon_int_4,\
686
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
687
               neon_mul_qqq_8_16_32_ddd_32,\
688
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
689
               neon_mla_qqq_8_16,\
690
               neon_fp_vadd_ddd_vabs_dd,\
691
               neon_fp_vadd_qqq_vabs_qq,\
692
               neon_fp_vmla_ddd,\
693
               neon_fp_vmla_qqq,\
694
               neon_fp_vrecps_vrsqrts_ddd,\
695
               neon_fp_vrecps_vrsqrts_qqq")
696
 
697
(define_bypass 2 "neon_vld2_2_regs_vld1_vld2_all_lanes"
698
               "neon_int_1,\
699
               neon_int_4,\
700
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
701
               neon_mul_qqq_8_16_32_ddd_32,\
702
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
703
               neon_mla_qqq_8_16,\
704
               neon_fp_vadd_ddd_vabs_dd,\
705
               neon_fp_vadd_qqq_vabs_qq,\
706
               neon_fp_vmla_ddd,\
707
               neon_fp_vmla_qqq,\
708
               neon_fp_vrecps_vrsqrts_ddd,\
709
               neon_fp_vrecps_vrsqrts_qqq")
710
 
711
(define_bypass 2 "neon_vld1_3_4_regs"
712
               "neon_int_1,\
713
               neon_int_4,\
714
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
715
               neon_mul_qqq_8_16_32_ddd_32,\
716
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
717
               neon_mla_qqq_8_16,\
718
               neon_fp_vadd_ddd_vabs_dd,\
719
               neon_fp_vadd_qqq_vabs_qq,\
720
               neon_fp_vmla_ddd,\
721
               neon_fp_vmla_qqq,\
722
               neon_fp_vrecps_vrsqrts_ddd,\
723
               neon_fp_vrecps_vrsqrts_qqq")
724
 
725
(define_bypass 1 "neon_vld1_1_2_regs"
726
               "neon_int_1,\
727
               neon_int_4,\
728
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
729
               neon_mul_qqq_8_16_32_ddd_32,\
730
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
731
               neon_mla_qqq_8_16,\
732
               neon_fp_vadd_ddd_vabs_dd,\
733
               neon_fp_vadd_qqq_vabs_qq,\
734
               neon_fp_vmla_ddd,\
735
               neon_fp_vmla_qqq,\
736
               neon_fp_vrecps_vrsqrts_ddd,\
737
               neon_fp_vrecps_vrsqrts_qqq")
738
 
739
(define_bypass 0 "neon_ldr"
740
               "neon_int_1,\
741
               neon_int_4,\
742
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
743
               neon_mul_qqq_8_16_32_ddd_32,\
744
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
745
               neon_mla_qqq_8_16,\
746
               neon_fp_vadd_ddd_vabs_dd,\
747
               neon_fp_vadd_qqq_vabs_qq,\
748
               neon_fp_vmla_ddd,\
749
               neon_fp_vmla_qqq,\
750
               neon_fp_vrecps_vrsqrts_ddd,\
751
               neon_fp_vrecps_vrsqrts_qqq")
752
 
753
(define_bypass 3 "neon_bp_3cycle"
754
               "neon_int_1,\
755
               neon_int_4,\
756
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
757
               neon_mul_qqq_8_16_32_ddd_32,\
758
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
759
               neon_mla_qqq_8_16,\
760
               neon_fp_vadd_ddd_vabs_dd,\
761
               neon_fp_vadd_qqq_vabs_qq,\
762
               neon_fp_vmla_ddd,\
763
               neon_fp_vmla_qqq,\
764
               neon_fp_vrecps_vrsqrts_ddd,\
765
               neon_fp_vrecps_vrsqrts_qqq")
766
 
767
(define_bypass 2 "neon_bp_2cycle"
768
               "neon_int_1,\
769
               neon_int_4,\
770
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
771
               neon_mul_qqq_8_16_32_ddd_32,\
772
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
773
               neon_mla_qqq_8_16,\
774
               neon_fp_vadd_ddd_vabs_dd,\
775
               neon_fp_vadd_qqq_vabs_qq,\
776
               neon_fp_vmla_ddd,\
777
               neon_fp_vmla_qqq,\
778
               neon_fp_vrecps_vrsqrts_ddd,\
779
               neon_fp_vrecps_vrsqrts_qqq")
780
 
781
(define_bypass 1 "neon_bp_simple"
782
               "neon_int_1,\
783
               neon_int_4,\
784
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
785
               neon_mul_qqq_8_16_32_ddd_32,\
786
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
787
               neon_mla_qqq_8_16,\
788
               neon_fp_vadd_ddd_vabs_dd,\
789
               neon_fp_vadd_qqq_vabs_qq,\
790
               neon_fp_vmla_ddd,\
791
               neon_fp_vmla_qqq,\
792
               neon_fp_vrecps_vrsqrts_ddd,\
793
               neon_fp_vrecps_vrsqrts_qqq")
794
 
795
(define_bypass 9 "neon_fp_vrecps_vrsqrts_qqq"
796
               "neon_int_1,\
797
               neon_int_4,\
798
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
799
               neon_mul_qqq_8_16_32_ddd_32,\
800
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
801
               neon_mla_qqq_8_16,\
802
               neon_fp_vadd_ddd_vabs_dd,\
803
               neon_fp_vadd_qqq_vabs_qq,\
804
               neon_fp_vmla_ddd,\
805
               neon_fp_vmla_qqq,\
806
               neon_fp_vrecps_vrsqrts_ddd,\
807
               neon_fp_vrecps_vrsqrts_qqq")
808
 
809
(define_bypass 8 "neon_fp_vrecps_vrsqrts_ddd"
810
               "neon_int_1,\
811
               neon_int_4,\
812
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
813
               neon_mul_qqq_8_16_32_ddd_32,\
814
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
815
               neon_mla_qqq_8_16,\
816
               neon_fp_vadd_ddd_vabs_dd,\
817
               neon_fp_vadd_qqq_vabs_qq,\
818
               neon_fp_vmla_ddd,\
819
               neon_fp_vmla_qqq,\
820
               neon_fp_vrecps_vrsqrts_ddd,\
821
               neon_fp_vrecps_vrsqrts_qqq")
822
 
823
(define_bypass 9 "neon_fp_vmla_qqq_scalar"
824
               "neon_int_1,\
825
               neon_int_4,\
826
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
827
               neon_mul_qqq_8_16_32_ddd_32,\
828
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
829
               neon_mla_qqq_8_16,\
830
               neon_fp_vadd_ddd_vabs_dd,\
831
               neon_fp_vadd_qqq_vabs_qq,\
832
               neon_fp_vmla_ddd,\
833
               neon_fp_vmla_qqq,\
834
               neon_fp_vrecps_vrsqrts_ddd,\
835
               neon_fp_vrecps_vrsqrts_qqq")
836
 
837
(define_bypass 8 "neon_fp_vmla_ddd_scalar"
838
               "neon_int_1,\
839
               neon_int_4,\
840
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
841
               neon_mul_qqq_8_16_32_ddd_32,\
842
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
843
               neon_mla_qqq_8_16,\
844
               neon_fp_vadd_ddd_vabs_dd,\
845
               neon_fp_vadd_qqq_vabs_qq,\
846
               neon_fp_vmla_ddd,\
847
               neon_fp_vmla_qqq,\
848
               neon_fp_vrecps_vrsqrts_ddd,\
849
               neon_fp_vrecps_vrsqrts_qqq")
850
 
851
(define_bypass 9 "neon_fp_vmla_qqq"
852
               "neon_int_1,\
853
               neon_int_4,\
854
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
855
               neon_mul_qqq_8_16_32_ddd_32,\
856
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
857
               neon_mla_qqq_8_16,\
858
               neon_fp_vadd_ddd_vabs_dd,\
859
               neon_fp_vadd_qqq_vabs_qq,\
860
               neon_fp_vmla_ddd,\
861
               neon_fp_vmla_qqq,\
862
               neon_fp_vrecps_vrsqrts_ddd,\
863
               neon_fp_vrecps_vrsqrts_qqq")
864
 
865
(define_bypass 8 "neon_fp_vmla_ddd"
866
               "neon_int_1,\
867
               neon_int_4,\
868
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
869
               neon_mul_qqq_8_16_32_ddd_32,\
870
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
871
               neon_mla_qqq_8_16,\
872
               neon_fp_vadd_ddd_vabs_dd,\
873
               neon_fp_vadd_qqq_vabs_qq,\
874
               neon_fp_vmla_ddd,\
875
               neon_fp_vmla_qqq,\
876
               neon_fp_vrecps_vrsqrts_ddd,\
877
               neon_fp_vrecps_vrsqrts_qqq")
878
 
879
(define_bypass 5 "neon_fp_vmul_qqd"
880
               "neon_int_1,\
881
               neon_int_4,\
882
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
883
               neon_mul_qqq_8_16_32_ddd_32,\
884
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
885
               neon_mla_qqq_8_16,\
886
               neon_fp_vadd_ddd_vabs_dd,\
887
               neon_fp_vadd_qqq_vabs_qq,\
888
               neon_fp_vmla_ddd,\
889
               neon_fp_vmla_qqq,\
890
               neon_fp_vrecps_vrsqrts_ddd,\
891
               neon_fp_vrecps_vrsqrts_qqq")
892
 
893
(define_bypass 4 "neon_fp_vmul_ddd"
894
               "neon_int_1,\
895
               neon_int_4,\
896
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
897
               neon_mul_qqq_8_16_32_ddd_32,\
898
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
899
               neon_mla_qqq_8_16,\
900
               neon_fp_vadd_ddd_vabs_dd,\
901
               neon_fp_vadd_qqq_vabs_qq,\
902
               neon_fp_vmla_ddd,\
903
               neon_fp_vmla_qqq,\
904
               neon_fp_vrecps_vrsqrts_ddd,\
905
               neon_fp_vrecps_vrsqrts_qqq")
906
 
907
(define_bypass 4 "neon_fp_vsum"
908
               "neon_int_1,\
909
               neon_int_4,\
910
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
911
               neon_mul_qqq_8_16_32_ddd_32,\
912
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
913
               neon_mla_qqq_8_16,\
914
               neon_fp_vadd_ddd_vabs_dd,\
915
               neon_fp_vadd_qqq_vabs_qq,\
916
               neon_fp_vmla_ddd,\
917
               neon_fp_vmla_qqq,\
918
               neon_fp_vrecps_vrsqrts_ddd,\
919
               neon_fp_vrecps_vrsqrts_qqq")
920
 
921
(define_bypass 5 "neon_fp_vadd_qqq_vabs_qq"
922
               "neon_int_1,\
923
               neon_int_4,\
924
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
925
               neon_mul_qqq_8_16_32_ddd_32,\
926
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
927
               neon_mla_qqq_8_16,\
928
               neon_fp_vadd_ddd_vabs_dd,\
929
               neon_fp_vadd_qqq_vabs_qq,\
930
               neon_fp_vmla_ddd,\
931
               neon_fp_vmla_qqq,\
932
               neon_fp_vrecps_vrsqrts_ddd,\
933
               neon_fp_vrecps_vrsqrts_qqq")
934
 
935
(define_bypass 4 "neon_fp_vadd_ddd_vabs_dd"
936
               "neon_int_1,\
937
               neon_int_4,\
938
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
939
               neon_mul_qqq_8_16_32_ddd_32,\
940
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
941
               neon_mla_qqq_8_16,\
942
               neon_fp_vadd_ddd_vabs_dd,\
943
               neon_fp_vadd_qqq_vabs_qq,\
944
               neon_fp_vmla_ddd,\
945
               neon_fp_vmla_qqq,\
946
               neon_fp_vrecps_vrsqrts_ddd,\
947
               neon_fp_vrecps_vrsqrts_qqq")
948
 
949
(define_bypass 5 "neon_vsra_vrsra"
950
               "neon_int_1,\
951
               neon_int_4,\
952
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
953
               neon_mul_qqq_8_16_32_ddd_32,\
954
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
955
               neon_mla_qqq_8_16,\
956
               neon_fp_vadd_ddd_vabs_dd,\
957
               neon_fp_vadd_qqq_vabs_qq,\
958
               neon_fp_vmla_ddd,\
959
               neon_fp_vmla_qqq,\
960
               neon_fp_vrecps_vrsqrts_ddd,\
961
               neon_fp_vrecps_vrsqrts_qqq")
962
 
963
(define_bypass 4 "neon_vqshl_vrshl_vqrshl_qqq"
964
               "neon_int_1,\
965
               neon_int_4,\
966
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
967
               neon_mul_qqq_8_16_32_ddd_32,\
968
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
969
               neon_mla_qqq_8_16,\
970
               neon_fp_vadd_ddd_vabs_dd,\
971
               neon_fp_vadd_qqq_vabs_qq,\
972
               neon_fp_vmla_ddd,\
973
               neon_fp_vmla_qqq,\
974
               neon_fp_vrecps_vrsqrts_ddd,\
975
               neon_fp_vrecps_vrsqrts_qqq")
976
 
977
(define_bypass 0 "neon_vshl_ddd"
978
               "neon_int_1,\
979
               neon_int_4,\
980
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
981
               neon_mul_qqq_8_16_32_ddd_32,\
982
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
983
               neon_mla_qqq_8_16,\
984
               neon_fp_vadd_ddd_vabs_dd,\
985
               neon_fp_vadd_qqq_vabs_qq,\
986
               neon_fp_vmla_ddd,\
987
               neon_fp_vmla_qqq,\
988
               neon_fp_vrecps_vrsqrts_ddd,\
989
               neon_fp_vrecps_vrsqrts_qqq")
990
 
991
(define_bypass 3 "neon_shift_3"
992
               "neon_int_1,\
993
               neon_int_4,\
994
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
995
               neon_mul_qqq_8_16_32_ddd_32,\
996
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
997
               neon_mla_qqq_8_16,\
998
               neon_fp_vadd_ddd_vabs_dd,\
999
               neon_fp_vadd_qqq_vabs_qq,\
1000
               neon_fp_vmla_ddd,\
1001
               neon_fp_vmla_qqq,\
1002
               neon_fp_vrecps_vrsqrts_ddd,\
1003
               neon_fp_vrecps_vrsqrts_qqq")
1004
 
1005
(define_bypass 3 "neon_shift_2"
1006
               "neon_int_1,\
1007
               neon_int_4,\
1008
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1009
               neon_mul_qqq_8_16_32_ddd_32,\
1010
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1011
               neon_mla_qqq_8_16,\
1012
               neon_fp_vadd_ddd_vabs_dd,\
1013
               neon_fp_vadd_qqq_vabs_qq,\
1014
               neon_fp_vmla_ddd,\
1015
               neon_fp_vmla_qqq,\
1016
               neon_fp_vrecps_vrsqrts_ddd,\
1017
               neon_fp_vrecps_vrsqrts_qqq")
1018
 
1019
(define_bypass 2 "neon_shift_1"
1020
               "neon_int_1,\
1021
               neon_int_4,\
1022
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1023
               neon_mul_qqq_8_16_32_ddd_32,\
1024
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1025
               neon_mla_qqq_8_16,\
1026
               neon_fp_vadd_ddd_vabs_dd,\
1027
               neon_fp_vadd_qqq_vabs_qq,\
1028
               neon_fp_vmla_ddd,\
1029
               neon_fp_vmla_qqq,\
1030
               neon_fp_vrecps_vrsqrts_ddd,\
1031
               neon_fp_vrecps_vrsqrts_qqq")
1032
 
1033
(define_bypass 5 "neon_mla_ddd_16_scalar_qdd_32_16_long_scalar"
1034
               "neon_int_1,\
1035
               neon_int_4,\
1036
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1037
               neon_mul_qqq_8_16_32_ddd_32,\
1038
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1039
               neon_mla_qqq_8_16,\
1040
               neon_fp_vadd_ddd_vabs_dd,\
1041
               neon_fp_vadd_qqq_vabs_qq,\
1042
               neon_fp_vmla_ddd,\
1043
               neon_fp_vmla_qqq,\
1044
               neon_fp_vrecps_vrsqrts_ddd,\
1045
               neon_fp_vrecps_vrsqrts_qqq")
1046
 
1047
(define_bypass 8 "neon_mul_qqd_32_scalar"
1048
               "neon_int_1,\
1049
               neon_int_4,\
1050
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1051
               neon_mul_qqq_8_16_32_ddd_32,\
1052
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1053
               neon_mla_qqq_8_16,\
1054
               neon_fp_vadd_ddd_vabs_dd,\
1055
               neon_fp_vadd_qqq_vabs_qq,\
1056
               neon_fp_vmla_ddd,\
1057
               neon_fp_vmla_qqq,\
1058
               neon_fp_vrecps_vrsqrts_ddd,\
1059
               neon_fp_vrecps_vrsqrts_qqq")
1060
 
1061
(define_bypass 5 "neon_mul_ddd_16_scalar_32_16_long_scalar"
1062
               "neon_int_1,\
1063
               neon_int_4,\
1064
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1065
               neon_mul_qqq_8_16_32_ddd_32,\
1066
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1067
               neon_mla_qqq_8_16,\
1068
               neon_fp_vadd_ddd_vabs_dd,\
1069
               neon_fp_vadd_qqq_vabs_qq,\
1070
               neon_fp_vmla_ddd,\
1071
               neon_fp_vmla_qqq,\
1072
               neon_fp_vrecps_vrsqrts_ddd,\
1073
               neon_fp_vrecps_vrsqrts_qqq")
1074
 
1075
(define_bypass 8 "neon_mla_qqq_32_qqd_32_scalar"
1076
               "neon_int_1,\
1077
               neon_int_4,\
1078
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1079
               neon_mul_qqq_8_16_32_ddd_32,\
1080
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1081
               neon_mla_qqq_8_16,\
1082
               neon_fp_vadd_ddd_vabs_dd,\
1083
               neon_fp_vadd_qqq_vabs_qq,\
1084
               neon_fp_vmla_ddd,\
1085
               neon_fp_vmla_qqq,\
1086
               neon_fp_vrecps_vrsqrts_ddd,\
1087
               neon_fp_vrecps_vrsqrts_qqq")
1088
 
1089
(define_bypass 6 "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long"
1090
               "neon_int_1,\
1091
               neon_int_4,\
1092
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1093
               neon_mul_qqq_8_16_32_ddd_32,\
1094
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1095
               neon_mla_qqq_8_16,\
1096
               neon_fp_vadd_ddd_vabs_dd,\
1097
               neon_fp_vadd_qqq_vabs_qq,\
1098
               neon_fp_vmla_ddd,\
1099
               neon_fp_vmla_qqq,\
1100
               neon_fp_vrecps_vrsqrts_ddd,\
1101
               neon_fp_vrecps_vrsqrts_qqq")
1102
 
1103
(define_bypass 6 "neon_mla_qqq_8_16"
1104
               "neon_int_1,\
1105
               neon_int_4,\
1106
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1107
               neon_mul_qqq_8_16_32_ddd_32,\
1108
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1109
               neon_mla_qqq_8_16,\
1110
               neon_fp_vadd_ddd_vabs_dd,\
1111
               neon_fp_vadd_qqq_vabs_qq,\
1112
               neon_fp_vmla_ddd,\
1113
               neon_fp_vmla_qqq,\
1114
               neon_fp_vrecps_vrsqrts_ddd,\
1115
               neon_fp_vrecps_vrsqrts_qqq")
1116
 
1117
(define_bypass 5 "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long"
1118
               "neon_int_1,\
1119
               neon_int_4,\
1120
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1121
               neon_mul_qqq_8_16_32_ddd_32,\
1122
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1123
               neon_mla_qqq_8_16,\
1124
               neon_fp_vadd_ddd_vabs_dd,\
1125
               neon_fp_vadd_qqq_vabs_qq,\
1126
               neon_fp_vmla_ddd,\
1127
               neon_fp_vmla_qqq,\
1128
               neon_fp_vrecps_vrsqrts_ddd,\
1129
               neon_fp_vrecps_vrsqrts_qqq")
1130
 
1131
(define_bypass 6 "neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar"
1132
               "neon_int_1,\
1133
               neon_int_4,\
1134
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1135
               neon_mul_qqq_8_16_32_ddd_32,\
1136
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1137
               neon_mla_qqq_8_16,\
1138
               neon_fp_vadd_ddd_vabs_dd,\
1139
               neon_fp_vadd_qqq_vabs_qq,\
1140
               neon_fp_vmla_ddd,\
1141
               neon_fp_vmla_qqq,\
1142
               neon_fp_vrecps_vrsqrts_ddd,\
1143
               neon_fp_vrecps_vrsqrts_qqq")
1144
 
1145
(define_bypass 6 "neon_mul_qqq_8_16_32_ddd_32"
1146
               "neon_int_1,\
1147
               neon_int_4,\
1148
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1149
               neon_mul_qqq_8_16_32_ddd_32,\
1150
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1151
               neon_mla_qqq_8_16,\
1152
               neon_fp_vadd_ddd_vabs_dd,\
1153
               neon_fp_vadd_qqq_vabs_qq,\
1154
               neon_fp_vmla_ddd,\
1155
               neon_fp_vmla_qqq,\
1156
               neon_fp_vrecps_vrsqrts_ddd,\
1157
               neon_fp_vrecps_vrsqrts_qqq")
1158
 
1159
(define_bypass 5 "neon_mul_ddd_8_16_qdd_16_8_long_32_16_long"
1160
               "neon_int_1,\
1161
               neon_int_4,\
1162
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1163
               neon_mul_qqq_8_16_32_ddd_32,\
1164
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1165
               neon_mla_qqq_8_16,\
1166
               neon_fp_vadd_ddd_vabs_dd,\
1167
               neon_fp_vadd_qqq_vabs_qq,\
1168
               neon_fp_vmla_ddd,\
1169
               neon_fp_vmla_qqq,\
1170
               neon_fp_vrecps_vrsqrts_ddd,\
1171
               neon_fp_vrecps_vrsqrts_qqq")
1172
 
1173
(define_bypass 5 "neon_vsma"
1174
               "neon_int_1,\
1175
               neon_int_4,\
1176
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1177
               neon_mul_qqq_8_16_32_ddd_32,\
1178
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1179
               neon_mla_qqq_8_16,\
1180
               neon_fp_vadd_ddd_vabs_dd,\
1181
               neon_fp_vadd_qqq_vabs_qq,\
1182
               neon_fp_vmla_ddd,\
1183
               neon_fp_vmla_qqq,\
1184
               neon_fp_vrecps_vrsqrts_ddd,\
1185
               neon_fp_vrecps_vrsqrts_qqq")
1186
 
1187
(define_bypass 6 "neon_vaba_qqq"
1188
               "neon_int_1,\
1189
               neon_int_4,\
1190
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1191
               neon_mul_qqq_8_16_32_ddd_32,\
1192
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1193
               neon_mla_qqq_8_16,\
1194
               neon_fp_vadd_ddd_vabs_dd,\
1195
               neon_fp_vadd_qqq_vabs_qq,\
1196
               neon_fp_vmla_ddd,\
1197
               neon_fp_vmla_qqq,\
1198
               neon_fp_vrecps_vrsqrts_ddd,\
1199
               neon_fp_vrecps_vrsqrts_qqq")
1200
 
1201
(define_bypass 5 "neon_vaba"
1202
               "neon_int_1,\
1203
               neon_int_4,\
1204
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1205
               neon_mul_qqq_8_16_32_ddd_32,\
1206
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1207
               neon_mla_qqq_8_16,\
1208
               neon_fp_vadd_ddd_vabs_dd,\
1209
               neon_fp_vadd_qqq_vabs_qq,\
1210
               neon_fp_vmla_ddd,\
1211
               neon_fp_vmla_qqq,\
1212
               neon_fp_vrecps_vrsqrts_ddd,\
1213
               neon_fp_vrecps_vrsqrts_qqq")
1214
 
1215
(define_bypass 2 "neon_vmov"
1216
               "neon_int_1,\
1217
               neon_int_4,\
1218
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1219
               neon_mul_qqq_8_16_32_ddd_32,\
1220
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1221
               neon_mla_qqq_8_16,\
1222
               neon_fp_vadd_ddd_vabs_dd,\
1223
               neon_fp_vadd_qqq_vabs_qq,\
1224
               neon_fp_vmla_ddd,\
1225
               neon_fp_vmla_qqq,\
1226
               neon_fp_vrecps_vrsqrts_ddd,\
1227
               neon_fp_vrecps_vrsqrts_qqq")
1228
 
1229
(define_bypass 3 "neon_vqneg_vqabs"
1230
               "neon_int_1,\
1231
               neon_int_4,\
1232
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1233
               neon_mul_qqq_8_16_32_ddd_32,\
1234
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1235
               neon_mla_qqq_8_16,\
1236
               neon_fp_vadd_ddd_vabs_dd,\
1237
               neon_fp_vadd_qqq_vabs_qq,\
1238
               neon_fp_vmla_ddd,\
1239
               neon_fp_vmla_qqq,\
1240
               neon_fp_vrecps_vrsqrts_ddd,\
1241
               neon_fp_vrecps_vrsqrts_qqq")
1242
 
1243
(define_bypass 3 "neon_int_5"
1244
               "neon_int_1,\
1245
               neon_int_4,\
1246
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1247
               neon_mul_qqq_8_16_32_ddd_32,\
1248
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1249
               neon_mla_qqq_8_16,\
1250
               neon_fp_vadd_ddd_vabs_dd,\
1251
               neon_fp_vadd_qqq_vabs_qq,\
1252
               neon_fp_vmla_ddd,\
1253
               neon_fp_vmla_qqq,\
1254
               neon_fp_vrecps_vrsqrts_ddd,\
1255
               neon_fp_vrecps_vrsqrts_qqq")
1256
 
1257
(define_bypass 3 "neon_int_4"
1258
               "neon_int_1,\
1259
               neon_int_4,\
1260
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1261
               neon_mul_qqq_8_16_32_ddd_32,\
1262
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1263
               neon_mla_qqq_8_16,\
1264
               neon_fp_vadd_ddd_vabs_dd,\
1265
               neon_fp_vadd_qqq_vabs_qq,\
1266
               neon_fp_vmla_ddd,\
1267
               neon_fp_vmla_qqq,\
1268
               neon_fp_vrecps_vrsqrts_ddd,\
1269
               neon_fp_vrecps_vrsqrts_qqq")
1270
 
1271
(define_bypass 2 "neon_int_3"
1272
               "neon_int_1,\
1273
               neon_int_4,\
1274
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1275
               neon_mul_qqq_8_16_32_ddd_32,\
1276
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1277
               neon_mla_qqq_8_16,\
1278
               neon_fp_vadd_ddd_vabs_dd,\
1279
               neon_fp_vadd_qqq_vabs_qq,\
1280
               neon_fp_vmla_ddd,\
1281
               neon_fp_vmla_qqq,\
1282
               neon_fp_vrecps_vrsqrts_ddd,\
1283
               neon_fp_vrecps_vrsqrts_qqq")
1284
 
1285
(define_bypass 2 "neon_int_2"
1286
               "neon_int_1,\
1287
               neon_int_4,\
1288
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1289
               neon_mul_qqq_8_16_32_ddd_32,\
1290
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1291
               neon_mla_qqq_8_16,\
1292
               neon_fp_vadd_ddd_vabs_dd,\
1293
               neon_fp_vadd_qqq_vabs_qq,\
1294
               neon_fp_vmla_ddd,\
1295
               neon_fp_vmla_qqq,\
1296
               neon_fp_vrecps_vrsqrts_ddd,\
1297
               neon_fp_vrecps_vrsqrts_qqq")
1298
 
1299
(define_bypass 2 "neon_int_1"
1300
               "neon_int_1,\
1301
               neon_int_4,\
1302
               neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
1303
               neon_mul_qqq_8_16_32_ddd_32,\
1304
               neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
1305
               neon_mla_qqq_8_16,\
1306
               neon_fp_vadd_ddd_vabs_dd,\
1307
               neon_fp_vadd_qqq_vabs_qq,\
1308
               neon_fp_vmla_ddd,\
1309
               neon_fp_vmla_qqq,\
1310
               neon_fp_vrecps_vrsqrts_ddd,\
1311
               neon_fp_vrecps_vrsqrts_qqq")
1312
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.