Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/rs6000/power4.md @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | 04ced10e8804 |
comparison
equal
deleted
inserted
replaced
52:c156f1bd5cd9 | 55:77e2b8dfacca |
---|---|
1 ;; Scheduling description for IBM Power4 and PowerPC 970 processors. | 1 ;; Scheduling description for IBM Power4 and PowerPC 970 processors. |
2 ;; Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. | 2 ;; Copyright (C) 2003, 2004, 2007, 2009 Free Software Foundation, Inc. |
3 ;; | 3 ;; |
4 ;; This file is part of GCC. | 4 ;; This file is part of GCC. |
5 ;; | 5 ;; |
6 ;; GCC is free software; you can redistribute it and/or modify it | 6 ;; GCC is free software; you can redistribute it and/or modify it |
7 ;; under the terms of the GNU General Public License as published | 7 ;; under the terms of the GNU General Public License as published |
39 |(du2_power4,lsu2_power4)\ | 39 |(du2_power4,lsu2_power4)\ |
40 |(du3_power4,lsu2_power4)\ | 40 |(du3_power4,lsu2_power4)\ |
41 |(du4_power4,lsu1_power4)") | 41 |(du4_power4,lsu1_power4)") |
42 | 42 |
43 (define_reservation "lsuq_power4" | 43 (define_reservation "lsuq_power4" |
44 "(du1_power4+du2_power4,lsu1_power4+iu2_power4)\ | 44 "((du1_power4+du2_power4,lsu1_power4)\ |
45 |(du2_power4+du3_power4,lsu2_power4+iu2_power4)\ | 45 |(du2_power4+du3_power4,lsu2_power4)\ |
46 |(du3_power4+du4_power4,lsu2_power4+iu1_power4)") | 46 |(du3_power4+du4_power4,lsu2_power4))\ |
47 +(nothing,iu2_power4|nothing,iu1_power4)") | |
47 | 48 |
48 (define_reservation "iq_power4" | 49 (define_reservation "iq_power4" |
49 "(du1_power4,iu1_power4)\ | 50 "(du1_power4|du2_power4|du3_power4|du4_power4),\ |
50 |(du2_power4,iu2_power4)\ | 51 (iu1_power4|iu2_power4)") |
51 |(du3_power4,iu2_power4)\ | |
52 |(du4_power4,iu1_power4)") | |
53 | 52 |
54 (define_reservation "fpq_power4" | 53 (define_reservation "fpq_power4" |
55 "(du1_power4,fpu1_power4)\ | 54 "(du1_power4|du2_power4|du3_power4|du4_power4),\ |
56 |(du2_power4,fpu2_power4)\ | 55 (fpu1_power4|fpu2_power4)") |
57 |(du3_power4,fpu2_power4)\ | |
58 |(du4_power4,fpu1_power4)") | |
59 | 56 |
60 (define_reservation "vq_power4" | 57 (define_reservation "vq_power4" |
61 "(du1_power4,vec_power4)\ | 58 "(du1_power4,vec_power4)\ |
62 |(du2_power4,vec_power4)\ | 59 |(du2_power4,vec_power4)\ |
63 |(du3_power4,vec_power4)\ | 60 |(du3_power4,vec_power4)\ |
84 "lsq_power4") | 81 "lsq_power4") |
85 | 82 |
86 (define_insn_reservation "power4-load-ext" 5 | 83 (define_insn_reservation "power4-load-ext" 5 |
87 (and (eq_attr "type" "load_ext") | 84 (and (eq_attr "type" "load_ext") |
88 (eq_attr "cpu" "power4")) | 85 (eq_attr "cpu" "power4")) |
89 "(du1_power4+du2_power4,lsu1_power4,nothing,nothing,iu2_power4)\ | 86 "(du1_power4+du2_power4,lsu1_power4\ |
90 |(du2_power4+du3_power4,lsu2_power4,nothing,nothing,iu2_power4)\ | 87 |du2_power4+du3_power4,lsu2_power4\ |
91 |(du3_power4+du4_power4,lsu2_power4,nothing,nothing,iu1_power4)") | 88 |du3_power4+du4_power4,lsu2_power4),\ |
89 nothing,nothing,\ | |
90 (iu2_power4|iu1_power4)") | |
92 | 91 |
93 (define_insn_reservation "power4-load-ext-update" 5 | 92 (define_insn_reservation "power4-load-ext-update" 5 |
94 (and (eq_attr "type" "load_ext_u") | 93 (and (eq_attr "type" "load_ext_u") |
95 (eq_attr "cpu" "power4")) | 94 (eq_attr "cpu" "power4")) |
96 "du1_power4+du2_power4+du3_power4+du4_power4,\ | 95 "du1_power4+du2_power4+du3_power4+du4_power4,\ |
129 "lsq_power4") | 128 "lsq_power4") |
130 | 129 |
131 (define_insn_reservation "power4-store" 12 | 130 (define_insn_reservation "power4-store" 12 |
132 (and (eq_attr "type" "store") | 131 (and (eq_attr "type" "store") |
133 (eq_attr "cpu" "power4")) | 132 (eq_attr "cpu" "power4")) |
134 "(du1_power4,lsu1_power4,iu1_power4)\ | 133 "((du1_power4,lsu1_power4)\ |
135 |(du2_power4,lsu2_power4,iu2_power4)\ | 134 |(du2_power4,lsu2_power4)\ |
136 |(du3_power4,lsu2_power4,iu2_power4)\ | 135 |(du3_power4,lsu2_power4)\ |
137 |(du4_power4,lsu1_power4,iu1_power4)") | 136 |(du4_power4,lsu1_power4)),\ |
137 (iu1_power4|iu2_power4)") | |
138 | 138 |
139 (define_insn_reservation "power4-store-update" 12 | 139 (define_insn_reservation "power4-store-update" 12 |
140 (and (eq_attr "type" "store_u") | 140 (and (eq_attr "type" "store_u") |
141 (eq_attr "cpu" "power4")) | 141 (eq_attr "cpu" "power4")) |
142 "(du1_power4+du2_power4,lsu1_power4+iu2_power4,iu1_power4)\ | 142 "((du1_power4+du2_power4,lsu1_power4)\ |
143 |(du2_power4+du3_power4,lsu2_power4+iu2_power4,iu2_power4)\ | 143 |(du2_power4+du3_power4,lsu2_power4)\ |
144 |(du3_power4+du4_power4,lsu2_power4+iu1_power4,iu2_power4)\ | 144 |(du3_power4+du4_power4,lsu2_power4)\ |
145 |(du3_power4+du4_power4,lsu2_power4,iu1_power4,iu2_power4)") | 145 |(du3_power4+du4_power4,lsu2_power4))+\ |
146 ((nothing,iu2_power4,iu1_power4)\ | |
147 |(nothing,iu2_power4,iu2_power4)\ | |
148 |(nothing,iu1_power4,iu2_power4)\ | |
149 |(nothing,iu1_power4,iu2_power4))") | |
146 | 150 |
147 (define_insn_reservation "power4-store-update-indexed" 12 | 151 (define_insn_reservation "power4-store-update-indexed" 12 |
148 (and (eq_attr "type" "store_ux") | 152 (and (eq_attr "type" "store_ux") |
149 (eq_attr "cpu" "power4")) | 153 (eq_attr "cpu" "power4")) |
150 "du1_power4+du2_power4+du3_power4+du4_power4,\ | 154 "du1_power4+du2_power4+du3_power4+du4_power4,\ |
151 iu1_power4,lsu2_power4+iu2_power4,iu2_power4") | 155 iu1_power4,lsu2_power4+iu2_power4,iu2_power4") |
152 | 156 |
153 (define_insn_reservation "power4-fpstore" 12 | 157 (define_insn_reservation "power4-fpstore" 12 |
154 (and (eq_attr "type" "fpstore") | 158 (and (eq_attr "type" "fpstore") |
155 (eq_attr "cpu" "power4")) | 159 (eq_attr "cpu" "power4")) |
156 "(du1_power4,lsu1_power4,fpu1_power4)\ | 160 "((du1_power4,lsu1_power4)\ |
157 |(du2_power4,lsu2_power4,fpu2_power4)\ | 161 |(du2_power4,lsu2_power4)\ |
158 |(du3_power4,lsu2_power4,fpu2_power4)\ | 162 |(du3_power4,lsu2_power4)\ |
159 |(du4_power4,lsu1_power4,fpu1_power4)") | 163 |(du4_power4,lsu1_power4)),\ |
164 (fpu1_power4|fpu2_power4)") | |
160 | 165 |
161 (define_insn_reservation "power4-fpstore-update" 12 | 166 (define_insn_reservation "power4-fpstore-update" 12 |
162 (and (eq_attr "type" "fpstore_u,fpstore_ux") | 167 (and (eq_attr "type" "fpstore_u,fpstore_ux") |
163 (eq_attr "cpu" "power4")) | 168 (eq_attr "cpu" "power4")) |
164 "(du1_power4+du2_power4,lsu1_power4+iu2_power4,fpu1_power4)\ | 169 "((du1_power4+du2_power4,lsu1_power4)\ |
165 |(du2_power4+du3_power4,lsu2_power4+iu2_power4,fpu2_power4)\ | 170 |(du2_power4+du3_power4,lsu2_power4)\ |
166 |(du3_power4+du4_power4,lsu2_power4+iu1_power4,fpu2_power4)") | 171 |(du3_power4+du4_power4,lsu2_power4))\ |
172 +(nothing,(iu1_power4|iu2_power4),(fpu1_power4|fpu2_power4))") | |
167 | 173 |
168 (define_insn_reservation "power4-vecstore" 12 | 174 (define_insn_reservation "power4-vecstore" 12 |
169 (and (eq_attr "type" "vecstore") | 175 (and (eq_attr "type" "vecstore") |
170 (eq_attr "cpu" "power4")) | 176 (eq_attr "cpu" "power4")) |
171 "(du1_power4,lsu1_power4,vec_power4)\ | 177 "(du1_power4,lsu1_power4,vec_power4)\ |
174 |(du4_power4,lsu1_power4,vec_power4)") | 180 |(du4_power4,lsu1_power4,vec_power4)") |
175 | 181 |
176 (define_insn_reservation "power4-llsc" 11 | 182 (define_insn_reservation "power4-llsc" 11 |
177 (and (eq_attr "type" "load_l,store_c,sync") | 183 (and (eq_attr "type" "load_l,store_c,sync") |
178 (eq_attr "cpu" "power4")) | 184 (eq_attr "cpu" "power4")) |
179 "du1_power4+du2_power4+du3_power4+du4_power4,\ | 185 "du1_power4+du2_power4+du3_power4+du4_power4,lsu1_power4") |
180 lsu1_power4") | |
181 | 186 |
182 | 187 |
183 ; Integer latency is 2 cycles | 188 ; Integer latency is 2 cycles |
184 (define_insn_reservation "power4-integer" 2 | 189 (define_insn_reservation "power4-integer" 2 |
185 (and (eq_attr "type" "integer,insert_dword,shift,trap,\ | 190 (and (eq_attr "type" "integer,insert_dword,shift,trap,\ |
186 var_shift_rotate,cntlz,exts") | 191 var_shift_rotate,cntlz,exts,isel") |
187 (eq_attr "cpu" "power4")) | 192 (eq_attr "cpu" "power4")) |
188 "iq_power4") | 193 "iq_power4") |
189 | 194 |
190 (define_insn_reservation "power4-two" 2 | 195 (define_insn_reservation "power4-two" 2 |
191 (and (eq_attr "type" "two") | 196 (and (eq_attr "type" "two") |
192 (eq_attr "cpu" "power4")) | 197 (eq_attr "cpu" "power4")) |
193 "(du1_power4+du2_power4,iu1_power4,nothing,iu2_power4)\ | 198 "((du1_power4+du2_power4)\ |
194 |(du2_power4+du3_power4,iu2_power4,nothing,iu2_power4)\ | 199 |(du2_power4+du3_power4)\ |
195 |(du3_power4+du4_power4,iu2_power4,nothing,iu1_power4)\ | 200 |(du3_power4+du4_power4)\ |
196 |(du4_power4+du1_power4,iu1_power4,nothing,iu1_power4)") | 201 |(du4_power4+du1_power4)),\ |
202 ((iu1_power4,nothing,iu2_power4)\ | |
203 |(iu2_power4,nothing,iu2_power4)\ | |
204 |(iu2_power4,nothing,iu1_power4)\ | |
205 |(iu1_power4,nothing,iu1_power4))") | |
197 | 206 |
198 (define_insn_reservation "power4-three" 2 | 207 (define_insn_reservation "power4-three" 2 |
199 (and (eq_attr "type" "three") | 208 (and (eq_attr "type" "three") |
200 (eq_attr "cpu" "power4")) | 209 (eq_attr "cpu" "power4")) |
201 "(du1_power4+du2_power4+du3_power4,\ | 210 "(du1_power4+du2_power4+du3_power4|du2_power4+du3_power4+du4_power4\ |
202 iu1_power4,nothing,iu2_power4,nothing,iu2_power4)\ | 211 |du3_power4+du4_power4+du1_power4|du4_power4+du1_power4+du2_power4),\ |
203 |(du2_power4+du3_power4+du4_power4,\ | 212 ((iu1_power4,nothing,iu2_power4,nothing,iu2_power4)\ |
204 iu2_power4,nothing,iu2_power4,nothing,iu1_power4)\ | 213 |(iu2_power4,nothing,iu2_power4,nothing,iu1_power4)\ |
205 |(du3_power4+du4_power4+du1_power4,\ | 214 |(iu2_power4,nothing,iu1_power4,nothing,iu1_power4)\ |
206 iu2_power4,nothing,iu1_power4,nothing,iu1_power4)\ | 215 |(iu1_power4,nothing,iu2_power4,nothing,iu2_power4))") |
207 |(du4_power4+du1_power4+du2_power4,\ | |
208 iu1_power4,nothing,iu2_power4,nothing,iu2_power4)") | |
209 | 216 |
210 (define_insn_reservation "power4-insert" 4 | 217 (define_insn_reservation "power4-insert" 4 |
211 (and (eq_attr "type" "insert_word") | 218 (and (eq_attr "type" "insert_word") |
212 (eq_attr "cpu" "power4")) | 219 (eq_attr "cpu" "power4")) |
213 "(du1_power4+du2_power4,iu1_power4,nothing,iu2_power4)\ | 220 "(du1_power4+du2_power4|du2_power4+du3_power4|du3_power4+du4_power4),\ |
214 |(du2_power4+du3_power4,iu2_power4,nothing,iu2_power4)\ | 221 ((iu1_power4,nothing,iu2_power4)\ |
215 |(du3_power4+du4_power4,iu2_power4,nothing,iu1_power4)") | 222 |(iu2_power4,nothing,iu2_power4)\ |
223 |(iu2_power4,nothing,iu1_power4))") | |
216 | 224 |
217 (define_insn_reservation "power4-cmp" 3 | 225 (define_insn_reservation "power4-cmp" 3 |
218 (and (eq_attr "type" "cmp,fast_compare") | 226 (and (eq_attr "type" "cmp,fast_compare") |
219 (eq_attr "cpu" "power4")) | 227 (eq_attr "cpu" "power4")) |
220 "iq_power4") | 228 "iq_power4") |
221 | 229 |
222 (define_insn_reservation "power4-compare" 2 | 230 (define_insn_reservation "power4-compare" 2 |
223 (and (eq_attr "type" "compare,delayed_compare,var_delayed_compare") | 231 (and (eq_attr "type" "compare,delayed_compare,var_delayed_compare") |
224 (eq_attr "cpu" "power4")) | 232 (eq_attr "cpu" "power4")) |
225 "(du1_power4+du2_power4,iu1_power4,iu2_power4)\ | 233 "(du1_power4+du2_power4|du2_power4+du3_power4|du3_power4+du4_power4),\ |
226 |(du2_power4+du3_power4,iu2_power4,iu2_power4)\ | 234 ((iu1_power4,iu2_power4)\ |
227 |(du3_power4+du4_power4,iu2_power4,iu1_power4)") | 235 |(iu2_power4,iu2_power4)\ |
236 |(iu2_power4,iu1_power4))") | |
228 | 237 |
229 (define_bypass 4 "power4-compare" "power4-branch,power4-crlogical,power4-delayedcr,power4-mfcr,power4-mfcrf") | 238 (define_bypass 4 "power4-compare" "power4-branch,power4-crlogical,power4-delayedcr,power4-mfcr,power4-mfcrf") |
230 | 239 |
231 (define_insn_reservation "power4-lmul-cmp" 7 | 240 (define_insn_reservation "power4-lmul-cmp" 7 |
232 (and (eq_attr "type" "lmul_compare") | 241 (and (eq_attr "type" "lmul_compare") |
233 (eq_attr "cpu" "power4")) | 242 (eq_attr "cpu" "power4")) |
234 "(du1_power4+du2_power4,iu1_power4*6,iu2_power4)\ | 243 "(du1_power4+du2_power4|du2_power4+du3_power4|du3_power4+du4_power4),\ |
235 |(du2_power4+du3_power4,iu2_power4*6,iu2_power4)\ | 244 ((iu1_power4*6,iu2_power4)\ |
236 |(du3_power4+du4_power4,iu2_power4*6,iu1_power4)") | 245 |(iu2_power4*6,iu2_power4)\ |
246 |(iu2_power4*6,iu1_power4))") | |
237 | 247 |
238 (define_bypass 10 "power4-lmul-cmp" "power4-branch,power4-crlogical,power4-delayedcr,power4-mfcr,power4-mfcrf") | 248 (define_bypass 10 "power4-lmul-cmp" "power4-branch,power4-crlogical,power4-delayedcr,power4-mfcr,power4-mfcrf") |
239 | 249 |
240 (define_insn_reservation "power4-imul-cmp" 5 | 250 (define_insn_reservation "power4-imul-cmp" 5 |
241 (and (eq_attr "type" "imul_compare") | 251 (and (eq_attr "type" "imul_compare") |
242 (eq_attr "cpu" "power4")) | 252 (eq_attr "cpu" "power4")) |
243 "(du1_power4+du2_power4,iu1_power4*4,iu2_power4)\ | 253 "(du1_power4+du2_power4|du2_power4+du3_power4|du3_power4+du4_power4),\ |
244 |(du2_power4+du3_power4,iu2_power4*4,iu2_power4)\ | 254 ((iu1_power4*4,iu2_power4)\ |
245 |(du3_power4+du4_power4,iu2_power4*4,iu1_power4)") | 255 |(iu2_power4*4,iu2_power4)\ |
256 |(iu2_power4*4,iu1_power4))") | |
246 | 257 |
247 (define_bypass 8 "power4-imul-cmp" "power4-branch,power4-crlogical,power4-delayedcr,power4-mfcr,power4-mfcrf") | 258 (define_bypass 8 "power4-imul-cmp" "power4-branch,power4-crlogical,power4-delayedcr,power4-mfcr,power4-mfcrf") |
248 | 259 |
249 (define_insn_reservation "power4-lmul" 7 | 260 (define_insn_reservation "power4-lmul" 7 |
250 (and (eq_attr "type" "lmul") | 261 (and (eq_attr "type" "lmul") |
251 (eq_attr "cpu" "power4")) | 262 (eq_attr "cpu" "power4")) |
252 "(du1_power4,iu1_power4*6)\ | 263 "(du1_power4|du2_power4|du3_power4|du4_power4),\ |
253 |(du2_power4,iu2_power4*6)\ | 264 (iu1_power4*6|iu2_power4*6)") |
254 |(du3_power4,iu2_power4*6)\ | |
255 |(du4_power4,iu1_power4*6)") | |
256 | 265 |
257 (define_insn_reservation "power4-imul" 5 | 266 (define_insn_reservation "power4-imul" 5 |
258 (and (eq_attr "type" "imul") | 267 (and (eq_attr "type" "imul") |
259 (eq_attr "cpu" "power4")) | 268 (eq_attr "cpu" "power4")) |
260 "(du1_power4,iu1_power4*4)\ | 269 "(du1_power4|du2_power4|du3_power4|du4_power4),\ |
261 |(du2_power4,iu2_power4*4)\ | 270 (iu1_power4*4|iu2_power4*4)") |
262 |(du3_power4,iu2_power4*4)\ | |
263 |(du4_power4,iu1_power4*4)") | |
264 | 271 |
265 (define_insn_reservation "power4-imul3" 4 | 272 (define_insn_reservation "power4-imul3" 4 |
266 (and (eq_attr "type" "imul2,imul3") | 273 (and (eq_attr "type" "imul2,imul3") |
267 (eq_attr "cpu" "power4")) | 274 (eq_attr "cpu" "power4")) |
268 "(du1_power4,iu1_power4*3)\ | 275 "(du1_power4|du2_power4|du3_power4|du4_power4),\ |
269 |(du2_power4,iu2_power4*3)\ | 276 (iu1_power4*3|iu2_power4*3)") |
270 |(du3_power4,iu2_power4*3)\ | |
271 |(du4_power4,iu1_power4*3)") | |
272 | 277 |
273 | 278 |
274 ; SPR move only executes in first IU. | 279 ; SPR move only executes in first IU. |
275 ; Integer division only executes in second IU. | 280 ; Integer division only executes in second IU. |
276 (define_insn_reservation "power4-idiv" 36 | 281 (define_insn_reservation "power4-idiv" 36 |
345 "fpq_power4") | 350 "fpq_power4") |
346 | 351 |
347 (define_insn_reservation "power4-sdiv" 33 | 352 (define_insn_reservation "power4-sdiv" 33 |
348 (and (eq_attr "type" "sdiv,ddiv") | 353 (and (eq_attr "type" "sdiv,ddiv") |
349 (eq_attr "cpu" "power4")) | 354 (eq_attr "cpu" "power4")) |
350 "(du1_power4,fpu1_power4*28)\ | 355 "(du1_power4|du2_power4|du3_power4|du4_power4),\ |
351 |(du2_power4,fpu2_power4*28)\ | 356 (fpu1_power4*28|fpu2_power4*28)") |
352 |(du3_power4,fpu2_power4*28)\ | |
353 |(du4_power4,fpu1_power4*28)") | |
354 | 357 |
355 (define_insn_reservation "power4-sqrt" 40 | 358 (define_insn_reservation "power4-sqrt" 40 |
356 (and (eq_attr "type" "ssqrt,dsqrt") | 359 (and (eq_attr "type" "ssqrt,dsqrt") |
357 (eq_attr "cpu" "power4")) | 360 (eq_attr "cpu" "power4")) |
358 "(du1_power4,fpu1_power4*35)\ | 361 "(du1_power4|du2_power4|du3_power4|du4_power4),\ |
359 |(du2_power4,fpu2_power4*35)\ | 362 (fpu1_power4*35|fpu2_power4*35)") |
360 |(du3_power4,fpu2_power4*35)\ | |
361 |(du4_power4,fpu2_power4*35)") | |
362 | 363 |
363 (define_insn_reservation "power4-isync" 2 | 364 (define_insn_reservation "power4-isync" 2 |
364 (and (eq_attr "type" "isync") | 365 (and (eq_attr "type" "isync") |
365 (eq_attr "cpu" "power4")) | 366 (eq_attr "cpu" "power4")) |
366 "du1_power4+du2_power4+du3_power4+du4_power4,\ | 367 "du1_power4+du2_power4+du3_power4+du4_power4,lsu1_power4") |
367 lsu1_power4") | |
368 | 368 |
369 | 369 |
370 ; VMX | 370 ; VMX |
371 (define_insn_reservation "power4-vecsimple" 2 | 371 (define_insn_reservation "power4-vecsimple" 2 |
372 (and (eq_attr "type" "vecsimple") | 372 (and (eq_attr "type" "vecsimple") |