gcc/gcc/testsuite/gcc.target/sparc
Jose E. Marchesi 0316d24f7a Support for the SPARC M8 cpu.
This patch serie adds support for the SPARC M8 processor to GCC.
The SPARC M8 processor implements the Oracle SPARC Architecture 2017.

- bmask* instructions are put in their own instruction type.  It makes
  little sense to have them in the same category than array
  instructions.

- Similarly, VIS compare instructions are put in their own instruction
  type.  This is to better accommodate subtypes, which are not quite
  the same than the subtypes of `visl' instructions.

- The introduction of a new `subtype' insn attribute in sparc.md
  avoids the need for adjusting the instruction scheduler DFAs for
  previous cpu models every time a new cpu is introduced.

- The full set of SPARC instructions used in sparc.md, and their
  position in the type/subtype hierarchy, is documented in a comment.
  This eases the modification of the DFA schedulers, and the addition
  of new cpus.

- The M7 DFA scheduler is reworked:

  + To use the new type/subtype hierarchy.
  + The v3pipe insn attribute is no longer needed.
  + More accurate latencies for instructions.
  + The S4 core pipeline is documented in a comment in niagara7.md.

- Support for -mcpu=m8 (we are thus suggesting to abandon the niagaraN
  denomination for M8 and later processors.)

- Support for a new VIS level, VIS4B, covering the new VIS
  instructions introduced in OSA2017 and implemented in the M8.  Also
  built-ins.

- A M8 DFA scheduler:

  + Also based on the new type/subtype hierarchy.
  + The functional units in the S5 core are explicitly documented in a
    comment in m8.md.


gcc/ChangeLog:

	* config/sparc/m8.md: New file.
	* config/sparc/sparc.md: Include m8.md.

	* config/sparc/sparc.opt: New option -mvis4b.
	* config/sparc/sparc.c (dump_target_flag_bits): Handle MASK_VIS4B.
	(sparc_option_override): Handle VIS4B.
	(enum sparc_builtins): Define
	SPARC_BUILTIN_DICTUNPACK{8,16,32},
	SPARC_BUILTIN_FPCMP{LE,GT,EQ,NE}{8,16,32}SHL,
	SPARC_BUILTIN_FPCMPU{LE,GT}{8,16,32}SHL,
	SPARC_BUILTIN_FPCMPDE{8,16,32}SHL and
	SPARC_BUILTIN_FPCMPUR{8,16,32}SHL.
	(check_constant_argument): New function.
	(sparc_vis_init_builtins): Define builtins
	__builtin_vis_dictunpack{8,16,32},
	__builtin_vis_fpcmp{le,gt,eq,ne}{8,16,32}shl,
	__builtin_vis_fpcmpu{le,gt}{8,16,32}shl,
	__builtin_vis_fpcmpde{8,16,32}shl and
	__builtin_vis_fpcmpur{8,16,32}shl.
	(sparc_expand_builtin): Check that the constant operands to
	__builtin_vis_fpcmp*shl and _builtin_vis_dictunpack* are indeed
	constant and in range.
	* config/sparc/sparc-c.c (sparc_target_macros): Handle
	TARGET_VIS4B.
	* config/sparc/sparc.h (SPARC_IMM2_P): Define.
	(SPARC_IMM5_P): Likewise.
	* config/sparc/sparc.md (cpu_feature): Add new feagure "vis4b".
	(enabled): Handle vis4b.
	(UNSPEC_DICTUNPACK): New unspec.
	(UNSPEC_FPCMPSHL): Likewise.
	(UNSPEC_FPUCMPSHL): Likewise.
	(UNSPEC_FPCMPDESHL): Likewise.
	(UNSPEC_FPCMPURSHL): Likewise.
	(cpu_feature): New CPU feature `vis4b'.
	(dictunpack{8,16,32}): New insns.
	(FPCSMODE): New mode iterator.
	(fpcscond): New code iterator.
	(fpcsucond): Likewise.
	(fpcmp{le,gt,eq,ne}{8,16,32}{si,di}shl): New insns.
	(fpcmpu{le,gt}{8,16,32}{si,di}shl): Likewise.
	(fpcmpde{8,16,32}{si,di}shl): Likewise.
	(fpcmpur{8,16,32}{si,di}shl): Likewise.
	* config/sparc/constraints.md: Define constraints `q' for unsigned
	2-bit integer constants and `t' for unsigned 5-bit integer
	constants.
	* config/sparc/predicates.md (imm5_operand_dictunpack8): New
	predicate.
	(imm5_operand_dictunpack16): Likewise.
	(imm5_operand_dictunpack32): Likewise.
	(imm2_operand): Likewise.
	* doc/invoke.texi (SPARC Options): Document -mvis4b.
	* doc/extend.texi (SPARC VIS Built-in Functions): Document the
	ditunpack* and fpcmp*shl builtins.

	* config.gcc: Handle m8 in --with-{cpu,tune} options.
	* config.in: Add HAVE_AS_SPARC6 define.
	* config/sparc/driver-sparc.c (cpu_names): Add entry for the SPARC
	M8.
	* config/sparc/sol2.h (CPP_CPU64_DEFAULT_SPEC): Define for
	TARGET_CPU_m8.
	(ASM_CPU32_DEFAUILT_SPEC): Likewise.
	(CPP_CPU_SPEC): Handle m8.
	(ASM_CPU_SPEC): Likewise.
	* config/sparc/sparc-opts.h (enum processor_type): Add
	PROCESSOR_M8.
	* config/sparc/sparc.c (m8_costs): New struct.
	(sparc_option_override): Handle TARGET_CPU_m8.
	(sparc32_initialize_trampoline): Likewise.
	(sparc64_initialize_trampoline): Likewise.
	(sparc_issue_rate): Likewise.
	(sparc_register_move_cost): Likewise.
	* config/sparc/sparc.h (TARGET_CPU_m8): Define.
	(CPP_CPU64_DEFAULT_SPEC): Define for M8.
	(ASM_CPU64_DEFAULT_SPEC): Likewise.
	(CPP_CPU_SPEC): Handle M8.
	(ASM_CPU_SPEC): Likewise.
	(AS_M8_FLAG): Define.
	* config/sparc/sparc.md: Add m8 to the cpu attribute.
	* config/sparc/sparc.opt: New option -mcpu=m8 for sparc targets.
	* configure.ac (HAVE_AS_SPARC6): Check for assembler support for
	M8 instructions.
	* configure: Regenerate.
	* doc/invoke.texi (SPARC Options): Document -mcpu=m8 and
	-mtune=m8.

	* config/sparc/niagara7.md: Rework the DFA scheduler to use insn
	subtypes.
	* config/sparc/sparc.md: Remove the `v3pipe' insn attribute.
	("*movdi_insn_sp32"): Do not set v3pipe.
	("*movsi_insn"): Likewise.
	("*movdi_insn_sp64"): Likewise.
	("*movsf_insn"): Likewise.
	("*movdf_insn_sp32"): Likewise.
	("*movdf_insn_sp64"): Likewise.
	("*zero_extendsidi2_insn_sp64"): Likewise.
	("*sign_extendsidi2_insn"): Likewise.
	("*mov<VM32:mode>_insn"): Likewise.
	("*mov<VM64:mode>_insn_sp64"): Likewise.
	("*mov<VM64:mode>_insn_sp32"): Likewise.
	("<plusminus_insn><VADDSUB:mode>3"): Likewise.
	("<vlop:code><VL:mode>3"): Likewise.
	("*not_<vlop:code><VL:mode>3"): Likewise.
	("*nand<VL:mode>_vis"): Likewise.
	("*<vlnotop:code>_not1<VL:mode>_vis"): Likewise.
	("*<vlnotop:code>_not2<VL:mode>_vis"): Likewise.
	("one_cmpl<VL:mode>2"): Likewise.
	("faligndata<VM64:mode>_vis"): Likewise.
	("alignaddrsi_vis"): Likewise.
	("alignaddrdi_vis"): Likweise.
	("alignaddrlsi_vis"): Likewise.
	("alignaddrldi_vis"): Likewise.
	("fcmp<gcond:code><GCM:gcm_name><P:mode>_vis"): Likewise.
	("bmaskdi_vis"): Likewise.
	("bmasksi_vis"): Likewise.
	("bshuffle<VM64:mode>_vis"): Likewise.
	("cmask8<P:mode>_vis"): Likewise.
	("cmask16<P:mode>_vis"): Likewise.
	("cmask32<P:mode>_vis"): Likewise.
	("pdistn<P:mode>_vis"): Likewise.
	("<vis3_addsub_ss_patname><VASS:mode>3"): Likewise.

	* config/sparc/sparc.md ("subtype"): New insn attribute.
	("*wrgsr_sp64"): Set insn subtype.
	("*rdgsr_sp64"): Likewise.
	("alignaddrsi_vis"): Likewise.
	("alignaddrdi_vis"): Likewise.
	("alignaddrlsi_vis"): Likewise.
	("alignaddrldi_vis"): Likewise.
	("<plusminus_insn><VADDSUB:mode>3"): Likewise.
	("fexpand_vis"): Likewise.
	("fpmerge_vis"): Likewise.
	("faligndata<VM64:mode>_vis"): Likewise.
	("bshuffle<VM64:mode>_vis"): Likewise.
	("cmask8<P:mode>_vis"): Likewise.
	("cmask16<P:mode>_vis"): Likewise.
	("cmask32<P:mode>_vis"): Likewise.
	("fchksm16_vis"): Likewise.
	("v<vis3_shift_patname><GCM:mode>3"): Likewise.
	("fmean16_vis"): Likewise.
	("fp<plusminus_insn>64_vis"): Likewise.
	("<plusminus_insn>v8qi3"): Likewise.
	("<vis3_addsub_ss_patname><VASS:mode>3"): Likewise.
	("<vis4_minmax_patname><VMMAX:mode>3"): Likewise.
	("<vis4_uminmax_patname><VMMAX:mode>3"): Likewise.
	("<vis3_addsub_ss_patname>v8qi3"): Likewise.
	("<vis4_addsub_us_patname><VAUS:mode>3"): Likewise.
	("*movqi_insn"): Likewise.
	("*movhi_insn"): Likewise.
	("*movsi_insn"): Likewise.
	("movsi_pic_gotdata_op"): Likewise.
	("*movdi_insn_sp32"): Likewise.
	("*movdi_insn_sp64"): Likewise.
	("movdi_pic_gotdata_op"): Likewise.
	("*movsf_insn"): Likewise.
	("*movdf_insn_sp32"): Likewise.
	("*movdf_insn_sp64"): Likewise.
	("*zero_extendhisi2_insn"): Likewise.
	("*zero_extendqihi2_insn"): Likewise.
	("*zero_extendqisi2_insn"): Likewise.
	("*zero_extendqidi2_insn"): Likewise.
	("*zero_extendhidi2_insn"): Likewise.
	("*zero_extendsidi2_insn_sp64"): Likewise.
	("ldfsr"): Likewise.
	("prefetch_64"): Likewise.
	("prefetch_32"): Likewise.
	("tie_ld32"): Likewise.
	("tie_ld64"): Likewise.
	("*tldo_ldub_sp32"): Likewise.
	("*tldo_ldub1_sp32"): Likewise.
	("*tldo_ldub2_sp32"): Likewise.
	("*tldo_ldub_sp64"): Likewise.
	("*tldo_ldub1_sp64"): Likewise.
	("*tldo_ldub2_sp64"): Likewise.
	("*tldo_ldub3_sp64"): Likewise.
	("*tldo_lduh_sp32"): Likewise.
	("*tldo_lduh1_sp32"): Likewise.
	("*tldo_lduh_sp64"): Likewise.
	("*tldo_lduh1_sp64"): Likewise.
	("*tldo_lduh2_sp64"): Likewise.
	("*tldo_lduw_sp32"): Likewise.
	("*tldo_lduw_sp64"): Likewise.
	("*tldo_lduw1_sp64"): Likewise.
	("*tldo_ldx_sp64"): Likewise.
	("*mov<VM32:mode>_insn"): Likewise.
	("*mov<VM64:mode>_insn_sp64"): Likewise.
	("*mov<VM64:mode>_insn_sp32"): Likewise.

	* config/sparc/sparc.md ("type"): New insn type viscmp.
	("fcmp<gcond:code><GCM:gcm_name><P:mode>_vis"): Set insn type to
	viscmp.
	("fpcmp<gcond:code>8<P:mode>_vis"): Likewise.
	("fucmp<gcond:code>8<P:mode>_vis"): Likewise.
	("fpcmpu<gcond:code><GCM:gcm_name><P:mode>_vis"): Likewise.
	* config/sparc/niagara7.md ("n7_vis_logical_v3pipe"): Handle
	viscmp.
	("n7_vis_logical_11cycle"): Likewise.
	* config/sparc/niagara4.md ("n4_vis_logical"): Likewise.
	* config/sparc/niagara2.md ("niag3_vis": Likewise.
	* config/sparc/niagara.md ("niag_vis"): Likewise.
	* config/sparc/ultra3.md ("us3_fga"): Likewise.
	* config/sparc/ultra1_2.md ("us1_fga_double"): Likewise.

	* config/sparc/sparc.md: New instruction type `bmask'.
	(bmaskdi_vis): Use the `bmask' type.
	(bmasksi_vis): Likewise.
	* config/sparc/ultra3.md (us3_array): Likewise.
	* config/sparc/niagara7.md (n7_array): Likewise.
	* config/sparc/niagara4.md (n4_array): Likewise.
	* config/sparc/niagara2.md (niag2_vis): Likewise.
	(niag3_vis): Likewise.
	* config/sparc/niagara.md (niag_vis): Likewise.

gcc/testsuite/ChangeLog:

	* gcc.target/sparc/dictunpack.c: New file.
	* gcc.target/sparc/fpcmpdeshl.c: Likewise.
	* gcc.target/sparc/fpcmpshl.c: Likewise.
	* gcc.target/sparc/fpcmpurshl.c: Likewise.
	* gcc.target/sparc/fpcmpushl.c: Likewise.

From-SVN: r250050
2017-07-07 17:42:43 +02:00
..
20001013-1.c
20001101-1.c
20001102-1.c
20020116-2.c
20020416-1.c
20111102-1.c
20151219-1.c * gcc.target/sparc/20151219-1.c: Skip in 64-bit mode. 2016-01-06 23:34:10 +00:00
20160104-1.c re PR target/69072 (ICE in function_arg_record_value on 7th packed structure) 2016-01-04 08:06:52 +00:00
20160104-2.c re PR target/69100 (ICE in final_scan_insn with -msoft-float and __builtin_apply) 2016-01-04 08:14:12 +00:00
20160229-1.c re PR target/69706 (internal compiler error: in extract_constrain_insn, at recog.c:2246) 2016-02-29 10:20:31 +00:00
20161111-1.c re PR rtl-optimization/59461 (missed zero-extension elimination in the combiner) 2016-11-11 22:38:33 +00:00
20170205-1.c re PR target/79353 (ICE in curr_insn_transform, at lra-constraints.c:3773) 2017-02-05 09:47:48 +00:00
20170228-1.c re PR target/79749 (Many sparc testcases FAIL at -O0 with -fomit-frame-pointer) 2017-02-28 22:15:54 +00:00
align.c
array.c
bmaskbshuf-1.c sparc.c (sparc_expand_vec_perm_bmask): Use a scratch register as destination of bmask. 2016-10-15 22:40:12 +00:00
bmaskbshuf-2.c sparc.c (sparc_expand_vec_perm_bmask): Use a scratch register as destination of bmask. 2016-10-15 22:40:12 +00:00
cas64.c
cbcond-1.c sparc.opt (msubxc): New option. 2016-10-11 08:54:56 +00:00
cbcond-2.c sparc.opt (msubxc): New option. 2016-10-11 08:54:56 +00:00
cmask.c
combined-1.c
combined-2.c
dictunpack.c Support for the SPARC M8 cpu. 2017-07-07 17:42:43 +02:00
edge.c
edgen.c
fand.c
fandnot.c
fandnots.c
fands.c
fcmp.c
fexpand-2.c
fexpand.c
fhalve.c
fmaf-1.c
fnand.c
fnands.c
fnegop.c
fnot.c
fnots.c
for.c
fornot.c
fornots.c
fors.c
fpack16.c
fpack32.c
fpackfix.c
fpadd16.c
fpadd16s.c
fpadd32.c
fpadd32s.c
fpadds.c
fpaddsubi.c
fpcmp.c sparc: support for the SPARC M7 and VIS 4.0 2016-06-06 13:40:02 +02:00
fpcmpdeshl.c Support for the SPARC M8 cpu. 2017-07-07 17:42:43 +02:00
fpcmpshl.c Support for the SPARC M8 cpu. 2017-07-07 17:42:43 +02:00
fpcmpu.c sparc: support for the SPARC M7 and VIS 4.0 2016-06-06 13:40:02 +02:00
fpcmpurshl.c Support for the SPARC M8 cpu. 2017-07-07 17:42:43 +02:00
fpcmpushl.c Support for the SPARC M8 cpu. 2017-07-07 17:42:43 +02:00
fpmerge-2.c
fpmerge.c
fpmul-2.c
fpmul.c
fpsub16.c
fpsub16s.c
fpsub32.c
fpsub32s.c
fshift.c
fucmp.c
fxnor.c
fxnors.c
fxor.c
fxors.c
globalreg-1.c
lzd.c
mfpu.c
mnofpu.c
movcc-1.c sparc.opt (msubxc): New option. 2016-10-11 08:54:56 +00:00
movcc-2.c sparc.opt (msubxc): New option. 2016-10-11 08:54:56 +00:00
niagara7-align.c backport: sparc.c (sparc_option_override): Set function alignment for -mcpu=niagara7 to 64 to match the I$ line. 2017-05-23 18:39:44 +00:00
noresult.c
overflow-1.c sparc-modes.def (CCV): New. 2016-10-21 09:16:29 +00:00
overflow-2.c sparc-modes.def (CCV): New. 2016-10-21 09:16:29 +00:00
overflow-3.c target.def (min_arithmetic_precision): New hook. 2016-10-28 21:04:51 +00:00
overflow-4.c sparc.h (MASK_ISA): Add MASK_LEON and MASK_LEON3. 2017-06-14 11:23:18 +00:00
overflow-5.c target.def (min_arithmetic_precision): New hook. 2016-10-28 21:04:51 +00:00
pdist-2.c
pdist-3.c
pdist.c
pdistn-2.c
pdistn.c
popc-1.c optabs.c (expand_parity): Fix mode mismatch, add final conversion and keep looping on failure. 2016-10-15 18:46:02 +00:00
popc-2.c optabs.c (expand_parity): Fix mode mismatch, add final conversion and keep looping on failure. 2016-10-15 18:46:02 +00:00
rdgsr.c
setcc-1.c sparc.opt (msubxc): New option. 2016-10-11 08:54:56 +00:00
setcc-2.c sparc.opt (msubxc): New option. 2016-10-11 08:54:56 +00:00
setcc-3.c sparc.opt (msubxc): New option. 2016-10-11 08:54:56 +00:00
setcc-4.c sparc.c (emit_scc_insn): Remove direct support for EQ and GEU in DImode if TARGET_SUBXC. 2016-10-11 22:22:38 +00:00
setcc-5.c sparc.c (emit_scc_insn): Remove direct support for EQ and GEU in DImode if TARGET_SUBXC. 2016-10-11 22:22:38 +00:00
setcc-6.c sparc.c (emit_scc_insn): Remove direct support for EQ and GEU in DImode if TARGET_SUBXC. 2016-10-11 22:22:38 +00:00
setcc-7.c sparc.c (emit_scc_insn): Remove direct support for EQ and GEU in DImode if TARGET_SUBXC. 2016-10-11 22:22:38 +00:00
setcc-8.c sparc.c (emit_scc_insn): Remove direct support for EQ and GEU in DImode if TARGET_SUBXC. 2016-10-11 22:22:38 +00:00
setcc-9.c sparc.c (emit_scc_insn): Remove direct support for EQ and GEU in DImode if TARGET_SUBXC. 2016-10-11 22:22:38 +00:00
sibcall-dslot.c
sparc-align-1.c
sparc-constant-1.c
sparc-dwarf2.c
sparc-frame-1.c
sparc-getcontext-1.c
sparc-loop-1.c
sparc-reg-1.c
sparc-ret-1.c
sparc-ret-2.c
sparc-ret-3.c sparc: Fix stack references in return delay slot. 2017-06-06 11:42:52 -07:00
sparc-trap-1.c
sparc.exp Update copyright years. 2017-01-01 13:07:43 +01:00
struct-ret-check-1.c
struct-ret-check-2.c
ultrasp1.c
ultrasp2.c
ultrasp3.c
ultrasp4.c
ultrasp5.c
ultrasp6.c
ultrasp7.c
ultrasp8.c
ultrasp9.c
ultrasp10.c
ultrasp11.c
ultrasp12.c
ultrasp13.c
vec-init-1-vis1.c
vec-init-1-vis2.c
vec-init-1-vis3.c
vec-init-1.inc
vec-init-2-vis1.c
vec-init-2-vis2.c
vec-init-2-vis3.c
vec-init-2.inc
vec-init-3-vis1.c
vec-init-3-vis2.c
vec-init-3-vis3.c
vec-init-3.inc
vis3misc.c
vis3move-1.c
vis3move-2.c
vis3move-3.c
vis4misc.c sparc: support for the SPARC M7 and VIS 4.0 2016-06-06 13:40:02 +02:00
wrgsr.c
xmul.c