]> git.ipfire.org Git - thirdparty/gcc.git/commit
Import these patches from the mainline:
authorNick Clifton <nickc@redhat.com>
Wed, 2 Feb 2011 14:31:55 +0000 (14:31 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Wed, 2 Feb 2011 14:31:55 +0000 (14:31 +0000)
commit446e8260591494d635d585227aba1373c26d9e77
tree3893117725743f4c25a3c91bde0b58ed23632e0e
parentb0583d941e501e3d47f58b2cf3ef2bd328a11bf5
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.

From-SVN: r169526
gcc/ChangeLog
gcc/config/rx/predicates.md
gcc/config/rx/rx-modes.def
gcc/config/rx/rx-protos.h
gcc/config/rx/rx.c
gcc/config/rx/rx.h
gcc/config/rx/rx.md