Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/rs6000/e500mc.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 e500mc core. | 1 ;; Pipeline description for Motorola PowerPC e500mc core. |
2 ;; Copyright (C) 2008 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 |
68 (define_reservation "e500mc_su_stage0" | 68 (define_reservation "e500mc_su_stage0" |
69 "e500mc_su0_stage0|e500mc_su1_stage0+present_e500mc_su0_stage0") | 69 "e500mc_su0_stage0|e500mc_su1_stage0+present_e500mc_su0_stage0") |
70 | 70 |
71 ;; Simple SU insns. | 71 ;; Simple SU insns. |
72 (define_insn_reservation "e500mc_su" 1 | 72 (define_insn_reservation "e500mc_su" 1 |
73 (and (eq_attr "type" "integer,insert_word,insert_dword,cmp,compare,\ | 73 (and (eq_attr "type" "integer,add,logical,insert,cmp,\ |
74 delayed_compare,var_delayed_compare,fast_compare,\ | 74 shift,trap,cntlz,exts,isel") |
75 shift,trap,var_shift_rotate,cntlz,exts,isel") | |
76 (eq_attr "cpu" "ppce500mc")) | 75 (eq_attr "cpu" "ppce500mc")) |
77 "e500mc_decode,e500mc_issue+e500mc_su_stage0+e500mc_retire") | 76 "e500mc_decode,e500mc_issue+e500mc_su_stage0+e500mc_retire") |
78 | 77 |
79 (define_insn_reservation "e500mc_two" 1 | 78 (define_insn_reservation "e500mc_two" 1 |
80 (and (eq_attr "type" "two") | 79 (and (eq_attr "type" "two") |
89 e500mc_issue+e500mc_su_stage0+e500mc_retire,\ | 88 e500mc_issue+e500mc_su_stage0+e500mc_retire,\ |
90 e500mc_issue+e500mc_su_stage0+e500mc_retire") | 89 e500mc_issue+e500mc_su_stage0+e500mc_retire") |
91 | 90 |
92 ;; Multiply. | 91 ;; Multiply. |
93 (define_insn_reservation "e500mc_multiply" 4 | 92 (define_insn_reservation "e500mc_multiply" 4 |
94 (and (eq_attr "type" "imul,imul2,imul3,imul_compare") | 93 (and (eq_attr "type" "mul") |
95 (eq_attr "cpu" "ppce500mc")) | 94 (eq_attr "cpu" "ppce500mc")) |
96 "e500mc_decode,e500mc_issue+e500mc_mu_stage0,e500mc_mu_stage1,\ | 95 "e500mc_decode,e500mc_issue+e500mc_mu_stage0,e500mc_mu_stage1,\ |
97 e500mc_mu_stage2,e500mc_mu_stage3+e500mc_retire") | 96 e500mc_mu_stage2,e500mc_mu_stage3+e500mc_retire") |
98 | 97 |
99 ;; Divide. We use the average latency time here. | 98 ;; Divide. We use the average latency time here. |
100 (define_insn_reservation "e500mc_divide" 14 | 99 (define_insn_reservation "e500mc_divide" 14 |
101 (and (eq_attr "type" "idiv") | 100 (and (eq_attr "type" "div") |
102 (eq_attr "cpu" "ppce500mc")) | 101 (eq_attr "cpu" "ppce500mc")) |
103 "e500mc_decode,e500mc_issue+e500mc_mu_stage0+e500mc_mu_div,\ | 102 "e500mc_decode,e500mc_issue+e500mc_mu_stage0+e500mc_mu_div,\ |
104 e500mc_mu_div*13") | 103 e500mc_mu_div*13") |
105 | 104 |
106 ;; Branch. | 105 ;; Branch. |
131 (define_insn_reservation "e500mc_mtjmpr" 1 | 130 (define_insn_reservation "e500mc_mtjmpr" 1 |
132 (and (eq_attr "type" "mtjmpr,mfjmpr") | 131 (and (eq_attr "type" "mtjmpr,mfjmpr") |
133 (eq_attr "cpu" "ppce500mc")) | 132 (eq_attr "cpu" "ppce500mc")) |
134 "e500mc_decode,e500mc_issue+e500mc_su_stage0+e500mc_retire") | 133 "e500mc_decode,e500mc_issue+e500mc_su_stage0+e500mc_retire") |
135 | 134 |
136 ;; Brinc. | |
137 (define_insn_reservation "e500mc_brinc" 1 | |
138 (and (eq_attr "type" "brinc") | |
139 (eq_attr "cpu" "ppce500mc")) | |
140 "e500mc_decode,e500mc_issue+e500mc_su_stage0+e500mc_retire") | |
141 | |
142 ;; Loads. | 135 ;; Loads. |
143 (define_insn_reservation "e500mc_load" 3 | 136 (define_insn_reservation "e500mc_load" 3 |
144 (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,\ | 137 (and (eq_attr "type" "load,load_l,sync") |
145 load_l,sync") | |
146 (eq_attr "cpu" "ppce500mc")) | 138 (eq_attr "cpu" "ppce500mc")) |
147 "e500mc_decode,e500mc_issue+e500mc_lsu,nothing,e500mc_retire") | 139 "e500mc_decode,e500mc_issue+e500mc_lsu,nothing,e500mc_retire") |
148 | 140 |
149 (define_insn_reservation "e500mc_fpload" 4 | 141 (define_insn_reservation "e500mc_fpload" 4 |
150 (and (eq_attr "type" "fpload,fpload_ux,fpload_u") | 142 (and (eq_attr "type" "fpload") |
151 (eq_attr "cpu" "ppce500mc")) | 143 (eq_attr "cpu" "ppce500mc")) |
152 "e500mc_decode,e500mc_issue+e500mc_lsu,nothing*2,e500mc_retire") | 144 "e500mc_decode,e500mc_issue+e500mc_lsu,nothing*2,e500mc_retire") |
153 | 145 |
154 ;; Stores. | 146 ;; Stores. |
155 (define_insn_reservation "e500mc_store" 3 | 147 (define_insn_reservation "e500mc_store" 3 |
156 (and (eq_attr "type" "store,store_ux,store_u,store_c") | 148 (and (eq_attr "type" "store,store_c") |
157 (eq_attr "cpu" "ppce500mc")) | 149 (eq_attr "cpu" "ppce500mc")) |
158 "e500mc_decode,e500mc_issue+e500mc_lsu,nothing,e500mc_retire") | 150 "e500mc_decode,e500mc_issue+e500mc_lsu,nothing,e500mc_retire") |
159 | 151 |
160 (define_insn_reservation "e500mc_fpstore" 3 | 152 (define_insn_reservation "e500mc_fpstore" 3 |
161 (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u") | 153 (and (eq_attr "type" "fpstore") |
162 (eq_attr "cpu" "ppce500mc")) | 154 (eq_attr "cpu" "ppce500mc")) |
163 "e500mc_decode,e500mc_issue+e500mc_lsu,nothing,e500mc_retire") | 155 "e500mc_decode,e500mc_issue+e500mc_lsu,nothing,e500mc_retire") |
164 | 156 |
165 ;; The following ignores the retire unit to avoid a large automata. | 157 ;; The following ignores the retire unit to avoid a large automata. |
166 | 158 |