2 ;; Copyright (C) 2012-2014 Free Software Foundation, Inc.
3 ;; Contributed by ARM Ltd.
5 ;; This file is part of GCC.
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.
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.
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/>.
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
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 ...)
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
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
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
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
76 UNSPEC_VRINTP ; Represent a float to integral float rounding
78 UNSPEC_VRINTM ; Represent a float to integral float rounding
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.
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.
104 ;; UNSPEC_VOLATILE Usage:
106 (define_c_enum "unspecv" [
107 VUNSPEC_BLOCKAGE ; `blockage' insn to prevent scheduling across an
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
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
119 VUNSPEC_POOL_1 ; `pool-entry(1)'. An entry in the constant pool for
121 VUNSPEC_POOL_2 ; `pool-entry(2)'. An entry in the constant pool for
123 VUNSPEC_POOL_4 ; `pool-entry(4)'. An entry in the constant pool for
125 VUNSPEC_POOL_8 ; `pool-entry(8)'. An entry in the constant pool for
127 VUNSPEC_POOL_16 ; `pool-entry(16)'. An entry in the constant pool for
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
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 VUNSPEC_LAX ; Represent a load-register-acquire-exclusive.
143 VUNSPEC_SLX ; Represent a store-register-release-exclusive.
144 VUNSPEC_LDA ; Represent a store-register-acquire.
145 VUNSPEC_STL ; Represent a store-register-release.
146 VUNSPEC_GET_FPSCR ; Represent fetch of FPSCR content.
147 VUNSPEC_SET_FPSCR ; Represent assign of FPSCR content.
150 ;; Enumerators for NEON unspecs.
151 (define_c_enum "unspec" [
153 UNSPEC_ASHIFT_UNSIGNED
352 UNSPEC_MISALIGNED_ACCESS