;; Split a predicated instruction whose predicate is unused into an
;; unpredicated instruction.
(define_split
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
(match_operand:SI 4 "aarch64_sve_gp_strictness")
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
<SVE_COND_FP>))]
"TARGET_SVE
&& reload_completed
&& INTVAL (operands[4]) == SVE_RELAXED_GP"
[(set (match_dup 0)
- (SVE_UNPRED_FP_BINARY:SVE_FULL_F_BF (match_dup 2) (match_dup 3)))]
+ (SVE_UNPRED_FP_BINARY:SVE_FULL_F_B16B16 (match_dup 2) (match_dup 3)))]
)
;; Unpredicated floating-point binary operations (post-RA only).
;; These are generated by the split above.
(define_insn "*post_ra_<sve_fp_op><mode>3"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand" "=w")
- (SVE_UNPRED_FP_BINARY:SVE_FULL_F_BF
- (match_operand:SVE_FULL_F_BF 1 "register_operand" "w")
- (match_operand:SVE_FULL_F_BF 2 "register_operand" "w")))]
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand" "=w")
+ (SVE_UNPRED_FP_BINARY:SVE_FULL_F_B16B16
+ (match_operand:SVE_FULL_F_B16B16 1 "register_operand" "w")
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand" "w")))]
"TARGET_SVE && reload_completed"
"<b><sve_fp_op>\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>")
;; Unpredicated floating-point binary operations that need to be predicated
;; for SVE.
(define_expand "<optab><mode>3"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_dup 3)
(const_int SVE_RELAXED_GP)
- (match_operand:SVE_FULL_F_BF 1 "<sve_pred_fp_rhs1_operand>")
- (match_operand:SVE_FULL_F_BF 2 "<sve_pred_fp_rhs2_operand>")]
+ (match_operand:SVE_FULL_F_B16B16 1 "<sve_pred_fp_rhs1_operand>")
+ (match_operand:SVE_FULL_F_B16B16 2 "<sve_pred_fp_rhs2_operand>")]
SVE_COND_FP_BINARY_OPTAB))]
"TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
{
;; Predicated floating-point operations with merging.
(define_expand "@cond_<optab><mode>"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_dup 1)
(const_int SVE_STRICT_GP)
- (match_operand:SVE_FULL_F_BF 2 "<sve_pred_fp_rhs1_operand>")
- (match_operand:SVE_FULL_F_BF 3 "<sve_pred_fp_rhs2_operand>")]
+ (match_operand:SVE_FULL_F_B16B16 2 "<sve_pred_fp_rhs1_operand>")
+ (match_operand:SVE_FULL_F_B16B16 3 "<sve_pred_fp_rhs2_operand>")]
SVE_COND_FP_BINARY)
- (match_operand:SVE_FULL_F_BF 4 "aarch64_simd_reg_or_zero")]
+ (match_operand:SVE_FULL_F_B16B16 4 "aarch64_simd_reg_or_zero")]
UNSPEC_SEL))]
"TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
)
;; Predicated floating-point operations, merging with the first input.
(define_insn_and_rewrite "*cond_<optab><mode>_2_relaxed"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_operand 4)
(const_int SVE_RELAXED_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
SVE_COND_FP_BINARY)
(match_dup 2)]
UNSPEC_SEL))]
)
(define_insn "*cond_<optab><mode>_2_strict"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_dup 1)
(const_int SVE_STRICT_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
SVE_COND_FP_BINARY)
(match_dup 2)]
UNSPEC_SEL))]
;; Predicated floating-point operations, merging with the second input.
(define_insn_and_rewrite "*cond_<optab><mode>_3_relaxed"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_operand 4)
(const_int SVE_RELAXED_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
SVE_COND_FP_BINARY)
(match_dup 3)]
UNSPEC_SEL))]
)
(define_insn "*cond_<optab><mode>_3_strict"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_dup 1)
(const_int SVE_STRICT_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
SVE_COND_FP_BINARY)
(match_dup 3)]
UNSPEC_SEL))]
;; Predicated floating-point operations, merging with an independent value.
(define_insn_and_rewrite "*cond_<optab><mode>_any_relaxed"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_operand 5)
(const_int SVE_RELAXED_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
SVE_COND_FP_BINARY)
- (match_operand:SVE_FULL_F_BF 4 "aarch64_simd_reg_or_zero")]
+ (match_operand:SVE_FULL_F_B16B16 4 "aarch64_simd_reg_or_zero")]
UNSPEC_SEL))]
"TARGET_SVE
&& (<supports_bf16> || !<is_bf16>)
)
(define_insn_and_rewrite "*cond_<optab><mode>_any_strict"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_dup 1)
(const_int SVE_STRICT_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
SVE_COND_FP_BINARY)
- (match_operand:SVE_FULL_F_BF 4 "aarch64_simd_reg_or_zero")]
+ (match_operand:SVE_FULL_F_B16B16 4 "aarch64_simd_reg_or_zero")]
UNSPEC_SEL))]
"TARGET_SVE
&& (<supports_bf16> || !<is_bf16>)
;; Unpredicated multiplication by selected lanes.
(define_insn "@aarch64_mul_lane_<mode>"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand" "=w")
- (mult:SVE_FULL_F_BF
- (unspec:SVE_FULL_F_BF
- [(match_operand:SVE_FULL_F_BF 2 "register_operand" "<sve_lane_con>")
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand" "=w")
+ (mult:SVE_FULL_F_B16B16
+ (unspec:SVE_FULL_F_B16B16
+ [(match_operand:SVE_FULL_F_B16B16 2 "register_operand" "<sve_lane_con>")
(match_operand:SI 3 "const_int_operand")]
UNSPEC_SVE_LANE_SELECT)
- (match_operand:SVE_FULL_F_BF 1 "register_operand" "w")))]
+ (match_operand:SVE_FULL_F_B16B16 1 "register_operand" "w")))]
"TARGET_SVE"
"<b>fmul\t%0.<Vetype>, %1.<Vetype>, %2.<Vetype>[%3]"
)
;; by providing this, but we need to use UNSPECs since rtx logical ops
;; aren't defined for floating-point modes.
(define_insn "*<optab><mode>3"
- [(set (match_operand:SVE_F 0 "register_operand" "=w")
- (unspec:SVE_F
- [(match_operand:SVE_F 1 "register_operand" "w")
- (match_operand:SVE_F 2 "register_operand" "w")]
+ [(set (match_operand:SVE_F_BF 0 "register_operand" "=w")
+ (unspec:SVE_F_BF
+ [(match_operand:SVE_F_BF 1 "register_operand" "w")
+ (match_operand:SVE_F_BF 2 "register_operand" "w")]
LOGICALF))]
"TARGET_SVE"
"<logicalf_op>\t%0.d, %1.d, %2.d"
;; Unpredicated floating-point ternary operations.
(define_expand "<optab><mode>4"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_dup 4)
(const_int SVE_RELAXED_GP)
- (match_operand:SVE_FULL_F_BF 1 "register_operand")
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 1 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")]
SVE_COND_FP_TERNARY))]
"TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
{
;; Predicated floating-point ternary operations.
(define_insn "@aarch64_pred_<optab><mode>"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
(match_operand:SI 5 "aarch64_sve_gp_strictness")
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")
- (match_operand:SVE_FULL_F_BF 4 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
SVE_COND_FP_TERNARY))]
"TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
{@ [ cons: =0 , 1 , %2 , 3 , 4 ; attrs: movprfx , is_rev ]
;; Predicated floating-point ternary operations with merging.
(define_expand "@cond_<optab><mode>"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_dup 1)
(const_int SVE_STRICT_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")
- (match_operand:SVE_FULL_F_BF 4 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
SVE_COND_FP_TERNARY)
- (match_operand:SVE_FULL_F_BF 5 "aarch64_simd_reg_or_zero")]
+ (match_operand:SVE_FULL_F_B16B16 5 "aarch64_simd_reg_or_zero")]
UNSPEC_SEL))]
"TARGET_SVE && (<supports_bf16> || !<is_bf16>)"
{
;; Predicated floating-point ternary operations, merging with the
;; third input.
(define_insn_and_rewrite "*cond_<optab><mode>_4_relaxed"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_operand 5)
(const_int SVE_RELAXED_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")
- (match_operand:SVE_FULL_F_BF 4 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
SVE_COND_FP_TERNARY)
(match_dup 4)]
UNSPEC_SEL))]
)
(define_insn "*cond_<optab><mode>_4_strict"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_dup 1)
(const_int SVE_STRICT_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")
- (match_operand:SVE_FULL_F_BF 4 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
SVE_COND_FP_TERNARY)
(match_dup 4)]
UNSPEC_SEL))]
;; Predicated floating-point ternary operations, merging with an
;; independent value.
(define_insn_and_rewrite "*cond_<optab><mode>_any_relaxed"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_operand 6)
(const_int SVE_RELAXED_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")
- (match_operand:SVE_FULL_F_BF 4 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
SVE_COND_FP_TERNARY)
- (match_operand:SVE_FULL_F_BF 5 "aarch64_simd_reg_or_zero")]
+ (match_operand:SVE_FULL_F_B16B16 5 "aarch64_simd_reg_or_zero")]
UNSPEC_SEL))]
"TARGET_SVE
&& (<supports_bf16> || !<is_bf16>)
)
(define_insn_and_rewrite "*cond_<optab><mode>_any_strict"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
[(match_operand:<VPRED> 1 "register_operand")
- (unspec:SVE_FULL_F_BF
+ (unspec:SVE_FULL_F_B16B16
[(match_dup 1)
(const_int SVE_STRICT_GP)
- (match_operand:SVE_FULL_F_BF 2 "register_operand")
- (match_operand:SVE_FULL_F_BF 3 "register_operand")
- (match_operand:SVE_FULL_F_BF 4 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 2 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 3 "register_operand")
+ (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
SVE_COND_FP_TERNARY)
- (match_operand:SVE_FULL_F_BF 5 "aarch64_simd_reg_or_zero")]
+ (match_operand:SVE_FULL_F_B16B16 5 "aarch64_simd_reg_or_zero")]
UNSPEC_SEL))]
"TARGET_SVE
&& (<supports_bf16> || !<is_bf16>)
;; Unpredicated FMLA and FMLS by selected lanes. It doesn't seem worth using
;; (fma ...) since target-independent code won't understand the indexing.
(define_insn "@aarch64_<optab>_lane_<mode>"
- [(set (match_operand:SVE_FULL_F_BF 0 "register_operand")
- (unspec:SVE_FULL_F_BF
- [(match_operand:SVE_FULL_F_BF 1 "register_operand")
- (unspec:SVE_FULL_F_BF
- [(match_operand:SVE_FULL_F_BF 2 "register_operand")
+ [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
+ [(match_operand:SVE_FULL_F_B16B16 1 "register_operand")
+ (unspec:SVE_FULL_F_B16B16
+ [(match_operand:SVE_FULL_F_B16B16 2 "register_operand")
(match_operand:SI 3 "const_int_operand")]
UNSPEC_SVE_LANE_SELECT)
- (match_operand:SVE_FULL_F_BF 4 "register_operand")]
+ (match_operand:SVE_FULL_F_B16B16 4 "register_operand")]
SVE_FP_TERNARY_LANE))]
"TARGET_SVE"
{@ [ cons: =0 , 1 , 2 , 4 ; attrs: movprfx ]