xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/config/arm/unspecs.md (revision 75f6d617e282811cb173c2ccfbf5df0dd71f7045)
1;; Unspec defintions.
2;; Copyright (C) 2012-2013 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])
87
88(define_c_enum "unspec" [
89  UNSPEC_WADDC		; Used by the intrinsic form of the iWMMXt WADDC instruction.
90  UNSPEC_WABS		; Used by the intrinsic form of the iWMMXt WABS instruction.
91  UNSPEC_WQMULWMR	; Used by the intrinsic form of the iWMMXt WQMULWMR instruction.
92  UNSPEC_WQMULMR	; Used by the intrinsic form of the iWMMXt WQMULMR instruction.
93  UNSPEC_WQMULWM	; Used by the intrinsic form of the iWMMXt WQMULWM instruction.
94  UNSPEC_WQMULM		; Used by the intrinsic form of the iWMMXt WQMULM instruction.
95  UNSPEC_WQMIAxyn	; Used by the intrinsic form of the iWMMXt WMIAxyn instruction.
96  UNSPEC_WQMIAxy	; Used by the intrinsic form of the iWMMXt WMIAxy instruction.
97  UNSPEC_TANDC		; Used by the intrinsic form of the iWMMXt TANDC instruction.
98  UNSPEC_TORC		; Used by the intrinsic form of the iWMMXt TORC instruction.
99  UNSPEC_TORVSC		; Used by the intrinsic form of the iWMMXt TORVSC instruction.
100  UNSPEC_TEXTRC		; Used by the intrinsic form of the iWMMXt TEXTRC instruction.
101])
102
103
104;; UNSPEC_VOLATILE Usage:
105
106(define_c_enum "unspecv" [
107  VUNSPEC_BLOCKAGE      ; `blockage' insn to prevent scheduling across an
108                        ;   insn in the code.
109  VUNSPEC_EPILOGUE      ; `epilogue' insn, used to represent any part of the
110                        ;   instruction epilogue sequence that isn't expanded
111                        ;   into normal RTL.  Used for both normal and sibcall
112                        ;   epilogues.
113  VUNSPEC_THUMB1_INTERWORK ; `prologue_thumb1_interwork' insn, used to swap
114			;   modes from arm to thumb.
115  VUNSPEC_ALIGN         ; `align' insn.  Used at the head of a minipool table
116                        ;   for inlined constants.
117  VUNSPEC_POOL_END      ; `end-of-table'.  Used to mark the end of a minipool
118                        ;   table.
119  VUNSPEC_POOL_1        ; `pool-entry(1)'.  An entry in the constant pool for
120                        ;   an 8-bit object.
121  VUNSPEC_POOL_2        ; `pool-entry(2)'.  An entry in the constant pool for
122                        ;   a 16-bit object.
123  VUNSPEC_POOL_4        ; `pool-entry(4)'.  An entry in the constant pool for
124                        ;   a 32-bit object.
125  VUNSPEC_POOL_8        ; `pool-entry(8)'.  An entry in the constant pool for
126                        ;   a 64-bit object.
127  VUNSPEC_POOL_16       ; `pool-entry(16)'.  An entry in the constant pool for
128                        ;   a 128-bit object.
129  VUNSPEC_TMRC          ; Used by the iWMMXt TMRC instruction.
130  VUNSPEC_TMCR          ; Used by the iWMMXt TMCR instruction.
131  VUNSPEC_ALIGN8        ; 8-byte alignment version of VUNSPEC_ALIGN
132  VUNSPEC_WCMP_EQ       ; Used by the iWMMXt WCMPEQ instructions
133  VUNSPEC_WCMP_GTU      ; Used by the iWMMXt WCMPGTU instructions
134  VUNSPEC_WCMP_GT       ; Used by the iwMMXT WCMPGT instructions
135  VUNSPEC_EH_RETURN     ; Use to override the return address for exception
136                        ; handling.
137  VUNSPEC_ATOMIC_CAS	; Represent an atomic compare swap.
138  VUNSPEC_ATOMIC_XCHG	; Represent an atomic exchange.
139  VUNSPEC_ATOMIC_OP	; Represent an atomic operation.
140  VUNSPEC_LL		; Represent a load-register-exclusive.
141  VUNSPEC_SC		; Represent a store-register-exclusive.
142])
143
144;; Enumerators for NEON unspecs.
145(define_c_enum "unspec" [
146  UNSPEC_ASHIFT_SIGNED
147  UNSPEC_ASHIFT_UNSIGNED
148  UNSPEC_LOAD_COUNT
149  UNSPEC_VABD
150  UNSPEC_VABDL
151  UNSPEC_VADD
152  UNSPEC_VADDHN
153  UNSPEC_VADDL
154  UNSPEC_VADDW
155  UNSPEC_VBSL
156  UNSPEC_VCAGE
157  UNSPEC_VCAGT
158  UNSPEC_VCEQ
159  UNSPEC_VCGE
160  UNSPEC_VCGEU
161  UNSPEC_VCGT
162  UNSPEC_VCGTU
163  UNSPEC_VCLS
164  UNSPEC_VCONCAT
165  UNSPEC_VCVT
166  UNSPEC_VCVT_N
167  UNSPEC_VEXT
168  UNSPEC_VHADD
169  UNSPEC_VHSUB
170  UNSPEC_VLD1
171  UNSPEC_VLD1_LANE
172  UNSPEC_VLD2
173  UNSPEC_VLD2_DUP
174  UNSPEC_VLD2_LANE
175  UNSPEC_VLD3
176  UNSPEC_VLD3A
177  UNSPEC_VLD3B
178  UNSPEC_VLD3_DUP
179  UNSPEC_VLD3_LANE
180  UNSPEC_VLD4
181  UNSPEC_VLD4A
182  UNSPEC_VLD4B
183  UNSPEC_VLD4_DUP
184  UNSPEC_VLD4_LANE
185  UNSPEC_VMAX
186  UNSPEC_VMIN
187  UNSPEC_VMLA
188  UNSPEC_VMLAL
189  UNSPEC_VMLA_LANE
190  UNSPEC_VMLAL_LANE
191  UNSPEC_VMLS
192  UNSPEC_VMLSL
193  UNSPEC_VMLS_LANE
194  UNSPEC_VMLSL_LANE
195  UNSPEC_VMOVL
196  UNSPEC_VMOVN
197  UNSPEC_VMUL
198  UNSPEC_VMULL
199  UNSPEC_VMUL_LANE
200  UNSPEC_VMULL_LANE
201  UNSPEC_VPADAL
202  UNSPEC_VPADD
203  UNSPEC_VPADDL
204  UNSPEC_VPMAX
205  UNSPEC_VPMIN
206  UNSPEC_VPSMAX
207  UNSPEC_VPSMIN
208  UNSPEC_VPUMAX
209  UNSPEC_VPUMIN
210  UNSPEC_VQABS
211  UNSPEC_VQADD
212  UNSPEC_VQDMLAL
213  UNSPEC_VQDMLAL_LANE
214  UNSPEC_VQDMLSL
215  UNSPEC_VQDMLSL_LANE
216  UNSPEC_VQDMULH
217  UNSPEC_VQDMULH_LANE
218  UNSPEC_VQDMULL
219  UNSPEC_VQDMULL_LANE
220  UNSPEC_VQMOVN
221  UNSPEC_VQMOVUN
222  UNSPEC_VQNEG
223  UNSPEC_VQSHL
224  UNSPEC_VQSHL_N
225  UNSPEC_VQSHLU_N
226  UNSPEC_VQSHRN_N
227  UNSPEC_VQSHRUN_N
228  UNSPEC_VQSUB
229  UNSPEC_VRECPE
230  UNSPEC_VRECPS
231  UNSPEC_VREV16
232  UNSPEC_VREV32
233  UNSPEC_VREV64
234  UNSPEC_VRSQRTE
235  UNSPEC_VRSQRTS
236  UNSPEC_VSHL
237  UNSPEC_VSHLL_N
238  UNSPEC_VSHL_N
239  UNSPEC_VSHR_N
240  UNSPEC_VSHRN_N
241  UNSPEC_VSLI
242  UNSPEC_VSRA_N
243  UNSPEC_VSRI
244  UNSPEC_VST1
245  UNSPEC_VST1_LANE
246  UNSPEC_VST2
247  UNSPEC_VST2_LANE
248  UNSPEC_VST3
249  UNSPEC_VST3A
250  UNSPEC_VST3B
251  UNSPEC_VST3_LANE
252  UNSPEC_VST4
253  UNSPEC_VST4A
254  UNSPEC_VST4B
255  UNSPEC_VST4_LANE
256  UNSPEC_VSTRUCTDUMMY
257  UNSPEC_VSUB
258  UNSPEC_VSUBHN
259  UNSPEC_VSUBL
260  UNSPEC_VSUBW
261  UNSPEC_VTBL
262  UNSPEC_VTBX
263  UNSPEC_VTRN1
264  UNSPEC_VTRN2
265  UNSPEC_VTST
266  UNSPEC_VUZP1
267  UNSPEC_VUZP2
268  UNSPEC_VZIP1
269  UNSPEC_VZIP2
270  UNSPEC_MISALIGNED_ACCESS
271  UNSPEC_VCLE
272  UNSPEC_VCLT
273  UNSPEC_NVRINTZ
274  UNSPEC_NVRINTP
275  UNSPEC_NVRINTM
276  UNSPEC_NVRINTX
277  UNSPEC_NVRINTA
278  UNSPEC_NVRINTN
279])
280
281