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