This is the mail archive of the gcc-cvs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

r169526 - in /branches/gcc-4_5-branch/gcc: Chan...


Author: nickc
Date: Wed Feb  2 14:31:55 2011
New Revision: 169526

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=169526
Log:
Import these patches from the mainline:
	2011-01-31  Nick Clifton  <nickc@redhat.com>

	* config/rx/rx.c (rx_get_stack_layout): Only save call clobbered
	registers inside interrupt handlers if the handler is not a leaf
	function.

	2011-01-25  Nick Clifton  <nickc@redhat.com>

	* config/rx/rx.h (LIBCALL_VALUE): Do not promote complex types.
	* config/rx/rx.c (rx_function_value): Likewise.
	(rx_promote_function_mode): Likewise.
	(gen_safe_add): Place an outsized immediate value inside an UNSPEC
	in order to make it legitimate.
	* config/rx/rx.md (adddi3_internal): If the second operand is a
	MEM make sure that the first operand is the same as the result
	register.
	(addsi3_unspec): Delete.
	(subdi3): Do not accept immediate operands.
	(subdi3_internal): Likewise.

	2011-01-24  Richard Henderson  <rth@redhat.com>

	* config/rx/predicates.md (rx_fp_comparison_operator): Don't accept
	compound unordered comparisons.
	* config/rx/rx.c (rx_split_fp_compare): Remove.
	* config/rx/rx-protos.h: Update.
	* config/rx/rx.md (gcc_conds, rx_conds): Remove.
	(cbranchsf4): Don't call rx_split_fp_compare.
	(*cbranchsf4): Use rx_split_cbranch.
	(*cmpsf): Don't accept "i" constraint.
	(*conditional_branch): Only valid after reload.
	(cstoresf4): Merge expander with insn.  Don't call
	rx_split_fp_compare.

	2011-01-22  Nick Clifton  <nickc@redhat.com>

	* config/rx/rx.md (cstoresf4): Pass comparison operator to
	rx_split_fp_compare.

	2011-01-22  Nick Clifton  <nickc@redhat.com>

	* config/rx/rx.md (UNSPEC_CONST): New.
	(deallocate_and_return): Wrap the amount popped off the stack in
	an UNSPEC_CONST in order to stop it being rejected by
	-mmax-constant-size.
	(pop_and_return): Add a "(return)" rtx.
	(call): Drop the immediate operand.
	(call_internal): Likewise.
	(call_value): Likewise.
	(call_value_internal): Likewise.
	(sibcall_internal): Likewise.
	(sibcall_value_internal): Likewise.
	(sibcall): Likewise.  Generate an explicit call using
	sibcall_internal.
	(sibcall_value): Likewise.
	(mov<>): FAIL if a constant operand is not legitimate.
	(addsi3_unpsec): New pattern.

	* config/rx/rx.c (rx_print_operand_address): Handle UNPSEC
	CONSTs.
	(ok_for_max_constant): New function.
	(gen_safe_add): New function.
	(rx_expand_prologue): Use gen_safe_add.
	(rx_expand_epilogue): Likewise.
	(rx_is_legitimate_constant): Use ok_for_max_constant.  Handle
	UNSPEC CONSTs.

	2011-01-17  Richard Henderson  <rth@redhat.com>

	* config/rx/predicates.md (rx_constshift_operand): Use match_test.
	(rx_restricted_mem_operand): New.
	(rx_shift_operand): Use register_operand.
	(rx_source_operand, rx_compare_operand): Likewise.
	* config/rx/rx.md (addsi3_flags): New expander.
	(adddi3): Rewrite as expander.
	(adc_internal, *adc_flags, adddi3_internal): New patterns.
	(subsi3_flags): New expander.
	(subdi3): Rewrite as expander.
	(sbb_internal, *sbb_flags, subdi3_internal): New patterns.

	* config/rx/rx.c (RX_BUILTIN_SAT): Remove.
	(rx_init_builtins): Remove sat builtin.
	(rx_expand_builtin): Likewise.
	* config/rx/rx.md (ssaddsi3): New.
	(*sat): Rename from sat.  Represent the CC_REG input.

	* config/rx/predicates.md (rshift_operator): New.
	* config/rx/rx.c (rx_expand_insv): Remove.
	* config/rx/rx-protos.h: Update.
	* config/rx/rx.md (*bitset): Rename from bitset.  Swap the ashift
	operand to the canonical position.
	(*bitset_in_memory, *bitinvert, *bitinvert_in_memory): Similarly.
	(*bitclr, *bitclr_in_memory): Similarly.
	(*insv_imm, rx_insv_reg, *insv_cond, *bmcc, *insv_cond_lt): New.
	(insv): Retain the zero_extract in the expansion.

	* config/rx/rx.md (bswapsi2): Use = not + for output reload.
	(bswaphi2, bitinvert, revw): Likewise.

	* config/rx/rx.c (gen_rx_store_vector): Use VOIDmode for gen_rtx_SET.
	(gen_rx_rtsd_vector, gen_rx_popm_vector): Likewise.
	* config/rx/rx.md (pop_and_return): Use VOIDmode for SET.
	(stack_push, stack_pushm, stack_pop, stack_popm): Likewise.
	(bitset, bitset_in_memory): Likewise.
	(bitinvert, bitinvert_in_memory): Likewise.
	(bitclr, bitclr_in_memory): Likewise.
	(insv, sync_lock_test_and_setsi, movstr, rx_movstr): Likewise.
	(rx_strend, rx_cmpstrn): Likewise.
	(rx_setmem): Likewise.  Make the source BLKmode to match the dest.
	(bitop peep2 patterns): Remove.

	* config/rx/rx.c (rx_match_ccmode): New.
	* config/rx/rx-protos.h: Update.
	* config/rx/rx.md (abssi2): Clobber, don't set flags.
	(addsi3, adddi3, andsi3, negsi2, one_cmplsi2, iorsi3): Likewise.
	(rotlsi3, rotrsi3, ashrsi3, lshrsi3, ashlsi3): Likewise.
	(subsi3, subdi3, xorsi3, addsf3, divsf3, mulsf3, subsf3): Likewise.
	(fix_truncsfsi2, floatsisf2): Likewise.
	(*abssi2_flags, *addsi3_flags, *andsi3_flags, *negsi2_flags): New.
	(*one_cmplsi2_flags, *iorsi3_flags, *rotlsi3_flags): New.
	(*rotrsi3_flags, *ashrsi3_flags, *lshrsi3_flags, *ashlsi3_flags): New.
	(*subsi3_flags, *xorsi3_flags): New.

	* config/rx/rx.md (cstoresf4, *cstoresf4): New patterns.

	* config/rx/rx.c (rx_print_operand): Remove workaround for
	unsplit comparison operations.

	* config/rx/rx.md (movsicc): Split after reload.
	(*movsicc): Merge *movsieq and *movsine via match_operator.
	(*stcc): New pattern.

	* config/rx/rx.c (rx_float_compare_mode): Remove.
	* config/rx/rx.h (rx_float_compare_mode): Remove.
	* config/rx/rx.md (cstoresi4): Split after reload.
	(*sccc): New pattern.

	* config/rx/predicates.md (label_ref_operand): New.
	(rx_z_comparison_operator): New.
	(rx_zs_comparison_operator): New.
	(rx_fp_comparison_operator): New.
	* config/rx/rx.c (rx_print_operand) [B]: Examine comparison modes.
	Validate that the flags are set properly for the comparison.
	(rx_gen_cond_branch_template): Remove.
	(rx_cc_modes_compatible): Remove.
	(mode_from_flags): New.
	(flags_from_code): Rename from flags_needed_for_conditional.
	(rx_cc_modes_compatible): Re-write in terms of flags_from_mode.
	(rx_select_cc_mode): Likewise.
	(rx_split_fp_compare): New.
	(rx_split_cbranch): New.
	* config/rx/rx.md (most_cond, zs_cond): Remove iterators.
	(*cbranchsi4): Use match_operator and rx_split_cbranch.
	(*cbranchsf4): Similarly.
	(*cbranchsi4_tst): Rename from *tstbranchsi4_<code>.  Use
	match_operator and rx_split_cbranch.
	(*cbranchsi4_tst_ext): Combine *tstbranchsi4m_eq and
	tstbranchsi4m_ne.  Use match_operator and rx_split_cbranch.
	(*cmpsi): Rename from cmpsi.
	(*tstsi): Rename from tstsi.
	(*cmpsf): Rename from cmpsf; use CC_Fmode.
	(*conditional_branch): Rename from conditional_branch.
	(*reveresed_conditional_branch): Remove.
	(b<code>): Remove expander.
	* config/rx/rx-protos.h: Update.

	* config/rx/rx.c (rx_compare_redundant): Remove.
	* config/rx/rx.md (cmpsi): Don't use it.
	* config/rx/rx-protos.h: Update.

	* config/rx/rx-modes.def (CC_F): New mode.
	* config/rx/rx.c (rx_select_cc_mode): New.
	* config/rx/rx.h (SELECT_CC_MODE): Use it.
	* config/rx/rx-protos.h: Update.

Modified:
    branches/gcc-4_5-branch/gcc/ChangeLog
    branches/gcc-4_5-branch/gcc/config/rx/predicates.md
    branches/gcc-4_5-branch/gcc/config/rx/rx-modes.def
    branches/gcc-4_5-branch/gcc/config/rx/rx-protos.h
    branches/gcc-4_5-branch/gcc/config/rx/rx.c
    branches/gcc-4_5-branch/gcc/config/rx/rx.h
    branches/gcc-4_5-branch/gcc/config/rx/rx.md


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]