]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/arm/marvell-f-iwmmxt.md
arm.c (FL_IWMMXT2): New define.
[thirdparty/gcc.git] / gcc / config / arm / marvell-f-iwmmxt.md
CommitLineData
8fd03515
XQ
1;; Marvell WMMX2 pipeline description
2;; Copyright (C) 2011, 2012 Free Software Foundation, Inc.
3;; Written by Marvell, Inc.
4
5;; This file is part of GCC.
6
7;; GCC is free software; you can redistribute it and/or modify it
8;; under the terms of the GNU General Public License as published
9;; by the Free Software Foundation; either version 3, or (at your
10;; option) any later version.
11
12;; GCC is distributed in the hope that it will be useful, but WITHOUT
13;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15;; License for more details.
16
17;; You should have received a copy of the GNU General Public License
18;; along with GCC; see the file COPYING3. If not see
19;; <http://www.gnu.org/licenses/>.
20
21
22(define_automaton "marvell_f_iwmmxt")
23
24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25;; Pipelines
26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
27
28;; This is a 7-stage pipelines:
29;;
30;; MD | MI | ME1 | ME2 | ME3 | ME4 | MW
31;;
32;; There are various bypasses modelled to a greater or lesser extent.
33;;
34;; Latencies in this file correspond to the number of cycles after
35;; the issue stage that it takes for the result of the instruction to
36;; be computed, or for its side-effects to occur.
37
38(define_cpu_unit "mf_iwmmxt_MD" "marvell_f_iwmmxt")
39(define_cpu_unit "mf_iwmmxt_MI" "marvell_f_iwmmxt")
40(define_cpu_unit "mf_iwmmxt_ME1" "marvell_f_iwmmxt")
41(define_cpu_unit "mf_iwmmxt_ME2" "marvell_f_iwmmxt")
42(define_cpu_unit "mf_iwmmxt_ME3" "marvell_f_iwmmxt")
43(define_cpu_unit "mf_iwmmxt_ME4" "marvell_f_iwmmxt")
44(define_cpu_unit "mf_iwmmxt_MW" "marvell_f_iwmmxt")
45
46(define_reservation "mf_iwmmxt_ME"
47 "mf_iwmmxt_ME1,mf_iwmmxt_ME2,mf_iwmmxt_ME3,mf_iwmmxt_ME4"
48)
49
50(define_reservation "mf_iwmmxt_pipeline"
51 "mf_iwmmxt_MD, mf_iwmmxt_MI, mf_iwmmxt_ME, mf_iwmmxt_MW"
52)
53
54;; An attribute to indicate whether our reservations are applicable.
55(define_attr "marvell_f_iwmmxt" "yes,no"
56 (const (if_then_else (symbol_ref "arm_arch_iwmmxt")
57 (const_string "yes") (const_string "no"))))
58
59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
60;; instruction classes
61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
62
63;; An attribute appended to instructions for classification
64
65(define_attr "wmmxt_shift" "yes,no"
66 (if_then_else (eq_attr "wtype" "wror, wsll, wsra, wsrl")
67 (const_string "yes") (const_string "no"))
68)
69
70(define_attr "wmmxt_pack" "yes,no"
71 (if_then_else (eq_attr "wtype" "waligni, walignr, wmerge, wpack, wshufh, wunpckeh, wunpckih, wunpckel, wunpckil")
72 (const_string "yes") (const_string "no"))
73)
74
75(define_attr "wmmxt_mult_c1" "yes,no"
76 (if_then_else (eq_attr "wtype" "wmac, wmadd, wmiaxy, wmiawxy, wmulw, wqmiaxy, wqmulwm")
77 (const_string "yes") (const_string "no"))
78)
79
80(define_attr "wmmxt_mult_c2" "yes,no"
81 (if_then_else (eq_attr "wtype" "wmul, wqmulm")
82 (const_string "yes") (const_string "no"))
83)
84
85(define_attr "wmmxt_alu_c1" "yes,no"
86 (if_then_else (eq_attr "wtype" "wabs, wabsdiff, wand, wandn, wmov, wor, wxor")
87 (const_string "yes") (const_string "no"))
88)
89
90(define_attr "wmmxt_alu_c2" "yes,no"
91 (if_then_else (eq_attr "wtype" "wacc, wadd, waddsubhx, wavg2, wavg4, wcmpeq, wcmpgt, wmax, wmin, wsub, waddbhus, wsubaddhx")
92 (const_string "yes") (const_string "no"))
93)
94
95(define_attr "wmmxt_alu_c3" "yes,no"
96 (if_then_else (eq_attr "wtype" "wsad")
97 (const_string "yes") (const_string "no"))
98)
99
100(define_attr "wmmxt_transfer_c1" "yes,no"
101 (if_then_else (eq_attr "wtype" "tbcst, tinsr, tmcr, tmcrr")
102 (const_string "yes") (const_string "no"))
103)
104
105(define_attr "wmmxt_transfer_c2" "yes,no"
106 (if_then_else (eq_attr "wtype" "textrm, tmovmsk, tmrc, tmrrc")
107 (const_string "yes") (const_string "no"))
108)
109
110(define_attr "wmmxt_transfer_c3" "yes,no"
111 (if_then_else (eq_attr "wtype" "tmia, tmiaph, tmiaxy")
112 (const_string "yes") (const_string "no"))
113)
114
115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
116;; Main description
117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
118
119(define_insn_reservation "marvell_f_iwmmxt_alu_c1" 1
120 (and (eq_attr "marvell_f_iwmmxt" "yes")
121 (eq_attr "wmmxt_alu_c1" "yes"))
122 "mf_iwmmxt_pipeline")
123
124(define_insn_reservation "marvell_f_iwmmxt_pack" 1
125 (and (eq_attr "marvell_f_iwmmxt" "yes")
126 (eq_attr "wmmxt_pack" "yes"))
127 "mf_iwmmxt_pipeline")
128
129(define_insn_reservation "marvell_f_iwmmxt_shift" 1
130 (and (eq_attr "marvell_f_iwmmxt" "yes")
131 (eq_attr "wmmxt_shift" "yes"))
132 "mf_iwmmxt_pipeline")
133
134(define_insn_reservation "marvell_f_iwmmxt_transfer_c1" 1
135 (and (eq_attr "marvell_f_iwmmxt" "yes")
136 (eq_attr "wmmxt_transfer_c1" "yes"))
137 "mf_iwmmxt_pipeline")
138
139(define_insn_reservation "marvell_f_iwmmxt_transfer_c2" 5
140 (and (eq_attr "marvell_f_iwmmxt" "yes")
141 (eq_attr "wmmxt_transfer_c2" "yes"))
142 "mf_iwmmxt_pipeline")
143
144(define_insn_reservation "marvell_f_iwmmxt_alu_c2" 2
145 (and (eq_attr "marvell_f_iwmmxt" "yes")
146 (eq_attr "wmmxt_alu_c2" "yes"))
147 "mf_iwmmxt_pipeline")
148
149(define_insn_reservation "marvell_f_iwmmxt_alu_c3" 3
150 (and (eq_attr "marvell_f_iwmmxt" "yes")
151 (eq_attr "wmmxt_alu_c3" "yes"))
152 "mf_iwmmxt_pipeline")
153
154(define_insn_reservation "marvell_f_iwmmxt_transfer_c3" 4
155 (and (eq_attr "marvell_f_iwmmxt" "yes")
156 (eq_attr "wmmxt_transfer_c3" "yes"))
157 "mf_iwmmxt_pipeline")
158
159(define_insn_reservation "marvell_f_iwmmxt_mult_c1" 4
160 (and (eq_attr "marvell_f_iwmmxt" "yes")
161 (eq_attr "wmmxt_mult_c1" "yes"))
162 "mf_iwmmxt_pipeline")
163
164;There is a forwarding path from ME3 stage
165(define_insn_reservation "marvell_f_iwmmxt_mult_c2" 3
166 (and (eq_attr "marvell_f_iwmmxt" "yes")
167 (eq_attr "wmmxt_mult_c2" "yes"))
168 "mf_iwmmxt_pipeline")
169
170(define_insn_reservation "marvell_f_iwmmxt_wstr" 0
171 (and (eq_attr "marvell_f_iwmmxt" "yes")
172 (eq_attr "wtype" "wstr"))
173 "mf_iwmmxt_pipeline")
174
175;There is a forwarding path from MW stage
176(define_insn_reservation "marvell_f_iwmmxt_wldr" 5
177 (and (eq_attr "marvell_f_iwmmxt" "yes")
178 (eq_attr "wtype" "wldr"))
179 "mf_iwmmxt_pipeline")