annotate gcc/config/aarch64/iterators.md @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ;; Machine description for AArch64 architecture.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2 ;; Copyright (C) 2009-2018 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3 ;; Contributed by ARM Ltd.
kono
parents:
diff changeset
4 ;;
kono
parents:
diff changeset
5 ;; This file is part of GCC.
kono
parents:
diff changeset
6 ;;
kono
parents:
diff changeset
7 ;; GCC is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
8 ;; under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
9 ;; the Free Software Foundation; either version 3, or (at your option)
kono
parents:
diff changeset
10 ;; any later version.
kono
parents:
diff changeset
11 ;;
kono
parents:
diff changeset
12 ;; GCC is distributed in the hope that it will be useful, but
kono
parents:
diff changeset
13 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
kono
parents:
diff changeset
15 ;; General Public License for more details.
kono
parents:
diff changeset
16 ;;
kono
parents:
diff changeset
17 ;; You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
18 ;; along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
19 ;; <http://www.gnu.org/licenses/>.
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
22 ;; Mode Iterators
kono
parents:
diff changeset
23 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 ;; Iterator for General Purpose Integer registers (32- and 64-bit modes)
kono
parents:
diff changeset
27 (define_mode_iterator GPI [SI DI])
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 ;; Iterator for HI, SI, DI, some instructions can only work on these modes.
kono
parents:
diff changeset
30 (define_mode_iterator GPI_I16 [(HI "AARCH64_ISA_F16") SI DI])
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 ;; Iterator for QI and HI modes
kono
parents:
diff changeset
33 (define_mode_iterator SHORT [QI HI])
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 ;; Iterator for all integer modes (up to 64-bit)
kono
parents:
diff changeset
36 (define_mode_iterator ALLI [QI HI SI DI])
kono
parents:
diff changeset
37
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
38 ;; Iterator for all integer modes (up to 128-bit)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
39 (define_mode_iterator ALLI_TI [QI HI SI DI TI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
40
111
kono
parents:
diff changeset
41 ;; Iterator for all integer modes that can be extended (up to 64-bit)
kono
parents:
diff changeset
42 (define_mode_iterator ALLX [QI HI SI])
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 ;; Iterator for General Purpose Floating-point registers (32- and 64-bit modes)
kono
parents:
diff changeset
45 (define_mode_iterator GPF [SF DF])
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 ;; Iterator for all scalar floating point modes (HF, SF, DF)
kono
parents:
diff changeset
48 (define_mode_iterator GPF_F16 [(HF "AARCH64_ISA_F16") SF DF])
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 ;; Iterator for all scalar floating point modes (HF, SF, DF)
kono
parents:
diff changeset
51 (define_mode_iterator GPF_HF [HF SF DF])
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 ;; Iterator for all scalar floating point modes (HF, SF, DF and TF)
kono
parents:
diff changeset
54 (define_mode_iterator GPF_TF_F16 [HF SF DF TF])
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 ;; Double vector modes.
kono
parents:
diff changeset
57 (define_mode_iterator VDF [V2SF V4HF])
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 ;; Iterator for all scalar floating point modes (SF, DF and TF)
kono
parents:
diff changeset
60 (define_mode_iterator GPF_TF [SF DF TF])
kono
parents:
diff changeset
61
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
62 ;; Integer Advanced SIMD modes.
111
kono
parents:
diff changeset
63 (define_mode_iterator VDQ_I [V8QI V16QI V4HI V8HI V2SI V4SI V2DI])
kono
parents:
diff changeset
64
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
65 ;; Advanced SIMD and scalar, 64 & 128-bit container, all integer modes.
111
kono
parents:
diff changeset
66 (define_mode_iterator VSDQ_I [V8QI V16QI V4HI V8HI V2SI V4SI V2DI QI HI SI DI])
kono
parents:
diff changeset
67
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
68 ;; Advanced SIMD and scalar, 64 & 128-bit container: all Advanced SIMD
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
69 ;; integer modes; 64-bit scalar integer mode.
111
kono
parents:
diff changeset
70 (define_mode_iterator VSDQ_I_DI [V8QI V16QI V4HI V8HI V2SI V4SI V2DI DI])
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72 ;; Double vector modes.
kono
parents:
diff changeset
73 (define_mode_iterator VD [V8QI V4HI V4HF V2SI V2SF])
kono
parents:
diff changeset
74
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
75 ;; All modes stored in registers d0-d31.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
76 (define_mode_iterator DREG [V8QI V4HI V4HF V2SI V2SF DF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
77
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
78 ;; Copy of the above.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
79 (define_mode_iterator DREG2 [V8QI V4HI V4HF V2SI V2SF DF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
80
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
81 ;; Advanced SIMD, 64-bit container, all integer modes.
111
kono
parents:
diff changeset
82 (define_mode_iterator VD_BHSI [V8QI V4HI V2SI])
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 ;; 128 and 64-bit container; 8, 16, 32-bit vector integer modes
kono
parents:
diff changeset
85 (define_mode_iterator VDQ_BHSI [V8QI V16QI V4HI V8HI V2SI V4SI])
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 ;; Quad vector modes.
kono
parents:
diff changeset
88 (define_mode_iterator VQ [V16QI V8HI V4SI V2DI V8HF V4SF V2DF])
kono
parents:
diff changeset
89
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
90 ;; Copy of the above.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
91 (define_mode_iterator VQ2 [V16QI V8HI V4SI V2DI V8HF V4SF V2DF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
92
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
93 ;; Quad integer vector modes.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
94 (define_mode_iterator VQ_I [V16QI V8HI V4SI V2DI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
95
111
kono
parents:
diff changeset
96 ;; VQ without 2 element modes.
kono
parents:
diff changeset
97 (define_mode_iterator VQ_NO2E [V16QI V8HI V4SI V8HF V4SF])
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 ;; Quad vector with only 2 element modes.
kono
parents:
diff changeset
100 (define_mode_iterator VQ_2E [V2DI V2DF])
kono
parents:
diff changeset
101
kono
parents:
diff changeset
102 ;; This mode iterator allows :P to be used for patterns that operate on
kono
parents:
diff changeset
103 ;; addresses in different modes. In LP64, only DI will match, while in
kono
parents:
diff changeset
104 ;; ILP32, either can match.
kono
parents:
diff changeset
105 (define_mode_iterator P [(SI "ptr_mode == SImode || Pmode == SImode")
kono
parents:
diff changeset
106 (DI "ptr_mode == DImode || Pmode == DImode")])
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 ;; This mode iterator allows :PTR to be used for patterns that operate on
kono
parents:
diff changeset
109 ;; pointer-sized quantities. Exactly one of the two alternatives will match.
kono
parents:
diff changeset
110 (define_mode_iterator PTR [(SI "ptr_mode == SImode") (DI "ptr_mode == DImode")])
kono
parents:
diff changeset
111
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
112 ;; Advanced SIMD Float modes suitable for moving, loading and storing.
111
kono
parents:
diff changeset
113 (define_mode_iterator VDQF_F16 [V4HF V8HF V2SF V4SF V2DF])
kono
parents:
diff changeset
114
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
115 ;; Advanced SIMD Float modes.
111
kono
parents:
diff changeset
116 (define_mode_iterator VDQF [V2SF V4SF V2DF])
kono
parents:
diff changeset
117 (define_mode_iterator VHSDF [(V4HF "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
118 (V8HF "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
119 V2SF V4SF V2DF])
kono
parents:
diff changeset
120
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
121 ;; Advanced SIMD Float modes, and DF.
111
kono
parents:
diff changeset
122 (define_mode_iterator VHSDF_DF [(V4HF "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
123 (V8HF "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
124 V2SF V4SF V2DF DF])
kono
parents:
diff changeset
125 (define_mode_iterator VHSDF_HSDF [(V4HF "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
126 (V8HF "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
127 V2SF V4SF V2DF
kono
parents:
diff changeset
128 (HF "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
129 SF DF])
kono
parents:
diff changeset
130
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
131 ;; Advanced SIMD single Float modes.
111
kono
parents:
diff changeset
132 (define_mode_iterator VDQSF [V2SF V4SF])
kono
parents:
diff changeset
133
kono
parents:
diff changeset
134 ;; Quad vector Float modes with half/single elements.
kono
parents:
diff changeset
135 (define_mode_iterator VQ_HSF [V8HF V4SF])
kono
parents:
diff changeset
136
kono
parents:
diff changeset
137 ;; Modes suitable to use as the return type of a vcond expression.
kono
parents:
diff changeset
138 (define_mode_iterator VDQF_COND [V2SF V2SI V4SF V4SI V2DF V2DI])
kono
parents:
diff changeset
139
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
140 ;; All scalar and Advanced SIMD Float modes.
111
kono
parents:
diff changeset
141 (define_mode_iterator VALLF [V2SF V4SF V2DF SF DF])
kono
parents:
diff changeset
142
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
143 ;; Advanced SIMD Float modes with 2 elements.
111
kono
parents:
diff changeset
144 (define_mode_iterator V2F [V2SF V2DF])
kono
parents:
diff changeset
145
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
146 ;; All Advanced SIMD modes on which we support any arithmetic operations.
111
kono
parents:
diff changeset
147 (define_mode_iterator VALL [V8QI V16QI V4HI V8HI V2SI V4SI V2DI V2SF V4SF V2DF])
kono
parents:
diff changeset
148
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
149 ;; All Advanced SIMD modes suitable for moving, loading, and storing.
111
kono
parents:
diff changeset
150 (define_mode_iterator VALL_F16 [V8QI V16QI V4HI V8HI V2SI V4SI V2DI
kono
parents:
diff changeset
151 V4HF V8HF V2SF V4SF V2DF])
kono
parents:
diff changeset
152
kono
parents:
diff changeset
153 ;; The VALL_F16 modes except the 128-bit 2-element ones.
kono
parents:
diff changeset
154 (define_mode_iterator VALL_F16_NO_V2Q [V8QI V16QI V4HI V8HI V2SI V4SI
kono
parents:
diff changeset
155 V4HF V8HF V2SF V4SF])
kono
parents:
diff changeset
156
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
157 ;; All Advanced SIMD modes barring HF modes, plus DI.
111
kono
parents:
diff changeset
158 (define_mode_iterator VALLDI [V8QI V16QI V4HI V8HI V2SI V4SI V2DI V2SF V4SF V2DF DI])
kono
parents:
diff changeset
159
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
160 ;; All Advanced SIMD modes and DI.
111
kono
parents:
diff changeset
161 (define_mode_iterator VALLDI_F16 [V8QI V16QI V4HI V8HI V2SI V4SI V2DI
kono
parents:
diff changeset
162 V4HF V8HF V2SF V4SF V2DF DI])
kono
parents:
diff changeset
163
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
164 ;; All Advanced SIMD modes, plus DI and DF.
111
kono
parents:
diff changeset
165 (define_mode_iterator VALLDIF [V8QI V16QI V4HI V8HI V2SI V4SI
kono
parents:
diff changeset
166 V2DI V4HF V8HF V2SF V4SF V2DF DI DF])
kono
parents:
diff changeset
167
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
168 ;; Advanced SIMD modes for Integer reduction across lanes.
111
kono
parents:
diff changeset
169 (define_mode_iterator VDQV [V8QI V16QI V4HI V8HI V4SI V2DI])
kono
parents:
diff changeset
170
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
171 ;; Advanced SIMD modes (except V2DI) for Integer reduction across lanes.
111
kono
parents:
diff changeset
172 (define_mode_iterator VDQV_S [V8QI V16QI V4HI V8HI V4SI])
kono
parents:
diff changeset
173
kono
parents:
diff changeset
174 ;; All double integer narrow-able modes.
kono
parents:
diff changeset
175 (define_mode_iterator VDN [V4HI V2SI DI])
kono
parents:
diff changeset
176
kono
parents:
diff changeset
177 ;; All quad integer narrow-able modes.
kono
parents:
diff changeset
178 (define_mode_iterator VQN [V8HI V4SI V2DI])
kono
parents:
diff changeset
179
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
180 ;; Advanced SIMD and scalar 128-bit container: narrowable 16, 32, 64-bit
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
181 ;; integer modes
111
kono
parents:
diff changeset
182 (define_mode_iterator VSQN_HSDI [V8HI V4SI V2DI HI SI DI])
kono
parents:
diff changeset
183
kono
parents:
diff changeset
184 ;; All quad integer widen-able modes.
kono
parents:
diff changeset
185 (define_mode_iterator VQW [V16QI V8HI V4SI])
kono
parents:
diff changeset
186
kono
parents:
diff changeset
187 ;; Double vector modes for combines.
kono
parents:
diff changeset
188 (define_mode_iterator VDC [V8QI V4HI V4HF V2SI V2SF DI DF])
kono
parents:
diff changeset
189
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
190 ;; Advanced SIMD modes except double int.
111
kono
parents:
diff changeset
191 (define_mode_iterator VDQIF [V8QI V16QI V4HI V8HI V2SI V4SI V2SF V4SF V2DF])
kono
parents:
diff changeset
192 (define_mode_iterator VDQIF_F16 [V8QI V16QI V4HI V8HI V2SI V4SI
kono
parents:
diff changeset
193 V4HF V8HF V2SF V4SF V2DF])
kono
parents:
diff changeset
194
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
195 ;; Advanced SIMD modes for S type.
111
kono
parents:
diff changeset
196 (define_mode_iterator VDQ_SI [V2SI V4SI])
kono
parents:
diff changeset
197
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
198 ;; Advanced SIMD modes for S and D.
111
kono
parents:
diff changeset
199 (define_mode_iterator VDQ_SDI [V2SI V4SI V2DI])
kono
parents:
diff changeset
200
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
201 ;; Advanced SIMD modes for H, S and D.
111
kono
parents:
diff changeset
202 (define_mode_iterator VDQ_HSDI [(V4HI "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
203 (V8HI "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
204 V2SI V4SI V2DI])
kono
parents:
diff changeset
205
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
206 ;; Scalar and Advanced SIMD modes for S and D.
111
kono
parents:
diff changeset
207 (define_mode_iterator VSDQ_SDI [V2SI V4SI V2DI SI DI])
kono
parents:
diff changeset
208
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
209 ;; Scalar and Advanced SIMD modes for S and D, Advanced SIMD modes for H.
111
kono
parents:
diff changeset
210 (define_mode_iterator VSDQ_HSDI [(V4HI "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
211 (V8HI "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
212 V2SI V4SI V2DI
kono
parents:
diff changeset
213 (HI "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
214 SI DI])
kono
parents:
diff changeset
215
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
216 ;; Advanced SIMD modes for Q and H types.
111
kono
parents:
diff changeset
217 (define_mode_iterator VDQQH [V8QI V16QI V4HI V8HI])
kono
parents:
diff changeset
218
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
219 ;; Advanced SIMD modes for H and S types.
111
kono
parents:
diff changeset
220 (define_mode_iterator VDQHS [V4HI V8HI V2SI V4SI])
kono
parents:
diff changeset
221
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
222 ;; Advanced SIMD modes for H, S and D types.
111
kono
parents:
diff changeset
223 (define_mode_iterator VDQHSD [V4HI V8HI V2SI V4SI V2DI])
kono
parents:
diff changeset
224
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
225 ;; Advanced SIMD and scalar integer modes for H and S.
111
kono
parents:
diff changeset
226 (define_mode_iterator VSDQ_HSI [V4HI V8HI V2SI V4SI HI SI])
kono
parents:
diff changeset
227
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
228 ;; Advanced SIMD and scalar 64-bit container: 16, 32-bit integer modes.
111
kono
parents:
diff changeset
229 (define_mode_iterator VSD_HSI [V4HI V2SI HI SI])
kono
parents:
diff changeset
230
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
231 ;; Advanced SIMD 64-bit container: 16, 32-bit integer modes.
111
kono
parents:
diff changeset
232 (define_mode_iterator VD_HSI [V4HI V2SI])
kono
parents:
diff changeset
233
kono
parents:
diff changeset
234 ;; Scalar 64-bit container: 16, 32-bit integer modes
kono
parents:
diff changeset
235 (define_mode_iterator SD_HSI [HI SI])
kono
parents:
diff changeset
236
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
237 ;; Advanced SIMD 64-bit container: 16, 32-bit integer modes.
111
kono
parents:
diff changeset
238 (define_mode_iterator VQ_HSI [V8HI V4SI])
kono
parents:
diff changeset
239
kono
parents:
diff changeset
240 ;; All byte modes.
kono
parents:
diff changeset
241 (define_mode_iterator VB [V8QI V16QI])
kono
parents:
diff changeset
242
kono
parents:
diff changeset
243 ;; 2 and 4 lane SI modes.
kono
parents:
diff changeset
244 (define_mode_iterator VS [V2SI V4SI])
kono
parents:
diff changeset
245
kono
parents:
diff changeset
246 (define_mode_iterator TX [TI TF])
kono
parents:
diff changeset
247
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
248 ;; Advanced SIMD opaque structure modes.
111
kono
parents:
diff changeset
249 (define_mode_iterator VSTRUCT [OI CI XI])
kono
parents:
diff changeset
250
kono
parents:
diff changeset
251 ;; Double scalar modes
kono
parents:
diff changeset
252 (define_mode_iterator DX [DI DF])
kono
parents:
diff changeset
253
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
254 ;; Duplicate of the above
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
255 (define_mode_iterator DX2 [DI DF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
256
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
257 ;; Single scalar modes
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
258 (define_mode_iterator SX [SI SF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
259
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
260 ;; Duplicate of the above
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
261 (define_mode_iterator SX2 [SI SF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
262
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
263 ;; Single and double integer and float modes
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
264 (define_mode_iterator DSX [DF DI SF SI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
265
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
266
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
267 ;; Modes available for Advanced SIMD <f>mul lane operations.
111
kono
parents:
diff changeset
268 (define_mode_iterator VMUL [V4HI V8HI V2SI V4SI
kono
parents:
diff changeset
269 (V4HF "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
270 (V8HF "TARGET_SIMD_F16INST")
kono
parents:
diff changeset
271 V2SF V4SF V2DF])
kono
parents:
diff changeset
272
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
273 ;; Modes available for Advanced SIMD <f>mul lane operations changing lane
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
274 ;; count.
111
kono
parents:
diff changeset
275 (define_mode_iterator VMUL_CHANGE_NLANES [V4HI V8HI V2SI V4SI V2SF V4SF])
kono
parents:
diff changeset
276
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
277 ;; All SVE vector modes.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
278 (define_mode_iterator SVE_ALL [VNx16QI VNx8HI VNx4SI VNx2DI
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
279 VNx8HF VNx4SF VNx2DF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
280
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
281 ;; All SVE vector structure modes.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
282 (define_mode_iterator SVE_STRUCT [VNx32QI VNx16HI VNx8SI VNx4DI
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
283 VNx16HF VNx8SF VNx4DF
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
284 VNx48QI VNx24HI VNx12SI VNx6DI
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
285 VNx24HF VNx12SF VNx6DF
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
286 VNx64QI VNx32HI VNx16SI VNx8DI
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
287 VNx32HF VNx16SF VNx8DF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
288
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
289 ;; All SVE vector modes that have 8-bit or 16-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
290 (define_mode_iterator SVE_BH [VNx16QI VNx8HI VNx8HF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
291
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
292 ;; All SVE vector modes that have 8-bit, 16-bit or 32-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
293 (define_mode_iterator SVE_BHS [VNx16QI VNx8HI VNx4SI VNx8HF VNx4SF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
294
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
295 ;; All SVE integer vector modes that have 8-bit, 16-bit or 32-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
296 (define_mode_iterator SVE_BHSI [VNx16QI VNx8HI VNx4SI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
297
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
298 ;; All SVE integer vector modes that have 16-bit, 32-bit or 64-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
299 (define_mode_iterator SVE_HSDI [VNx16QI VNx8HI VNx4SI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
300
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
301 ;; All SVE floating-point vector modes that have 16-bit or 32-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
302 (define_mode_iterator SVE_HSF [VNx8HF VNx4SF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
303
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
304 ;; All SVE vector modes that have 32-bit or 64-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
305 (define_mode_iterator SVE_SD [VNx4SI VNx2DI VNx4SF VNx2DF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
306
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
307 ;; All SVE vector modes that have 32-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
308 (define_mode_iterator SVE_S [VNx4SI VNx4SF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
309
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
310 ;; All SVE vector modes that have 64-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
311 (define_mode_iterator SVE_D [VNx2DI VNx2DF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
312
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
313 ;; All SVE integer vector modes that have 32-bit or 64-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
314 (define_mode_iterator SVE_SDI [VNx4SI VNx2DI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
315
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
316 ;; All SVE integer vector modes.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
317 (define_mode_iterator SVE_I [VNx16QI VNx8HI VNx4SI VNx2DI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
318
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
319 ;; All SVE floating-point vector modes.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
320 (define_mode_iterator SVE_F [VNx8HF VNx4SF VNx2DF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
321
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
322 ;; All SVE predicate modes.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
323 (define_mode_iterator PRED_ALL [VNx16BI VNx8BI VNx4BI VNx2BI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
324
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
325 ;; SVE predicate modes that control 8-bit, 16-bit or 32-bit elements.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
326 (define_mode_iterator PRED_BHS [VNx16BI VNx8BI VNx4BI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
327
111
kono
parents:
diff changeset
328 ;; ------------------------------------------------------------------
kono
parents:
diff changeset
329 ;; Unspec enumerations for Advance SIMD. These could well go into
kono
parents:
diff changeset
330 ;; aarch64.md but for their use in int_iterators here.
kono
parents:
diff changeset
331 ;; ------------------------------------------------------------------
kono
parents:
diff changeset
332
kono
parents:
diff changeset
333 (define_c_enum "unspec"
kono
parents:
diff changeset
334 [
kono
parents:
diff changeset
335 UNSPEC_ASHIFT_SIGNED ; Used in aarch-simd.md.
kono
parents:
diff changeset
336 UNSPEC_ASHIFT_UNSIGNED ; Used in aarch64-simd.md.
kono
parents:
diff changeset
337 UNSPEC_ABS ; Used in aarch64-simd.md.
kono
parents:
diff changeset
338 UNSPEC_FMAX ; Used in aarch64-simd.md.
kono
parents:
diff changeset
339 UNSPEC_FMAXNMV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
340 UNSPEC_FMAXV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
341 UNSPEC_FMIN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
342 UNSPEC_FMINNMV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
343 UNSPEC_FMINV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
344 UNSPEC_FADDV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
345 UNSPEC_ADDV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
346 UNSPEC_SMAXV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
347 UNSPEC_SMINV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
348 UNSPEC_UMAXV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
349 UNSPEC_UMINV ; Used in aarch64-simd.md.
kono
parents:
diff changeset
350 UNSPEC_SHADD ; Used in aarch64-simd.md.
kono
parents:
diff changeset
351 UNSPEC_UHADD ; Used in aarch64-simd.md.
kono
parents:
diff changeset
352 UNSPEC_SRHADD ; Used in aarch64-simd.md.
kono
parents:
diff changeset
353 UNSPEC_URHADD ; Used in aarch64-simd.md.
kono
parents:
diff changeset
354 UNSPEC_SHSUB ; Used in aarch64-simd.md.
kono
parents:
diff changeset
355 UNSPEC_UHSUB ; Used in aarch64-simd.md.
kono
parents:
diff changeset
356 UNSPEC_SRHSUB ; Used in aarch64-simd.md.
kono
parents:
diff changeset
357 UNSPEC_URHSUB ; Used in aarch64-simd.md.
kono
parents:
diff changeset
358 UNSPEC_ADDHN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
359 UNSPEC_RADDHN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
360 UNSPEC_SUBHN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
361 UNSPEC_RSUBHN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
362 UNSPEC_ADDHN2 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
363 UNSPEC_RADDHN2 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
364 UNSPEC_SUBHN2 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
365 UNSPEC_RSUBHN2 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
366 UNSPEC_SQDMULH ; Used in aarch64-simd.md.
kono
parents:
diff changeset
367 UNSPEC_SQRDMULH ; Used in aarch64-simd.md.
kono
parents:
diff changeset
368 UNSPEC_PMUL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
369 UNSPEC_FMULX ; Used in aarch64-simd.md.
kono
parents:
diff changeset
370 UNSPEC_USQADD ; Used in aarch64-simd.md.
kono
parents:
diff changeset
371 UNSPEC_SUQADD ; Used in aarch64-simd.md.
kono
parents:
diff changeset
372 UNSPEC_SQXTUN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
373 UNSPEC_SQXTN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
374 UNSPEC_UQXTN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
375 UNSPEC_SSRA ; Used in aarch64-simd.md.
kono
parents:
diff changeset
376 UNSPEC_USRA ; Used in aarch64-simd.md.
kono
parents:
diff changeset
377 UNSPEC_SRSRA ; Used in aarch64-simd.md.
kono
parents:
diff changeset
378 UNSPEC_URSRA ; Used in aarch64-simd.md.
kono
parents:
diff changeset
379 UNSPEC_SRSHR ; Used in aarch64-simd.md.
kono
parents:
diff changeset
380 UNSPEC_URSHR ; Used in aarch64-simd.md.
kono
parents:
diff changeset
381 UNSPEC_SQSHLU ; Used in aarch64-simd.md.
kono
parents:
diff changeset
382 UNSPEC_SQSHL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
383 UNSPEC_UQSHL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
384 UNSPEC_SQSHRUN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
385 UNSPEC_SQRSHRUN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
386 UNSPEC_SQSHRN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
387 UNSPEC_UQSHRN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
388 UNSPEC_SQRSHRN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
389 UNSPEC_UQRSHRN ; Used in aarch64-simd.md.
kono
parents:
diff changeset
390 UNSPEC_SSHL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
391 UNSPEC_USHL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
392 UNSPEC_SRSHL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
393 UNSPEC_URSHL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
394 UNSPEC_SQRSHL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
395 UNSPEC_UQRSHL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
396 UNSPEC_SSLI ; Used in aarch64-simd.md.
kono
parents:
diff changeset
397 UNSPEC_USLI ; Used in aarch64-simd.md.
kono
parents:
diff changeset
398 UNSPEC_SSRI ; Used in aarch64-simd.md.
kono
parents:
diff changeset
399 UNSPEC_USRI ; Used in aarch64-simd.md.
kono
parents:
diff changeset
400 UNSPEC_SSHLL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
401 UNSPEC_USHLL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
402 UNSPEC_ADDP ; Used in aarch64-simd.md.
kono
parents:
diff changeset
403 UNSPEC_TBL ; Used in vector permute patterns.
kono
parents:
diff changeset
404 UNSPEC_TBX ; Used in vector permute patterns.
kono
parents:
diff changeset
405 UNSPEC_CONCAT ; Used in vector permute patterns.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
406
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
407 ;; The following permute unspecs are generated directly by
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
408 ;; aarch64_expand_vec_perm_const, so any changes to the underlying
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
409 ;; instructions would need a corresponding change there.
111
kono
parents:
diff changeset
410 UNSPEC_ZIP1 ; Used in vector permute patterns.
kono
parents:
diff changeset
411 UNSPEC_ZIP2 ; Used in vector permute patterns.
kono
parents:
diff changeset
412 UNSPEC_UZP1 ; Used in vector permute patterns.
kono
parents:
diff changeset
413 UNSPEC_UZP2 ; Used in vector permute patterns.
kono
parents:
diff changeset
414 UNSPEC_TRN1 ; Used in vector permute patterns.
kono
parents:
diff changeset
415 UNSPEC_TRN2 ; Used in vector permute patterns.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
416 UNSPEC_EXT ; Used in vector permute patterns.
111
kono
parents:
diff changeset
417 UNSPEC_REV64 ; Used in vector reverse patterns (permute).
kono
parents:
diff changeset
418 UNSPEC_REV32 ; Used in vector reverse patterns (permute).
kono
parents:
diff changeset
419 UNSPEC_REV16 ; Used in vector reverse patterns (permute).
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
420
111
kono
parents:
diff changeset
421 UNSPEC_AESE ; Used in aarch64-simd.md.
kono
parents:
diff changeset
422 UNSPEC_AESD ; Used in aarch64-simd.md.
kono
parents:
diff changeset
423 UNSPEC_AESMC ; Used in aarch64-simd.md.
kono
parents:
diff changeset
424 UNSPEC_AESIMC ; Used in aarch64-simd.md.
kono
parents:
diff changeset
425 UNSPEC_SHA1C ; Used in aarch64-simd.md.
kono
parents:
diff changeset
426 UNSPEC_SHA1M ; Used in aarch64-simd.md.
kono
parents:
diff changeset
427 UNSPEC_SHA1P ; Used in aarch64-simd.md.
kono
parents:
diff changeset
428 UNSPEC_SHA1H ; Used in aarch64-simd.md.
kono
parents:
diff changeset
429 UNSPEC_SHA1SU0 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
430 UNSPEC_SHA1SU1 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
431 UNSPEC_SHA256H ; Used in aarch64-simd.md.
kono
parents:
diff changeset
432 UNSPEC_SHA256H2 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
433 UNSPEC_SHA256SU0 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
434 UNSPEC_SHA256SU1 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
435 UNSPEC_PMULL ; Used in aarch64-simd.md.
kono
parents:
diff changeset
436 UNSPEC_PMULL2 ; Used in aarch64-simd.md.
kono
parents:
diff changeset
437 UNSPEC_REV_REGLIST ; Used in aarch64-simd.md.
kono
parents:
diff changeset
438 UNSPEC_VEC_SHR ; Used in aarch64-simd.md.
kono
parents:
diff changeset
439 UNSPEC_SQRDMLAH ; Used in aarch64-simd.md.
kono
parents:
diff changeset
440 UNSPEC_SQRDMLSH ; Used in aarch64-simd.md.
kono
parents:
diff changeset
441 UNSPEC_FMAXNM ; Used in aarch64-simd.md.
kono
parents:
diff changeset
442 UNSPEC_FMINNM ; Used in aarch64-simd.md.
kono
parents:
diff changeset
443 UNSPEC_SDOT ; Used in aarch64-simd.md.
kono
parents:
diff changeset
444 UNSPEC_UDOT ; Used in aarch64-simd.md.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
445 UNSPEC_SM3SS1 ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
446 UNSPEC_SM3TT1A ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
447 UNSPEC_SM3TT1B ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
448 UNSPEC_SM3TT2A ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
449 UNSPEC_SM3TT2B ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
450 UNSPEC_SM3PARTW1 ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
451 UNSPEC_SM3PARTW2 ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
452 UNSPEC_SM4E ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
453 UNSPEC_SM4EKEY ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
454 UNSPEC_SHA512H ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
455 UNSPEC_SHA512H2 ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
456 UNSPEC_SHA512SU0 ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
457 UNSPEC_SHA512SU1 ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
458 UNSPEC_FMLAL ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
459 UNSPEC_FMLSL ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
460 UNSPEC_FMLAL2 ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
461 UNSPEC_FMLSL2 ; Used in aarch64-simd.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
462 UNSPEC_SEL ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
463 UNSPEC_ANDV ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
464 UNSPEC_IORV ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
465 UNSPEC_XORV ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
466 UNSPEC_ANDF ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
467 UNSPEC_IORF ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
468 UNSPEC_XORF ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
469 UNSPEC_SMUL_HIGHPART ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
470 UNSPEC_UMUL_HIGHPART ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
471 UNSPEC_COND_ADD ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
472 UNSPEC_COND_SUB ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
473 UNSPEC_COND_MUL ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
474 UNSPEC_COND_DIV ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
475 UNSPEC_COND_MAX ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
476 UNSPEC_COND_MIN ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
477 UNSPEC_COND_FMLA ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
478 UNSPEC_COND_FMLS ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
479 UNSPEC_COND_FNMLA ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
480 UNSPEC_COND_FNMLS ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
481 UNSPEC_COND_LT ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
482 UNSPEC_COND_LE ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
483 UNSPEC_COND_EQ ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
484 UNSPEC_COND_NE ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
485 UNSPEC_COND_GE ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
486 UNSPEC_COND_GT ; Used in aarch64-sve.md.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
487 UNSPEC_LASTB ; Used in aarch64-sve.md.
111
kono
parents:
diff changeset
488 ])
kono
parents:
diff changeset
489
kono
parents:
diff changeset
490 ;; ------------------------------------------------------------------
kono
parents:
diff changeset
491 ;; Unspec enumerations for Atomics. They are here so that they can be
kono
parents:
diff changeset
492 ;; used in the int_iterators for atomic operations.
kono
parents:
diff changeset
493 ;; ------------------------------------------------------------------
kono
parents:
diff changeset
494
kono
parents:
diff changeset
495 (define_c_enum "unspecv"
kono
parents:
diff changeset
496 [
kono
parents:
diff changeset
497 UNSPECV_LX ; Represent a load-exclusive.
kono
parents:
diff changeset
498 UNSPECV_SX ; Represent a store-exclusive.
kono
parents:
diff changeset
499 UNSPECV_LDA ; Represent an atomic load or load-acquire.
kono
parents:
diff changeset
500 UNSPECV_STL ; Represent an atomic store or store-release.
kono
parents:
diff changeset
501 UNSPECV_ATOMIC_CMPSW ; Represent an atomic compare swap.
kono
parents:
diff changeset
502 UNSPECV_ATOMIC_EXCHG ; Represent an atomic exchange.
kono
parents:
diff changeset
503 UNSPECV_ATOMIC_CAS ; Represent an atomic CAS.
kono
parents:
diff changeset
504 UNSPECV_ATOMIC_SWP ; Represent an atomic SWP.
kono
parents:
diff changeset
505 UNSPECV_ATOMIC_OP ; Represent an atomic operation.
kono
parents:
diff changeset
506 UNSPECV_ATOMIC_LDOP ; Represent an atomic load-operation
kono
parents:
diff changeset
507 UNSPECV_ATOMIC_LDOP_OR ; Represent an atomic load-or
kono
parents:
diff changeset
508 UNSPECV_ATOMIC_LDOP_BIC ; Represent an atomic load-bic
kono
parents:
diff changeset
509 UNSPECV_ATOMIC_LDOP_XOR ; Represent an atomic load-xor
kono
parents:
diff changeset
510 UNSPECV_ATOMIC_LDOP_PLUS ; Represent an atomic load-add
kono
parents:
diff changeset
511 ])
kono
parents:
diff changeset
512
kono
parents:
diff changeset
513 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
514 ;; Mode attributes
kono
parents:
diff changeset
515 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
516
kono
parents:
diff changeset
517 ;; In GPI templates, a string like "%<w>0" will expand to "%w0" in the
kono
parents:
diff changeset
518 ;; 32-bit version and "%x0" in the 64-bit version.
kono
parents:
diff changeset
519 (define_mode_attr w [(QI "w") (HI "w") (SI "w") (DI "x") (SF "s") (DF "d")])
kono
parents:
diff changeset
520
kono
parents:
diff changeset
521 ;; The size of access, in bytes.
kono
parents:
diff changeset
522 (define_mode_attr ldst_sz [(SI "4") (DI "8")])
kono
parents:
diff changeset
523 ;; Likewise for load/store pair.
kono
parents:
diff changeset
524 (define_mode_attr ldpstp_sz [(SI "8") (DI "16")])
kono
parents:
diff changeset
525
kono
parents:
diff changeset
526 ;; For inequal width int to float conversion
kono
parents:
diff changeset
527 (define_mode_attr w1 [(HF "w") (SF "w") (DF "x")])
kono
parents:
diff changeset
528 (define_mode_attr w2 [(HF "x") (SF "x") (DF "w")])
kono
parents:
diff changeset
529
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
530 ;; For width of fp registers in fcvt instruction
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
531 (define_mode_attr fpw [(DI "s") (SI "d")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
532
111
kono
parents:
diff changeset
533 (define_mode_attr short_mask [(HI "65535") (QI "255")])
kono
parents:
diff changeset
534
kono
parents:
diff changeset
535 ;; For constraints used in scalar immediate vector moves
kono
parents:
diff changeset
536 (define_mode_attr hq [(HI "h") (QI "q")])
kono
parents:
diff changeset
537
kono
parents:
diff changeset
538 ;; For doubling width of an integer mode
kono
parents:
diff changeset
539 (define_mode_attr DWI [(QI "HI") (HI "SI") (SI "DI") (DI "TI")])
kono
parents:
diff changeset
540
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
541 (define_mode_attr fcvt_change_mode [(SI "df") (DI "sf")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
542
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
543 (define_mode_attr FCVT_CHANGE_MODE [(SI "DF") (DI "SF")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
544
111
kono
parents:
diff changeset
545 ;; For scalar usage of vector/FP registers
kono
parents:
diff changeset
546 (define_mode_attr v [(QI "b") (HI "h") (SI "s") (DI "d")
kono
parents:
diff changeset
547 (HF "h") (SF "s") (DF "d")
kono
parents:
diff changeset
548 (V8QI "") (V16QI "")
kono
parents:
diff changeset
549 (V4HI "") (V8HI "")
kono
parents:
diff changeset
550 (V2SI "") (V4SI "")
kono
parents:
diff changeset
551 (V2DI "") (V2SF "")
kono
parents:
diff changeset
552 (V4SF "") (V4HF "")
kono
parents:
diff changeset
553 (V8HF "") (V2DF "")])
kono
parents:
diff changeset
554
kono
parents:
diff changeset
555 ;; For scalar usage of vector/FP registers, narrowing
kono
parents:
diff changeset
556 (define_mode_attr vn2 [(QI "") (HI "b") (SI "h") (DI "s")
kono
parents:
diff changeset
557 (V8QI "") (V16QI "")
kono
parents:
diff changeset
558 (V4HI "") (V8HI "")
kono
parents:
diff changeset
559 (V2SI "") (V4SI "")
kono
parents:
diff changeset
560 (V2DI "") (V2SF "")
kono
parents:
diff changeset
561 (V4SF "") (V2DF "")])
kono
parents:
diff changeset
562
kono
parents:
diff changeset
563 ;; For scalar usage of vector/FP registers, widening
kono
parents:
diff changeset
564 (define_mode_attr vw2 [(DI "") (QI "h") (HI "s") (SI "d")
kono
parents:
diff changeset
565 (V8QI "") (V16QI "")
kono
parents:
diff changeset
566 (V4HI "") (V8HI "")
kono
parents:
diff changeset
567 (V2SI "") (V4SI "")
kono
parents:
diff changeset
568 (V2DI "") (V2SF "")
kono
parents:
diff changeset
569 (V4SF "") (V2DF "")])
kono
parents:
diff changeset
570
kono
parents:
diff changeset
571 ;; Register Type Name and Vector Arrangement Specifier for when
kono
parents:
diff changeset
572 ;; we are doing scalar for DI and SIMD for SI (ignoring all but
kono
parents:
diff changeset
573 ;; lane 0).
kono
parents:
diff changeset
574 (define_mode_attr rtn [(DI "d") (SI "")])
kono
parents:
diff changeset
575 (define_mode_attr vas [(DI "") (SI ".2s")])
kono
parents:
diff changeset
576
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
577 ;; Map a vector to the number of units in it, if the size of the mode
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
578 ;; is constant.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
579 (define_mode_attr nunits [(V8QI "8") (V16QI "16")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
580 (V4HI "4") (V8HI "8")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
581 (V2SI "2") (V4SI "4")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
582 (V2DI "2")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
583 (V4HF "4") (V8HF "8")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
584 (V2SF "2") (V4SF "4")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
585 (V1DF "1") (V2DF "2")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
586 (DI "1") (DF "1")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
587
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
588 ;; Map a mode to the number of bits in it, if the size of the mode
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
589 ;; is constant.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
590 (define_mode_attr bitsize [(V8QI "64") (V16QI "128")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
591 (V4HI "64") (V8HI "128")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
592 (V2SI "64") (V4SI "128")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
593 (V2DI "128")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
594
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
595 ;; Map a floating point or integer mode to the appropriate register name prefix
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
596 (define_mode_attr s [(HF "h") (SF "s") (DF "d") (SI "s") (DI "d")])
111
kono
parents:
diff changeset
597
kono
parents:
diff changeset
598 ;; Give the length suffix letter for a sign- or zero-extension.
kono
parents:
diff changeset
599 (define_mode_attr size [(QI "b") (HI "h") (SI "w")])
kono
parents:
diff changeset
600
kono
parents:
diff changeset
601 ;; Give the number of bits in the mode
kono
parents:
diff changeset
602 (define_mode_attr sizen [(QI "8") (HI "16") (SI "32") (DI "64")])
kono
parents:
diff changeset
603
kono
parents:
diff changeset
604 ;; Give the ordinal of the MSB in the mode
kono
parents:
diff changeset
605 (define_mode_attr sizem1 [(QI "#7") (HI "#15") (SI "#31") (DI "#63")])
kono
parents:
diff changeset
606
kono
parents:
diff changeset
607 ;; Attribute to describe constants acceptable in logical operations
kono
parents:
diff changeset
608 (define_mode_attr lconst [(SI "K") (DI "L")])
kono
parents:
diff changeset
609
kono
parents:
diff changeset
610 ;; Attribute to describe constants acceptable in logical and operations
kono
parents:
diff changeset
611 (define_mode_attr lconst2 [(SI "UsO") (DI "UsP")])
kono
parents:
diff changeset
612
kono
parents:
diff changeset
613 ;; Map a mode to a specific constraint character.
kono
parents:
diff changeset
614 (define_mode_attr cmode [(QI "q") (HI "h") (SI "s") (DI "d")])
kono
parents:
diff changeset
615
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
616 ;; Map modes to Usg and Usj constraints for SISD right shifts
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
617 (define_mode_attr cmode_simd [(SI "g") (DI "j")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
618
111
kono
parents:
diff changeset
619 (define_mode_attr Vtype [(V8QI "8b") (V16QI "16b")
kono
parents:
diff changeset
620 (V4HI "4h") (V8HI "8h")
kono
parents:
diff changeset
621 (V2SI "2s") (V4SI "4s")
kono
parents:
diff changeset
622 (DI "1d") (DF "1d")
kono
parents:
diff changeset
623 (V2DI "2d") (V2SF "2s")
kono
parents:
diff changeset
624 (V4SF "4s") (V2DF "2d")
kono
parents:
diff changeset
625 (V4HF "4h") (V8HF "8h")])
kono
parents:
diff changeset
626
kono
parents:
diff changeset
627 (define_mode_attr Vrevsuff [(V4HI "16") (V8HI "16") (V2SI "32")
kono
parents:
diff changeset
628 (V4SI "32") (V2DI "64")])
kono
parents:
diff changeset
629
kono
parents:
diff changeset
630 (define_mode_attr Vmtype [(V8QI ".8b") (V16QI ".16b")
kono
parents:
diff changeset
631 (V4HI ".4h") (V8HI ".8h")
kono
parents:
diff changeset
632 (V2SI ".2s") (V4SI ".4s")
kono
parents:
diff changeset
633 (V2DI ".2d") (V4HF ".4h")
kono
parents:
diff changeset
634 (V8HF ".8h") (V2SF ".2s")
kono
parents:
diff changeset
635 (V4SF ".4s") (V2DF ".2d")
kono
parents:
diff changeset
636 (DI "") (SI "")
kono
parents:
diff changeset
637 (HI "") (QI "")
kono
parents:
diff changeset
638 (TI "") (HF "")
kono
parents:
diff changeset
639 (SF "") (DF "")])
kono
parents:
diff changeset
640
kono
parents:
diff changeset
641 ;; Register suffix narrowed modes for VQN.
kono
parents:
diff changeset
642 (define_mode_attr Vmntype [(V8HI ".8b") (V4SI ".4h")
kono
parents:
diff changeset
643 (V2DI ".2s")
kono
parents:
diff changeset
644 (DI "") (SI "")
kono
parents:
diff changeset
645 (HI "")])
kono
parents:
diff changeset
646
kono
parents:
diff changeset
647 ;; Mode-to-individual element type mapping.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
648 (define_mode_attr Vetype [(V8QI "b") (V16QI "b") (VNx16QI "b") (VNx16BI "b")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
649 (V4HI "h") (V8HI "h") (VNx8HI "h") (VNx8BI "h")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
650 (V2SI "s") (V4SI "s") (VNx4SI "s") (VNx4BI "s")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
651 (V2DI "d") (VNx2DI "d") (VNx2BI "d")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
652 (V4HF "h") (V8HF "h") (VNx8HF "h")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
653 (V2SF "s") (V4SF "s") (VNx4SF "s")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
654 (V2DF "d") (VNx2DF "d")
111
kono
parents:
diff changeset
655 (HF "h")
kono
parents:
diff changeset
656 (SF "s") (DF "d")
kono
parents:
diff changeset
657 (QI "b") (HI "h")
kono
parents:
diff changeset
658 (SI "s") (DI "d")])
kono
parents:
diff changeset
659
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
660 ;; Equivalent of "size" for a vector element.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
661 (define_mode_attr Vesize [(VNx16QI "b")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
662 (VNx8HI "h") (VNx8HF "h")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
663 (VNx4SI "w") (VNx4SF "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
664 (VNx2DI "d") (VNx2DF "d")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
665 (VNx32QI "b") (VNx48QI "b") (VNx64QI "b")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
666 (VNx16HI "h") (VNx24HI "h") (VNx32HI "h")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
667 (VNx16HF "h") (VNx24HF "h") (VNx32HF "h")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
668 (VNx8SI "w") (VNx12SI "w") (VNx16SI "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
669 (VNx8SF "w") (VNx12SF "w") (VNx16SF "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
670 (VNx4DI "d") (VNx6DI "d") (VNx8DI "d")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
671 (VNx4DF "d") (VNx6DF "d") (VNx8DF "d")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
672
111
kono
parents:
diff changeset
673 ;; Vetype is used everywhere in scheduling type and assembly output,
kono
parents:
diff changeset
674 ;; sometimes they are not the same, for example HF modes on some
kono
parents:
diff changeset
675 ;; instructions. stype is defined to represent scheduling type
kono
parents:
diff changeset
676 ;; more accurately.
kono
parents:
diff changeset
677 (define_mode_attr stype [(V8QI "b") (V16QI "b") (V4HI "s") (V8HI "s")
kono
parents:
diff changeset
678 (V2SI "s") (V4SI "s") (V2DI "d") (V4HF "s")
kono
parents:
diff changeset
679 (V8HF "s") (V2SF "s") (V4SF "s") (V2DF "d")
kono
parents:
diff changeset
680 (HF "s") (SF "s") (DF "d") (QI "b") (HI "s")
kono
parents:
diff changeset
681 (SI "s") (DI "d")])
kono
parents:
diff changeset
682
kono
parents:
diff changeset
683 ;; Mode-to-bitwise operation type mapping.
kono
parents:
diff changeset
684 (define_mode_attr Vbtype [(V8QI "8b") (V16QI "16b")
kono
parents:
diff changeset
685 (V4HI "8b") (V8HI "16b")
kono
parents:
diff changeset
686 (V2SI "8b") (V4SI "16b")
kono
parents:
diff changeset
687 (V2DI "16b") (V4HF "8b")
kono
parents:
diff changeset
688 (V8HF "16b") (V2SF "8b")
kono
parents:
diff changeset
689 (V4SF "16b") (V2DF "16b")
kono
parents:
diff changeset
690 (DI "8b") (DF "8b")
kono
parents:
diff changeset
691 (SI "8b")])
kono
parents:
diff changeset
692
kono
parents:
diff changeset
693 ;; Define element mode for each vector mode.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
694 (define_mode_attr VEL [(V8QI "QI") (V16QI "QI") (VNx16QI "QI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
695 (V4HI "HI") (V8HI "HI") (VNx8HI "HI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
696 (V2SI "SI") (V4SI "SI") (VNx4SI "SI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
697 (DI "DI") (V2DI "DI") (VNx2DI "DI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
698 (V4HF "HF") (V8HF "HF") (VNx8HF "HF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
699 (V2SF "SF") (V4SF "SF") (VNx4SF "SF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
700 (DF "DF") (V2DF "DF") (VNx2DF "DF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
701 (SI "SI") (HI "HI")
111
kono
parents:
diff changeset
702 (QI "QI")])
kono
parents:
diff changeset
703
kono
parents:
diff changeset
704 ;; Define element mode for each vector mode (lower case).
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
705 (define_mode_attr Vel [(V8QI "qi") (V16QI "qi") (VNx16QI "qi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
706 (V4HI "hi") (V8HI "hi") (VNx8HI "hi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
707 (V2SI "si") (V4SI "si") (VNx4SI "si")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
708 (DI "di") (V2DI "di") (VNx2DI "di")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
709 (V4HF "hf") (V8HF "hf") (VNx8HF "hf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
710 (V2SF "sf") (V4SF "sf") (VNx4SF "sf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
711 (V2DF "df") (DF "df") (VNx2DF "df")
111
kono
parents:
diff changeset
712 (SI "si") (HI "hi")
kono
parents:
diff changeset
713 (QI "qi")])
kono
parents:
diff changeset
714
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
715 ;; Element mode with floating-point values replaced by like-sized integers.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
716 (define_mode_attr VEL_INT [(VNx16QI "QI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
717 (VNx8HI "HI") (VNx8HF "HI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
718 (VNx4SI "SI") (VNx4SF "SI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
719 (VNx2DI "DI") (VNx2DF "DI")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
720
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
721 ;; Gives the mode of the 128-bit lowpart of an SVE vector.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
722 (define_mode_attr V128 [(VNx16QI "V16QI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
723 (VNx8HI "V8HI") (VNx8HF "V8HF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
724 (VNx4SI "V4SI") (VNx4SF "V4SF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
725 (VNx2DI "V2DI") (VNx2DF "V2DF")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
726
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
727 ;; ...and again in lower case.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
728 (define_mode_attr v128 [(VNx16QI "v16qi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
729 (VNx8HI "v8hi") (VNx8HF "v8hf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
730 (VNx4SI "v4si") (VNx4SF "v4sf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
731 (VNx2DI "v2di") (VNx2DF "v2df")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
732
111
kono
parents:
diff changeset
733 ;; 64-bit container modes the inner or scalar source mode.
kono
parents:
diff changeset
734 (define_mode_attr VCOND [(HI "V4HI") (SI "V2SI")
kono
parents:
diff changeset
735 (V4HI "V4HI") (V8HI "V4HI")
kono
parents:
diff changeset
736 (V2SI "V2SI") (V4SI "V2SI")
kono
parents:
diff changeset
737 (DI "DI") (V2DI "DI")
kono
parents:
diff changeset
738 (V2SF "V2SF") (V4SF "V2SF")
kono
parents:
diff changeset
739 (V2DF "DF")])
kono
parents:
diff changeset
740
kono
parents:
diff changeset
741 ;; 128-bit container modes the inner or scalar source mode.
kono
parents:
diff changeset
742 (define_mode_attr VCONQ [(V8QI "V16QI") (V16QI "V16QI")
kono
parents:
diff changeset
743 (V4HI "V8HI") (V8HI "V8HI")
kono
parents:
diff changeset
744 (V2SI "V4SI") (V4SI "V4SI")
kono
parents:
diff changeset
745 (DI "V2DI") (V2DI "V2DI")
kono
parents:
diff changeset
746 (V4HF "V8HF") (V8HF "V8HF")
kono
parents:
diff changeset
747 (V2SF "V2SF") (V4SF "V4SF")
kono
parents:
diff changeset
748 (V2DF "V2DF") (SI "V4SI")
kono
parents:
diff changeset
749 (HI "V8HI") (QI "V16QI")])
kono
parents:
diff changeset
750
kono
parents:
diff changeset
751 ;; Half modes of all vector modes.
kono
parents:
diff changeset
752 (define_mode_attr VHALF [(V8QI "V4QI") (V16QI "V8QI")
kono
parents:
diff changeset
753 (V4HI "V2HI") (V8HI "V4HI")
kono
parents:
diff changeset
754 (V2SI "SI") (V4SI "V2SI")
kono
parents:
diff changeset
755 (V2DI "DI") (V2SF "SF")
kono
parents:
diff changeset
756 (V4SF "V2SF") (V4HF "V2HF")
kono
parents:
diff changeset
757 (V8HF "V4HF") (V2DF "DF")])
kono
parents:
diff changeset
758
kono
parents:
diff changeset
759 ;; Half modes of all vector modes, in lower-case.
kono
parents:
diff changeset
760 (define_mode_attr Vhalf [(V8QI "v4qi") (V16QI "v8qi")
kono
parents:
diff changeset
761 (V4HI "v2hi") (V8HI "v4hi")
kono
parents:
diff changeset
762 (V2SI "si") (V4SI "v2si")
kono
parents:
diff changeset
763 (V2DI "di") (V2SF "sf")
kono
parents:
diff changeset
764 (V4SF "v2sf") (V2DF "df")])
kono
parents:
diff changeset
765
kono
parents:
diff changeset
766 ;; Double modes of vector modes.
kono
parents:
diff changeset
767 (define_mode_attr VDBL [(V8QI "V16QI") (V4HI "V8HI")
kono
parents:
diff changeset
768 (V4HF "V8HF")
kono
parents:
diff changeset
769 (V2SI "V4SI") (V2SF "V4SF")
kono
parents:
diff changeset
770 (SI "V2SI") (DI "V2DI")
kono
parents:
diff changeset
771 (DF "V2DF")])
kono
parents:
diff changeset
772
kono
parents:
diff changeset
773 ;; Register suffix for double-length mode.
kono
parents:
diff changeset
774 (define_mode_attr Vdtype [(V4HF "8h") (V2SF "4s")])
kono
parents:
diff changeset
775
kono
parents:
diff changeset
776 ;; Double modes of vector modes (lower case).
kono
parents:
diff changeset
777 (define_mode_attr Vdbl [(V8QI "v16qi") (V4HI "v8hi")
kono
parents:
diff changeset
778 (V4HF "v8hf")
kono
parents:
diff changeset
779 (V2SI "v4si") (V2SF "v4sf")
kono
parents:
diff changeset
780 (SI "v2si") (DI "v2di")
kono
parents:
diff changeset
781 (DF "v2df")])
kono
parents:
diff changeset
782
kono
parents:
diff changeset
783 ;; Modes with double-width elements.
kono
parents:
diff changeset
784 (define_mode_attr VDBLW [(V8QI "V4HI") (V16QI "V8HI")
kono
parents:
diff changeset
785 (V4HI "V2SI") (V8HI "V4SI")
kono
parents:
diff changeset
786 (V2SI "DI") (V4SI "V2DI")])
kono
parents:
diff changeset
787
kono
parents:
diff changeset
788 ;; Narrowed modes for VDN.
kono
parents:
diff changeset
789 (define_mode_attr VNARROWD [(V4HI "V8QI") (V2SI "V4HI")
kono
parents:
diff changeset
790 (DI "V2SI")])
kono
parents:
diff changeset
791
kono
parents:
diff changeset
792 ;; Narrowed double-modes for VQN (Used for XTN).
kono
parents:
diff changeset
793 (define_mode_attr VNARROWQ [(V8HI "V8QI") (V4SI "V4HI")
kono
parents:
diff changeset
794 (V2DI "V2SI")
kono
parents:
diff changeset
795 (DI "SI") (SI "HI")
kono
parents:
diff changeset
796 (HI "QI")])
kono
parents:
diff changeset
797
kono
parents:
diff changeset
798 ;; Narrowed quad-modes for VQN (Used for XTN2).
kono
parents:
diff changeset
799 (define_mode_attr VNARROWQ2 [(V8HI "V16QI") (V4SI "V8HI")
kono
parents:
diff changeset
800 (V2DI "V4SI")])
kono
parents:
diff changeset
801
kono
parents:
diff changeset
802 ;; Register suffix narrowed modes for VQN.
kono
parents:
diff changeset
803 (define_mode_attr Vntype [(V8HI "8b") (V4SI "4h")
kono
parents:
diff changeset
804 (V2DI "2s")])
kono
parents:
diff changeset
805
kono
parents:
diff changeset
806 ;; Register suffix narrowed modes for VQN.
kono
parents:
diff changeset
807 (define_mode_attr V2ntype [(V8HI "16b") (V4SI "8h")
kono
parents:
diff changeset
808 (V2DI "4s")])
kono
parents:
diff changeset
809
kono
parents:
diff changeset
810 ;; Widened modes of vector modes.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
811 (define_mode_attr VWIDE [(V8QI "V8HI") (V4HI "V4SI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
812 (V2SI "V2DI") (V16QI "V8HI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
813 (V8HI "V4SI") (V4SI "V2DI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
814 (HI "SI") (SI "DI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
815 (V8HF "V4SF") (V4SF "V2DF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
816 (V4HF "V4SF") (V2SF "V2DF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
817 (VNx8HF "VNx4SF") (VNx4SF "VNx2DF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
818 (VNx16QI "VNx8HI") (VNx8HI "VNx4SI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
819 (VNx4SI "VNx2DI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
820 (VNx16BI "VNx8BI") (VNx8BI "VNx4BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
821 (VNx4BI "VNx2BI")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
822
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
823 ;; Predicate mode associated with VWIDE.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
824 (define_mode_attr VWIDE_PRED [(VNx8HF "VNx4BI") (VNx4SF "VNx2BI")])
111
kono
parents:
diff changeset
825
kono
parents:
diff changeset
826 ;; Widened modes of vector modes, lowercase
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
827 (define_mode_attr Vwide [(V2SF "v2df") (V4HF "v4sf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
828 (VNx16QI "vnx8hi") (VNx8HI "vnx4si")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
829 (VNx4SI "vnx2di")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
830 (VNx8HF "vnx4sf") (VNx4SF "vnx2df")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
831 (VNx16BI "vnx8bi") (VNx8BI "vnx4bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
832 (VNx4BI "vnx2bi")])
111
kono
parents:
diff changeset
833
kono
parents:
diff changeset
834 ;; Widened mode register suffixes for VD_BHSI/VQW/VQ_HSF.
kono
parents:
diff changeset
835 (define_mode_attr Vwtype [(V8QI "8h") (V4HI "4s")
kono
parents:
diff changeset
836 (V2SI "2d") (V16QI "8h")
kono
parents:
diff changeset
837 (V8HI "4s") (V4SI "2d")
kono
parents:
diff changeset
838 (V8HF "4s") (V4SF "2d")])
kono
parents:
diff changeset
839
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
840 ;; SVE vector after widening
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
841 (define_mode_attr Vewtype [(VNx16QI "h")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
842 (VNx8HI "s") (VNx8HF "s")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
843 (VNx4SI "d") (VNx4SF "d")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
844
111
kono
parents:
diff changeset
845 ;; Widened mode register suffixes for VDW/VQW.
kono
parents:
diff changeset
846 (define_mode_attr Vmwtype [(V8QI ".8h") (V4HI ".4s")
kono
parents:
diff changeset
847 (V2SI ".2d") (V16QI ".8h")
kono
parents:
diff changeset
848 (V8HI ".4s") (V4SI ".2d")
kono
parents:
diff changeset
849 (V4HF ".4s") (V2SF ".2d")
kono
parents:
diff changeset
850 (SI "") (HI "")])
kono
parents:
diff changeset
851
kono
parents:
diff changeset
852 ;; Lower part register suffixes for VQW/VQ_HSF.
kono
parents:
diff changeset
853 (define_mode_attr Vhalftype [(V16QI "8b") (V8HI "4h")
kono
parents:
diff changeset
854 (V4SI "2s") (V8HF "4h")
kono
parents:
diff changeset
855 (V4SF "2s")])
kono
parents:
diff changeset
856
kono
parents:
diff changeset
857 ;; Define corresponding core/FP element mode for each vector mode.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
858 (define_mode_attr vw [(V8QI "w") (V16QI "w") (VNx16QI "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
859 (V4HI "w") (V8HI "w") (VNx8HI "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
860 (V2SI "w") (V4SI "w") (VNx4SI "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
861 (DI "x") (V2DI "x") (VNx2DI "x")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
862 (VNx8HF "h")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
863 (V2SF "s") (V4SF "s") (VNx4SF "s")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
864 (V2DF "d") (VNx2DF "d")])
111
kono
parents:
diff changeset
865
kono
parents:
diff changeset
866 ;; Corresponding core element mode for each vector mode. This is a
kono
parents:
diff changeset
867 ;; variation on <vw> mapping FP modes to GP regs.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
868 (define_mode_attr vwcore [(V8QI "w") (V16QI "w") (VNx16QI "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
869 (V4HI "w") (V8HI "w") (VNx8HI "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
870 (V2SI "w") (V4SI "w") (VNx4SI "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
871 (DI "x") (V2DI "x") (VNx2DI "x")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
872 (V4HF "w") (V8HF "w") (VNx8HF "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
873 (V2SF "w") (V4SF "w") (VNx4SF "w")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
874 (V2DF "x") (VNx2DF "x")])
111
kono
parents:
diff changeset
875
kono
parents:
diff changeset
876 ;; Double vector types for ALLX.
kono
parents:
diff changeset
877 (define_mode_attr Vallxd [(QI "8b") (HI "4h") (SI "2s")])
kono
parents:
diff changeset
878
kono
parents:
diff changeset
879 ;; Mode with floating-point values replaced by like-sized integers.
kono
parents:
diff changeset
880 (define_mode_attr V_INT_EQUIV [(V8QI "V8QI") (V16QI "V16QI")
kono
parents:
diff changeset
881 (V4HI "V4HI") (V8HI "V8HI")
kono
parents:
diff changeset
882 (V2SI "V2SI") (V4SI "V4SI")
kono
parents:
diff changeset
883 (DI "DI") (V2DI "V2DI")
kono
parents:
diff changeset
884 (V4HF "V4HI") (V8HF "V8HI")
kono
parents:
diff changeset
885 (V2SF "V2SI") (V4SF "V4SI")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
886 (DF "DI") (V2DF "V2DI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
887 (SF "SI") (SI "SI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
888 (HF "HI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
889 (VNx16QI "VNx16QI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
890 (VNx8HI "VNx8HI") (VNx8HF "VNx8HI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
891 (VNx4SI "VNx4SI") (VNx4SF "VNx4SI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
892 (VNx2DI "VNx2DI") (VNx2DF "VNx2DI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
893 ])
111
kono
parents:
diff changeset
894
kono
parents:
diff changeset
895 ;; Lower case mode with floating-point values replaced by like-sized integers.
kono
parents:
diff changeset
896 (define_mode_attr v_int_equiv [(V8QI "v8qi") (V16QI "v16qi")
kono
parents:
diff changeset
897 (V4HI "v4hi") (V8HI "v8hi")
kono
parents:
diff changeset
898 (V2SI "v2si") (V4SI "v4si")
kono
parents:
diff changeset
899 (DI "di") (V2DI "v2di")
kono
parents:
diff changeset
900 (V4HF "v4hi") (V8HF "v8hi")
kono
parents:
diff changeset
901 (V2SF "v2si") (V4SF "v4si")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
902 (DF "di") (V2DF "v2di")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
903 (SF "si")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
904 (VNx16QI "vnx16qi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
905 (VNx8HI "vnx8hi") (VNx8HF "vnx8hi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
906 (VNx4SI "vnx4si") (VNx4SF "vnx4si")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
907 (VNx2DI "vnx2di") (VNx2DF "vnx2di")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
908 ])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
909
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
910 ;; Floating-point equivalent of selected modes.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
911 (define_mode_attr V_FP_EQUIV [(VNx4SI "VNx4SF") (VNx4SF "VNx4SF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
912 (VNx2DI "VNx2DF") (VNx2DF "VNx2DF")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
913 (define_mode_attr v_fp_equiv [(VNx4SI "vnx4sf") (VNx4SF "vnx4sf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
914 (VNx2DI "vnx2df") (VNx2DF "vnx2df")])
111
kono
parents:
diff changeset
915
kono
parents:
diff changeset
916 ;; Mode for vector conditional operations where the comparison has
kono
parents:
diff changeset
917 ;; different type from the lhs.
kono
parents:
diff changeset
918 (define_mode_attr V_cmp_mixed [(V2SI "V2SF") (V4SI "V4SF")
kono
parents:
diff changeset
919 (V2DI "V2DF") (V2SF "V2SI")
kono
parents:
diff changeset
920 (V4SF "V4SI") (V2DF "V2DI")])
kono
parents:
diff changeset
921
kono
parents:
diff changeset
922 (define_mode_attr v_cmp_mixed [(V2SI "v2sf") (V4SI "v4sf")
kono
parents:
diff changeset
923 (V2DI "v2df") (V2SF "v2si")
kono
parents:
diff changeset
924 (V4SF "v4si") (V2DF "v2di")])
kono
parents:
diff changeset
925
kono
parents:
diff changeset
926 ;; Lower case element modes (as used in shift immediate patterns).
kono
parents:
diff changeset
927 (define_mode_attr ve_mode [(V8QI "qi") (V16QI "qi")
kono
parents:
diff changeset
928 (V4HI "hi") (V8HI "hi")
kono
parents:
diff changeset
929 (V2SI "si") (V4SI "si")
kono
parents:
diff changeset
930 (DI "di") (V2DI "di")
kono
parents:
diff changeset
931 (QI "qi") (HI "hi")
kono
parents:
diff changeset
932 (SI "si")])
kono
parents:
diff changeset
933
kono
parents:
diff changeset
934 ;; Vm for lane instructions is restricted to FP_LO_REGS.
kono
parents:
diff changeset
935 (define_mode_attr vwx [(V4HI "x") (V8HI "x") (HI "x")
kono
parents:
diff changeset
936 (V2SI "w") (V4SI "w") (SI "w")])
kono
parents:
diff changeset
937
kono
parents:
diff changeset
938 (define_mode_attr Vendreg [(OI "T") (CI "U") (XI "V")])
kono
parents:
diff changeset
939
kono
parents:
diff changeset
940 ;; This is both the number of Q-Registers needed to hold the corresponding
kono
parents:
diff changeset
941 ;; opaque large integer mode, and the number of elements touched by the
kono
parents:
diff changeset
942 ;; ld..._lane and st..._lane operations.
kono
parents:
diff changeset
943 (define_mode_attr nregs [(OI "2") (CI "3") (XI "4")])
kono
parents:
diff changeset
944
kono
parents:
diff changeset
945 ;; Mode for atomic operation suffixes
kono
parents:
diff changeset
946 (define_mode_attr atomic_sfx
kono
parents:
diff changeset
947 [(QI "b") (HI "h") (SI "") (DI "")])
kono
parents:
diff changeset
948
kono
parents:
diff changeset
949 (define_mode_attr fcvt_target [(V2DF "v2di") (V4SF "v4si") (V2SF "v2si")
kono
parents:
diff changeset
950 (V2DI "v2df") (V4SI "v4sf") (V2SI "v2sf")
kono
parents:
diff changeset
951 (SF "si") (DF "di") (SI "sf") (DI "df")
kono
parents:
diff changeset
952 (V4HF "v4hi") (V8HF "v8hi") (V4HI "v4hf")
kono
parents:
diff changeset
953 (V8HI "v8hf") (HF "hi") (HI "hf")])
kono
parents:
diff changeset
954 (define_mode_attr FCVT_TARGET [(V2DF "V2DI") (V4SF "V4SI") (V2SF "V2SI")
kono
parents:
diff changeset
955 (V2DI "V2DF") (V4SI "V4SF") (V2SI "V2SF")
kono
parents:
diff changeset
956 (SF "SI") (DF "DI") (SI "SF") (DI "DF")
kono
parents:
diff changeset
957 (V4HF "V4HI") (V8HF "V8HI") (V4HI "V4HF")
kono
parents:
diff changeset
958 (V8HI "V8HF") (HF "HI") (HI "HF")])
kono
parents:
diff changeset
959
kono
parents:
diff changeset
960
kono
parents:
diff changeset
961 ;; for the inequal width integer to fp conversions
kono
parents:
diff changeset
962 (define_mode_attr fcvt_iesize [(HF "di") (SF "di") (DF "si")])
kono
parents:
diff changeset
963 (define_mode_attr FCVT_IESIZE [(HF "DI") (SF "DI") (DF "SI")])
kono
parents:
diff changeset
964
kono
parents:
diff changeset
965 (define_mode_attr VSWAP_WIDTH [(V8QI "V16QI") (V16QI "V8QI")
kono
parents:
diff changeset
966 (V4HI "V8HI") (V8HI "V4HI")
kono
parents:
diff changeset
967 (V2SI "V4SI") (V4SI "V2SI")
kono
parents:
diff changeset
968 (DI "V2DI") (V2DI "DI")
kono
parents:
diff changeset
969 (V2SF "V4SF") (V4SF "V2SF")
kono
parents:
diff changeset
970 (V4HF "V8HF") (V8HF "V4HF")
kono
parents:
diff changeset
971 (DF "V2DF") (V2DF "DF")])
kono
parents:
diff changeset
972
kono
parents:
diff changeset
973 (define_mode_attr vswap_width_name [(V8QI "to_128") (V16QI "to_64")
kono
parents:
diff changeset
974 (V4HI "to_128") (V8HI "to_64")
kono
parents:
diff changeset
975 (V2SI "to_128") (V4SI "to_64")
kono
parents:
diff changeset
976 (DI "to_128") (V2DI "to_64")
kono
parents:
diff changeset
977 (V4HF "to_128") (V8HF "to_64")
kono
parents:
diff changeset
978 (V2SF "to_128") (V4SF "to_64")
kono
parents:
diff changeset
979 (DF "to_128") (V2DF "to_64")])
kono
parents:
diff changeset
980
kono
parents:
diff changeset
981 ;; For certain vector-by-element multiplication instructions we must
kono
parents:
diff changeset
982 ;; constrain the 16-bit cases to use only V0-V15. This is covered by
kono
parents:
diff changeset
983 ;; the 'x' constraint. All other modes may use the 'w' constraint.
kono
parents:
diff changeset
984 (define_mode_attr h_con [(V2SI "w") (V4SI "w")
kono
parents:
diff changeset
985 (V4HI "x") (V8HI "x")
kono
parents:
diff changeset
986 (V4HF "x") (V8HF "x")
kono
parents:
diff changeset
987 (V2SF "w") (V4SF "w")
kono
parents:
diff changeset
988 (V2DF "w") (DF "w")])
kono
parents:
diff changeset
989
kono
parents:
diff changeset
990 ;; Defined to 'f' for types whose element type is a float type.
kono
parents:
diff changeset
991 (define_mode_attr f [(V8QI "") (V16QI "")
kono
parents:
diff changeset
992 (V4HI "") (V8HI "")
kono
parents:
diff changeset
993 (V2SI "") (V4SI "")
kono
parents:
diff changeset
994 (DI "") (V2DI "")
kono
parents:
diff changeset
995 (V4HF "f") (V8HF "f")
kono
parents:
diff changeset
996 (V2SF "f") (V4SF "f")
kono
parents:
diff changeset
997 (V2DF "f") (DF "f")])
kono
parents:
diff changeset
998
kono
parents:
diff changeset
999 ;; Defined to '_fp' for types whose element type is a float type.
kono
parents:
diff changeset
1000 (define_mode_attr fp [(V8QI "") (V16QI "")
kono
parents:
diff changeset
1001 (V4HI "") (V8HI "")
kono
parents:
diff changeset
1002 (V2SI "") (V4SI "")
kono
parents:
diff changeset
1003 (DI "") (V2DI "")
kono
parents:
diff changeset
1004 (V4HF "_fp") (V8HF "_fp")
kono
parents:
diff changeset
1005 (V2SF "_fp") (V4SF "_fp")
kono
parents:
diff changeset
1006 (V2DF "_fp") (DF "_fp")
kono
parents:
diff changeset
1007 (SF "_fp")])
kono
parents:
diff changeset
1008
kono
parents:
diff changeset
1009 ;; Defined to '_q' for 128-bit types.
kono
parents:
diff changeset
1010 (define_mode_attr q [(V8QI "") (V16QI "_q")
kono
parents:
diff changeset
1011 (V4HI "") (V8HI "_q")
kono
parents:
diff changeset
1012 (V2SI "") (V4SI "_q")
kono
parents:
diff changeset
1013 (DI "") (V2DI "_q")
kono
parents:
diff changeset
1014 (V4HF "") (V8HF "_q")
kono
parents:
diff changeset
1015 (V2SF "") (V4SF "_q")
kono
parents:
diff changeset
1016 (V2DF "_q")
kono
parents:
diff changeset
1017 (QI "") (HI "") (SI "") (DI "") (HF "") (SF "") (DF "")])
kono
parents:
diff changeset
1018
kono
parents:
diff changeset
1019 (define_mode_attr vp [(V8QI "v") (V16QI "v")
kono
parents:
diff changeset
1020 (V4HI "v") (V8HI "v")
kono
parents:
diff changeset
1021 (V2SI "p") (V4SI "v")
kono
parents:
diff changeset
1022 (V2DI "p") (V2DF "p")
kono
parents:
diff changeset
1023 (V2SF "p") (V4SF "v")
kono
parents:
diff changeset
1024 (V4HF "v") (V8HF "v")])
kono
parents:
diff changeset
1025
kono
parents:
diff changeset
1026 (define_mode_attr vsi2qi [(V2SI "v8qi") (V4SI "v16qi")])
kono
parents:
diff changeset
1027 (define_mode_attr VSI2QI [(V2SI "V8QI") (V4SI "V16QI")])
kono
parents:
diff changeset
1028
kono
parents:
diff changeset
1029
kono
parents:
diff changeset
1030 ;; Register suffix for DOTPROD input types from the return type.
kono
parents:
diff changeset
1031 (define_mode_attr Vdottype [(V2SI "8b") (V4SI "16b")])
kono
parents:
diff changeset
1032
kono
parents:
diff changeset
1033 ;; Sum of lengths of instructions needed to move vector registers of a mode.
kono
parents:
diff changeset
1034 (define_mode_attr insn_count [(OI "8") (CI "12") (XI "16")])
kono
parents:
diff changeset
1035
kono
parents:
diff changeset
1036 ;; -fpic small model GOT reloc modifers: gotpage_lo15/lo14 for ILP64/32.
kono
parents:
diff changeset
1037 ;; No need of iterator for -fPIC as it use got_lo12 for both modes.
kono
parents:
diff changeset
1038 (define_mode_attr got_modifier [(SI "gotpage_lo14") (DI "gotpage_lo15")])
kono
parents:
diff changeset
1039
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1040 ;; Width of 2nd and 3rd arguments to fp16 vector multiply add/sub
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1041 (define_mode_attr VFMLA_W [(V2SF "V4HF") (V4SF "V8HF")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1042
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1043 (define_mode_attr VFMLA_SEL_W [(V2SF "V2HF") (V4SF "V4HF")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1044
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1045 (define_mode_attr f16quad [(V2SF "") (V4SF "q")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1046
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1047 (define_code_attr f16mac [(plus "a") (minus "s")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1048
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1049 ;; The number of subvectors in an SVE_STRUCT.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1050 (define_mode_attr vector_count [(VNx32QI "2") (VNx16HI "2")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1051 (VNx8SI "2") (VNx4DI "2")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1052 (VNx16HF "2") (VNx8SF "2") (VNx4DF "2")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1053 (VNx48QI "3") (VNx24HI "3")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1054 (VNx12SI "3") (VNx6DI "3")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1055 (VNx24HF "3") (VNx12SF "3") (VNx6DF "3")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1056 (VNx64QI "4") (VNx32HI "4")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1057 (VNx16SI "4") (VNx8DI "4")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1058 (VNx32HF "4") (VNx16SF "4") (VNx8DF "4")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1059
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1060 ;; The number of instruction bytes needed for an SVE_STRUCT move. This is
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1061 ;; equal to vector_count * 4.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1062 (define_mode_attr insn_length [(VNx32QI "8") (VNx16HI "8")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1063 (VNx8SI "8") (VNx4DI "8")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1064 (VNx16HF "8") (VNx8SF "8") (VNx4DF "8")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1065 (VNx48QI "12") (VNx24HI "12")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1066 (VNx12SI "12") (VNx6DI "12")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1067 (VNx24HF "12") (VNx12SF "12") (VNx6DF "12")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1068 (VNx64QI "16") (VNx32HI "16")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1069 (VNx16SI "16") (VNx8DI "16")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1070 (VNx32HF "16") (VNx16SF "16") (VNx8DF "16")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1071
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1072 ;; The type of a subvector in an SVE_STRUCT.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1073 (define_mode_attr VSINGLE [(VNx32QI "VNx16QI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1074 (VNx16HI "VNx8HI") (VNx16HF "VNx8HF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1075 (VNx8SI "VNx4SI") (VNx8SF "VNx4SF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1076 (VNx4DI "VNx2DI") (VNx4DF "VNx2DF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1077 (VNx48QI "VNx16QI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1078 (VNx24HI "VNx8HI") (VNx24HF "VNx8HF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1079 (VNx12SI "VNx4SI") (VNx12SF "VNx4SF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1080 (VNx6DI "VNx2DI") (VNx6DF "VNx2DF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1081 (VNx64QI "VNx16QI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1082 (VNx32HI "VNx8HI") (VNx32HF "VNx8HF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1083 (VNx16SI "VNx4SI") (VNx16SF "VNx4SF")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1084 (VNx8DI "VNx2DI") (VNx8DF "VNx2DF")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1085
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1086 ;; ...and again in lower case.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1087 (define_mode_attr vsingle [(VNx32QI "vnx16qi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1088 (VNx16HI "vnx8hi") (VNx16HF "vnx8hf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1089 (VNx8SI "vnx4si") (VNx8SF "vnx4sf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1090 (VNx4DI "vnx2di") (VNx4DF "vnx2df")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1091 (VNx48QI "vnx16qi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1092 (VNx24HI "vnx8hi") (VNx24HF "vnx8hf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1093 (VNx12SI "vnx4si") (VNx12SF "vnx4sf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1094 (VNx6DI "vnx2di") (VNx6DF "vnx2df")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1095 (VNx64QI "vnx16qi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1096 (VNx32HI "vnx8hi") (VNx32HF "vnx8hf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1097 (VNx16SI "vnx4si") (VNx16SF "vnx4sf")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1098 (VNx8DI "vnx2di") (VNx8DF "vnx2df")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1099
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1100 ;; The predicate mode associated with an SVE data mode. For structure modes
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1101 ;; this is equivalent to the <VPRED> of the subvector mode.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1102 (define_mode_attr VPRED [(VNx16QI "VNx16BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1103 (VNx8HI "VNx8BI") (VNx8HF "VNx8BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1104 (VNx4SI "VNx4BI") (VNx4SF "VNx4BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1105 (VNx2DI "VNx2BI") (VNx2DF "VNx2BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1106 (VNx32QI "VNx16BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1107 (VNx16HI "VNx8BI") (VNx16HF "VNx8BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1108 (VNx8SI "VNx4BI") (VNx8SF "VNx4BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1109 (VNx4DI "VNx2BI") (VNx4DF "VNx2BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1110 (VNx48QI "VNx16BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1111 (VNx24HI "VNx8BI") (VNx24HF "VNx8BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1112 (VNx12SI "VNx4BI") (VNx12SF "VNx4BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1113 (VNx6DI "VNx2BI") (VNx6DF "VNx2BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1114 (VNx64QI "VNx16BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1115 (VNx32HI "VNx8BI") (VNx32HF "VNx8BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1116 (VNx16SI "VNx4BI") (VNx16SF "VNx4BI")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1117 (VNx8DI "VNx2BI") (VNx8DF "VNx2BI")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1118
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1119 ;; ...and again in lower case.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1120 (define_mode_attr vpred [(VNx16QI "vnx16bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1121 (VNx8HI "vnx8bi") (VNx8HF "vnx8bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1122 (VNx4SI "vnx4bi") (VNx4SF "vnx4bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1123 (VNx2DI "vnx2bi") (VNx2DF "vnx2bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1124 (VNx32QI "vnx16bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1125 (VNx16HI "vnx8bi") (VNx16HF "vnx8bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1126 (VNx8SI "vnx4bi") (VNx8SF "vnx4bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1127 (VNx4DI "vnx2bi") (VNx4DF "vnx2bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1128 (VNx48QI "vnx16bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1129 (VNx24HI "vnx8bi") (VNx24HF "vnx8bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1130 (VNx12SI "vnx4bi") (VNx12SF "vnx4bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1131 (VNx6DI "vnx2bi") (VNx6DF "vnx2bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1132 (VNx64QI "vnx16bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1133 (VNx32HI "vnx8bi") (VNx32HF "vnx4bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1134 (VNx16SI "vnx4bi") (VNx16SF "vnx4bi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1135 (VNx8DI "vnx2bi") (VNx8DF "vnx2bi")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1136
111
kono
parents:
diff changeset
1137 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
1138 ;; Code Iterators
kono
parents:
diff changeset
1139 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
1140
kono
parents:
diff changeset
1141 ;; This code iterator allows the various shifts supported on the core
kono
parents:
diff changeset
1142 (define_code_iterator SHIFT [ashift ashiftrt lshiftrt rotatert])
kono
parents:
diff changeset
1143
kono
parents:
diff changeset
1144 ;; This code iterator allows the shifts supported in arithmetic instructions
kono
parents:
diff changeset
1145 (define_code_iterator ASHIFT [ashift ashiftrt lshiftrt])
kono
parents:
diff changeset
1146
kono
parents:
diff changeset
1147 ;; Code iterator for logical operations
kono
parents:
diff changeset
1148 (define_code_iterator LOGICAL [and ior xor])
kono
parents:
diff changeset
1149
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1150 ;; LOGICAL without AND.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1151 (define_code_iterator LOGICAL_OR [ior xor])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1152
111
kono
parents:
diff changeset
1153 ;; Code iterator for logical operations whose :nlogical works on SIMD registers.
kono
parents:
diff changeset
1154 (define_code_iterator NLOGICAL [and ior])
kono
parents:
diff changeset
1155
kono
parents:
diff changeset
1156 ;; Code iterator for unary negate and bitwise complement.
kono
parents:
diff changeset
1157 (define_code_iterator NEG_NOT [neg not])
kono
parents:
diff changeset
1158
kono
parents:
diff changeset
1159 ;; Code iterator for sign/zero extension
kono
parents:
diff changeset
1160 (define_code_iterator ANY_EXTEND [sign_extend zero_extend])
kono
parents:
diff changeset
1161
kono
parents:
diff changeset
1162 ;; All division operations (signed/unsigned)
kono
parents:
diff changeset
1163 (define_code_iterator ANY_DIV [div udiv])
kono
parents:
diff changeset
1164
kono
parents:
diff changeset
1165 ;; Code iterator for sign/zero extraction
kono
parents:
diff changeset
1166 (define_code_iterator ANY_EXTRACT [sign_extract zero_extract])
kono
parents:
diff changeset
1167
kono
parents:
diff changeset
1168 ;; Code iterator for equality comparisons
kono
parents:
diff changeset
1169 (define_code_iterator EQL [eq ne])
kono
parents:
diff changeset
1170
kono
parents:
diff changeset
1171 ;; Code iterator for less-than and greater/equal-to
kono
parents:
diff changeset
1172 (define_code_iterator LTGE [lt ge])
kono
parents:
diff changeset
1173
kono
parents:
diff changeset
1174 ;; Iterator for __sync_<op> operations that where the operation can be
kono
parents:
diff changeset
1175 ;; represented directly RTL. This is all of the sync operations bar
kono
parents:
diff changeset
1176 ;; nand.
kono
parents:
diff changeset
1177 (define_code_iterator atomic_op [plus minus ior xor and])
kono
parents:
diff changeset
1178
kono
parents:
diff changeset
1179 ;; Iterator for integer conversions
kono
parents:
diff changeset
1180 (define_code_iterator FIXUORS [fix unsigned_fix])
kono
parents:
diff changeset
1181
kono
parents:
diff changeset
1182 ;; Iterator for float conversions
kono
parents:
diff changeset
1183 (define_code_iterator FLOATUORS [float unsigned_float])
kono
parents:
diff changeset
1184
kono
parents:
diff changeset
1185 ;; Code iterator for variants of vector max and min.
kono
parents:
diff changeset
1186 (define_code_iterator MAXMIN [smax smin umax umin])
kono
parents:
diff changeset
1187
kono
parents:
diff changeset
1188 (define_code_iterator FMAXMIN [smax smin])
kono
parents:
diff changeset
1189
kono
parents:
diff changeset
1190 ;; Code iterator for variants of vector max and min.
kono
parents:
diff changeset
1191 (define_code_iterator ADDSUB [plus minus])
kono
parents:
diff changeset
1192
kono
parents:
diff changeset
1193 ;; Code iterator for variants of vector saturating binary ops.
kono
parents:
diff changeset
1194 (define_code_iterator BINQOPS [ss_plus us_plus ss_minus us_minus])
kono
parents:
diff changeset
1195
kono
parents:
diff changeset
1196 ;; Code iterator for variants of vector saturating unary ops.
kono
parents:
diff changeset
1197 (define_code_iterator UNQOPS [ss_neg ss_abs])
kono
parents:
diff changeset
1198
kono
parents:
diff changeset
1199 ;; Code iterator for signed variants of vector saturating binary ops.
kono
parents:
diff changeset
1200 (define_code_iterator SBINQOPS [ss_plus ss_minus])
kono
parents:
diff changeset
1201
kono
parents:
diff changeset
1202 ;; Comparison operators for <F>CM.
kono
parents:
diff changeset
1203 (define_code_iterator COMPARISONS [lt le eq ge gt])
kono
parents:
diff changeset
1204
kono
parents:
diff changeset
1205 ;; Unsigned comparison operators.
kono
parents:
diff changeset
1206 (define_code_iterator UCOMPARISONS [ltu leu geu gtu])
kono
parents:
diff changeset
1207
kono
parents:
diff changeset
1208 ;; Unsigned comparison operators.
kono
parents:
diff changeset
1209 (define_code_iterator FAC_COMPARISONS [lt le ge gt])
kono
parents:
diff changeset
1210
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1211 ;; SVE integer unary operations.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1212 (define_code_iterator SVE_INT_UNARY [neg not popcount])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1213
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1214 ;; SVE floating-point unary operations.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1215 (define_code_iterator SVE_FP_UNARY [neg abs sqrt])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1216
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1217 ;; SVE integer binary operations.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1218 (define_code_iterator SVE_INT_BINARY [plus minus mult smax umax smin umin
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1219 and ior xor])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1220
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1221 ;; SVE integer binary division operations.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1222 (define_code_iterator SVE_INT_BINARY_SD [div udiv])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1223
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1224 ;; SVE integer comparisons.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1225 (define_code_iterator SVE_INT_CMP [lt le eq ne ge gt ltu leu geu gtu])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1226
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1227 ;; SVE floating-point comparisons.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1228 (define_code_iterator SVE_FP_CMP [lt le eq ne ge gt])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1229
111
kono
parents:
diff changeset
1230 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
1231 ;; Code Attributes
kono
parents:
diff changeset
1232 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
1233 ;; Map rtl objects to optab names
kono
parents:
diff changeset
1234 (define_code_attr optab [(ashift "ashl")
kono
parents:
diff changeset
1235 (ashiftrt "ashr")
kono
parents:
diff changeset
1236 (lshiftrt "lshr")
kono
parents:
diff changeset
1237 (rotatert "rotr")
kono
parents:
diff changeset
1238 (sign_extend "extend")
kono
parents:
diff changeset
1239 (zero_extend "zero_extend")
kono
parents:
diff changeset
1240 (sign_extract "extv")
kono
parents:
diff changeset
1241 (zero_extract "extzv")
kono
parents:
diff changeset
1242 (fix "fix")
kono
parents:
diff changeset
1243 (unsigned_fix "fixuns")
kono
parents:
diff changeset
1244 (float "float")
kono
parents:
diff changeset
1245 (unsigned_float "floatuns")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1246 (popcount "popcount")
111
kono
parents:
diff changeset
1247 (and "and")
kono
parents:
diff changeset
1248 (ior "ior")
kono
parents:
diff changeset
1249 (xor "xor")
kono
parents:
diff changeset
1250 (not "one_cmpl")
kono
parents:
diff changeset
1251 (neg "neg")
kono
parents:
diff changeset
1252 (plus "add")
kono
parents:
diff changeset
1253 (minus "sub")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1254 (mult "mul")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1255 (div "div")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1256 (udiv "udiv")
111
kono
parents:
diff changeset
1257 (ss_plus "qadd")
kono
parents:
diff changeset
1258 (us_plus "qadd")
kono
parents:
diff changeset
1259 (ss_minus "qsub")
kono
parents:
diff changeset
1260 (us_minus "qsub")
kono
parents:
diff changeset
1261 (ss_neg "qneg")
kono
parents:
diff changeset
1262 (ss_abs "qabs")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1263 (smin "smin")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1264 (smax "smax")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1265 (umin "umin")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1266 (umax "umax")
111
kono
parents:
diff changeset
1267 (eq "eq")
kono
parents:
diff changeset
1268 (ne "ne")
kono
parents:
diff changeset
1269 (lt "lt")
kono
parents:
diff changeset
1270 (ge "ge")
kono
parents:
diff changeset
1271 (le "le")
kono
parents:
diff changeset
1272 (gt "gt")
kono
parents:
diff changeset
1273 (ltu "ltu")
kono
parents:
diff changeset
1274 (leu "leu")
kono
parents:
diff changeset
1275 (geu "geu")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1276 (gtu "gtu")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1277 (abs "abs")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1278 (sqrt "sqrt")])
111
kono
parents:
diff changeset
1279
kono
parents:
diff changeset
1280 ;; For comparison operators we use the FCM* and CM* instructions.
kono
parents:
diff changeset
1281 ;; As there are no CMLE or CMLT instructions which act on 3 vector
kono
parents:
diff changeset
1282 ;; operands, we must use CMGE or CMGT and swap the order of the
kono
parents:
diff changeset
1283 ;; source operands.
kono
parents:
diff changeset
1284
kono
parents:
diff changeset
1285 (define_code_attr n_optab [(lt "gt") (le "ge") (eq "eq") (ge "ge") (gt "gt")
kono
parents:
diff changeset
1286 (ltu "hi") (leu "hs") (geu "hs") (gtu "hi")])
kono
parents:
diff changeset
1287 (define_code_attr cmp_1 [(lt "2") (le "2") (eq "1") (ge "1") (gt "1")
kono
parents:
diff changeset
1288 (ltu "2") (leu "2") (geu "1") (gtu "1")])
kono
parents:
diff changeset
1289 (define_code_attr cmp_2 [(lt "1") (le "1") (eq "2") (ge "2") (gt "2")
kono
parents:
diff changeset
1290 (ltu "1") (leu "1") (geu "2") (gtu "2")])
kono
parents:
diff changeset
1291
kono
parents:
diff changeset
1292 (define_code_attr CMP [(lt "LT") (le "LE") (eq "EQ") (ge "GE") (gt "GT")
kono
parents:
diff changeset
1293 (ltu "LTU") (leu "LEU") (ne "NE") (geu "GEU")
kono
parents:
diff changeset
1294 (gtu "GTU")])
kono
parents:
diff changeset
1295
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1296 ;; The AArch64 condition associated with an rtl comparison code.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1297 (define_code_attr cmp_op [(lt "lt")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1298 (le "le")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1299 (eq "eq")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1300 (ne "ne")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1301 (ge "ge")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1302 (gt "gt")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1303 (ltu "lo")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1304 (leu "ls")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1305 (geu "hs")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1306 (gtu "hi")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1307
111
kono
parents:
diff changeset
1308 (define_code_attr fix_trunc_optab [(fix "fix_trunc")
kono
parents:
diff changeset
1309 (unsigned_fix "fixuns_trunc")])
kono
parents:
diff changeset
1310
kono
parents:
diff changeset
1311 ;; Optab prefix for sign/zero-extending operations
kono
parents:
diff changeset
1312 (define_code_attr su_optab [(sign_extend "") (zero_extend "u")
kono
parents:
diff changeset
1313 (div "") (udiv "u")
kono
parents:
diff changeset
1314 (fix "") (unsigned_fix "u")
kono
parents:
diff changeset
1315 (float "s") (unsigned_float "u")
kono
parents:
diff changeset
1316 (ss_plus "s") (us_plus "u")
kono
parents:
diff changeset
1317 (ss_minus "s") (us_minus "u")])
kono
parents:
diff changeset
1318
kono
parents:
diff changeset
1319 ;; Similar for the instruction mnemonics
kono
parents:
diff changeset
1320 (define_code_attr shift [(ashift "lsl") (ashiftrt "asr")
kono
parents:
diff changeset
1321 (lshiftrt "lsr") (rotatert "ror")])
kono
parents:
diff changeset
1322
kono
parents:
diff changeset
1323 ;; Map shift operators onto underlying bit-field instructions
kono
parents:
diff changeset
1324 (define_code_attr bfshift [(ashift "ubfiz") (ashiftrt "sbfx")
kono
parents:
diff changeset
1325 (lshiftrt "ubfx") (rotatert "extr")])
kono
parents:
diff changeset
1326
kono
parents:
diff changeset
1327 ;; Logical operator instruction mnemonics
kono
parents:
diff changeset
1328 (define_code_attr logical [(and "and") (ior "orr") (xor "eor")])
kono
parents:
diff changeset
1329
kono
parents:
diff changeset
1330 ;; Operation names for negate and bitwise complement.
kono
parents:
diff changeset
1331 (define_code_attr neg_not_op [(neg "neg") (not "not")])
kono
parents:
diff changeset
1332
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1333 ;; Similar, but when the second operand is inverted.
111
kono
parents:
diff changeset
1334 (define_code_attr nlogical [(and "bic") (ior "orn") (xor "eon")])
kono
parents:
diff changeset
1335
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1336 ;; Similar, but when both operands are inverted.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1337 (define_code_attr logical_nn [(and "nor") (ior "nand")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1338
111
kono
parents:
diff changeset
1339 ;; Sign- or zero-extending data-op
kono
parents:
diff changeset
1340 (define_code_attr su [(sign_extend "s") (zero_extend "u")
kono
parents:
diff changeset
1341 (sign_extract "s") (zero_extract "u")
kono
parents:
diff changeset
1342 (fix "s") (unsigned_fix "u")
kono
parents:
diff changeset
1343 (div "s") (udiv "u")
kono
parents:
diff changeset
1344 (smax "s") (umax "u")
kono
parents:
diff changeset
1345 (smin "s") (umin "u")])
kono
parents:
diff changeset
1346
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1347 ;; Whether a shift is left or right.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1348 (define_code_attr lr [(ashift "l") (ashiftrt "r") (lshiftrt "r")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1349
111
kono
parents:
diff changeset
1350 ;; Emit conditional branch instructions.
kono
parents:
diff changeset
1351 (define_code_attr bcond [(eq "beq") (ne "bne") (lt "bne") (ge "beq")])
kono
parents:
diff changeset
1352
kono
parents:
diff changeset
1353 ;; Emit cbz/cbnz depending on comparison type.
kono
parents:
diff changeset
1354 (define_code_attr cbz [(eq "cbz") (ne "cbnz") (lt "cbnz") (ge "cbz")])
kono
parents:
diff changeset
1355
kono
parents:
diff changeset
1356 ;; Emit inverted cbz/cbnz depending on comparison type.
kono
parents:
diff changeset
1357 (define_code_attr inv_cb [(eq "cbnz") (ne "cbz") (lt "cbz") (ge "cbnz")])
kono
parents:
diff changeset
1358
kono
parents:
diff changeset
1359 ;; Emit tbz/tbnz depending on comparison type.
kono
parents:
diff changeset
1360 (define_code_attr tbz [(eq "tbz") (ne "tbnz") (lt "tbnz") (ge "tbz")])
kono
parents:
diff changeset
1361
kono
parents:
diff changeset
1362 ;; Emit inverted tbz/tbnz depending on comparison type.
kono
parents:
diff changeset
1363 (define_code_attr inv_tb [(eq "tbnz") (ne "tbz") (lt "tbz") (ge "tbnz")])
kono
parents:
diff changeset
1364
kono
parents:
diff changeset
1365 ;; Max/min attributes.
kono
parents:
diff changeset
1366 (define_code_attr maxmin [(smax "max")
kono
parents:
diff changeset
1367 (smin "min")
kono
parents:
diff changeset
1368 (umax "max")
kono
parents:
diff changeset
1369 (umin "min")])
kono
parents:
diff changeset
1370
kono
parents:
diff changeset
1371 ;; MLA/MLS attributes.
kono
parents:
diff changeset
1372 (define_code_attr as [(ss_plus "a") (ss_minus "s")])
kono
parents:
diff changeset
1373
kono
parents:
diff changeset
1374 ;; Atomic operations
kono
parents:
diff changeset
1375 (define_code_attr atomic_optab
kono
parents:
diff changeset
1376 [(ior "or") (xor "xor") (and "and") (plus "add") (minus "sub")])
kono
parents:
diff changeset
1377
kono
parents:
diff changeset
1378 (define_code_attr atomic_op_operand
kono
parents:
diff changeset
1379 [(ior "aarch64_logical_operand")
kono
parents:
diff changeset
1380 (xor "aarch64_logical_operand")
kono
parents:
diff changeset
1381 (and "aarch64_logical_operand")
kono
parents:
diff changeset
1382 (plus "aarch64_plus_operand")
kono
parents:
diff changeset
1383 (minus "aarch64_plus_operand")])
kono
parents:
diff changeset
1384
kono
parents:
diff changeset
1385 ;; Constants acceptable for atomic operations.
kono
parents:
diff changeset
1386 ;; This definition must appear in this file before the iterators it refers to.
kono
parents:
diff changeset
1387 (define_code_attr const_atomic
kono
parents:
diff changeset
1388 [(plus "IJ") (minus "IJ")
kono
parents:
diff changeset
1389 (xor "<lconst_atomic>") (ior "<lconst_atomic>")
kono
parents:
diff changeset
1390 (and "<lconst_atomic>")])
kono
parents:
diff changeset
1391
kono
parents:
diff changeset
1392 ;; Attribute to describe constants acceptable in atomic logical operations
kono
parents:
diff changeset
1393 (define_mode_attr lconst_atomic [(QI "K") (HI "K") (SI "K") (DI "L")])
kono
parents:
diff changeset
1394
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1395 ;; The integer SVE instruction that implements an rtx code.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1396 (define_code_attr sve_int_op [(plus "add")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1397 (minus "sub")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1398 (mult "mul")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1399 (div "sdiv")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1400 (udiv "udiv")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1401 (neg "neg")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1402 (smin "smin")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1403 (smax "smax")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1404 (umin "umin")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1405 (umax "umax")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1406 (and "and")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1407 (ior "orr")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1408 (xor "eor")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1409 (not "not")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1410 (popcount "cnt")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1411
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1412 (define_code_attr sve_int_op_rev [(plus "add")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1413 (minus "subr")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1414 (mult "mul")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1415 (div "sdivr")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1416 (udiv "udivr")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1417 (smin "smin")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1418 (smax "smax")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1419 (umin "umin")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1420 (umax "umax")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1421 (and "and")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1422 (ior "orr")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1423 (xor "eor")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1424
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1425 ;; The floating-point SVE instruction that implements an rtx code.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1426 (define_code_attr sve_fp_op [(plus "fadd")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1427 (neg "fneg")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1428 (abs "fabs")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1429 (sqrt "fsqrt")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1430
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1431 ;; The SVE immediate constraint to use for an rtl code.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1432 (define_code_attr sve_imm_con [(eq "vsc")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1433 (ne "vsc")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1434 (lt "vsc")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1435 (ge "vsc")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1436 (le "vsc")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1437 (gt "vsc")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1438 (ltu "vsd")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1439 (leu "vsd")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1440 (geu "vsd")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1441 (gtu "vsd")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1442
111
kono
parents:
diff changeset
1443 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
1444 ;; Int Iterators.
kono
parents:
diff changeset
1445 ;; -------------------------------------------------------------------
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1446
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1447 ;; The unspec codes for the SABAL, UABAL AdvancedSIMD instructions.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1448 (define_int_iterator ABAL [UNSPEC_SABAL UNSPEC_UABAL])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1449
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1450 ;; The unspec codes for the SABDL2, UABDL2 AdvancedSIMD instructions.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1451 (define_int_iterator ABDL2 [UNSPEC_SABDL2 UNSPEC_UABDL2])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1452
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1453 ;; The unspec codes for the SADALP, UADALP AdvancedSIMD instructions.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1454 (define_int_iterator ADALP [UNSPEC_SADALP UNSPEC_UADALP])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1455
111
kono
parents:
diff changeset
1456 (define_int_iterator MAXMINV [UNSPEC_UMAXV UNSPEC_UMINV
kono
parents:
diff changeset
1457 UNSPEC_SMAXV UNSPEC_SMINV])
kono
parents:
diff changeset
1458
kono
parents:
diff changeset
1459 (define_int_iterator FMAXMINV [UNSPEC_FMAXV UNSPEC_FMINV
kono
parents:
diff changeset
1460 UNSPEC_FMAXNMV UNSPEC_FMINNMV])
kono
parents:
diff changeset
1461
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1462 (define_int_iterator BITWISEV [UNSPEC_ANDV UNSPEC_IORV UNSPEC_XORV])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1463
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1464 (define_int_iterator LOGICALF [UNSPEC_ANDF UNSPEC_IORF UNSPEC_XORF])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1465
111
kono
parents:
diff changeset
1466 (define_int_iterator HADDSUB [UNSPEC_SHADD UNSPEC_UHADD
kono
parents:
diff changeset
1467 UNSPEC_SRHADD UNSPEC_URHADD
kono
parents:
diff changeset
1468 UNSPEC_SHSUB UNSPEC_UHSUB
kono
parents:
diff changeset
1469 UNSPEC_SRHSUB UNSPEC_URHSUB])
kono
parents:
diff changeset
1470
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1471 (define_int_iterator HADD [UNSPEC_SHADD UNSPEC_UHADD])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1472
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1473 (define_int_iterator RHADD [UNSPEC_SRHADD UNSPEC_URHADD])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1474
111
kono
parents:
diff changeset
1475 (define_int_iterator DOTPROD [UNSPEC_SDOT UNSPEC_UDOT])
kono
parents:
diff changeset
1476
kono
parents:
diff changeset
1477 (define_int_iterator ADDSUBHN [UNSPEC_ADDHN UNSPEC_RADDHN
kono
parents:
diff changeset
1478 UNSPEC_SUBHN UNSPEC_RSUBHN])
kono
parents:
diff changeset
1479
kono
parents:
diff changeset
1480 (define_int_iterator ADDSUBHN2 [UNSPEC_ADDHN2 UNSPEC_RADDHN2
kono
parents:
diff changeset
1481 UNSPEC_SUBHN2 UNSPEC_RSUBHN2])
kono
parents:
diff changeset
1482
kono
parents:
diff changeset
1483 (define_int_iterator FMAXMIN_UNS [UNSPEC_FMAX UNSPEC_FMIN
kono
parents:
diff changeset
1484 UNSPEC_FMAXNM UNSPEC_FMINNM])
kono
parents:
diff changeset
1485
kono
parents:
diff changeset
1486 (define_int_iterator PAUTH_LR_SP [UNSPEC_PACISP UNSPEC_AUTISP])
kono
parents:
diff changeset
1487
kono
parents:
diff changeset
1488 (define_int_iterator PAUTH_17_16 [UNSPEC_PACI1716 UNSPEC_AUTI1716])
kono
parents:
diff changeset
1489
kono
parents:
diff changeset
1490 (define_int_iterator VQDMULH [UNSPEC_SQDMULH UNSPEC_SQRDMULH])
kono
parents:
diff changeset
1491
kono
parents:
diff changeset
1492 (define_int_iterator USSUQADD [UNSPEC_SUQADD UNSPEC_USQADD])
kono
parents:
diff changeset
1493
kono
parents:
diff changeset
1494 (define_int_iterator SUQMOVN [UNSPEC_SQXTN UNSPEC_UQXTN])
kono
parents:
diff changeset
1495
kono
parents:
diff changeset
1496 (define_int_iterator VSHL [UNSPEC_SSHL UNSPEC_USHL
kono
parents:
diff changeset
1497 UNSPEC_SRSHL UNSPEC_URSHL])
kono
parents:
diff changeset
1498
kono
parents:
diff changeset
1499 (define_int_iterator VSHLL [UNSPEC_SSHLL UNSPEC_USHLL])
kono
parents:
diff changeset
1500
kono
parents:
diff changeset
1501 (define_int_iterator VQSHL [UNSPEC_SQSHL UNSPEC_UQSHL
kono
parents:
diff changeset
1502 UNSPEC_SQRSHL UNSPEC_UQRSHL])
kono
parents:
diff changeset
1503
kono
parents:
diff changeset
1504 (define_int_iterator VSRA [UNSPEC_SSRA UNSPEC_USRA
kono
parents:
diff changeset
1505 UNSPEC_SRSRA UNSPEC_URSRA])
kono
parents:
diff changeset
1506
kono
parents:
diff changeset
1507 (define_int_iterator VSLRI [UNSPEC_SSLI UNSPEC_USLI
kono
parents:
diff changeset
1508 UNSPEC_SSRI UNSPEC_USRI])
kono
parents:
diff changeset
1509
kono
parents:
diff changeset
1510
kono
parents:
diff changeset
1511 (define_int_iterator VRSHR_N [UNSPEC_SRSHR UNSPEC_URSHR])
kono
parents:
diff changeset
1512
kono
parents:
diff changeset
1513 (define_int_iterator VQSHL_N [UNSPEC_SQSHLU UNSPEC_SQSHL UNSPEC_UQSHL])
kono
parents:
diff changeset
1514
kono
parents:
diff changeset
1515 (define_int_iterator VQSHRN_N [UNSPEC_SQSHRUN UNSPEC_SQRSHRUN
kono
parents:
diff changeset
1516 UNSPEC_SQSHRN UNSPEC_UQSHRN
kono
parents:
diff changeset
1517 UNSPEC_SQRSHRN UNSPEC_UQRSHRN])
kono
parents:
diff changeset
1518
kono
parents:
diff changeset
1519 (define_int_iterator SQRDMLH_AS [UNSPEC_SQRDMLAH UNSPEC_SQRDMLSH])
kono
parents:
diff changeset
1520
kono
parents:
diff changeset
1521 (define_int_iterator PERMUTE [UNSPEC_ZIP1 UNSPEC_ZIP2
kono
parents:
diff changeset
1522 UNSPEC_TRN1 UNSPEC_TRN2
kono
parents:
diff changeset
1523 UNSPEC_UZP1 UNSPEC_UZP2])
kono
parents:
diff changeset
1524
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1525 (define_int_iterator OPTAB_PERMUTE [UNSPEC_ZIP1 UNSPEC_ZIP2
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1526 UNSPEC_UZP1 UNSPEC_UZP2])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1527
111
kono
parents:
diff changeset
1528 (define_int_iterator REVERSE [UNSPEC_REV64 UNSPEC_REV32 UNSPEC_REV16])
kono
parents:
diff changeset
1529
kono
parents:
diff changeset
1530 (define_int_iterator FRINT [UNSPEC_FRINTZ UNSPEC_FRINTP UNSPEC_FRINTM
kono
parents:
diff changeset
1531 UNSPEC_FRINTN UNSPEC_FRINTI UNSPEC_FRINTX
kono
parents:
diff changeset
1532 UNSPEC_FRINTA])
kono
parents:
diff changeset
1533
kono
parents:
diff changeset
1534 (define_int_iterator FCVT [UNSPEC_FRINTZ UNSPEC_FRINTP UNSPEC_FRINTM
kono
parents:
diff changeset
1535 UNSPEC_FRINTA UNSPEC_FRINTN])
kono
parents:
diff changeset
1536
kono
parents:
diff changeset
1537 (define_int_iterator FCVT_F2FIXED [UNSPEC_FCVTZS UNSPEC_FCVTZU])
kono
parents:
diff changeset
1538 (define_int_iterator FCVT_FIXED2F [UNSPEC_SCVTF UNSPEC_UCVTF])
kono
parents:
diff changeset
1539
kono
parents:
diff changeset
1540 (define_int_iterator CRC [UNSPEC_CRC32B UNSPEC_CRC32H UNSPEC_CRC32W
kono
parents:
diff changeset
1541 UNSPEC_CRC32X UNSPEC_CRC32CB UNSPEC_CRC32CH
kono
parents:
diff changeset
1542 UNSPEC_CRC32CW UNSPEC_CRC32CX])
kono
parents:
diff changeset
1543
kono
parents:
diff changeset
1544 (define_int_iterator CRYPTO_AES [UNSPEC_AESE UNSPEC_AESD])
kono
parents:
diff changeset
1545 (define_int_iterator CRYPTO_AESMC [UNSPEC_AESMC UNSPEC_AESIMC])
kono
parents:
diff changeset
1546
kono
parents:
diff changeset
1547 (define_int_iterator CRYPTO_SHA1 [UNSPEC_SHA1C UNSPEC_SHA1M UNSPEC_SHA1P])
kono
parents:
diff changeset
1548
kono
parents:
diff changeset
1549 (define_int_iterator CRYPTO_SHA256 [UNSPEC_SHA256H UNSPEC_SHA256H2])
kono
parents:
diff changeset
1550
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1551 (define_int_iterator CRYPTO_SHA512 [UNSPEC_SHA512H UNSPEC_SHA512H2])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1552
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1553 (define_int_iterator CRYPTO_SM3TT [UNSPEC_SM3TT1A UNSPEC_SM3TT1B
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1554 UNSPEC_SM3TT2A UNSPEC_SM3TT2B])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1555
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1556 (define_int_iterator CRYPTO_SM3PART [UNSPEC_SM3PARTW1 UNSPEC_SM3PARTW2])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1557
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1558 ;; Iterators for fp16 operations
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1559
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1560 (define_int_iterator VFMLA16_LOW [UNSPEC_FMLAL UNSPEC_FMLSL])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1561
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1562 (define_int_iterator VFMLA16_HIGH [UNSPEC_FMLAL2 UNSPEC_FMLSL2])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1563
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1564 (define_int_iterator UNPACK [UNSPEC_UNPACKSHI UNSPEC_UNPACKUHI
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1565 UNSPEC_UNPACKSLO UNSPEC_UNPACKULO])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1566
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1567 (define_int_iterator UNPACK_UNSIGNED [UNSPEC_UNPACKULO UNSPEC_UNPACKUHI])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1568
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1569 (define_int_iterator MUL_HIGHPART [UNSPEC_SMUL_HIGHPART UNSPEC_UMUL_HIGHPART])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1570
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1571 (define_int_iterator SVE_COND_FP_BINARY [UNSPEC_COND_ADD UNSPEC_COND_SUB
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1572 UNSPEC_COND_MUL UNSPEC_COND_DIV
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1573 UNSPEC_COND_MAX UNSPEC_COND_MIN])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1574
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1575 (define_int_iterator SVE_COND_FP_TERNARY [UNSPEC_COND_FMLA
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1576 UNSPEC_COND_FMLS
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1577 UNSPEC_COND_FNMLA
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1578 UNSPEC_COND_FNMLS])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1579
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1580 (define_int_iterator SVE_COND_FP_CMP [UNSPEC_COND_LT UNSPEC_COND_LE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1581 UNSPEC_COND_EQ UNSPEC_COND_NE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1582 UNSPEC_COND_GE UNSPEC_COND_GT])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1583
111
kono
parents:
diff changeset
1584 ;; Iterators for atomic operations.
kono
parents:
diff changeset
1585
kono
parents:
diff changeset
1586 (define_int_iterator ATOMIC_LDOP
kono
parents:
diff changeset
1587 [UNSPECV_ATOMIC_LDOP_OR UNSPECV_ATOMIC_LDOP_BIC
kono
parents:
diff changeset
1588 UNSPECV_ATOMIC_LDOP_XOR UNSPECV_ATOMIC_LDOP_PLUS])
kono
parents:
diff changeset
1589
kono
parents:
diff changeset
1590 (define_int_attr atomic_ldop
kono
parents:
diff changeset
1591 [(UNSPECV_ATOMIC_LDOP_OR "set") (UNSPECV_ATOMIC_LDOP_BIC "clr")
kono
parents:
diff changeset
1592 (UNSPECV_ATOMIC_LDOP_XOR "eor") (UNSPECV_ATOMIC_LDOP_PLUS "add")])
kono
parents:
diff changeset
1593
kono
parents:
diff changeset
1594 ;; -------------------------------------------------------------------
kono
parents:
diff changeset
1595 ;; Int Iterators Attributes.
kono
parents:
diff changeset
1596 ;; -------------------------------------------------------------------
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1597
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1598 ;; The optab associated with an operation. Note that for ANDF, IORF
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1599 ;; and XORF, the optab pattern is not actually defined; we just use this
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1600 ;; name for consistency with the integer patterns.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1601 (define_int_attr optab [(UNSPEC_ANDF "and")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1602 (UNSPEC_IORF "ior")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1603 (UNSPEC_XORF "xor")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1604 (UNSPEC_ANDV "and")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1605 (UNSPEC_IORV "ior")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1606 (UNSPEC_XORV "xor")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1607 (UNSPEC_COND_ADD "add")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1608 (UNSPEC_COND_SUB "sub")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1609 (UNSPEC_COND_MUL "mul")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1610 (UNSPEC_COND_DIV "div")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1611 (UNSPEC_COND_MAX "smax")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1612 (UNSPEC_COND_MIN "smin")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1613 (UNSPEC_COND_FMLA "fma")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1614 (UNSPEC_COND_FMLS "fnma")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1615 (UNSPEC_COND_FNMLA "fnms")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1616 (UNSPEC_COND_FNMLS "fms")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1617
111
kono
parents:
diff changeset
1618 (define_int_attr maxmin_uns [(UNSPEC_UMAXV "umax")
kono
parents:
diff changeset
1619 (UNSPEC_UMINV "umin")
kono
parents:
diff changeset
1620 (UNSPEC_SMAXV "smax")
kono
parents:
diff changeset
1621 (UNSPEC_SMINV "smin")
kono
parents:
diff changeset
1622 (UNSPEC_FMAX "smax_nan")
kono
parents:
diff changeset
1623 (UNSPEC_FMAXNMV "smax")
kono
parents:
diff changeset
1624 (UNSPEC_FMAXV "smax_nan")
kono
parents:
diff changeset
1625 (UNSPEC_FMIN "smin_nan")
kono
parents:
diff changeset
1626 (UNSPEC_FMINNMV "smin")
kono
parents:
diff changeset
1627 (UNSPEC_FMINV "smin_nan")
kono
parents:
diff changeset
1628 (UNSPEC_FMAXNM "fmax")
kono
parents:
diff changeset
1629 (UNSPEC_FMINNM "fmin")])
kono
parents:
diff changeset
1630
kono
parents:
diff changeset
1631 (define_int_attr maxmin_uns_op [(UNSPEC_UMAXV "umax")
kono
parents:
diff changeset
1632 (UNSPEC_UMINV "umin")
kono
parents:
diff changeset
1633 (UNSPEC_SMAXV "smax")
kono
parents:
diff changeset
1634 (UNSPEC_SMINV "smin")
kono
parents:
diff changeset
1635 (UNSPEC_FMAX "fmax")
kono
parents:
diff changeset
1636 (UNSPEC_FMAXNMV "fmaxnm")
kono
parents:
diff changeset
1637 (UNSPEC_FMAXV "fmax")
kono
parents:
diff changeset
1638 (UNSPEC_FMIN "fmin")
kono
parents:
diff changeset
1639 (UNSPEC_FMINNMV "fminnm")
kono
parents:
diff changeset
1640 (UNSPEC_FMINV "fmin")
kono
parents:
diff changeset
1641 (UNSPEC_FMAXNM "fmaxnm")
kono
parents:
diff changeset
1642 (UNSPEC_FMINNM "fminnm")])
kono
parents:
diff changeset
1643
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1644 (define_int_attr bit_reduc_op [(UNSPEC_ANDV "andv")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1645 (UNSPEC_IORV "orv")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1646 (UNSPEC_XORV "eorv")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1647
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1648 ;; The SVE logical instruction that implements an unspec.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1649 (define_int_attr logicalf_op [(UNSPEC_ANDF "and")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1650 (UNSPEC_IORF "orr")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1651 (UNSPEC_XORF "eor")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1652
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1653 ;; "s" for signed operations and "u" for unsigned ones.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1654 (define_int_attr su [(UNSPEC_UNPACKSHI "s")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1655 (UNSPEC_UNPACKUHI "u")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1656 (UNSPEC_UNPACKSLO "s")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1657 (UNSPEC_UNPACKULO "u")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1658 (UNSPEC_SMUL_HIGHPART "s")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1659 (UNSPEC_UMUL_HIGHPART "u")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1660
111
kono
parents:
diff changeset
1661 (define_int_attr sur [(UNSPEC_SHADD "s") (UNSPEC_UHADD "u")
kono
parents:
diff changeset
1662 (UNSPEC_SRHADD "sr") (UNSPEC_URHADD "ur")
kono
parents:
diff changeset
1663 (UNSPEC_SHSUB "s") (UNSPEC_UHSUB "u")
kono
parents:
diff changeset
1664 (UNSPEC_SRHSUB "sr") (UNSPEC_URHSUB "ur")
kono
parents:
diff changeset
1665 (UNSPEC_ADDHN "") (UNSPEC_RADDHN "r")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1666 (UNSPEC_SABAL "s") (UNSPEC_UABAL "u")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1667 (UNSPEC_SABDL2 "s") (UNSPEC_UABDL2 "u")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1668 (UNSPEC_SADALP "s") (UNSPEC_UADALP "u")
111
kono
parents:
diff changeset
1669 (UNSPEC_SUBHN "") (UNSPEC_RSUBHN "r")
kono
parents:
diff changeset
1670 (UNSPEC_ADDHN2 "") (UNSPEC_RADDHN2 "r")
kono
parents:
diff changeset
1671 (UNSPEC_SUBHN2 "") (UNSPEC_RSUBHN2 "r")
kono
parents:
diff changeset
1672 (UNSPEC_SQXTN "s") (UNSPEC_UQXTN "u")
kono
parents:
diff changeset
1673 (UNSPEC_USQADD "us") (UNSPEC_SUQADD "su")
kono
parents:
diff changeset
1674 (UNSPEC_SSLI "s") (UNSPEC_USLI "u")
kono
parents:
diff changeset
1675 (UNSPEC_SSRI "s") (UNSPEC_USRI "u")
kono
parents:
diff changeset
1676 (UNSPEC_USRA "u") (UNSPEC_SSRA "s")
kono
parents:
diff changeset
1677 (UNSPEC_URSRA "ur") (UNSPEC_SRSRA "sr")
kono
parents:
diff changeset
1678 (UNSPEC_URSHR "ur") (UNSPEC_SRSHR "sr")
kono
parents:
diff changeset
1679 (UNSPEC_SQSHLU "s") (UNSPEC_SQSHL "s")
kono
parents:
diff changeset
1680 (UNSPEC_UQSHL "u")
kono
parents:
diff changeset
1681 (UNSPEC_SQSHRUN "s") (UNSPEC_SQRSHRUN "s")
kono
parents:
diff changeset
1682 (UNSPEC_SQSHRN "s") (UNSPEC_UQSHRN "u")
kono
parents:
diff changeset
1683 (UNSPEC_SQRSHRN "s") (UNSPEC_UQRSHRN "u")
kono
parents:
diff changeset
1684 (UNSPEC_USHL "u") (UNSPEC_SSHL "s")
kono
parents:
diff changeset
1685 (UNSPEC_USHLL "u") (UNSPEC_SSHLL "s")
kono
parents:
diff changeset
1686 (UNSPEC_URSHL "ur") (UNSPEC_SRSHL "sr")
kono
parents:
diff changeset
1687 (UNSPEC_UQRSHL "u") (UNSPEC_SQRSHL "s")
kono
parents:
diff changeset
1688 (UNSPEC_SDOT "s") (UNSPEC_UDOT "u")
kono
parents:
diff changeset
1689 ])
kono
parents:
diff changeset
1690
kono
parents:
diff changeset
1691 (define_int_attr r [(UNSPEC_SQDMULH "") (UNSPEC_SQRDMULH "r")
kono
parents:
diff changeset
1692 (UNSPEC_SQSHRUN "") (UNSPEC_SQRSHRUN "r")
kono
parents:
diff changeset
1693 (UNSPEC_SQSHRN "") (UNSPEC_UQSHRN "")
kono
parents:
diff changeset
1694 (UNSPEC_SQRSHRN "r") (UNSPEC_UQRSHRN "r")
kono
parents:
diff changeset
1695 (UNSPEC_SQSHL "") (UNSPEC_UQSHL "")
kono
parents:
diff changeset
1696 (UNSPEC_SQRSHL "r")(UNSPEC_UQRSHL "r")
kono
parents:
diff changeset
1697 ])
kono
parents:
diff changeset
1698
kono
parents:
diff changeset
1699 (define_int_attr lr [(UNSPEC_SSLI "l") (UNSPEC_USLI "l")
kono
parents:
diff changeset
1700 (UNSPEC_SSRI "r") (UNSPEC_USRI "r")])
kono
parents:
diff changeset
1701
kono
parents:
diff changeset
1702 (define_int_attr u [(UNSPEC_SQSHLU "u") (UNSPEC_SQSHL "") (UNSPEC_UQSHL "")
kono
parents:
diff changeset
1703 (UNSPEC_SQSHRUN "u") (UNSPEC_SQRSHRUN "u")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1704 (UNSPEC_SQSHRN "") (UNSPEC_UQSHRN "")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1705 (UNSPEC_SQRSHRN "") (UNSPEC_UQRSHRN "")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1706 (UNSPEC_SHADD "") (UNSPEC_UHADD "u")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1707 (UNSPEC_SRHADD "") (UNSPEC_URHADD "u")])
111
kono
parents:
diff changeset
1708
kono
parents:
diff changeset
1709 (define_int_attr addsub [(UNSPEC_SHADD "add")
kono
parents:
diff changeset
1710 (UNSPEC_UHADD "add")
kono
parents:
diff changeset
1711 (UNSPEC_SRHADD "add")
kono
parents:
diff changeset
1712 (UNSPEC_URHADD "add")
kono
parents:
diff changeset
1713 (UNSPEC_SHSUB "sub")
kono
parents:
diff changeset
1714 (UNSPEC_UHSUB "sub")
kono
parents:
diff changeset
1715 (UNSPEC_SRHSUB "sub")
kono
parents:
diff changeset
1716 (UNSPEC_URHSUB "sub")
kono
parents:
diff changeset
1717 (UNSPEC_ADDHN "add")
kono
parents:
diff changeset
1718 (UNSPEC_SUBHN "sub")
kono
parents:
diff changeset
1719 (UNSPEC_RADDHN "add")
kono
parents:
diff changeset
1720 (UNSPEC_RSUBHN "sub")
kono
parents:
diff changeset
1721 (UNSPEC_ADDHN2 "add")
kono
parents:
diff changeset
1722 (UNSPEC_SUBHN2 "sub")
kono
parents:
diff changeset
1723 (UNSPEC_RADDHN2 "add")
kono
parents:
diff changeset
1724 (UNSPEC_RSUBHN2 "sub")])
kono
parents:
diff changeset
1725
kono
parents:
diff changeset
1726 (define_int_attr offsetlr [(UNSPEC_SSLI "") (UNSPEC_USLI "")
kono
parents:
diff changeset
1727 (UNSPEC_SSRI "offset_")
kono
parents:
diff changeset
1728 (UNSPEC_USRI "offset_")])
kono
parents:
diff changeset
1729
kono
parents:
diff changeset
1730 ;; Standard pattern names for floating-point rounding instructions.
kono
parents:
diff changeset
1731 (define_int_attr frint_pattern [(UNSPEC_FRINTZ "btrunc")
kono
parents:
diff changeset
1732 (UNSPEC_FRINTP "ceil")
kono
parents:
diff changeset
1733 (UNSPEC_FRINTM "floor")
kono
parents:
diff changeset
1734 (UNSPEC_FRINTI "nearbyint")
kono
parents:
diff changeset
1735 (UNSPEC_FRINTX "rint")
kono
parents:
diff changeset
1736 (UNSPEC_FRINTA "round")
kono
parents:
diff changeset
1737 (UNSPEC_FRINTN "frintn")])
kono
parents:
diff changeset
1738
kono
parents:
diff changeset
1739 ;; frint suffix for floating-point rounding instructions.
kono
parents:
diff changeset
1740 (define_int_attr frint_suffix [(UNSPEC_FRINTZ "z") (UNSPEC_FRINTP "p")
kono
parents:
diff changeset
1741 (UNSPEC_FRINTM "m") (UNSPEC_FRINTI "i")
kono
parents:
diff changeset
1742 (UNSPEC_FRINTX "x") (UNSPEC_FRINTA "a")
kono
parents:
diff changeset
1743 (UNSPEC_FRINTN "n")])
kono
parents:
diff changeset
1744
kono
parents:
diff changeset
1745 (define_int_attr fcvt_pattern [(UNSPEC_FRINTZ "btrunc") (UNSPEC_FRINTA "round")
kono
parents:
diff changeset
1746 (UNSPEC_FRINTP "ceil") (UNSPEC_FRINTM "floor")
kono
parents:
diff changeset
1747 (UNSPEC_FRINTN "frintn")])
kono
parents:
diff changeset
1748
kono
parents:
diff changeset
1749 (define_int_attr fcvt_fixed_insn [(UNSPEC_SCVTF "scvtf")
kono
parents:
diff changeset
1750 (UNSPEC_UCVTF "ucvtf")
kono
parents:
diff changeset
1751 (UNSPEC_FCVTZS "fcvtzs")
kono
parents:
diff changeset
1752 (UNSPEC_FCVTZU "fcvtzu")])
kono
parents:
diff changeset
1753
kono
parents:
diff changeset
1754 ;; Pointer authentication mnemonic prefix.
kono
parents:
diff changeset
1755 (define_int_attr pauth_mnem_prefix [(UNSPEC_PACISP "paci")
kono
parents:
diff changeset
1756 (UNSPEC_AUTISP "auti")
kono
parents:
diff changeset
1757 (UNSPEC_PACI1716 "paci")
kono
parents:
diff changeset
1758 (UNSPEC_AUTI1716 "auti")])
kono
parents:
diff changeset
1759
kono
parents:
diff changeset
1760 ;; Pointer authentication HINT number for NOP space instructions using A Key.
kono
parents:
diff changeset
1761 (define_int_attr pauth_hint_num_a [(UNSPEC_PACISP "25")
kono
parents:
diff changeset
1762 (UNSPEC_AUTISP "29")
kono
parents:
diff changeset
1763 (UNSPEC_PACI1716 "8")
kono
parents:
diff changeset
1764 (UNSPEC_AUTI1716 "12")])
kono
parents:
diff changeset
1765
kono
parents:
diff changeset
1766 (define_int_attr perm_insn [(UNSPEC_ZIP1 "zip") (UNSPEC_ZIP2 "zip")
kono
parents:
diff changeset
1767 (UNSPEC_TRN1 "trn") (UNSPEC_TRN2 "trn")
kono
parents:
diff changeset
1768 (UNSPEC_UZP1 "uzp") (UNSPEC_UZP2 "uzp")])
kono
parents:
diff changeset
1769
kono
parents:
diff changeset
1770 ; op code for REV instructions (size within which elements are reversed).
kono
parents:
diff changeset
1771 (define_int_attr rev_op [(UNSPEC_REV64 "64") (UNSPEC_REV32 "32")
kono
parents:
diff changeset
1772 (UNSPEC_REV16 "16")])
kono
parents:
diff changeset
1773
kono
parents:
diff changeset
1774 (define_int_attr perm_hilo [(UNSPEC_ZIP1 "1") (UNSPEC_ZIP2 "2")
kono
parents:
diff changeset
1775 (UNSPEC_TRN1 "1") (UNSPEC_TRN2 "2")
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1776 (UNSPEC_UZP1 "1") (UNSPEC_UZP2 "2")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1777 (UNSPEC_UNPACKSHI "hi") (UNSPEC_UNPACKUHI "hi")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1778 (UNSPEC_UNPACKSLO "lo") (UNSPEC_UNPACKULO "lo")])
111
kono
parents:
diff changeset
1779
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1780 ;; Return true if the associated optab refers to the high-numbered lanes,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1781 ;; false if it refers to the low-numbered lanes. The convention is for
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1782 ;; "hi" to refer to the low-numbered lanes (the first ones in memory)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1783 ;; for big-endian.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1784 (define_int_attr hi_lanes_optab [(UNSPEC_UNPACKSHI "!BYTES_BIG_ENDIAN")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1785 (UNSPEC_UNPACKUHI "!BYTES_BIG_ENDIAN")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1786 (UNSPEC_UNPACKSLO "BYTES_BIG_ENDIAN")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1787 (UNSPEC_UNPACKULO "BYTES_BIG_ENDIAN")])
111
kono
parents:
diff changeset
1788
kono
parents:
diff changeset
1789 (define_int_attr crc_variant [(UNSPEC_CRC32B "crc32b") (UNSPEC_CRC32H "crc32h")
kono
parents:
diff changeset
1790 (UNSPEC_CRC32W "crc32w") (UNSPEC_CRC32X "crc32x")
kono
parents:
diff changeset
1791 (UNSPEC_CRC32CB "crc32cb") (UNSPEC_CRC32CH "crc32ch")
kono
parents:
diff changeset
1792 (UNSPEC_CRC32CW "crc32cw") (UNSPEC_CRC32CX "crc32cx")])
kono
parents:
diff changeset
1793
kono
parents:
diff changeset
1794 (define_int_attr crc_mode [(UNSPEC_CRC32B "QI") (UNSPEC_CRC32H "HI")
kono
parents:
diff changeset
1795 (UNSPEC_CRC32W "SI") (UNSPEC_CRC32X "DI")
kono
parents:
diff changeset
1796 (UNSPEC_CRC32CB "QI") (UNSPEC_CRC32CH "HI")
kono
parents:
diff changeset
1797 (UNSPEC_CRC32CW "SI") (UNSPEC_CRC32CX "DI")])
kono
parents:
diff changeset
1798
kono
parents:
diff changeset
1799 (define_int_attr aes_op [(UNSPEC_AESE "e") (UNSPEC_AESD "d")])
kono
parents:
diff changeset
1800 (define_int_attr aesmc_op [(UNSPEC_AESMC "mc") (UNSPEC_AESIMC "imc")])
kono
parents:
diff changeset
1801
kono
parents:
diff changeset
1802 (define_int_attr sha1_op [(UNSPEC_SHA1C "c") (UNSPEC_SHA1P "p")
kono
parents:
diff changeset
1803 (UNSPEC_SHA1M "m")])
kono
parents:
diff changeset
1804
kono
parents:
diff changeset
1805 (define_int_attr sha256_op [(UNSPEC_SHA256H "") (UNSPEC_SHA256H2 "2")])
kono
parents:
diff changeset
1806
kono
parents:
diff changeset
1807 (define_int_attr rdma_as [(UNSPEC_SQRDMLAH "a") (UNSPEC_SQRDMLSH "s")])
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1808
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1809 (define_int_attr sha512_op [(UNSPEC_SHA512H "") (UNSPEC_SHA512H2 "2")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1810
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1811 (define_int_attr sm3tt_op [(UNSPEC_SM3TT1A "1a") (UNSPEC_SM3TT1B "1b")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1812 (UNSPEC_SM3TT2A "2a") (UNSPEC_SM3TT2B "2b")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1813
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1814 (define_int_attr sm3part_op [(UNSPEC_SM3PARTW1 "1") (UNSPEC_SM3PARTW2 "2")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1815
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1816 (define_int_attr f16mac1 [(UNSPEC_FMLAL "a") (UNSPEC_FMLSL "s")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1817 (UNSPEC_FMLAL2 "a") (UNSPEC_FMLSL2 "s")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1818
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1819 ;; The condition associated with an UNSPEC_COND_<xx>.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1820 (define_int_attr cmp_op [(UNSPEC_COND_LT "lt")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1821 (UNSPEC_COND_LE "le")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1822 (UNSPEC_COND_EQ "eq")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1823 (UNSPEC_COND_NE "ne")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1824 (UNSPEC_COND_GE "ge")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1825 (UNSPEC_COND_GT "gt")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1826
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1827 (define_int_attr sve_fp_op [(UNSPEC_COND_ADD "fadd")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1828 (UNSPEC_COND_SUB "fsub")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1829 (UNSPEC_COND_MUL "fmul")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1830 (UNSPEC_COND_DIV "fdiv")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1831 (UNSPEC_COND_MAX "fmaxnm")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1832 (UNSPEC_COND_MIN "fminnm")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1833
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1834 (define_int_attr sve_fp_op_rev [(UNSPEC_COND_ADD "fadd")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1835 (UNSPEC_COND_SUB "fsubr")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1836 (UNSPEC_COND_MUL "fmul")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1837 (UNSPEC_COND_DIV "fdivr")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1838 (UNSPEC_COND_MAX "fmaxnm")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1839 (UNSPEC_COND_MIN "fminnm")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1840
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1841 (define_int_attr sve_fmla_op [(UNSPEC_COND_FMLA "fmla")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1842 (UNSPEC_COND_FMLS "fmls")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1843 (UNSPEC_COND_FNMLA "fnmla")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1844 (UNSPEC_COND_FNMLS "fnmls")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1845
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1846 (define_int_attr sve_fmad_op [(UNSPEC_COND_FMLA "fmad")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1847 (UNSPEC_COND_FMLS "fmsb")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1848 (UNSPEC_COND_FNMLA "fnmad")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1849 (UNSPEC_COND_FNMLS "fnmsb")])
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1850
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1851 (define_int_attr commutative [(UNSPEC_COND_ADD "true")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1852 (UNSPEC_COND_SUB "false")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1853 (UNSPEC_COND_MUL "true")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1854 (UNSPEC_COND_DIV "false")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1855 (UNSPEC_COND_MIN "true")
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1856 (UNSPEC_COND_MAX "true")])