]>
Commit | Line | Data |
---|---|---|
51c69ddb | 1 | ;; ARM Cortex-R4F VFP pipeline description |
23a5b65a | 2 | ;; Copyright (C) 2007-2014 Free Software Foundation, Inc. |
51c69ddb PB |
3 | ;; Written 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 by | |
9 | ;; the Free Software Foundation; either version 3, or (at your option) | |
10 | ;; any later version. | |
11 | ;; | |
12 | ;; GCC is distributed in the hope that it will be useful, but | |
13 | ;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | ;; General Public 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 | ;; <http://www.gnu.org/licenses/>. | |
20 | ||
21 | ;; With the exception of simple VMOV <freg>, <freg> instructions and | |
22 | ;; the accululate operand of a multiply-accumulate instruction, all | |
23 | ;; registers are early registers. Thus base latencies are 1 more than | |
24 | ;; those listed in the TRM. | |
25 | ||
26 | ;; We use the A, B abd C units from the integer core, plus two additional | |
27 | ;; units to enforce VFP dual issue constraints. | |
28 | ||
29 | ;; A B C V1 VMLA | |
30 | ;; fcpy 1 2 | |
31 | ;; farith 1 2 1 | |
32 | ;; fmrc 1 2 | |
33 | ;; fconst 1 2 * * | |
34 | ;; ffarith 1 2 * * | |
35 | ;; fmac 1 2 1 2 | |
36 | ;; fdiv 1 2 * | |
37 | ;; f_loads * * * | |
38 | ;; f_stores * * * | |
39 | ||
40 | (define_cpu_unit "cortex_r4_v1" "cortex_r4") | |
41 | ||
42 | (define_cpu_unit "cortex_r4_vmla" "cortex_r4") | |
43 | ||
44 | (define_reservation "cortex_r4_issue_ab" | |
45 | "(cortex_r4_issue_a|cortex_r4_issue_b)") | |
46 | (define_reservation "cortex_r4_single_issue" | |
47 | "cortex_r4_issue_a+cortex_r4_issue_b") | |
48 | ||
49 | (define_insn_reservation "cortex_r4_fcpys" 2 | |
50 | (and (eq_attr "tune_cortexr4" "yes") | |
292b89b3 | 51 | (eq_attr "type" "fmov")) |
51c69ddb PB |
52 | "cortex_r4_issue_ab") |
53 | ||
54 | (define_insn_reservation "cortex_r4_ffariths" 2 | |
55 | (and (eq_attr "tune_cortexr4" "yes") | |
56 | (eq_attr "type" "ffariths,fconsts,fcmps")) | |
57 | "cortex_r4_issue_ab+cortex_r4_issue_c+cortex_r4_v1") | |
58 | ||
59 | (define_insn_reservation "cortex_r4_fariths" 3 | |
60 | (and (eq_attr "tune_cortexr4" "yes") | |
61 | (eq_attr "type" "fadds,fmuls")) | |
62 | "(cortex_r4_issue_a+cortex_r4_v1)|cortex_r4_issue_b") | |
63 | ||
64 | (define_insn_reservation "cortex_r4_fmacs" 6 | |
65 | (and (eq_attr "tune_cortexr4" "yes") | |
29637783 | 66 | (eq_attr "type" "fmacs,ffmas")) |
51c69ddb PB |
67 | "(cortex_r4_issue_a+cortex_r4_v1)|(cortex_r4_issue_b+cortex_r4_vmla)") |
68 | ||
69 | (define_insn_reservation "cortex_r4_fdivs" 17 | |
70 | (and (eq_attr "tune_cortexr4" "yes") | |
b86923f0 | 71 | (eq_attr "type" "fdivs, fsqrts")) |
51c69ddb PB |
72 | "cortex_r4_issue_ab+cortex_r4_v1,cortex_r4_issue_a+cortex_r4_v1") |
73 | ||
74 | (define_insn_reservation "cortex_r4_floads" 2 | |
75 | (and (eq_attr "tune_cortexr4" "yes") | |
76 | (eq_attr "type" "f_loads")) | |
77 | "cortex_r4_issue_a+cortex_r4_issue_c+cortex_r4_v1") | |
78 | ||
79 | (define_insn_reservation "cortex_r4_fstores" 1 | |
80 | (and (eq_attr "tune_cortexr4" "yes") | |
81 | (eq_attr "type" "f_stores")) | |
82 | "cortex_r4_issue_a+cortex_r4_issue_c+cortex_r4_vmla") | |
83 | ||
84 | (define_insn_reservation "cortex_r4_mcr" 2 | |
85 | (and (eq_attr "tune_cortexr4" "yes") | |
003bb7f3 | 86 | (eq_attr "type" "f_mcr,f_mcrr")) |
51c69ddb PB |
87 | "cortex_r4_issue_ab") |
88 | ||
89 | (define_insn_reservation "cortex_r4_mrc" 3 | |
90 | (and (eq_attr "tune_cortexr4" "yes") | |
003bb7f3 | 91 | (eq_attr "type" "f_mrc,f_mrrc")) |
51c69ddb PB |
92 | "cortex_r4_issue_ab") |
93 | ||
94 | ;; Bypasses for normal (not early) regs. | |
95 | (define_bypass 1 "cortex_r4_ffariths,cortex_r4_fcpys,cortex_r4_mcr" | |
96 | "cortex_r4_fcpys") | |
97 | (define_bypass 2 "cortex_r4_fariths" | |
98 | "cortex_r4_fcpys") | |
99 | (define_bypass 5 "cortex_r4_fmacs" | |
100 | "cortex_r4_fcpys") | |
101 | (define_bypass 16 "cortex_r4_fdivs" | |
102 | "cortex_r4_fcpys") | |
103 | ||
104 | (define_bypass 1 "cortex_r4_ffariths,cortex_r4_fcpys,cortex_r4_mcr" | |
105 | "cortex_r4_fmacs" | |
106 | "arm_no_early_mul_dep") | |
107 | (define_bypass 2 "cortex_r4_fariths" | |
108 | "cortex_r4_fmacs" | |
109 | "arm_no_early_mul_dep") | |
110 | ;; mac->mac has an extra forwarding path. | |
111 | (define_bypass 3 "cortex_r4_fmacs" | |
112 | "cortex_r4_fmacs" | |
113 | "arm_no_early_mul_dep") | |
114 | (define_bypass 16 "cortex_r4_fdivs" | |
115 | "cortex_r4_fmacs" | |
116 | "arm_no_early_mul_dep") | |
117 | ||
118 | ;; Double precision operations. These can not dual issue. | |
119 | ||
120 | (define_insn_reservation "cortex_r4_fmacd" 20 | |
121 | (and (eq_attr "tune_cortexr4" "yes") | |
29637783 | 122 | (eq_attr "type" "fmacd,ffmad")) |
51c69ddb PB |
123 | "cortex_r4_single_issue*13") |
124 | ||
125 | (define_insn_reservation "cortex_r4_farith" 10 | |
126 | (and (eq_attr "tune_cortexr4" "yes") | |
127 | (eq_attr "type" "faddd,fmuld")) | |
128 | "cortex_r4_single_issue*3") | |
129 | ||
130 | ;; FIXME: The short cycle count suggests these instructions complete | |
131 | ;; out of order. Chances are this is not a pipelined operation. | |
132 | (define_insn_reservation "cortex_r4_fdivd" 97 | |
133 | (and (eq_attr "tune_cortexr4" "yes") | |
b86923f0 | 134 | (eq_attr "type" "fdivd, fsqrtd")) |
51c69ddb PB |
135 | "cortex_r4_single_issue*3") |
136 | ||
137 | (define_insn_reservation "cortex_r4_ffarithd" 2 | |
138 | (and (eq_attr "tune_cortexr4" "yes") | |
139 | (eq_attr "type" "ffarithd,fconstd")) | |
140 | "cortex_r4_single_issue") | |
141 | ||
142 | (define_insn_reservation "cortex_r4_fcmpd" 2 | |
143 | (and (eq_attr "tune_cortexr4" "yes") | |
144 | (eq_attr "type" "fcmpd")) | |
145 | "cortex_r4_single_issue*2") | |
146 | ||
147 | (define_insn_reservation "cortex_r4_f_cvt" 8 | |
148 | (and (eq_attr "tune_cortexr4" "yes") | |
7b49c9e1 | 149 | (eq_attr "type" "f_cvt,f_cvtf2i,f_cvti2f")) |
51c69ddb PB |
150 | "cortex_r4_single_issue*3") |
151 | ||
152 | (define_insn_reservation "cortex_r4_f_memd" 8 | |
153 | (and (eq_attr "tune_cortexr4" "yes") | |
154 | (eq_attr "type" "f_loadd,f_stored")) | |
155 | "cortex_r4_single_issue") | |
156 | ||
157 | (define_insn_reservation "cortex_r4_f_flag" 1 | |
158 | (and (eq_attr "tune_cortexr4" "yes") | |
159 | (eq_attr "type" "f_stores")) | |
160 | "cortex_r4_single_issue") | |
161 |