Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/rs6000/power5.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 POWER5 processor. | 1 ;; Scheduling description for IBM POWER5 processor. |
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 |
38 |(du2_power5,lsu2_power5)\ | 38 |(du2_power5,lsu2_power5)\ |
39 |(du3_power5,lsu2_power5)\ | 39 |(du3_power5,lsu2_power5)\ |
40 |(du4_power5,lsu1_power5)") | 40 |(du4_power5,lsu1_power5)") |
41 | 41 |
42 (define_reservation "iq_power5" | 42 (define_reservation "iq_power5" |
43 "(du1_power5,iu1_power5)\ | 43 "(du1_power5|du2_power5|du3_power5|du4_power5),\ |
44 |(du2_power5,iu2_power5)\ | 44 (iu1_power5|iu2_power5)") |
45 |(du3_power5,iu2_power5)\ | |
46 |(du4_power5,iu1_power5)") | |
47 | 45 |
48 (define_reservation "fpq_power5" | 46 (define_reservation "fpq_power5" |
49 "(du1_power5,fpu1_power5)\ | 47 "(du1_power5|du2_power5|du3_power5|du4_power5),\ |
50 |(du2_power5,fpu2_power5)\ | 48 (fpu1_power5|fpu2_power5)") |
51 |(du3_power5,fpu2_power5)\ | |
52 |(du4_power5,fpu1_power5)") | |
53 | 49 |
54 ; Dispatch slots are allocated in order conforming to program order. | 50 ; Dispatch slots are allocated in order conforming to program order. |
55 (absence_set "du1_power5" "du2_power5,du3_power5,du4_power5,du5_power5") | 51 (absence_set "du1_power5" "du2_power5,du3_power5,du4_power5,du5_power5") |
56 (absence_set "du2_power5" "du3_power5,du4_power5,du5_power5") | 52 (absence_set "du2_power5" "du3_power5,du4_power5,du5_power5") |
57 (absence_set "du3_power5" "du4_power5,du5_power5") | 53 (absence_set "du3_power5" "du4_power5,du5_power5") |
103 "du1_power5+du2_power5,lsu1_power5+iu2_power5") | 99 "du1_power5+du2_power5,lsu1_power5+iu2_power5") |
104 | 100 |
105 (define_insn_reservation "power5-store" 12 | 101 (define_insn_reservation "power5-store" 12 |
106 (and (eq_attr "type" "store") | 102 (and (eq_attr "type" "store") |
107 (eq_attr "cpu" "power5")) | 103 (eq_attr "cpu" "power5")) |
108 "(du1_power5,lsu1_power5,iu1_power5)\ | 104 "((du1_power5,lsu1_power5)\ |
109 |(du2_power5,lsu2_power5,iu2_power5)\ | 105 |(du2_power5,lsu2_power5)\ |
110 |(du3_power5,lsu2_power5,iu2_power5)\ | 106 |(du3_power5,lsu2_power5)\ |
111 |(du4_power5,lsu1_power5,iu1_power5)") | 107 |(du4_power5,lsu1_power5)),\ |
108 (iu1_power5|iu2_power5)") | |
112 | 109 |
113 (define_insn_reservation "power5-store-update" 12 | 110 (define_insn_reservation "power5-store-update" 12 |
114 (and (eq_attr "type" "store_u") | 111 (and (eq_attr "type" "store_u") |
115 (eq_attr "cpu" "power5")) | 112 (eq_attr "cpu" "power5")) |
116 "du1_power5+du2_power5,lsu1_power5+iu2_power5,iu1_power5") | 113 "du1_power5+du2_power5,lsu1_power5+iu2_power5,iu1_power5") |
122 iu1_power5,lsu2_power5+iu2_power5,iu2_power5") | 119 iu1_power5,lsu2_power5+iu2_power5,iu2_power5") |
123 | 120 |
124 (define_insn_reservation "power5-fpstore" 12 | 121 (define_insn_reservation "power5-fpstore" 12 |
125 (and (eq_attr "type" "fpstore") | 122 (and (eq_attr "type" "fpstore") |
126 (eq_attr "cpu" "power5")) | 123 (eq_attr "cpu" "power5")) |
127 "(du1_power5,lsu1_power5,fpu1_power5)\ | 124 "((du1_power5,lsu1_power5)\ |
128 |(du2_power5,lsu2_power5,fpu2_power5)\ | 125 |(du2_power5,lsu2_power5)\ |
129 |(du3_power5,lsu2_power5,fpu2_power5)\ | 126 |(du3_power5,lsu2_power5)\ |
130 |(du4_power5,lsu1_power5,fpu1_power5)") | 127 |(du4_power5,lsu1_power5)),\ |
128 (fpu1_power5|fpu2_power5)") | |
131 | 129 |
132 (define_insn_reservation "power5-fpstore-update" 12 | 130 (define_insn_reservation "power5-fpstore-update" 12 |
133 (and (eq_attr "type" "fpstore_u,fpstore_ux") | 131 (and (eq_attr "type" "fpstore_u,fpstore_ux") |
134 (eq_attr "cpu" "power5")) | 132 (eq_attr "cpu" "power5")) |
135 "du1_power5+du2_power5,lsu1_power5+iu2_power5,fpu1_power5") | 133 "du1_power5+du2_power5,lsu1_power5+iu2_power5,fpu1_power5") |
142 | 140 |
143 | 141 |
144 ; Integer latency is 2 cycles | 142 ; Integer latency is 2 cycles |
145 (define_insn_reservation "power5-integer" 2 | 143 (define_insn_reservation "power5-integer" 2 |
146 (and (eq_attr "type" "integer,insert_dword,shift,trap,\ | 144 (and (eq_attr "type" "integer,insert_dword,shift,trap,\ |
147 var_shift_rotate,cntlz,exts") | 145 var_shift_rotate,cntlz,exts,isel") |
148 (eq_attr "cpu" "power5")) | 146 (eq_attr "cpu" "power5")) |
149 "iq_power5") | 147 "iq_power5") |
150 | 148 |
151 (define_insn_reservation "power5-two" 2 | 149 (define_insn_reservation "power5-two" 2 |
152 (and (eq_attr "type" "two") | 150 (and (eq_attr "type" "two") |
153 (eq_attr "cpu" "power5")) | 151 (eq_attr "cpu" "power5")) |
154 "(du1_power5+du2_power5,iu1_power5,nothing,iu2_power5)\ | 152 "((du1_power5+du2_power5)\ |
155 |(du2_power5+du3_power5,iu2_power5,nothing,iu2_power5)\ | 153 |(du2_power5+du3_power5)\ |
156 |(du3_power5+du4_power5,iu2_power5,nothing,iu1_power5)\ | 154 |(du3_power5+du4_power5)\ |
157 |(du4_power5+du1_power5,iu1_power5,nothing,iu1_power5)") | 155 |(du4_power5+du1_power5)),\ |
156 ((iu1_power5,nothing,iu2_power5)\ | |
157 |(iu2_power5,nothing,iu2_power5)\ | |
158 |(iu2_power5,nothing,iu1_power5)\ | |
159 |(iu1_power5,nothing,iu1_power5))") | |
158 | 160 |
159 (define_insn_reservation "power5-three" 2 | 161 (define_insn_reservation "power5-three" 2 |
160 (and (eq_attr "type" "three") | 162 (and (eq_attr "type" "three") |
161 (eq_attr "cpu" "power5")) | 163 (eq_attr "cpu" "power5")) |
162 "(du1_power5+du2_power5+du3_power5,\ | 164 "(du1_power5+du2_power5+du3_power5|du2_power5+du3_power5+du4_power5\ |
163 iu1_power5,nothing,iu2_power5,nothing,iu2_power5)\ | 165 |du3_power5+du4_power5+du1_power5|du4_power5+du1_power5+du2_power5),\ |
164 |(du2_power5+du3_power5+du4_power5,\ | 166 ((iu1_power5,nothing,iu2_power5,nothing,iu2_power5)\ |
165 iu2_power5,nothing,iu2_power5,nothing,iu1_power5)\ | 167 |(iu2_power5,nothing,iu2_power5,nothing,iu1_power5)\ |
166 |(du3_power5+du4_power5+du1_power5,\ | 168 |(iu2_power5,nothing,iu1_power5,nothing,iu1_power5)\ |
167 iu2_power5,nothing,iu1_power5,nothing,iu1_power5)\ | 169 |(iu1_power5,nothing,iu2_power5,nothing,iu2_power5))") |
168 |(du4_power5+du1_power5+du2_power5,\ | |
169 iu1_power5,nothing,iu2_power5,nothing,iu2_power5)") | |
170 | 170 |
171 (define_insn_reservation "power5-insert" 4 | 171 (define_insn_reservation "power5-insert" 4 |
172 (and (eq_attr "type" "insert_word") | 172 (and (eq_attr "type" "insert_word") |
173 (eq_attr "cpu" "power5")) | 173 (eq_attr "cpu" "power5")) |
174 "du1_power5+du2_power5,iu1_power5,nothing,iu2_power5") | 174 "du1_power5+du2_power5,iu1_power5,nothing,iu2_power5") |
200 (define_bypass 8 "power5-imul-cmp" "power5-branch,power5-crlogical,power5-delayedcr,power5-mfcr,power5-mfcrf") | 200 (define_bypass 8 "power5-imul-cmp" "power5-branch,power5-crlogical,power5-delayedcr,power5-mfcr,power5-mfcrf") |
201 | 201 |
202 (define_insn_reservation "power5-lmul" 7 | 202 (define_insn_reservation "power5-lmul" 7 |
203 (and (eq_attr "type" "lmul") | 203 (and (eq_attr "type" "lmul") |
204 (eq_attr "cpu" "power5")) | 204 (eq_attr "cpu" "power5")) |
205 "(du1_power5,iu1_power5*6)\ | 205 "(du1_power5|du2_power5|du3_power5|du4_power5),(iu1_power5*6|iu2_power5*6)") |
206 |(du2_power5,iu2_power5*6)\ | |
207 |(du3_power5,iu2_power5*6)\ | |
208 |(du4_power5,iu1_power5*6)") | |
209 | 206 |
210 (define_insn_reservation "power5-imul" 5 | 207 (define_insn_reservation "power5-imul" 5 |
211 (and (eq_attr "type" "imul") | 208 (and (eq_attr "type" "imul") |
212 (eq_attr "cpu" "power5")) | 209 (eq_attr "cpu" "power5")) |
213 "(du1_power5,iu1_power5*4)\ | 210 "(du1_power5|du2_power5|du3_power5|du4_power5),(iu1_power5*4|iu2_power5*4)") |
214 |(du2_power5,iu2_power5*4)\ | |
215 |(du3_power5,iu2_power5*4)\ | |
216 |(du4_power5,iu1_power5*4)") | |
217 | 211 |
218 (define_insn_reservation "power5-imul3" 4 | 212 (define_insn_reservation "power5-imul3" 4 |
219 (and (eq_attr "type" "imul2,imul3") | 213 (and (eq_attr "type" "imul2,imul3") |
220 (eq_attr "cpu" "power5")) | 214 (eq_attr "cpu" "power5")) |
221 "(du1_power5,iu1_power5*3)\ | 215 "(du1_power5|du2_power5|du3_power5|du4_power5),(iu1_power5*3|iu2_power5*3)") |
222 |(du2_power5,iu2_power5*3)\ | |
223 |(du3_power5,iu2_power5*3)\ | |
224 |(du4_power5,iu1_power5*3)") | |
225 | 216 |
226 | 217 |
227 ; SPR move only executes in first IU. | 218 ; SPR move only executes in first IU. |
228 ; Integer division only executes in second IU. | 219 ; Integer division only executes in second IU. |
229 (define_insn_reservation "power5-idiv" 36 | 220 (define_insn_reservation "power5-idiv" 36 |
298 "fpq_power5") | 289 "fpq_power5") |
299 | 290 |
300 (define_insn_reservation "power5-sdiv" 33 | 291 (define_insn_reservation "power5-sdiv" 33 |
301 (and (eq_attr "type" "sdiv,ddiv") | 292 (and (eq_attr "type" "sdiv,ddiv") |
302 (eq_attr "cpu" "power5")) | 293 (eq_attr "cpu" "power5")) |
303 "(du1_power5,fpu1_power5*28)\ | 294 "(du1_power5|du2_power5|du3_power5|du4_power5),\ |
304 |(du2_power5,fpu2_power5*28)\ | 295 (fpu1_power5*28|fpu2_power5*28)") |
305 |(du3_power5,fpu2_power5*28)\ | |
306 |(du4_power5,fpu1_power5*28)") | |
307 | 296 |
308 (define_insn_reservation "power5-sqrt" 40 | 297 (define_insn_reservation "power5-sqrt" 40 |
309 (and (eq_attr "type" "ssqrt,dsqrt") | 298 (and (eq_attr "type" "ssqrt,dsqrt") |
310 (eq_attr "cpu" "power5")) | 299 (eq_attr "cpu" "power5")) |
311 "(du1_power5,fpu1_power5*35)\ | 300 "(du1_power5|du2_power5|du3_power5|du4_power5),\ |
312 |(du2_power5,fpu2_power5*35)\ | 301 (fpu1_power5*35|fpu2_power5*35)") |
313 |(du3_power5,fpu2_power5*35)\ | |
314 |(du4_power5,fpu2_power5*35)") | |
315 | 302 |
316 (define_insn_reservation "power5-isync" 2 | 303 (define_insn_reservation "power5-isync" 2 |
317 (and (eq_attr "type" "isync") | 304 (and (eq_attr "type" "isync") |
318 (eq_attr "cpu" "power5")) | 305 (eq_attr "cpu" "power5")) |
319 "du1_power5+du2_power5+du3_power5+du4_power5,\ | 306 "du1_power5+du2_power5+du3_power5+du4_power5,\ |