For Yufeng Zhang.

2011-04-05  Yufeng Zhang  <yufeng.zhang@arm.com>

        * config/arm/arm.md (define_constants for unspec): Replace with
        define_c_enum.
        (define_constants for unspecv): Replace with define_c_enum.
        * config/arm/neon.md (define_constants for unspec): Replace with
        define_c_enum.

From-SVN: r171973
This commit is contained in:
Yufeng Zhang 2011-04-05 08:35:31 +00:00 committed by Ramana Radhakrishnan
parent db7f455bc3
commit ffa94123bb
3 changed files with 223 additions and 216 deletions

View File

@ -1,3 +1,11 @@
2011-04-05 Yufeng Zhang <yufeng.zhang@arm.com>
* config/arm/arm.md (define_constants for unspec): Replace with
define_c_enum.
(define_constants for unspecv): Replace with define_c_enum.
* config/arm/neon.md (define_constants for unspec): Replace with
define_c_enum.
2011-04-04 Richard Henderson <rth@redhat.com>
PR 48400

View File

@ -51,100 +51,98 @@
;; UNSPEC Usage:
;; Note: sin and cos are no-longer used.
;; Unspec constants for Neon are defined in neon.md.
;; Unspec enumerators 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:
; 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
; 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,
; 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
; being scheduled before the stack adjustment insn.
(UNSPEC_PROLOGUE_USE 6) ; 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.
]
)
(define_c_enum "unspec" [
UNSPEC_SIN ; `sin' operation (MODE_FLOAT):
; operand 0 is the result,
; operand 1 the parameter.
UNPSEC_COS ; `cos' operation (MODE_FLOAT):
; operand 0 is the result,
; operand 1 the parameter.
UNSPEC_PUSH_MULT ; `push multiple' operation:
; operand 0 is the first register,
; subsequent registers are in parallel (use ...)
; expressions.
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 ; 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 ; A special barrier that prevents frame accesses
; being scheduled before the stack adjustment insn.
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 ; 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:
(define_constants
[(VUNSPEC_BLOCKAGE 0) ; `blockage' insn to prevent scheduling across an
; insn in the code.
(VUNSPEC_EPILOGUE 1) ; `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
; for inlined constants.
(VUNSPEC_POOL_END 3) ; `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
; an 8-bit object.
(VUNSPEC_POOL_2 5) ; `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
; a 32-bit object.
(VUNSPEC_POOL_8 7) ; `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
; 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>
]
)
(define_c_enum "unspecv" [
VUNSPEC_BLOCKAGE ; `blockage' insn to prevent scheduling across an
; insn in the code.
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 ; `align' insn. Used at the head of a minipool table
; for inlined constants.
VUNSPEC_POOL_END ; `end-of-table'. Used to mark the end of a minipool
; table.
VUNSPEC_POOL_1 ; `pool-entry(1)'. An entry in the constant pool for
; an 8-bit object.
VUNSPEC_POOL_2 ; `pool-entry(2)'. An entry in the constant pool for
; a 16-bit object.
VUNSPEC_POOL_4 ; `pool-entry(4)'. An entry in the constant pool for
; a 32-bit object.
VUNSPEC_POOL_8 ; `pool-entry(8)'. An entry in the constant pool for
; a 64-bit object.
VUNSPEC_POOL_16 ; `pool-entry(16)'. An entry in the constant pool for
; a 128-bit object.
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.
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>
])
;;---------------------------------------------------------------------------
;; Attributes

View File

@ -18,132 +18,133 @@
;; along with GCC; see the file COPYING3. If not see
;; <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)])
;; Enumerators for unspecs.
(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