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 C4 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 C5 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: r250049
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
20001013-1.c | Loading commit data... | |
20001101-1.c | Loading commit data... | |
20001102-1.c | Loading commit data... | |
20020116-2.c | Loading commit data... | |
20020416-1.c | Loading commit data... | |
20111102-1.c | Loading commit data... | |
20151219-1.c | Loading commit data... | |
20160104-1.c | Loading commit data... | |
20160104-2.c | Loading commit data... | |
20160229-1.c | Loading commit data... | |
20161111-1.c | Loading commit data... | |
20170205-1.c | Loading commit data... | |
20170228-1.c | Loading commit data... | |
align.c | Loading commit data... | |
array.c | Loading commit data... | |
bmaskbshuf-1.c | Loading commit data... | |
bmaskbshuf-2.c | Loading commit data... | |
cas64.c | Loading commit data... | |
cbcond-1.c | Loading commit data... | |
cbcond-2.c | Loading commit data... | |
cmask.c | Loading commit data... | |
combined-1.c | Loading commit data... | |
combined-2.c | Loading commit data... | |
dictunpack.c | Loading commit data... | |
edge.c | Loading commit data... | |
edgen.c | Loading commit data... | |
fand.c | Loading commit data... | |
fandnot.c | Loading commit data... | |
fandnots.c | Loading commit data... | |
fands.c | Loading commit data... | |
fcmp.c | Loading commit data... | |
fexpand-2.c | Loading commit data... | |
fexpand.c | Loading commit data... | |
fhalve.c | Loading commit data... | |
fmaf-1.c | Loading commit data... | |
fnand.c | Loading commit data... | |
fnands.c | Loading commit data... | |
fnegop.c | Loading commit data... | |
fnot.c | Loading commit data... | |
fnots.c | Loading commit data... | |
for.c | Loading commit data... | |
fornot.c | Loading commit data... | |
fornots.c | Loading commit data... | |
fors.c | Loading commit data... | |
fpack16.c | Loading commit data... | |
fpack32.c | Loading commit data... | |
fpackfix.c | Loading commit data... | |
fpadd16.c | Loading commit data... | |
fpadd16s.c | Loading commit data... | |
fpadd32.c | Loading commit data... | |
fpadd32s.c | Loading commit data... | |
fpadds.c | Loading commit data... | |
fpaddsubi.c | Loading commit data... | |
fpcmp.c | Loading commit data... | |
fpcmpdeshl.c | Loading commit data... | |
fpcmpshl.c | Loading commit data... | |
fpcmpu.c | Loading commit data... | |
fpcmpurshl.c | Loading commit data... | |
fpcmpushl.c | Loading commit data... | |
fpmerge-2.c | Loading commit data... | |
fpmerge.c | Loading commit data... | |
fpmul-2.c | Loading commit data... | |
fpmul.c | Loading commit data... | |
fpsub16.c | Loading commit data... | |
fpsub16s.c | Loading commit data... | |
fpsub32.c | Loading commit data... | |
fpsub32s.c | Loading commit data... | |
fshift.c | Loading commit data... | |
fucmp.c | Loading commit data... | |
fxnor.c | Loading commit data... | |
fxnors.c | Loading commit data... | |
fxor.c | Loading commit data... | |
fxors.c | Loading commit data... | |
globalreg-1.c | Loading commit data... | |
lzd.c | Loading commit data... | |
mfpu.c | Loading commit data... | |
mnofpu.c | Loading commit data... | |
movcc-1.c | Loading commit data... | |
movcc-2.c | Loading commit data... | |
niagara7-align.c | Loading commit data... | |
noresult.c | Loading commit data... | |
overflow-1.c | Loading commit data... | |
overflow-2.c | Loading commit data... | |
overflow-3.c | Loading commit data... | |
overflow-4.c | Loading commit data... | |
overflow-5.c | Loading commit data... | |
pdist-2.c | Loading commit data... | |
pdist-3.c | Loading commit data... | |
pdist.c | Loading commit data... | |
pdistn-2.c | Loading commit data... | |
pdistn.c | Loading commit data... | |
popc-1.c | Loading commit data... | |
popc-2.c | Loading commit data... | |
rdgsr.c | Loading commit data... | |
setcc-1.c | Loading commit data... | |
setcc-2.c | Loading commit data... | |
setcc-3.c | Loading commit data... | |
setcc-4.c | Loading commit data... | |
setcc-5.c | Loading commit data... | |
setcc-6.c | Loading commit data... | |
setcc-7.c | Loading commit data... | |
setcc-8.c | Loading commit data... | |
setcc-9.c | Loading commit data... | |
sibcall-dslot.c | Loading commit data... | |
sparc-align-1.c | Loading commit data... | |
sparc-constant-1.c | Loading commit data... | |
sparc-dwarf2.c | Loading commit data... | |
sparc-frame-1.c | Loading commit data... | |
sparc-getcontext-1.c | Loading commit data... | |
sparc-loop-1.c | Loading commit data... | |
sparc-reg-1.c | Loading commit data... | |
sparc-ret-1.c | Loading commit data... | |
sparc-ret-2.c | Loading commit data... | |
sparc-ret-3.c | Loading commit data... | |
sparc-trap-1.c | Loading commit data... | |
sparc.exp | Loading commit data... | |
struct-ret-check-1.c | Loading commit data... | |
struct-ret-check-2.c | Loading commit data... | |
ultrasp1.c | Loading commit data... | |
ultrasp10.c | Loading commit data... | |
ultrasp11.c | Loading commit data... | |
ultrasp12.c | Loading commit data... | |
ultrasp13.c | Loading commit data... | |
ultrasp2.c | Loading commit data... | |
ultrasp3.c | Loading commit data... | |
ultrasp4.c | Loading commit data... | |
ultrasp5.c | Loading commit data... | |
ultrasp6.c | Loading commit data... | |
ultrasp7.c | Loading commit data... | |
ultrasp8.c | Loading commit data... | |
ultrasp9.c | Loading commit data... | |
vec-init-1-vis1.c | Loading commit data... | |
vec-init-1-vis2.c | Loading commit data... | |
vec-init-1-vis3.c | Loading commit data... | |
vec-init-1.inc | Loading commit data... | |
vec-init-2-vis1.c | Loading commit data... | |
vec-init-2-vis2.c | Loading commit data... | |
vec-init-2-vis3.c | Loading commit data... | |
vec-init-2.inc | Loading commit data... | |
vec-init-3-vis1.c | Loading commit data... | |
vec-init-3-vis2.c | Loading commit data... | |
vec-init-3-vis3.c | Loading commit data... | |
vec-init-3.inc | Loading commit data... | |
vis3misc.c | Loading commit data... | |
vis3move-1.c | Loading commit data... | |
vis3move-2.c | Loading commit data... | |
vis3move-3.c | Loading commit data... | |
vis4misc.c | Loading commit data... | |
wrgsr.c | Loading commit data... | |
xmul.c | Loading commit data... |