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_VABD_F
204  UNSPEC_VABD_S
205  UNSPEC_VABD_U
206  UNSPEC_VABDL_S
207  UNSPEC_VABDL_U
208  UNSPEC_VADD
209  UNSPEC_VADDHN
210  UNSPEC_VRADDHN
211  UNSPEC_VADDL_S
212  UNSPEC_VADDL_U
213  UNSPEC_VADDW_S
214  UNSPEC_VADDW_U
215  UNSPEC_VBSL
216  UNSPEC_VCAGE
217  UNSPEC_VCAGT
218  UNSPEC_VCALE
219  UNSPEC_VCALT
220  UNSPEC_VCEQ
221  UNSPEC_VCGE
222  UNSPEC_VCGEU
223  UNSPEC_VCGT
224  UNSPEC_VCGTU
225  UNSPEC_VCLS
226  UNSPEC_VCONCAT
227  UNSPEC_VCVT
228  UNSPEC_VCVT_S
229  UNSPEC_VCVT_U
230  UNSPEC_VCVT_S_N
231  UNSPEC_VCVT_U_N
232  UNSPEC_VCVT_HF_S_N
233  UNSPEC_VCVT_HF_U_N
234  UNSPEC_VCVT_SI_S_N
235  UNSPEC_VCVT_SI_U_N
236  UNSPEC_VCVTH_S
237  UNSPEC_VCVTH_U
238  UNSPEC_VCVTA_S
239  UNSPEC_VCVTA_U
240  UNSPEC_VCVTM_S
241  UNSPEC_VCVTM_U
242  UNSPEC_VCVTN_S
243  UNSPEC_VCVTN_U
244  UNSPEC_VCVTP_S
245  UNSPEC_VCVTP_U
246  UNSPEC_VEXT
247  UNSPEC_VHADD_S
248  UNSPEC_VHADD_U
249  UNSPEC_VRHADD_S
250  UNSPEC_VRHADD_U
251  UNSPEC_VHSUB_S
252  UNSPEC_VHSUB_U
253  UNSPEC_VLD1
254  UNSPEC_VLD1_LANE
255  UNSPEC_VLD2
256  UNSPEC_VLD2_DUP
257  UNSPEC_VLD2_LANE
258  UNSPEC_VLD3
259  UNSPEC_VLD3A
260  UNSPEC_VLD3B
261  UNSPEC_VLD3_DUP
262  UNSPEC_VLD3_LANE
263  UNSPEC_VLD4
264  UNSPEC_VLD4A
265  UNSPEC_VLD4B
266  UNSPEC_VLD4_DUP
267  UNSPEC_VLD4_LANE
268  UNSPEC_VMAX
269  UNSPEC_VMAX_U
270  UNSPEC_VMAXNM
271  UNSPEC_VMIN
272  UNSPEC_VMIN_U
273  UNSPEC_VMINNM
274  UNSPEC_VMLA
275  UNSPEC_VMLA_LANE
276  UNSPEC_VMLAL_S
277  UNSPEC_VMLAL_U
278  UNSPEC_VMLAL_S_LANE
279  UNSPEC_VMLAL_U_LANE
280  UNSPEC_VMLS
281  UNSPEC_VMLS_LANE
282  UNSPEC_VMLSL_S
283  UNSPEC_VMLSL_U
284  UNSPEC_VMLSL_S_LANE
285  UNSPEC_VMLSL_U_LANE
286  UNSPEC_VMLSL_LANE
287  UNSPEC_VFMA_LANE
288  UNSPEC_VFMS_LANE
289  UNSPEC_VMOVL_S
290  UNSPEC_VMOVL_U
291  UNSPEC_VMOVN
292  UNSPEC_VMUL
293  UNSPEC_VMULL_P
294  UNSPEC_VMULL_S
295  UNSPEC_VMULL_U
296  UNSPEC_VMUL_LANE
297  UNSPEC_VMULL_S_LANE
298  UNSPEC_VMULL_U_LANE
299  UNSPEC_VPADAL_S
300  UNSPEC_VPADAL_U
301  UNSPEC_VPADD
302  UNSPEC_VPADDL_S
303  UNSPEC_VPADDL_U
304  UNSPEC_VPMAX
305  UNSPEC_VPMAX_U
306  UNSPEC_VPMIN
307  UNSPEC_VPMIN_U
308  UNSPEC_VPSMAX
309  UNSPEC_VPSMIN
310  UNSPEC_VPUMAX
311  UNSPEC_VPUMIN
312  UNSPEC_VQABS
313  UNSPEC_VQADD_S
314  UNSPEC_VQADD_U
315  UNSPEC_VQDMLAL
316  UNSPEC_VQDMLAL_LANE
317  UNSPEC_VQDMLSL
318  UNSPEC_VQDMLSL_LANE
319  UNSPEC_VQDMULH
320  UNSPEC_VQDMULH_LANE
321  UNSPEC_VQRDMULH
322  UNSPEC_VQRDMULH_LANE
323  UNSPEC_VQDMULL
324  UNSPEC_VQDMULL_LANE
325  UNSPEC_VQMOVN_S
326  UNSPEC_VQMOVN_U
327  UNSPEC_VQMOVUN
328  UNSPEC_VQNEG
329  UNSPEC_VQSHL_S
330  UNSPEC_VQSHL_U
331  UNSPEC_VQRSHL_S
332  UNSPEC_VQRSHL_U
333  UNSPEC_VQSHL_S_N
334  UNSPEC_VQSHL_U_N
335  UNSPEC_VQSHLU_N
336  UNSPEC_VQSHRN_S_N
337  UNSPEC_VQSHRN_U_N
338  UNSPEC_VQRSHRN_S_N
339  UNSPEC_VQRSHRN_U_N
340  UNSPEC_VQSHRUN_N
341  UNSPEC_VQRSHRUN_N
342  UNSPEC_VQSUB_S
343  UNSPEC_VQSUB_U
344  UNSPEC_VRECPE
345  UNSPEC_VRECPS
346  UNSPEC_VREV16
347  UNSPEC_VREV32
348  UNSPEC_VREV64
349  UNSPEC_VRSQRTE
350  UNSPEC_VRSQRTS
351  UNSPEC_VSHL_S
352  UNSPEC_VSHL_U
353  UNSPEC_VRSHL_S
354  UNSPEC_VRSHL_U
355  UNSPEC_VSHLL_S_N
356  UNSPEC_VSHLL_U_N
357  UNSPEC_VSHL_N
358  UNSPEC_VSHR_S_N
359  UNSPEC_VSHR_U_N
360  UNSPEC_VRSHR_S_N
361  UNSPEC_VRSHR_U_N
362  UNSPEC_VSHRN_N
363  UNSPEC_VRSHRN_N
364  UNSPEC_VSLI
365  UNSPEC_VSRA_S_N
366  UNSPEC_VSRA_U_N
367  UNSPEC_VRSRA_S_N
368  UNSPEC_VRSRA_U_N
369  UNSPEC_VSRI
370  UNSPEC_VST1
371  UNSPEC_VST1_LANE
372  UNSPEC_VST2
373  UNSPEC_VST2_LANE
374  UNSPEC_VST3
375  UNSPEC_VST3A
376  UNSPEC_VST3B
377  UNSPEC_VST3_LANE
378  UNSPEC_VST4
379  UNSPEC_VST4A
380  UNSPEC_VST4B
381  UNSPEC_VST4_LANE
382  UNSPEC_VSTRUCTDUMMY
383  UNSPEC_VSUB
384  UNSPEC_VSUBHN
385  UNSPEC_VRSUBHN
386  UNSPEC_VSUBL_S
387  UNSPEC_VSUBL_U
388  UNSPEC_VSUBW_S
389  UNSPEC_VSUBW_U
390  UNSPEC_VTBL
391  UNSPEC_VTBX
392  UNSPEC_VTRN1
393  UNSPEC_VTRN2
394  UNSPEC_VTST
395  UNSPEC_VUZP1
396  UNSPEC_VUZP2
397  UNSPEC_VZIP1
398  UNSPEC_VZIP2
399  UNSPEC_MISALIGNED_ACCESS
400  UNSPEC_VCLE
401  UNSPEC_VCLT
402  UNSPEC_NVRINTZ
403  UNSPEC_NVRINTP
404  UNSPEC_NVRINTM
405  UNSPEC_NVRINTX
406  UNSPEC_NVRINTA
407  UNSPEC_NVRINTN
408  UNSPEC_VQRDMLAH
409  UNSPEC_VQRDMLSH
410  UNSPEC_VRND
411  UNSPEC_VRNDA
412  UNSPEC_VRNDI
413  UNSPEC_VRNDM
414  UNSPEC_VRNDN
415  UNSPEC_VRNDP
416  UNSPEC_VRNDX
417  UNSPEC_DOT_S
418  UNSPEC_DOT_U
419  UNSPEC_VFML_LO
420  UNSPEC_VFML_HI
421  UNSPEC_VCADD90
422  UNSPEC_VCADD270
423  UNSPEC_VCMLA
424  UNSPEC_VCMLA90
425  UNSPEC_VCMLA180
426  UNSPEC_VCMLA270
427])
428