OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [config/] [mips/] [5500.md] - Blame information for rev 801

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 709 jeremybenn
;; Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
2
;;
3
;; This file is part of GCC.
4
;;
5
;; GCC is free software; you can redistribute it and/or modify
6
;; it under the terms of the GNU General Public License as published by
7
;; the Free Software Foundation; either version 3, or (at your option)
8
;; any later version.
9
;;
10
;; GCC is distributed in the hope that it will be useful,
11
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
;; GNU General Public License for more details.
14
;;
15
;; You should have received a copy of the GNU General Public License
16
;; along with GCC; see the file COPYING3.  If not see
17
;; .
18
;;
19
;; DFA-based pipeline description for 5500
20
(define_automaton "vr55")
21
(define_cpu_unit "vr55_dp0"     "vr55")
22
(define_cpu_unit "vr55_dp1"     "vr55")
23
(define_cpu_unit "vr55_mem"     "vr55")
24
(define_cpu_unit "vr55_mac"     "vr55")
25
(define_cpu_unit "vr55_fp"      "vr55")
26
(define_cpu_unit "vr55_bru"     "vr55")
27
 
28
;;
29
;; The ordering of the instruction-execution-path/resource-usage
30
;; descriptions (also known as reservation RTL) is roughly ordered
31
;; based on the define attribute RTL for the "type" classification.
32
;; When modifying, remember that the first test that matches is the
33
;; reservation used!
34
;;
35
 
36
(define_insn_reservation "ir_vr55_unknown" 1
37
  (and (eq_attr "cpu" "r5500")
38
       (eq_attr "type" "unknown"))
39
  "vr55_dp0+vr55_dp1+vr55_mem+vr55_mac+vr55_fp+vr55_bru")
40
 
41
;; Assume prediction fails.
42
(define_insn_reservation "ir_vr55_branch" 2
43
  (and (eq_attr "cpu" "r5500")
44
       (eq_attr "type" "branch,jump,call"))
45
  "vr55_bru")
46
 
47
(define_insn_reservation "ir_vr55_load" 3
48
  (and (eq_attr "cpu" "r5500")
49
       (eq_attr "type" "load,fpload,fpidxload"))
50
  "vr55_mem")
51
 
52
(define_bypass 4
53
  "ir_vr55_load"
54
  "ir_vr55_mthilo,ir_vr55_imul_si,ir_vr55_imul_di,ir_vr55_imadd,
55
   ir_vr55_idiv_si,ir_vr55_idiv_di")
56
 
57
(define_insn_reservation "ir_vr55_store" 0
58
  (and (eq_attr "cpu" "r5500")
59
       (eq_attr "type" "store,fpstore,fpidxstore"))
60
  "vr55_mem")
61
 
62
;; This reservation is for conditional move based on integer
63
;; or floating point CC.
64
(define_insn_reservation "ir_vr55_condmove" 2
65
  (and (eq_attr "cpu" "r5500")
66
       (eq_attr "type" "condmove"))
67
  "vr55_dp0|vr55_dp1")
68
 
69
;; Move to/from FPU registers
70
(define_insn_reservation "ir_vr55_xfer" 2
71
  (and (eq_attr "cpu" "r5500")
72
       (eq_attr "type" "mfc,mtc"))
73
  "vr55_dp0|vr55_dp1")
74
 
75
(define_insn_reservation "ir_vr55_arith" 1
76
  (and (eq_attr "cpu" "r5500")
77
       (eq_attr "type" "arith,shift,signext,slt,clz,const,logical,move,nop,trap"))
78
  "vr55_dp0|vr55_dp1")
79
 
80
(define_bypass 2
81
  "ir_vr55_arith"
82
  "ir_vr55_mthilo,ir_vr55_imul_si,ir_vr55_imul_di,ir_vr55_imadd,
83
   ir_vr55_idiv_si,ir_vr55_idiv_di")
84
 
85
(define_insn_reservation "ir_vr55_mthilo" 1
86
  (and (eq_attr "cpu" "r5500")
87
       (eq_attr "type" "mthilo"))
88
  "vr55_mac")
89
 
90
(define_insn_reservation "ir_vr55_mfhilo" 5
91
  (and (eq_attr "cpu" "r5500")
92
       (eq_attr "type" "mfhilo"))
93
  "vr55_mac")
94
 
95
;; The default latency is for the GPR result of a mul.  Bypasses handle the
96
;; latency of {mul,mult}->{mfhi,mflo}.
97
(define_insn_reservation "ir_vr55_imul_si" 5
98
  (and (eq_attr "cpu" "r5500")
99
       (and (eq_attr "type" "imul,imul3")
100
            (eq_attr "mode" "SI")))
101
  "vr55_mac")
102
 
103
;; The default latency is for pre-reload scheduling and handles the case
104
;; where a pseudo destination will be stored in a GPR (as it usually is).
105
;; The delay includes the latency of the dmult itself and the anticipated
106
;; mflo or mfhi.
107
;;
108
;; Once the mflo or mfhi has been created, bypasses handle the latency
109
;; between it and the dmult.
110
(define_insn_reservation "ir_vr55_imul_di" 9
111
  (and (eq_attr "cpu" "r5500")
112
       (and (eq_attr "type" "imul,imul3")
113
            (eq_attr "mode" "DI")))
114
  "vr55_mac*4")
115
 
116
;; The default latency is as for ir_vr55_imul_si.
117
(define_insn_reservation "ir_vr55_imadd" 5
118
  (and (eq_attr "cpu" "r5500")
119
       (eq_attr "type" "imadd"))
120
  "vr55_mac")
121
 
122
(define_bypass 1
123
  "ir_vr55_imul_si,ir_vr55_imadd"
124
  "ir_vr55_imadd"
125
  "mips_linked_madd_p")
126
 
127
(define_bypass 2
128
  "ir_vr55_imul_si,ir_vr55_imadd"
129
  "ir_vr55_mfhilo")
130
 
131
(define_bypass 4
132
  "ir_vr55_imul_di"
133
  "ir_vr55_mfhilo")
134
 
135
;; Divide algorithm is early out with best latency of 7 pcycles.
136
;; Use worst case for scheduling purposes.
137
(define_insn_reservation "ir_vr55_idiv_si" 42
138
  (and (eq_attr "cpu" "r5500")
139
       (and (eq_attr "type" "idiv")
140
            (eq_attr "mode" "SI")))
141
  "vr55_mac")
142
 
143
(define_insn_reservation "ir_vr55_idiv_di" 74
144
  (and (eq_attr "cpu" "r5500")
145
       (and (eq_attr "type" "idiv")
146
            (eq_attr "mode" "DI")))
147
  "vr55_mac")
148
 
149
(define_insn_reservation "ir_vr55_fadd" 4
150
  (and (eq_attr "cpu" "r5500")
151
       (eq_attr "type" "fadd"))
152
  "vr55_fp")
153
 
154
(define_insn_reservation "ir_vr55_fmul_sf" 5
155
  (and (eq_attr "cpu" "r5500")
156
       (and (eq_attr "type" "fmul")
157
            (eq_attr "mode" "SF")))
158
  "vr55_mac")
159
 
160
(define_insn_reservation "ir_vr55_fmul_df" 6
161
  (and (eq_attr "cpu" "r5500")
162
       (and (eq_attr "type" "fmul")
163
            (eq_attr "mode" "DF")))
164
  "vr55_mac")
165
 
166
(define_insn_reservation "ir_vr55_fmadd_sf" 9
167
  (and (eq_attr "cpu" "r5500")
168
       (and (eq_attr "type" "fmadd")
169
            (eq_attr "mode" "SF")))
170
  "vr55_mac")
171
 
172
(define_insn_reservation "ir_vr55_fmadd_df" 10
173
  (and (eq_attr "cpu" "r5500")
174
       (and (eq_attr "type" "fmadd")
175
            (eq_attr "mode" "DF")))
176
  "vr55_mac")
177
 
178
(define_insn_reservation "ir_vr55_fdiv_sf" 30
179
  (and (eq_attr "cpu" "r5500")
180
       (and (eq_attr "type" "fdiv,frdiv,fsqrt")
181
            (eq_attr "mode" "SF")))
182
  "vr55_mac")
183
 
184
(define_insn_reservation "ir_vr55_fdiv_df" 59
185
  (and (eq_attr "cpu" "r5500")
186
       (and (eq_attr "type" "fdiv,frdiv,fsqrt")
187
            (eq_attr "mode" "DF")))
188
  "vr55_mac")
189
 
190
(define_insn_reservation "ir_vr55_fabs" 2
191
  (and (eq_attr "cpu" "r5500")
192
       (eq_attr "type" "fabs,fneg,fmove"))
193
  "vr55_fp")
194
 
195
(define_insn_reservation "ir_vr55_fcmp" 2
196
  (and (eq_attr "cpu" "r5500")
197
       (eq_attr "type" "fcmp"))
198
  "vr55_fp")
199
 
200
(define_insn_reservation "ir_vr55_fcvt_sf" 4
201
  (and (eq_attr "cpu" "r5500")
202
       (and (eq_attr "type" "fcvt")
203
            (eq_attr "mode" "SF")))
204
  "vr55_fp")
205
 
206
(define_insn_reservation "ir_vr55_fcvt_df" 6
207
  (and (eq_attr "cpu" "r5500")
208
       (and (eq_attr "type" "fcvt")
209
            (eq_attr "mode" "DF")))
210
  "vr55_fp")
211
 
212
(define_insn_reservation "ir_vr55_frsqrt_sf" 60
213
  (and (eq_attr "cpu" "r5500")
214
       (and (eq_attr "type" "frsqrt")
215
            (eq_attr "mode" "SF")))
216
  "vr55_mac")
217
 
218
(define_insn_reservation "ir_vr55_frsqrt_df" 118
219
  (and (eq_attr "cpu" "r5500")
220
       (and (eq_attr "type" "frsqrt")
221
            (eq_attr "mode" "DF")))
222
  "vr55_mac")
223
 
224
(define_insn_reservation "ir_vr55_multi" 1
225
  (and (eq_attr "cpu" "r5500")
226
       (eq_attr "type" "multi"))
227
  "vr55_dp0+vr55_dp1+vr55_mem+vr55_mac+vr55_fp+vr55_bru")

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.