Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/rs6000/e300c2c3.md @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | 77e2b8dfacca |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 ;; Pipeline description for Motorola PowerPC e300c3 core. | 1 ;; Pipeline description for Motorola PowerPC e300c3 core. |
2 ;; Copyright (C) 2008, 2009 Free Software Foundation, Inc. | 2 ;; Copyright (C) 2008-2017 Free Software Foundation, Inc. |
3 ;; Contributed by Edmar Wienskoski (edmar@freescale.com) | 3 ;; Contributed by Edmar Wienskoski (edmar@freescale.com) |
4 ;; | 4 ;; |
5 ;; This file is part of GCC. | 5 ;; This file is part of GCC. |
6 ;; | 6 ;; |
7 ;; GCC is free software; you can redistribute it and/or modify it | 7 ;; GCC is free software; you can redistribute it and/or modify it |
81 (define_reservation "ppce300c3_iu_stage0" | 81 (define_reservation "ppce300c3_iu_stage0" |
82 "ppce300c3_iu0_stage0|ppce300c3_iu1_stage0+present_ppce300c3_iu0_stage0") | 82 "ppce300c3_iu0_stage0|ppce300c3_iu1_stage0+present_ppce300c3_iu0_stage0") |
83 | 83 |
84 ;; Compares can be executed either one of the IU or SRU | 84 ;; Compares can be executed either one of the IU or SRU |
85 (define_insn_reservation "ppce300c3_cmp" 1 | 85 (define_insn_reservation "ppce300c3_cmp" 1 |
86 (and (eq_attr "type" "cmp,compare,delayed_compare,fast_compare") | 86 (and (ior (eq_attr "type" "cmp") |
87 (and (eq_attr "type" "add,logical,shift,exts") | |
88 (eq_attr "dot" "yes"))) | |
87 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) | 89 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) |
88 "ppce300c3_decode,ppce300c3_issue+(ppce300c3_iu_stage0|ppce300c3_sru_stage0) \ | 90 "ppce300c3_decode,ppce300c3_issue+(ppce300c3_iu_stage0|ppce300c3_sru_stage0) \ |
89 +ppce300c3_retire") | 91 +ppce300c3_retire") |
90 | 92 |
91 ;; Other one cycle IU insns | 93 ;; Other one cycle IU insns |
92 (define_insn_reservation "ppce300c3_iu" 1 | 94 (define_insn_reservation "ppce300c3_iu" 1 |
93 (and (eq_attr "type" "integer,insert_word,isel") | 95 (and (ior (eq_attr "type" "integer,insert,isel") |
96 (and (eq_attr "type" "add,logical,shift,exts") | |
97 (eq_attr "dot" "no"))) | |
94 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) | 98 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) |
95 "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_retire") | 99 "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_retire") |
96 | 100 |
97 ;; Branch. Actually this latency time is not used by the scheduler. | 101 ;; Branch. Actually this latency time is not used by the scheduler. |
98 (define_insn_reservation "ppce300c3_branch" 1 | 102 (define_insn_reservation "ppce300c3_branch" 1 |
100 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) | 104 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) |
101 "ppce300c3_decode,ppce300c3_bu,ppce300c3_retire") | 105 "ppce300c3_decode,ppce300c3_bu,ppce300c3_retire") |
102 | 106 |
103 ;; Multiply is non-pipelined but can be executed in any IU | 107 ;; Multiply is non-pipelined but can be executed in any IU |
104 (define_insn_reservation "ppce300c3_multiply" 2 | 108 (define_insn_reservation "ppce300c3_multiply" 2 |
105 (and (eq_attr "type" "imul,imul2,imul3,imul_compare") | 109 (and (eq_attr "type" "mul") |
106 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) | 110 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) |
107 "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0, \ | 111 "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0, \ |
108 ppce300c3_iu_stage0+ppce300c3_retire") | 112 ppce300c3_iu_stage0+ppce300c3_retire") |
109 | 113 |
110 ;; Divide. We use the average latency time here. We omit reserving a | 114 ;; Divide. We use the average latency time here. We omit reserving a |
111 ;; retire unit because of the result automata will be huge. | 115 ;; retire unit because of the result automata will be huge. |
112 (define_insn_reservation "ppce300c3_divide" 20 | 116 (define_insn_reservation "ppce300c3_divide" 20 |
113 (and (eq_attr "type" "idiv") | 117 (and (eq_attr "type" "div") |
114 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) | 118 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) |
115 "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_mu_div,\ | 119 "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_mu_div,\ |
116 ppce300c3_mu_div*19") | 120 ppce300c3_mu_div*19") |
117 | 121 |
118 ;; CR logical | 122 ;; CR logical |
144 (and (eq_attr "type" "fpcompare") | 148 (and (eq_attr "type" "fpcompare") |
145 (eq_attr "cpu" "ppce300c3")) | 149 (eq_attr "cpu" "ppce300c3")) |
146 "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire") | 150 "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire") |
147 | 151 |
148 (define_insn_reservation "ppce300c3_fp" 3 | 152 (define_insn_reservation "ppce300c3_fp" 3 |
149 (and (eq_attr "type" "fp") | 153 (and (eq_attr "type" "fp,fpsimple") |
150 (eq_attr "cpu" "ppce300c3")) | 154 (eq_attr "cpu" "ppce300c3")) |
151 "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire") | 155 "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire") |
152 | 156 |
153 (define_insn_reservation "ppce300c3_dmul" 4 | 157 (define_insn_reservation "ppce300c3_dmul" 4 |
154 (and (eq_attr "type" "dmul") | 158 (and (eq_attr "type" "dmul") |
166 (eq_attr "cpu" "ppce300c3")) | 170 (eq_attr "cpu" "ppce300c3")) |
167 "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*32") | 171 "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*32") |
168 | 172 |
169 ;; Loads | 173 ;; Loads |
170 (define_insn_reservation "ppce300c3_load" 2 | 174 (define_insn_reservation "ppce300c3_load" 2 |
171 (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u") | 175 (and (eq_attr "type" "load") |
172 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) | 176 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) |
173 "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") | 177 "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") |
174 | 178 |
175 (define_insn_reservation "ppce300c3_fpload" 2 | 179 (define_insn_reservation "ppce300c3_fpload" 2 |
176 (and (eq_attr "type" "fpload,fpload_ux,fpload_u") | 180 (and (eq_attr "type" "fpload") |
177 (eq_attr "cpu" "ppce300c3")) | 181 (eq_attr "cpu" "ppce300c3")) |
178 "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") | 182 "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") |
179 | 183 |
180 ;; Stores. | 184 ;; Stores. |
181 (define_insn_reservation "ppce300c3_store" 2 | 185 (define_insn_reservation "ppce300c3_store" 2 |
182 (and (eq_attr "type" "store,store_ux,store_u") | 186 (and (eq_attr "type" "store") |
183 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) | 187 (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3"))) |
184 "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") | 188 "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") |
185 | 189 |
186 (define_insn_reservation "ppce300c3_fpstore" 2 | 190 (define_insn_reservation "ppce300c3_fpstore" 2 |
187 (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u") | 191 (and (eq_attr "type" "fpstore") |
188 (eq_attr "cpu" "ppce300c3")) | 192 (eq_attr "cpu" "ppce300c3")) |
189 "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") | 193 "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire") |