===================================================================
@@ -19,131 +19,131 @@
;; <http://www.gnu.org/licenses/>.
;; Constants for unspecs.
-(define_constants
- [(UNSPEC_ASHIFT_SIGNED 65)
- (UNSPEC_ASHIFT_UNSIGNED 66)
- (UNSPEC_VABD 69)
- (UNSPEC_VABDL 70)
- (UNSPEC_VADD 72)
- (UNSPEC_VADDHN 73)
- (UNSPEC_VADDL 74)
- (UNSPEC_VADDW 75)
- (UNSPEC_VBSL 78)
- (UNSPEC_VCAGE 79)
- (UNSPEC_VCAGT 80)
- (UNSPEC_VCEQ 81)
- (UNSPEC_VCGE 82)
- (UNSPEC_VCGT 83)
- (UNSPEC_VCLS 84)
- (UNSPEC_VCVT 88)
- (UNSPEC_VCVT_N 89)
- (UNSPEC_VEXT 93)
- (UNSPEC_VHADD 97)
- (UNSPEC_VHSUB 98)
- (UNSPEC_VLD1 99)
- (UNSPEC_VLD1_DUP 100)
- (UNSPEC_VLD1_LANE 101)
- (UNSPEC_VLD2 102)
- (UNSPEC_VLD2_DUP 103)
- (UNSPEC_VLD2_LANE 104)
- (UNSPEC_VLD3 105)
- (UNSPEC_VLD3A 106)
- (UNSPEC_VLD3B 107)
- (UNSPEC_VLD3_DUP 108)
- (UNSPEC_VLD3_LANE 109)
- (UNSPEC_VLD4 110)
- (UNSPEC_VLD4A 111)
- (UNSPEC_VLD4B 112)
- (UNSPEC_VLD4_DUP 113)
- (UNSPEC_VLD4_LANE 114)
- (UNSPEC_VMAX 115)
- (UNSPEC_VMIN 116)
- (UNSPEC_VMLA 117)
- (UNSPEC_VMLAL 118)
- (UNSPEC_VMLA_LANE 119)
- (UNSPEC_VMLAL_LANE 120)
- (UNSPEC_VMLS 121)
- (UNSPEC_VMLSL 122)
- (UNSPEC_VMLS_LANE 123)
- (UNSPEC_VMLSL_LANE 124)
- (UNSPEC_VMOVL 125)
- (UNSPEC_VMOVN 126)
- (UNSPEC_VMUL 127)
- (UNSPEC_VMULL 128)
- (UNSPEC_VMUL_LANE 129)
- (UNSPEC_VMULL_LANE 130)
- (UNSPEC_VPADAL 135)
- (UNSPEC_VPADD 136)
- (UNSPEC_VPADDL 137)
- (UNSPEC_VPMAX 138)
- (UNSPEC_VPMIN 139)
- (UNSPEC_VPSMAX 140)
- (UNSPEC_VPSMIN 141)
- (UNSPEC_VPUMAX 142)
- (UNSPEC_VPUMIN 143)
- (UNSPEC_VQABS 144)
- (UNSPEC_VQADD 145)
- (UNSPEC_VQDMLAL 146)
- (UNSPEC_VQDMLAL_LANE 147)
- (UNSPEC_VQDMLSL 148)
- (UNSPEC_VQDMLSL_LANE 149)
- (UNSPEC_VQDMULH 150)
- (UNSPEC_VQDMULH_LANE 151)
- (UNSPEC_VQDMULL 152)
- (UNSPEC_VQDMULL_LANE 153)
- (UNSPEC_VQMOVN 154)
- (UNSPEC_VQMOVUN 155)
- (UNSPEC_VQNEG 156)
- (UNSPEC_VQSHL 157)
- (UNSPEC_VQSHL_N 158)
- (UNSPEC_VQSHLU_N 159)
- (UNSPEC_VQSHRN_N 160)
- (UNSPEC_VQSHRUN_N 161)
- (UNSPEC_VQSUB 162)
- (UNSPEC_VRECPE 163)
- (UNSPEC_VRECPS 164)
- (UNSPEC_VREV16 165)
- (UNSPEC_VREV32 166)
- (UNSPEC_VREV64 167)
- (UNSPEC_VRSQRTE 168)
- (UNSPEC_VRSQRTS 169)
- (UNSPEC_VSHL 171)
- (UNSPEC_VSHLL_N 172)
- (UNSPEC_VSHL_N 173)
- (UNSPEC_VSHR_N 174)
- (UNSPEC_VSHRN_N 175)
- (UNSPEC_VSLI 176)
- (UNSPEC_VSRA_N 177)
- (UNSPEC_VSRI 178)
- (UNSPEC_VST1 179)
- (UNSPEC_VST1_LANE 180)
- (UNSPEC_VST2 181)
- (UNSPEC_VST2_LANE 182)
- (UNSPEC_VST3 183)
- (UNSPEC_VST3A 184)
- (UNSPEC_VST3B 185)
- (UNSPEC_VST3_LANE 186)
- (UNSPEC_VST4 187)
- (UNSPEC_VST4A 188)
- (UNSPEC_VST4B 189)
- (UNSPEC_VST4_LANE 190)
- (UNSPEC_VSTRUCTDUMMY 191)
- (UNSPEC_VSUB 192)
- (UNSPEC_VSUBHN 193)
- (UNSPEC_VSUBL 194)
- (UNSPEC_VSUBW 195)
- (UNSPEC_VTBL 196)
- (UNSPEC_VTBX 197)
- (UNSPEC_VTRN1 198)
- (UNSPEC_VTRN2 199)
- (UNSPEC_VTST 200)
- (UNSPEC_VUZP1 201)
- (UNSPEC_VUZP2 202)
- (UNSPEC_VZIP1 203)
- (UNSPEC_VZIP2 204)
- (UNSPEC_MISALIGNED_ACCESS 205)
- (UNSPEC_VCLE 206)
- (UNSPEC_VCLT 207)])
+(define_c_enum "unspec"
+ [UNSPEC_ASHIFT_SIGNED
+ UNSPEC_ASHIFT_UNSIGNED
+ UNSPEC_VABD
+ UNSPEC_VABDL
+ UNSPEC_VADD
+ UNSPEC_VADDHN
+ UNSPEC_VADDL
+ UNSPEC_VADDW
+ UNSPEC_VBSL
+ UNSPEC_VCAGE
+ UNSPEC_VCAGT
+ UNSPEC_VCEQ
+ UNSPEC_VCGE
+ UNSPEC_VCGT
+ UNSPEC_VCLS
+ UNSPEC_VCVT
+ UNSPEC_VCVT_N
+ UNSPEC_VEXT
+ UNSPEC_VHADD
+ UNSPEC_VHSUB
+ UNSPEC_VLD1
+ UNSPEC_VLD1_DUP
+ UNSPEC_VLD1_LANE
+ UNSPEC_VLD2
+ UNSPEC_VLD2_DUP
+ UNSPEC_VLD2_LANE
+ UNSPEC_VLD3
+ UNSPEC_VLD3A
+ UNSPEC_VLD3B
+ UNSPEC_VLD3_DUP
+ UNSPEC_VLD3_LANE
+ UNSPEC_VLD4
+ UNSPEC_VLD4A
+ UNSPEC_VLD4B
+ UNSPEC_VLD4_DUP
+ UNSPEC_VLD4_LANE
+ UNSPEC_VMAX
+ UNSPEC_VMIN
+ UNSPEC_VMLA
+ UNSPEC_VMLAL
+ UNSPEC_VMLA_LANE
+ UNSPEC_VMLAL_LANE
+ UNSPEC_VMLS
+ UNSPEC_VMLSL
+ UNSPEC_VMLS_LANE
+ UNSPEC_VMLSL_LANE
+ UNSPEC_VMOVL
+ UNSPEC_VMOVN
+ UNSPEC_VMUL
+ UNSPEC_VMULL
+ UNSPEC_VMUL_LANE
+ UNSPEC_VMULL_LANE
+ UNSPEC_VPADAL
+ UNSPEC_VPADD
+ UNSPEC_VPADDL
+ UNSPEC_VPMAX
+ UNSPEC_VPMIN
+ UNSPEC_VPSMAX
+ UNSPEC_VPSMIN
+ UNSPEC_VPUMAX
+ UNSPEC_VPUMIN
+ UNSPEC_VQABS
+ UNSPEC_VQADD
+ UNSPEC_VQDMLAL
+ UNSPEC_VQDMLAL_LANE
+ UNSPEC_VQDMLSL
+ UNSPEC_VQDMLSL_LANE
+ UNSPEC_VQDMULH
+ UNSPEC_VQDMULH_LANE
+ UNSPEC_VQDMULL
+ UNSPEC_VQDMULL_LANE
+ UNSPEC_VQMOVN
+ UNSPEC_VQMOVUN
+ UNSPEC_VQNEG
+ UNSPEC_VQSHL
+ UNSPEC_VQSHL_N
+ UNSPEC_VQSHLU_N
+ UNSPEC_VQSHRN_N
+ UNSPEC_VQSHRUN_N
+ UNSPEC_VQSUB
+ UNSPEC_VRECPE
+ UNSPEC_VRECPS
+ UNSPEC_VREV16
+ UNSPEC_VREV32
+ UNSPEC_VREV64
+ UNSPEC_VRSQRTE
+ UNSPEC_VRSQRTS
+ UNSPEC_VSHL
+ UNSPEC_VSHLL_N
+ UNSPEC_VSHL_N
+ UNSPEC_VSHR_N
+ UNSPEC_VSHRN_N
+ UNSPEC_VSLI
+ UNSPEC_VSRA_N
+ UNSPEC_VSRI
+ UNSPEC_VST1
+ UNSPEC_VST1_LANE
+ UNSPEC_VST2
+ UNSPEC_VST2_LANE
+ UNSPEC_VST3
+ UNSPEC_VST3A
+ UNSPEC_VST3B
+ UNSPEC_VST3_LANE
+ UNSPEC_VST4
+ UNSPEC_VST4A
+ UNSPEC_VST4B
+ UNSPEC_VST4_LANE
+ UNSPEC_VSTRUCTDUMMY
+ UNSPEC_VSUB
+ UNSPEC_VSUBHN
+ UNSPEC_VSUBL
+ UNSPEC_VSUBW
+ UNSPEC_VTBL
+ UNSPEC_VTBX
+ UNSPEC_VTRN1
+ UNSPEC_VTRN2
+ UNSPEC_VTST
+ UNSPEC_VUZP1
+ UNSPEC_VUZP2
+ UNSPEC_VZIP1
+ UNSPEC_VZIP2
+ UNSPEC_MISALIGNED_ACCESS
+ UNSPEC_VCLE
+ UNSPEC_VCLT])
;; Attribute used to permit string comparisons against <VQH_mnem> in
===================================================================
@@ -50,99 +50,88 @@ (define_constants
)
;; UNSPEC Usage:
-;; Note: sin and cos are no-longer used.
;; Unspec constants for Neon are defined in neon.md.
-(define_constants
- [(UNSPEC_SIN 0) ; `sin' operation (MODE_FLOAT):
- ; operand 0 is the result,
- ; operand 1 the parameter.
- (UNPSEC_COS 1) ; `cos' operation (MODE_FLOAT):
- ; operand 0 is the result,
- ; operand 1 the parameter.
- (UNSPEC_PUSH_MULT 2) ; `push multiple' operation:
+(define_c_enum "unspec"
+ [UNSPEC_PUSH_MULT ; `push multiple' operation:
; operand 0 is the first register,
; subsequent registers are in parallel (use ...)
; expressions.
- (UNSPEC_PIC_SYM 3) ; A symbol that has been treated properly for pic
+ UNSPEC_PIC_SYM ; A symbol that has been treated properly for pic
; usage, that is, we will add the pic_register
; value to it before trying to dereference it.
- (UNSPEC_PIC_BASE 4) ; Add PC and all but the last operand together,
+ UNSPEC_PIC_BASE ; Add PC and all but the last operand together,
; The last operand is the number of a PIC_LABEL
; that points at the containing instruction.
- (UNSPEC_PRLG_STK 5) ; A special barrier that prevents frame accesses
+ UNSPEC_PRLG_STK ; A special barrier that prevents frame accesses
; being scheduled before the stack adjustment insn.
- (UNSPEC_PROLOGUE_USE 6) ; As USE insns are not meaningful after reload,
+ UNSPEC_PROLOGUE_USE ; As USE insns are not meaningful after reload,
; this unspec is used to prevent the deletion of
; instructions setting registers for EH handling
; and stack frame generation. Operand 0 is the
; register to "use".
- (UNSPEC_CHECK_ARCH 7); Set CCs to indicate 26-bit or 32-bit mode.
- (UNSPEC_WSHUFH 8) ; Used by the intrinsic form of the iWMMXt WSHUFH instruction.
- (UNSPEC_WACC 9) ; Used by the intrinsic form of the iWMMXt WACC instruction.
- (UNSPEC_TMOVMSK 10) ; Used by the intrinsic form of the iWMMXt TMOVMSK instruction.
- (UNSPEC_WSAD 11) ; Used by the intrinsic form of the iWMMXt WSAD instruction.
- (UNSPEC_WSADZ 12) ; Used by the intrinsic form of the iWMMXt WSADZ instruction.
- (UNSPEC_WMACS 13) ; Used by the intrinsic form of the iWMMXt WMACS instruction.
- (UNSPEC_WMACU 14) ; Used by the intrinsic form of the iWMMXt WMACU instruction.
- (UNSPEC_WMACSZ 15) ; Used by the intrinsic form of the iWMMXt WMACSZ instruction.
- (UNSPEC_WMACUZ 16) ; Used by the intrinsic form of the iWMMXt WMACUZ instruction.
- (UNSPEC_CLRDI 17) ; Used by the intrinsic form of the iWMMXt CLRDI instruction.
- (UNSPEC_WMADDS 18) ; Used by the intrinsic form of the iWMMXt WMADDS instruction.
- (UNSPEC_WMADDU 19) ; Used by the intrinsic form of the iWMMXt WMADDU instruction.
- (UNSPEC_TLS 20) ; A symbol that has been treated properly for TLS usage.
- (UNSPEC_PIC_LABEL 21) ; A label used for PIC access that does not appear in the
- ; instruction stream.
- (UNSPEC_STACK_ALIGN 22) ; Doubleword aligned stack pointer. Used to
- ; generate correct unwind information.
- (UNSPEC_PIC_OFFSET 23) ; A symbolic 12-bit OFFSET that has been treated
- ; correctly for PIC usage.
- (UNSPEC_GOTSYM_OFF 24) ; The offset of the start of the the GOT from a
- ; a given symbolic address.
- (UNSPEC_THUMB1_CASESI 25) ; A Thumb1 compressed dispatch-table call.
- (UNSPEC_RBIT 26) ; rbit operation.
- (UNSPEC_SYMBOL_OFFSET 27) ; The offset of the start of the symbol from
- ; another symbolic address.
- (UNSPEC_MEMORY_BARRIER 28) ; Represent a memory barrier.
+ UNSPEC_CHECK_ARCH ; Set CCs to indicate 26-bit or 32-bit mode.
+ UNSPEC_WSHUFH ; Used by the intrinsic form of the iWMMXt WSHUFH instruction.
+ UNSPEC_WACC ; Used by the intrinsic form of the iWMMXt WACC instruction.
+ UNSPEC_TMOVMSK ; Used by the intrinsic form of the iWMMXt TMOVMSK instruction.
+ UNSPEC_WSAD ; Used by the intrinsic form of the iWMMXt WSAD instruction.
+ UNSPEC_WSADZ ; Used by the intrinsic form of the iWMMXt WSADZ instruction.
+ UNSPEC_WMACS ; Used by the intrinsic form of the iWMMXt WMACS instruction.
+ UNSPEC_WMACU ; Used by the intrinsic form of the iWMMXt WMACU instruction.
+ UNSPEC_WMACSZ ; Used by the intrinsic form of the iWMMXt WMACSZ instruction.
+ UNSPEC_WMACUZ ; Used by the intrinsic form of the iWMMXt WMACUZ instruction.
+ UNSPEC_CLRDI ; Used by the intrinsic form of the iWMMXt CLRDI instruction.
+ UNSPEC_WMADDS ; Used by the intrinsic form of the iWMMXt WMADDS instruction.
+ UNSPEC_WMADDU ; Used by the intrinsic form of the iWMMXt WMADDU instruction.
+ UNSPEC_TLS ; A symbol that has been treated properly for TLS usage.
+ UNSPEC_PIC_LABEL ; A label used for PIC access that does not appear in the
+ ; instruction stream.
+ UNSPEC_STACK_ALIGN ; Doubleword aligned stack pointer. Used to
+ ; generate correct unwind information.
+ UNSPEC_PIC_OFFSET ; A symbolic 12-bit OFFSET that has been treated
+ ; correctly for PIC usage.
+ UNSPEC_GOTSYM_OFF ; The offset of the start of the the GOT from a
+ ; a given symbolic address.
+ UNSPEC_THUMB1_CASESI ; A Thumb1 compressed dispatch-table call.
+ UNSPEC_RBIT ; rbit operation.
+ UNSPEC_SYMBOL_OFFSET ; The offset of the start of the symbol from
+ ; another symbolic address.
+ UNSPEC_MEMORY_BARRIER ; Represent a memory barrier.
]
)
;; UNSPEC_VOLATILE Usage:
+;; Unspec constants for synchronization primitives are defined in sync.md.
-(define_constants
- [(VUNSPEC_BLOCKAGE 0) ; `blockage' insn to prevent scheduling across an
+(define_c_enum "unspecv"
+ [VUNSPEC_BLOCKAGE ; `blockage' insn to prevent scheduling across an
; insn in the code.
- (VUNSPEC_EPILOGUE 1) ; `epilogue' insn, used to represent any part of the
+ VUNSPEC_EPILOGUE ; `epilogue' insn, used to represent any part of the
; instruction epilogue sequence that isn't expanded
; into normal RTL. Used for both normal and sibcall
; epilogues.
- (VUNSPEC_ALIGN 2) ; `align' insn. Used at the head of a minipool table
+ VUNSPEC_ALIGN ; `align' insn. Used at the head of a minipool table
; for inlined constants.
- (VUNSPEC_POOL_END 3) ; `end-of-table'. Used to mark the end of a minipool
+ VUNSPEC_POOL_END ; `end-of-table'. Used to mark the end of a minipool
; table.
- (VUNSPEC_POOL_1 4) ; `pool-entry(1)'. An entry in the constant pool for
+ VUNSPEC_POOL_1 ; `pool-entry(1)'. An entry in the constant pool for
; an 8-bit object.
- (VUNSPEC_POOL_2 5) ; `pool-entry(2)'. An entry in the constant pool for
+ VUNSPEC_POOL_2 ; `pool-entry(2)'. An entry in the constant pool for
; a 16-bit object.
- (VUNSPEC_POOL_4 6) ; `pool-entry(4)'. An entry in the constant pool for
+ VUNSPEC_POOL_4 ; `pool-entry(4)'. An entry in the constant pool for
; a 32-bit object.
- (VUNSPEC_POOL_8 7) ; `pool-entry(8)'. An entry in the constant pool for
+ VUNSPEC_POOL_8 ; `pool-entry(8)'. An entry in the constant pool for
; a 64-bit object.
- (VUNSPEC_POOL_16 8) ; `pool-entry(16)'. An entry in the constant pool for
+ VUNSPEC_POOL_16 ; `pool-entry(16)'. An entry in the constant pool for
; a 128-bit object.
- (VUNSPEC_TMRC 9) ; Used by the iWMMXt TMRC instruction.
- (VUNSPEC_TMCR 10) ; Used by the iWMMXt TMCR instruction.
- (VUNSPEC_ALIGN8 11) ; 8-byte alignment version of VUNSPEC_ALIGN
- (VUNSPEC_WCMP_EQ 12) ; Used by the iWMMXt WCMPEQ instructions
- (VUNSPEC_WCMP_GTU 13) ; Used by the iWMMXt WCMPGTU instructions
- (VUNSPEC_WCMP_GT 14) ; Used by the iwMMXT WCMPGT instructions
- (VUNSPEC_EH_RETURN 20); Use to override the return address for exception
- ; handling.
- (VUNSPEC_SYNC_COMPARE_AND_SWAP 21) ; Represent an atomic compare swap.
- (VUNSPEC_SYNC_LOCK 22) ; Represent a sync_lock_test_and_set.
- (VUNSPEC_SYNC_OP 23) ; Represent a sync_<op>
- (VUNSPEC_SYNC_NEW_OP 24) ; Represent a sync_new_<op>
- (VUNSPEC_SYNC_OLD_OP 25) ; Represent a sync_old_<op>
+ VUNSPEC_TMRC ; Used by the iWMMXt TMRC instruction.
+ VUNSPEC_TMCR ; Used by the iWMMXt TMCR instruction.
+ VUNSPEC_ALIGN8 ; 8-byte alignment version of VUNSPEC_ALIGN
+ VUNSPEC_WCMP_EQ ; Used by the iWMMXt WCMPEQ instructions
+ VUNSPEC_WCMP_GTU ; Used by the iWMMXt WCMPGTU instructions
+ VUNSPEC_WCMP_GT ; Used by the iwMMXT WCMPGT instructions
+ VUNSPEC_EH_RETURN ; Use to override the return address for exception
+ ; handling.
]
)
===================================================================
@@ -24,6 +24,15 @@
;; AND/OR sequences into the synchronization loop to mask out the
;; relevant component of an SI access.
+(define_c_enum "unspecv"
+ [VUNSPEC_SYNC_COMPARE_AND_SWAP ; Represent an atomic compare swap.
+ VUNSPEC_SYNC_LOCK ; Represent a sync_lock_test_and_set.
+ VUNSPEC_SYNC_OP ; Represent a sync_<op>
+ VUNSPEC_SYNC_NEW_OP ; Represent a sync_new_<op>
+ VUNSPEC_SYNC_OLD_OP ; Represent a sync_old_<op>
+ ]
+)
+
(define_expand "memory_barrier"
[(set (match_dup 0)
(unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))]