@@ -623,7 +623,7 @@ (define_insn "altivec_eqv1ti"
[(set (match_operand:V1TI 0 "altivec_register_operand" "=v")
(eq:V1TI (match_operand:V1TI 1 "altivec_register_operand" "v")
(match_operand:V1TI 2 "altivec_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vcmpequq %0,%1,%2"
[(set_attr "type" "veccmpfx")])
@@ -647,7 +647,7 @@ (define_insn "*altivec_gtv1ti"
[(set (match_operand:V1TI 0 "altivec_register_operand" "=v")
(gt:V1TI (match_operand:V1TI 1 "altivec_register_operand" "v")
(match_operand:V1TI 2 "altivec_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vcmpgtsq %0,%1,%2"
[(set_attr "type" "veccmpfx")])
@@ -663,7 +663,7 @@ (define_insn "*altivec_gtuv1ti"
[(set (match_operand:V1TI 0 "altivec_register_operand" "=v")
(gtu:V1TI (match_operand:V1TI 1 "altivec_register_operand" "v")
(match_operand:V1TI 2 "altivec_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vcmpgtuq %0,%1,%2"
[(set_attr "type" "veccmpfx")])
@@ -882,7 +882,7 @@ (define_insn "vs<SLDB_lr>db_<mode>"
(match_operand:VI2 2 "register_operand" "v")
(match_operand:QI 3 "const_0_to_12_operand" "n")]
VSHIFT_DBL_LR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vs<SLDB_lr>dbi %0,%1,%2,%3"
[(set_attr "type" "vecsimple")])
@@ -890,7 +890,7 @@ (define_expand "vstrir_<mode>"
[(set (match_operand:VIshort 0 "altivec_register_operand")
(unspec:VIshort [(match_operand:VIshort 1 "altivec_register_operand")]
UNSPEC_VSTRIR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_vstrir_direct_<mode> (operands[0], operands[1]));
@@ -904,7 +904,7 @@ (define_insn "vstrir_direct_<mode>"
(unspec:VIshort
[(match_operand:VIshort 1 "altivec_register_operand" "v")]
UNSPEC_VSTRIR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vstri<wd>r %0,%1"
[(set_attr "type" "vecsimple")])
@@ -915,7 +915,7 @@ (define_insn "vstrir_direct_<mode>"
(define_expand "vstrir_p_<mode>"
[(match_operand:SI 0 "gpc_reg_operand")
(match_operand:VIshort 1 "altivec_register_operand")]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
rtx scratch = gen_reg_rtx (<MODE>mode);
if (BYTES_BIG_ENDIAN)
@@ -934,7 +934,7 @@ (define_insn "vstrir_p_direct_<mode>"
(set (reg:CC CR6_REGNO)
(unspec:CC [(match_dup 1)]
UNSPEC_VSTRIR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vstri<wd>r. %0,%1"
[(set_attr "type" "vecsimple")])
@@ -942,7 +942,7 @@ (define_expand "vstril_<mode>"
[(set (match_operand:VIshort 0 "altivec_register_operand")
(unspec:VIshort [(match_operand:VIshort 1 "altivec_register_operand")]
UNSPEC_VSTRIR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_vstril_direct_<mode> (operands[0], operands[1]));
@@ -956,7 +956,7 @@ (define_insn "vstril_direct_<mode>"
(unspec:VIshort
[(match_operand:VIshort 1 "altivec_register_operand" "v")]
UNSPEC_VSTRIL))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vstri<wd>l %0,%1"
[(set_attr "type" "vecsimple")])
@@ -967,7 +967,7 @@ (define_insn "vstril_direct_<mode>"
(define_expand "vstril_p_<mode>"
[(match_operand:SI 0 "gpc_reg_operand")
(match_operand:VIshort 1 "altivec_register_operand")]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
rtx scratch = gen_reg_rtx (<MODE>mode);
if (BYTES_BIG_ENDIAN)
@@ -986,7 +986,7 @@ (define_insn "vstril_p_direct_<mode>"
(set (reg:CC CR6_REGNO)
(unspec:CC [(match_dup 1)]
UNSPEC_VSTRIR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vstri<wd>l. %0,%1"
[(set_attr "type" "vecsimple")])
@@ -1614,7 +1614,7 @@ (define_expand "vec_widen_umult_even_v2di"
[(use (match_operand:V1TI 0 "register_operand"))
(use (match_operand:V2DI 1 "register_operand"))
(use (match_operand:V2DI 2 "register_operand"))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_altivec_vmuleud (operands[0], operands[1], operands[2]));
@@ -1640,7 +1640,7 @@ (define_expand "vec_widen_smult_even_v2di"
[(use (match_operand:V1TI 0 "register_operand"))
(use (match_operand:V2DI 1 "register_operand"))
(use (match_operand:V2DI 2 "register_operand"))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_altivec_vmulesd (operands[0], operands[1], operands[2]));
@@ -1718,7 +1718,7 @@ (define_expand "vec_widen_umult_odd_v2di"
[(use (match_operand:V1TI 0 "register_operand"))
(use (match_operand:V2DI 1 "register_operand"))
(use (match_operand:V2DI 2 "register_operand"))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_altivec_vmuloud (operands[0], operands[1], operands[2]));
@@ -1744,7 +1744,7 @@ (define_expand "vec_widen_smult_odd_v2di"
[(use (match_operand:V1TI 0 "register_operand"))
(use (match_operand:V2DI 1 "register_operand"))
(use (match_operand:V2DI 2 "register_operand"))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_altivec_vmulosd (operands[0], operands[1], operands[2]));
@@ -1839,7 +1839,7 @@ (define_insn "altivec_vmuleud"
(unspec:V1TI [(match_operand:V2DI 1 "register_operand" "v")
(match_operand:V2DI 2 "register_operand" "v")]
UNSPEC_VMULEUD))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmuleud %0,%1,%2"
[(set_attr "type" "veccomplex")])
@@ -1857,7 +1857,7 @@ (define_insn "altivec_vmuloud"
(unspec:V1TI [(match_operand:V2DI 1 "register_operand" "v")
(match_operand:V2DI 2 "register_operand" "v")]
UNSPEC_VMULOUD))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmuloud %0,%1,%2"
[(set_attr "type" "veccomplex")])
@@ -1875,7 +1875,7 @@ (define_insn "altivec_vmulesd"
(unspec:V1TI [(match_operand:V2DI 1 "register_operand" "v")
(match_operand:V2DI 2 "register_operand" "v")]
UNSPEC_VMULESD))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmulesd %0,%1,%2"
[(set_attr "type" "veccomplex")])
@@ -1893,7 +1893,7 @@ (define_insn "altivec_vmulosd"
(unspec:V1TI [(match_operand:V2DI 1 "register_operand" "v")
(match_operand:V2DI 2 "register_operand" "v")]
UNSPEC_VMULOSD))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmulosd %0,%1,%2"
[(set_attr "type" "veccomplex")])
@@ -1994,7 +1994,7 @@ (define_insn "altivec_vrlq"
[(set (match_operand:V1TI 0 "vsx_register_operand" "=v")
(rotate:V1TI (match_operand:V1TI 1 "vsx_register_operand" "v")
(match_operand:V1TI 2 "vsx_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
;; rotate amount in needs to be in bits[57:63] of operand2.
"vrlq %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -2015,7 +2015,7 @@ (define_expand "altivec_vrlqmi"
(match_operand:V1TI 2 "vsx_register_operand")
(match_operand:V1TI 3 "vsx_register_operand")]
UNSPEC_VRLMI))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
/* Mask bit begin, end fields need to be in bits [41:55] of 128-bit operand2.
Shift amount in needs to be put in bits[57:63] of 128-bit operand2. */
@@ -2033,7 +2033,7 @@ (define_insn "altivec_vrlqmi_inst"
(match_operand:V1TI 2 "vsx_register_operand" "0")
(match_operand:V1TI 3 "vsx_register_operand" "v")]
UNSPEC_VRLMI))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vrlqmi %0,%1,%3"
[(set_attr "type" "veclogical")])
@@ -2051,7 +2051,7 @@ (define_expand "altivec_vrlqnm"
(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand")
(match_operand:V1TI 2 "vsx_register_operand")]
UNSPEC_VRLNM))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
/* Shift amount in needs to be put in bits[57:63] of 128-bit operand2. */
rtx tmp = gen_reg_rtx (V1TImode);
@@ -2066,7 +2066,7 @@ (define_insn "altivec_vrlqnm_inst"
(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "v")
(match_operand:V1TI 2 "vsx_register_operand" "v")]
UNSPEC_VRLNM))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
;; rotate and mask bits need to be in upper 64-bits of operand2.
"vrlqnm %0,%1,%2"
[(set_attr "type" "veclogical")])
@@ -2119,7 +2119,7 @@ (define_insn "altivec_vslq_<mode>"
[(set (match_operand:VEC_TI 0 "vsx_register_operand" "=v")
(ashift:VEC_TI (match_operand:VEC_TI 1 "vsx_register_operand" "v")
(match_operand:VEC_TI 2 "vsx_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
/* Shift amount in needs to be in bits[57:63] of 128-bit operand. */
"vslq %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -2136,7 +2136,7 @@ (define_insn "altivec_vsrq_<mode>"
[(set (match_operand:VEC_TI 0 "vsx_register_operand" "=v")
(lshiftrt:VEC_TI (match_operand:VEC_TI 1 "vsx_register_operand" "v")
(match_operand:VEC_TI 2 "vsx_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
/* Shift amount in needs to be in bits[57:63] of 128-bit operand. */
"vsrq %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -2153,7 +2153,7 @@ (define_insn "altivec_vsraq"
[(set (match_operand:V1TI 0 "vsx_register_operand" "=v")
(ashiftrt:V1TI (match_operand:V1TI 1 "vsx_register_operand" "v")
(match_operand:V1TI 2 "vsx_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
/* Shift amount in needs to be in bits[57:63] of 128-bit operand. */
"vsraq %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -2768,7 +2768,7 @@ (define_insn "altivec_vcmpequt_p"
(set (match_operand:V1TI 0 "altivec_register_operand" "=v")
(eq:V1TI (match_dup 1)
(match_dup 2)))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vcmpequq. %0,%1,%2"
[(set_attr "type" "veccmpfx")])
@@ -2804,7 +2804,7 @@ (define_insn "*altivec_vcmpgtst_p"
(set (match_operand:V1TI 0 "register_operand" "=v")
(gt:V1TI (match_dup 1)
(match_dup 2)))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vcmpgtsq. %0,%1,%2"
[(set_attr "type" "veccmpfx")])
@@ -2828,7 +2828,7 @@ (define_insn "*altivec_vcmpgtut_p"
(set (match_operand:V1TI 0 "register_operand" "=v")
(gtu:V1TI (match_dup 1)
(match_dup 2)))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vcmpgtuq. %0,%1,%2"
[(set_attr "type" "veccmpfx")])
@@ -4583,7 +4583,7 @@ (define_insn "vcfuged"
(unspec:V2DI [(match_operand:V2DI 1 "altivec_register_operand" "v")
(match_operand:V2DI 2 "altivec_register_operand" "v")]
UNSPEC_VCFUGED))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vcfuged %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4592,7 +4592,7 @@ (define_insn "vclzdm"
(unspec:V2DI [(match_operand:V2DI 1 "altivec_register_operand" "v")
(match_operand:V2DI 2 "altivec_register_operand" "v")]
UNSPEC_VCLZDM))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vclzdm %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4601,7 +4601,7 @@ (define_insn "vctzdm"
(unspec:V2DI [(match_operand:V2DI 1 "altivec_register_operand" "v")
(match_operand:V2DI 2 "altivec_register_operand" "v")]
UNSPEC_VCTZDM))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vctzdm %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4610,7 +4610,7 @@ (define_insn "vpdepd"
(unspec:V2DI [(match_operand:V2DI 1 "altivec_register_operand" "v")
(match_operand:V2DI 2 "altivec_register_operand" "v")]
UNSPEC_VPDEPD))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vpdepd %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4619,7 +4619,7 @@ (define_insn "vpextd"
(unspec:V2DI [(match_operand:V2DI 1 "altivec_register_operand" "v")
(match_operand:V2DI 2 "altivec_register_operand" "v")]
UNSPEC_VPEXTD))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vpextd %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4628,7 +4628,7 @@ (define_insn "vgnb"
(unspec:DI [(match_operand:V2DI 1 "altivec_register_operand" "v")
(match_operand:QI 2 "u3bit_cint_operand" "n")]
UNSPEC_VGNB))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vgnb %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4637,7 +4637,7 @@ (define_insn "vclrlb"
(unspec:V16QI [(match_operand:V16QI 1 "altivec_register_operand" "v")
(match_operand:SI 2 "gpc_reg_operand" "r")]
UNSPEC_VCLRLB))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
return "vclrlb %0,%1,%2";
@@ -4651,7 +4651,7 @@ (define_insn "vclrrb"
(unspec:V16QI [(match_operand:V16QI 1 "altivec_register_operand" "v")
(match_operand:SI 2 "gpc_reg_operand" "r")]
UNSPEC_VCLRRB))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
return "vclrrb %0,%1,%2";
@@ -603,7 +603,7 @@ (define_predicate "easy_fp_constant"
/* Constants that can be generated with ISA 3.1 instructions are easy. */
vec_const_128bit_type vsx_const;
- if (TARGET_POWER10 && vec_const_128bit_to_bytes (op, mode, &vsx_const))
+ if (TARGET_P10_VECTOR && vec_const_128bit_to_bytes (op, mode, &vsx_const))
{
if (constant_generates_lxvkq (&vsx_const))
return true;
@@ -671,8 +671,7 @@ (define_predicate "easy_vector_constant_ieee128"
vec_const_128bit_type vsx_const;
/* Can we generate the LXVKQ instruction? */
- if (!TARGET_IEEE128_CONSTANT || !TARGET_FLOAT128_HW || !TARGET_POWER10
- || !TARGET_VSX)
+ if (!TARGET_IEEE128_CONSTANT || !TARGET_FLOAT128_HW || !TARGET_P10_VECTOR)
return false;
return (vec_const_128bit_to_bytes (op, mode, &vsx_const)
@@ -732,7 +731,7 @@ (define_predicate "easy_vector_constant"
/* Constants that can be generated with ISA 3.1 instructions are
easy. */
vec_const_128bit_type vsx_const;
- if (TARGET_POWER10 && vec_const_128bit_to_bytes (op, mode, &vsx_const))
+ if (TARGET_P10_VECTOR && vec_const_128bit_to_bytes (op, mode, &vsx_const))
{
if (constant_generates_lxvkq (&vsx_const))
return true;
@@ -129,13 +129,14 @@ rs6000_invalid_builtin (enum rs6000_gen_builtins fncode)
case ENB_HTM:
error ("%qs requires the %qs option", name, "-mhtm");
break;
- case ENB_P10:
- error ("%qs requires the %qs option", name, "-mcpu=power10");
- break;
case ENB_P10_64:
error ("%qs requires the %qs option and either the %qs or %qs option",
name, "-mcpu=power10", "-m64", "-mpowerpc64");
break;
+ case ENB_P10V:
+ error ("%qs requires the %qs and %qs options", name, "-mcpu=power10",
+ "-mvsx");
+ break;
case ENB_MMA:
error ("%qs requires the %qs option", name, "-mmma");
break;
@@ -174,10 +175,10 @@ rs6000_builtin_is_supported (enum rs6000_gen_builtins fncode)
return TARGET_MODULO && TARGET_POWERPC64;
case ENB_P9V:
return TARGET_P9_VECTOR;
- case ENB_P10:
- return TARGET_POWER10;
case ENB_P10_64:
return TARGET_POWER10 && TARGET_POWERPC64;
+ case ENB_P10V:
+ return TARGET_P10_VECTOR;
case ENB_ALTIVEC:
return TARGET_ALTIVEC;
case ENB_VSX:
@@ -301,7 +302,7 @@ rs6000_builtin_md_vectorized_function (tree fndecl, tree type_out,
machine_mode out_vmode = TYPE_MODE (type_out);
/* Power10 supported vectorized built-in functions. */
- if (TARGET_POWER10
+ if (TARGET_P10_VECTOR
&& in_vmode == out_vmode
&& VECTOR_UNIT_ALTIVEC_OR_VSX_P (in_vmode))
{
@@ -2906,7 +2906,8 @@
TTEST ttest {htm,htmcr}
-[power10]
+; Power10 vector builtins.
+[power10-vector]
const vbq __builtin_altivec_cmpge_1ti (vsq, vsq);
CMPGE_1TI vector_nltv1ti {}
@@ -229,8 +229,8 @@ enum bif_stanza
BSTZ_DFP,
BSTZ_CRYPTO,
BSTZ_HTM,
- BSTZ_P10,
BSTZ_P10_64,
+ BSTZ_P10V,
BSTZ_MMA,
NUMBIFSTANZAS
};
@@ -263,8 +263,8 @@ static stanza_entry stanza_map[NUMBIFSTANZAS] =
{ "dfp", BSTZ_DFP },
{ "crypto", BSTZ_CRYPTO },
{ "htm", BSTZ_HTM },
- { "power10", BSTZ_P10 },
{ "power10-64", BSTZ_P10_64 },
+ { "power10-vector", BSTZ_P10V },
{ "mma", BSTZ_MMA }
};
@@ -288,8 +288,8 @@ static const char *enable_string[NUMBIFSTANZAS] =
"ENB_DFP",
"ENB_CRYPTO",
"ENB_HTM",
- "ENB_P10",
"ENB_P10_64",
+ "ENB_P10V",
"ENB_MMA"
};
@@ -2247,8 +2247,8 @@ write_decls (void)
fprintf (header_file, " ENB_DFP,\n");
fprintf (header_file, " ENB_CRYPTO,\n");
fprintf (header_file, " ENB_HTM,\n");
- fprintf (header_file, " ENB_P10,\n");
fprintf (header_file, " ENB_P10_64,\n");
+ fprintf (header_file, " ENB_P10V,\n");
fprintf (header_file, " ENB_MMA\n");
fprintf (header_file, "};\n\n");
@@ -2803,7 +2803,7 @@ expand_block_move (rtx operands[], bool might_overlap)
}
else if (TARGET_BLOCK_OPS_UNALIGNED_VSX
/* Only use lxvl/stxvl on 64bit POWER10. */
- && TARGET_POWER10
+ && TARGET_P10_VECTOR
&& TARGET_64BIT
&& bytes < 16
&& orig_bytes > 16
@@ -4769,7 +4769,7 @@ rs6000_option_override_internal (bool global_init_p)
param_max_completely_peeled_insns, 400);
/* The lxvl/stxvl instructions don't perform well before Power10. */
- if (TARGET_POWER10)
+ if (TARGET_P10_VECTOR)
SET_OPTION_IF_UNSET (&global_options, &global_options_set,
param_vect_partial_vector_usage, 1);
else
@@ -6708,7 +6708,8 @@ output_vec_const_move (rtx *operands)
}
vec_const_128bit_type vsx_const;
- if (TARGET_POWER10 && vec_const_128bit_to_bytes (vec, mode, &vsx_const))
+ if (TARGET_P10_VECTOR
+ && vec_const_128bit_to_bytes (vec, mode, &vsx_const))
{
unsigned imm = constant_generates_lxvkq (&vsx_const);
if (imm)
@@ -29123,8 +29124,7 @@ constant_generates_lxvkq (vec_const_128bit_type *vsx_const)
{
/* Is the instruction supported with power10 code generation, IEEE 128-bit
floating point hardware and VSX registers are available. */
- if (!TARGET_IEEE128_CONSTANT || !TARGET_FLOAT128_HW || !TARGET_POWER10
- || !TARGET_VSX)
+ if (!TARGET_IEEE128_CONSTANT || !TARGET_FLOAT128_HW || !TARGET_P10_VECTOR)
return 0;
/* All of the constants that are generated by LXVKQ have the bottom 3 words
@@ -501,6 +501,9 @@ extern int rs6000_vector_align[];
#define TARGET_MINMAX (TARGET_HARD_FLOAT && TARGET_PPC_GFXOPT \
&& (TARGET_P9_MINMAX || !flag_trapping_math))
+/* ISA 3.1 vector instruction support. */
+#define TARGET_P10_VECTOR (TARGET_POWER10 && TARGET_VSX)
+
/* In switching from using target_flags to using rs6000_isa_flags, the options
machinery creates OPTION_MASK_<xxx> instead of MASK_<xxx>. The MASK_<xxxx>
options that have not yet been replaced by their OPTION_MASK_<xxx>
@@ -355,7 +355,7 @@ (define_attr "cpu"
(const (symbol_ref "(enum attr_cpu) rs6000_tune")))
;; The ISA we implement.
-(define_attr "isa" "any,p5,p6,p7,p7v,p8,p8v,p9,p9v,p9kf,p9tf,p10"
+(define_attr "isa" "any,p5,p6,p7,p7v,p8,p8v,p9,p9v,p9kf,p9tf,p10,p10v"
(const_string "any"))
;; Is this alternative enabled for the current CPU/ISA/etc.?
@@ -407,6 +407,10 @@ (define_attr "enabled" ""
(and (eq_attr "isa" "p10")
(match_test "TARGET_POWER10"))
(const_int 1)
+
+ (and (eq_attr "isa" "p10v")
+ (match_test "TARGET_P10_VECTOR"))
+ (const_int 1)
] (const_int 0)))
;; If this instruction is microcoded on the CELL processor
@@ -3305,7 +3309,7 @@ (define_insn "udivti3"
[(set (match_operand:TI 0 "altivec_register_operand" "=v")
(udiv:TI (match_operand:TI 1 "altivec_register_operand" "v")
(match_operand:TI 2 "altivec_register_operand" "v")))]
- "TARGET_POWER10 && TARGET_POWERPC64"
+ "TARGET_P10_VECTOR && TARGET_POWERPC64"
"vdivuq %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "128")])
@@ -3403,7 +3407,7 @@ (define_insn "divti3"
[(set (match_operand:TI 0 "altivec_register_operand" "=v")
(div:TI (match_operand:TI 1 "altivec_register_operand" "v")
(match_operand:TI 2 "altivec_register_operand" "v")))]
- "TARGET_POWER10 && TARGET_POWERPC64"
+ "TARGET_P10_VECTOR && TARGET_POWERPC64"
"vdivsq %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "128")])
@@ -3542,7 +3546,7 @@ (define_insn "umodti3"
[(set (match_operand:TI 0 "altivec_register_operand" "=v")
(umod:TI (match_operand:TI 1 "altivec_register_operand" "v")
(match_operand:TI 2 "altivec_register_operand" "v")))]
- "TARGET_POWER10 && TARGET_POWERPC64 && !RS6000_DISABLE_SCALAR_MODULO"
+ "TARGET_P10_VECTOR && TARGET_POWERPC64 && !RS6000_DISABLE_SCALAR_MODULO"
"vmoduq %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "128")])
@@ -3551,7 +3555,7 @@ (define_insn "modti3"
[(set (match_operand:TI 0 "altivec_register_operand" "=v")
(mod:TI (match_operand:TI 1 "altivec_register_operand" "v")
(match_operand:TI 2 "altivec_register_operand" "v")))]
- "TARGET_POWER10 && TARGET_POWERPC64 && !RS6000_DISABLE_SCALAR_MODULO"
+ "TARGET_P10_VECTOR && TARGET_POWERPC64 && !RS6000_DISABLE_SCALAR_MODULO"
"vmodsq %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "128")])
@@ -8690,7 +8694,7 @@ (define_insn "xxspltidp_<mode>_internal"
[(set (match_operand:SFDF 0 "register_operand" "=wa")
(unspec:SFDF [(match_operand:SI 1 "c32bit_cint_operand" "n")]
UNSPEC_XXSPLTIDP_CONST))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxspltidp %x0,%1"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -8699,7 +8703,7 @@ (define_insn "xxspltiw_<mode>_internal"
[(set (match_operand:SFDF 0 "register_operand" "=wa")
(unspec:SFDF [(match_operand:SI 1 "c32bit_cint_operand" "n")]
UNSPEC_XXSPLTIW_CONST))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxspltiw %x0,%1"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -8707,7 +8711,7 @@ (define_insn "xxspltiw_<mode>_internal"
(define_split
[(set (match_operand:SFDF 0 "vsx_register_operand")
(match_operand:SFDF 1 "vsx_prefixed_constant"))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
[(pc)]
{
rtx dest = operands[0];
@@ -28,7 +28,7 @@ (define_mode_iterator VEC_I [V16QI V8HI V4SI V2DI])
;; Vector int modes for comparison, shift and rotation. ISA 3.1 adds the V1TI mode
;; for the vector int128 type.
-(define_mode_iterator VEC_IC [V16QI V8HI V4SI V2DI (V1TI "TARGET_POWER10")])
+(define_mode_iterator VEC_IC [V16QI V8HI V4SI V2DI (V1TI "TARGET_P10_VECTOR")])
;; 128-bit int modes
(define_mode_iterator VEC_TI [V1TI TI])
@@ -734,7 +734,7 @@ (define_expand "vector_eq_v1ti_p"
(set (match_operand:V1TI 0 "vlogical_operand")
(eq:V1TI (match_dup 1)
(match_dup 2)))])]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"")
;; This expansion handles the V16QI, V8HI, and V4SI modes in the
@@ -831,7 +831,7 @@ (define_expand "vector_ne_v1ti_p"
(set (match_operand:SI 0 "register_operand" "=r")
(eq:SI (reg:CC CR6_REGNO)
(const_int 0)))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
operands[3] = gen_reg_rtx (V1TImode);
})
@@ -877,7 +877,7 @@ (define_expand "vector_ae_v1ti_p"
(set (match_dup 0)
(xor:SI (match_dup 0)
(const_int 1)))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
operands[3] = gen_reg_rtx (V1TImode);
})
@@ -950,7 +950,7 @@ (define_expand "vector_gt_v1ti_p"
(set (match_operand:V1TI 0 "vlogical_operand")
(gt:V1TI (match_dup 1)
(match_dup 2)))])]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"")
(define_expand "vector_ge_<mode>_p"
@@ -1400,7 +1400,7 @@ (define_expand "vashl<mode>3"
[(set (match_operand:VEC_TI 0 "vsx_register_operand" "=v")
(ashift:VEC_TI (match_operand:VEC_TI 1 "vsx_register_operand")
(match_operand:VEC_TI 2 "vsx_register_operand")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
/* Shift amount in needs to be put in bits[57:63] of 128-bit operand2. */
rtx tmp = gen_reg_rtx (<MODE>mode);
@@ -1423,7 +1423,7 @@ (define_expand "vlshr<mode>3"
[(set (match_operand:VEC_TI 0 "vsx_register_operand" "=v")
(lshiftrt:VEC_TI (match_operand:VEC_TI 1 "vsx_register_operand")
(match_operand:VEC_TI 2 "vsx_register_operand")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
/* Shift amount in needs to be put into bits[57:63] of 128-bit operand2. */
rtx tmp = gen_reg_rtx (<MODE>mode);
@@ -1285,7 +1285,7 @@ (define_insn "vsx_mov<mode>_64bit"
(set_attr "isa"
"<VSisa>, <VSisa>, <VSisa>, *, *, *,
*, *, *, *, p9v, *,
- p10, p10,
+ p10v, p10v,
<VSisa>, *, *, *, *")
(set_attr "prefixed"
"*, *, *, *, *, *,
@@ -1328,7 +1328,7 @@ (define_insn "*vsx_mov<mode>_32bit"
*, *")
(set_attr "isa"
"<VSisa>, <VSisa>, <VSisa>, *, *, *,
- p10, p10,
+ p10v, p10v,
p9v, *, <VSisa>, *, *,
*, *")
(set_attr "prefixed"
@@ -1371,7 +1371,7 @@ (define_expand "vsx_store_<mode>"
(define_insn "vsx_lxvr<wd>x"
[(set (match_operand:TI 0 "vsx_register_operand" "=wa")
(zero_extend:TI (match_operand:INT_ISA3 1 "memory_operand" "Z")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"lxvr<wd>x %x0,%y1"
[(set_attr "type" "vecload")])
@@ -1380,7 +1380,7 @@ (define_insn "vsx_lxvr<wd>x"
(define_insn "vsx_stxvr<wd>x"
[(set (match_operand:INT_ISA3 0 "memory_operand" "=Z")
(truncate:INT_ISA3 (match_operand:TI 1 "vsx_register_operand" "wa")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"stxvr<wd>x %x1,%y0"
[(set_attr "type" "vecstore")])
@@ -1885,7 +1885,7 @@ (define_insn "vsx_div_v1ti"
(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "v")
(match_operand:V1TI 2 "vsx_register_operand" "v")]
UNSPEC_VSX_DIVSQ))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vdivsq %0,%1,%2"
[(set_attr "type" "div")])
@@ -1894,7 +1894,7 @@ (define_insn "vsx_udiv_v1ti"
(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "v")
(match_operand:V1TI 2 "vsx_register_operand" "v")]
UNSPEC_VSX_DIVUQ))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vdivuq %0,%1,%2"
[(set_attr "type" "div")])
@@ -1903,7 +1903,7 @@ (define_insn "vsx_dives_v1ti"
(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "v")
(match_operand:V1TI 2 "vsx_register_operand" "v")]
UNSPEC_VSX_DIVESQ))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vdivesq %0,%1,%2"
[(set_attr "type" "div")])
@@ -1912,7 +1912,7 @@ (define_insn "vsx_diveu_v1ti"
(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "v")
(match_operand:V1TI 2 "vsx_register_operand" "v")]
UNSPEC_VSX_DIVEUQ))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vdiveuq %0,%1,%2"
[(set_attr "type" "div")])
@@ -1921,7 +1921,7 @@ (define_insn "vsx_mods_v1ti"
(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "v")
(match_operand:V1TI 2 "vsx_register_operand" "v")]
UNSPEC_VSX_MODSQ))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmodsq %0,%1,%2"
[(set_attr "type" "div")])
@@ -1930,7 +1930,7 @@ (define_insn "vsx_modu_v1ti"
(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "v")
(match_operand:V1TI 2 "vsx_register_operand" "v")]
UNSPEC_VSX_MODUQ))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmoduq %0,%1,%2"
[(set_attr "type" "div")])
@@ -2212,7 +2212,7 @@ (define_insn "*xvtlsbb_internal"
[(set (match_operand:CC 0 "cc_reg_operand" "=y")
(unspec:CC [(match_operand:V16QI 1 "vsx_register_operand" "wa")]
UNSPEC_XVTLSBB))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xvtlsbb %0,%x1"
[(set_attr "type" "logical")])
@@ -2229,7 +2229,7 @@ (define_expand "xvtlsbbo"
UNSPEC_XVTLSBB))
(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(lt:SI (match_dup 2) (const_int 0)))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
operands[2] = gen_reg_rtx (CCmode);
})
@@ -2239,7 +2239,7 @@ (define_expand "xvtlsbbz"
UNSPEC_XVTLSBB))
(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(eq:SI (match_dup 2) (const_int 0)))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
operands[2] = gen_reg_rtx (CCmode);
})
@@ -3358,7 +3358,7 @@ (define_insn "xxgenpcvm_<mode>_internal"
[(match_operand:VSX_EXTRACT_I4 1 "altivec_register_operand" "v")
(match_operand:QI 2 "const_0_to_3_operand" "n")]
UNSPEC_XXGENPCV))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxgenpcv<wd>m %x0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -3366,7 +3366,7 @@ (define_expand "xxgenpcvm_<mode>"
[(use (match_operand:VSX_EXTRACT_I4 0 "register_operand"))
(use (match_operand:VSX_EXTRACT_I4 1 "register_operand"))
(use (match_operand:QI 2 "immediate_operand"))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (!BYTES_BIG_ENDIAN)
{
@@ -4217,7 +4217,7 @@ (define_expand "vextractl<mode>"
(match_operand:VI2 2 "altivec_register_operand")
(match_operand:SI 3 "register_operand")]
UNSPEC_EXTRACTL))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
{
@@ -4237,7 +4237,7 @@ (define_insn "vextractl<mode>_internal"
(match_operand:VEC_I 2 "altivec_register_operand" "v")
(match_operand:SI 3 "register_operand" "r")]
UNSPEC_EXTRACTL))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vext<du_or_d><wd>vlx %0,%1,%2,%3"
[(set_attr "type" "vecsimple")])
@@ -4247,7 +4247,7 @@ (define_expand "vextractr<mode>"
(match_operand:VI2 2 "altivec_register_operand")
(match_operand:SI 3 "register_operand")]
UNSPEC_EXTRACTR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
{
@@ -4267,7 +4267,7 @@ (define_insn "vextractr<mode>_internal"
(match_operand:VEC_I 2 "altivec_register_operand" "v")
(match_operand:SI 3 "register_operand" "r")]
UNSPEC_EXTRACTR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vext<du_or_d><wd>vrx %0,%1,%2,%3"
[(set_attr "type" "vecsimple")])
@@ -4277,7 +4277,7 @@ (define_expand "vinsertvl_<mode>"
(match_operand:VI2 2 "altivec_register_operand")
(match_operand:SI 3 "register_operand" "r")]
UNSPEC_INSERTL))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_vinsertvl_internal_<mode> (operands[0], operands[3],
@@ -4294,7 +4294,7 @@ (define_insn "vinsertvl_internal_<mode>"
(match_operand:VEC_I 2 "altivec_register_operand" "v")
(match_operand:VEC_I 3 "altivec_register_operand" "0")]
UNSPEC_INSERTL))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vins<wd>vlx %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4304,7 +4304,7 @@ (define_expand "vinsertvr_<mode>"
(match_operand:VI2 2 "altivec_register_operand")
(match_operand:SI 3 "register_operand" "r")]
UNSPEC_INSERTR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_vinsertvr_internal_<mode> (operands[0], operands[3],
@@ -4321,7 +4321,7 @@ (define_insn "vinsertvr_internal_<mode>"
(match_operand:VEC_I 2 "altivec_register_operand" "v")
(match_operand:VEC_I 3 "altivec_register_operand" "0")]
UNSPEC_INSERTR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vins<wd>vrx %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4331,7 +4331,7 @@ (define_expand "vinsertgl_<mode>"
(match_operand:VI2 2 "altivec_register_operand")
(match_operand:SI 3 "register_operand")]
UNSPEC_INSERTL))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_vinsertgl_internal_<mode> (operands[0], operands[3],
@@ -4348,7 +4348,7 @@ (define_insn "vinsertgl_internal_<mode>"
(match_operand:SI 2 "register_operand" "r")
(match_operand:VEC_I 3 "altivec_register_operand" "0")]
UNSPEC_INSERTL))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vins<wd>lx %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4358,7 +4358,7 @@ (define_expand "vinsertgr_<mode>"
(match_operand:VI2 2 "altivec_register_operand")
(match_operand:SI 3 "register_operand")]
UNSPEC_INSERTR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_vinsertgr_internal_<mode> (operands[0], operands[3],
@@ -4375,7 +4375,7 @@ (define_insn "vinsertgr_internal_<mode>"
(match_operand:SI 2 "register_operand" "r")
(match_operand:VEC_I 3 "altivec_register_operand" "0")]
UNSPEC_INSERTR))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vins<wd>rx %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -4385,7 +4385,7 @@ (define_expand "vreplace_elt_<mode>"
(match_operand:<VEC_base> 2 "register_operand")
(match_operand:QI 3 "const_0_to_3_operand")]
UNSPEC_REPLACE_ELT))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
int index;
/* Immediate value is the word index, convert to byte index and adjust for
@@ -4409,7 +4409,7 @@ (define_insn "vreplace_elt_<mode>_inst"
(match_operand:<VEC_base> 2 "register_operand" "r")
(match_operand:QI 3 "const_0_to_12_operand" "n")]
UNSPEC_REPLACE_ELT))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vins<REPLACE_ELT_char> %0,%2,%3"
[(set_attr "type" "vecsimple")])
@@ -4419,7 +4419,7 @@ (define_insn "vreplace_un_<mode>"
(match_operand:REPLACE_ELT 2 "register_operand" "r")
(match_operand:QI 3 "const_0_to_12_operand" "n")]
UNSPEC_REPLACE_UN))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vins<REPLACE_ELT_char> %0,%2,%3"
[(set_attr "type" "vecsimple")])
@@ -5084,7 +5084,7 @@ (define_insn "vsx_sign_extend_v2di_v1ti"
[(set (match_operand:V1TI 0 "vsx_register_operand" "=v")
(unspec:V1TI [(match_operand:V2DI 1 "vsx_register_operand" "v")]
UNSPEC_VSX_SIGN_EXTEND))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vextsd2q %0,%1"
[(set_attr "type" "vecexts")])
@@ -5183,7 +5183,7 @@ (define_insn "extendditi2_vector"
[(set (match_operand:TI 0 "gpc_reg_operand" "=v")
(unspec:TI [(match_operand:TI 1 "gpc_reg_operand" "v")]
UNSPEC_EXTENDDITI2))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vextsd2q %0,%1"
[(set_attr "type" "vecexts")])
@@ -5855,7 +5855,7 @@ (define_expand "vcmpnet"
(not:V1TI
(eq:V1TI (match_operand:V1TI 1 "altivec_register_operand")
(match_operand:V1TI 2 "altivec_register_operand"))))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
emit_insn (gen_eqvv1ti3 (operands[0], operands[1], operands[2]));
emit_insn (gen_one_cmplv1ti2 (operands[0], operands[0]));
@@ -6429,7 +6429,7 @@ (define_insn "vsx_<xvcvbf16>"
[(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
(unspec:V16QI [(match_operand:V16QI 1 "vsx_register_operand" "wa")]
XVCVBF16))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"<xvcvbf16> %x0,%x1"
[(set_attr "type" "vecfloat")])
@@ -6437,7 +6437,7 @@ (define_insn "vec_mtvsrbmi"
[(set (match_operand:V16QI 0 "altivec_register_operand" "=v")
(unspec:V16QI [(match_operand:QI 1 "u6bit_cint_operand" "n")]
UNSPEC_MTVSBM))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"mtvsrbmi %0,%1"
)
@@ -6445,7 +6445,7 @@ (define_insn "vec_mtvsr_<mode>"
[(set (match_operand:VSX_MM 0 "altivec_register_operand" "=v")
(unspec:VSX_MM [(match_operand:DI 1 "gpc_reg_operand" "r")]
UNSPEC_MTVSBM))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"mtvsr<wd>m %0,%1";
[(set_attr "type" "vecsimple")])
@@ -6454,7 +6454,7 @@ (define_insn "vec_cntmb_<mode>"
(unspec:DI [(match_operand:VSX_MM4 1 "altivec_register_operand" "v")
(match_operand:QI 2 "const_0_to_1_operand" "n")]
UNSPEC_VCNTMB))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vcntmb<wd> %0,%1,%2"
[(set_attr "type" "vecsimple")])
@@ -6462,7 +6462,7 @@ (define_insn "vec_extract_<mode>"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand:VSX_MM 1 "altivec_register_operand" "v")]
UNSPEC_VEXTRACT))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vextract<wd>m %0,%1"
[(set_attr "type" "vecsimple")])
@@ -6470,7 +6470,7 @@ (define_insn "vec_expand_<mode>"
[(set (match_operand:VSX_MM 0 "vsx_register_operand" "=v")
(unspec:VSX_MM [(match_operand:VSX_MM 1 "vsx_register_operand" "v")]
UNSPEC_VEXPAND))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vexpand<wd>m %0,%1"
[(set_attr "type" "vecsimple")])
@@ -6479,7 +6479,7 @@ (define_insn "dives_<mode>"
(unspec:VIlong [(match_operand:VIlong 1 "vsx_register_operand" "v")
(match_operand:VIlong 2 "vsx_register_operand" "v")]
UNSPEC_VDIVES))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vdives<wd> %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "<bits>")])
@@ -6489,7 +6489,7 @@ (define_insn "diveu_<mode>"
(unspec:VIlong [(match_operand:VIlong 1 "vsx_register_operand" "v")
(match_operand:VIlong 2 "vsx_register_operand" "v")]
UNSPEC_VDIVEU))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vdiveu<wd> %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "<bits>")])
@@ -6498,7 +6498,7 @@ (define_insn "div<mode>3"
[(set (match_operand:VIlong 0 "vsx_register_operand" "=v")
(div:VIlong (match_operand:VIlong 1 "vsx_register_operand" "v")
(match_operand:VIlong 2 "vsx_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vdivs<wd> %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "<bits>")])
@@ -6507,7 +6507,7 @@ (define_insn "udiv<mode>3"
[(set (match_operand:VIlong 0 "vsx_register_operand" "=v")
(udiv:VIlong (match_operand:VIlong 1 "vsx_register_operand" "v")
(match_operand:VIlong 2 "vsx_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vdivu<wd> %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "<bits>")])
@@ -6516,7 +6516,7 @@ (define_insn "mod<mode>3"
[(set (match_operand:VIlong 0 "vsx_register_operand" "=v")
(mod:VIlong (match_operand:VIlong 1 "vsx_register_operand" "v")
(match_operand:VIlong 2 "vsx_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmods<wd> %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "<bits>")])
@@ -6525,7 +6525,7 @@ (define_insn "umod<mode>3"
[(set (match_operand:VIlong 0 "vsx_register_operand" "=v")
(umod:VIlong (match_operand:VIlong 1 "vsx_register_operand" "v")
(match_operand:VIlong 2 "vsx_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmodu<wd> %0,%1,%2"
[(set_attr "type" "vecdiv")
(set_attr "size" "<bits>")])
@@ -6538,7 +6538,7 @@ (define_insn "smul<mode>3_highpart"
(ashiftrt
(match_operand:VIlong 2 "vsx_register_operand" "v")
(const_int 32))))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmulhs<wd> %0,%1,%2"
[(set_attr "type" "veccomplex")])
@@ -6550,7 +6550,7 @@ (define_insn "umul<mode>3_highpart"
(ashiftrt
(match_operand:VIlong 2 "vsx_register_operand" "v")
(const_int 32))))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmulhu<wd> %0,%1,%2"
[(set_attr "type" "veccomplex")])
@@ -6559,7 +6559,7 @@ (define_insn "mulv2di3"
[(set (match_operand:V2DI 0 "vsx_register_operand" "=v")
(mult:V2DI (match_operand:V2DI 1 "vsx_register_operand" "v")
(match_operand:V2DI 2 "vsx_register_operand" "v")))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmulld %0,%1,%2"
[(set_attr "type" "veccomplex")])
@@ -6569,7 +6569,7 @@ (define_insn "xxspltiw_v4si"
[(set (match_operand:V4SI 0 "register_operand" "=wa")
(unspec:V4SI [(match_operand:SI 1 "s32bit_cint_operand" "n")]
UNSPEC_XXSPLTIW))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxspltiw %x0,%1"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -6578,7 +6578,7 @@ (define_expand "xxspltiw_v4sf"
[(set (match_operand:V4SF 0 "register_operand" "=wa")
(unspec:V4SF [(match_operand:SF 1 "const_double_operand" "n")]
UNSPEC_XXSPLTIW))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
long value = rs6000_const_f32_to_i32 (operands[1]);
emit_insn (gen_xxspltiw_v4sf_inst (operands[0], GEN_INT (value)));
@@ -6589,7 +6589,7 @@ (define_insn "xxspltiw_v4sf_inst"
[(set (match_operand:V4SF 0 "register_operand" "=wa")
(unspec:V4SF [(match_operand:SI 1 "c32bit_cint_operand" "n")]
UNSPEC_XXSPLTIW))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxspltiw %x0,%1"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -6599,7 +6599,7 @@ (define_expand "xxspltidp_v2df"
[(set (match_operand:V2DF 0 "register_operand" )
(unspec:V2DF [(match_operand:SF 1 "const_double_operand")]
UNSPEC_XXSPLTIDP))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
long value = rs6000_const_f32_to_i32 (operands[1]);
rs6000_emit_xxspltidp_v2df (operands[0], value);
@@ -6610,7 +6610,7 @@ (define_insn "xxspltidp_v2df_inst"
[(set (match_operand:V2DF 0 "register_operand" "=wa")
(unspec:V2DF [(match_operand:SI 1 "c32bit_cint_operand" "n")]
UNSPEC_XXSPLTIDP))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxspltidp %x0,%1"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -6622,7 +6622,7 @@ (define_expand "xxsplti32dx_v4si"
(match_operand:QI 2 "u1bit_cint_operand" "n")
(match_operand:SI 3 "s32bit_cint_operand" "n")]
UNSPEC_XXSPLTI32DX))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
int index = INTVAL (operands[2]);
@@ -6641,7 +6641,7 @@ (define_insn "xxsplti32dx_v4si_inst"
(match_operand:QI 2 "u1bit_cint_operand" "n")
(match_operand:SI 3 "s32bit_cint_operand" "n")]
UNSPEC_XXSPLTI32DX))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxsplti32dx %x0,%2,%3"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -6652,7 +6652,7 @@ (define_expand "xxsplti32dx_v4sf"
(match_operand:QI 2 "u1bit_cint_operand" "n")
(match_operand:SF 3 "const_double_operand" "n")]
UNSPEC_XXSPLTI32DX))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
int index = INTVAL (operands[2]);
long value = rs6000_const_f32_to_i32 (operands[3]);
@@ -6670,7 +6670,7 @@ (define_insn "xxsplti32dx_v4sf_inst"
(match_operand:QI 2 "u1bit_cint_operand" "n")
(match_operand:SI 3 "s32bit_cint_operand" "n")]
UNSPEC_XXSPLTI32DX))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxsplti32dx %x0,%2,%3"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -6682,7 +6682,7 @@ (define_insn "xxblend_<mode>"
(match_operand:VM3 2 "register_operand" "wa")
(match_operand:VM3 3 "register_operand" "wa")]
UNSPEC_XXBLEND))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxblendv<VM3_char> %x0,%x1,%x2,%x3"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -6695,7 +6695,7 @@ (define_expand "xxpermx"
(match_operand:V16QI 3 "register_operand" "wa")
(match_operand:QI 4 "u8bit_cint_operand" "n")]
UNSPEC_XXPERMX))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
{
if (BYTES_BIG_ENDIAN)
emit_insn (gen_xxpermx_inst (operands[0], operands[1],
@@ -6728,7 +6728,7 @@ (define_insn "xxpermx_inst"
(match_operand:V16QI 3 "register_operand" "v")
(match_operand:QI 4 "u3bit_cint_operand" "n")]
UNSPEC_XXPERMX))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxpermx %x0,%x1,%x2,%x3,%4"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -6741,7 +6741,7 @@ (define_insn "xxeval"
(match_operand:V2DI 3 "register_operand" "wa")
(match_operand:QI 4 "u8bit_cint_operand" "n")]
UNSPEC_XXEVAL))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"xxeval %x0,%x1,%x2,%x3,%4"
[(set_attr "type" "vecperm")
(set_attr "prefixed" "yes")])
@@ -6770,7 +6770,7 @@ (define_insn "vmsumcud"
(match_operand:V2DI 2 "register_operand" "v")
(match_operand:V1TI 3 "register_operand" "v")]
UNSPEC_VMSUMCUD))]
- "TARGET_POWER10"
+ "TARGET_P10_VECTOR"
"vmsumcud %0,%1,%2,%3"
[(set_attr "type" "veccomplex")]
)
new file mode 100644
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_vsx } */
+/* { dg-options "-O2 -mdejagnu-cpu=power10 -mno-vsx" } */
+
+/* Verify there is no ICE, so ignore error messages. */
+/* { dg-excess-errors "pr116266.c" } */
+
+#include "altivec.h"
+
+vector unsigned char
+foo (vector unsigned char a, vector unsigned char b, vector unsigned char c)
+{
+ return vec_ternarylogic (a, b, c, 128);
+}