fprintf (stderr, "VIS2 ");
if (flags & MASK_VIS3)
fprintf (stderr, "VIS3 ");
+ if (flags & MASK_VIS3B)
+ fprintf (stderr, "VIS3B ");
if (flags & MASK_VIS4)
fprintf (stderr, "VIS4 ");
if (flags & MASK_VIS4B)
if (TARGET_VIS3)
target_flags |= MASK_VIS2 | MASK_VIS;
- /* -mvis4 implies -mvis3, -mvis2 and -mvis. */
- if (TARGET_VIS4)
+ /* -mvis3b implies -mvis3, -mvis2 and -mvis. */
+ if (TARGET_VIS3B)
target_flags |= MASK_VIS3 | MASK_VIS2 | MASK_VIS;
- /* -mvis4b implies -mvis4, -mvis3, -mvis2 and -mvis */
+ /* -mvis4 implies -mvis3b, -mvis3, -mvis2 and -mvis. */
+ if (TARGET_VIS4)
+ target_flags |= MASK_VIS3B | MASK_VIS3 | MASK_VIS2 | MASK_VIS;
+
+ /* -mvis4b implies -mvis4, -mvis3b, -mvis3, -mvis2 and -mvis */
if (TARGET_VIS4B)
- target_flags |= MASK_VIS4 | MASK_VIS3 | MASK_VIS2 | MASK_VIS;
+ target_flags |= MASK_VIS4 | MASK_VIS3B | MASK_VIS3 | MASK_VIS2 | MASK_VIS;
- /* Don't allow -mvis, -mvis2, -mvis3, -mvis4, -mvis4b, -mfmaf and -mfsmuld if
- FPU is disabled. */
+ /* Don't allow -mvis, -mvis2, -mvis3, -mvis3b, -mvis4, -mvis4b, -mfmaf and
+ -mfsmuld if FPU is disabled. */
if (!TARGET_FPU)
- target_flags &= ~(MASK_VIS | MASK_VIS2 | MASK_VIS3 | MASK_VIS4
- | MASK_VIS4B | MASK_FMAF | MASK_FSMULD);
+ target_flags &= ~(MASK_VIS | MASK_VIS2 | MASK_VIS3 | MASK_VIS3B
+ | MASK_VIS4 | MASK_VIS4B | MASK_FMAF | MASK_FSMULD);
/* -mvis assumes UltraSPARC+, so we are sure v9 instructions
are available; -m64 also implies v9. */
def_builtin_const ("__builtin_vis_fmean16", CODE_FOR_fmean16_vis,
SPARC_BUILTIN_FMEAN16, v4hi_ftype_v4hi_v4hi);
- def_builtin_const ("__builtin_vis_fpadd64", CODE_FOR_fpadd64_vis,
- SPARC_BUILTIN_FPADD64, di_ftype_di_di);
- def_builtin_const ("__builtin_vis_fpsub64", CODE_FOR_fpsub64_vis,
- SPARC_BUILTIN_FPSUB64, di_ftype_di_di);
def_builtin_const ("__builtin_vis_fpadds16", CODE_FOR_ssaddv4hi3,
SPARC_BUILTIN_FPADDS16, v4hi_ftype_v4hi_v4hi);
def_builtin_const ("__builtin_vis_fpsubs32s", CODE_FOR_sssubv1si3,
SPARC_BUILTIN_FPSUBS32S, v1si_ftype_v1si_v1si);
+ def_builtin_const ("__builtin_vis_fhadds", CODE_FOR_fhaddsf_vis,
+ SPARC_BUILTIN_FHADDS, sf_ftype_sf_sf);
+ def_builtin_const ("__builtin_vis_fhaddd", CODE_FOR_fhadddf_vis,
+ SPARC_BUILTIN_FHADDD, df_ftype_df_df);
+ def_builtin_const ("__builtin_vis_fhsubs", CODE_FOR_fhsubsf_vis,
+ SPARC_BUILTIN_FHSUBS, sf_ftype_sf_sf);
+ def_builtin_const ("__builtin_vis_fhsubd", CODE_FOR_fhsubdf_vis,
+ SPARC_BUILTIN_FHSUBD, df_ftype_df_df);
+ def_builtin_const ("__builtin_vis_fnhadds", CODE_FOR_fnhaddsf_vis,
+ SPARC_BUILTIN_FNHADDS, sf_ftype_sf_sf);
+ def_builtin_const ("__builtin_vis_fnhaddd", CODE_FOR_fnhadddf_vis,
+ SPARC_BUILTIN_FNHADDD, df_ftype_df_df);
+
+ def_builtin_const ("__builtin_vis_umulxhi", CODE_FOR_umulxhi_vis,
+ SPARC_BUILTIN_UMULXHI, di_ftype_di_di);
+ def_builtin_const ("__builtin_vis_xmulx", CODE_FOR_xmulx_vis,
+ SPARC_BUILTIN_XMULX, di_ftype_di_di);
+ def_builtin_const ("__builtin_vis_xmulxhi", CODE_FOR_xmulxhi_vis,
+ SPARC_BUILTIN_XMULXHI, di_ftype_di_di);
+ }
+
+ if (TARGET_VIS3B)
+ {
+ def_builtin_const ("__builtin_vis_fpadd64", CODE_FOR_fpadd64_vis,
+ SPARC_BUILTIN_FPADD64, di_ftype_di_di);
+ def_builtin_const ("__builtin_vis_fpsub64", CODE_FOR_fpsub64_vis,
+ SPARC_BUILTIN_FPSUB64, di_ftype_di_di);
+
if (TARGET_ARCH64)
{
def_builtin_const ("__builtin_vis_fucmple8", CODE_FOR_fpcmpule8di_vis,
def_builtin_const ("__builtin_vis_fucmpeq8", CODE_FOR_fpcmpeq8si_vis,
SPARC_BUILTIN_FUCMPEQ8, si_ftype_v8qi_v8qi);
}
-
- def_builtin_const ("__builtin_vis_fhadds", CODE_FOR_fhaddsf_vis,
- SPARC_BUILTIN_FHADDS, sf_ftype_sf_sf);
- def_builtin_const ("__builtin_vis_fhaddd", CODE_FOR_fhadddf_vis,
- SPARC_BUILTIN_FHADDD, df_ftype_df_df);
- def_builtin_const ("__builtin_vis_fhsubs", CODE_FOR_fhsubsf_vis,
- SPARC_BUILTIN_FHSUBS, sf_ftype_sf_sf);
- def_builtin_const ("__builtin_vis_fhsubd", CODE_FOR_fhsubdf_vis,
- SPARC_BUILTIN_FHSUBD, df_ftype_df_df);
- def_builtin_const ("__builtin_vis_fnhadds", CODE_FOR_fnhaddsf_vis,
- SPARC_BUILTIN_FNHADDS, sf_ftype_sf_sf);
- def_builtin_const ("__builtin_vis_fnhaddd", CODE_FOR_fnhadddf_vis,
- SPARC_BUILTIN_FNHADDD, df_ftype_df_df);
-
- def_builtin_const ("__builtin_vis_umulxhi", CODE_FOR_umulxhi_vis,
- SPARC_BUILTIN_UMULXHI, di_ftype_di_di);
- def_builtin_const ("__builtin_vis_xmulx", CODE_FOR_xmulx_vis,
- SPARC_BUILTIN_XMULX, di_ftype_di_di);
- def_builtin_const ("__builtin_vis_xmulxhi", CODE_FOR_xmulxhi_vis,
- SPARC_BUILTIN_XMULXHI, di_ftype_di_di);
}
if (TARGET_VIS4)
(match_operand:FPCMP 2 "register_operand" "e")))]
"TARGET_VIS
&& (<FPCMP:MODE>mode != V8QImode
- || (TARGET_VIS3 && (<fpcmpcond:CODE> == EQ || <fpcmpcond:CODE> == NE))
+ || (TARGET_VIS3B && (<fpcmpcond:CODE> == EQ || <fpcmpcond:CODE> == NE))
|| TARGET_VIS4)"
"fpcmp<fpcmpcond:code><FPCMP:vbits>\t%1, %2, %0"
[(set_attr "type" "viscmp")])
(match_operator:P 1 "vec_cmp_operator"
[(match_operand:FPCMP 2 "register_operand" "")
(match_operand:FPCMP 3 "register_operand" "")]))]
- "TARGET_VIS3"
+ "TARGET_VIS3B"
{
enum rtx_code code = GET_CODE (operands[1]);
[(set (match_operand:P 0 "register_operand" "=r")
(fpcmpucond:P (match_operand:FPCMP 1 "register_operand" "e")
(match_operand:FPCMP 2 "register_operand" "e")))]
- "TARGET_VIS3 && (<FPCMP:MODE>mode == V8QImode || TARGET_VIS4)"
+ "TARGET_VIS3B && (<FPCMP:MODE>mode == V8QImode || TARGET_VIS4)"
"fpcmpu<fpcmpucond:signed_code><FPCMP:vbits>\t%1, %2, %0"
[(set_attr "type" "viscmp")])
(match_operator:P 1 "vec_cmpu_operator"
[(match_operand:FPCMP 2 "register_operand" "")
(match_operand:FPCMP 3 "register_operand" "")]))]
- "TARGET_VIS3"
+ "TARGET_VIS3B"
{
enum rtx_code code = GET_CODE (operands[1]);
(match_operand:FPCMP 1 "register_operand" "")
(match_operand:FPCMP 2 "register_operand" "")
(match_operand:P 3 "register_operand" "")]
- "TARGET_VIS3"
+ "TARGET_VIS3B"
{
sparc_expand_vcond_mask (<FPCMP:MODE>mode, operands, UNSPEC_CMASK<vbits>);
DONE;
[(set (match_operand:V1DI 0 "register_operand" "=e")
(plusminus:V1DI (match_operand:V1DI 1 "register_operand" "e")
(match_operand:V1DI 2 "register_operand" "e")))]
- "TARGET_VIS3"
+ "TARGET_VIS3B"
"fp<plusminus_insn>64\t%1, %2, %0"
[(set_attr "type" "fga")
(set_attr "subtype" "addsub64")])
-munaligned-doubles -mno-unaligned-doubles
-muser-mode -mno-user-mode
-mv8plus -mno-v8plus -mvis -mno-vis
--mvis2 -mno-vis2 -mvis3 -mno-vis3
+-mvis2 -mno-vis2
+-mvis3 -mno-vis3 -mvis3b -mno-vis3b
-mvis4 -mno-vis4 -mvis4b -mno-vis4b
-mcbcond -mno-cbcond -mfmaf -mno-fmaf -mfsmuld -mno-fsmuld
-mpopc -mno-popc -msubxc -mno-subxc
instructions, such as niagara-3 and later. Setting @option{-mvis3}
also sets @option{-mvis2} and @option{-mvis}.
+@opindex mvis3b
+@opindex mno-vis3b
+@item -mvis3b
+@itemx -mno-vis3b
+With @option{-mvis3b}, GCC generates code that takes advantage of
+version 3.0 of the UltraSPARC Visual Instruction Set extensions, plus
+the additional VIS instructions introduced in the Oracle SPARC
+Architecture 2011. The default is @option{-mvis3b} when targeting
+a cpu that supports such instructions, such as niagara-7 and later.
+Setting @option{-mvis3b} also sets @option{-mvis3}, @option{-mvis2}
+and @option{-mvis}.
+
@opindex mvis4
@opindex mno-vis4
@item -mvis4
version 4.0 of the UltraSPARC Visual Instruction Set extensions. The
default is @option{-mvis4} when targeting a cpu that supports such
instructions, such as niagara-7 and later. Setting @option{-mvis4}
-also sets @option{-mvis3}, @option{-mvis2} and @option{-mvis}.
+also sets @option{-mvis3b}, @option{-mvis3}, @option{-mvis2} and
+@option{-mvis}.
@opindex mvis4b
@opindex mno-vis4b
the additional VIS instructions introduced in the Oracle SPARC
Architecture 2017. The default is @option{-mvis4b} when targeting a
cpu that supports such instructions, such as m8 and later. Setting
-@option{-mvis4b} also sets @option{-mvis4}, @option{-mvis3},
-@option{-mvis2} and @option{-mvis}.
+@option{-mvis4b} also sets @option{-mvis4}, @option{-mvis3b},
+@option{-mvis3}, @option{-mvis2} and @option{-mvis}.
@opindex mcbcond
@opindex mno-cbcond