[arm] Implement usadv16qi and ssadv16qi standard names
[gcc.git] / gcc / config / arm / unspecs.md
1 ;; Unspec defintions.
2 ;; Copyright (C) 2012-2019 Free Software Foundation, Inc.
3 ;; Contributed by ARM Ltd.
4
5 ;; This file is part of GCC.
6
7 ;; GCC is free software; you can redistribute it and/or modify it
8 ;; under the terms of the GNU General Public License as published
9 ;; by the Free Software Foundation; either version 3, or (at your
10 ;; option) any later version.
11
12 ;; GCC is distributed in the hope that it will be useful, but WITHOUT
13 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 ;; License for more details.
16
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with GCC; see the file COPYING3. If not see
19 ;; <http://www.gnu.org/licenses/>.
20
21 ;; UNSPEC Usage:
22 ;; Note: sin and cos are no-longer used.
23 ;; Unspec enumerators for Neon are defined in neon.md.
24 ;; Unspec enumerators for iwmmxt2 are defined in iwmmxt2.md
25
26 (define_c_enum "unspec" [
27 UNSPEC_PUSH_MULT ; `push multiple' operation:
28 ; operand 0 is the first register,
29 ; subsequent registers are in parallel (use ...)
30 ; expressions.
31 UNSPEC_PIC_SYM ; A symbol that has been treated properly for pic
32 ; usage, that is, we will add the pic_register
33 ; value to it before trying to dereference it.
34 UNSPEC_PIC_BASE ; Add PC and all but the last operand together,
35 ; The last operand is the number of a PIC_LABEL
36 ; that points at the containing instruction.
37 UNSPEC_PRLG_STK ; A special barrier that prevents frame accesses
38 ; being scheduled before the stack adjustment insn.
39 UNSPEC_REGISTER_USE ; As USE insns are not meaningful after reload,
40 ; this unspec is used to prevent the deletion of
41 ; instructions setting registers for EH handling
42 ; and stack frame generation. Operand 0 is the
43 ; register to "use".
44 UNSPEC_CHECK_ARCH ; Set CCs to indicate 26-bit or 32-bit mode.
45 UNSPEC_WSHUFH ; Used by the intrinsic form of the iWMMXt WSHUFH instruction.
46 UNSPEC_WACC ; Used by the intrinsic form of the iWMMXt WACC instruction.
47 UNSPEC_TMOVMSK ; Used by the intrinsic form of the iWMMXt TMOVMSK instruction.
48 UNSPEC_WSAD ; Used by the intrinsic form of the iWMMXt WSAD instruction.
49 UNSPEC_WSADZ ; Used by the intrinsic form of the iWMMXt WSADZ instruction.
50 UNSPEC_WMACS ; Used by the intrinsic form of the iWMMXt WMACS instruction.
51 UNSPEC_WMACU ; Used by the intrinsic form of the iWMMXt WMACU instruction.
52 UNSPEC_WMACSZ ; Used by the intrinsic form of the iWMMXt WMACSZ instruction.
53 UNSPEC_WMACUZ ; Used by the intrinsic form of the iWMMXt WMACUZ instruction.
54 UNSPEC_CLRDI ; Used by the intrinsic form of the iWMMXt CLRDI instruction.
55 UNSPEC_WALIGNI ; Used by the intrinsic form of the iWMMXt WALIGN instruction.
56 UNSPEC_TLS ; A symbol that has been treated properly for TLS usage.
57 UNSPEC_PIC_LABEL ; A label used for PIC access that does not appear in the
58 ; instruction stream.
59 UNSPEC_PIC_OFFSET ; A symbolic 12-bit OFFSET that has been treated
60 ; correctly for PIC usage.
61 UNSPEC_GOTSYM_OFF ; The offset of the start of the GOT from a
62 ; a given symbolic address.
63 UNSPEC_THUMB1_CASESI ; A Thumb1 compressed dispatch-table call.
64 UNSPEC_RBIT ; rbit operation.
65 UNSPEC_SYMBOL_OFFSET ; The offset of the start of the symbol from
66 ; another symbolic address.
67 UNSPEC_MEMORY_BARRIER ; Represent a memory barrier.
68 UNSPEC_UNALIGNED_LOAD ; Used to represent ldr/ldrh instructions that access
69 ; unaligned locations, on architectures which support
70 ; that.
71 UNSPEC_UNALIGNED_STORE ; Same for str/strh.
72 UNSPEC_PIC_UNIFIED ; Create a common pic addressing form.
73 UNSPEC_LL ; Represent an unpaired load-register-exclusive.
74 UNSPEC_VRINTZ ; Represent a float to integral float rounding
75 ; towards zero.
76 UNSPEC_VRINTP ; Represent a float to integral float rounding
77 ; towards +Inf.
78 UNSPEC_VRINTM ; Represent a float to integral float rounding
79 ; towards -Inf.
80 UNSPEC_VRINTR ; Represent a float to integral float rounding
81 ; FPSCR rounding mode.
82 UNSPEC_VRINTX ; Represent a float to integral float rounding
83 ; FPSCR rounding mode and signal inexactness.
84 UNSPEC_VRINTA ; Represent a float to integral float rounding
85 ; towards nearest, ties away from zero.
86 UNSPEC_PROBE_STACK ; Probe stack memory reference
87 UNSPEC_NONSECURE_MEM ; Represent non-secure memory in ARMv8-M with
88 ; security extension
89 UNSPEC_SP_SET ; Represent the setting of stack protector's canary
90 UNSPEC_SP_TEST ; Represent the testing of stack protector's canary
91 ; against the guard.
92 ])
93
94 (define_c_enum "unspec" [
95 UNSPEC_WADDC ; Used by the intrinsic form of the iWMMXt WADDC instruction.
96 UNSPEC_WABS ; Used by the intrinsic form of the iWMMXt WABS instruction.
97 UNSPEC_WQMULWMR ; Used by the intrinsic form of the iWMMXt WQMULWMR instruction.
98 UNSPEC_WQMULMR ; Used by the intrinsic form of the iWMMXt WQMULMR instruction.
99 UNSPEC_WQMULWM ; Used by the intrinsic form of the iWMMXt WQMULWM instruction.
100 UNSPEC_WQMULM ; Used by the intrinsic form of the iWMMXt WQMULM instruction.
101 UNSPEC_WQMIAxyn ; Used by the intrinsic form of the iWMMXt WMIAxyn instruction.
102 UNSPEC_WQMIAxy ; Used by the intrinsic form of the iWMMXt WMIAxy instruction.
103 UNSPEC_TANDC ; Used by the intrinsic form of the iWMMXt TANDC instruction.
104 UNSPEC_TORC ; Used by the intrinsic form of the iWMMXt TORC instruction.
105 UNSPEC_TORVSC ; Used by the intrinsic form of the iWMMXt TORVSC instruction.
106 UNSPEC_TEXTRC ; Used by the intrinsic form of the iWMMXt TEXTRC instruction.
107 ])
108
109
110 ;; UNSPEC_VOLATILE Usage:
111
112 (define_c_enum "unspecv" [
113 VUNSPEC_BLOCKAGE ; `blockage' insn to prevent scheduling across an
114 ; insn in the code.
115 VUNSPEC_EPILOGUE ; `epilogue' insn, used to represent any part of the
116 ; instruction epilogue sequence that isn't expanded
117 ; into normal RTL. Used for both normal and sibcall
118 ; epilogues.
119 VUNSPEC_THUMB1_INTERWORK ; `prologue_thumb1_interwork' insn, used to swap
120 ; modes from arm to thumb.
121 VUNSPEC_ALIGN ; `align' insn. Used at the head of a minipool table
122 ; for inlined constants.
123 VUNSPEC_POOL_END ; `end-of-table'. Used to mark the end of a minipool
124 ; table.
125 VUNSPEC_POOL_1 ; `pool-entry(1)'. An entry in the constant pool for
126 ; an 8-bit object.
127 VUNSPEC_POOL_2 ; `pool-entry(2)'. An entry in the constant pool for
128 ; a 16-bit object.
129 VUNSPEC_POOL_4 ; `pool-entry(4)'. An entry in the constant pool for
130 ; a 32-bit object.
131 VUNSPEC_POOL_8 ; `pool-entry(8)'. An entry in the constant pool for
132 ; a 64-bit object.
133 VUNSPEC_POOL_16 ; `pool-entry(16)'. An entry in the constant pool for
134 ; a 128-bit object.
135 VUNSPEC_TMRC ; Used by the iWMMXt TMRC instruction.
136 VUNSPEC_TMCR ; Used by the iWMMXt TMCR instruction.
137 VUNSPEC_ALIGN8 ; 8-byte alignment version of VUNSPEC_ALIGN
138 VUNSPEC_WCMP_EQ ; Used by the iWMMXt WCMPEQ instructions
139 VUNSPEC_WCMP_GTU ; Used by the iWMMXt WCMPGTU instructions
140 VUNSPEC_WCMP_GT ; Used by the iwMMXT WCMPGT instructions
141 VUNSPEC_EH_RETURN ; Use to override the return address for exception
142 ; handling.
143 VUNSPEC_ATOMIC_CAS ; Represent an atomic compare swap.
144 VUNSPEC_ATOMIC_XCHG ; Represent an atomic exchange.
145 VUNSPEC_ATOMIC_OP ; Represent an atomic operation.
146 VUNSPEC_LL ; Represent a load-register-exclusive.
147 VUNSPEC_LDRD_ATOMIC ; Represent an LDRD used as an atomic DImode load.
148 VUNSPEC_SC ; Represent a store-register-exclusive.
149 VUNSPEC_LAX ; Represent a load-register-acquire-exclusive.
150 VUNSPEC_SLX ; Represent a store-register-release-exclusive.
151 VUNSPEC_LDA ; Represent a store-register-acquire.
152 VUNSPEC_STL ; Represent a store-register-release.
153 VUNSPEC_GET_FPSCR ; Represent fetch of FPSCR content.
154 VUNSPEC_SET_FPSCR ; Represent assign of FPSCR content.
155 VUNSPEC_PROBE_STACK_RANGE ; Represent stack range probing.
156 VUNSPEC_CDP ; Represent the coprocessor cdp instruction.
157 VUNSPEC_CDP2 ; Represent the coprocessor cdp2 instruction.
158 VUNSPEC_LDC ; Represent the coprocessor ldc instruction.
159 VUNSPEC_LDC2 ; Represent the coprocessor ldc2 instruction.
160 VUNSPEC_LDCL ; Represent the coprocessor ldcl instruction.
161 VUNSPEC_LDC2L ; Represent the coprocessor ldc2l instruction.
162 VUNSPEC_STC ; Represent the coprocessor stc instruction.
163 VUNSPEC_STC2 ; Represent the coprocessor stc2 instruction.
164 VUNSPEC_STCL ; Represent the coprocessor stcl instruction.
165 VUNSPEC_STC2L ; Represent the coprocessor stc2l instruction.
166 VUNSPEC_MCR ; Represent the coprocessor mcr instruction.
167 VUNSPEC_MCR2 ; Represent the coprocessor mcr2 instruction.
168 VUNSPEC_MRC ; Represent the coprocessor mrc instruction.
169 VUNSPEC_MRC2 ; Represent the coprocessor mrc2 instruction.
170 VUNSPEC_MCRR ; Represent the coprocessor mcrr instruction.
171 VUNSPEC_MCRR2 ; Represent the coprocessor mcrr2 instruction.
172 VUNSPEC_MRRC ; Represent the coprocessor mrrc instruction.
173 VUNSPEC_MRRC2 ; Represent the coprocessor mrrc2 instruction.
174 VUNSPEC_SPECULATION_BARRIER ; Represents an unconditional speculation barrier.
175 ])
176
177 ;; Enumerators for NEON unspecs.
178 (define_c_enum "unspec" [
179 UNSPEC_ASHIFT_SIGNED
180 UNSPEC_ASHIFT_UNSIGNED
181 UNSPEC_CRC32B
182 UNSPEC_CRC32H
183 UNSPEC_CRC32W
184 UNSPEC_CRC32CB
185 UNSPEC_CRC32CH
186 UNSPEC_CRC32CW
187 UNSPEC_AESD
188 UNSPEC_AESE
189 UNSPEC_AESIMC
190 UNSPEC_AESMC
191 UNSPEC_SHA1C
192 UNSPEC_SHA1M
193 UNSPEC_SHA1P
194 UNSPEC_SHA1H
195 UNSPEC_SHA1SU0
196 UNSPEC_SHA1SU1
197 UNSPEC_SHA256H
198 UNSPEC_SHA256H2
199 UNSPEC_SHA256SU0
200 UNSPEC_SHA256SU1
201 UNSPEC_VMULLP64
202 UNSPEC_LOAD_COUNT
203 UNSPEC_VABAL_S
204 UNSPEC_VABAL_U
205 UNSPEC_VABD_F
206 UNSPEC_VABD_S
207 UNSPEC_VABD_U
208 UNSPEC_VABDL_S
209 UNSPEC_VABDL_U
210 UNSPEC_VADD
211 UNSPEC_VADDHN
212 UNSPEC_VRADDHN
213 UNSPEC_VADDL_S
214 UNSPEC_VADDL_U
215 UNSPEC_VADDW_S
216 UNSPEC_VADDW_U
217 UNSPEC_VBSL
218 UNSPEC_VCAGE
219 UNSPEC_VCAGT
220 UNSPEC_VCALE
221 UNSPEC_VCALT
222 UNSPEC_VCEQ
223 UNSPEC_VCGE
224 UNSPEC_VCGEU
225 UNSPEC_VCGT
226 UNSPEC_VCGTU
227 UNSPEC_VCLS
228 UNSPEC_VCONCAT
229 UNSPEC_VCVT
230 UNSPEC_VCVT_S
231 UNSPEC_VCVT_U
232 UNSPEC_VCVT_S_N
233 UNSPEC_VCVT_U_N
234 UNSPEC_VCVT_HF_S_N
235 UNSPEC_VCVT_HF_U_N
236 UNSPEC_VCVT_SI_S_N
237 UNSPEC_VCVT_SI_U_N
238 UNSPEC_VCVTH_S
239 UNSPEC_VCVTH_U
240 UNSPEC_VCVTA_S
241 UNSPEC_VCVTA_U
242 UNSPEC_VCVTM_S
243 UNSPEC_VCVTM_U
244 UNSPEC_VCVTN_S
245 UNSPEC_VCVTN_U
246 UNSPEC_VCVTP_S
247 UNSPEC_VCVTP_U
248 UNSPEC_VEXT
249 UNSPEC_VHADD_S
250 UNSPEC_VHADD_U
251 UNSPEC_VRHADD_S
252 UNSPEC_VRHADD_U
253 UNSPEC_VHSUB_S
254 UNSPEC_VHSUB_U
255 UNSPEC_VLD1
256 UNSPEC_VLD1_LANE
257 UNSPEC_VLD2
258 UNSPEC_VLD2_DUP
259 UNSPEC_VLD2_LANE
260 UNSPEC_VLD3
261 UNSPEC_VLD3A
262 UNSPEC_VLD3B
263 UNSPEC_VLD3_DUP
264 UNSPEC_VLD3_LANE
265 UNSPEC_VLD4
266 UNSPEC_VLD4A
267 UNSPEC_VLD4B
268 UNSPEC_VLD4_DUP
269 UNSPEC_VLD4_LANE
270 UNSPEC_VMAX
271 UNSPEC_VMAX_U
272 UNSPEC_VMAXNM
273 UNSPEC_VMIN
274 UNSPEC_VMIN_U
275 UNSPEC_VMINNM
276 UNSPEC_VMLA
277 UNSPEC_VMLA_LANE
278 UNSPEC_VMLAL_S
279 UNSPEC_VMLAL_U
280 UNSPEC_VMLAL_S_LANE
281 UNSPEC_VMLAL_U_LANE
282 UNSPEC_VMLS
283 UNSPEC_VMLS_LANE
284 UNSPEC_VMLSL_S
285 UNSPEC_VMLSL_U
286 UNSPEC_VMLSL_S_LANE
287 UNSPEC_VMLSL_U_LANE
288 UNSPEC_VMLSL_LANE
289 UNSPEC_VFMA_LANE
290 UNSPEC_VFMS_LANE
291 UNSPEC_VMOVL_S
292 UNSPEC_VMOVL_U
293 UNSPEC_VMOVN
294 UNSPEC_VMUL
295 UNSPEC_VMULL_P
296 UNSPEC_VMULL_S
297 UNSPEC_VMULL_U
298 UNSPEC_VMUL_LANE
299 UNSPEC_VMULL_S_LANE
300 UNSPEC_VMULL_U_LANE
301 UNSPEC_VPADAL_S
302 UNSPEC_VPADAL_U
303 UNSPEC_VPADD
304 UNSPEC_VPADDL_S
305 UNSPEC_VPADDL_U
306 UNSPEC_VPMAX
307 UNSPEC_VPMAX_U
308 UNSPEC_VPMIN
309 UNSPEC_VPMIN_U
310 UNSPEC_VPSMAX
311 UNSPEC_VPSMIN
312 UNSPEC_VPUMAX
313 UNSPEC_VPUMIN
314 UNSPEC_VQABS
315 UNSPEC_VQADD_S
316 UNSPEC_VQADD_U
317 UNSPEC_VQDMLAL
318 UNSPEC_VQDMLAL_LANE
319 UNSPEC_VQDMLSL
320 UNSPEC_VQDMLSL_LANE
321 UNSPEC_VQDMULH
322 UNSPEC_VQDMULH_LANE
323 UNSPEC_VQRDMULH
324 UNSPEC_VQRDMULH_LANE
325 UNSPEC_VQDMULL
326 UNSPEC_VQDMULL_LANE
327 UNSPEC_VQMOVN_S
328 UNSPEC_VQMOVN_U
329 UNSPEC_VQMOVUN
330 UNSPEC_VQNEG
331 UNSPEC_VQSHL_S
332 UNSPEC_VQSHL_U
333 UNSPEC_VQRSHL_S
334 UNSPEC_VQRSHL_U
335 UNSPEC_VQSHL_S_N
336 UNSPEC_VQSHL_U_N
337 UNSPEC_VQSHLU_N
338 UNSPEC_VQSHRN_S_N
339 UNSPEC_VQSHRN_U_N
340 UNSPEC_VQRSHRN_S_N
341 UNSPEC_VQRSHRN_U_N
342 UNSPEC_VQSHRUN_N
343 UNSPEC_VQRSHRUN_N
344 UNSPEC_VQSUB_S
345 UNSPEC_VQSUB_U
346 UNSPEC_VRECPE
347 UNSPEC_VRECPS
348 UNSPEC_VREV16
349 UNSPEC_VREV32
350 UNSPEC_VREV64
351 UNSPEC_VRSQRTE
352 UNSPEC_VRSQRTS
353 UNSPEC_VSHL_S
354 UNSPEC_VSHL_U
355 UNSPEC_VRSHL_S
356 UNSPEC_VRSHL_U
357 UNSPEC_VSHLL_S_N
358 UNSPEC_VSHLL_U_N
359 UNSPEC_VSHL_N
360 UNSPEC_VSHR_S_N
361 UNSPEC_VSHR_U_N
362 UNSPEC_VRSHR_S_N
363 UNSPEC_VRSHR_U_N
364 UNSPEC_VSHRN_N
365 UNSPEC_VRSHRN_N
366 UNSPEC_VSLI
367 UNSPEC_VSRA_S_N
368 UNSPEC_VSRA_U_N
369 UNSPEC_VRSRA_S_N
370 UNSPEC_VRSRA_U_N
371 UNSPEC_VSRI
372 UNSPEC_VST1
373 UNSPEC_VST1_LANE
374 UNSPEC_VST2
375 UNSPEC_VST2_LANE
376 UNSPEC_VST3
377 UNSPEC_VST3A
378 UNSPEC_VST3B
379 UNSPEC_VST3_LANE
380 UNSPEC_VST4
381 UNSPEC_VST4A
382 UNSPEC_VST4B
383 UNSPEC_VST4_LANE
384 UNSPEC_VSTRUCTDUMMY
385 UNSPEC_VSUB
386 UNSPEC_VSUBHN
387 UNSPEC_VRSUBHN
388 UNSPEC_VSUBL_S
389 UNSPEC_VSUBL_U
390 UNSPEC_VSUBW_S
391 UNSPEC_VSUBW_U
392 UNSPEC_VTBL
393 UNSPEC_VTBX
394 UNSPEC_VTRN1
395 UNSPEC_VTRN2
396 UNSPEC_VTST
397 UNSPEC_VUZP1
398 UNSPEC_VUZP2
399 UNSPEC_VZIP1
400 UNSPEC_VZIP2
401 UNSPEC_MISALIGNED_ACCESS
402 UNSPEC_VCLE
403 UNSPEC_VCLT
404 UNSPEC_NVRINTZ
405 UNSPEC_NVRINTP
406 UNSPEC_NVRINTM
407 UNSPEC_NVRINTX
408 UNSPEC_NVRINTA
409 UNSPEC_NVRINTN
410 UNSPEC_VQRDMLAH
411 UNSPEC_VQRDMLSH
412 UNSPEC_VRND
413 UNSPEC_VRNDA
414 UNSPEC_VRNDI
415 UNSPEC_VRNDM
416 UNSPEC_VRNDN
417 UNSPEC_VRNDP
418 UNSPEC_VRNDX
419 UNSPEC_DOT_S
420 UNSPEC_DOT_U
421 UNSPEC_VFML_LO
422 UNSPEC_VFML_HI
423 UNSPEC_VCADD90
424 UNSPEC_VCADD270
425 UNSPEC_VCMLA
426 UNSPEC_VCMLA90
427 UNSPEC_VCMLA180
428 UNSPEC_VCMLA270
429 ])