Initial E500 backport

Zack Weinberg zack@codesourcery.com
Mon Apr 21 20:58:00 GMT 2003


I've committed the first cut of a backport of the E500 (PowerPC
subtarget) to the gcc-3_3-e500-branch.  Appended to this message is
the change log; I'm omitting the diff as it is very long and consists
entirely of patches mined out of the mainline.

Aldy, I'd appreciate it if you could cast a glance over the change log
and tell me if I missed anything.

Two small notes on branch policy:

 - If you make a target-specific change which affects the E500 on the
   mainline, please consider applying it to the branch as well.
   PowerPC maintainers are entitled to approve patches for this
   branch.  However, since it needs to remain stable, I reserve the
   right to veto changes.

 - Change log entries for the branch should be put in
   gcc/ChangeLog.e500, EVEN IF they would normally go somewhere other
   than gcc/ChangeLog.  (For instance, you will note that changes to
   cp/decl.c are recorded there.)  Do not modify any of the normal
   ChangeLog files; that causes obnoxious conflicts when I merge from
   the gcc-3_3-branch.

zw

2003-04-21  Zack Weinberg  <zack@codesourcery.com>

	* genautomata.c, genattrtab.h: Bring over from mainline.

2003-04-08  Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/rs6000.c (rs6000_init_builtins): Set opaque types
	regardless of architecture.
	(spe_init_builtins): Change V2SI and V2SF types to opaque types.

2003-04-07  Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/rs6000.c (rs6000_common_init_builtins): Rename all
	V2SI_type_node to opaque_V2SI_type_node.  Rename all
	V2SF_type_node to opaque_V2SF_type_node.
	(rs6000_init_builtins): Define opaque_V2SI_type_node and
	opaque_V2SF_type_node.
	(is_ev64_opaque_type): The types opaque_V2SI_type_node and
	opaque_V2SF_type_node are opaque types.

2003-04-06  Aldy Hernandez  <aldyh@redhat.com>

	* doc/invoke.texi (RS/6000 and PowerPC Options): Document -mspe
	option.

	* config/rs6000/eabispe.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Set
	rs6000_spe.

	* config/rs6000/eabi.h (TARGET_E500): Define.

	* config/rs6000/rs6000.h (TARGET_E500): Define.
	(TARGET_OPTIONS): Add spe= option.
	Declare rs6000_spe and rs6000_spe_string extern.

	* config/rs6000/rs6000.c (branch_positive_comparison_operator):
	Change TARGET_SPE to TARGET_E500.
	(ccr_bit): Change TARGET_SPE to TARGET_E500.  Check for
	!TARGET_FPRS.
	(print_operand): Same.
	(rs6000_generate_compare): Same.
	(output_cbranch): Same.
	(rs6000_spe): Declare.
	(rs6000_spe_string): Declare.
	(rs6000_override_options): Call rs6000_parse_spe_option.
	(rs6000_parse_spe_option): New.

2003-04-07  Aldy Hernandez  <aldyh@redhat.com>

	* doc/invoke.texi (RS/6000 and PowerPC Options): Document
	-mfloat-gprs.

	* config/rs6000/rs6000.c: Delete rs6000_fprs.
	Declare rs6000_float_gprs.
	Declare rs6000_float_gprs_string.
	(rs6000_parse_float_gprs_option): New.
	(rs6000_override_options): Genericize rs6000_parse_* calls to use
	rs6000_parse_yes_no_option.
	Change check for cpu=8540, to use TARGET_E500.
	(rs6000_parse_isel_option): Delete.
	(rs6000_parse_spe_option): Delete.
	(rs6000_parse_vrsave_option): Delete.

	* config/rs6000/rs6000.h: Rename rs6000_fprs to rs6000_float_gprs.
	Define rs6000_float_gprs_string.
	(TARGET_OPTIONS): Add rs6000_float_gprs option.

	* config/rs6000/eabi.h (TARGET_FPRS): Change to use rs6000_float_gprs.

	* config/rs6000/eabispe.h: Set rs6000_float_gprs.

2003-04-02  Vladimir Makarov  <vmakarov@redhat.com>

	* config/rs6000/rs6000.c
	(TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD): Redefine the
	macros.
	(rs6000_issue_rate): Add case for 8540.
	(rs6000_use_sched_lookahead): New function.

	* config/rs6000/8540.md: Rename SIU units into SU ones and MIU
	units into MU ones.
	(ppc8540_branch, ppc8540_cr_logical): Add one cycle in the
	reservation before retirement.
	(ppc8540_multiply, ppc8540_load, ppc8540_store,
	ppc8540_simple_float, ppc8540_vector_load, ppc8540_vector_store):
	Remove additional cycle in the reservation before retirement.
	(ppc8540_mfcr, ppc8540_mtcrf, ppc8540_mtjmpr): Add missed
	reservation of ppc8540_issue.

2003-02-31  Aldy Hernandez  <aldyh@redhat.com>

	* testsuite/gcc.c-torture/execute/simd-3.c: New.

	* expr.c (expand_expr): Handle VECTOR_CST.
	(const_vector_from_tree): New.

	* varasm.c (output_constant): Handle VECTOR_CST.

	* c-typeck.c (digest_init): Build a vector constant from a
	VECTOR_TYPE.

	* config/rs6000/rs6000.c: Remove prototype for
	easy_vector_constant.
	(easy_vector_constant): Add mode parameter.  Rewrite to handle
	more easy constants.
	(rs6000_emit_move): Pass mode to easy_vector_constant.
	Call emit_easy_vector_insn for SPE V2SI vector constant moves.
	(emit_easy_vector_insn): New.
	(easy_vector_same): New.
	(EASY_VECTOR_15): New macro.
	(EASY_VECTOR_15_ADD_SELF): New macro.
	(bdesc_2arg): Rename to xorv2si3.
	(easy_vector_constant_add_self): New.
	(input_operand): Allow vector constants.

	* config/rs6000/rs6000.h (PREDICATE_CODES): Add
	easy_vector_constant, easy_vector_constant_add_self.
	(EXTRA_CONSTRAINT): Add 'W'.

	* config/rs6000/rs6000-protos.h: Add prototype for
	easy_vector_constant, emit_easy_vector_insn.

	* config/rs6000/altivec.md (xorv8hi3): New.
	(xorv16qi3): New.
	Remove all _const0 patterns.
	(movv4si_internal): Rewrite to use code.  Add vector constant to
	vector alternative.  Add splitter.
	(movv8hi_internal): Same.
	(movv16qi_internal): Same.
	(movv4sf_internal): Same.
	Change the unspecs for vspltis* to use constants.

	* config/rs6000/spe.md ("xorv4hi3"): New.
	("spe_evxor"): Rename to xorv2si3.
	("xorv1di3"): New.
	Remove all _const0 patterns.
	(movv2si_internal): Rewrite to use code.  Add vector constant to
	alternatives.  Add splitter.
	(movv4hi_internal): Add vector constant to alternatives.
	(movv1di_internal): Same.
	(movv2sf_internal): Same.

2003-03-27  Vladimir Makarov  <vmakarov@redhat.com>

	* config/rs6000/8540.md: Use presence_set instead of absence_set.

2003-03-26  Vladimir Makarov  <vmakarov@redhat.com>

	* config/rs6000/8540.md: New file.

	* config/rs6000/{40x.md, 603.md, 6xx.md, 7450.md, 7xx.md, mpc.md,
	power4.md, rios1.md, rios2.md, rs64.md}: Add mult_compare to
	reservations for imul.

	* config/rs6000/rs6000.md: Include 8540.md.  Change
	delayed_compare onto mult_compare for insns generating
	multiplication.
	(mult_compare, fpsimple, brinc, vecdiv, veccmpsimple, vecfdiv):
	New type attribute values.

	* config/rs6000/spe.md (*negsf2_gp, *abssf2_gpr): Use type
	fpsimple instead of fp.
	(*divsf3_gpr): Use type vecfdiv instead of fp.
	(spe_evfsabs, spe_evfsnabs, spe_evfsneg): Use type vecsimple
	instead of vecfloat.
	(spe_evfsdive): Use type vecfdiv instead of vecfloat.
	(spe_brinc): Use type brinc instead of veccomplex.
	(spe_evaddw, spe_evaddiw): Use type vecsimple instead of
	veccomplex.
	(spe_evdivws, spe_evdivwu): Use type vecdiv instead of veccomplex.
	(*movv2si_internal, *movv1di_internal, *movv4hi_internal,
	*movv2sf_internal): Define type attribute values for all
	alternatives.
	(cmpsfeq_gpr, cmpsfgt_gpr, cmpsflt_gpr): Use type veccmp instead
	of fpcompare.
	(tstsfeq_gpr, tstsfgt_gpr, tstsflt_gpr): Use type veccmpsimple
	instead of fpcompare.

2003-03-13  Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/rs6000.c (rs6000_dwarf_register_span):
	Differentiate endianness.
	(s6000_override_options): Use cpu type instead of TARGET_SPE.

2003-03-11  Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/rs6000.c (rs6000_stack_info): Remove
	insn_chain_scanned.  Use insn_chain_scanned_p in machine_function.

	* config/rs6000/rs6000.h (machine_function): Add insn_chain_scanned_p.

2003-03-11  Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/rs6000.c (rs6000_override_options): Disable string
	instructions for e500.

2003-03-11  Aldy Hernandez  <aldyh@redhat.com>

	* doc/tm.texi (Frame Registers): Document DWARF_REG_TO_UNWIND_COLUMN.

	* unwind-dw2.c (DWARF_REG_TO_UNWIND_COLUMN): Define.
	(_Unwind_GetGR): Use DWARF_REG_TO_UNWIND_COLUMN.
	(_Unwind_SetGR): Same.
	(_Unwind_GetGRPtr): New.
	(_Unwind_SetGRPtr): New.
	(uw_update_context_1): Use accesor functions instead of accessing
	context->reg[] directly.
	(uw_install_context_1): Same.
	(execute_cfa_program): Same.
	(__frame_state_for): Same.

	* config/rs6000/rs6000.c (spe_synthesize_frame_save): Use 1200 as
	the synthetic register offset.

	* config/rs6000/rs6000.h (DWARF_REG_TO_UNWIND_COLUMN): New.

2003-03-10  Aldy Hernandez  <aldyh@redhat.com>

	* dwarf2out.c (multiple_reg_loc_descriptor): Fix thinko.

2003-03-10  Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/rs6000.h (DWARF_FRAME_REGISTERS): Define.
	(rs6000_stack_t): Add spe_64bit_regs_used.

	* config/rs6000/rs6000.c (rs6000_stack_info): Calculate
	spe_64bit_regs_used, and use it to determine the size of the
	frame.
	(spe_func_has_64bit_regs_p): New.
	(spe_synthesize_frame_save): New.
	(rs6000_frame_related): Handle SPE synthetic registers.
	(rs6000_emit_prologue): Only save in 64-bits if the function used
	any registers in 64-bit mode.
	(rs6000_emit_epilogue): Same, but for restore.

2003-03-05  Aldy Hernandez  <aldyh@redhat.com>

	* doc/tm.texi: Document TARGET_DWARF_REGISTER_SPAN.

	* config/rs6000/rs6000.c (rs6000_dwarf_register_span): New.

	* hooks.c (hook_rtx_rtx_null): New.

	* hooks.h (hook_rtx_rtx_null): Protoize.

	* target-def.h (TARGET_DWARF_REGISTER_SPAN): New macro.
	(TARGET_INITIALIZER): Add TARGET_DWARF_REGISTER_SPAN.

	* target.h (struct gcc_target): Add dwarf_register_span.

	* dwarf2out.c (multiple_reg_loc_descriptor): New.
	(one_reg_loc_descriptor): New.
	(reg_loc_descriptor): Add support for values that span more than
	one register.

2003-03-02  Aldy Hernandez  <aldyh@redhat.com>

	* cp/decl.c (check_initializer): Check for vector_opaque_p.

2003-02-20  Aldy Hernandez  <aldyh@redhat.com>

	* doc/tm.texi: Document Rename TARGET_VECTOR_TYPES_COMPATIBLE to
	TARGET_VECTOR_OPAQUE_P.  Document accordingly.

	* testsuite/gcc.dg/20030218-1.c: Check that initialization of
	opaque types fail.

	* c-typeck.c (comptypes): Change call to vector_types_compatible
	to vector_opaque_p.
	(convert_for_assignment): Call vector_opaque_p instead of
	vector_types_compatible.
	(really_start_incremental_init): Disallow initialization of opaque
	types.

	* target-def.h: Remove TARGET_VECTOR_TYPES_COMPATIBLE.
	Define TARGET_VECTOR_OPAQUE_P.
	(TARGET_INITIALIZER): Same.

	* target.h (struct gcc_target): Remove vector_types_compatible.
	Add vector_opaque_p.

	* config/rs6000/rs6000.c (rs6000_spe_vector_types_compatible):
	Remove.
	(is_ev64_opaque_type): Check for TARGET_SPE and make sure type is
	a vector type.  Change return type to bool.
	(TARGET_VECTOR_TYPES_COMPATIBLE): Remove.
	(TARGET_VECTOR_OPAQUE_P): Define.

	* cp/parser.c (cp_parser_init_declarator): Call vector_opaque_p
	target hook.
	Include target.h.
	(cp_parser_init_declarator): Fix typo in function comments.

2003-02-18  Nick Clifton  <nickc@redhat.com>
	    Aldy Hernandez  <aldyh@redhat.com>

	* testsuite/gcc.dg/20030218-1.c: New.

	* doc/tm.texi: Document TARGET_VECTOR_TYPES_COMPATIBLE.

	* target-def.h (TARGET_INITIALIZER): Add
	TARGET_VECTOR_TYPES_COMPATIBLE.
	(TARGET_VECTOR_TYPES_COMPATIBLE): New macro.

	* target.h (struct gcc_target): Add field vector_types_compatible.

	* c-typeck.c (comptypes): Take into account
	TARGET_VECTOR_TYPES_COMPATIBLE.
	(convert_for_assignment): Same.

	* config/rs6000/rs6000.c (is_ev64_opaque_type): New.
	(rs6000_spe_vector_types_compatible): New.
	(TARGET_VECTOR_TYPES_COMPATIBLE): Define.

2003-02-15  David Edelsohn  <edelsohn@gnu.org>

	* config/rs6000/rs6000.h (processor_type): Add PPC440.
	* config/rs6000/rs6000.c (TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE,
	TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD,
	TARGET_SCHED_VARIABLE_ISSUE): Define.
	(rs6000_use_dfa_pipeline_interface): New function.
	(rs6000_multipass_dfa_lookahead): New Function.
	(rs6000_variable_issue): New function.
	(rs6000_adjust_cost): Add CMP and DELAYED_CR types.
	(rs6000_issue_rate): Add PPC440.
	* config/rs6000/rs6000.md (unspec list): Correct typo.
	(attr "type"): Add load_ext, load_ext_u, load_ext_ux, load_u,
	store_ux, store_u, fpload_ux, fpload_u, fpstore_ux, fpstore_u,
	cmp, delayed_cr, mfcr, mtcr.
	(automata_option): Set "ndfa".
	(extendMMNN2): Update attributes.
	(movcc_internal1): Discourage move to non-cr0.  Update
	attributes.
	(movMM_update): Update attributes.
	(cmpMM_internal): Update attributes.
	(sCC CR materialization): Update attributes.
	(branch patterns): Do not discourage non-cr0.
	(cr logical patterns): Prefer destructive register allocation.
	Update attributes.
	(movesi_from_cr): Update attribute.
	(mtcrf_operation): Update attribute.
	(mtcrfsi): Update attribute.
	* config/rs6000/40x.md: New file.
	* config/rs6000/603.md: New file.
	* config/rs6000/6xx.md: New file.
	* config/rs6000/7450.md: New file.
	* config/rs6000/7xx.md: New file.
	* config/rs6000/mpc.md: New file.
	* config/rs6000/power4.md: New file.
	* config/rs6000/rios1.md: New file.
	* config/rs6000/rios2.md: New file.
	* config/rs6000/rs64.md: New file.
	[Some DFA descriptions based on work by Michael Hayes]

2003-02-10  Nick Clifton  <nickc@redhat.com>
	    Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/eabispe.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Do not
	override options which have been specified on the command line.

2003-02-10  Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/rs6000.c (bdesc_2arg): Change spe_evxor to xorv2si3.

2003-02-09  Nick Clifton  <nickc@redhat.com>
	    Aldy Hernandez  <aldyh@redhat.com>

	* config/rs6000/spe.md: spe_evlhhesplat, spe_evlhhossplat,
	spe_evlhhousplat, spe_evlwhsplat, spe_evlwwsplat, spe_evldd,
	spe_evldh, spe_evldw, spe_evlwhe, spe_evlwhos, spe_evlwhou,
	spe_evstdd, spe_evstdh, spe_evstdw, spe_evstdwx, spe_evstwhe,
	spe_evstwho, spe_evstwwe, spe_evstwwo: Fix syntax to match newest
	docs.  Add range test for immediate value.

2003-02-09  Aldy Hernandez  <aldyh@redhat.com>

	Rename spe_evxor to xorv2si3.
	(xorv4hi3): New.
	(xorv1di3): New.

2003-01-06  Aldy Hernandez  <aldyh@redhat.com>

	Segher Boessenkool  <segher@koffie.nl>

	* config/rs6000/altivec.md: Remove spaces from assembler
	instruction argument lists.

2002-12-23  Aldy Hernandez  <aldyh@redhat.com>

	PR/8763
	* config/rs6000/altivec.md (mulv4sf3): Rewrite to add -0.0 vector.
	(altivec_vspltisw_v4sf): Name pattern.
	(altivec_vslw_v4sf): New pattern.

2002-12-19  David Edelsohn  <edelsohn@gnu.org>

	* config/rs6000/altivec.md (movv4si_internal): Set correct instruction
	attributes.
	(movv8hi_internal,movv16qi_internal,movv4sf_internal): Same.
	(get_vrsave_internal,set_vrsave_internal): Same.
	(altivec_vspltisb,altivec_vspltish,altivec_vspltisw): Same.
	(absv16qi2,absv8hi2,absv4si2,absv4sf2): Same
	(altivec_abss_v16qi,altivec_abss_v8hi,altivec_abss_v4si): Same.

2002-12-19  Aldy Hernandez  <aldyh@redhat.com>

	PR 8553
	* config/rs6000/altivec.md ("absv8hi2"): Add & to clobbered
	registers.
	("absv16qi2"): Same.
	("absv4si2"): Same.
	("absv4sf2"): Same.
	("altivec_abss_v16qi"): Same.
	("altivec_abss_v8hi"): Same.
	("altivec_abss_v4si"): Same.



More information about the Gcc-patches mailing list