Commit 79739965 by Kyrylo Tkachov Committed by Kyrylo Tkachov

arm.c (neon_itype): Define NEON_RINT enum element.

2012-12-06  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

	* config/arm/arm.c (neon_itype): Define NEON_RINT enum element.
	(neon_builtin_data): Register vrintn, vrinta, vrintp, vrintm,
	vrintz,	vrintx neon builtins.
	(arm_init_neon_builtins): Handle NEON_RINT.
	(arm_expand_neon_builtin): Likewise.
	* config/arm/unspecs.md: New file.
	* config/arm/arm.md ("unspec"): Move to unspecs.md.
	* config/arm/iterators.md (NEON_VRINT): New int iterator.
	(nvrint_variant): New int attribute.
	* config/arm/neon.md 
	(neon_vrint<NEON_VRINT:nvrint_variant><VCVTF:mode>): New pattern.
	("unspec"): Move to unspecs.md.
	* config/arm/iwmmxt2.md ("unspec"): Move to unspecs.md.

From-SVN: r194244
parent 4f2b3dc2
2012-12-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/arm/arm.c (neon_itype): Define NEON_RINT enum element.
(neon_builtin_data): Register vrintn, vrinta, vrintp, vrintm,
vrintz, vrintx neon builtins.
(arm_init_neon_builtins): Handle NEON_RINT.
(arm_expand_neon_builtin): Likewise.
* config/arm/unspecs.md: New file.
* config/arm/arm.md ("unspec"): Move to unspecs.md.
* config/arm/iterators.md (NEON_VRINT): New int iterator.
(nvrint_variant): New int attribute.
* config/arm/neon.md
(neon_vrint<NEON_VRINT:nvrint_variant><VCVTF:mode>): New pattern.
("unspec"): Move to unspecs.md.
* config/arm/iwmmxt2.md ("unspec"): Move to unspecs.md.
2012-12-05 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> 2012-12-05 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* config/pa/pa.md: Use "const_int 0" instead of match_test to simplify * config/pa/pa.md: Use "const_int 0" instead of match_test to simplify
...@@ -19060,6 +19060,7 @@ typedef enum { ...@@ -19060,6 +19060,7 @@ typedef enum {
NEON_GETLANE, NEON_GETLANE,
NEON_SETLANE, NEON_SETLANE,
NEON_CREATE, NEON_CREATE,
NEON_RINT,
NEON_DUP, NEON_DUP,
NEON_DUPLANE, NEON_DUPLANE,
NEON_COMBINE, NEON_COMBINE,
...@@ -19259,6 +19260,12 @@ static neon_builtin_datum neon_builtin_data[] = ...@@ -19259,6 +19260,12 @@ static neon_builtin_datum neon_builtin_data[] =
VAR4 (FIXCONV, vcvt_n, v2si, v2sf, v4si, v4sf), VAR4 (FIXCONV, vcvt_n, v2si, v2sf, v4si, v4sf),
VAR10 (SELECT, vbsl, VAR10 (SELECT, vbsl,
v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di), v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di),
VAR2 (RINT, vrintn, v2sf, v4sf),
VAR2 (RINT, vrinta, v2sf, v4sf),
VAR2 (RINT, vrintp, v2sf, v4sf),
VAR2 (RINT, vrintm, v2sf, v4sf),
VAR2 (RINT, vrintz, v2sf, v4sf),
VAR2 (RINT, vrintx, v2sf, v4sf),
VAR1 (VTBL, vtbl1, v8qi), VAR1 (VTBL, vtbl1, v8qi),
VAR1 (VTBL, vtbl2, v8qi), VAR1 (VTBL, vtbl2, v8qi),
VAR1 (VTBL, vtbl3, v8qi), VAR1 (VTBL, vtbl3, v8qi),
...@@ -19886,6 +19893,7 @@ arm_init_neon_builtins (void) ...@@ -19886,6 +19893,7 @@ arm_init_neon_builtins (void)
is_store = 1; is_store = 1;
/* Fall through. */ /* Fall through. */
case NEON_UNOP: case NEON_UNOP:
case NEON_RINT:
case NEON_BINOP: case NEON_BINOP:
case NEON_LOGICBINOP: case NEON_LOGICBINOP:
case NEON_SHIFTINSERT: case NEON_SHIFTINSERT:
...@@ -21073,6 +21081,7 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target) ...@@ -21073,6 +21081,7 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target)
NEON_ARG_COPY_TO_REG, NEON_ARG_STOP); NEON_ARG_COPY_TO_REG, NEON_ARG_STOP);
case NEON_DUP: case NEON_DUP:
case NEON_RINT:
case NEON_SPLIT: case NEON_SPLIT:
case NEON_REINTERP: case NEON_REINTERP:
return arm_expand_neon_args (target, icode, 1, type_mode, exp, fcode, return arm_expand_neon_args (target, icode, 1, type_mode, exp, fcode,
......
...@@ -58,112 +58,6 @@ ...@@ -58,112 +58,6 @@
] ]
) )
;; UNSPEC Usage:
;; Note: sin and cos are no-longer used.
;; Unspec enumerators for Neon are defined in neon.md.
;; Unspec enumerators for iwmmxt2 are defined in iwmmxt2.md
(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 ; 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_REGISTER_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_WALIGNI ; Used by the intrinsic form of the iWMMXt WALIGN 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_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 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_UNALIGNED_LOAD ; Used to represent ldr/ldrh instructions that access
; unaligned locations, on architectures which support
; that.
UNSPEC_UNALIGNED_STORE ; Same for str/strh.
UNSPEC_PIC_UNIFIED ; Create a common pic addressing form.
UNSPEC_LL ; Represent an unpaired load-register-exclusive.
UNSPEC_VRINTZ ; Represent a float to integral float rounding
; towards zero.
UNSPEC_VRINTP ; Represent a float to integral float rounding
; towards +Inf.
UNSPEC_VRINTM ; Represent a float to integral float rounding
; towards -Inf.
UNSPEC_VRINTR ; Represent a float to integral float rounding
; FPSCR rounding mode.
UNSPEC_VRINTX ; Represent a float to integral float rounding
; FPSCR rounding mode and signal inexactness.
UNSPEC_VRINTA ; Represent a float to integral float rounding
; towards nearest, ties away from zero.
])
;; UNSPEC_VOLATILE Usage:
(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_THUMB1_INTERWORK ; `prologue_thumb1_interwork' insn, used to swap
; modes from arm to thumb.
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_ATOMIC_CAS ; Represent an atomic compare swap.
VUNSPEC_ATOMIC_XCHG ; Represent an atomic exchange.
VUNSPEC_ATOMIC_OP ; Represent an atomic operation.
VUNSPEC_LL ; Represent a load-register-exclusive.
VUNSPEC_SC ; Represent a store-register-exclusive.
])
;;--------------------------------------------------------------------------- ;;---------------------------------------------------------------------------
;; Attributes ;; Attributes
...@@ -574,6 +468,11 @@ ...@@ -574,6 +468,11 @@
(define_attr "ce_count" "" (const_int 1)) (define_attr "ce_count" "" (const_int 1))
;;--------------------------------------------------------------------------- ;;---------------------------------------------------------------------------
;; Unspecs
(include "unspecs.md")
;;---------------------------------------------------------------------------
;; Mode iterators ;; Mode iterators
(include "iterators.md") (include "iterators.md")
......
...@@ -198,6 +198,9 @@ ...@@ -198,6 +198,9 @@
(define_int_iterator VRINT [UNSPEC_VRINTZ UNSPEC_VRINTP UNSPEC_VRINTM (define_int_iterator VRINT [UNSPEC_VRINTZ UNSPEC_VRINTP UNSPEC_VRINTM
UNSPEC_VRINTR UNSPEC_VRINTX UNSPEC_VRINTA]) UNSPEC_VRINTR UNSPEC_VRINTX UNSPEC_VRINTA])
(define_int_iterator NEON_VRINT [UNSPEC_NVRINTP UNSPEC_NVRINTZ UNSPEC_NVRINTM
UNSPEC_NVRINTX UNSPEC_NVRINTA UNSPEC_NVRINTN])
;;---------------------------------------------------------------------------- ;;----------------------------------------------------------------------------
;; Mode attributes ;; Mode attributes
;;---------------------------------------------------------------------------- ;;----------------------------------------------------------------------------
...@@ -483,3 +486,7 @@ ...@@ -483,3 +486,7 @@
(define_int_attr vrint_predicable [(UNSPEC_VRINTZ "yes") (UNSPEC_VRINTP "no") (define_int_attr vrint_predicable [(UNSPEC_VRINTZ "yes") (UNSPEC_VRINTP "no")
(UNSPEC_VRINTA "no") (UNSPEC_VRINTM "no") (UNSPEC_VRINTA "no") (UNSPEC_VRINTM "no")
(UNSPEC_VRINTR "yes") (UNSPEC_VRINTX "yes")]) (UNSPEC_VRINTR "yes") (UNSPEC_VRINTX "yes")])
(define_int_attr nvrint_variant [(UNSPEC_NVRINTZ "z") (UNSPEC_NVRINTP "p")
(UNSPEC_NVRINTA "a") (UNSPEC_NVRINTM "m")
(UNSPEC_NVRINTX "x") (UNSPEC_NVRINTN "n")])
...@@ -18,21 +18,6 @@ ...@@ -18,21 +18,6 @@
;; along with GCC; see the file COPYING3. If not see ;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>. ;; <http://www.gnu.org/licenses/>.
(define_c_enum "unspec" [
UNSPEC_WADDC ; Used by the intrinsic form of the iWMMXt WADDC instruction.
UNSPEC_WABS ; Used by the intrinsic form of the iWMMXt WABS instruction.
UNSPEC_WQMULWMR ; Used by the intrinsic form of the iWMMXt WQMULWMR instruction.
UNSPEC_WQMULMR ; Used by the intrinsic form of the iWMMXt WQMULMR instruction.
UNSPEC_WQMULWM ; Used by the intrinsic form of the iWMMXt WQMULWM instruction.
UNSPEC_WQMULM ; Used by the intrinsic form of the iWMMXt WQMULM instruction.
UNSPEC_WQMIAxyn ; Used by the intrinsic form of the iWMMXt WMIAxyn instruction.
UNSPEC_WQMIAxy ; Used by the intrinsic form of the iWMMXt WMIAxy instruction.
UNSPEC_TANDC ; Used by the intrinsic form of the iWMMXt TANDC instruction.
UNSPEC_TORC ; Used by the intrinsic form of the iWMMXt TORC instruction.
UNSPEC_TORVSC ; Used by the intrinsic form of the iWMMXt TORVSC instruction.
UNSPEC_TEXTRC ; Used by the intrinsic form of the iWMMXt TEXTRC instruction.
])
(define_insn "iwmmxt_wabs<mode>3" (define_insn "iwmmxt_wabs<mode>3"
[(set (match_operand:VMMX 0 "register_operand" "=y") [(set (match_operand:VMMX 0 "register_operand" "=y")
(unspec:VMMX [(match_operand:VMMX 1 "register_operand" "y")] UNSPEC_WABS))] (unspec:VMMX [(match_operand:VMMX 1 "register_operand" "y")] UNSPEC_WABS))]
......
...@@ -19,137 +19,6 @@ ...@@ -19,137 +19,6 @@
;; along with GCC; see the file COPYING3. If not see ;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>. ;; <http://www.gnu.org/licenses/>.
;; Enumerators for unspecs.
(define_c_enum "unspec" [
UNSPEC_ASHIFT_SIGNED
UNSPEC_ASHIFT_UNSIGNED
UNSPEC_LOAD_COUNT
UNSPEC_VABD
UNSPEC_VABDL
UNSPEC_VADD
UNSPEC_VADDHN
UNSPEC_VADDL
UNSPEC_VADDW
UNSPEC_VBSL
UNSPEC_VCAGE
UNSPEC_VCAGT
UNSPEC_VCEQ
UNSPEC_VCGE
UNSPEC_VCGEU
UNSPEC_VCGT
UNSPEC_VCGTU
UNSPEC_VCLS
UNSPEC_VCONCAT
UNSPEC_VCVT
UNSPEC_VCVT_N
UNSPEC_VEXT
UNSPEC_VHADD
UNSPEC_VHSUB
UNSPEC_VLD1
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 ;; Attribute used to permit string comparisons against <VQH_mnem> in
;; neon_type attribute definitions. ;; neon_type attribute definitions.
...@@ -781,6 +650,19 @@ ...@@ -781,6 +650,19 @@
(const_string "neon_fp_vmla_qqq")))] (const_string "neon_fp_vmla_qqq")))]
) )
(define_insn "neon_vrint<NEON_VRINT:nvrint_variant><VCVTF:mode>"
[(set (match_operand:VCVTF 0 "s_register_operand" "=w")
(unspec:VCVTF [(match_operand:VCVTF 1
"s_register_operand" "w")]
NEON_VRINT))]
"TARGET_NEON && TARGET_FPU_ARMV8"
"vrint<nvrint_variant>%?.f32\\t%<V_reg>0, %<V_reg>1"
[(set (attr "neon_type")
(if_then_else (match_test "<Is_d_reg>")
(const_string "neon_fp_vadd_ddd_vabs_dd")
(const_string "neon_fp_vadd_qqq_vabs_qq")))]
)
(define_insn "ior<mode>3" (define_insn "ior<mode>3"
[(set (match_operand:VDQ 0 "s_register_operand" "=w,w") [(set (match_operand:VDQ 0 "s_register_operand" "=w,w")
(ior:VDQ (match_operand:VDQ 1 "s_register_operand" "w,0") (ior:VDQ (match_operand:VDQ 1 "s_register_operand" "w,0")
......
;; UNSPEC Usage:
;; Note: sin and cos are no-longer used.
;; Unspec enumerators for Neon are defined in neon.md.
;; Unspec enumerators for iwmmxt2 are defined in iwmmxt2.md
(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 ; 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_REGISTER_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_WALIGNI ; Used by the intrinsic form of the iWMMXt WALIGN 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_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 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_UNALIGNED_LOAD ; Used to represent ldr/ldrh instructions that access
; unaligned locations, on architectures which support
; that.
UNSPEC_UNALIGNED_STORE ; Same for str/strh.
UNSPEC_PIC_UNIFIED ; Create a common pic addressing form.
UNSPEC_LL ; Represent an unpaired load-register-exclusive.
UNSPEC_VRINTZ ; Represent a float to integral float rounding
; towards zero.
UNSPEC_VRINTP ; Represent a float to integral float rounding
; towards +Inf.
UNSPEC_VRINTM ; Represent a float to integral float rounding
; towards -Inf.
UNSPEC_VRINTR ; Represent a float to integral float rounding
; FPSCR rounding mode.
UNSPEC_VRINTX ; Represent a float to integral float rounding
; FPSCR rounding mode and signal inexactness.
UNSPEC_VRINTA ; Represent a float to integral float rounding
; towards nearest, ties away from zero.
])
(define_c_enum "unspec" [
UNSPEC_WADDC ; Used by the intrinsic form of the iWMMXt WADDC instruction.
UNSPEC_WABS ; Used by the intrinsic form of the iWMMXt WABS instruction.
UNSPEC_WQMULWMR ; Used by the intrinsic form of the iWMMXt WQMULWMR instruction.
UNSPEC_WQMULMR ; Used by the intrinsic form of the iWMMXt WQMULMR instruction.
UNSPEC_WQMULWM ; Used by the intrinsic form of the iWMMXt WQMULWM instruction.
UNSPEC_WQMULM ; Used by the intrinsic form of the iWMMXt WQMULM instruction.
UNSPEC_WQMIAxyn ; Used by the intrinsic form of the iWMMXt WMIAxyn instruction.
UNSPEC_WQMIAxy ; Used by the intrinsic form of the iWMMXt WMIAxy instruction.
UNSPEC_TANDC ; Used by the intrinsic form of the iWMMXt TANDC instruction.
UNSPEC_TORC ; Used by the intrinsic form of the iWMMXt TORC instruction.
UNSPEC_TORVSC ; Used by the intrinsic form of the iWMMXt TORVSC instruction.
UNSPEC_TEXTRC ; Used by the intrinsic form of the iWMMXt TEXTRC instruction.
])
;; UNSPEC_VOLATILE Usage:
(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_THUMB1_INTERWORK ; `prologue_thumb1_interwork' insn, used to swap
; modes from arm to thumb.
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_ATOMIC_CAS ; Represent an atomic compare swap.
VUNSPEC_ATOMIC_XCHG ; Represent an atomic exchange.
VUNSPEC_ATOMIC_OP ; Represent an atomic operation.
VUNSPEC_LL ; Represent a load-register-exclusive.
VUNSPEC_SC ; Represent a store-register-exclusive.
])
;; Enumerators for NEON unspecs.
(define_c_enum "unspec" [
UNSPEC_ASHIFT_SIGNED
UNSPEC_ASHIFT_UNSIGNED
UNSPEC_LOAD_COUNT
UNSPEC_VABD
UNSPEC_VABDL
UNSPEC_VADD
UNSPEC_VADDHN
UNSPEC_VADDL
UNSPEC_VADDW
UNSPEC_VBSL
UNSPEC_VCAGE
UNSPEC_VCAGT
UNSPEC_VCEQ
UNSPEC_VCGE
UNSPEC_VCGEU
UNSPEC_VCGT
UNSPEC_VCGTU
UNSPEC_VCLS
UNSPEC_VCONCAT
UNSPEC_VCVT
UNSPEC_VCVT_N
UNSPEC_VEXT
UNSPEC_VHADD
UNSPEC_VHSUB
UNSPEC_VLD1
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
UNSPEC_NVRINTZ
UNSPEC_NVRINTP
UNSPEC_NVRINTM
UNSPEC_NVRINTX
UNSPEC_NVRINTA
UNSPEC_NVRINTN
])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment