4603
4807
| -uxpv* | -beos* | -mpeix* | -udk* \
4604
4808
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
4605
4809
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
4608
@@ -5780,8 +5780,6 @@
4612
-ppl_major_version=0
4613
-ppl_minor_version=10
4614
ppllibs=" -lppl_c -lppl -lgmpxx"
4617
@@ -5838,8 +5836,8 @@
4618
if test "x$with_ppl" != "xno" -a "${ENABLE_PPL_CHECK}" = "yes"; then
4619
saved_CFLAGS="$CFLAGS"
4620
CFLAGS="$CFLAGS $pplinc $gmpinc"
4621
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for version $ppl_major_version.$ppl_minor_version of PPL" >&5
4622
-$as_echo_n "checking for version $ppl_major_version.$ppl_minor_version of PPL... " >&6; }
4623
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for version 0.10 (or later revision) of PPL" >&5
4624
+$as_echo_n "checking for version 0.10 (or later revision) of PPL... " >&6; }
4625
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
4626
/* end confdefs.h. */
4628
@@ -5847,7 +5845,7 @@
4632
- #if PPL_VERSION_MAJOR != $ppl_major_version || PPL_VERSION_MINOR != $ppl_minor_version
4633
+ #if PPL_VERSION_MAJOR != 0 || PPL_VERSION_MINOR < 10
4637
--- a/src/configure.ac
4638
+++ b/src/configure.ac
4639
@@ -1510,8 +1510,6 @@
4640
AC_SUBST(poststage1_ldflags)
4643
-ppl_major_version=0
4644
-ppl_minor_version=10
4645
ppllibs=" -lppl_c -lppl -lgmpxx"
4648
@@ -1552,9 +1550,9 @@
4649
if test "x$with_ppl" != "xno" -a "${ENABLE_PPL_CHECK}" = "yes"; then
4650
saved_CFLAGS="$CFLAGS"
4651
CFLAGS="$CFLAGS $pplinc $gmpinc"
4652
- AC_MSG_CHECKING([for version $ppl_major_version.$ppl_minor_version of PPL])
4653
+ AC_MSG_CHECKING([for version 0.10 (or later revision) of PPL])
4654
AC_TRY_COMPILE([#include "ppl_c.h"],[
4655
- #if PPL_VERSION_MAJOR != $ppl_major_version || PPL_VERSION_MINOR != $ppl_minor_version
4656
+ #if PPL_VERSION_MAJOR != 0 || PPL_VERSION_MINOR < 10
4659
], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); ppllibs= ; pplinc= ; with_ppl=no ])
4660
4810
--- a/src/gcc/ChangeLog
4661
4811
+++ b/src/gcc/ChangeLog
4663
+2011-03-30 H.J. Lu <hongjiu.lu@intel.com>
4665
+ Backport from mainline
4666
+ 2011-03-30 H.J. Lu <hongjiu.lu@intel.com>
4669
+ * config/i386/i386.h (REG_CLASS_CONTENTS): Fix a typo in
4672
+2011-03-29 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
4674
+ * config/s390/s390.c (s390_preferred_reload_class): Return NO_REGS
4675
+ for invalid symbolic addresses.
4676
+ (s390_secondary_reload): Don't use s390_check_symref_alignment for
4679
+2011-03-28 Richard Sandiford <richard.sandiford@linaro.org>
4682
+ * config/arm/predicates.md (neon_lane_number): Accept 0..15.
4684
+2011-03-23 Jonathan Wakely <jwakely.gcc@gmail.com>
4687
+ * doc/invoke.texi (-fipa-struct-reorg): Fix typo.
4689
+2011-03-23 Jonathan Wakely <jwakely.gcc@gmail.com>
4693
+ * doc/extend.texi (Alignment): Move section to match order in TOC.
4694
+ * doc/invoke.texi (i386 and x86-64 Windows Options): Likewise.
4696
+2011-03-18 H.J. Lu <hongjiu.lu@intel.com>
4698
+ Backport from mainline
4699
+ 2011-03-17 H.J. Lu <hongjiu.lu@intel.com>
4702
+ * config/i386/i386.opt: Add Save to -mavx and -mfma.
4704
+2011-03-16 Pat Haugen <pthaugen@us.ibm.com>
4707
+ * caller-save.c (insert_restore, insert_save): Use non-validate
4708
+ form of adjust_address.
4710
+2011-03-16 Nick Clifton <nickc@redhat.com>
4712
+ * config/rx/rx.h (JUMP_ALIGN): Define.
4713
+ (JUMP_ALIGN_MAX_SKIP, LABEL_ALIGN_AFTER_BARRIER, LOOP_ALIGN,
4714
+ (LABEL_ALIGN, LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP,
4715
+ (LOOP_ALIGN_MAX_SKIP, LABEL_ALIGN_MAX_SKIP): Define.
4716
+ * config/rx/rx-protos.h (rx_align_for_label): Prototype.
4717
+ (rx_max_skip_for_label): Prototype.
4718
+ * config/rx/rx.md (abssi3): Use CC_ZSmode.
4719
+ (andis3): Fix timings.
4720
+ (peephole): Add peephole to combine zero- and sign- extending
4721
+ loads with arithmetic instructions.
4722
+ (bset): Fix timing.
4723
+ (bclr): Fix timing.
4724
+ * config/rx/rx.c (rx_is_legitimate_address): Add checks for QImode
4725
+ and HImode reg+int address.
4726
+ (rx_print_operand): Add support for %R. Fix generation of .B and
4727
+ .W addressing modes.
4728
+ (rx_align_for_label): New function.
4729
+ (rx_max_skip_for_label): New function.
4731
+2011-03-10 Jason Merrill <jason@redhat.com>
4734
+ * stor-layout.c (layout_type): Don't set structural equality
4735
+ on arrays of incomplete type.
4736
+ * tree.c (type_hash_eq): Handle comparing them properly.
4738
+2011-03-08 Richard Guenther <rguenther@suse.de>
4740
+ Backport from mainline
4741
+ 2011-02-10 Richard Guenther <rguenther@suse.de>
4743
+ * tree-ssa-structalias.c (bitpos_of_field): Use BITS_PER_UNIT, not 8.
4745
+ 2010-10-18 Richard Guenther <rguenther@suse.de>
4747
+ PR tree-optimization/45967
4748
+ * tree-ssa-structalias.c (type_could_have_pointers): Remove.
4749
+ (could_have_pointers): Likewise.
4750
+ (handle_rhs_call, handle_const_call, handle_pure_call,
4751
+ find_func_aliases, intra_create_variable_infos): Remove calls to them.
4752
+ (struct fieldoff): Add must_have_pointers field.
4753
+ (type_must_have_pointers): New function.
4754
+ (field_must_have_pointers): Likewise.
4755
+ (push_fields_onto_fieldstack): Remove must_have_pointers_p argument.
4756
+ Adjust field merging.
4757
+ (create_function_info_for): May-have-pointers of varinfo is
4758
+ almost always true.
4759
+ (create_variable_info_for_1): Likewise.
4761
+ 2010-10-12 Richard Guenther <rguenther@suse.de>
4763
+ * tree-ssa-structalias.c (get_constraint_for_1): Constants
4764
+ only point to nonlocal, not anything.
4766
+2011-03-08 Richard Guenther <rguenther@suse.de>
4768
+ PR tree-optimization/47278
4769
+ * tree.h (DECL_REPLACEABLE_P): Remove.
4770
+ (decl_replaceable_p): Declare.
4771
+ (decl_binds_to_current_def_p): Likewise.
4772
+ * varasm.c (decl_replaceable_p): New function.
4773
+ (decl_binds_to_current_def_p): Likewise.
4774
+ * cgraph.c (cgraph_function_body_availability): Use decl_replaceable_p.
4775
+ * tree-inline.c (inlinable_function_p): Likewise.
4777
+2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
4779
+ Backport from mainline
4780
+ 2011-03-07 Pat Haugen <pthaugen@us.ibm.com>
4783
+ * config/rs6000/rs6000.h (HARD_REGNO_CALLER_SAVE_MODE): Define.
4785
+2011-03-07 Mingjie Xing <mingjie.xing@gmail.com>
4787
+ * doc/cfg.texi: Remove "See" before @ref.
4788
+ * doc/invoke.texi: Likewise.
4790
+2011-03-03 Uros Bizjak <ubizjak@gmail.com>
4792
+ * config/i386/sse.md (*avx_pmaddubsw128): Fix mode of VEC_SELECT RTX.
4793
+ (ssse3_pmaddubsw128): Ditto.
4794
+ (ssse3_pmaddubsw): Ditto.
4796
+2011-03-03 Denis Chertykov <chertykov@gmail.com>
4798
+ Backport from mainline
4799
+ 2011-02-22 Georg-Johann Lay <avr@gjlay.de>
4802
+ * config/avr/avr.c (avr_cannot_modify_jumps_p): New function.
4803
+ (TARGET_CANNOT_MODIFY_JUMPS_P): Define.
4805
+2011-03-03 Richard Guenther <rguenther@suse.de>
4807
+ * tree-vect-stmt.c (vectorizable_operation): Remove unused vars.
4809
+2011-03-02 Richard Guenther <rguenther@suse.de>
4811
+ Backport from mainline
4812
+ 2011-02-07 Richard Guenther <rguenther@suse.de>
4814
+ PR tree-optimization/47615
4815
+ * tree-ssa-sccvn.h (run_scc_vn): Take a vn-walk mode argument.
4816
+ * tree-ssa-sccvn.c (default_vn_walk_kind): New global.
4817
+ (run_scc_vn): Initialize it.
4818
+ (visit_reference_op_load): Use it.
4819
+ * tree-ssa-pre.c (execute_pre): Use VN_WALK if in PRE.
4821
+2011-03-01 Richard Guenther <rguenther@suse.de>
4823
+ Backport from mainline
4824
+ 2011-02-08 Richard Guenther <rguenther@suse.de>
4826
+ PR middle-end/47639
4827
+ * tree-vect-generic.c (expand_vector_operations_1): Update
4829
+ (expand_vector_operations): ... not here. Cleanup EH info
4830
+ and the CFG if required.
4832
+2011-03-01 Richard Guenther <rguenther@suse.de>
4834
+ Backport from mainline
4835
+ 2011-03-01 Richard Guenther <rguenther@suse.de>
4837
+ PR tree-optimization/47890
4838
+ * tree-vect-loop.c (get_initial_def_for_induction): Set
4839
+ related stmt properly.
4841
+ 2010-12-01 Richard Guenther <rguenther@suse.de>
4843
+ PR tree-optimization/46723
4844
+ * tree-vect-loop.c (get_initial_def_for_induction): Strip
4845
+ conversions from the induction evolution and apply it to
4846
+ the result instead.
4847
+ * tree-vect-stmts.c (vect_get_vec_def_for_operand): Handle
4848
+ assigns for induction defs.
4850
+2011-02-28 Georg-Johann Lay <avr@gjlay.de>
4853
+ * config/avr/avr.c (avr_option_override): Use error on bad options.
4854
+ (avr_help): New function.
4855
+ (TARGET_HELP): Define.
4857
+2011-02-26 Gerald Pfeifer <gerald@pfeifer.com>
4859
+ * doc/invoke.texi (ARC Options): Use CPU instead of cpu.
4860
+ (ARM Options): Ditto.
4861
+ (i386 and x86-64 Options): Ditto.
4862
+ (RX Options): Ditto.
4863
+ (SPARC Options): Ditto.
4865
+2011-02-26 Tijl Coosemans <tijl@coosemans.org>
4867
+ * config.gcc (i386-*-freebsd*): Make i486 the default arch on
4868
+ FreeBSD 6 and later. Generally use cpu generic.
4870
+2011-02-25 Gerald Pfeifer <gerald@pfeifer.com>
4872
+ * doc/cpp.texi (Obsolete Features): Add background on the
4873
+ origin of assertions.
4874
+ Update copyright years.
4876
+2011-02-25 Andriy Gapon <avg@freebsd.org>
4879
+ * config/freebsd-spec.h (FBSD_LIB_SPEC): Handle the shared case.
4880
+ Update copyright years.
4882
+2011-02-21 Uros Bizjak <ubizjak@gmail.com>
4885
+ * config/i386/avxintrin.h (_mm256_insert_epi32): Use _mm_insert_epi32.
4886
+ (_mm256_insert_epi64): Use _mm_insert_epi64.
4888
+2011-02-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
4890
+ * config.gcc (hppa[12]*-*-hpux11*): Set extra_parts.
4891
+ * config/pa/stublib.c (pthread_default_stacksize_np, pthread_mutex_lock,
4892
+ pthread_mutex_unlock, pthread_once): Reinstate pthread stubs.
4893
+ * config/pa/t-pa-hpux11: Add rules to build pthread stubs.
4894
+ * config/pa/t-pa64: Likewise.
4895
+ * config/pa/pa-hpux11.h (LINK_GCC_C_SEQUENCE_SPEC): Define.
4897
+2011-02-17 Uros Bizjak <ubizjak@gmail.com>
4900
+ * config/i386/i386.c (ix86_secondary_reload): Handle SSE
4901
+ input reload with PLUS RTX.
4903
+2011-02-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
4906
+ * config/alpha/host-osf.c: New file.
4907
+ * config/alpha/x-osf: New file.
4908
+ * config.host (alpha*-dec-osf*): Use it.
4910
+2011-02-15 Tijl Coosemans <tijl@coosemans.org>
4912
+ * config/i386/freebsd.h (SUBTARGET32_DEFAULT_CPU): Add.
4913
+ Update copyright years.
4915
+2011-02-11 Bernd Schmidt <bernds@codesourcery.com>
4917
+ PR rtl-optimization/47166
4918
+ * reload1.c (emit_reload_insns): Disable the spill_reg_store
4919
+ mechanism for PRE_MODIFY and POST_MODIFY.
4920
+ (inc_for_reload): For PRE_MODIFY, return the insn that sets the
4923
+2011-02-10 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
4925
+ Backport from mainline:
4926
+ 2011-02-07 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
4928
+ * config.gcc (hppa[12]*-*-hpux11*): Don't set extra_parts.
4929
+ * config/pa/stublib.c (pthread_default_stacksize_np, pthread_mutex_lock,
4930
+ pthread_mutex_unlock): Remove.
4931
+ * config/pa/t-pa-hpux11: Remove rules to build pthread stubs.
4932
+ * config/pa/t-pa64: Likewise.
4933
+ * config/pa/pa64-hpux.h (LIB_SPEC): In static links, link against
4934
+ shared libc if not linking against libpthread.
4935
+ * config/pa/pa-hpux11.h (LIB_SPEC): Likewise.
4937
+2011-02-03 Michael Meissner <meissner@linux.vnet.ibm.com>
4939
+ Backport from mainline:
4940
+ 2011-02-02 Michael Meissner <meissner@linux.vnet.ibm.com>
4943
+ * doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions):
4944
+ Document using vector double with the load/store builtins, and
4945
+ that the load/store builtins always use Altivec instructions.
4947
+ * config/rs6000/vector.md (vector_altivec_load_<mode>): New insns
4948
+ to use altivec memory instructions, even on VSX.
4949
+ (vector_altivec_store_<mode>): Ditto.
4951
+ * config/rs6000/rs6000-protos.h (rs6000_address_for_altivec): New
4954
+ * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add
4955
+ V2DF, V2DI support to load/store overloaded builtins.
4957
+ * config/rs6000/rs6000-builtin.def (ALTIVEC_BUILTIN_*): Add
4958
+ altivec load/store builtins for V2DF/V2DI types.
4960
+ * config/rs6000/rs6000.c (rs6000_option_override_internal): Don't
4961
+ set avoid indexed addresses on power6 if -maltivec.
4962
+ (altivec_expand_ld_builtin): Add V2DF, V2DI support, use
4963
+ vector_altivec_load/vector_altivec_store builtins.
4964
+ (altivec_expand_st_builtin): Ditto.
4965
+ (altivec_expand_builtin): Add VSX memory builtins.
4966
+ (rs6000_init_builtins): Add V2DI types to internal types.
4967
+ (altivec_init_builtins): Add support for V2DF/V2DI altivec
4968
+ load/store builtins.
4969
+ (rs6000_address_for_altivec): Insure memory address is appropriate
4972
+ * config/rs6000/vsx.md (vsx_load_<mode>): New expanders for
4973
+ vec_vsx_ld and vec_vsx_st.
4974
+ (vsx_store_<mode>): Ditto.
4976
+ * config/rs6000/rs6000.h (RS6000_BTI_long_long): New type
4977
+ variables to hold long long types for VSX vector memory builtins.
4978
+ (RS6000_BTI_unsigned_long_long): Ditto.
4979
+ (long_long_integer_type_internal_node): Ditti.
4980
+ (long_long_unsigned_type_internal_node): Ditti.
4982
+ * config/rs6000/altivec.md (UNSPEC_LVX): New UNSPEC.
4983
+ (altivec_lvx_<mode>): Make altivec_lvx use a mode iterator.
4984
+ (altivec_stvx_<mode>): Make altivec_stvx use a mode iterator.
4986
+ * config/rs6000/altivec.h (vec_vsx_ld): Define VSX memory builtin
4988
+ (vec_vsx_st): Ditto.
4990
+ Backport from mainline:
4991
+ 2011-02-01 Michael Meissner <meissner@linux.vnet.ibm.com>
4994
+ * config/rs6000/vsx.md (vsx_float<VSi><mode>2): Use
4995
+ gpc_reg_operand instead of vsx_register_operand to match rs6000.md
4996
+ generator functions.
4997
+ (vsx_floatuns<VSi><mode>2): Ditto.
4998
+ (vsx_fix_trunc<mode><VSi>2): Ditto.
4999
+ (vsx_fixuns_trunc<mode><VSi>2): Ditto.
5001
+2011-02-02 Nick Clifton <nickc@redhat.com>
5003
+ Import these patches from the mainline:
5004
+ 2011-01-31 Nick Clifton <nickc@redhat.com>
5006
+ * config/rx/rx.c (rx_get_stack_layout): Only save call clobbered
5007
+ registers inside interrupt handlers if the handler is not a leaf
5010
+ 2011-01-25 Nick Clifton <nickc@redhat.com>
5012
+ * config/rx/rx.h (LIBCALL_VALUE): Do not promote complex types.
5013
+ * config/rx/rx.c (rx_function_value): Likewise.
5014
+ (rx_promote_function_mode): Likewise.
5015
+ (gen_safe_add): Place an outsized immediate value inside an UNSPEC
5016
+ in order to make it legitimate.
5017
+ * config/rx/rx.md (adddi3_internal): If the second operand is a
5018
+ MEM make sure that the first operand is the same as the result
5020
+ (addsi3_unspec): Delete.
5021
+ (subdi3): Do not accept immediate operands.
5022
+ (subdi3_internal): Likewise.
5024
+ 2011-01-24 Richard Henderson <rth@redhat.com>
5026
+ * config/rx/predicates.md (rx_fp_comparison_operator): Don't accept
5027
+ compound unordered comparisons.
5028
+ * config/rx/rx.c (rx_split_fp_compare): Remove.
5029
+ * config/rx/rx-protos.h: Update.
5030
+ * config/rx/rx.md (gcc_conds, rx_conds): Remove.
5031
+ (cbranchsf4): Don't call rx_split_fp_compare.
5032
+ (*cbranchsf4): Use rx_split_cbranch.
5033
+ (*cmpsf): Don't accept "i" constraint.
5034
+ (*conditional_branch): Only valid after reload.
5035
+ (cstoresf4): Merge expander with insn. Don't call
5036
+ rx_split_fp_compare.
5038
+ 2011-01-22 Nick Clifton <nickc@redhat.com>
5040
+ * config/rx/rx.md (cstoresf4): Pass comparison operator to
5041
+ rx_split_fp_compare.
5043
+ 2011-01-22 Nick Clifton <nickc@redhat.com>
5045
+ * config/rx/rx.md (UNSPEC_CONST): New.
5046
+ (deallocate_and_return): Wrap the amount popped off the stack in
5047
+ an UNSPEC_CONST in order to stop it being rejected by
5048
+ -mmax-constant-size.
5049
+ (pop_and_return): Add a "(return)" rtx.
5050
+ (call): Drop the immediate operand.
5051
+ (call_internal): Likewise.
5052
+ (call_value): Likewise.
5053
+ (call_value_internal): Likewise.
5054
+ (sibcall_internal): Likewise.
5055
+ (sibcall_value_internal): Likewise.
5056
+ (sibcall): Likewise. Generate an explicit call using
5058
+ (sibcall_value): Likewise.
5059
+ (mov<>): FAIL if a constant operand is not legitimate.
5060
+ (addsi3_unpsec): New pattern.
5062
+ * config/rx/rx.c (rx_print_operand_address): Handle UNPSEC
5064
+ (ok_for_max_constant): New function.
5065
+ (gen_safe_add): New function.
5066
+ (rx_expand_prologue): Use gen_safe_add.
5067
+ (rx_expand_epilogue): Likewise.
5068
+ (rx_is_legitimate_constant): Use ok_for_max_constant. Handle
5071
+ 2011-01-17 Richard Henderson <rth@redhat.com>
5073
+ * config/rx/predicates.md (rx_constshift_operand): Use match_test.
5074
+ (rx_restricted_mem_operand): New.
5075
+ (rx_shift_operand): Use register_operand.
5076
+ (rx_source_operand, rx_compare_operand): Likewise.
5077
+ * config/rx/rx.md (addsi3_flags): New expander.
5078
+ (adddi3): Rewrite as expander.
5079
+ (adc_internal, *adc_flags, adddi3_internal): New patterns.
5080
+ (subsi3_flags): New expander.
5081
+ (subdi3): Rewrite as expander.
5082
+ (sbb_internal, *sbb_flags, subdi3_internal): New patterns.
5084
+ * config/rx/rx.c (RX_BUILTIN_SAT): Remove.
5085
+ (rx_init_builtins): Remove sat builtin.
5086
+ (rx_expand_builtin): Likewise.
5087
+ * config/rx/rx.md (ssaddsi3): New.
5088
+ (*sat): Rename from sat. Represent the CC_REG input.
5090
+ * config/rx/predicates.md (rshift_operator): New.
5091
+ * config/rx/rx.c (rx_expand_insv): Remove.
5092
+ * config/rx/rx-protos.h: Update.
5093
+ * config/rx/rx.md (*bitset): Rename from bitset. Swap the ashift
5094
+ operand to the canonical position.
5095
+ (*bitset_in_memory, *bitinvert, *bitinvert_in_memory): Similarly.
5096
+ (*bitclr, *bitclr_in_memory): Similarly.
5097
+ (*insv_imm, rx_insv_reg, *insv_cond, *bmcc, *insv_cond_lt): New.
5098
+ (insv): Retain the zero_extract in the expansion.
5100
+ * config/rx/rx.md (bswapsi2): Use = not + for output reload.
5101
+ (bswaphi2, bitinvert, revw): Likewise.
5103
+ * config/rx/rx.c (gen_rx_store_vector): Use VOIDmode for gen_rtx_SET.
5104
+ (gen_rx_rtsd_vector, gen_rx_popm_vector): Likewise.
5105
+ * config/rx/rx.md (pop_and_return): Use VOIDmode for SET.
5106
+ (stack_push, stack_pushm, stack_pop, stack_popm): Likewise.
5107
+ (bitset, bitset_in_memory): Likewise.
5108
+ (bitinvert, bitinvert_in_memory): Likewise.
5109
+ (bitclr, bitclr_in_memory): Likewise.
5110
+ (insv, sync_lock_test_and_setsi, movstr, rx_movstr): Likewise.
5111
+ (rx_strend, rx_cmpstrn): Likewise.
5112
+ (rx_setmem): Likewise. Make the source BLKmode to match the dest.
5113
+ (bitop peep2 patterns): Remove.
5115
+ * config/rx/rx.c (rx_match_ccmode): New.
5116
+ * config/rx/rx-protos.h: Update.
5117
+ * config/rx/rx.md (abssi2): Clobber, don't set flags.
5118
+ (addsi3, adddi3, andsi3, negsi2, one_cmplsi2, iorsi3): Likewise.
5119
+ (rotlsi3, rotrsi3, ashrsi3, lshrsi3, ashlsi3): Likewise.
5120
+ (subsi3, subdi3, xorsi3, addsf3, divsf3, mulsf3, subsf3): Likewise.
5121
+ (fix_truncsfsi2, floatsisf2): Likewise.
5122
+ (*abssi2_flags, *addsi3_flags, *andsi3_flags, *negsi2_flags): New.
5123
+ (*one_cmplsi2_flags, *iorsi3_flags, *rotlsi3_flags): New.
5124
+ (*rotrsi3_flags, *ashrsi3_flags, *lshrsi3_flags, *ashlsi3_flags): New.
5125
+ (*subsi3_flags, *xorsi3_flags): New.
5127
+ * config/rx/rx.md (cstoresf4, *cstoresf4): New patterns.
5129
+ * config/rx/rx.c (rx_print_operand): Remove workaround for
5130
+ unsplit comparison operations.
5132
+ * config/rx/rx.md (movsicc): Split after reload.
5133
+ (*movsicc): Merge *movsieq and *movsine via match_operator.
5134
+ (*stcc): New pattern.
5136
+ * config/rx/rx.c (rx_float_compare_mode): Remove.
5137
+ * config/rx/rx.h (rx_float_compare_mode): Remove.
5138
+ * config/rx/rx.md (cstoresi4): Split after reload.
5139
+ (*sccc): New pattern.
5141
+ * config/rx/predicates.md (label_ref_operand): New.
5142
+ (rx_z_comparison_operator): New.
5143
+ (rx_zs_comparison_operator): New.
5144
+ (rx_fp_comparison_operator): New.
5145
+ * config/rx/rx.c (rx_print_operand) [B]: Examine comparison modes.
5146
+ Validate that the flags are set properly for the comparison.
5147
+ (rx_gen_cond_branch_template): Remove.
5148
+ (rx_cc_modes_compatible): Remove.
5149
+ (mode_from_flags): New.
5150
+ (flags_from_code): Rename from flags_needed_for_conditional.
5151
+ (rx_cc_modes_compatible): Re-write in terms of flags_from_mode.
5152
+ (rx_select_cc_mode): Likewise.
5153
+ (rx_split_fp_compare): New.
5154
+ (rx_split_cbranch): New.
5155
+ * config/rx/rx.md (most_cond, zs_cond): Remove iterators.
5156
+ (*cbranchsi4): Use match_operator and rx_split_cbranch.
5157
+ (*cbranchsf4): Similarly.
5158
+ (*cbranchsi4_tst): Rename from *tstbranchsi4_<code>. Use
5159
+ match_operator and rx_split_cbranch.
5160
+ (*cbranchsi4_tst_ext): Combine *tstbranchsi4m_eq and
5161
+ tstbranchsi4m_ne. Use match_operator and rx_split_cbranch.
5162
+ (*cmpsi): Rename from cmpsi.
5163
+ (*tstsi): Rename from tstsi.
5164
+ (*cmpsf): Rename from cmpsf; use CC_Fmode.
5165
+ (*conditional_branch): Rename from conditional_branch.
5166
+ (*reveresed_conditional_branch): Remove.
5167
+ (b<code>): Remove expander.
5168
+ * config/rx/rx-protos.h: Update.
5170
+ * config/rx/rx.c (rx_compare_redundant): Remove.
5171
+ * config/rx/rx.md (cmpsi): Don't use it.
5172
+ * config/rx/rx-protos.h: Update.
5174
+ * config/rx/rx-modes.def (CC_F): New mode.
5175
+ * config/rx/rx.c (rx_select_cc_mode): New.
5176
+ * config/rx/rx.h (SELECT_CC_MODE): Use it.
5177
+ * config/rx/rx-protos.h: Update.
5179
+2011-02-01 Richard Guenther <rguenther@suse.de>
5181
+ PR tree-optimization/47541
5182
+ * tree-ssa-structalias.c (push_fields_onto_fieldstack): Make
5183
+ sure to have a field at offset zero.
5185
+2011-01-31 Nathan Froyd <froydnj@codesourcery.com>
5187
+ Backport from mainline:
5188
+ 2010-12-30 Nathan Froyd <froydnj@codesourcery.com>
5191
+ * reload1.c (choose_reload_regs): Don't look for equivalences for
5192
+ output reloads of constant loads.
5194
+2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
5196
+ * doc/install.texi (hppa-hp-hpux10): Remove references to HP
5199
+2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
5201
+ * doc/install.texi: Update copyright years.
5203
+2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
5205
+ * doc/install.texi (Binaries): Remove outdated reference for
5206
+ Motorola 68HC11/68HC12 downloads.
5208
+2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
5210
+ * doc/extend.texi (Thread-Local): Adjust reference to Ulrich
5213
+2011-01-29 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
5215
+ Backport from mainline:
5216
+ 2010-08-22 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
5219
+ * gthr-posix.h (__gthread_active_init): Delete.
5220
+ (__gthread_active_p): Do activity check here.
5221
+ Don't include errno.h on hppa-hpux. Update comment.
5222
+ * gthr-posix95.h (__gthread_active_init): Delete.
5223
+ (__gthread_active_p): Do activity check here.
5224
+ Don't include errno.h on hppa-hpux. Update comment.
5225
+ * config.gcc (hppa[12]*-*-hpux11*): Define extra_parts.
5226
+ * config/pa/pa64-hpux.h (LIB_SPEC): When -static is specified, only
5227
+ add -lpthread when -mt or -pthread is specified.
5228
+ * config/pa/pa-hpux11.h (LIB_SPEC): likewise.
5229
+ (LINK_GCC_C_SEQUENCE_SPEC): Define.
5230
+ * config/pa/t-pa-hpux11 (LIBGCCSTUB_OBJS): Define.
5231
+ (stublib.c, pthread_default_stacksize_np-stub.o,
5232
+ pthread_mutex_lock-stub.o, pthread_mutex_unlock-stub.o,
5233
+ $(T)libgcc_stub.a): Add methods.
5234
+ * config/pa/t-pa64 (LIBGCCSTUB_OBJS): Add pthread stubs.
5235
+ (stublib.c, pthread_default_stacksize_np-stub.o,
5236
+ pthread_mutex_lock-stub.o, pthread_mutex_unlock-stub.o): Add methods.
5237
+ * config/pa/stublib.c (pthread_default_stacksize_np, pthread_mutex_lock,
5238
+ pthread_mutex_unlock): New stubs.
5240
+2011-01-26 Eric Botcazou <ebotcazou@adacore.com>
5242
+ PR rtl-optimization/44469
5243
+ * cfgcleanup.c (try_optimize_cfg): Iterate in CFG layout mode too
5244
+ after removing trivially dead basic blocks.
5246
+2011-01-25 Richard Guenther <rguenther@suse.de>
5248
+ PR tree-optimization/47411
5249
+ Backport from mainline
5250
+ 2010-06-30 Michael Matz <matz@suse.de>
5252
+ PR bootstrap/44699
5253
+ * tree-vrp.c (vrp_finalize): Deal with changing num_ssa_names.
5255
+2011-01-21 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
5257
+ Backport from mainline.
5258
+ 2010-09-08 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
5261
+ * config/arm/arm.md (bswapsi2): Handle condition correctly
5262
+ for armv6 and optimize_size.
5264
+2011-01-21 Richard Guenther <rguenther@suse.de>
5266
+ PR tree-optimization/47365
5267
+ * tree-ssa-sccvn.h (vn_lookup_kind): Declare.
5268
+ (vn_reference_lookup_pieces): Adjust.
5269
+ (vn_reference_lookup): Likewise.
5270
+ * tree-ssa-sccvn.c (vn_walk_kind): New static global.
5271
+ (vn_reference_lookup_3): Only look through kills if in
5272
+ VN_WALKREWRITE mode.
5273
+ (vn_reference_lookup_pieces): Adjust.
5274
+ (vn_reference_lookup): Likewise.
5275
+ (visit_reference_op_load): Likewise.
5276
+ (visit_reference_op_store): Likewise.
5277
+ * tree-ssa-pre.c (phi_translate_1): Use VN_WALK mode.
5278
+ (compute_avail): Likewise.
5279
+ (eliminate): Likewise.
5281
+2011-01-20 Richard Guenther <rguenther@suse.de>
5283
+ PR tree-optimization/47167
5284
+ * tree-ssa-copyrename.c (copy_rename_partition_coalesce):
5285
+ Revert previous change, only avoid enumeral type changes.
5287
+2011-01-17 H.J. Lu <hongjiu.lu@intel.com>
5289
+ Backport from mainline
5290
+ 2011-01-17 H.J. Lu <hongjiu.lu@intel.com>
5293
+ * config/i386/avxintrin.h (_mm_maskload_pd): Change mask to
5295
+ (_mm_maskstore_pd): Likewise.
5296
+ (_mm_maskload_ps): Likewise.
5297
+ (_mm_maskstore_ps): Likewise.
5298
+ (_mm256_maskload_pd): Change mask to __m256i.
5299
+ (_mm256_maskstore_pd): Likewise.
5300
+ (_mm256_maskload_ps): Likewise.
5301
+ (_mm256_maskstore_ps): Likewise.
5303
+ * config/i386/i386-builtin-types.def: Updated.
5304
+ (ix86_expand_special_args_builtin): Likewise.
5306
+ * config/i386/i386.c (bdesc_special_args): Update
5307
+ __builtin_ia32_maskloadpd, __builtin_ia32_maskloadps,
5308
+ __builtin_ia32_maskloadpd256, __builtin_ia32_maskloadps256,
5309
+ __builtin_ia32_maskstorepd, __builtin_ia32_maskstoreps,
5310
+ __builtin_ia32_maskstorepd256 and __builtin_ia32_maskstoreps256.
5312
+ * config/i386/sse.md (avx_maskload<ssemodesuffix><avxmodesuffix>):
5313
+ Use <avxpermvecmode> on mask register.
5314
+ (avx_maskstore<ssemodesuffix><avxmodesuffix>): Likewise.
5316
+2011-01-17 Olivier Hainque <hainque@adacore.com>
5317
+ Michael Haubenwallner <michael.haubenwallner@salomon.at>
5318
+ Eric Botcazou <ebotcazou@adacore.com>
5321
+ * xcoffout.c (ASM_OUTPUT_LINE): Output line only if positive, and only
5322
+ if <= USHRT_MAX in 32-bit mode.
5324
+2011-01-17 Richard Guenther <rguenther@suse.de>
5326
+ Backport from mainline
5327
+ PR tree-optimization/47286
5328
+ * tree-ssa-structalias.c (new_var_info): Register variables
5331
+ PR tree-optimization/44592
5332
+ * tree-ssa-ccp.c (gimplify_and_update_call_from_tree): Copy
5335
+2011-01-16 Jakub Jelinek <jakub@redhat.com>
5337
+ Backport from mainline
5338
+ 2011-01-07 Jakub Jelinek <jakub@redhat.com>
5341
+ * config/i386/i386.c (ix86_delegitimize_address): If
5342
+ simplify_gen_subreg fails, return orig_x.
5344
+ 2011-01-06 Jakub Jelinek <jakub@redhat.com>
5347
+ * c-convert.c (convert): When converting a complex expression
5348
+ other than COMPLEX_EXPR to a different complex type, ensure
5349
+ c_save_expr is called instead of save_expr, unless in_late_binary_op.
5350
+ * c-typeck.c (convert_for_assignment): Set in_late_binary_op also
5351
+ when converting COMPLEX_TYPE.
5353
+ 2010-12-21 Jakub Jelinek <jakub@redhat.com>
5356
+ * config/i386/sse.md (sse2_loadlpd, sse2_movsd): Fix shufpd source
5359
+ PR middle-end/45852
5360
+ * expr.c (store_expr): Ignore alt_rtl if equal to target,
5361
+ but has side-effects.
5363
+ 2010-12-16 Jakub Jelinek <jakub@redhat.com>
5365
+ PR tree-optimization/43655
5366
+ * tree-ssa-ter.c (is_replaceable_p): Don't use
5367
+ gimple_references_memory_p for -O0, instead check for load
5368
+ by looking at rhs.
5371
+ * cfgexpand.c (expand_debug_expr): If GET_MODE (op0) is VOIDmode,
5372
+ use TYPE_MODE (TREE_TYPE (tem)) instead of mode1.
5374
+ 2010-12-10 Jakub Jelinek <jakub@redhat.com>
5376
+ PR rtl-optimization/46804
5377
+ * regmove.c (optimize_reg_copy_3): Look for REG_EQUAL note
5378
+ on the setter of src_reg rather than on insn. If it is
5379
+ equal to the setter's original SET_SRC, replace it with its
5380
+ zero or sign extension instead of dropping it.
5382
+ PR rtl-optimization/46865
5383
+ * rtl.c (rtx_equal_p_cb, rtx_equal_p): For last operand of
5384
+ ASM_OPERANDS and ASM_INPUT if integers are different,
5386
+ * jump.c (rtx_renumbered_equal_p): Likewise.
5388
+ PR tree-optimization/46864
5389
+ * tree-ssa-loop-im.c (loop_suitable_for_sm): Return false even
5390
+ when there are EDGE_EH exit edges.
5392
+ 2010-12-09 Jakub Jelinek <jakub@redhat.com>
5395
+ * config/rs6000/rs6000.c (rs6000_expand_vector_extract): Use stvx
5396
+ instead of stve*x.
5397
+ (altivec_expand_stv_builtin): For op0 use mode of operand 1 instead
5399
+ * config/rs6000/altivec.md (VI_scalar): New mode attr.
5400
+ (altivec_stve<VI_char>x, *altivec_stvesfx): Use scalar instead of
5401
+ vector mode for operand 0, put operand 1 into UNSPEC.
5403
+2011-01-13 Nick Clifton <nickc@redhat.com>
5405
+ Import this fix from the mainline:
5406
+ 2010-10-19 Nick Clifton <nickc@redhat.com>
5408
+ * config/rx/rx.c (rx_function_value): Small integer types are
5409
+ promoted to SImode.
5410
+ (rx_promote_function_mode): New function.
5411
+ (TARGET_PROMOTE_FUNCTION_MODE): Define.
5413
+2011-01-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
5415
+ Backport from mainline:
5416
+ 2011-01-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
5419
+ * config/i386/i386.c (legitimize_tls_address)
5420
+ <TLS_MODEL_INITIAL_EXEC>: Handle TARGET_64BIT && TARGET_SUN_TLS.
5421
+ * config/i386/i386.md (UNSPEC_TLS_IE_SUN): Declare.
5422
+ (tls_initial_exec_64_sun): New pattern.
5424
+2011-01-03 Eric Botcazou <ebotcazou@adacore.com>
5426
+ Backport from mainline
5427
+ 2010-12-30 Eric Botcazou <ebotcazou@adacore.com>
5430
+ * config/sparc/sparc.c (sparc_file_end): Call resolve_unique_section
5431
+ on the GOT helper if USE_HIDDEN_LINKONCE.
5433
+ 2010-12-02 Eric Botcazou <ebotcazou@adacore.com>
5436
+ * config/sparc/sparc.c (can_use_mov_pic_label_ref): New predicate.
5437
+ (sparc_expand_move): Call it to decide whether to emit the special
5438
+ mov{si,di}_pic_label_ref patterns.
5439
+ (sparc_legitimize_pic_address): Call it to decide whether to emit
5440
+ the regular PIC sequence for labels. Fix long line.
5441
+ (sparc_file_end): Set is_thunk for the PIC helper.
5443
+2010-12-30 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
5445
+ * config/pa/pa.md: Add ",*" condition to 64-bit add/subtract boolean
5448
+2010-12-27 Yao Qi <yao@codesourcery.com>
5450
+ Backport from mainline:
5451
+ 2010-10-14 Yao Qi <yao@codesourcery.com>
5454
+ * config/arm/arm.c (arm_build_builtin_va_list): Assign
5455
+ va_list_name to TYPE_STUB_DECL (va_list_type).
5457
+2010-12-23 Sebastian Pop <sebastian.pop@amd.com>
5458
+ Richard Guenther <rguenther@suse.de>
5460
+ PR tree-optimization/46758
5461
+ * graphite-sese-to-poly.c (scan_tree_for_params_right_scev): Use
5462
+ tree_int_to_gmp instead of int_cst_value.
5463
+ (scan_tree_for_params_int): Same.
5464
+ (scan_tree_for_params): Same.
5465
+ (pdr_add_data_dimensions): Use ppl_set_inhomogeneous_tree.
5467
+2010-12-23 Sebastian Pop <sebastian.pop@amd.com>
5469
+ Backport from mainline
5470
+ Fix PR45758: reset scevs before Graphite.
5471
+ 2010-09-24 Sebastian Pop <sebastian.pop@amd.com>
5473
+ PR tree-optimization/45552
5474
+ * graphite.c (graphite_initialize): Call scev_reset.
5476
+2010-12-23 Sebastian Pop <sebastian.pop@amd.com>
5478
+ PR tree-optimization/43023
5479
+ * tree-data-ref.c (mem_write_stride_of_same_size_as_unit_type_p):
5481
+ (stores_zero_from_loop): Call stmt_stores_zero.
5482
+ (stmt_with_adjacent_zero_store_dr_p): New.
5483
+ * tree-data-ref.h (stmt_with_adjacent_zero_store_dr_p): Declared.
5484
+ (stride_of_unit_type_p): New.
5485
+ * tree-loop-distribution.c (generate_memset_zero): Do not return a
5486
+ boolean. Call gcc_assert on stride_of_unit_type_p.
5487
+ (generate_builtin): Call stmt_stores_zero.
5488
+ (rdg_flag_all_uses): Removed.
5489
+ (rdg_flag_similar_memory_accesses): Removed.
5490
+ (build_rdg_partition_for_component): Removed parameter
5491
+ other_stores. Removed call to rdg_flag_similar_memory_accesses.
5492
+ (can_generate_builtin): New.
5493
+ (similar_memory_accesses): New.
5494
+ (fuse_partitions_with_similar_memory_accesses): New.
5495
+ (rdg_build_partitions): Call
5496
+ fuse_partitions_with_similar_memory_accesses.
5498
+2010-12-21 Martin Jambor <mjambor@suse.cz>
5500
+ Backport from mainline:
5501
+ 2010-12-09 Martin Jambor <mjambor@suse.cz>
5503
+ PR middle-end/46734
5504
+ * tree-sra.c (splice_param_accesses): Check that there are not
5505
+ multiple ADDRESSABLE types.
5507
+2010-12-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
5509
+ Backport from mainline:
5510
+ 2010-12-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
5513
+ * config/pa/pa.c (branch_to_delay_slot_p): Use next_active_insn instead
5514
+ of next_real_insn. Search forward checking for both ASM_INPUT and
5515
+ ASM_OPERANDS asms until exit condition is found.
5516
+ (branch_needs_nop_p): Likewise.
5517
+ (use_skip_p): New function.
5518
+ (output_cbranch): Use use_skip_p.
5519
+ (output_bb, output_bvb): Likewise.
5521
+2010-12-19 Eric Botcazou <ebotcazou@adacore.com>
5524
+ * config/sparc/sparc.h (GLOBAL_OFFSET_TABLE_REGNUM): New macro.
5525
+ (PIC_OFFSET_TABLE_REGNUM): Rewrite in terms of above macro.
5526
+ * config/sparc/sparc.c (pic_helper_needed): Delete.
5527
+ (global_offset_table): Likewise.
5528
+ (pic_helper_symbol): Rename to...
5529
+ (got_helper_rtx): ...this.
5530
+ (global_offset_table_rtx): New global variable.
5531
+ (sparc_got_symbol): Likewise.
5532
+ (sparc_got): New static function.
5533
+ (check_pic): Use local variable and call sparc_got.
5534
+ (sparc_tls_symbol): Initialize to NULL_RTX.
5535
+ (sparc_tls_got): In non-PIC mode, reload the GOT register for Sun TLS
5536
+ and 32-bit ABI and copy the GOT symbol to a new register otherwise.
5537
+ (get_pc_thunk_name): Rename local variable.
5538
+ (gen_load_pcrel_sym): New wrapper around load_pcrel_sym{si,di}.
5539
+ (load_pic_register): Rename to...
5540
+ (load_got_register): ...this. Adjust and call gen_load_pcrel_sym.
5541
+ (sparc_expand_prologue): Do not test flag_pic.
5542
+ (sparc_output_mi_thunk): Use pic_offset_table_rtx directly.
5543
+ (sparc_file_end): Test got_helper_rtx instead of pic_helper_needed.
5544
+ Rename local variable and do not call get_pc_thunk_name again.
5545
+ * config/sparc/sparc.md (load_pcrel_sym): Add operand #3.
5547
+2010-12-18 Alexandre Oliva <aoliva@redhat.com>
5550
+ * jump.c (mark_all_labels): Skip debug insns.
5552
+2010-12-18 Alexandre Oliva <aoliva@redhat.com>
5555
+ * cfgcleanup.c (try_forward_edges): Skip debug insns.
5557
+2010-12-16 Eric Botcazou <ebotcazou@adacore.com>
5559
+ * tree-ssa-sccvn.c (vn_reference_lookup_3): Always punt if the call to
5560
+ get_ref_base_and_extent returns -1 as the max size.
5562
2010-12-16 Release Manager
5564
* GCC 4.5.2 released.
5565
@@ -106,7 +1010,7 @@
5567
Backport from mainline:
5568
2010-09-15 Olivier Hainque <hainque@adacore.com>
5569
- Jose Ruiz <ruiz@adacore.com>
5570
+ Jose Ruiz <ruiz@adacore.com>
5572
* config/alpha/osf.h (MD_UNWIND_SUPPORT): Define.
5573
* config/alpha/osf-unwind.h: New file.
4813
+2010-05-05 Ira Rosen <ira.rosen@linaro.org>
4815
+ Backport from mainline:
4816
+ 2011-04-18 Ulrich Weigand <ulrich.weigand@linaro.org>
4817
+ Ira Rosen <ira.rosen@linaro.org>
4820
+ * config/arm/arm.c (neon_emit_pair_result_insn): Swap arguments
4821
+ to match neon_vzip/vuzp/vtrn_internal.
4822
+ * config/arm/neon.md (neon_vtrn<mode>_internal): Make both
4823
+ outputs explicitly dependent on both inputs.
4824
+ (neon_vzip<mode>_internal, neon_vuzp<mode>_internal): Likewise.
4826
+2011-05-04 Uros Bizjak <ubizjak@gmail.com>
4828
+ Backport from mainline
4829
+ 2011-04-21 Uros Bizjak <ubizjak@gmail.com>
4832
+ * config/i386/i386.c (ix86_expand_vector_set) <V2DImode>: Generate
4833
+ vec_extract and vec_concat for non-SSE4_1 targets.
4835
+2011-05-04 Uros Bizjak <ubizjak@gmail.com>
4837
+ * config/i386/i386.md (*movdi_internal_rex64) <TYPE_SSEMOV>:
4838
+ Use %v prefix in insn mnemonic to handle TARGET_AVX.
4839
+ (*movdi_internal): Use "maybe_vex" instead of "vex" in "prefix"
4840
+ attribute calculation.
4841
+ (*movdf_internal): Output AVX mnemonics. Add "prefix" attribute.
4842
+ * config/i386/sse.md (*sse2_storeq_rex64): Do not emit %v prefix
4843
+ for mov{q} mnemonic.
4844
+ (*vec_extractv2di_1_rex64_avx): Ditto.
4845
+ (*vec_concatv2di_rex64_sse4_1): Use %vmovd for reg<->xmm moves.
4846
+ (*vec_concatv2di_rex64_sse): Use movd for reg<->xmm moves.
4847
+ * config/i386/mmx.md (*mov<mode>_internal_rex64): Ditto.
4849
+2011-05-03 Uros Bizjak <ubizjak@gmail.com>
4850
+ Jakub Jelinek <jakub@redhat.com>
4853
+ * config/i386/i386.c (ix86_match_ccmode): For CC{A,C,O,S}mode
4854
+ only succeed if req_mode is the same as set_mode.
4856
+2011-05-03 Jakub Jelinek <jakub@redhat.com>
4858
+ Backport from mainline
4859
+ 2011-04-30 Jakub Jelinek <jakub@redhat.com>
4861
+ PR tree-optimization/48809
4862
+ * tree-switch-conversion.c (build_arrays): Compute tidx in unsigned
4864
+ (gen_inbound_check): Don't compute index_expr - range_min in utype
4865
+ again, instead reuse SSA_NAME initialized in build_arrays.
4866
+ Remove two useless gsi_for_stmt calls.
4868
+ 2011-04-28 Jakub Jelinek <jakub@redhat.com>
4870
+ PR middle-end/48597
4871
+ * final.c (final_scan_insn): Call dwarf2out_frame_debug even for
4874
+ 2011-04-27 Jakub Jelinek <jakub@redhat.com>
4877
+ * c-typeck.c (build_binary_op): Don't wrap arguments if
4878
+ int_operands is true.
4880
+ 2011-04-23 Jakub Jelinek <jakub@redhat.com>
4883
+ * fold-const.c (fold_convert_loc): Add NOP_EXPR when casting
4884
+ to VOID_TYPE even around MODIFY_EXPR.
4886
+2011-05-02 Ulrich Weigand <ulrich.weigand@linaro.org>
4888
+ PR middle-end/43085
4889
+ Backport from mainline:
4891
+ 2010-04-29 Bernd Schmidt <bernds@codesourcery.com>
4893
+ From Dominique d'Humieres <dominiq@lps.ens.fr>
4894
+ PR bootstrap/43858
4895
+ * ifcvt.c (dead_or_predicable): Use df_simulate_find_defs to compute
4898
+ 2010-04-26 Bernd Schmidt <bernds@codesourcery.com>
4900
+ * df-problems.c (df_simulate_initialize_forwards): Set, don't clear,
4901
+ bits for artificial defs at the top of the block.
4902
+ * fwprop.c (single_def_use_enter_block): Don't call it.
4904
+ 2010-04-22 Bernd Schmidt <bernds@codesourcery.com>
4906
+ * ifcvt.c (dead_or_predicable): Use df_simulate_find_defs and
4907
+ df_simulate_find_noclobber_defs as appropriate. Keep track of an
4908
+ extra set merge_set_noclobber, and use it to relax the final test
4910
+ * df.h (df_simulate_find_noclobber_defs): Declare.
4911
+ * df-problems.c (df_simulate_find_defs): Don't ignore partial or
4913
+ (df_simulate_find_noclobber_defs): New function.
4915
+2011-04-29 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
4918
+ * config/pa/predicates.md (ior_operand): Delete predicate.
4919
+ (cint_ior_operand, reg_or_cint_ior_operand): New predicates.
4920
+ * config/pa/pa.md (iordi3): Use reg_or_cint_ior_operand predicate in
4921
+ expander. Use cint_ior_operand in unnamed insn.
4922
+ (iorsi3): Likewise.
4923
+ * config/pa/pa-protos.h (ior_operand): Delete declarations.
4925
2011-04-28 Release Manager
4927
* GCC 4.5.3 released.
5574
4928
--- a/src/gcc/DATESTAMP
5575
4929
+++ b/src/gcc/DATESTAMP
5579
4933
--- a/src/gcc/LINARO-VERSION
5580
4934
+++ b/src/gcc/LINARO-VERSION
5583
4937
--- a/src/gcc/Makefile.in
5584
4938
+++ b/src/gcc/Makefile.in
5585
4939
@@ -646,6 +646,7 @@
23352
22839
"TARGET_NEON"
23354
22841
int dest = REGNO (operands[0]);
23355
@@ -5048,3 +5552,205 @@
22842
@@ -3895,13 +4397,14 @@
22844
(define_insn "neon_vtrn<mode>_internal"
22845
[(set (match_operand:VDQW 0 "s_register_operand" "=w")
22846
- (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")]
22848
- (set (match_operand:VDQW 2 "s_register_operand" "=w")
22849
- (unspec:VDQW [(match_operand:VDQW 3 "s_register_operand" "2")]
22851
+ (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
22852
+ (match_operand:VDQW 2 "s_register_operand" "w")]
22854
+ (set (match_operand:VDQW 3 "s_register_operand" "=2")
22855
+ (unspec:VDQW [(match_dup 1) (match_dup 2)]
22858
- "vtrn.<V_sz_elem>\t%<V_reg>0, %<V_reg>2"
22859
+ "vtrn.<V_sz_elem>\t%<V_reg>0, %<V_reg>3"
22860
[(set (attr "neon_type")
22861
(if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
22862
(const_string "neon_bp_simple")
22863
@@ -3921,13 +4424,14 @@
22865
(define_insn "neon_vzip<mode>_internal"
22866
[(set (match_operand:VDQW 0 "s_register_operand" "=w")
22867
- (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")]
22869
- (set (match_operand:VDQW 2 "s_register_operand" "=w")
22870
- (unspec:VDQW [(match_operand:VDQW 3 "s_register_operand" "2")]
22872
+ (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
22873
+ (match_operand:VDQW 2 "s_register_operand" "w")]
22875
+ (set (match_operand:VDQW 3 "s_register_operand" "=2")
22876
+ (unspec:VDQW [(match_dup 1) (match_dup 2)]
22879
- "vzip.<V_sz_elem>\t%<V_reg>0, %<V_reg>2"
22880
+ "vzip.<V_sz_elem>\t%<V_reg>0, %<V_reg>3"
22881
[(set (attr "neon_type")
22882
(if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
22883
(const_string "neon_bp_simple")
22884
@@ -3947,13 +4451,14 @@
22886
(define_insn "neon_vuzp<mode>_internal"
22887
[(set (match_operand:VDQW 0 "s_register_operand" "=w")
22888
- (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")]
22889
+ (unspec:VDQW [(match_operand:VDQW 1 "s_register_operand" "0")
22890
+ (match_operand:VDQW 2 "s_register_operand" "w")]
22892
- (set (match_operand:VDQW 2 "s_register_operand" "=w")
22893
- (unspec:VDQW [(match_operand:VDQW 3 "s_register_operand" "2")]
22895
+ (set (match_operand:VDQW 3 "s_register_operand" "=2")
22896
+ (unspec:VDQW [(match_dup 1) (match_dup 2)]
22899
- "vuzp.<V_sz_elem>\t%<V_reg>0, %<V_reg>2"
22900
+ "vuzp.<V_sz_elem>\t%<V_reg>0, %<V_reg>3"
22901
[(set (attr "neon_type")
22902
(if_then_else (ne (symbol_ref "<Is_d_reg>") (const_int 0))
22903
(const_string "neon_bp_simple")
22904
@@ -4063,16 +4568,16 @@
22906
(define_insn "neon_vld1<mode>"
22907
[(set (match_operand:VDQX 0 "s_register_operand" "=w")
22908
- (unspec:VDQX [(mem:VDQX (match_operand:SI 1 "s_register_operand" "r"))]
22909
+ (unspec:VDQX [(match_operand:VDQX 1 "neon_struct_operand" "Um")]
22912
- "vld1.<V_sz_elem>\t%h0, [%1]"
22913
+ "vld1.<V_sz_elem>\t%h0, %A1"
22914
[(set_attr "neon_type" "neon_vld1_1_2_regs")]
22917
(define_insn "neon_vld1_lane<mode>"
22918
[(set (match_operand:VDX 0 "s_register_operand" "=w")
22919
- (unspec:VDX [(mem:<V_elem> (match_operand:SI 1 "s_register_operand" "r"))
22920
+ (unspec:VDX [(match_operand:<V_elem> 1 "neon_struct_operand" "Um")
22921
(match_operand:VDX 2 "s_register_operand" "0")
22922
(match_operand:SI 3 "immediate_operand" "i")]
22923
UNSPEC_VLD1_LANE))]
22924
@@ -4083,9 +4588,9 @@
22925
if (lane < 0 || lane >= max)
22926
error ("lane out of range");
22928
- return "vld1.<V_sz_elem>\t%P0, [%1]";
22929
+ return "vld1.<V_sz_elem>\t%P0, %A1";
22931
- return "vld1.<V_sz_elem>\t{%P0[%c3]}, [%1]";
22932
+ return "vld1.<V_sz_elem>\t{%P0[%c3]}, %A1";
22934
[(set (attr "neon_type")
22935
(if_then_else (eq (const_string "<V_mode_nunits>") (const_int 2))
22936
@@ -4095,7 +4600,7 @@
22938
(define_insn "neon_vld1_lane<mode>"
22939
[(set (match_operand:VQX 0 "s_register_operand" "=w")
22940
- (unspec:VQX [(mem:<V_elem> (match_operand:SI 1 "s_register_operand" "r"))
22941
+ (unspec:VQX [(match_operand:<V_elem> 1 "neon_struct_operand" "Um")
22942
(match_operand:VQX 2 "s_register_operand" "0")
22943
(match_operand:SI 3 "immediate_operand" "i")]
22944
UNSPEC_VLD1_LANE))]
22945
@@ -4114,9 +4619,9 @@
22947
operands[0] = gen_rtx_REG (<V_HALF>mode, regno);
22949
- return "vld1.<V_sz_elem>\t%P0, [%1]";
22950
+ return "vld1.<V_sz_elem>\t%P0, %A1";
22952
- return "vld1.<V_sz_elem>\t{%P0[%c3]}, [%1]";
22953
+ return "vld1.<V_sz_elem>\t{%P0[%c3]}, %A1";
22955
[(set (attr "neon_type")
22956
(if_then_else (eq (const_string "<V_mode_nunits>") (const_int 2))
22957
@@ -4126,14 +4631,14 @@
22959
(define_insn "neon_vld1_dup<mode>"
22960
[(set (match_operand:VDX 0 "s_register_operand" "=w")
22961
- (unspec:VDX [(mem:<V_elem> (match_operand:SI 1 "s_register_operand" "r"))]
22962
+ (unspec:VDX [(match_operand:<V_elem> 1 "neon_struct_operand" "Um")]
22966
if (GET_MODE_NUNITS (<MODE>mode) > 1)
22967
- return "vld1.<V_sz_elem>\t{%P0[]}, [%1]";
22968
+ return "vld1.<V_sz_elem>\t{%P0[]}, %A1";
22970
- return "vld1.<V_sz_elem>\t%h0, [%1]";
22971
+ return "vld1.<V_sz_elem>\t%h0, %A1";
22973
[(set (attr "neon_type")
22974
(if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
22975
@@ -4143,14 +4648,14 @@
22977
(define_insn "neon_vld1_dup<mode>"
22978
[(set (match_operand:VQX 0 "s_register_operand" "=w")
22979
- (unspec:VQX [(mem:<V_elem> (match_operand:SI 1 "s_register_operand" "r"))]
22980
+ (unspec:VQX [(match_operand:<V_elem> 1 "neon_struct_operand" "Um")]
22984
if (GET_MODE_NUNITS (<MODE>mode) > 2)
22985
- return "vld1.<V_sz_elem>\t{%e0[], %f0[]}, [%1]";
22986
+ return "vld1.<V_sz_elem>\t{%e0[], %f0[]}, %A1";
22988
- return "vld1.<V_sz_elem>\t%h0, [%1]";
22989
+ return "vld1.<V_sz_elem>\t%h0, %A1";
22991
[(set (attr "neon_type")
22992
(if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
22993
@@ -4159,15 +4664,15 @@
22996
(define_insn "neon_vst1<mode>"
22997
- [(set (mem:VDQX (match_operand:SI 0 "s_register_operand" "r"))
22998
+ [(set (match_operand:VDQX 0 "neon_struct_operand" "=Um")
22999
(unspec:VDQX [(match_operand:VDQX 1 "s_register_operand" "w")]
23002
- "vst1.<V_sz_elem>\t%h1, [%0]"
23003
+ "vst1.<V_sz_elem>\t%h1, %A0"
23004
[(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")])
23006
(define_insn "neon_vst1_lane<mode>"
23007
- [(set (mem:<V_elem> (match_operand:SI 0 "s_register_operand" "r"))
23008
+ [(set (match_operand:<V_elem> 0 "neon_struct_operand" "=Um")
23009
(vec_select:<V_elem>
23010
(match_operand:VDX 1 "s_register_operand" "w")
23011
(parallel [(match_operand:SI 2 "neon_lane_number" "i")])))]
23012
@@ -4178,9 +4683,9 @@
23013
if (lane < 0 || lane >= max)
23014
error ("lane out of range");
23016
- return "vst1.<V_sz_elem>\t{%P1}, [%0]";
23017
+ return "vst1.<V_sz_elem>\t{%P1}, %A0";
23019
- return "vst1.<V_sz_elem>\t{%P1[%c2]}, [%0]";
23020
+ return "vst1.<V_sz_elem>\t{%P1[%c2]}, %A0";
23022
[(set (attr "neon_type")
23023
(if_then_else (eq (const_string "<V_mode_nunits>") (const_int 1))
23024
@@ -4188,7 +4693,7 @@
23025
(const_string "neon_vst1_vst2_lane")))])
23027
(define_insn "neon_vst1_lane<mode>"
23028
- [(set (mem:<V_elem> (match_operand:SI 0 "s_register_operand" "r"))
23029
+ [(set (match_operand:<V_elem> 0 "neon_struct_operand" "=Um")
23030
(vec_select:<V_elem>
23031
(match_operand:VQX 1 "s_register_operand" "w")
23032
(parallel [(match_operand:SI 2 "neon_lane_number" "i")])))]
23033
@@ -4207,24 +4712,24 @@
23035
operands[1] = gen_rtx_REG (<V_HALF>mode, regno);
23037
- return "vst1.<V_sz_elem>\t{%P1}, [%0]";
23038
+ return "vst1.<V_sz_elem>\t{%P1}, %A0";
23040
- return "vst1.<V_sz_elem>\t{%P1[%c2]}, [%0]";
23041
+ return "vst1.<V_sz_elem>\t{%P1[%c2]}, %A0";
23043
[(set_attr "neon_type" "neon_vst1_vst2_lane")]
23046
(define_insn "neon_vld2<mode>"
23047
[(set (match_operand:TI 0 "s_register_operand" "=w")
23048
- (unspec:TI [(mem:TI (match_operand:SI 1 "s_register_operand" "r"))
23049
+ (unspec:TI [(match_operand:TI 1 "neon_struct_operand" "Um")
23050
(unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23054
if (<V_sz_elem> == 64)
23055
- return "vld1.64\t%h0, [%1]";
23056
+ return "vld1.64\t%h0, %A1";
23058
- return "vld2.<V_sz_elem>\t%h0, [%1]";
23059
+ return "vld2.<V_sz_elem>\t%h0, %A1";
23061
[(set (attr "neon_type")
23062
(if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
23063
@@ -4234,16 +4739,16 @@
23065
(define_insn "neon_vld2<mode>"
23066
[(set (match_operand:OI 0 "s_register_operand" "=w")
23067
- (unspec:OI [(mem:OI (match_operand:SI 1 "s_register_operand" "r"))
23068
+ (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
23069
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23072
- "vld2.<V_sz_elem>\t%h0, [%1]"
23073
+ "vld2.<V_sz_elem>\t%h0, %A1"
23074
[(set_attr "neon_type" "neon_vld2_2_regs_vld1_vld2_all_lanes")])
23076
(define_insn "neon_vld2_lane<mode>"
23077
[(set (match_operand:TI 0 "s_register_operand" "=w")
23078
- (unspec:TI [(mem:<V_two_elem> (match_operand:SI 1 "s_register_operand" "r"))
23079
+ (unspec:TI [(match_operand:<V_two_elem> 1 "neon_struct_operand" "Um")
23080
(match_operand:TI 2 "s_register_operand" "0")
23081
(match_operand:SI 3 "immediate_operand" "i")
23082
(unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23083
@@ -4260,7 +4765,7 @@
23084
ops[1] = gen_rtx_REG (DImode, regno + 2);
23085
ops[2] = operands[1];
23086
ops[3] = operands[3];
23087
- output_asm_insn ("vld2.<V_sz_elem>\t{%P0[%c3], %P1[%c3]}, [%2]", ops);
23088
+ output_asm_insn ("vld2.<V_sz_elem>\t{%P0[%c3], %P1[%c3]}, %A2", ops);
23091
[(set_attr "neon_type" "neon_vld1_vld2_lane")]
23092
@@ -4268,7 +4773,7 @@
23094
(define_insn "neon_vld2_lane<mode>"
23095
[(set (match_operand:OI 0 "s_register_operand" "=w")
23096
- (unspec:OI [(mem:<V_two_elem> (match_operand:SI 1 "s_register_operand" "r"))
23097
+ (unspec:OI [(match_operand:<V_two_elem> 1 "neon_struct_operand" "Um")
23098
(match_operand:OI 2 "s_register_operand" "0")
23099
(match_operand:SI 3 "immediate_operand" "i")
23100
(unspec:VMQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23101
@@ -4290,7 +4795,7 @@
23102
ops[1] = gen_rtx_REG (DImode, regno + 4);
23103
ops[2] = operands[1];
23104
ops[3] = GEN_INT (lane);
23105
- output_asm_insn ("vld2.<V_sz_elem>\t{%P0[%c3], %P1[%c3]}, [%2]", ops);
23106
+ output_asm_insn ("vld2.<V_sz_elem>\t{%P0[%c3], %P1[%c3]}, %A2", ops);
23109
[(set_attr "neon_type" "neon_vld1_vld2_lane")]
23110
@@ -4298,15 +4803,15 @@
23112
(define_insn "neon_vld2_dup<mode>"
23113
[(set (match_operand:TI 0 "s_register_operand" "=w")
23114
- (unspec:TI [(mem:<V_two_elem> (match_operand:SI 1 "s_register_operand" "r"))
23115
+ (unspec:TI [(match_operand:<V_two_elem> 1 "neon_struct_operand" "Um")
23116
(unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23120
if (GET_MODE_NUNITS (<MODE>mode) > 1)
23121
- return "vld2.<V_sz_elem>\t{%e0[], %f0[]}, [%1]";
23122
+ return "vld2.<V_sz_elem>\t{%e0[], %f0[]}, %A1";
23124
- return "vld1.<V_sz_elem>\t%h0, [%1]";
23125
+ return "vld1.<V_sz_elem>\t%h0, %A1";
23127
[(set (attr "neon_type")
23128
(if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
23129
@@ -4315,16 +4820,16 @@
23132
(define_insn "neon_vst2<mode>"
23133
- [(set (mem:TI (match_operand:SI 0 "s_register_operand" "r"))
23134
+ [(set (match_operand:TI 0 "neon_struct_operand" "=Um")
23135
(unspec:TI [(match_operand:TI 1 "s_register_operand" "w")
23136
(unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23140
if (<V_sz_elem> == 64)
23141
- return "vst1.64\t%h1, [%0]";
23142
+ return "vst1.64\t%h1, %A0";
23144
- return "vst2.<V_sz_elem>\t%h1, [%0]";
23145
+ return "vst2.<V_sz_elem>\t%h1, %A0";
23147
[(set (attr "neon_type")
23148
(if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
23149
@@ -4333,17 +4838,17 @@
23152
(define_insn "neon_vst2<mode>"
23153
- [(set (mem:OI (match_operand:SI 0 "s_register_operand" "r"))
23154
+ [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
23155
(unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
23156
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23159
- "vst2.<V_sz_elem>\t%h1, [%0]"
23160
+ "vst2.<V_sz_elem>\t%h1, %A0"
23161
[(set_attr "neon_type" "neon_vst1_1_2_regs_vst2_2_regs")]
23164
(define_insn "neon_vst2_lane<mode>"
23165
- [(set (mem:<V_two_elem> (match_operand:SI 0 "s_register_operand" "r"))
23166
+ [(set (match_operand:<V_two_elem> 0 "neon_struct_operand" "=Um")
23167
(unspec:<V_two_elem>
23168
[(match_operand:TI 1 "s_register_operand" "w")
23169
(match_operand:SI 2 "immediate_operand" "i")
23170
@@ -4361,14 +4866,14 @@
23171
ops[1] = gen_rtx_REG (DImode, regno);
23172
ops[2] = gen_rtx_REG (DImode, regno + 2);
23173
ops[3] = operands[2];
23174
- output_asm_insn ("vst2.<V_sz_elem>\t{%P1[%c3], %P2[%c3]}, [%0]", ops);
23175
+ output_asm_insn ("vst2.<V_sz_elem>\t{%P1[%c3], %P2[%c3]}, %A0", ops);
23178
[(set_attr "neon_type" "neon_vst1_vst2_lane")]
23181
(define_insn "neon_vst2_lane<mode>"
23182
- [(set (mem:<V_two_elem> (match_operand:SI 0 "s_register_operand" "r"))
23183
+ [(set (match_operand:<V_two_elem> 0 "neon_struct_operand" "=Um")
23184
(unspec:<V_two_elem>
23185
[(match_operand:OI 1 "s_register_operand" "w")
23186
(match_operand:SI 2 "immediate_operand" "i")
23187
@@ -4391,7 +4896,7 @@
23188
ops[1] = gen_rtx_REG (DImode, regno);
23189
ops[2] = gen_rtx_REG (DImode, regno + 4);
23190
ops[3] = GEN_INT (lane);
23191
- output_asm_insn ("vst2.<V_sz_elem>\t{%P1[%c3], %P2[%c3]}, [%0]", ops);
23192
+ output_asm_insn ("vst2.<V_sz_elem>\t{%P1[%c3], %P2[%c3]}, %A0", ops);
23195
[(set_attr "neon_type" "neon_vst1_vst2_lane")]
23196
@@ -4399,15 +4904,15 @@
23198
(define_insn "neon_vld3<mode>"
23199
[(set (match_operand:EI 0 "s_register_operand" "=w")
23200
- (unspec:EI [(mem:EI (match_operand:SI 1 "s_register_operand" "r"))
23201
+ (unspec:EI [(match_operand:EI 1 "neon_struct_operand" "Um")
23202
(unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23206
if (<V_sz_elem> == 64)
23207
- return "vld1.64\t%h0, [%1]";
23208
+ return "vld1.64\t%h0, %A1";
23210
- return "vld3.<V_sz_elem>\t%h0, [%1]";
23211
+ return "vld3.<V_sz_elem>\t%h0, %A1";
23213
[(set (attr "neon_type")
23214
(if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
23215
@@ -4416,27 +4921,25 @@
23218
(define_expand "neon_vld3<mode>"
23219
- [(match_operand:CI 0 "s_register_operand" "=w")
23220
- (match_operand:SI 1 "s_register_operand" "+r")
23221
+ [(match_operand:CI 0 "s_register_operand")
23222
+ (match_operand:CI 1 "neon_struct_operand")
23223
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23226
- emit_insn (gen_neon_vld3qa<mode> (operands[0], operands[0],
23227
- operands[1], operands[1]));
23228
- emit_insn (gen_neon_vld3qb<mode> (operands[0], operands[0],
23229
- operands[1], operands[1]));
23232
+ mem = adjust_address (operands[1], EImode, 0);
23233
+ emit_insn (gen_neon_vld3qa<mode> (operands[0], mem));
23234
+ mem = adjust_address (mem, EImode, GET_MODE_SIZE (EImode));
23235
+ emit_insn (gen_neon_vld3qb<mode> (operands[0], mem, operands[0]));
23239
(define_insn "neon_vld3qa<mode>"
23240
[(set (match_operand:CI 0 "s_register_operand" "=w")
23241
- (unspec:CI [(mem:CI (match_operand:SI 3 "s_register_operand" "2"))
23242
- (match_operand:CI 1 "s_register_operand" "0")
23243
+ (unspec:CI [(match_operand:EI 1 "neon_struct_operand" "Um")
23244
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23246
- (set (match_operand:SI 2 "s_register_operand" "=r")
23247
- (plus:SI (match_dup 3)
23248
- (const_int 24)))]
23252
int regno = REGNO (operands[0]);
23253
@@ -4444,8 +4947,8 @@
23254
ops[0] = gen_rtx_REG (DImode, regno);
23255
ops[1] = gen_rtx_REG (DImode, regno + 4);
23256
ops[2] = gen_rtx_REG (DImode, regno + 8);
23257
- ops[3] = operands[2];
23258
- output_asm_insn ("vld3.<V_sz_elem>\t{%P0, %P1, %P2}, [%3]!", ops);
23259
+ ops[3] = operands[1];
23260
+ output_asm_insn ("vld3.<V_sz_elem>\t{%P0, %P1, %P2}, %A3", ops);
23263
[(set_attr "neon_type" "neon_vld3_vld4")]
23264
@@ -4453,13 +4956,10 @@
23266
(define_insn "neon_vld3qb<mode>"
23267
[(set (match_operand:CI 0 "s_register_operand" "=w")
23268
- (unspec:CI [(mem:CI (match_operand:SI 3 "s_register_operand" "2"))
23269
- (match_operand:CI 1 "s_register_operand" "0")
23270
+ (unspec:CI [(match_operand:EI 1 "neon_struct_operand" "Um")
23271
+ (match_operand:CI 2 "s_register_operand" "0")
23272
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23274
- (set (match_operand:SI 2 "s_register_operand" "=r")
23275
- (plus:SI (match_dup 3)
23276
- (const_int 24)))]
23280
int regno = REGNO (operands[0]);
23281
@@ -4467,8 +4967,8 @@
23282
ops[0] = gen_rtx_REG (DImode, regno + 2);
23283
ops[1] = gen_rtx_REG (DImode, regno + 6);
23284
ops[2] = gen_rtx_REG (DImode, regno + 10);
23285
- ops[3] = operands[2];
23286
- output_asm_insn ("vld3.<V_sz_elem>\t{%P0, %P1, %P2}, [%3]!", ops);
23287
+ ops[3] = operands[1];
23288
+ output_asm_insn ("vld3.<V_sz_elem>\t{%P0, %P1, %P2}, %A3", ops);
23291
[(set_attr "neon_type" "neon_vld3_vld4")]
23292
@@ -4476,7 +4976,7 @@
23294
(define_insn "neon_vld3_lane<mode>"
23295
[(set (match_operand:EI 0 "s_register_operand" "=w")
23296
- (unspec:EI [(mem:<V_three_elem> (match_operand:SI 1 "s_register_operand" "r"))
23297
+ (unspec:EI [(match_operand:<V_three_elem> 1 "neon_struct_operand" "Um")
23298
(match_operand:EI 2 "s_register_operand" "0")
23299
(match_operand:SI 3 "immediate_operand" "i")
23300
(unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23301
@@ -4494,7 +4994,7 @@
23302
ops[2] = gen_rtx_REG (DImode, regno + 4);
23303
ops[3] = operands[1];
23304
ops[4] = operands[3];
23305
- output_asm_insn ("vld3.<V_sz_elem>\t{%P0[%c4], %P1[%c4], %P2[%c4]}, [%3]",
23306
+ output_asm_insn ("vld3.<V_sz_elem>\t{%P0[%c4], %P1[%c4], %P2[%c4]}, %A3",
23310
@@ -4503,7 +5003,7 @@
23312
(define_insn "neon_vld3_lane<mode>"
23313
[(set (match_operand:CI 0 "s_register_operand" "=w")
23314
- (unspec:CI [(mem:<V_three_elem> (match_operand:SI 1 "s_register_operand" "r"))
23315
+ (unspec:CI [(match_operand:<V_three_elem> 1 "neon_struct_operand" "Um")
23316
(match_operand:CI 2 "s_register_operand" "0")
23317
(match_operand:SI 3 "immediate_operand" "i")
23318
(unspec:VMQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23319
@@ -4526,7 +5026,7 @@
23320
ops[2] = gen_rtx_REG (DImode, regno + 8);
23321
ops[3] = operands[1];
23322
ops[4] = GEN_INT (lane);
23323
- output_asm_insn ("vld3.<V_sz_elem>\t{%P0[%c4], %P1[%c4], %P2[%c4]}, [%3]",
23324
+ output_asm_insn ("vld3.<V_sz_elem>\t{%P0[%c4], %P1[%c4], %P2[%c4]}, %A3",
23328
@@ -4535,7 +5035,7 @@
23330
(define_insn "neon_vld3_dup<mode>"
23331
[(set (match_operand:EI 0 "s_register_operand" "=w")
23332
- (unspec:EI [(mem:<V_three_elem> (match_operand:SI 1 "s_register_operand" "r"))
23333
+ (unspec:EI [(match_operand:<V_three_elem> 1 "neon_struct_operand" "Um")
23334
(unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23337
@@ -4548,11 +5048,11 @@
23338
ops[1] = gen_rtx_REG (DImode, regno + 2);
23339
ops[2] = gen_rtx_REG (DImode, regno + 4);
23340
ops[3] = operands[1];
23341
- output_asm_insn ("vld3.<V_sz_elem>\t{%P0[], %P1[], %P2[]}, [%3]", ops);
23342
+ output_asm_insn ("vld3.<V_sz_elem>\t{%P0[], %P1[], %P2[]}, %A3", ops);
23346
- return "vld1.<V_sz_elem>\t%h0, [%1]";
23347
+ return "vld1.<V_sz_elem>\t%h0, %A1";
23349
[(set (attr "neon_type")
23350
(if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
23351
@@ -4560,16 +5060,16 @@
23352
(const_string "neon_vld1_1_2_regs")))])
23354
(define_insn "neon_vst3<mode>"
23355
- [(set (mem:EI (match_operand:SI 0 "s_register_operand" "r"))
23356
+ [(set (match_operand:EI 0 "neon_struct_operand" "=Um")
23357
(unspec:EI [(match_operand:EI 1 "s_register_operand" "w")
23358
(unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23362
if (<V_sz_elem> == 64)
23363
- return "vst1.64\t%h1, [%0]";
23364
+ return "vst1.64\t%h1, %A0";
23366
- return "vst3.<V_sz_elem>\t%h1, [%0]";
23367
+ return "vst3.<V_sz_elem>\t%h1, %A0";
23369
[(set (attr "neon_type")
23370
(if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
23371
@@ -4577,62 +5077,60 @@
23372
(const_string "neon_vst2_4_regs_vst3_vst4")))])
23374
(define_expand "neon_vst3<mode>"
23375
- [(match_operand:SI 0 "s_register_operand" "+r")
23376
- (match_operand:CI 1 "s_register_operand" "w")
23377
+ [(match_operand:CI 0 "neon_struct_operand")
23378
+ (match_operand:CI 1 "s_register_operand")
23379
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23382
- emit_insn (gen_neon_vst3qa<mode> (operands[0], operands[0], operands[1]));
23383
- emit_insn (gen_neon_vst3qb<mode> (operands[0], operands[0], operands[1]));
23386
+ mem = adjust_address (operands[0], EImode, 0);
23387
+ emit_insn (gen_neon_vst3qa<mode> (mem, operands[1]));
23388
+ mem = adjust_address (mem, EImode, GET_MODE_SIZE (EImode));
23389
+ emit_insn (gen_neon_vst3qb<mode> (mem, operands[1]));
23393
(define_insn "neon_vst3qa<mode>"
23394
- [(set (mem:EI (match_operand:SI 1 "s_register_operand" "0"))
23395
- (unspec:EI [(match_operand:CI 2 "s_register_operand" "w")
23396
+ [(set (match_operand:EI 0 "neon_struct_operand" "=Um")
23397
+ (unspec:EI [(match_operand:CI 1 "s_register_operand" "w")
23398
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23400
- (set (match_operand:SI 0 "s_register_operand" "=r")
23401
- (plus:SI (match_dup 1)
23402
- (const_int 24)))]
23406
- int regno = REGNO (operands[2]);
23407
+ int regno = REGNO (operands[1]);
23409
ops[0] = operands[0];
23410
ops[1] = gen_rtx_REG (DImode, regno);
23411
ops[2] = gen_rtx_REG (DImode, regno + 4);
23412
ops[3] = gen_rtx_REG (DImode, regno + 8);
23413
- output_asm_insn ("vst3.<V_sz_elem>\t{%P1, %P2, %P3}, [%0]!", ops);
23414
+ output_asm_insn ("vst3.<V_sz_elem>\t{%P1, %P2, %P3}, %A0", ops);
23417
[(set_attr "neon_type" "neon_vst2_4_regs_vst3_vst4")]
23420
(define_insn "neon_vst3qb<mode>"
23421
- [(set (mem:EI (match_operand:SI 1 "s_register_operand" "0"))
23422
- (unspec:EI [(match_operand:CI 2 "s_register_operand" "w")
23423
+ [(set (match_operand:EI 0 "neon_struct_operand" "=Um")
23424
+ (unspec:EI [(match_operand:CI 1 "s_register_operand" "w")
23425
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23427
- (set (match_operand:SI 0 "s_register_operand" "=r")
23428
- (plus:SI (match_dup 1)
23429
- (const_int 24)))]
23433
- int regno = REGNO (operands[2]);
23434
+ int regno = REGNO (operands[1]);
23436
ops[0] = operands[0];
23437
ops[1] = gen_rtx_REG (DImode, regno + 2);
23438
ops[2] = gen_rtx_REG (DImode, regno + 6);
23439
ops[3] = gen_rtx_REG (DImode, regno + 10);
23440
- output_asm_insn ("vst3.<V_sz_elem>\t{%P1, %P2, %P3}, [%0]!", ops);
23441
+ output_asm_insn ("vst3.<V_sz_elem>\t{%P1, %P2, %P3}, %A0", ops);
23444
[(set_attr "neon_type" "neon_vst2_4_regs_vst3_vst4")]
23447
(define_insn "neon_vst3_lane<mode>"
23448
- [(set (mem:<V_three_elem> (match_operand:SI 0 "s_register_operand" "r"))
23449
+ [(set (match_operand:<V_three_elem> 0 "neon_struct_operand" "=Um")
23450
(unspec:<V_three_elem>
23451
[(match_operand:EI 1 "s_register_operand" "w")
23452
(match_operand:SI 2 "immediate_operand" "i")
23453
@@ -4651,7 +5149,7 @@
23454
ops[2] = gen_rtx_REG (DImode, regno + 2);
23455
ops[3] = gen_rtx_REG (DImode, regno + 4);
23456
ops[4] = operands[2];
23457
- output_asm_insn ("vst3.<V_sz_elem>\t{%P1[%c4], %P2[%c4], %P3[%c4]}, [%0]",
23458
+ output_asm_insn ("vst3.<V_sz_elem>\t{%P1[%c4], %P2[%c4], %P3[%c4]}, %A0",
23462
@@ -4659,7 +5157,7 @@
23465
(define_insn "neon_vst3_lane<mode>"
23466
- [(set (mem:<V_three_elem> (match_operand:SI 0 "s_register_operand" "r"))
23467
+ [(set (match_operand:<V_three_elem> 0 "neon_struct_operand" "=Um")
23468
(unspec:<V_three_elem>
23469
[(match_operand:CI 1 "s_register_operand" "w")
23470
(match_operand:SI 2 "immediate_operand" "i")
23471
@@ -4683,7 +5181,7 @@
23472
ops[2] = gen_rtx_REG (DImode, regno + 4);
23473
ops[3] = gen_rtx_REG (DImode, regno + 8);
23474
ops[4] = GEN_INT (lane);
23475
- output_asm_insn ("vst3.<V_sz_elem>\t{%P1[%c4], %P2[%c4], %P3[%c4]}, [%0]",
23476
+ output_asm_insn ("vst3.<V_sz_elem>\t{%P1[%c4], %P2[%c4], %P3[%c4]}, %A0",
23480
@@ -4691,15 +5189,15 @@
23482
(define_insn "neon_vld4<mode>"
23483
[(set (match_operand:OI 0 "s_register_operand" "=w")
23484
- (unspec:OI [(mem:OI (match_operand:SI 1 "s_register_operand" "r"))
23485
+ (unspec:OI [(match_operand:OI 1 "neon_struct_operand" "Um")
23486
(unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23490
if (<V_sz_elem> == 64)
23491
- return "vld1.64\t%h0, [%1]";
23492
+ return "vld1.64\t%h0, %A1";
23494
- return "vld4.<V_sz_elem>\t%h0, [%1]";
23495
+ return "vld4.<V_sz_elem>\t%h0, %A1";
23497
[(set (attr "neon_type")
23498
(if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
23499
@@ -4708,27 +5206,25 @@
23502
(define_expand "neon_vld4<mode>"
23503
- [(match_operand:XI 0 "s_register_operand" "=w")
23504
- (match_operand:SI 1 "s_register_operand" "+r")
23505
+ [(match_operand:XI 0 "s_register_operand")
23506
+ (match_operand:XI 1 "neon_struct_operand")
23507
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23510
- emit_insn (gen_neon_vld4qa<mode> (operands[0], operands[0],
23511
- operands[1], operands[1]));
23512
- emit_insn (gen_neon_vld4qb<mode> (operands[0], operands[0],
23513
- operands[1], operands[1]));
23516
+ mem = adjust_address (operands[1], OImode, 0);
23517
+ emit_insn (gen_neon_vld4qa<mode> (operands[0], mem));
23518
+ mem = adjust_address (mem, OImode, GET_MODE_SIZE (OImode));
23519
+ emit_insn (gen_neon_vld4qb<mode> (operands[0], mem, operands[0]));
23523
(define_insn "neon_vld4qa<mode>"
23524
[(set (match_operand:XI 0 "s_register_operand" "=w")
23525
- (unspec:XI [(mem:XI (match_operand:SI 3 "s_register_operand" "2"))
23526
- (match_operand:XI 1 "s_register_operand" "0")
23527
+ (unspec:XI [(match_operand:OI 1 "neon_struct_operand" "Um")
23528
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23530
- (set (match_operand:SI 2 "s_register_operand" "=r")
23531
- (plus:SI (match_dup 3)
23532
- (const_int 32)))]
23536
int regno = REGNO (operands[0]);
23537
@@ -4737,8 +5233,8 @@
23538
ops[1] = gen_rtx_REG (DImode, regno + 4);
23539
ops[2] = gen_rtx_REG (DImode, regno + 8);
23540
ops[3] = gen_rtx_REG (DImode, regno + 12);
23541
- ops[4] = operands[2];
23542
- output_asm_insn ("vld4.<V_sz_elem>\t{%P0, %P1, %P2, %P3}, [%4]!", ops);
23543
+ ops[4] = operands[1];
23544
+ output_asm_insn ("vld4.<V_sz_elem>\t{%P0, %P1, %P2, %P3}, %A4", ops);
23547
[(set_attr "neon_type" "neon_vld3_vld4")]
23548
@@ -4746,13 +5242,10 @@
23550
(define_insn "neon_vld4qb<mode>"
23551
[(set (match_operand:XI 0 "s_register_operand" "=w")
23552
- (unspec:XI [(mem:XI (match_operand:SI 3 "s_register_operand" "2"))
23553
- (match_operand:XI 1 "s_register_operand" "0")
23554
+ (unspec:XI [(match_operand:OI 1 "neon_struct_operand" "Um")
23555
+ (match_operand:XI 2 "s_register_operand" "0")
23556
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23558
- (set (match_operand:SI 2 "s_register_operand" "=r")
23559
- (plus:SI (match_dup 3)
23560
- (const_int 32)))]
23564
int regno = REGNO (operands[0]);
23565
@@ -4761,8 +5254,8 @@
23566
ops[1] = gen_rtx_REG (DImode, regno + 6);
23567
ops[2] = gen_rtx_REG (DImode, regno + 10);
23568
ops[3] = gen_rtx_REG (DImode, regno + 14);
23569
- ops[4] = operands[2];
23570
- output_asm_insn ("vld4.<V_sz_elem>\t{%P0, %P1, %P2, %P3}, [%4]!", ops);
23571
+ ops[4] = operands[1];
23572
+ output_asm_insn ("vld4.<V_sz_elem>\t{%P0, %P1, %P2, %P3}, %A4", ops);
23575
[(set_attr "neon_type" "neon_vld3_vld4")]
23576
@@ -4770,7 +5263,7 @@
23578
(define_insn "neon_vld4_lane<mode>"
23579
[(set (match_operand:OI 0 "s_register_operand" "=w")
23580
- (unspec:OI [(mem:<V_four_elem> (match_operand:SI 1 "s_register_operand" "r"))
23581
+ (unspec:OI [(match_operand:<V_four_elem> 1 "neon_struct_operand" "Um")
23582
(match_operand:OI 2 "s_register_operand" "0")
23583
(match_operand:SI 3 "immediate_operand" "i")
23584
(unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23585
@@ -4789,7 +5282,7 @@
23586
ops[3] = gen_rtx_REG (DImode, regno + 6);
23587
ops[4] = operands[1];
23588
ops[5] = operands[3];
23589
- output_asm_insn ("vld4.<V_sz_elem>\t{%P0[%c5], %P1[%c5], %P2[%c5], %P3[%c5]}, [%4]",
23590
+ output_asm_insn ("vld4.<V_sz_elem>\t{%P0[%c5], %P1[%c5], %P2[%c5], %P3[%c5]}, %A4",
23594
@@ -4798,7 +5291,7 @@
23596
(define_insn "neon_vld4_lane<mode>"
23597
[(set (match_operand:XI 0 "s_register_operand" "=w")
23598
- (unspec:XI [(mem:<V_four_elem> (match_operand:SI 1 "s_register_operand" "r"))
23599
+ (unspec:XI [(match_operand:<V_four_elem> 1 "neon_struct_operand" "Um")
23600
(match_operand:XI 2 "s_register_operand" "0")
23601
(match_operand:SI 3 "immediate_operand" "i")
23602
(unspec:VMQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23603
@@ -4822,7 +5315,7 @@
23604
ops[3] = gen_rtx_REG (DImode, regno + 12);
23605
ops[4] = operands[1];
23606
ops[5] = GEN_INT (lane);
23607
- output_asm_insn ("vld4.<V_sz_elem>\t{%P0[%c5], %P1[%c5], %P2[%c5], %P3[%c5]}, [%4]",
23608
+ output_asm_insn ("vld4.<V_sz_elem>\t{%P0[%c5], %P1[%c5], %P2[%c5], %P3[%c5]}, %A4",
23612
@@ -4831,7 +5324,7 @@
23614
(define_insn "neon_vld4_dup<mode>"
23615
[(set (match_operand:OI 0 "s_register_operand" "=w")
23616
- (unspec:OI [(mem:<V_four_elem> (match_operand:SI 1 "s_register_operand" "r"))
23617
+ (unspec:OI [(match_operand:<V_four_elem> 1 "neon_struct_operand" "Um")
23618
(unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23621
@@ -4845,12 +5338,12 @@
23622
ops[2] = gen_rtx_REG (DImode, regno + 4);
23623
ops[3] = gen_rtx_REG (DImode, regno + 6);
23624
ops[4] = operands[1];
23625
- output_asm_insn ("vld4.<V_sz_elem>\t{%P0[], %P1[], %P2[], %P3[]}, [%4]",
23626
+ output_asm_insn ("vld4.<V_sz_elem>\t{%P0[], %P1[], %P2[], %P3[]}, %A4",
23631
- return "vld1.<V_sz_elem>\t%h0, [%1]";
23632
+ return "vld1.<V_sz_elem>\t%h0, %A1";
23634
[(set (attr "neon_type")
23635
(if_then_else (gt (const_string "<V_mode_nunits>") (const_string "1"))
23636
@@ -4859,16 +5352,16 @@
23639
(define_insn "neon_vst4<mode>"
23640
- [(set (mem:OI (match_operand:SI 0 "s_register_operand" "r"))
23641
+ [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
23642
(unspec:OI [(match_operand:OI 1 "s_register_operand" "w")
23643
(unspec:VDX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23647
if (<V_sz_elem> == 64)
23648
- return "vst1.64\t%h1, [%0]";
23649
+ return "vst1.64\t%h1, %A0";
23651
- return "vst4.<V_sz_elem>\t%h1, [%0]";
23652
+ return "vst4.<V_sz_elem>\t%h1, %A0";
23654
[(set (attr "neon_type")
23655
(if_then_else (eq (const_string "<V_sz_elem>") (const_string "64"))
23656
@@ -4877,64 +5370,62 @@
23659
(define_expand "neon_vst4<mode>"
23660
- [(match_operand:SI 0 "s_register_operand" "+r")
23661
- (match_operand:XI 1 "s_register_operand" "w")
23662
+ [(match_operand:XI 0 "neon_struct_operand")
23663
+ (match_operand:XI 1 "s_register_operand")
23664
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23667
- emit_insn (gen_neon_vst4qa<mode> (operands[0], operands[0], operands[1]));
23668
- emit_insn (gen_neon_vst4qb<mode> (operands[0], operands[0], operands[1]));
23671
+ mem = adjust_address (operands[0], OImode, 0);
23672
+ emit_insn (gen_neon_vst4qa<mode> (mem, operands[1]));
23673
+ mem = adjust_address (mem, OImode, GET_MODE_SIZE (OImode));
23674
+ emit_insn (gen_neon_vst4qb<mode> (mem, operands[1]));
23678
(define_insn "neon_vst4qa<mode>"
23679
- [(set (mem:OI (match_operand:SI 1 "s_register_operand" "0"))
23680
- (unspec:OI [(match_operand:XI 2 "s_register_operand" "w")
23681
+ [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
23682
+ (unspec:OI [(match_operand:XI 1 "s_register_operand" "w")
23683
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23685
- (set (match_operand:SI 0 "s_register_operand" "=r")
23686
- (plus:SI (match_dup 1)
23687
- (const_int 32)))]
23691
- int regno = REGNO (operands[2]);
23692
+ int regno = REGNO (operands[1]);
23694
ops[0] = operands[0];
23695
ops[1] = gen_rtx_REG (DImode, regno);
23696
ops[2] = gen_rtx_REG (DImode, regno + 4);
23697
ops[3] = gen_rtx_REG (DImode, regno + 8);
23698
ops[4] = gen_rtx_REG (DImode, regno + 12);
23699
- output_asm_insn ("vst4.<V_sz_elem>\t{%P1, %P2, %P3, %P4}, [%0]!", ops);
23700
+ output_asm_insn ("vst4.<V_sz_elem>\t{%P1, %P2, %P3, %P4}, %A0", ops);
23703
[(set_attr "neon_type" "neon_vst2_4_regs_vst3_vst4")]
23706
(define_insn "neon_vst4qb<mode>"
23707
- [(set (mem:OI (match_operand:SI 1 "s_register_operand" "0"))
23708
- (unspec:OI [(match_operand:XI 2 "s_register_operand" "w")
23709
+ [(set (match_operand:OI 0 "neon_struct_operand" "=Um")
23710
+ (unspec:OI [(match_operand:XI 1 "s_register_operand" "w")
23711
(unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
23713
- (set (match_operand:SI 0 "s_register_operand" "=r")
23714
- (plus:SI (match_dup 1)
23715
- (const_int 32)))]
23719
- int regno = REGNO (operands[2]);
23720
+ int regno = REGNO (operands[1]);
23722
ops[0] = operands[0];
23723
ops[1] = gen_rtx_REG (DImode, regno + 2);
23724
ops[2] = gen_rtx_REG (DImode, regno + 6);
23725
ops[3] = gen_rtx_REG (DImode, regno + 10);
23726
ops[4] = gen_rtx_REG (DImode, regno + 14);
23727
- output_asm_insn ("vst4.<V_sz_elem>\t{%P1, %P2, %P3, %P4}, [%0]!", ops);
23728
+ output_asm_insn ("vst4.<V_sz_elem>\t{%P1, %P2, %P3, %P4}, %A0", ops);
23731
[(set_attr "neon_type" "neon_vst2_4_regs_vst3_vst4")]
23734
(define_insn "neon_vst4_lane<mode>"
23735
- [(set (mem:<V_four_elem> (match_operand:SI 0 "s_register_operand" "r"))
23736
+ [(set (match_operand:<V_four_elem> 0 "neon_struct_operand" "=Um")
23737
(unspec:<V_four_elem>
23738
[(match_operand:OI 1 "s_register_operand" "w")
23739
(match_operand:SI 2 "immediate_operand" "i")
23740
@@ -4954,7 +5445,7 @@
23741
ops[3] = gen_rtx_REG (DImode, regno + 4);
23742
ops[4] = gen_rtx_REG (DImode, regno + 6);
23743
ops[5] = operands[2];
23744
- output_asm_insn ("vst4.<V_sz_elem>\t{%P1[%c5], %P2[%c5], %P3[%c5], %P4[%c5]}, [%0]",
23745
+ output_asm_insn ("vst4.<V_sz_elem>\t{%P1[%c5], %P2[%c5], %P3[%c5], %P4[%c5]}, %A0",
23749
@@ -4962,7 +5453,7 @@
23752
(define_insn "neon_vst4_lane<mode>"
23753
- [(set (mem:<V_four_elem> (match_operand:SI 0 "s_register_operand" "r"))
23754
+ [(set (match_operand:<V_four_elem> 0 "neon_struct_operand" "=Um")
23755
(unspec:<V_four_elem>
23756
[(match_operand:XI 1 "s_register_operand" "w")
23757
(match_operand:SI 2 "immediate_operand" "i")
23758
@@ -4987,7 +5478,7 @@
23759
ops[3] = gen_rtx_REG (DImode, regno + 8);
23760
ops[4] = gen_rtx_REG (DImode, regno + 12);
23761
ops[5] = GEN_INT (lane);
23762
- output_asm_insn ("vst4.<V_sz_elem>\t{%P1[%c5], %P2[%c5], %P3[%c5], %P4[%c5]}, [%0]",
23763
+ output_asm_insn ("vst4.<V_sz_elem>\t{%P1[%c5], %P2[%c5], %P3[%c5], %P4[%c5]}, %A0",
23767
@@ -5048,3 +5539,205 @@
23356
23768
emit_insn (gen_orn<mode>3_neon (operands[0], operands[1], operands[2]));
26885
26979
[(set_attr "type" "jump")
26886
26980
(set_attr "mode" "none")])
26888
--- a/src/gcc/config/pa/pa-hpux11.h
26889
+++ b/src/gcc/config/pa/pa-hpux11.h
26891
/* Definitions of target machine for GNU compiler, for HP PA-RISC
26892
- Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2007, 2008
26893
+ Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2007, 2008, 2011
26894
Free Software Foundation, Inc.
26896
This file is part of GCC.
26897
@@ -114,18 +114,24 @@
26898
-z %{mlinker-opt:-O} %{!shared:-u main -u __gcc_plt_call}\
26899
%{static:-a archive} %{shared:-b}"
26901
-/* HP-UX 11 has posix threads. HP libc contains pthread stubs so that
26902
- non-threaded applications can be linked with a thread-safe libc
26903
- without a subsequent loss of performance. For more details, see
26904
- <http://docs.hp.com/en/1896/pthreads.html>. */
26905
+/* HP-UX 11 has posix threads. HP's shared libc contains pthread stubs
26906
+ so that non-threaded applications can be linked with a thread-safe
26907
+ libc without a subsequent loss of performance. For more details,
26908
+ see <http://docs.hp.com/en/1896/pthreads.html>. */
26912
- %{static|mt|pthread:%{fopenmp:%{static:-a archive_shared} -lrt\
26913
- %{static:-a archive}} -lpthread} -lc\
26914
- %{static:%{!nolibdld:-a archive_shared -ldld -a archive -lc}}}\
26915
+ %{fopenmp:%{static:-a archive_shared} -lrt %{static:-a archive}}\
26916
+ %{mt|pthread:-lpthread} -lc\
26917
+ %{static:%{!nolibdld:-a archive_shared -ldld -a archive -lc}\
26918
+ %{!mt:%{!pthread:-a shared -lc -a archive}}}}\
26919
%{shared:%{mt|pthread:-lpthread}}"
26921
+/* The libgcc_stub.a library needs to come last. */
26922
+#undef LINK_GCC_C_SEQUENCE_SPEC
26923
+#define LINK_GCC_C_SEQUENCE_SPEC \
26924
+ "%G %L %G %{!nostdlib:%{!nodefaultlibs:%{!shared:-lgcc_stub}}}"
26926
#undef STARTFILE_SPEC
26927
#define STARTFILE_SPEC \
26928
"%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}} \
26929
--- a/src/gcc/config/pa/pa.c
26930
+++ b/src/gcc/config/pa/pa.c
26931
@@ -6097,35 +6097,92 @@
26934
/* Return TRUE if INSN, a jump insn, has an unfilled delay slot and
26935
- it branches to the next real instruction. Otherwise, return FALSE. */
26936
+ it branches into the delay slot. Otherwise, return FALSE. */
26939
branch_to_delay_slot_p (rtx insn)
26943
if (dbr_sequence_length ())
26946
- return next_real_insn (JUMP_LABEL (insn)) == next_real_insn (insn);
26947
+ jump_insn = next_active_insn (JUMP_LABEL (insn));
26950
+ insn = next_active_insn (insn);
26951
+ if (jump_insn == insn)
26954
+ /* We can't rely on the length of asms. So, we return FALSE when
26955
+ the branch is followed by an asm. */
26957
+ || GET_CODE (PATTERN (insn)) == ASM_INPUT
26958
+ || extract_asm_operands (PATTERN (insn)) != NULL_RTX
26959
+ || get_attr_length (insn) > 0)
26966
-/* Return TRUE if INSN, a jump insn, needs a nop in its delay slot.
26967
+/* Return TRUE if INSN, a forward jump insn, needs a nop in its delay slot.
26969
This occurs when INSN has an unfilled delay slot and is followed
26970
- by an ASM_INPUT. Disaster can occur if the ASM_INPUT is empty and
26971
- the jump branches into the delay slot. So, we add a nop in the delay
26972
- slot just to be safe. This messes up our instruction count, but we
26973
- don't know how big the ASM_INPUT insn is anyway. */
26974
+ by an asm. Disaster can occur if the asm is empty and the jump
26975
+ branches into the delay slot. So, we add a nop in the delay slot
26976
+ when this occurs. */
26979
branch_needs_nop_p (rtx insn)
26984
if (dbr_sequence_length ())
26987
- next_insn = next_real_insn (insn);
26988
- return GET_CODE (PATTERN (next_insn)) == ASM_INPUT;
26989
+ jump_insn = next_active_insn (JUMP_LABEL (insn));
26992
+ insn = next_active_insn (insn);
26993
+ if (!insn || jump_insn == insn)
26996
+ if (!(GET_CODE (PATTERN (insn)) == ASM_INPUT
26997
+ || extract_asm_operands (PATTERN (insn)) != NULL_RTX)
26998
+ && get_attr_length (insn) > 0)
27005
+/* Return TRUE if INSN, a forward jump insn, can use nullification
27006
+ to skip the following instruction. This avoids an extra cycle due
27007
+ to a mis-predicted branch when we fall through. */
27010
+use_skip_p (rtx insn)
27012
+ rtx jump_insn = next_active_insn (JUMP_LABEL (insn));
27016
+ insn = next_active_insn (insn);
27018
+ /* We can't rely on the length of asms, so we can't skip asms. */
27020
+ || GET_CODE (PATTERN (insn)) == ASM_INPUT
27021
+ || extract_asm_operands (PATTERN (insn)) != NULL_RTX)
27023
+ if (get_attr_length (insn) == 4
27024
+ && jump_insn == next_active_insn (insn))
27026
+ if (get_attr_length (insn) > 0)
27033
/* This routine handles all the normal conditional branch sequences we
27034
@@ -6139,7 +6196,7 @@
27035
output_cbranch (rtx *operands, int negated, rtx insn)
27037
static char buf[100];
27040
int nullify = INSN_ANNULLED_BRANCH_P (insn);
27041
int length = get_attr_length (insn);
27043
@@ -6177,12 +6234,7 @@
27044
/* A forward branch over a single nullified insn can be done with a
27045
comclr instruction. This avoids a single cycle penalty due to
27046
mis-predicted branch if we fall through (branch not taken). */
27048
- && next_real_insn (insn) != 0
27049
- && get_attr_length (next_real_insn (insn)) == 4
27050
- && JUMP_LABEL (insn) == next_nonnote_insn (next_real_insn (insn))
27053
+ useskip = (length == 4 && nullify) ? use_skip_p (insn) : FALSE;
27057
@@ -6470,7 +6522,7 @@
27058
output_bb (rtx *operands ATTRIBUTE_UNUSED, int negated, rtx insn, int which)
27060
static char buf[100];
27063
int nullify = INSN_ANNULLED_BRANCH_P (insn);
27064
int length = get_attr_length (insn);
27066
@@ -6496,13 +6548,7 @@
27067
/* A forward branch over a single nullified insn can be done with a
27068
extrs instruction. This avoids a single cycle penalty due to
27069
mis-predicted branch if we fall through (branch not taken). */
27072
- && next_real_insn (insn) != 0
27073
- && get_attr_length (next_real_insn (insn)) == 4
27074
- && JUMP_LABEL (insn) == next_nonnote_insn (next_real_insn (insn))
27077
+ useskip = (length == 4 && nullify) ? use_skip_p (insn) : FALSE;
27081
@@ -6661,7 +6707,7 @@
27082
output_bvb (rtx *operands ATTRIBUTE_UNUSED, int negated, rtx insn, int which)
27084
static char buf[100];
27087
int nullify = INSN_ANNULLED_BRANCH_P (insn);
27088
int length = get_attr_length (insn);
27090
@@ -6687,13 +6733,7 @@
27091
/* A forward branch over a single nullified insn can be done with a
27092
extrs instruction. This avoids a single cycle penalty due to
27093
mis-predicted branch if we fall through (branch not taken). */
27096
- && next_real_insn (insn) != 0
27097
- && get_attr_length (next_real_insn (insn)) == 4
27098
- && JUMP_LABEL (insn) == next_nonnote_insn (next_real_insn (insn))
27101
+ useskip = (length == 4 && nullify) ? use_skip_p (insn) : FALSE;
26982
--- a/src/gcc/config/pa/pa-protos.h
26983
+++ b/src/gcc/config/pa/pa-protos.h
26985
extern int prefetch_cc_operand (rtx, enum machine_mode);
26986
extern int prefetch_nocc_operand (rtx, enum machine_mode);
26987
extern int and_operand (rtx, enum machine_mode);
26988
-extern int ior_operand (rtx, enum machine_mode);
26989
extern int arith32_operand (rtx, enum machine_mode);
26990
extern int uint32_operand (rtx, enum machine_mode);
26991
extern int reg_before_reload_operand (rtx, enum machine_mode);
26993
extern int fmpyaddoperands (rtx *);
26994
extern int fmpysuboperands (rtx *);
26995
extern int call_operand_address (rtx, enum machine_mode);
26996
-extern int ior_operand (rtx, enum machine_mode);
26997
extern void emit_bcond_fp (rtx[]);
26998
extern int emit_move_sequence (rtx *, enum machine_mode, rtx);
26999
extern int emit_hpdiv_const (rtx *, int);
27105
27000
--- a/src/gcc/config/pa/pa.md
27106
27001
+++ b/src/gcc/config/pa/pa.md
27107
@@ -811,7 +811,7 @@
27108
(match_operand:DI 3 "arith11_operand" "rI"))
27109
(match_operand:DI 1 "register_operand" "r")))]
27111
- "sub%I3 %3,%2,%%r0\;add,dc %%r0,%1,%0"
27112
+ "sub%I3,* %3,%2,%%r0\;add,dc %%r0,%1,%0"
27113
[(set_attr "type" "binary")
27114
(set_attr "length" "8")])
27116
@@ -833,7 +833,7 @@
27117
(match_operand:DI 3 "register_operand" "r"))
27118
(match_operand:DI 1 "register_operand" "r")))]
27120
- "sub %2,%3,%%r0\;add,dc %%r0,%1,%0"
27121
+ "sub,* %2,%3,%%r0\;add,dc %%r0,%1,%0"
27122
[(set_attr "type" "binary")
27123
(set_attr "length" "8")])
27125
@@ -856,7 +856,7 @@
27126
(match_operand:DI 3 "int11_operand" "I"))
27127
(match_operand:DI 1 "register_operand" "r")))]
27129
- "addi %k3,%2,%%r0\;add,dc %%r0,%1,%0"
27130
+ "addi,* %k3,%2,%%r0\;add,dc %%r0,%1,%0"
27131
[(set_attr "type" "binary")
27132
(set_attr "length" "8")])
27134
@@ -902,7 +902,7 @@
27135
(gtu:DI (match_operand:DI 2 "register_operand" "r")
27136
(match_operand:DI 3 "arith11_operand" "rI"))))]
27138
- "sub%I3 %3,%2,%%r0\;sub,db %1,%%r0,%0"
27139
+ "sub%I3,* %3,%2,%%r0\;sub,db %1,%%r0,%0"
27140
[(set_attr "type" "binary")
27141
(set_attr "length" "8")])
27143
@@ -924,7 +924,7 @@
27144
(match_operand:DI 3 "arith11_operand" "rI")))
27145
(match_operand:DI 4 "register_operand" "r")))]
27147
- "sub%I3 %3,%2,%%r0\;sub,db %1,%4,%0"
27148
+ "sub%I3,* %3,%2,%%r0\;sub,db %1,%4,%0"
27149
[(set_attr "type" "binary")
27150
(set_attr "length" "8")])
27152
@@ -946,7 +946,7 @@
27153
(ltu:DI (match_operand:DI 2 "register_operand" "r")
27154
(match_operand:DI 3 "register_operand" "r"))))]
27156
- "sub %2,%3,%%r0\;sub,db %1,%%r0,%0"
27157
+ "sub,* %2,%3,%%r0\;sub,db %1,%%r0,%0"
27158
[(set_attr "type" "binary")
27159
(set_attr "length" "8")])
27161
@@ -968,7 +968,7 @@
27162
(match_operand:DI 3 "register_operand" "r")))
27163
(match_operand:DI 4 "register_operand" "r")))]
27165
- "sub %2,%3,%%r0\;sub,db %1,%4,%0"
27166
+ "sub,* %2,%3,%%r0\;sub,db %1,%4,%0"
27167
[(set_attr "type" "binary")
27168
(set_attr "length" "8")])
27170
@@ -991,7 +991,7 @@
27171
(leu:DI (match_operand:DI 2 "register_operand" "r")
27172
(match_operand:DI 3 "int11_operand" "I"))))]
27174
- "addi %k3,%2,%%r0\;sub,db %1,%%r0,%0"
27175
+ "addi,* %k3,%2,%%r0\;sub,db %1,%%r0,%0"
27176
[(set_attr "type" "binary")
27177
(set_attr "length" "8")])
27179
@@ -1013,7 +1013,7 @@
27180
(match_operand:DI 3 "int11_operand" "I")))
27181
(match_operand:DI 4 "register_operand" "r")))]
27183
- "addi %k3,%2,%%r0\;sub,db %1,%4,%0"
27184
+ "addi,* %k3,%2,%%r0\;sub,db %1,%4,%0"
27185
[(set_attr "type" "binary")
27186
(set_attr "length" "8")])
27188
--- a/src/gcc/config/pa/pa64-hpux.h
27189
+++ b/src/gcc/config/pa/pa64-hpux.h
27191
/* Definitions of target machine for GNU compiler, for HPs running
27192
HPUX using the 64bit runtime model.
27193
- Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2007, 2008
27194
+ Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2007, 2008, 2011
27195
Free Software Foundation, Inc.
27197
This file is part of GCC.
27198
@@ -59,36 +59,42 @@
27199
#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_GNU_LD)
27202
- %{!p:%{!pg:%{static|mt|pthread:%{fopenmp:%{static:-a shared} -lrt\
27203
- %{static:-a archive}} -lpthread} -lc\
27204
- %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\
27205
+ %{!p:%{!pg:%{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
27206
+ %{mt|pthread:-lpthread} -lc\
27207
+ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
27208
+ %{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
27209
%{p:%{!pg:%{static:%{!mhp-ld:-a shared}%{mhp-ld:-a archive_shared}}\
27210
-lprof %{static:-a archive}\
27211
- %{static|mt|pthread:%{fopenmp:%{static:-a shared} -lrt\
27212
- %{static:-a archive}} -lpthread} -lc\
27213
- %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\
27214
+ %{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
27215
+ %{mt|pthread:-lpthread} -lc\
27216
+ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
27217
+ %{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
27218
%{pg:%{static:%{!mhp-ld:-a shared}%{mhp-ld:-a archive_shared}}\
27219
-lgprof %{static:-a archive}\
27220
- %{static|mt|pthread:%{fopenmp:%{static:-a shared} -lrt\
27221
- %{static:-a archive}} -lpthread} -lc\
27222
- %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\
27223
+ %{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
27224
+ %{mt|pthread:-lpthread} -lc\
27225
+ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
27226
+ %{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
27227
%{shared:%{mt|pthread:-lpthread}}"
27231
- %{!p:%{!pg:%{static|mt|pthread:%{fopenmp:%{static:-a shared} -lrt\
27232
- %{static:-a archive}} -lpthread} -lc\
27233
- %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\
27234
+ %{!p:%{!pg:%{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
27235
+ %{mt|pthread:-lpthread} -lc\
27236
+ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
27237
+ %{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
27238
%{p:%{!pg:%{static:%{mgnu-ld:-a shared}%{!mgnu-ld:-a archive_shared}}\
27239
-lprof %{static:-a archive}\
27240
- %{static|mt|pthread:%{fopenmp:%{static:-a shared} -lrt\
27241
- %{static:-a archive}} -lpthread} -lc\
27242
- %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\
27243
+ %{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
27244
+ %{mt|pthread:-lpthread} -lc\
27245
+ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
27246
+ %{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
27247
%{pg:%{static:%{mgnu-ld:-a shared}%{!mgnu-ld:-a archive_shared}}\
27248
-lgprof %{static:-a archive}\
27249
- %{static|mt|pthread:%{fopenmp:%{static:-a shared} -lrt\
27250
- %{static:-a archive}} -lpthread} -lc\
27251
- %{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}}\
27252
+ %{fopenmp:%{static:-a shared} -lrt %{static:-a archive}}\
27253
+ %{mt|pthread:-lpthread} -lc\
27254
+ %{static:%{!nolibdld:-a shared -ldld -a archive -lc}\
27255
+ %{!mt:%{!pthread:-a shared -lc -a archive}}}}}\
27256
%{shared:%{mt|pthread:-lpthread}}"
27259
--- a/src/gcc/config/pa/stublib.c
27260
+++ b/src/gcc/config/pa/stublib.c
27263
- Copyright (C) 2006, 2009 Free Software Foundation, Inc.
27264
+ Copyright (C) 2006, 2009, 2011 Free Software Foundation, Inc.
27266
This file is part of GCC.
27002
@@ -5686,7 +5686,7 @@
27003
(define_expand "iordi3"
27004
[(set (match_operand:DI 0 "register_operand" "")
27005
(ior:DI (match_operand:DI 1 "register_operand" "")
27006
- (match_operand:DI 2 "ior_operand" "")))]
27007
+ (match_operand:DI 2 "reg_or_cint_ior_operand" "")))]
27273
+#ifdef L_pthread_default_stacksize_np
27274
+int pthread_default_stacksize_np (unsigned long __attribute__((unused)),
27275
+ unsigned long *);
27277
+pthread_default_stacksize_np (unsigned long new, unsigned long *old)
27285
+#ifdef L_pthread_mutex_lock
27286
+int pthread_mutex_lock (void);
27288
+pthread_mutex_lock (void)
27294
+#ifdef L_pthread_mutex_unlock
27295
+int pthread_mutex_unlock (void);
27297
+pthread_mutex_unlock (void)
27303
+#ifdef L_pthread_once
27304
+int pthread_once (void);
27306
+pthread_once (void)
27311
--- a/src/gcc/config/pa/t-pa-hpux11
27312
+++ b/src/gcc/config/pa/t-pa-hpux11
27314
TARGET_LIBGCC2_CFLAGS = -fPIC -frandom-seed=fixed-seed
27315
LIB2FUNCS_EXTRA=lib2funcs.asm quadlib.c
27316
+LIBGCCSTUB_OBJS = pthread_default_stacksize_np-stub.o \
27317
+ pthread_mutex_lock-stub.o \
27318
+ pthread_mutex_unlock-stub.o \
27319
+ pthread_once-stub.o
27321
+stublib.c: $(srcdir)/config/pa/stublib.c
27323
+ cp $(srcdir)/config/pa/stublib.c .
27325
+pthread_default_stacksize_np-stub.o: stublib.c $(GCC_PASSES)
27326
+ $(GCC_FOR_TARGET) -c -O2 -DL_pthread_default_stacksize_np stublib.c \
27327
+ -o pthread_default_stacksize_np-stub.o
27329
+pthread_mutex_lock-stub.o: stublib.c $(GCC_PASSES)
27330
+ $(GCC_FOR_TARGET) -c -O2 -DL_pthread_mutex_lock stublib.c \
27331
+ -o pthread_mutex_lock-stub.o
27333
+pthread_mutex_unlock-stub.o: stublib.c $(GCC_PASSES)
27334
+ $(GCC_FOR_TARGET) -c -O2 -DL_pthread_mutex_unlock stublib.c \
27335
+ -o pthread_mutex_unlock-stub.o
27337
+pthread_once-stub.o: stublib.c $(GCC_PASSES)
27338
+ $(GCC_FOR_TARGET) -c -O2 -DL_pthread_once stublib.c \
27339
+ -o pthread_once-stub.o
27341
+$(T)libgcc_stub.a: $(LIBGCCSTUB_OBJS)
27342
+ -rm -rf $(T)libgcc_stub.a
27343
+ $(AR) rc $(T)libgcc_stub.a $(LIBGCCSTUB_OBJS)
27344
+ $(RANLIB) $(T)libgcc_stub.a
27345
--- a/src/gcc/config/pa/t-pa64
27346
+++ b/src/gcc/config/pa/t-pa64
27348
# Copyright (C) 2000, 2001, 2002, 2004, 2006,
27349
-# 2007 Free Software Foundation, Inc.
27350
+# 2007, 2011 Free Software Foundation, Inc.
27352
# This file is part of GCC.
27356
TARGET_LIBGCC2_CFLAGS = -fPIC -Dpa64=1 -DELF=1 -mlong-calls
27357
LIB2FUNCS_EXTRA = quadlib.c
27358
-LIBGCCSTUB_OBJS = rfi-stub.o dfi-stub.o jvrc-stub.o cxaf-stub.o
27359
+LIBGCCSTUB_OBJS = rfi-stub.o dfi-stub.o jvrc-stub.o cxaf-stub.o \
27360
+ pthread_default_stacksize_np-stub.o \
27361
+ pthread_mutex_lock-stub.o \
27362
+ pthread_mutex_unlock-stub.o \
27363
+ pthread_once-stub.o
27365
stublib.c: $(srcdir)/config/pa/stublib.c
27368
$(GCC_FOR_TARGET) -c -O2 -DL_Jv_RegisterClasses stublib.c \
27371
+pthread_default_stacksize_np-stub.o: stublib.c $(GCC_PASSES)
27372
+ $(GCC_FOR_TARGET) -c -O2 -DL_pthread_default_stacksize_np stublib.c \
27373
+ -o pthread_default_stacksize_np-stub.o
27375
+pthread_mutex_lock-stub.o: stublib.c $(GCC_PASSES)
27376
+ $(GCC_FOR_TARGET) -c -O2 -DL_pthread_mutex_lock stublib.c \
27377
+ -o pthread_mutex_lock-stub.o
27379
+pthread_mutex_unlock-stub.o: stublib.c $(GCC_PASSES)
27380
+ $(GCC_FOR_TARGET) -c -O2 -DL_pthread_mutex_unlock stublib.c \
27381
+ -o pthread_mutex_unlock-stub.o
27383
+pthread_once-stub.o: stublib.c $(GCC_PASSES)
27384
+ $(GCC_FOR_TARGET) -c -O2 -DL_pthread_once stublib.c \
27385
+ -o pthread_once-stub.o
27387
$(T)libgcc_stub.a: $(LIBGCCSTUB_OBJS)
27388
-rm -rf $(T)libgcc_stub.a
27389
$(AR) rc $(T)libgcc_stub.a $(LIBGCCSTUB_OBJS)
27011
@@ -5707,7 +5707,7 @@
27013
[(set (match_operand:DI 0 "register_operand" "=r,r")
27014
(ior:DI (match_operand:DI 1 "register_operand" "0,0")
27015
- (match_operand:DI 2 "ior_operand" "M,i")))]
27016
+ (match_operand:DI 2 "cint_ior_operand" "M,i")))]
27018
"* return output_64bit_ior (operands); "
27019
[(set_attr "type" "binary,shift")
27020
@@ -5726,19 +5726,14 @@
27021
(define_expand "iorsi3"
27022
[(set (match_operand:SI 0 "register_operand" "")
27023
(ior:SI (match_operand:SI 1 "register_operand" "")
27024
- (match_operand:SI 2 "arith32_operand" "")))]
27025
+ (match_operand:SI 2 "reg_or_cint_ior_operand" "")))]
27029
- if (! (ior_operand (operands[2], SImode)
27030
- || register_operand (operands[2], SImode)))
27031
- operands[2] = force_reg (SImode, operands[2]);
27036
[(set (match_operand:SI 0 "register_operand" "=r,r")
27037
(ior:SI (match_operand:SI 1 "register_operand" "0,0")
27038
- (match_operand:SI 2 "ior_operand" "M,i")))]
27039
+ (match_operand:SI 2 "cint_ior_operand" "M,i")))]
27041
"* return output_ior (operands); "
27042
[(set_attr "type" "binary,shift")
27043
--- a/src/gcc/config/pa/predicates.md
27044
+++ b/src/gcc/config/pa/predicates.md
27045
@@ -411,11 +411,15 @@
27047
;; True iff depi can be used to compute (reg | OP).
27049
-(define_predicate "ior_operand"
27050
- (match_code "const_int")
27052
- return (GET_CODE (op) == CONST_INT && ior_mask_p (INTVAL (op)));
27054
+(define_predicate "cint_ior_operand"
27055
+ (and (match_code "const_int")
27056
+ (match_test "ior_mask_p (INTVAL (op))")))
27058
+;; True iff OP can be used to compute (reg | OP).
27060
+(define_predicate "reg_or_cint_ior_operand"
27061
+ (ior (match_operand 0 "register_operand")
27062
+ (match_operand 0 "cint_ior_operand")))
27064
;; True iff OP is a CONST_INT of the forms 0...0xxxx or
27065
;; 0...01...1xxxx. Such values can be the left hand side x in (x <<
27390
27066
--- a/src/gcc/config/picochip/picochip.c
27391
27067
+++ b/src/gcc/config/picochip/picochip.c
27392
27068
@@ -1996,7 +1996,7 @@
27523
27104
#define LINUX_DYNAMIC_LINKER32 \
27524
27105
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
27525
--- a/src/gcc/config/rs6000/rs6000-builtin.def
27526
+++ b/src/gcc/config/rs6000/rs6000-builtin.def
27528
/* Builtin functions for rs6000/powerpc.
27529
- Copyright (C) 2009, 2010
27530
+ Copyright (C) 2009, 2010, 2011
27531
Free Software Foundation, Inc.
27532
Contributed by Michael Meissner (meissner@linux.vnet.ibm.com)
27535
RS6000_BUILTIN(ALTIVEC_BUILTIN_LD_INTERNAL_16qi, RS6000_BTC_MEM)
27536
RS6000_BUILTIN(ALTIVEC_BUILTIN_ST_INTERNAL_4sf, RS6000_BTC_MEM)
27537
RS6000_BUILTIN(ALTIVEC_BUILTIN_LD_INTERNAL_4sf, RS6000_BTC_MEM)
27538
+RS6000_BUILTIN(ALTIVEC_BUILTIN_ST_INTERNAL_2df, RS6000_BTC_MEM)
27539
+RS6000_BUILTIN(ALTIVEC_BUILTIN_LD_INTERNAL_2df, RS6000_BTC_MEM)
27540
+RS6000_BUILTIN(ALTIVEC_BUILTIN_ST_INTERNAL_2di, RS6000_BTC_MEM)
27541
+RS6000_BUILTIN(ALTIVEC_BUILTIN_LD_INTERNAL_2di, RS6000_BTC_MEM)
27542
RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDUBM, RS6000_BTC_CONST)
27543
RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDUHM, RS6000_BTC_CONST)
27544
RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDUWM, RS6000_BTC_CONST)
27545
@@ -774,12 +778,20 @@
27547
/* VSX builtins. */
27548
RS6000_BUILTIN(VSX_BUILTIN_LXSDX, RS6000_BTC_MEM)
27549
-RS6000_BUILTIN(VSX_BUILTIN_LXVD2X, RS6000_BTC_MEM)
27550
+RS6000_BUILTIN(VSX_BUILTIN_LXVD2X_V2DF, RS6000_BTC_MEM)
27551
+RS6000_BUILTIN(VSX_BUILTIN_LXVD2X_V2DI, RS6000_BTC_MEM)
27552
RS6000_BUILTIN(VSX_BUILTIN_LXVDSX, RS6000_BTC_MEM)
27553
-RS6000_BUILTIN(VSX_BUILTIN_LXVW4X, RS6000_BTC_MEM)
27554
+RS6000_BUILTIN(VSX_BUILTIN_LXVW4X_V4SF, RS6000_BTC_MEM)
27555
+RS6000_BUILTIN(VSX_BUILTIN_LXVW4X_V4SI, RS6000_BTC_MEM)
27556
+RS6000_BUILTIN(VSX_BUILTIN_LXVW4X_V8HI, RS6000_BTC_MEM)
27557
+RS6000_BUILTIN(VSX_BUILTIN_LXVW4X_V16QI, RS6000_BTC_MEM)
27558
RS6000_BUILTIN(VSX_BUILTIN_STXSDX, RS6000_BTC_MEM)
27559
-RS6000_BUILTIN(VSX_BUILTIN_STXVD2X, RS6000_BTC_MEM)
27560
-RS6000_BUILTIN(VSX_BUILTIN_STXVW4X, RS6000_BTC_MEM)
27561
+RS6000_BUILTIN(VSX_BUILTIN_STXVD2X_V2DF, RS6000_BTC_MEM)
27562
+RS6000_BUILTIN(VSX_BUILTIN_STXVD2X_V2DI, RS6000_BTC_MEM)
27563
+RS6000_BUILTIN(VSX_BUILTIN_STXVW4X_V4SF, RS6000_BTC_MEM)
27564
+RS6000_BUILTIN(VSX_BUILTIN_STXVW4X_V4SI, RS6000_BTC_MEM)
27565
+RS6000_BUILTIN(VSX_BUILTIN_STXVW4X_V8HI, RS6000_BTC_MEM)
27566
+RS6000_BUILTIN(VSX_BUILTIN_STXVW4X_V16QI, RS6000_BTC_MEM)
27567
RS6000_BUILTIN(VSX_BUILTIN_XSABSDP, RS6000_BTC_CONST)
27568
RS6000_BUILTIN(VSX_BUILTIN_XSADDDP, RS6000_BTC_FP_PURE)
27569
RS6000_BUILTIN(VSX_BUILTIN_XSCMPODP, RS6000_BTC_FP_PURE)
27570
@@ -975,8 +987,10 @@
27571
RS6000_BUILTIN(VSX_BUILTIN_VEC_XXSLDWI, RS6000_BTC_MISC)
27572
RS6000_BUILTIN(VSX_BUILTIN_VEC_XXSPLTD, RS6000_BTC_MISC)
27573
RS6000_BUILTIN(VSX_BUILTIN_VEC_XXSPLTW, RS6000_BTC_MISC)
27574
+RS6000_BUILTIN(VSX_BUILTIN_VEC_LD, RS6000_BTC_MISC)
27575
+RS6000_BUILTIN(VSX_BUILTIN_VEC_ST, RS6000_BTC_MISC)
27576
RS6000_BUILTIN_EQUATE(VSX_BUILTIN_OVERLOADED_LAST,
27577
- VSX_BUILTIN_VEC_XXSPLTW)
27578
+ VSX_BUILTIN_VEC_ST)
27580
/* Combined VSX/Altivec builtins. */
27581
RS6000_BUILTIN(VECTOR_BUILTIN_FLOAT_V4SI_V4SF, RS6000_BTC_FP_PURE)
27582
--- a/src/gcc/config/rs6000/rs6000-c.c
27583
+++ b/src/gcc/config/rs6000/rs6000-c.c
27584
@@ -965,6 +965,15 @@
27585
{ VSX_BUILTIN_VEC_DIV, VSX_BUILTIN_XVDIVDP,
27586
RS6000_BTI_V2DF, RS6000_BTI_V2DF, RS6000_BTI_V2DF, 0 },
27587
{ ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
27588
+ RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 },
27589
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
27590
+ RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI, 0 },
27591
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
27592
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
27593
+ ~RS6000_BTI_unsigned_V2DI, 0 },
27594
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
27595
+ RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V2DI, 0 },
27596
+ { ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
27597
RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF, 0 },
27598
{ ALTIVEC_BUILTIN_VEC_LD, ALTIVEC_BUILTIN_LVX,
27599
RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float, 0 },
27600
@@ -1077,9 +1086,19 @@
27601
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
27602
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 },
27603
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
27604
- RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V16QI, 0 },
27605
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI,
27606
+ ~RS6000_BTI_unsigned_V16QI, 0 },
27607
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
27608
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
27609
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
27610
+ RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 },
27611
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
27612
+ RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI, 0 },
27613
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
27614
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
27615
+ ~RS6000_BTI_unsigned_V2DI, 0 },
27616
+ { ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL,
27617
+ RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V2DI, 0 },
27618
{ ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
27619
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
27620
{ ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
27621
@@ -1098,6 +1117,17 @@
27622
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_long, 0 },
27623
{ ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
27624
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_float, 0 },
27625
+ { ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
27626
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_double, 0 },
27627
+ { ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
27628
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTDI, 0 },
27629
+ { ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
27630
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTDI, 0 },
27631
+ { ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
27632
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_long_long, 0 },
27633
+ { ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
27634
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI,
27635
+ ~RS6000_BTI_unsigned_long_long, 0 },
27636
{ ALTIVEC_BUILTIN_VEC_LVSR, ALTIVEC_BUILTIN_LVSR,
27637
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
27638
{ ALTIVEC_BUILTIN_VEC_LVSR, ALTIVEC_BUILTIN_LVSR,
27639
@@ -1116,6 +1146,17 @@
27640
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_long, 0 },
27641
{ ALTIVEC_BUILTIN_VEC_LVSR, ALTIVEC_BUILTIN_LVSR,
27642
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_float, 0 },
27643
+ { ALTIVEC_BUILTIN_VEC_LVSR, ALTIVEC_BUILTIN_LVSR,
27644
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_double, 0 },
27645
+ { ALTIVEC_BUILTIN_VEC_LVSR, ALTIVEC_BUILTIN_LVSR,
27646
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTDI, 0 },
27647
+ { ALTIVEC_BUILTIN_VEC_LVSR, ALTIVEC_BUILTIN_LVSR,
27648
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTDI, 0 },
27649
+ { ALTIVEC_BUILTIN_VEC_LVSR, ALTIVEC_BUILTIN_LVSR,
27650
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_long_long, 0 },
27651
+ { ALTIVEC_BUILTIN_VEC_LVSR, ALTIVEC_BUILTIN_LVSR,
27652
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI,
27653
+ ~RS6000_BTI_unsigned_long_long, 0 },
27654
{ ALTIVEC_BUILTIN_VEC_LVLX, ALTIVEC_BUILTIN_LVLX,
27655
RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF, 0 },
27656
{ ALTIVEC_BUILTIN_VEC_LVLX, ALTIVEC_BUILTIN_LVLX,
27657
@@ -2609,6 +2650,16 @@
27658
{ ALTIVEC_BUILTIN_VEC_SLD, ALTIVEC_BUILTIN_VSLDOI_16QI,
27659
RS6000_BTI_bool_V16QI, RS6000_BTI_bool_V16QI, RS6000_BTI_bool_V16QI, RS6000_BTI_NOT_OPAQUE },
27660
{ ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
27661
+ RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF },
27662
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
27663
+ RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI },
27664
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
27665
+ RS6000_BTI_void, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
27666
+ ~RS6000_BTI_unsigned_V2DI },
27667
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
27668
+ RS6000_BTI_void, RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI,
27669
+ ~RS6000_BTI_bool_V2DI },
27670
+ { ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
27671
RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF },
27672
{ ALTIVEC_BUILTIN_VEC_ST, ALTIVEC_BUILTIN_STVX,
27673
RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float },
27674
@@ -2774,6 +2825,18 @@
27675
RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI },
27676
{ ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
27677
RS6000_BTI_void, RS6000_BTI_pixel_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_pixel_V8HI },
27678
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
27679
+ RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF },
27680
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
27681
+ RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double },
27682
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
27683
+ RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI },
27684
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
27685
+ RS6000_BTI_void, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
27686
+ ~RS6000_BTI_unsigned_V2DI },
27687
+ { ALTIVEC_BUILTIN_VEC_STL, ALTIVEC_BUILTIN_STVXL,
27688
+ RS6000_BTI_void, RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI,
27689
+ ~RS6000_BTI_bool_V2DI },
27690
{ ALTIVEC_BUILTIN_VEC_STVLX, ALTIVEC_BUILTIN_STVLX,
27691
RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF },
27692
{ ALTIVEC_BUILTIN_VEC_STVLX, ALTIVEC_BUILTIN_STVLX,
27693
@@ -2967,6 +3030,135 @@
27694
RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
27695
RS6000_BTI_NOT_OPAQUE },
27697
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVD2X_V2DF,
27698
+ RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 },
27699
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVD2X_V2DI,
27700
+ RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI, 0 },
27701
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVD2X_V2DI,
27702
+ RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
27703
+ ~RS6000_BTI_unsigned_V2DI, 0 },
27704
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVD2X_V2DI,
27705
+ RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V2DI, 0 },
27706
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V4SF,
27707
+ RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF, 0 },
27708
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V4SF,
27709
+ RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float, 0 },
27710
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V4SI,
27711
+ RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V4SI, 0 },
27712
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V4SI,
27713
+ RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_V4SI, 0 },
27714
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V4SI,
27715
+ RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI, 0 },
27716
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V4SI,
27717
+ RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_long, 0 },
27718
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V4SI,
27719
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI,
27720
+ ~RS6000_BTI_unsigned_V4SI, 0 },
27721
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V4SI,
27722
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI, 0 },
27723
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V4SI,
27724
+ RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI,
27725
+ ~RS6000_BTI_unsigned_long, 0 },
27726
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V8HI,
27727
+ RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V8HI, 0 },
27728
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V8HI,
27729
+ RS6000_BTI_pixel_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_pixel_V8HI, 0 },
27730
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V8HI,
27731
+ RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_V8HI, 0 },
27732
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V8HI,
27733
+ RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI, 0 },
27734
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V8HI,
27735
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI,
27736
+ ~RS6000_BTI_unsigned_V8HI, 0 },
27737
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V8HI,
27738
+ RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI, 0 },
27739
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V16QI,
27740
+ RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V16QI, 0 },
27741
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V16QI,
27742
+ RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_V16QI, 0 },
27743
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V16QI,
27744
+ RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 },
27745
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V16QI,
27746
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI,
27747
+ ~RS6000_BTI_unsigned_V16QI, 0 },
27748
+ { VSX_BUILTIN_VEC_LD, VSX_BUILTIN_LXVW4X_V16QI,
27749
+ RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
27751
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVD2X_V2DF,
27752
+ RS6000_BTI_void, RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF },
27753
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVD2X_V2DI,
27754
+ RS6000_BTI_void, RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI },
27755
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVD2X_V2DI,
27756
+ RS6000_BTI_void, RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
27757
+ ~RS6000_BTI_unsigned_V2DI },
27758
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVD2X_V2DI,
27759
+ RS6000_BTI_void, RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI,
27760
+ ~RS6000_BTI_bool_V2DI },
27761
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V4SF,
27762
+ RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF },
27763
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V4SF,
27764
+ RS6000_BTI_void, RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float },
27765
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V4SI,
27766
+ RS6000_BTI_void, RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_V4SI },
27767
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V4SI,
27768
+ RS6000_BTI_void, RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI },
27769
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V4SI,
27770
+ RS6000_BTI_void, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI,
27771
+ ~RS6000_BTI_unsigned_V4SI },
27772
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V4SI,
27773
+ RS6000_BTI_void, RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI,
27774
+ ~RS6000_BTI_UINTSI },
27775
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V4SI,
27776
+ RS6000_BTI_void, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI,
27777
+ ~RS6000_BTI_bool_V4SI },
27778
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V4SI,
27779
+ RS6000_BTI_void, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI,
27780
+ ~RS6000_BTI_UINTSI },
27781
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V4SI,
27782
+ RS6000_BTI_void, RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI,
27783
+ ~RS6000_BTI_INTSI },
27784
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V8HI,
27785
+ RS6000_BTI_void, RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_V8HI },
27786
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V8HI,
27787
+ RS6000_BTI_void, RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_INTHI },
27788
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V8HI,
27789
+ RS6000_BTI_void, RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI,
27790
+ ~RS6000_BTI_unsigned_V8HI },
27791
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V8HI,
27792
+ RS6000_BTI_void, RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI,
27793
+ ~RS6000_BTI_UINTHI },
27794
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V8HI,
27795
+ RS6000_BTI_void, RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI,
27796
+ ~RS6000_BTI_bool_V8HI },
27797
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V8HI,
27798
+ RS6000_BTI_void, RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI,
27799
+ ~RS6000_BTI_UINTHI },
27800
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V8HI,
27801
+ RS6000_BTI_void, RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI,
27802
+ ~RS6000_BTI_INTHI },
27803
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V16QI,
27804
+ RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_V16QI },
27805
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V16QI,
27806
+ RS6000_BTI_void, RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI },
27807
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V16QI,
27808
+ RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI,
27809
+ ~RS6000_BTI_unsigned_V16QI },
27810
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V16QI,
27811
+ RS6000_BTI_void, RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI,
27812
+ ~RS6000_BTI_UINTQI },
27813
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V16QI,
27814
+ RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI,
27815
+ ~RS6000_BTI_bool_V16QI },
27816
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V16QI,
27817
+ RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI,
27818
+ ~RS6000_BTI_UINTQI },
27819
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V16QI,
27820
+ RS6000_BTI_void, RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI,
27821
+ ~RS6000_BTI_INTQI },
27822
+ { VSX_BUILTIN_VEC_ST, VSX_BUILTIN_STXVW4X_V16QI,
27823
+ RS6000_BTI_void, RS6000_BTI_pixel_V8HI, RS6000_BTI_INTSI,
27824
+ ~RS6000_BTI_pixel_V8HI },
27827
{ ALTIVEC_BUILTIN_VCMPGT_P, ALTIVEC_BUILTIN_VCMPGTUB_P,
27828
RS6000_BTI_INTSI, RS6000_BTI_INTSI, RS6000_BTI_bool_V16QI, RS6000_BTI_unsigned_V16QI },
27829
--- a/src/gcc/config/rs6000/rs6000-protos.h
27830
+++ b/src/gcc/config/rs6000/rs6000-protos.h
27832
/* Definitions of target machine for GNU compiler, for IBM RS/6000.
27833
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
27834
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
27836
Free Software Foundation, Inc.
27837
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
27839
@@ -130,6 +131,7 @@
27841
extern rtx rs6000_machopic_legitimize_pic_address (rtx, enum machine_mode,
27843
+extern rtx rs6000_address_for_altivec (rtx);
27844
#endif /* RTX_CODE */
27847
27106
--- a/src/gcc/config/rs6000/rs6000.c
27848
27107
+++ b/src/gcc/config/rs6000/rs6000.c
27849
@@ -2865,9 +2865,12 @@
27850
/* If not explicitly specified via option, decide whether to generate indexed
27851
load/store instructions. */
27852
if (TARGET_AVOID_XFORM == -1)
27853
- /* Avoid indexed addressing when targeting Power6 in order to avoid
27854
- the DERAT mispredict penalty. */
27855
- TARGET_AVOID_XFORM = (rs6000_cpu == PROCESSOR_POWER6 && TARGET_CMPB);
27856
+ /* Avoid indexed addressing when targeting Power6 in order to avoid the
27857
+ DERAT mispredict penalty. However the LVE and STVE altivec instructions
27858
+ need indexed accesses and the type used is the scalar type of the element
27859
+ being loaded or stored. */
27860
+ TARGET_AVOID_XFORM = (rs6000_cpu == PROCESSOR_POWER6 && TARGET_CMPB
27861
+ && !TARGET_ALTIVEC);
27863
rs6000_init_hard_regno_mode_ok ();
27865
@@ -4472,7 +4475,7 @@
27867
enum machine_mode mode = GET_MODE (vec);
27868
enum machine_mode inner_mode = GET_MODE_INNER (mode);
27872
if (VECTOR_MEM_VSX_P (mode) && (mode == V2DFmode || mode == V2DImode))
27874
@@ -4485,17 +4488,11 @@
27875
/* Allocate mode-sized buffer. */
27876
mem = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0);
27878
+ emit_move_insn (mem, vec);
27880
/* Add offset to field within buffer matching vector element. */
27881
- mem = adjust_address_nv (mem, mode, elt * GET_MODE_SIZE (inner_mode));
27882
+ mem = adjust_address_nv (mem, inner_mode, elt * GET_MODE_SIZE (inner_mode));
27884
- /* Store single field into mode-sized buffer. */
27885
- x = gen_rtx_UNSPEC (VOIDmode,
27886
- gen_rtvec (1, const0_rtx), UNSPEC_STVE);
27887
- emit_insn (gen_rtx_PARALLEL (VOIDmode,
27889
- gen_rtx_SET (VOIDmode,
27892
emit_move_insn (target, adjust_address_nv (mem, inner_mode, 0));
27895
@@ -9897,6 +9894,7 @@
27896
rtx op2 = expand_normal (arg2);
27898
enum machine_mode tmode = insn_data[icode].operand[0].mode;
27899
+ enum machine_mode smode = insn_data[icode].operand[1].mode;
27900
enum machine_mode mode1 = Pmode;
27901
enum machine_mode mode2 = Pmode;
27903
@@ -9906,8 +9904,8 @@
27904
|| arg2 == error_mark_node)
27907
- if (! (*insn_data[icode].operand[1].predicate) (op0, tmode))
27908
- op0 = copy_to_mode_reg (tmode, op0);
27909
+ if (! (*insn_data[icode].operand[1].predicate) (op0, smode))
27910
+ op0 = copy_to_mode_reg (smode, op0);
27912
op2 = copy_to_mode_reg (mode2, op2);
27914
@@ -10041,16 +10039,22 @@
27917
case ALTIVEC_BUILTIN_LD_INTERNAL_16qi:
27918
- icode = CODE_FOR_vector_load_v16qi;
27919
+ icode = CODE_FOR_vector_altivec_load_v16qi;
27921
case ALTIVEC_BUILTIN_LD_INTERNAL_8hi:
27922
- icode = CODE_FOR_vector_load_v8hi;
27923
+ icode = CODE_FOR_vector_altivec_load_v8hi;
27925
case ALTIVEC_BUILTIN_LD_INTERNAL_4si:
27926
- icode = CODE_FOR_vector_load_v4si;
27927
+ icode = CODE_FOR_vector_altivec_load_v4si;
27929
case ALTIVEC_BUILTIN_LD_INTERNAL_4sf:
27930
- icode = CODE_FOR_vector_load_v4sf;
27931
+ icode = CODE_FOR_vector_altivec_load_v4sf;
27933
+ case ALTIVEC_BUILTIN_LD_INTERNAL_2df:
27934
+ icode = CODE_FOR_vector_altivec_load_v2df;
27936
+ case ALTIVEC_BUILTIN_LD_INTERNAL_2di:
27937
+ icode = CODE_FOR_vector_altivec_load_v2di;
27940
*expandedp = false;
27941
@@ -10094,16 +10098,22 @@
27944
case ALTIVEC_BUILTIN_ST_INTERNAL_16qi:
27945
- icode = CODE_FOR_vector_store_v16qi;
27946
+ icode = CODE_FOR_vector_altivec_store_v16qi;
27948
case ALTIVEC_BUILTIN_ST_INTERNAL_8hi:
27949
- icode = CODE_FOR_vector_store_v8hi;
27950
+ icode = CODE_FOR_vector_altivec_store_v8hi;
27952
case ALTIVEC_BUILTIN_ST_INTERNAL_4si:
27953
- icode = CODE_FOR_vector_store_v4si;
27954
+ icode = CODE_FOR_vector_altivec_store_v4si;
27956
case ALTIVEC_BUILTIN_ST_INTERNAL_4sf:
27957
- icode = CODE_FOR_vector_store_v4sf;
27958
+ icode = CODE_FOR_vector_altivec_store_v4sf;
27960
+ case ALTIVEC_BUILTIN_ST_INTERNAL_2df:
27961
+ icode = CODE_FOR_vector_altivec_store_v2df;
27963
+ case ALTIVEC_BUILTIN_ST_INTERNAL_2di:
27964
+ icode = CODE_FOR_vector_altivec_store_v2di;
27967
*expandedp = false;
27968
@@ -10336,7 +10346,7 @@
27971
case ALTIVEC_BUILTIN_STVX:
27972
- return altivec_expand_stv_builtin (CODE_FOR_altivec_stvx, exp);
27973
+ return altivec_expand_stv_builtin (CODE_FOR_altivec_stvx_v4si, exp);
27974
case ALTIVEC_BUILTIN_STVEBX:
27975
return altivec_expand_stv_builtin (CODE_FOR_altivec_stvebx, exp);
27976
case ALTIVEC_BUILTIN_STVEHX:
27977
@@ -10355,6 +10365,19 @@
27978
case ALTIVEC_BUILTIN_STVRXL:
27979
return altivec_expand_stv_builtin (CODE_FOR_altivec_stvrxl, exp);
27981
+ case VSX_BUILTIN_STXVD2X_V2DF:
27982
+ return altivec_expand_stv_builtin (CODE_FOR_vsx_store_v2df, exp);
27983
+ case VSX_BUILTIN_STXVD2X_V2DI:
27984
+ return altivec_expand_stv_builtin (CODE_FOR_vsx_store_v2di, exp);
27985
+ case VSX_BUILTIN_STXVW4X_V4SF:
27986
+ return altivec_expand_stv_builtin (CODE_FOR_vsx_store_v4sf, exp);
27987
+ case VSX_BUILTIN_STXVW4X_V4SI:
27988
+ return altivec_expand_stv_builtin (CODE_FOR_vsx_store_v4si, exp);
27989
+ case VSX_BUILTIN_STXVW4X_V8HI:
27990
+ return altivec_expand_stv_builtin (CODE_FOR_vsx_store_v8hi, exp);
27991
+ case VSX_BUILTIN_STXVW4X_V16QI:
27992
+ return altivec_expand_stv_builtin (CODE_FOR_vsx_store_v16qi, exp);
27994
case ALTIVEC_BUILTIN_MFVSCR:
27995
icode = CODE_FOR_altivec_mfvscr;
27996
tmode = insn_data[icode].operand[0].mode;
27997
@@ -10479,7 +10502,7 @@
27998
return altivec_expand_lv_builtin (CODE_FOR_altivec_lvxl,
27999
exp, target, false);
28000
case ALTIVEC_BUILTIN_LVX:
28001
- return altivec_expand_lv_builtin (CODE_FOR_altivec_lvx,
28002
+ return altivec_expand_lv_builtin (CODE_FOR_altivec_lvx_v4si,
28003
exp, target, false);
28004
case ALTIVEC_BUILTIN_LVLX:
28005
return altivec_expand_lv_builtin (CODE_FOR_altivec_lvlx,
28006
@@ -10493,6 +10516,25 @@
28007
case ALTIVEC_BUILTIN_LVRXL:
28008
return altivec_expand_lv_builtin (CODE_FOR_altivec_lvrxl,
28009
exp, target, true);
28010
+ case VSX_BUILTIN_LXVD2X_V2DF:
28011
+ return altivec_expand_lv_builtin (CODE_FOR_vsx_load_v2df,
28012
+ exp, target, false);
28013
+ case VSX_BUILTIN_LXVD2X_V2DI:
28014
+ return altivec_expand_lv_builtin (CODE_FOR_vsx_load_v2di,
28015
+ exp, target, false);
28016
+ case VSX_BUILTIN_LXVW4X_V4SF:
28017
+ return altivec_expand_lv_builtin (CODE_FOR_vsx_load_v4sf,
28018
+ exp, target, false);
28019
+ case VSX_BUILTIN_LXVW4X_V4SI:
28020
+ return altivec_expand_lv_builtin (CODE_FOR_vsx_load_v4si,
28021
+ exp, target, false);
28022
+ case VSX_BUILTIN_LXVW4X_V8HI:
28023
+ return altivec_expand_lv_builtin (CODE_FOR_vsx_load_v8hi,
28024
+ exp, target, false);
28025
+ case VSX_BUILTIN_LXVW4X_V16QI:
28026
+ return altivec_expand_lv_builtin (CODE_FOR_vsx_load_v16qi,
28027
+ exp, target, false);
28031
/* Fall through. */
28032
@@ -11099,6 +11141,8 @@
28034
long_integer_type_internal_node = long_integer_type_node;
28035
long_unsigned_type_internal_node = long_unsigned_type_node;
28036
+ long_long_integer_type_internal_node = long_long_integer_type_node;
28037
+ long_long_unsigned_type_internal_node = long_long_unsigned_type_node;
28038
intQI_type_internal_node = intQI_type_node;
28039
uintQI_type_internal_node = unsigned_intQI_type_node;
28040
intHI_type_internal_node = intHI_type_node;
28041
@@ -11108,7 +11152,7 @@
28042
intDI_type_internal_node = intDI_type_node;
28043
uintDI_type_internal_node = unsigned_intDI_type_node;
28044
float_type_internal_node = float_type_node;
28045
- double_type_internal_node = float_type_node;
28046
+ double_type_internal_node = double_type_node;
28047
void_type_internal_node = void_type_node;
28049
/* Initialize the modes for builtin_function_type, mapping a machine mode to
28050
@@ -11631,19 +11675,11 @@
28054
- tree pfloat_type_node = build_pointer_type (float_type_node);
28055
- tree pint_type_node = build_pointer_type (integer_type_node);
28056
- tree pshort_type_node = build_pointer_type (short_integer_type_node);
28057
- tree pchar_type_node = build_pointer_type (char_type_node);
28059
tree pvoid_type_node = build_pointer_type (void_type_node);
28061
- tree pcfloat_type_node = build_pointer_type (build_qualified_type (float_type_node, TYPE_QUAL_CONST));
28062
- tree pcint_type_node = build_pointer_type (build_qualified_type (integer_type_node, TYPE_QUAL_CONST));
28063
- tree pcshort_type_node = build_pointer_type (build_qualified_type (short_integer_type_node, TYPE_QUAL_CONST));
28064
- tree pcchar_type_node = build_pointer_type (build_qualified_type (char_type_node, TYPE_QUAL_CONST));
28066
- tree pcvoid_type_node = build_pointer_type (build_qualified_type (void_type_node, TYPE_QUAL_CONST));
28067
+ tree pcvoid_type_node
28068
+ = build_pointer_type (build_qualified_type (void_type_node,
28069
+ TYPE_QUAL_CONST));
28071
tree int_ftype_opaque
28072
= build_function_type_list (integer_type_node,
28073
@@ -11666,26 +11702,6 @@
28074
= build_function_type_list (integer_type_node,
28075
integer_type_node, V4SI_type_node,
28076
V4SI_type_node, NULL_TREE);
28077
- tree v4sf_ftype_pcfloat
28078
- = build_function_type_list (V4SF_type_node, pcfloat_type_node, NULL_TREE);
28079
- tree void_ftype_pfloat_v4sf
28080
- = build_function_type_list (void_type_node,
28081
- pfloat_type_node, V4SF_type_node, NULL_TREE);
28082
- tree v4si_ftype_pcint
28083
- = build_function_type_list (V4SI_type_node, pcint_type_node, NULL_TREE);
28084
- tree void_ftype_pint_v4si
28085
- = build_function_type_list (void_type_node,
28086
- pint_type_node, V4SI_type_node, NULL_TREE);
28087
- tree v8hi_ftype_pcshort
28088
- = build_function_type_list (V8HI_type_node, pcshort_type_node, NULL_TREE);
28089
- tree void_ftype_pshort_v8hi
28090
- = build_function_type_list (void_type_node,
28091
- pshort_type_node, V8HI_type_node, NULL_TREE);
28092
- tree v16qi_ftype_pcchar
28093
- = build_function_type_list (V16QI_type_node, pcchar_type_node, NULL_TREE);
28094
- tree void_ftype_pchar_v16qi
28095
- = build_function_type_list (void_type_node,
28096
- pchar_type_node, V16QI_type_node, NULL_TREE);
28097
tree void_ftype_v4si
28098
= build_function_type_list (void_type_node, V4SI_type_node, NULL_TREE);
28099
tree v8hi_ftype_void
28100
@@ -11697,16 +11713,32 @@
28102
tree opaque_ftype_long_pcvoid
28103
= build_function_type_list (opaque_V4SI_type_node,
28104
- long_integer_type_node, pcvoid_type_node, NULL_TREE);
28105
+ long_integer_type_node, pcvoid_type_node,
28107
tree v16qi_ftype_long_pcvoid
28108
= build_function_type_list (V16QI_type_node,
28109
- long_integer_type_node, pcvoid_type_node, NULL_TREE);
28110
+ long_integer_type_node, pcvoid_type_node,
28112
tree v8hi_ftype_long_pcvoid
28113
= build_function_type_list (V8HI_type_node,
28114
- long_integer_type_node, pcvoid_type_node, NULL_TREE);
28115
+ long_integer_type_node, pcvoid_type_node,
28117
tree v4si_ftype_long_pcvoid
28118
= build_function_type_list (V4SI_type_node,
28119
- long_integer_type_node, pcvoid_type_node, NULL_TREE);
28120
+ long_integer_type_node, pcvoid_type_node,
28122
+ tree v4sf_ftype_long_pcvoid
28123
+ = build_function_type_list (V4SF_type_node,
28124
+ long_integer_type_node, pcvoid_type_node,
28126
+ tree v2df_ftype_long_pcvoid
28127
+ = build_function_type_list (V2DF_type_node,
28128
+ long_integer_type_node, pcvoid_type_node,
28130
+ tree v2di_ftype_long_pcvoid
28131
+ = build_function_type_list (V2DI_type_node,
28132
+ long_integer_type_node, pcvoid_type_node,
28135
tree void_ftype_opaque_long_pvoid
28136
= build_function_type_list (void_type_node,
28137
@@ -11724,6 +11756,18 @@
28138
= build_function_type_list (void_type_node,
28139
V8HI_type_node, long_integer_type_node,
28140
pvoid_type_node, NULL_TREE);
28141
+ tree void_ftype_v4sf_long_pvoid
28142
+ = build_function_type_list (void_type_node,
28143
+ V4SF_type_node, long_integer_type_node,
28144
+ pvoid_type_node, NULL_TREE);
28145
+ tree void_ftype_v2df_long_pvoid
28146
+ = build_function_type_list (void_type_node,
28147
+ V2DF_type_node, long_integer_type_node,
28148
+ pvoid_type_node, NULL_TREE);
28149
+ tree void_ftype_v2di_long_pvoid
28150
+ = build_function_type_list (void_type_node,
28151
+ V2DI_type_node, long_integer_type_node,
28152
+ pvoid_type_node, NULL_TREE);
28153
tree int_ftype_int_v8hi_v8hi
28154
= build_function_type_list (integer_type_node,
28155
integer_type_node, V8HI_type_node,
28156
@@ -11755,22 +11799,6 @@
28157
pcvoid_type_node, integer_type_node,
28158
integer_type_node, NULL_TREE);
28160
- def_builtin (MASK_ALTIVEC, "__builtin_altivec_ld_internal_4sf", v4sf_ftype_pcfloat,
28161
- ALTIVEC_BUILTIN_LD_INTERNAL_4sf);
28162
- def_builtin (MASK_ALTIVEC, "__builtin_altivec_st_internal_4sf", void_ftype_pfloat_v4sf,
28163
- ALTIVEC_BUILTIN_ST_INTERNAL_4sf);
28164
- def_builtin (MASK_ALTIVEC, "__builtin_altivec_ld_internal_4si", v4si_ftype_pcint,
28165
- ALTIVEC_BUILTIN_LD_INTERNAL_4si);
28166
- def_builtin (MASK_ALTIVEC, "__builtin_altivec_st_internal_4si", void_ftype_pint_v4si,
28167
- ALTIVEC_BUILTIN_ST_INTERNAL_4si);
28168
- def_builtin (MASK_ALTIVEC, "__builtin_altivec_ld_internal_8hi", v8hi_ftype_pcshort,
28169
- ALTIVEC_BUILTIN_LD_INTERNAL_8hi);
28170
- def_builtin (MASK_ALTIVEC, "__builtin_altivec_st_internal_8hi", void_ftype_pshort_v8hi,
28171
- ALTIVEC_BUILTIN_ST_INTERNAL_8hi);
28172
- def_builtin (MASK_ALTIVEC, "__builtin_altivec_ld_internal_16qi", v16qi_ftype_pcchar,
28173
- ALTIVEC_BUILTIN_LD_INTERNAL_16qi);
28174
- def_builtin (MASK_ALTIVEC, "__builtin_altivec_st_internal_16qi", void_ftype_pchar_v16qi,
28175
- ALTIVEC_BUILTIN_ST_INTERNAL_16qi);
28176
def_builtin (MASK_ALTIVEC, "__builtin_altivec_mtvscr", void_ftype_v4si, ALTIVEC_BUILTIN_MTVSCR);
28177
def_builtin (MASK_ALTIVEC, "__builtin_altivec_mfvscr", v8hi_ftype_void, ALTIVEC_BUILTIN_MFVSCR);
28178
def_builtin (MASK_ALTIVEC, "__builtin_altivec_dssall", void_ftype_void, ALTIVEC_BUILTIN_DSSALL);
28179
@@ -11802,6 +11830,35 @@
28180
def_builtin (MASK_ALTIVEC, "__builtin_vec_stvebx", void_ftype_opaque_long_pvoid, ALTIVEC_BUILTIN_VEC_STVEBX);
28181
def_builtin (MASK_ALTIVEC, "__builtin_vec_stvehx", void_ftype_opaque_long_pvoid, ALTIVEC_BUILTIN_VEC_STVEHX);
28183
+ def_builtin (MASK_VSX, "__builtin_vsx_lxvd2x_v2df", v2df_ftype_long_pcvoid,
28184
+ VSX_BUILTIN_LXVD2X_V2DF);
28185
+ def_builtin (MASK_VSX, "__builtin_vsx_lxvd2x_v2di", v2di_ftype_long_pcvoid,
28186
+ VSX_BUILTIN_LXVD2X_V2DI);
28187
+ def_builtin (MASK_VSX, "__builtin_vsx_lxvw4x_v4sf", v4sf_ftype_long_pcvoid,
28188
+ VSX_BUILTIN_LXVW4X_V4SF);
28189
+ def_builtin (MASK_VSX, "__builtin_vsx_lxvw4x_v4si", v4si_ftype_long_pcvoid,
28190
+ VSX_BUILTIN_LXVW4X_V4SI);
28191
+ def_builtin (MASK_VSX, "__builtin_vsx_lxvw4x_v8hi",
28192
+ v8hi_ftype_long_pcvoid, VSX_BUILTIN_LXVW4X_V8HI);
28193
+ def_builtin (MASK_VSX, "__builtin_vsx_lxvw4x_v16qi",
28194
+ v16qi_ftype_long_pcvoid, VSX_BUILTIN_LXVW4X_V16QI);
28195
+ def_builtin (MASK_VSX, "__builtin_vsx_stxvd2x_v2df",
28196
+ void_ftype_v2df_long_pvoid, VSX_BUILTIN_STXVD2X_V2DF);
28197
+ def_builtin (MASK_VSX, "__builtin_vsx_stxvd2x_v2di",
28198
+ void_ftype_v2di_long_pvoid, VSX_BUILTIN_STXVD2X_V2DI);
28199
+ def_builtin (MASK_VSX, "__builtin_vsx_stxvw4x_v4sf",
28200
+ void_ftype_v4sf_long_pvoid, VSX_BUILTIN_STXVW4X_V4SF);
28201
+ def_builtin (MASK_VSX, "__builtin_vsx_stxvw4x_v4si",
28202
+ void_ftype_v4si_long_pvoid, VSX_BUILTIN_STXVW4X_V4SI);
28203
+ def_builtin (MASK_VSX, "__builtin_vsx_stxvw4x_v8hi",
28204
+ void_ftype_v8hi_long_pvoid, VSX_BUILTIN_STXVW4X_V8HI);
28205
+ def_builtin (MASK_VSX, "__builtin_vsx_stxvw4x_v16qi",
28206
+ void_ftype_v16qi_long_pvoid, VSX_BUILTIN_STXVW4X_V16QI);
28207
+ def_builtin (MASK_VSX, "__builtin_vec_vsx_ld", opaque_ftype_long_pcvoid,
28208
+ VSX_BUILTIN_VEC_LD);
28209
+ def_builtin (MASK_VSX, "__builtin_vec_vsx_st", void_ftype_opaque_long_pvoid,
28210
+ VSX_BUILTIN_VEC_ST);
28212
if (rs6000_cpu == PROCESSOR_CELL)
28214
def_builtin (MASK_ALTIVEC, "__builtin_altivec_lvlx", v16qi_ftype_long_pcvoid, ALTIVEC_BUILTIN_LVLX);
28215
@@ -18506,7 +18563,7 @@
27108
@@ -18563,7 +18563,7 @@
28216
27109
p = rtvec_alloc ((lr ? 4 : 3) + n_regs);
28218
27111
if (!savep && lr)
28343
27160
#define LINUX_DYNAMIC_LINKER \
28344
27161
CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
28345
--- a/src/gcc/config/rs6000/vector.md
28346
+++ b/src/gcc/config/rs6000/vector.md
28348
;; expander, and the actual vector instructions will be in altivec.md and
28351
-;; Copyright (C) 2009, 2010
28352
+;; Copyright (C) 2009, 2010, 2011
28353
;; Free Software Foundation, Inc.
28354
;; Contributed by Michael Meissner <meissner@linux.vnet.ibm.com>
28356
@@ -123,6 +123,43 @@
28360
+;; Vector floating point load/store instructions that uses the Altivec
28361
+;; instructions even if we are compiling for VSX, since the Altivec
28362
+;; instructions silently ignore the bottom 3 bits of the address, and VSX does
28364
+(define_expand "vector_altivec_load_<mode>"
28365
+ [(set (match_operand:VEC_M 0 "vfloat_operand" "")
28366
+ (match_operand:VEC_M 1 "memory_operand" ""))]
28367
+ "VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
28370
+ gcc_assert (VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode));
28372
+ if (VECTOR_MEM_VSX_P (<MODE>mode))
28374
+ operands[1] = rs6000_address_for_altivec (operands[1]);
28375
+ emit_insn (gen_altivec_lvx_<mode> (operands[0], operands[1]));
28380
+(define_expand "vector_altivec_store_<mode>"
28381
+ [(set (match_operand:VEC_M 0 "memory_operand" "")
28382
+ (match_operand:VEC_M 1 "vfloat_operand" ""))]
28383
+ "VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode)"
28386
+ gcc_assert (VECTOR_MEM_ALTIVEC_OR_VSX_P (<MODE>mode));
28388
+ if (VECTOR_MEM_VSX_P (<MODE>mode))
28390
+ operands[0] = rs6000_address_for_altivec (operands[0]);
28391
+ emit_insn (gen_altivec_stvx_<mode> (operands[0], operands[1]));
28398
;; Reload patterns for vector operations. We may need an addtional base
28399
;; register to convert the reg+offset addressing to reg+reg for vector
28400
--- a/src/gcc/config/rs6000/vsx.md
28401
+++ b/src/gcc/config/rs6000/vsx.md
28404
-;; Copyright (C) 2009
28405
+;; Copyright (C) 2009, 2010, 2011
28406
;; Free Software Foundation, Inc.
28407
;; Contributed by Michael Meissner <meissner@linux.vnet.ibm.com>
28409
@@ -309,6 +309,19 @@
28411
[(set_attr "type" "vecstore,vecload,vecsimple,*,*,*,vecsimple,*,vecstore,vecload")])
28413
+;; Explicit load/store expanders for the builtin functions
28414
+(define_expand "vsx_load_<mode>"
28415
+ [(set (match_operand:VSX_M 0 "vsx_register_operand" "")
28416
+ (match_operand:VSX_M 1 "memory_operand" ""))]
28417
+ "VECTOR_MEM_VSX_P (<MODE>mode)"
28420
+(define_expand "vsx_store_<mode>"
28421
+ [(set (match_operand:VEC_M 0 "memory_operand" "")
28422
+ (match_operand:VEC_M 1 "vsx_register_operand" ""))]
28423
+ "VECTOR_MEM_VSX_P (<MODE>mode)"
28427
;; VSX scalar and vector floating point arithmetic instructions
28428
(define_insn "*vsx_add<mode>3"
28429
@@ -866,33 +879,34 @@
28430
;; the fprs because we don't want to add the altivec registers to movdi/movsi.
28431
;; For the unsigned tests, there isn't a generic double -> unsigned conversion
28432
;; in rs6000.md so don't test VECTOR_UNIT_VSX_P, just test against VSX.
28433
+;; Don't use vsx_register_operand here, use gpc_reg_operand to match rs6000.md.
28434
(define_insn "vsx_float<VSi><mode>2"
28435
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
28436
- (float:VSX_B (match_operand:<VSI> 1 "vsx_register_operand" "<VSr2>,<VSr3>")))]
28437
+ [(set (match_operand:VSX_B 0 "gpc_reg_operand" "=<VSr>,?wa")
28438
+ (float:VSX_B (match_operand:<VSI> 1 "gpc_reg_operand" "<VSr2>,<VSr3>")))]
28439
"VECTOR_UNIT_VSX_P (<MODE>mode)"
28440
"x<VSv>cvsx<VSc><VSs> %x0,%x1"
28441
[(set_attr "type" "<VStype_simple>")
28442
(set_attr "fp_type" "<VSfptype_simple>")])
28444
(define_insn "vsx_floatuns<VSi><mode>2"
28445
- [(set (match_operand:VSX_B 0 "vsx_register_operand" "=<VSr>,?wa")
28446
- (unsigned_float:VSX_B (match_operand:<VSI> 1 "vsx_register_operand" "<VSr2>,<VSr3>")))]
28447
+ [(set (match_operand:VSX_B 0 "gpc_reg_operand" "=<VSr>,?wa")
28448
+ (unsigned_float:VSX_B (match_operand:<VSI> 1 "gpc_reg_operand" "<VSr2>,<VSr3>")))]
28449
"VECTOR_UNIT_VSX_P (<MODE>mode)"
28450
"x<VSv>cvux<VSc><VSs> %x0,%x1"
28451
[(set_attr "type" "<VStype_simple>")
28452
(set_attr "fp_type" "<VSfptype_simple>")])
28454
(define_insn "vsx_fix_trunc<mode><VSi>2"
28455
- [(set (match_operand:<VSI> 0 "vsx_register_operand" "=<VSr2>,?<VSr3>")
28456
- (fix:<VSI> (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")))]
28457
+ [(set (match_operand:<VSI> 0 "gpc_reg_operand" "=<VSr2>,?<VSr3>")
28458
+ (fix:<VSI> (match_operand:VSX_B 1 "gpc_reg_operand" "<VSr>,wa")))]
28459
"VECTOR_UNIT_VSX_P (<MODE>mode)"
28460
"x<VSv>cv<VSs>sx<VSc>s %x0,%x1"
28461
[(set_attr "type" "<VStype_simple>")
28462
(set_attr "fp_type" "<VSfptype_simple>")])
28464
(define_insn "vsx_fixuns_trunc<mode><VSi>2"
28465
- [(set (match_operand:<VSI> 0 "vsx_register_operand" "=<VSr2>,?<VSr3>")
28466
- (unsigned_fix:<VSI> (match_operand:VSX_B 1 "vsx_register_operand" "<VSr>,wa")))]
28467
+ [(set (match_operand:<VSI> 0 "gpc_reg_operand" "=<VSr2>,?<VSr3>")
28468
+ (unsigned_fix:<VSI> (match_operand:VSX_B 1 "gpc_reg_operand" "<VSr>,wa")))]
28469
"VECTOR_UNIT_VSX_P (<MODE>mode)"
28470
"x<VSv>cv<VSs>ux<VSc>s %x0,%x1"
28471
[(set_attr "type" "<VStype_simple>")
28472
--- a/src/gcc/config/rx/predicates.md
28473
+++ b/src/gcc/config/rx/predicates.md
28475
;; Predicate definitions for Renesas RX.
28476
-;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
28477
+;; Copyright (C) 2008, 2009, 2011 Free Software Foundation, Inc.
28478
;; Contributed by Red Hat.
28480
;; This file is part of GCC.
28481
@@ -37,19 +37,19 @@
28482
;; Only small integers or a value in a register are permitted.
28484
(define_predicate "rx_shift_operand"
28485
- (match_code "const_int,reg")
28487
- if (CONST_INT_P (op))
28488
- return IN_RANGE (INTVAL (op), 0, 31);
28491
+ (ior (match_operand 0 "register_operand")
28492
+ (and (match_code "const_int")
28493
+ (match_test "IN_RANGE (INTVAL (op), 0, 31)")))
28496
(define_predicate "rx_constshift_operand"
28497
- (match_code "const_int")
28499
- return IN_RANGE (INTVAL (op), 0, 31);
28501
+ (and (match_code "const_int")
28502
+ (match_test "IN_RANGE (INTVAL (op), 0, 31)"))
28505
+(define_predicate "rx_restricted_mem_operand"
28506
+ (and (match_code "mem")
28507
+ (match_test "rx_is_restricted_memory_address (XEXP (op, 0), mode)"))
28510
;; Check that the operand is suitable as the source operand
28512
;; and a restricted subset of memory addresses are allowed.
28514
(define_predicate "rx_source_operand"
28515
- (match_code "const_int,const_double,const,symbol_ref,label_ref,reg,mem")
28517
- if (CONSTANT_P (op))
28518
- return rx_is_legitimate_constant (op);
28520
- if (! MEM_P (op))
28523
- /* Do not allow size conversions whilst accessing memory. */
28524
- if (GET_MODE (op) != mode)
28527
- return rx_is_restricted_memory_address (XEXP (op, 0), mode);
28529
+ (ior (match_operand 0 "register_operand")
28530
+ (match_operand 0 "immediate_operand")
28531
+ (match_operand 0 "rx_restricted_mem_operand"))
28534
;; Check that the operand is suitable as the source operand
28536
;; CONST_INTs are not.
28538
(define_predicate "rx_compare_operand"
28539
- (match_code "subreg,reg,mem")
28541
- if (GET_CODE (op) == SUBREG)
28542
- return REG_P (XEXP (op, 0));
28544
- if (! MEM_P (op))
28547
- return rx_is_restricted_memory_address (XEXP (op, 0), mode);
28549
+ (ior (match_operand 0 "register_operand")
28550
+ (match_operand 0 "rx_restricted_mem_operand"))
28553
;; Return true if OP is a store multiple operation. This looks like:
28554
@@ -293,3 +274,24 @@
28555
element = XVECEXP (op, 0, count - 1);
28556
return GET_CODE (element) == RETURN;
28559
+(define_predicate "label_ref_operand"
28560
+ (match_code "label_ref")
28563
+(define_predicate "rx_z_comparison_operator"
28564
+ (match_code "eq,ne")
28567
+(define_predicate "rx_zs_comparison_operator"
28568
+ (match_code "eq,ne")
28571
+;; GT and LE omitted due to operand swap required.
28572
+(define_predicate "rx_fp_comparison_operator"
28573
+ (match_code "eq,ne,lt,ge,ordered,unordered")
28576
+(define_predicate "rshift_operator"
28577
+ (match_code "ashiftrt,lshiftrt")
28579
--- a/src/gcc/config/rx/rx-modes.def
28580
+++ b/src/gcc/config/rx/rx-modes.def
28582
-/* Definitions of target machine for GNU compiler, for RX.
28583
- Copyright (C) 2010 by Nick Clifton (nickc@redhat.com).
28584
+/* Definitions of target specific machine modes for the RX.
28585
+ Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
28586
+ Contributed by Red Hat.
28588
This file is part of GCC.
28595
+CC_MODE (CC_F); /* fcmp */
28596
--- a/src/gcc/config/rx/rx-protos.h
28597
+++ b/src/gcc/config/rx/rx-protos.h
28599
/* Exported function prototypes from the Renesas RX backend.
28600
- Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
28601
+ Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
28602
Contributed by Red Hat.
28604
This file is part of GCC.
28605
@@ -31,19 +31,23 @@
28606
extern void rx_set_optimization_options (void);
28609
+extern int rx_align_for_label (rtx);
28610
extern bool rx_compare_redundant (rtx);
28611
extern void rx_emit_stack_popm (rtx *, bool);
28612
extern void rx_emit_stack_pushm (rtx *);
28613
extern void rx_expand_epilogue (bool);
28614
-extern bool rx_expand_insv (rtx *);
28615
extern const char * rx_gen_cond_branch_template (rtx, bool);
28616
extern char * rx_gen_move_template (rtx *, bool);
28617
extern bool rx_is_legitimate_constant (rtx);
28618
extern bool rx_is_mode_dependent_addr (rtx);
28619
extern bool rx_is_restricted_memory_address (rtx, Mmode);
28620
+extern bool rx_match_ccmode (rtx, Mmode);
28621
+extern int rx_max_skip_for_label (rtx);
28622
extern void rx_notice_update_cc (rtx body, rtx insn);
28623
extern void rx_print_operand (FILE *, rtx, int);
28624
extern void rx_print_operand_address (FILE *, rtx);
28625
+extern Mmode rx_select_cc_mode (enum rtx_code, rtx, rtx);
28626
+extern void rx_split_cbranch (Mmode, enum rtx_code, rtx, rtx, rtx);
28630
27162
--- a/src/gcc/config/rx/rx.c
28631
27163
+++ b/src/gcc/config/rx/rx.c
28633
/* Subroutines used for code generation on Renesas RX processors.
28634
- Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
28635
+ Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
28636
Contributed by Red Hat.
28638
This file is part of GCC.
28640
#include "target-def.h"
28641
#include "langhooks.h"
28643
+#define CC_FLAG_S (1 << 0)
28644
+#define CC_FLAG_Z (1 << 1)
28645
+#define CC_FLAG_O (1 << 2)
28646
+#define CC_FLAG_C (1 << 3)
28647
+#define CC_FLAG_FP (1 << 4) /* Fake, to differentiate CC_Fmode. */
28649
enum rx_cpu_types rx_cpu_type = RX600;
28651
/* Return true if OP is a reference to an object in a small data area. */
28653
/* Register Indirect. */
28656
- if (GET_MODE_SIZE (mode) == 4
28657
+ if ((GET_MODE_SIZE (mode) == 4
28658
+ || GET_MODE_SIZE (mode) == 2
28659
+ || GET_MODE_SIZE (mode) == 1)
28660
&& (GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC))
28661
/* Pre-decrement Register Indirect or
28662
Post-increment Register Indirect. */
28663
@@ -176,7 +184,10 @@
28664
base = XEXP (mem, 0);
28665
index = XEXP (mem, 1);
28667
- return RX_REG_P (base) && CONST_INT_P (index);
28668
+ if (! RX_REG_P (base) || ! CONST_INT_P (index))
28671
+ return IN_RANGE (INTVAL (index), 0, (0x10000 * GET_MODE_SIZE (mode)) - 1);
28674
/* Can happen when small data is being supported.
28675
@@ -312,9 +323,18 @@
28680
+ if (GET_CODE (XEXP (addr, 0)) == UNSPEC)
28682
+ addr = XEXP (addr, 0);
28683
+ gcc_assert (XINT (addr, 1) == UNSPEC_CONST);
28685
+ addr = XVECEXP (addr, 0, 0);
28686
+ gcc_assert (CONST_INT_P (addr));
28688
+ /* Fall through. */
28692
fprintf (file, "#");
28694
output_addr_const (file, addr);
28695
@@ -351,8 +371,75 @@
28699
+/* Convert a CC_MODE to the set of flags that it represents. */
28701
-int rx_float_compare_mode;
28702
+static unsigned int
28703
+flags_from_mode (enum machine_mode mode)
28708
+ return CC_FLAG_S | CC_FLAG_Z;
28710
+ return CC_FLAG_S | CC_FLAG_Z | CC_FLAG_O;
28712
+ return CC_FLAG_S | CC_FLAG_Z | CC_FLAG_C;
28714
+ return CC_FLAG_S | CC_FLAG_Z | CC_FLAG_O | CC_FLAG_C;
28716
+ return CC_FLAG_FP;
28718
+ gcc_unreachable ();
28722
+/* Convert a set of flags to a CC_MODE that can implement it. */
28724
+static enum machine_mode
28725
+mode_from_flags (unsigned int f)
28727
+ if (f & CC_FLAG_FP)
28729
+ if (f & CC_FLAG_O)
28731
+ if (f & CC_FLAG_C)
28734
+ return CC_ZSOmode;
28736
+ else if (f & CC_FLAG_C)
28737
+ return CC_ZSCmode;
28739
+ return CC_ZSmode;
28742
+/* Convert an RTX_CODE to the set of flags needed to implement it.
28743
+ This assumes an integer comparison. */
28745
+static unsigned int
28746
+flags_from_code (enum rtx_code code)
28752
+ return CC_FLAG_S | CC_FLAG_O;
28755
+ return CC_FLAG_S | CC_FLAG_O | CC_FLAG_Z;
28758
+ return CC_FLAG_C;
28761
+ return CC_FLAG_C | CC_FLAG_Z;
28764
+ return CC_FLAG_Z;
28766
+ gcc_unreachable ();
28770
/* Handles the insertion of a single operand into the assembler output.
28771
The %<letter> directives supported are:
28772
@@ -365,11 +452,14 @@
28773
%L Print low part of a DImode register, integer or address.
28774
%N Print the negation of the immediate value.
28775
%Q If the operand is a MEM, then correctly generate
28776
- register indirect or register relative addressing. */
28777
+ register indirect or register relative addressing.
28778
+ %R Like %Q but for zero-extending loads. */
28781
rx_print_operand (FILE * file, rtx op, int letter)
28783
+ bool unsigned_load = false;
28788
@@ -393,21 +483,48 @@
28792
- switch (GET_CODE (op))
28794
- case LT: fprintf (file, "lt"); break;
28795
- case GE: fprintf (file, "ge"); break;
28796
- case GT: fprintf (file, "gt"); break;
28797
- case LE: fprintf (file, "le"); break;
28798
- case GEU: fprintf (file, "geu"); break;
28799
- case LTU: fprintf (file, "ltu"); break;
28800
- case GTU: fprintf (file, "gtu"); break;
28801
- case LEU: fprintf (file, "leu"); break;
28802
- case EQ: fprintf (file, "eq"); break;
28803
- case NE: fprintf (file, "ne"); break;
28804
- default: debug_rtx (op); gcc_unreachable ();
28808
+ enum rtx_code code = GET_CODE (op);
28809
+ enum machine_mode mode = GET_MODE (XEXP (op, 0));
28810
+ const char * ret;
28812
+ if (mode == CC_Fmode)
28814
+ /* C flag is undefined, and O flag carries unordered. None of the
28815
+ branch combinations that include O use it helpfully. */
28818
+ case ORDERED: ret = "no"; break;
28819
+ case UNORDERED: ret = "o"; break;
28820
+ case LT: ret = "n"; break;
28821
+ case GE: ret = "pz"; break;
28822
+ case EQ: ret = "eq"; break;
28823
+ case NE: ret = "ne"; break;
28824
+ default: gcc_unreachable ();
28831
+ case LT: ret = "lt"; break;
28832
+ case GE: ret = "ge"; break;
28833
+ case GT: ret = "gt"; break;
28834
+ case LE: ret = "le"; break;
28835
+ case GEU: ret = "geu"; break;
28836
+ case LTU: ret = "ltu"; break;
28837
+ case GTU: ret = "gtu"; break;
28838
+ case LEU: ret = "leu"; break;
28839
+ case EQ: ret = "eq"; break;
28840
+ case NE: ret = "ne"; break;
28841
+ default: gcc_unreachable ();
28843
+ gcc_assert ((flags_from_code (code)
28844
+ & ~flags_from_mode (mode)) == 0);
28846
+ fputs (ret, file);
28851
gcc_assert (CONST_INT_P (op));
28852
@@ -506,10 +623,15 @@
28853
rx_print_integer (file, - INTVAL (op));
28857
+ gcc_assert (GET_MODE_SIZE (GET_MODE (op)) < 4);
28858
+ unsigned_load = true;
28859
+ /* Fall through. */
28863
HOST_WIDE_INT offset;
28868
@@ -544,22 +666,24 @@
28869
rx_print_operand (file, op, 0);
28870
fprintf (file, "].");
28872
- switch (GET_MODE_SIZE (GET_MODE (op)))
28873
+ switch (GET_MODE_SIZE (GET_MODE (mem)))
28876
- gcc_assert (offset < 65535 * 1);
28877
- fprintf (file, "B");
28878
+ gcc_assert (offset <= 65535 * 1);
28879
+ fprintf (file, unsigned_load ? "UB" : "B");
28882
gcc_assert (offset % 2 == 0);
28883
- gcc_assert (offset < 65535 * 2);
28884
- fprintf (file, "W");
28885
+ gcc_assert (offset <= 65535 * 2);
28886
+ fprintf (file, unsigned_load ? "UW" : "W");
28890
gcc_assert (offset % 4 == 0);
28891
- gcc_assert (offset < 65535 * 4);
28892
+ gcc_assert (offset <= 65535 * 4);
28893
fprintf (file, "L");
28896
+ gcc_unreachable ();
28900
@@ -698,51 +822,6 @@
28901
extension, src_template, dst_template);
28902
return out_template;
28905
-/* Returns an assembler template for a conditional branch instruction. */
28908
-rx_gen_cond_branch_template (rtx condition, bool reversed)
28910
- enum rtx_code code = GET_CODE (condition);
28914
- if (rx_float_compare_mode)
28915
- code = reverse_condition_maybe_unordered (code);
28917
- code = reverse_condition (code);
28920
- /* We do not worry about encoding the branch length here as GAS knows
28921
- how to choose the smallest version, and how to expand a branch that
28922
- is to a destination that is out of range. */
28926
- case UNEQ: return "bo\t1f\n\tbeq\t%0\n1:";
28927
- case LTGT: return "bo\t1f\n\tbne\t%0\n1:";
28928
- case UNLT: return "bo\t1f\n\tbn\t%0\n1:";
28929
- case UNGE: return "bo\t1f\n\tbpz\t%0\n1:";
28930
- case UNLE: return "bo\t1f\n\tbgt\t1f\n\tbra\t%0\n1:";
28931
- case UNGT: return "bo\t1f\n\tble\t1f\n\tbra\t%0\n1:";
28932
- case UNORDERED: return "bo\t%0";
28933
- case ORDERED: return "bno\t%0";
28935
- case LT: return rx_float_compare_mode ? "bn\t%0" : "blt\t%0";
28936
- case GE: return rx_float_compare_mode ? "bpz\t%0" : "bge\t%0";
28937
- case GT: return "bgt\t%0";
28938
- case LE: return "ble\t%0";
28939
- case GEU: return "bgeu\t%0";
28940
- case LTU: return "bltu\t%0";
28941
- case GTU: return "bgtu\t%0";
28942
- case LEU: return "bleu\t%0";
28943
- case EQ: return "beq\t%0";
28944
- case NE: return "bne\t%0";
28946
- gcc_unreachable ();
28950
/* Return VALUE rounded up to the next ALIGNMENT boundary. */
28952
@@ -821,7 +900,35 @@
28953
const_tree fn_decl_or_type ATTRIBUTE_UNUSED,
28954
bool outgoing ATTRIBUTE_UNUSED)
28956
- return gen_rtx_REG (TYPE_MODE (ret_type), FUNC_RETURN_REGNUM);
28957
+ enum machine_mode mode = TYPE_MODE (ret_type);
28959
+ /* RX ABI specifies that small integer types are
28960
+ promoted to int when returned by a function. */
28961
+ if (GET_MODE_SIZE (mode) > 0
28962
+ && GET_MODE_SIZE (mode) < 4
28963
+ && ! COMPLEX_MODE_P (mode))
28964
+ return gen_rtx_REG (SImode, FUNC_RETURN_REGNUM);
28966
+ return gen_rtx_REG (mode, FUNC_RETURN_REGNUM);
28969
+/* TARGET_PROMOTE_FUNCTION_MODE must behave in the same way with
28970
+ regard to function returns as does TARGET_FUNCTION_VALUE. */
28972
+static enum machine_mode
28973
+rx_promote_function_mode (const_tree type ATTRIBUTE_UNUSED,
28974
+ enum machine_mode mode,
28975
+ int * punsignedp ATTRIBUTE_UNUSED,
28976
+ const_tree funtype ATTRIBUTE_UNUSED,
28979
+ if (for_return != 1
28980
+ || GET_MODE_SIZE (mode) >= 4
28981
+ || COMPLEX_MODE_P (mode)
28982
+ || GET_MODE_SIZE (mode) < 1)
28989
@@ -1058,7 +1165,13 @@
28991
for (save_mask = high = low = 0, reg = 1; reg < CC_REGNUM; reg++)
28993
- if (df_regs_ever_live_p (reg)
28994
+ if ((df_regs_ever_live_p (reg)
28995
+ /* Always save all call clobbered registers inside non-leaf
28996
+ interrupt handlers, even if they are not live - they may
28997
+ be used in (non-interrupt aware) routines called from this one. */
28998
+ || (call_used_regs[reg]
28999
+ && is_interrupt_func (NULL_TREE)
29000
+ && ! current_function_is_leaf))
29001
&& (! call_used_regs[reg]
29002
/* Even call clobbered registered must
29003
be pushed inside interrupt handlers. */
29004
@@ -1213,6 +1326,59 @@
29009
+ok_for_max_constant (HOST_WIDE_INT val)
29011
+ if (rx_max_constant_size == 0 || rx_max_constant_size == 4)
29012
+ /* If there is no constraint on the size of constants
29013
+ used as operands, then any value is legitimate. */
29016
+ /* rx_max_constant_size specifies the maximum number
29017
+ of bytes that can be used to hold a signed value. */
29018
+ return IN_RANGE (val, (-1 << (rx_max_constant_size * 8)),
29019
+ ( 1 << (rx_max_constant_size * 8)));
29022
+/* Generate an ADD of SRC plus VAL into DEST.
29023
+ Handles the case where VAL is too big for max_constant_value.
29024
+ Sets FRAME_RELATED_P on the insn if IS_FRAME_RELATED is true. */
29027
+gen_safe_add (rtx dest, rtx src, rtx val, bool is_frame_related)
29031
+ if (val == NULL_RTX || INTVAL (val) == 0)
29033
+ gcc_assert (dest != src);
29035
+ insn = emit_move_insn (dest, src);
29037
+ else if (ok_for_max_constant (INTVAL (val)))
29038
+ insn = emit_insn (gen_addsi3 (dest, src, val));
29041
+ /* Wrap VAL in an UNSPEC so that rx_is_legitimate_constant
29042
+ will not reject it. */
29043
+ val = gen_rtx_CONST (SImode, gen_rtx_UNSPEC (SImode, gen_rtvec (1, val), UNSPEC_CONST));
29044
+ insn = emit_insn (gen_addsi3 (dest, src, val));
29046
+ if (is_frame_related)
29047
+ /* We have to provide our own frame related note here
29048
+ as the dwarf2out code cannot be expected to grok
29050
+ add_reg_note (insn, REG_FRAME_RELATED_EXPR,
29051
+ gen_rtx_SET (SImode, dest,
29052
+ gen_rtx_PLUS (SImode, src, val)));
29056
+ if (is_frame_related)
29057
+ RTX_FRAME_RELATED_P (insn) = 1;
29062
rx_expand_prologue (void)
29064
@@ -1298,23 +1464,12 @@
29065
emit_insn (gen_stack_pushm (GEN_INT (2 * UNITS_PER_WORD),
29066
gen_rx_store_vector (acc_low, acc_high)));
29069
- frame_size += 2 * UNITS_PER_WORD;
29072
/* If needed, set up the frame pointer. */
29073
if (frame_pointer_needed)
29076
- insn = emit_insn (gen_addsi3 (frame_pointer_rtx, stack_pointer_rtx,
29077
- GEN_INT (- (HOST_WIDE_INT) frame_size)));
29079
- insn = emit_move_insn (frame_pointer_rtx, stack_pointer_rtx);
29081
- RTX_FRAME_RELATED_P (insn) = 1;
29085
+ gen_safe_add (frame_pointer_rtx, stack_pointer_rtx,
29086
+ GEN_INT (- (HOST_WIDE_INT) frame_size), true);
29088
/* Allocate space for the outgoing args.
29089
If the stack frame has not already been set up then handle this as well. */
29090
@@ -1323,29 +1478,26 @@
29093
if (frame_pointer_needed)
29094
- insn = emit_insn (gen_addsi3 (stack_pointer_rtx, frame_pointer_rtx,
29095
- GEN_INT (- (HOST_WIDE_INT)
29097
+ gen_safe_add (stack_pointer_rtx, frame_pointer_rtx,
29098
+ GEN_INT (- (HOST_WIDE_INT) stack_size), true);
29100
- insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
29101
- GEN_INT (- (HOST_WIDE_INT)
29102
- (frame_size + stack_size))));
29103
+ gen_safe_add (stack_pointer_rtx, stack_pointer_rtx,
29104
+ GEN_INT (- (HOST_WIDE_INT) (frame_size + stack_size)),
29108
- insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
29109
- GEN_INT (- (HOST_WIDE_INT) stack_size)));
29110
+ gen_safe_add (stack_pointer_rtx, stack_pointer_rtx,
29111
+ GEN_INT (- (HOST_WIDE_INT) stack_size), true);
29113
else if (frame_size)
29115
if (! frame_pointer_needed)
29116
- insn = emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx,
29117
- GEN_INT (- (HOST_WIDE_INT) frame_size)));
29118
+ gen_safe_add (stack_pointer_rtx, stack_pointer_rtx,
29119
+ GEN_INT (- (HOST_WIDE_INT) frame_size), true);
29121
- insn = emit_move_insn (stack_pointer_rtx, frame_pointer_rtx);
29122
+ gen_safe_add (stack_pointer_rtx, frame_pointer_rtx, NULL_RTX,
29126
- if (insn != NULL_RTX)
29127
- RTX_FRAME_RELATED_P (insn) = 1;
29131
@@ -1425,7 +1577,7 @@
27164
@@ -1577,7 +1577,7 @@
29132
27165
: plus_constant (stack_pointer_rtx,
29133
27166
i * UNITS_PER_WORD)));
29235
27187
rx_allocate_stack_slots_for_args (void)
29236
@@ -2233,50 +2421,10 @@
29238
rx_is_ms_bitfield_layout (const_tree record_type ATTRIBUTE_UNUSED)
29241
+ /* The packed attribute overrides the MS behaviour. */
29242
+ return ! TYPE_PACKED (record_type);
29245
-/* Try to generate code for the "isnv" pattern which inserts bits
29247
- operands[0] => Location to be altered.
29248
- operands[1] => Number of bits to change.
29249
- operands[2] => Starting bit.
29250
- operands[3] => Value to insert.
29251
- Returns TRUE if successful, FALSE otherwise. */
29254
-rx_expand_insv (rtx * operands)
29256
- if (INTVAL (operands[1]) != 1
29257
- || ! CONST_INT_P (operands[3]))
29260
- if (MEM_P (operands[0])
29261
- && INTVAL (operands[2]) > 7)
29264
- switch (INTVAL (operands[3]))
29267
- if (MEM_P (operands[0]))
29268
- emit_insn (gen_bitclr_in_memory (operands[0], operands[0],
29271
- emit_insn (gen_bitclr (operands[0], operands[0], operands[2]));
29275
- if (MEM_P (operands[0]))
29276
- emit_insn (gen_bitset_in_memory (operands[0], operands[0],
29279
- emit_insn (gen_bitset (operands[0], operands[0], operands[2]));
29287
/* Returns true if X a legitimate constant for an immediate
29288
operand on the RX. X is already known to satisfy CONSTANT_P. */
29289
@@ -2284,8 +2432,6 @@
29291
rx_is_legitimate_constant (rtx x)
29293
- HOST_WIDE_INT val;
29295
switch (GET_CODE (x))
29298
@@ -2308,7 +2454,9 @@
29302
- /* One day we may have to handle UNSPEC constants here. */
29304
+ return XINT (x, 1) == UNSPEC_CONST;
29307
/* FIXME: Can this ever happen ? */
29309
@@ -2328,17 +2476,7 @@
29313
- if (rx_max_constant_size == 0 || rx_max_constant_size == 4)
29314
- /* If there is no constraint on the size of constants
29315
- used as operands, then any value is legitimate. */
29318
- val = INTVAL (x);
29320
- /* rx_max_constant_size specifies the maximum number
29321
- of bytes that can be used to hold a signed value. */
29322
- return IN_RANGE (val, (-1 << (rx_max_constant_size * 8)),
29323
- ( 1 << (rx_max_constant_size * 8)));
29324
+ return ok_for_max_constant (INTVAL (x));
29328
@@ -2462,211 +2600,113 @@
29332
+/* Return a CC_MODE of which both M1 and M2 are subsets. */
29334
static enum machine_mode
29335
rx_cc_modes_compatible (enum machine_mode m1, enum machine_mode m2)
29337
- if (m1 == CCmode)
29339
- if (m2 == CCmode)
29343
+ /* Early out for identical modes. */
29346
- if (m1 == CC_ZSmode)
29348
- if (m2 == CC_ZSmode)
29352
+ /* There's no valid combination for FP vs non-FP. */
29353
+ f = flags_from_mode (m1) | flags_from_mode (m2);
29354
+ if (f & CC_FLAG_FP)
29357
+ /* Otherwise, see what mode can implement all the flags. */
29358
+ return mode_from_flags (f);
29361
-#define CC_FLAG_S (1 << 0)
29362
-#define CC_FLAG_Z (1 << 1)
29363
-#define CC_FLAG_O (1 << 2)
29364
-#define CC_FLAG_C (1 << 3)
29365
+/* Return the minimal CC mode needed to implement (CMP_CODE X Y). */
29367
-static unsigned int
29368
-flags_needed_for_conditional (rtx conditional)
29370
+rx_select_cc_mode (enum rtx_code cmp_code, rtx x, rtx y ATTRIBUTE_UNUSED)
29372
- switch (GET_CODE (conditional))
29375
- case GT: return CC_FLAG_S | CC_FLAG_Z | CC_FLAG_O;
29376
+ if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT)
29380
- case GTU: return CC_FLAG_Z | CC_FLAG_C;
29381
+ return mode_from_flags (flags_from_code (cmp_code));
29385
- case GE: return CC_FLAG_S | CC_FLAG_O;
29386
+/* Split the conditional branch. Emit (COMPARE C1 C2) into CC_REG with
29387
+ CC_MODE, and use that in branches based on that compare. */
29390
- case GEU: return CC_FLAG_C;
29392
+rx_split_cbranch (enum machine_mode cc_mode, enum rtx_code cmp1,
29393
+ rtx c1, rtx c2, rtx label)
29398
- case NE: return CC_FLAG_Z;
29399
+ flags = gen_rtx_REG (cc_mode, CC_REG);
29400
+ x = gen_rtx_COMPARE (cc_mode, c1, c2);
29401
+ x = gen_rtx_SET (VOIDmode, flags, x);
29404
- default: gcc_unreachable ();
29406
+ x = gen_rtx_fmt_ee (cmp1, VOIDmode, flags, const0_rtx);
29407
+ x = gen_rtx_IF_THEN_ELSE (VOIDmode, x, label, pc_rtx);
29408
+ x = gen_rtx_SET (VOIDmode, pc_rtx, x);
29409
+ emit_jump_insn (x);
29412
-static unsigned int
29413
-flags_from_mode (enum machine_mode mode)
29417
- case CCmode: return CC_FLAG_S | CC_FLAG_Z | CC_FLAG_O | CC_FLAG_C;
29418
- case CC_ZSmode: return CC_FLAG_S | CC_FLAG_Z;
29419
- case CC_ZSOmode: return CC_FLAG_S | CC_FLAG_Z | CC_FLAG_O;
29420
- case CC_ZSCmode: return CC_FLAG_S | CC_FLAG_Z | CC_FLAG_C;
29421
- default: gcc_unreachable ();
29425
-/* Returns true if a compare insn is redundant because it
29426
- would only set flags that are already set correctly. */
29427
+/* A helper function for matching parallels that set the flags. */
29430
-rx_compare_redundant (rtx cmp)
29431
+rx_match_ccmode (rtx insn, enum machine_mode cc_mode)
29433
- unsigned int flags_needed;
29434
- unsigned int flags_set;
29439
- static rtx cc_reg = NULL_RTX;
29441
- if (cc_reg == NULL_RTX)
29442
- cc_reg = gen_rtx_REG (CCmode, CC_REGNUM);
29444
- /* We can only eliminate compares against 0. */
29445
- if (GET_CODE (XEXP (SET_SRC (PATTERN (cmp)), 1)) != CONST_INT
29446
- || INTVAL (XEXP (SET_SRC (PATTERN (cmp)), 1)) != 0)
29449
- /* Locate the branch insn that follows the
29450
- compare and which tests the bits in the PSW. */
29454
- /* If we have found an insn that sets or clobbers the CC
29455
- register and it was not the IF_THEN_ELSE insn that we
29456
- are looking for, then the comparison is redundant. */
29457
- if (next != cmp && reg_mentioned_p (cc_reg, PATTERN (next)))
29460
+ enum machine_mode flags_mode;
29462
- next = next_nonnote_insn (next);
29463
+ gcc_assert (XVECLEN (PATTERN (insn), 0) == 2);
29465
- /* If we run out of insns without finding the
29466
- user then the comparison is unnecessary. */
29467
- if (next == NULL_RTX)
29469
+ op1 = XVECEXP (PATTERN (insn), 0, 1);
29470
+ gcc_assert (GET_CODE (SET_SRC (op1)) == COMPARE);
29472
- /* If we have found another comparison
29473
- insn then the first one is redundant. */
29474
- if (INSN_P (next)
29475
- && GET_CODE (PATTERN (next)) == SET
29476
- && REG_P (SET_DEST (PATTERN (next)))
29477
- && REGNO (SET_DEST (PATTERN (next))) == CC_REGNUM)
29479
+ flags = SET_DEST (op1);
29480
+ flags_mode = GET_MODE (flags);
29482
- /* If we have found another arithmetic/logic insn that
29483
- sets the PSW flags then the comparison is redundant. */
29484
- if (INSN_P (next)
29485
- && GET_CODE (PATTERN (next)) == PARALLEL
29486
- && GET_CODE (XVECEXP (PATTERN (next), 0, 1)) == SET
29487
- && REG_P (SET_DEST (XVECEXP (PATTERN (next), 0, 1)))
29488
- && REGNO (SET_DEST (XVECEXP (PATTERN (next), 0, 1))) == CC_REGNUM)
29491
- /* If we have found an unconditional branch then the
29492
- PSW flags might be carried along with the jump, so
29493
- the comparison is necessary. */
29494
- if (INSN_P (next) && JUMP_P (next))
29496
- if (GET_CODE (PATTERN (next)) != SET)
29497
- /* If the jump does not involve setting the PC
29498
- then it is a return of some kind, and we know
29499
- that the comparison is not used. */
29502
- if (GET_CODE (SET_SRC (PATTERN (next))) != IF_THEN_ELSE)
29506
- while (! INSN_P (next)
29507
- || DEBUG_INSN_P (next)
29508
- || GET_CODE (PATTERN (next)) != SET
29509
- || GET_CODE (SET_SRC (PATTERN (next))) != IF_THEN_ELSE);
29511
- flags_needed = flags_needed_for_conditional (XEXP (SET_SRC (PATTERN (next)), 0));
29513
- /* Now look to see if there was a previous
29514
- instruction which set the PSW bits. */
29515
- source = XEXP (SET_SRC (PATTERN (cmp)), 0);
29519
- /* If this insn uses/sets/clobbers the CC register
29520
- and it is not the insn that we are looking for
29521
- below, then we must need the comparison. */
29522
- if (prev != cmp && reg_mentioned_p (cc_reg, PATTERN (prev)))
29524
+ if (GET_MODE (SET_SRC (op1)) != flags_mode)
29526
+ if (GET_MODE_CLASS (flags_mode) != MODE_CC)
29529
- prev = prev_nonnote_insn (prev);
29530
+ /* Ensure that the mode of FLAGS is compatible with CC_MODE. */
29531
+ if (flags_from_mode (flags_mode) & ~flags_from_mode (cc_mode))
29534
- if (prev == NULL_RTX)
29540
+rx_align_for_label (rtx lab ATTRIBUTE_UNUSED)
29542
+ return optimize_size ? 1 : 3;
29545
- /* If we encounter an insn which changes the contents of
29546
- the register which is the source of the comparison then
29547
- we will definitely need the comparison. */
29548
- if (INSN_P (prev)
29549
- && GET_CODE (PATTERN (prev)) == SET
29550
- && rtx_equal_p (SET_DEST (PATTERN (prev)), source))
29552
- /* Unless this instruction is a simple register move
29553
- instruction. In which case we can continue our
29554
- scan backwards, but now using the *source* of this
29555
- set instruction. */
29556
- if (REG_P (SET_SRC (PATTERN (prev))))
29557
- source = SET_SRC (PATTERN (prev));
29558
- /* We can also survive a sign-extension if the test is
29559
- for EQ/NE. Note the same does not apply to zero-
29560
- extension as this can turn a non-zero bit-pattern
29562
- else if (flags_needed == CC_FLAG_Z
29563
- && GET_CODE (SET_SRC (PATTERN (prev))) == SIGN_EXTEND)
29564
- source = XEXP (SET_SRC (PATTERN (prev)), 0);
29569
+rx_max_skip_for_label (rtx lab)
29574
- /* A label means a possible branch into the
29575
- code here, so we have to stop scanning. */
29576
- if (LABEL_P (prev))
29579
- while (! INSN_P (prev)
29580
- || DEBUG_INSN_P (prev)
29581
- || GET_CODE (PATTERN (prev)) != PARALLEL
29582
- || GET_CODE (XVECEXP (PATTERN (prev), 0, 1)) != SET
29583
- || ! REG_P (SET_DEST (XVECEXP (PATTERN (prev), 0, 1)))
29584
- || REGNO (SET_DEST (XVECEXP (PATTERN (prev), 0, 1))) != CC_REGNUM);
29586
- flags_set = flags_from_mode (GET_MODE (SET_DEST (XVECEXP (PATTERN (prev), 0, 1))));
29588
- dest = SET_DEST (XVECEXP (PATTERN (prev), 0, 0));
29589
- /* The destination of the previous arithmetic/logic instruction
29590
- must match the source in the comparison operation. For registers
29591
- we ignore the mode as there may have been a sign-extension involved. */
29592
- if (! rtx_equal_p (source, dest))
29593
+ if (lab == NULL_RTX)
29598
- if (REG_P (source) && REG_P (dest) && REGNO (dest) == REGNO (source))
29602
+ op = next_nonnote_insn (op);
29605
- return ((flags_set & flags_needed) == flags_needed);
29606
+ while (op && (LABEL_P (op)
29607
+ || (INSN_P (op) && GET_CODE (PATTERN (op)) == USE)));
29611
+ opsize = get_attr_length (op);
29612
+ if (opsize >= 0 && opsize < 8)
29613
+ return opsize - 1;
29617
#undef TARGET_FUNCTION_VALUE
29618
@@ -2759,6 +2799,12 @@
29619
#undef TARGET_CC_MODES_COMPATIBLE
29620
#define TARGET_CC_MODES_COMPATIBLE rx_cc_modes_compatible
29622
+#undef TARGET_PROMOTE_FUNCTION_MODE
29623
+#define TARGET_PROMOTE_FUNCTION_MODE rx_promote_function_mode
27188
@@ -2794,6 +2802,9 @@
27189
#undef TARGET_PROMOTE_FUNCTION_MODE
27190
#define TARGET_PROMOTE_FUNCTION_MODE rx_promote_function_mode
29625
27192
+#undef TARGET_OPTION_OVERRIDE
29626
27193
+#define TARGET_OPTION_OVERRIDE rx_option_override
29628
27195
struct gcc_target targetm = TARGET_INITIALIZER;
29630
27197
/* #include "gt-rx.h" */
29631
--- a/src/gcc/config/rx/rx.h
29632
+++ b/src/gcc/config/rx/rx.h
29634
/* GCC backend definitions for the Renesas RX processor.
29635
- Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
29636
+ Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
29637
Contributed by Red Hat.
29639
This file is part of GCC.
29641
builtin_define ("__RX__"); \
29642
builtin_assert ("cpu=RX"); \
29643
if (rx_cpu_type == RX610) \
29644
- builtin_assert ("machine=RX610"); \
29646
+ builtin_define ("__RX610__"); \
29647
+ builtin_assert ("machine=RX610"); \
29650
builtin_assert ("machine=RX600"); \
29652
@@ -144,6 +147,10 @@
29653
#define SIZE_TYPE "long unsigned int"
29654
#undef PTRDIFF_TYPE
29655
#define PTRDIFF_TYPE "long int"
29657
+#define WCHAR_TYPE "long int"
29658
+#undef WCHAR_TYPE_SIZE
29659
+#define WCHAR_TYPE_SIZE BITS_PER_WORD
29660
#define POINTERS_EXTEND_UNSIGNED 1
29661
#define FUNCTION_MODE QImode
29662
#define CASE_VECTOR_MODE Pmode
29663
@@ -260,6 +267,7 @@
29665
#define LIBCALL_VALUE(MODE) \
29666
gen_rtx_REG (((GET_MODE_CLASS (MODE) != MODE_INT \
29667
+ || COMPLEX_MODE_P (MODE) \
29668
|| GET_MODE_SIZE (MODE) >= 4) \
29671
@@ -354,7 +362,7 @@
29673
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", \
29674
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "cc" \
29678
#define ADDITIONAL_REGISTER_NAMES \
29680
@@ -616,8 +624,6 @@
29681
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \
29682
rx_print_operand_address (FILE, ADDR)
29684
-extern int rx_float_compare_mode;
29686
/* This is a version of REG_P that also returns TRUE for SUBREGs. */
29687
#define RX_REG_P(rtl) (REG_P (rtl) || GET_CODE (rtl) == SUBREG)
29689
@@ -653,14 +659,33 @@
29691
#define BRANCH_COST(SPEED, PREDICT) 1
29692
#define REGISTER_MOVE_COST(MODE, FROM, TO) 2
29693
-#define MEMORY_MOVE_COST(MODE, REGCLASS, IN) (2 + memory_move_secondary_cost (MODE, REGCLASS, IN))
29694
+#define MEMORY_MOVE_COST(MODE, REGCLASS, IN) \
29695
+ (((IN) ? 2 : 0) + memory_move_secondary_cost (MODE, REGCLASS, IN))
29697
-#define SELECT_CC_MODE(OP,X,Y) \
29698
- (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT ? CC_ZSmode : \
29699
- (GET_CODE (X) == PLUS || GET_CODE (X) == MINUS ? CC_ZSCmode : \
29700
- (GET_CODE (X) == ABS ? CC_ZSOmode : \
29701
- (GET_CODE (X) == AND || GET_CODE (X) == NOT || GET_CODE (X) == IOR \
29702
- || GET_CODE (X) == XOR || GET_CODE (X) == ROTATE \
29703
- || GET_CODE (X) == ROTATERT || GET_CODE (X) == ASHIFTRT \
29704
- || GET_CODE (X) == LSHIFTRT || GET_CODE (X) == ASHIFT ? CC_ZSmode : \
29706
+#define SELECT_CC_MODE(OP,X,Y) rx_select_cc_mode ((OP), (X), (Y))
29708
+#define JUMP_ALIGN(x) rx_align_for_label (x)
29709
+#define JUMP_ALIGN_MAX_SKIP rx_max_skip_for_label (label)
29710
+#define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label (x)
29711
+#define LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP rx_max_skip_for_label (label)
29712
+#define LOOP_ALIGN(x) rx_align_for_label (x)
29713
+#define LOOP_ALIGN_MAX_SKIP rx_max_skip_for_label (label)
29714
+#define LABEL_ALIGN(x) rx_align_for_label (x)
29715
+#define LABEL_ALIGN_MAX_SKIP rx_max_skip_for_label (NULL_RTX)
29717
+#define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM, LOG, MAX_SKIP) \
29720
+ if ((LOG) == 0 || (MAX_SKIP) == 0) \
29722
+ if (TARGET_AS100_SYNTAX) \
29724
+ if ((LOG) >= 2) \
29725
+ fprintf (STREAM, "\t.ALIGN 4\t; %d alignment actually requested\n", 1 << (LOG)); \
29727
+ fprintf (STREAM, "\t.ALIGN 2\n"); \
29730
+ fprintf (STREAM, "\t.balign %d,3,%d\n", 1 << (LOG), (MAX_SKIP)); \
29733
--- a/src/gcc/config/rx/rx.md
29734
+++ b/src/gcc/config/rx/rx.md
29736
;; Machine Description for Renesas RX processors
29737
-;; Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
29738
+;; Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
29739
;; Contributed by Red Hat.
29741
;; This file is part of GCC.
29743
;; <http://www.gnu.org/licenses/>.
29746
-;; This code iterator allows all branch instructions to
29747
-;; be generated from a single define_expand template.
29748
-(define_code_iterator most_cond [eq ne gt ge lt le gtu geu ltu leu
29749
- unordered ordered ])
29751
-;; Likewise, but only the ones that use Z or S.
29752
-(define_code_iterator zs_cond [eq ne gtu geu ltu leu ])
29754
;; This code iterator is used for sign- and zero- extensions.
29755
(define_mode_iterator small_int_modes [(HI "") (QI "")])
29758
[(SF "ALLOW_RX_FPU_INSNS") (SI "") (HI "") (QI "")])
29761
-;; Used to map RX condition names to GCC
29762
-;; condition names for builtin instructions.
29763
-(define_code_iterator gcc_conds [eq ne gt ge lt le gtu geu ltu leu
29764
- unge unlt uneq ltgt])
29765
-(define_code_attr rx_conds [(eq "eq") (ne "ne") (gt "gt") (ge "ge") (lt "lt")
29766
- (le "le") (gtu "gtu") (geu "geu") (ltu "ltu")
29767
- (leu "leu") (unge "pz") (unlt "n") (uneq "o")
29777
+ (UNSPEC_CONST 13)
29781
@@ -150,6 +134,8 @@
29782
(define_insn_reservation "throughput_18_latency_18" 1
29783
(eq_attr "timings" "1818") "throughput*18")
29785
+;; ----------------------------------------------------------------------------
29789
;; Note - we do not specify the two instructions necessary to perform
29790
@@ -160,254 +146,164 @@
29792
(define_expand "cbranchsi4"
29794
- (if_then_else (match_operator 0 "comparison_operator"
29795
- [(match_operand:SI 1 "register_operand")
29796
- (match_operand:SI 2 "rx_source_operand")])
29797
- (label_ref (match_operand 3 ""))
29802
+ (match_operator 0 "comparison_operator"
29803
+ [(match_operand:SI 1 "register_operand")
29804
+ (match_operand:SI 2 "rx_source_operand")])
29805
+ (label_ref (match_operand 3 ""))
29810
-(define_insn_and_split "*cbranchsi4_<code>"
29811
+(define_insn_and_split "*cbranchsi4"
29813
- (if_then_else (most_cond (match_operand:SI 0 "register_operand" "r")
29814
- (match_operand:SI 1 "rx_source_operand" "riQ"))
29815
- (label_ref (match_operand 2 "" ""))
29819
+ (match_operator 3 "comparison_operator"
29820
+ [(match_operand:SI 0 "register_operand" "r")
29821
+ (match_operand:SI 1 "rx_source_operand" "riQ")])
29822
+ (match_operand 2 "label_ref_operand" "")
29829
- /* We contstruct the split by hand as otherwise the JUMP_LABEL
29830
- attribute is not set correctly on the jump insn. */
29831
- emit_insn (gen_cmpsi (operands[0], operands[1]));
29833
- emit_jump_insn (gen_conditional_branch (operands[2],
29834
- gen_rtx_fmt_ee (<most_cond:CODE>, CCmode,
29835
- gen_rtx_REG (CCmode, CC_REG), const0_rtx)));
29839
+ rx_split_cbranch (CCmode, GET_CODE (operands[3]),
29840
+ operands[0], operands[1], operands[2]);
29844
-;; -----------------------------------------------------------------------------
29845
-;; These two are the canonical TST/branch insns. However, GCC
29846
-;; generates a wide variety of tst-like patterns, we catch those
29848
-(define_insn_and_split "*tstbranchsi4_<code>"
29850
- (if_then_else (zs_cond (and:SI (match_operand:SI 0 "register_operand" "r")
29851
- (match_operand:SI 1 "rx_source_operand" "riQ"))
29853
- (label_ref (match_operand 2 "" ""))
29858
+(define_insn "*cmpsi"
29859
+ [(set (reg:CC CC_REG)
29860
+ (compare:CC (match_operand:SI 0 "register_operand" "r,r,r,r,r,r,r")
29861
+ (match_operand:SI 1 "rx_source_operand" "r,Uint04,Int08,Sint16,Sint24,i,Q")))]
29865
- emit_insn (gen_tstsi (operands[0], operands[1]));
29867
- emit_jump_insn (gen_conditional_branch (operands[2],
29868
- gen_rtx_fmt_ee (<zs_cond:CODE>, CCmode,
29869
- gen_rtx_REG (CCmode, CC_REG), const0_rtx)));
29872
+ [(set_attr "timings" "11,11,11,11,11,11,33")
29873
+ (set_attr "length" "2,2,3,4,5,6,5")]
29876
-;; Inverse of above
29877
-(define_insn_and_split "*tstbranchsi4_<code>"
29878
+;; Canonical method for representing TST.
29879
+(define_insn_and_split "*cbranchsi4_tst"
29881
- (if_then_else (zs_cond (and:SI (match_operand:SI 0 "register_operand" "r")
29882
- (match_operand:SI 1 "rx_source_operand" "riQ"))
29885
- (label_ref (match_operand 2 "" ""))))
29888
+ (match_operator 3 "rx_zs_comparison_operator"
29889
+ [(and:SI (match_operand:SI 0 "register_operand" "r")
29890
+ (match_operand:SI 1 "rx_source_operand" "riQ"))
29892
+ (match_operand 2 "label_ref_operand" "")
29899
- emit_insn (gen_tstsi (operands[0], operands[1]));
29901
- emit_jump_insn (gen_conditional_branch (operands[2],
29902
- gen_rtx_fmt_ee (reverse_condition (<zs_cond:CODE>), CCmode,
29903
- gen_rtx_REG (CCmode, CC_REG), const0_rtx)));
29907
+ rx_split_cbranch (CC_ZSmode, GET_CODE (operands[3]),
29908
+ XEXP (operands[3], 0), XEXP (operands[3], 1),
29913
;; Various other ways that GCC codes "var & const"
29915
-(define_insn_and_split "*tstbranchsi4m_eq"
29916
+(define_insn_and_split "*cbranchsi4_tst_ext"
29918
- (if_then_else (eq (zero_extract:SI (match_operand:SI 0 "register_operand" "r")
29919
- (match_operand 1 "rx_constshift_operand" "i")
29920
- (match_operand 2 "rx_constshift_operand" "i"))
29922
- (label_ref (match_operand 3 "" ""))
29926
+ (match_operator 4 "rx_z_comparison_operator"
29927
+ [(zero_extract:SI
29928
+ (match_operand:SI 0 "register_operand" "r")
29929
+ (match_operand:SI 1 "rx_constshift_operand" "")
29930
+ (match_operand:SI 2 "rx_constshift_operand" ""))
29932
+ (match_operand 3 "label_ref_operand" "")
29938
- (if_then_else (eq (and:SI (match_dup 0)
29941
- (label_ref (match_dup 3))
29944
- "operands[4] = GEN_INT (((1 << INTVAL (operands[1]))-1) << INTVAL (operands[2]));"
29946
+ "reload_completed"
29949
+ HOST_WIDE_INT mask;
29953
+ mask <<= INTVAL (operands[1]);
29955
+ mask <<= INTVAL (operands[2]);
29956
+ x = gen_rtx_AND (SImode, operands[0], gen_int_mode (mask, SImode));
29958
+ rx_split_cbranch (CC_ZSmode, GET_CODE (operands[4]),
29959
+ x, const0_rtx, operands[3]);
29963
-(define_insn_and_split "*tstbranchsi4m_ne"
29965
- (if_then_else (ne (zero_extract:SI (match_operand:SI 0 "register_operand" "r")
29966
- (match_operand 1 "rx_constshift_operand" "i")
29967
- (match_operand 2 "rx_constshift_operand" "i"))
29969
- (label_ref (match_operand 3 "" ""))
29976
- (if_then_else (ne (and:SI (match_dup 0)
29979
- (label_ref (match_dup 3))
29982
- "operands[4] = GEN_INT (((1 << INTVAL (operands[1]))-1) << INTVAL (operands[2]));"
29983
+(define_insn "*tstsi"
29984
+ [(set (reg:CC_ZS CC_REG)
29986
+ (and:SI (match_operand:SI 0 "register_operand" "r,r,r")
29987
+ (match_operand:SI 1 "rx_source_operand" "r,i,Q"))
29989
+ "reload_completed"
29991
+ [(set_attr "timings" "11,11,33")
29992
+ (set_attr "length" "3,7,6")]
29995
-;; -----------------------------------------------------------------------------
29997
(define_expand "cbranchsf4"
29999
- (if_then_else (match_operator 0 "comparison_operator"
30000
- [(match_operand:SF 1 "register_operand")
30001
- (match_operand:SF 2 "rx_source_operand")])
30002
- (label_ref (match_operand 3 ""))
30006
+ (match_operator 0 "rx_fp_comparison_operator"
30007
+ [(match_operand:SF 1 "register_operand")
30008
+ (match_operand:SF 2 "rx_source_operand")])
30009
+ (label_ref (match_operand 3 ""))
30011
"ALLOW_RX_FPU_INSNS"
30015
-(define_insn_and_split "*cbranchsf4_<code>"
30016
+(define_insn_and_split "*cbranchsf4"
30018
- (if_then_else (most_cond (match_operand:SF 0 "register_operand" "r")
30019
- (match_operand:SF 1 "rx_source_operand" "rFiQ"))
30020
- (label_ref (match_operand 2 "" ""))
30024
+ (match_operator 3 "rx_fp_comparison_operator"
30025
+ [(match_operand:SF 0 "register_operand" "r")
30026
+ (match_operand:SF 1 "rx_source_operand" "rFQ")])
30027
+ (match_operand 2 "label_ref_operand" "")
30029
"ALLOW_RX_FPU_INSNS"
30031
"&& reload_completed"
30034
- /* We contstruct the split by hand as otherwise the JUMP_LABEL
30035
- attribute is not set correctly on the jump insn. */
30036
- emit_insn (gen_cmpsf (operands[0], operands[1]));
30038
- emit_jump_insn (gen_conditional_branch (operands[2],
30039
- gen_rtx_fmt_ee (<most_cond:CODE>, CCmode,
30040
- gen_rtx_REG (CCmode, CC_REG), const0_rtx)));
30044
-(define_insn "tstsi"
30045
- [(set (reg:CC_ZS CC_REG)
30046
- (compare:CC_ZS (and:SI (match_operand:SI 0 "register_operand" "r,r,r")
30047
- (match_operand:SI 1 "rx_source_operand" "r,i,Q"))
30051
- rx_float_compare_mode = false;
30052
- return "tst\t%Q1, %0";
30054
- [(set_attr "timings" "11,11,33")
30055
- (set_attr "length" "3,7,6")]
30058
-(define_insn "cmpsi"
30059
- [(set (reg:CC CC_REG)
30060
- (compare:CC (match_operand:SI 0 "register_operand" "r,r,r,r,r,r,r")
30061
- (match_operand:SI 1 "rx_source_operand" "r,Uint04,Int08,Sint16,Sint24,i,Q")))]
30064
- rx_float_compare_mode = false;
30065
- if (rx_compare_redundant (insn))
30066
- return "; Compare Eliminated: cmp %Q1, %0";
30067
- return "cmp\t%Q1, %0";
30069
- [(set_attr "timings" "11,11,11,11,11,11,33")
30070
- (set_attr "length" "2,2,3,4,5,6,5")]
30073
-;; This pattern is disabled when -fnon-call-exceptions is active because
30074
-;; it could generate a floating point exception, which would introduce an
30075
-;; edge into the flow graph between this insn and the conditional branch
30076
-;; insn to follow, thus breaking the cc0 relationship. Run the g++ test
30077
-;; g++.dg/eh/080514-1.C to see this happen.
30078
-(define_insn "cmpsf"
30079
- [(set (reg:CC_ZSO CC_REG)
30080
- (compare:CC_ZSO (match_operand:SF 0 "register_operand" "r,r,r")
30081
- (match_operand:SF 1 "rx_source_operand" "r,iF,Q")))]
30082
- "ALLOW_RX_FPU_INSNS"
30084
- rx_float_compare_mode = true;
30085
- return "fcmp\t%1, %0";
30088
+ rx_split_cbranch (CC_Fmode, GET_CODE (operands[3]),
30089
+ operands[0], operands[1], operands[2]);
30093
+(define_insn "*cmpsf"
30094
+ [(set (reg:CC_F CC_REG)
30096
+ (match_operand:SF 0 "register_operand" "r,r,r")
30097
+ (match_operand:SF 1 "rx_source_operand" "r,F,Q")))]
30098
+ "ALLOW_RX_FPU_INSNS && reload_completed"
30100
[(set_attr "timings" "11,11,33")
30101
(set_attr "length" "3,7,5")]
30104
;; Flow Control Instructions:
30106
-(define_expand "b<code>"
30107
+(define_insn "*conditional_branch"
30109
- (if_then_else (most_cond (reg:CC CC_REG) (const_int 0))
30110
- (label_ref (match_operand 0))
30116
-(define_insn "conditional_branch"
30118
- (if_then_else (match_operator 1 "comparison_operator"
30119
- [(reg:CC CC_REG) (const_int 0)])
30120
- (label_ref (match_operand 0 "" ""))
30124
- return rx_gen_cond_branch_template (operands[1], false);
30127
+ (match_operator 1 "comparison_operator"
30128
+ [(reg CC_REG) (const_int 0)])
30129
+ (label_ref (match_operand 0 "" ""))
30131
+ "reload_completed"
30133
[(set_attr "length" "8") ;; This length is wrong, but it is
30134
;; too hard to compute statically.
30135
(set_attr "timings" "33")] ;; The timing assumes that the branch is taken.
30138
-(define_insn "*reveresed_conditional_branch"
30140
- (if_then_else (match_operator 1 "comparison_operator"
30141
- [(reg:CC CC_REG) (const_int 0)])
30143
- (label_ref (match_operand 0 "" ""))))]
30146
- return rx_gen_cond_branch_template (operands[1], true);
30148
- [(set_attr "length" "8") ;; This length is wrong, but it is
30149
- ;; too hard to compute statically.
30150
- (set_attr "timings" "33")] ;; The timing assumes that the branch is taken.
30152
+;; ----------------------------------------------------------------------------
30154
(define_insn "jump"
30156
@@ -448,10 +344,12 @@
30157
(set_attr "timings" "55")]
30160
+;; Unspec used so that the constant will not be invalid
30161
+;; if -mmax-constant-size has been specified.
30162
(define_insn "deallocate_and_return"
30163
[(set (reg:SI SP_REG)
30164
(plus:SI (reg:SI SP_REG)
30165
- (match_operand:SI 0 "immediate_operand" "i")))
30166
+ (const:SI (unspec:SI [(match_operand 0 "const_int_operand" "n")] UNSPEC_CONST))))
30170
@@ -461,9 +359,10 @@
30172
(define_insn "pop_and_return"
30173
[(match_parallel 1 "rx_rtsd_vector"
30174
- [(set:SI (reg:SI SP_REG)
30175
- (plus:SI (reg:SI SP_REG)
30176
- (match_operand:SI 0 "const_int_operand" "n")))])]
30177
+ [(set (reg:SI SP_REG)
30178
+ (plus:SI (reg:SI SP_REG)
30179
+ (match_operand:SI 0 "const_int_operand" "n")))])
30183
rx_emit_stack_popm (operands, false);
30184
@@ -513,14 +412,14 @@
30186
if (! rx_call_operand (dest, Pmode))
30187
dest = force_reg (Pmode, dest);
30188
- emit_call_insn (gen_call_internal (dest, operands[1]));
30189
+ emit_call_insn (gen_call_internal (dest));
30194
(define_insn "call_internal"
30195
[(call (mem:QI (match_operand:SI 0 "rx_call_operand" "r,Symbol"))
30196
- (match_operand:SI 1 "general_operand" "g,g"))
30198
(clobber (reg:CC CC_REG))]
30201
@@ -540,7 +439,7 @@
30203
if (! rx_call_operand (dest, Pmode))
30204
dest = force_reg (Pmode, dest);
30205
- emit_call_insn (gen_call_value_internal (operands[0], dest, operands[2]));
30206
+ emit_call_insn (gen_call_value_internal (operands[0], dest));
30210
@@ -548,7 +447,7 @@
30211
(define_insn "call_value_internal"
30212
[(set (match_operand 0 "register_operand" "=r,r")
30213
(call (mem:QI (match_operand:SI 1 "rx_call_operand" "r,Symbol"))
30214
- (match_operand:SI 2 "general_operand" "g,g")))
30216
(clobber (reg:CC CC_REG))]
30219
@@ -572,12 +471,14 @@
30221
if (MEM_P (operands[0]))
30222
operands[0] = XEXP (operands[0], 0);
30223
+ emit_call_insn (gen_sibcall_internal (operands[0]));
30228
(define_insn "sibcall_internal"
30229
[(call (mem:QI (match_operand:SI 0 "rx_symbolic_call_operand" "Symbol"))
30230
- (match_operand:SI 1 "general_operand" "g"))
30235
@@ -595,13 +496,15 @@
30237
if (MEM_P (operands[1]))
30238
operands[1] = XEXP (operands[1], 0);
30239
+ emit_call_insn (gen_sibcall_value_internal (operands[0], operands[1]));
30244
(define_insn "sibcall_value_internal"
30245
[(set (match_operand 0 "register_operand" "=r")
30246
(call (mem:QI (match_operand:SI 1 "rx_symbolic_call_operand" "Symbol"))
30247
- (match_operand:SI 2 "general_operand" "g")))
30252
@@ -653,6 +556,9 @@
30254
if (MEM_P (operand0) && MEM_P (operand1))
30255
operands[1] = copy_to_mode_reg (<register_modes:MODE>mode, operand1);
30256
+ if (CONST_INT_P (operand1)
30257
+ && ! rx_is_legitimate_constant (operand1))
30262
@@ -688,11 +594,11 @@
30265
(define_insn "stack_push"
30266
- [(set:SI (reg:SI SP_REG)
30267
- (minus:SI (reg:SI SP_REG)
30269
- (set:SI (mem:SI (reg:SI SP_REG))
30270
- (match_operand:SI 0 "register_operand" "r"))]
30271
+ [(set (reg:SI SP_REG)
30272
+ (minus:SI (reg:SI SP_REG)
30274
+ (set (mem:SI (reg:SI SP_REG))
30275
+ (match_operand:SI 0 "register_operand" "r"))]
30278
[(set_attr "length" "2")]
30279
@@ -700,9 +606,9 @@
30281
(define_insn "stack_pushm"
30282
[(match_parallel 1 "rx_store_multiple_vector"
30283
- [(set:SI (reg:SI SP_REG)
30284
- (minus:SI (reg:SI SP_REG)
30285
- (match_operand:SI 0 "const_int_operand" "n")))])]
30286
+ [(set (reg:SI SP_REG)
30287
+ (minus:SI (reg:SI SP_REG)
30288
+ (match_operand:SI 0 "const_int_operand" "n")))])]
30291
rx_emit_stack_pushm (operands);
30292
@@ -713,11 +619,11 @@
30295
(define_insn "stack_pop"
30296
- [(set:SI (match_operand:SI 0 "register_operand" "=r")
30297
- (mem:SI (reg:SI SP_REG)))
30298
- (set:SI (reg:SI SP_REG)
30299
- (plus:SI (reg:SI SP_REG)
30301
+ [(set (match_operand:SI 0 "register_operand" "=r")
30302
+ (mem:SI (reg:SI SP_REG)))
30303
+ (set (reg:SI SP_REG)
30304
+ (plus:SI (reg:SI SP_REG)
30308
[(set_attr "length" "2")
30309
@@ -726,9 +632,9 @@
30311
(define_insn "stack_popm"
30312
[(match_parallel 1 "rx_load_multiple_vector"
30313
- [(set:SI (reg:SI SP_REG)
30314
- (plus:SI (reg:SI SP_REG)
30315
- (match_operand:SI 0 "const_int_operand" "n")))])]
30316
+ [(set (reg:SI SP_REG)
30317
+ (plus:SI (reg:SI SP_REG)
30318
+ (match_operand:SI 0 "const_int_operand" "n")))])]
30321
rx_emit_stack_popm (operands, true);
30322
@@ -738,68 +644,139 @@
30323
(set_attr "timings" "45")] ;; The timing is a guesstimate average timing.
30326
-;; FIXME: Add memory destination options ?
30327
-(define_insn "cstoresi4"
30328
- [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r")
30329
+(define_insn_and_split "cstoresi4"
30330
+ [(set (match_operand:SI 0 "register_operand" "=r")
30331
(match_operator:SI 1 "comparison_operator"
30332
- [(match_operand:SI 2 "register_operand" "r,r,r,r,r,r,r")
30333
- (match_operand:SI 3 "rx_source_operand" "r,Uint04,Int08,Sint16,Sint24,i,Q")]))
30334
- (clobber (reg:CC CC_REG))] ;; Because the cc flags are set based on comparing ops 2 & 3 not the value in op 0.
30335
+ [(match_operand:SI 2 "register_operand" "r")
30336
+ (match_operand:SI 3 "rx_source_operand" "riQ")]))
30337
+ (clobber (reg:CC CC_REG))]
30340
- rx_float_compare_mode = false;
30341
- return "cmp\t%Q3, %Q2\n\tsc%B1.L\t%0";
30343
- [(set_attr "timings" "22,22,22,22,22,22,44")
30344
- (set_attr "length" "5,5,6,7,8,9,8")]
30346
+ "reload_completed"
30351
+ flags = gen_rtx_REG (CCmode, CC_REG);
30352
+ x = gen_rtx_COMPARE (CCmode, operands[2], operands[3]);
30353
+ x = gen_rtx_SET (VOIDmode, flags, x);
30356
+ x = gen_rtx_fmt_ee (GET_CODE (operands[1]), SImode, flags, const0_rtx);
30357
+ x = gen_rtx_SET (VOIDmode, operands[0], x);
30362
+(define_insn "*sccc"
30363
+ [(set (match_operand:SI 0 "register_operand" "=r")
30364
+ (match_operator:SI 1 "comparison_operator"
30365
+ [(reg CC_REG) (const_int 0)]))]
30366
+ "reload_completed"
30368
+ [(set_attr "length" "3")]
30371
+(define_insn_and_split "cstoresf4"
30372
+ [(set (match_operand:SI 0 "register_operand" "=r")
30373
+ (match_operator:SI 1 "rx_fp_comparison_operator"
30374
+ [(match_operand:SF 2 "register_operand" "r")
30375
+ (match_operand:SF 3 "rx_source_operand" "rFQ")]))]
30376
+ "ALLOW_RX_FPU_INSNS"
30378
+ "reload_completed"
30383
+ flags = gen_rtx_REG (CC_Fmode, CC_REG);
30384
+ x = gen_rtx_COMPARE (CC_Fmode, operands[2], operands[3]);
30385
+ x = gen_rtx_SET (VOIDmode, flags, x);
30388
+ x = gen_rtx_fmt_ee (GET_CODE (operands[1]), SImode, flags, const0_rtx);
30389
+ x = gen_rtx_SET (VOIDmode, operands[0], x);
30394
(define_expand "movsicc"
30396
[(set (match_operand:SI 0 "register_operand")
30397
(if_then_else:SI (match_operand:SI 1 "comparison_operator")
30398
(match_operand:SI 2 "nonmemory_operand")
30399
- (match_operand:SI 3 "immediate_operand")))
30400
- (clobber (reg:CC CC_REG))])] ;; See cstoresi4
30401
+ (match_operand:SI 3 "nonmemory_operand")))
30402
+ (clobber (reg:CC CC_REG))])]
30405
- if (GET_CODE (operands[1]) != EQ && GET_CODE (operands[1]) != NE)
30407
- if (! CONST_INT_P (operands[3]))
30412
+ /* ??? Support other conditions via cstore into a temporary? */
30413
+ if (GET_CODE (operands[1]) != EQ && GET_CODE (operands[1]) != NE)
30415
+ /* One operand must be a constant. */
30416
+ if (!CONSTANT_P (operands[2]) && !CONSTANT_P (operands[3]))
30420
-(define_insn "*movsieq"
30421
- [(set (match_operand:SI 0 "register_operand" "=r,r,r")
30422
- (if_then_else:SI (eq (match_operand:SI 3 "register_operand" "r,r,r")
30423
- (match_operand:SI 4 "rx_source_operand" "riQ,riQ,riQ"))
30424
- (match_operand:SI 1 "nonmemory_operand" "0,i,r")
30425
- (match_operand:SI 2 "immediate_operand" "i,i,i")))
30426
- (clobber (reg:CC CC_REG))] ;; See cstoresi4
30429
- cmp\t%Q4, %Q3\n\tstnz\t%2, %0
30430
- cmp\t%Q4, %Q3\n\tmov.l\t%2, %0\n\tstz\t%1, %0
30431
- cmp\t%Q4, %Q3\n\tmov.l\t%1, %0\n\tstnz\t%2, %0"
30432
- [(set_attr "length" "13,19,15")
30433
- (set_attr "timings" "22,33,33")]
30436
-(define_insn "*movsine"
30437
- [(set (match_operand:SI 0 "register_operand" "=r,r,r")
30438
- (if_then_else:SI (ne (match_operand:SI 3 "register_operand" "r,r,r")
30439
- (match_operand:SI 4 "rx_source_operand" "riQ,riQ,riQ"))
30440
- (match_operand:SI 1 "nonmemory_operand" "0,i,r")
30441
- (match_operand:SI 2 "immediate_operand" "i,i,i")))
30442
- (clobber (reg:CC CC_REG))] ;; See cstoresi4
30445
- cmp\t%Q4, %Q3\n\tstz\t%2, %0
30446
- cmp\t%Q4, %Q3\n\tmov.l\t%2, %0\n\tstnz\t%1, %0
30447
- cmp\t%Q4, %Q3\n\tmov.l\t%1, %0\n\tstz\t%2, %0"
30448
- [(set_attr "length" "13,19,15")
30449
- (set_attr "timings" "22,33,33")]
30450
+(define_insn_and_split "*movsicc"
30451
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
30453
+ (match_operator 5 "rx_z_comparison_operator"
30454
+ [(match_operand:SI 3 "register_operand" "r,r")
30455
+ (match_operand:SI 4 "rx_source_operand" "riQ,riQ")])
30456
+ (match_operand:SI 1 "nonmemory_operand" "i,ri")
30457
+ (match_operand:SI 2 "nonmemory_operand" "ri,i")))
30458
+ (clobber (reg:CC CC_REG))]
30459
+ "CONSTANT_P (operands[1]) || CONSTANT_P (operands[2])"
30461
+ "&& reload_completed"
30464
+ rtx x, flags, op0, op1, op2;
30465
+ enum rtx_code cmp_code;
30467
+ flags = gen_rtx_REG (CCmode, CC_REG);
30468
+ x = gen_rtx_COMPARE (CCmode, operands[3], operands[4]);
30469
+ emit_insn (gen_rtx_SET (VOIDmode, flags, x));
30471
+ cmp_code = GET_CODE (operands[5]);
30472
+ op0 = operands[0];
30473
+ op1 = operands[1];
30474
+ op2 = operands[2];
30476
+ /* If OP2 is the constant, reverse the sense of the move. */
30477
+ if (!CONSTANT_P (operands[1]))
30479
+ x = op1, op1 = op2, op2 = x;
30480
+ cmp_code = reverse_condition (cmp_code);
30483
+ /* If OP2 does not match the output, copy it into place. We have allowed
30484
+ these alternatives so that the destination can legitimately be one of
30485
+ the comparison operands without increasing register pressure. */
30486
+ if (!rtx_equal_p (op0, op2))
30487
+ emit_move_insn (op0, op2);
30489
+ x = gen_rtx_fmt_ee (cmp_code, VOIDmode, flags, const0_rtx);
30490
+ x = gen_rtx_IF_THEN_ELSE (SImode, x, op1, op0);
30491
+ emit_insn (gen_rtx_SET (VOIDmode, op0, x));
30495
+(define_insn "*stcc"
30496
+ [(set (match_operand:SI 0 "register_operand" "+r,r,r,r")
30498
+ (match_operator 2 "rx_z_comparison_operator"
30499
+ [(reg CC_REG) (const_int 0)])
30500
+ (match_operand:SI 1 "immediate_operand" "Sint08,Sint16,Sint24,i")
30502
+ "reload_completed"
30504
+ if (GET_CODE (operands[2]) == EQ)
30505
+ return "stz\t%1, %0";
30507
+ return "stnz\t%1, %0";
30509
+ [(set_attr "length" "4,5,6,7")]
30512
;; Arithmetic Instructions
30513
@@ -807,9 +784,7 @@
30514
(define_insn "abssi2"
30515
[(set (match_operand:SI 0 "register_operand" "=r,r")
30516
(abs:SI (match_operand:SI 1 "register_operand" "0,r")))
30517
- (set (reg:CC_ZSO CC_REG)
30518
- (compare:CC_ZSO (abs:SI (match_dup 1))
30520
+ (clobber (reg:CC CC_REG))]
30524
@@ -817,13 +792,27 @@
30525
[(set_attr "length" "2,3")]
30528
+(define_insn "*abssi2_flags"
30529
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
30530
+ (abs:SI (match_operand:SI 1 "register_operand" "0,r")))
30531
+ (set (reg CC_REG)
30532
+ (compare (abs:SI (match_dup 1))
30534
+ ;; Note - although the ABS instruction does set the O bit in the processor
30535
+ ;; status word, it does not do so in a way that is comparable with the CMP
30536
+ ;; instruction. Hence we use CC_ZSmode rather than CC_ZSOmode.
30537
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
30541
+ [(set_attr "length" "2,3")]
30544
(define_insn "addsi3"
30545
[(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r,r,r,r,r,r,r")
30546
(plus:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0,0,r,r,r,r,r,r,0")
30547
(match_operand:SI 2 "rx_source_operand" "r,Uint04,NEGint4,Sint08,Sint16,Sint24,i,0,r,Sint08,Sint16,Sint24,i,Q")))
30548
- (set (reg:CC_ZSC CC_REG) ;; See subsi3
30549
- (compare:CC_ZSC (plus:SI (match_dup 1) (match_dup 2))
30551
+ (clobber (reg:CC CC_REG))]
30555
@@ -844,27 +833,170 @@
30556
(set_attr "length" "2,2,2,3,4,5,6,2,3,3,4,5,6,5")]
30559
-(define_insn "adddi3"
30560
- [(set (match_operand:DI 0 "register_operand" "=r,r,r,r,r,r")
30561
- (plus:DI (match_operand:DI 1 "register_operand" "%0,0,0,0,0,0")
30562
- (match_operand:DI 2 "rx_source_operand"
30563
- "r,Sint08,Sint16,Sint24,i,Q")))
30564
- (set (reg:CC_ZSC CC_REG) ;; See subsi3
30565
- (compare:CC_ZSC (plus:DI (match_dup 1) (match_dup 2))
30568
- "add\t%L2, %L0\n\tadc\t%H2, %H0"
30569
- [(set_attr "timings" "22,22,22,22,22,44")
30570
- (set_attr "length" "5,7,9,11,13,11")]
30571
+(define_insn "*addsi3_flags"
30572
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r,r,r,r,r,r,r")
30573
+ (plus:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0,0,r,r,r,r,r,r,0")
30574
+ (match_operand:SI 2 "rx_source_operand" "r,Uint04,NEGint4,Sint08,Sint16,Sint24,i,0,r,Sint08,Sint16,Sint24,i,Q")))
30575
+ (set (reg CC_REG)
30576
+ (compare (plus:SI (match_dup 1) (match_dup 2))
30578
+ "reload_completed && rx_match_ccmode (insn, CC_ZSCmode)"
30594
+ [(set_attr "timings" "11,11,11,11,11,11,11,11,11,11,11,11,11,33")
30595
+ (set_attr "length" "2,2,2,3,4,5,6,2,3,3,4,5,6,5")]
30598
+;; A helper to expand the above with the CC_MODE filled in.
30599
+(define_expand "addsi3_flags"
30600
+ [(parallel [(set (match_operand:SI 0 "register_operand")
30601
+ (plus:SI (match_operand:SI 1 "register_operand")
30602
+ (match_operand:SI 2 "rx_source_operand")))
30603
+ (set (reg:CC_ZSC CC_REG)
30604
+ (compare:CC_ZSC (plus:SI (match_dup 1) (match_dup 2))
30605
+ (const_int 0)))])]
30608
+(define_insn "adc_internal"
30609
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r")
30612
+ (ltu:SI (reg:CC CC_REG) (const_int 0))
30613
+ (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0"))
30614
+ (match_operand:SI 2 "rx_source_operand" "r,Sint08,Sint16,Sint24,i,Q")))
30615
+ (clobber (reg:CC CC_REG))]
30616
+ "reload_completed"
30618
+ [(set_attr "timings" "11,11,11,11,11,33")
30619
+ (set_attr "length" "3,4,5,6,7,6")]
30622
+(define_insn "*adc_flags"
30623
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r")
30626
+ (ltu:SI (reg:CC CC_REG) (const_int 0))
30627
+ (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0"))
30628
+ (match_operand:SI 2 "rx_source_operand" "r,Sint08,Sint16,Sint24,i,Q")))
30629
+ (set (reg CC_REG)
30633
+ (ltu:SI (reg:CC CC_REG) (const_int 0))
30637
+ "reload_completed && rx_match_ccmode (insn, CC_ZSCmode)"
30639
+ [(set_attr "timings" "11,11,11,11,11,33")
30640
+ (set_attr "length" "3,4,5,6,7,6")]
30643
+(define_expand "adddi3"
30644
+ [(set (match_operand:DI 0 "register_operand")
30645
+ (plus:DI (match_operand:DI 1 "register_operand")
30646
+ (match_operand:DI 2 "rx_source_operand")))]
30649
+ rtx op0l, op0h, op1l, op1h, op2l, op2h;
30651
+ op0l = gen_lowpart (SImode, operands[0]);
30652
+ op1l = gen_lowpart (SImode, operands[1]);
30653
+ op2l = gen_lowpart (SImode, operands[2]);
30654
+ op0h = gen_highpart (SImode, operands[0]);
30655
+ op1h = gen_highpart (SImode, operands[1]);
30656
+ op2h = gen_highpart_mode (SImode, DImode, operands[2]);
30658
+ emit_insn (gen_adddi3_internal (op0l, op0h, op1l, op2l, op1h, op2h));
30662
+(define_insn_and_split "adddi3_internal"
30663
+ [(set (match_operand:SI 0 "register_operand" "=r")
30664
+ (plus:SI (match_operand:SI 2 "register_operand" "r")
30665
+ (match_operand:SI 3 "rx_source_operand" "riQ")))
30666
+ (set (match_operand:SI 1 "register_operand" "=r")
30669
+ (ltu:SI (plus:SI (match_dup 2) (match_dup 3)) (match_dup 2))
30670
+ (match_operand:SI 4 "register_operand" "%1"))
30671
+ (match_operand:SI 5 "rx_source_operand" "riQ")))
30672
+ (clobber (match_scratch:SI 6 "=&r"))
30673
+ (clobber (reg:CC CC_REG))]
30676
+ "reload_completed"
30679
+ rtx op0l = operands[0];
30680
+ rtx op0h = operands[1];
30681
+ rtx op1l = operands[2];
30682
+ rtx op2l = operands[3];
30683
+ rtx op1h = operands[4];
30684
+ rtx op2h = operands[5];
30685
+ rtx scratch = operands[6];
30688
+ if (reg_overlap_mentioned_p (op0l, op1h))
30690
+ emit_move_insn (scratch, op0l);
30692
+ if (reg_overlap_mentioned_p (op0l, op2h))
30695
+ else if (reg_overlap_mentioned_p (op0l, op2h))
30697
+ emit_move_insn (scratch, op0l);
30701
+ if (rtx_equal_p (op0l, op1l))
30703
+ /* It is preferable that op0l == op1l... */
30704
+ else if (rtx_equal_p (op0l, op2l))
30705
+ x = op1l, op1l = op2l, op2l = x;
30706
+ /* ... but it is only a requirement if op2l == MEM. */
30707
+ else if (MEM_P (op2l))
30709
+ /* Let's hope that we still have a scratch register free. */
30710
+ gcc_assert (op1h != scratch);
30711
+ emit_move_insn (scratch, op2l);
30715
+ emit_insn (gen_addsi3_flags (op0l, op1l, op2l));
30717
+ if (rtx_equal_p (op0h, op1h))
30719
+ else if (rtx_equal_p (op0h, op2h))
30720
+ x = op1h, op1h = op2h, op2h = x;
30723
+ emit_move_insn (op0h, op1h);
30726
+ emit_insn (gen_adc_internal (op0h, op1h, op2h));
30730
(define_insn "andsi3"
30731
[(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r,r")
30732
(and:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0,r,r,0")
30733
(match_operand:SI 2 "rx_source_operand" "r,Uint04,Sint08,Sint16,Sint24,i,0,r,Q")))
30734
- (set (reg:CC_ZS CC_REG)
30735
- (compare:CC_ZS (and:SI (match_dup 1) (match_dup 2))
30737
+ (clobber (reg:CC CC_REG))]
30741
@@ -876,13 +1008,35 @@
30745
- [(set_attr "timings" "11,11,11,11,11,11,11,33,33")
30746
+ [(set_attr "timings" "11,11,11,11,11,11,11,11,33")
30747
+ (set_attr "length" "2,2,3,4,5,6,2,5,5")]
30750
+(define_insn "*andsi3_flags"
30751
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r,r")
30752
+ (and:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0,r,r,0")
30753
+ (match_operand:SI 2 "rx_source_operand" "r,Uint04,Sint08,Sint16,Sint24,i,0,r,Q")))
30754
+ (set (reg CC_REG)
30755
+ (compare (and:SI (match_dup 1) (match_dup 2))
30757
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
30768
+ [(set_attr "timings" "11,11,11,11,11,11,11,11,33")
30769
(set_attr "length" "2,2,3,4,5,6,2,5,5")]
30772
;; Byte swap (single 32-bit value).
30773
(define_insn "bswapsi2"
30774
- [(set (match_operand:SI 0 "register_operand" "+r")
30775
+ [(set (match_operand:SI 0 "register_operand" "=r")
30776
(bswap:SI (match_operand:SI 1 "register_operand" "r")))]
30779
@@ -891,7 +1045,7 @@
30781
;; Byte swap (single 16-bit value). Note - we ignore the swapping of the high 16-bits.
30782
(define_insn "bswaphi2"
30783
- [(set (match_operand:HI 0 "register_operand" "+r")
30784
+ [(set (match_operand:HI 0 "register_operand" "=r")
30785
(bswap:HI (match_operand:HI 1 "register_operand" "r")))]
30788
@@ -999,12 +1153,23 @@
30789
(define_insn "negsi2"
30790
[(set (match_operand:SI 0 "register_operand" "=r,r")
30791
(neg:SI (match_operand:SI 1 "register_operand" "0,r")))
30792
- (set (reg:CC CC_REG)
30793
- (compare:CC (neg:SI (match_dup 1))
30795
- ;; The NEG instruction does not comply with -fwrapv semantics.
30796
- ;; See gcc.c-torture/execute/pr22493-1.c for an example of this.
30798
+ (clobber (reg:CC CC_REG))]
30803
+ [(set_attr "length" "2,3")]
30806
+;; Note that the O and C flags are not set as per a normal compare,
30807
+;; and thus are unusable in that context.
30808
+(define_insn "*negsi2_flags"
30809
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
30810
+ (neg:SI (match_operand:SI 1 "register_operand" "0,r")))
30811
+ (set (reg CC_REG)
30812
+ (compare (neg:SI (match_dup 1))
30814
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
30818
@@ -1014,9 +1179,7 @@
30819
(define_insn "one_cmplsi2"
30820
[(set (match_operand:SI 0 "register_operand" "=r,r")
30821
(not:SI (match_operand:SI 1 "register_operand" "0,r")))
30822
- (set (reg:CC_ZS CC_REG)
30823
- (compare:CC_ZS (not:SI (match_dup 1))
30825
+ (clobber (reg:CC CC_REG))]
30829
@@ -1024,13 +1187,24 @@
30830
[(set_attr "length" "2,3")]
30833
+(define_insn "*one_cmplsi2_flags"
30834
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
30835
+ (not:SI (match_operand:SI 1 "register_operand" "0,r")))
30836
+ (set (reg CC_REG)
30837
+ (compare (not:SI (match_dup 1))
30839
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
30843
+ [(set_attr "length" "2,3")]
30846
(define_insn "iorsi3"
30847
[(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r,r")
30848
(ior:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0,r,r,0")
30849
(match_operand:SI 2 "rx_source_operand" "r,Uint04,Sint08,Sint16,Sint24,i,0,r,Q")))
30850
- (set (reg:CC_ZS CC_REG)
30851
- (compare:CC_ZS (ior:SI (match_dup 1) (match_dup 2))
30853
+ (clobber (reg:CC CC_REG))]
30857
@@ -1046,37 +1220,77 @@
30858
(set_attr "length" "2,2,3,4,5,6,2,3,5")]
30861
+(define_insn "*iorsi3_flags"
30862
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r,r")
30863
+ (ior:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0,r,r,0")
30864
+ (match_operand:SI 2 "rx_source_operand" "r,Uint04,Sint08,Sint16,Sint24,i,0,r,Q")))
30865
+ (set (reg CC_REG)
30866
+ (compare (ior:SI (match_dup 1) (match_dup 2))
30868
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
30879
+ [(set_attr "timings" "11,11,11,11,11,11,11,11,33")
30880
+ (set_attr "length" "2,2,3,4,5,6,2,3,5")]
30883
(define_insn "rotlsi3"
30884
[(set (match_operand:SI 0 "register_operand" "=r")
30885
(rotate:SI (match_operand:SI 1 "register_operand" "0")
30886
(match_operand:SI 2 "rx_shift_operand" "rn")))
30887
- (set (reg:CC_ZS CC_REG)
30888
- (compare:CC_ZS (rotate:SI (match_dup 1) (match_dup 2))
30890
+ (clobber (reg:CC CC_REG))]
30893
[(set_attr "length" "3")]
30896
+(define_insn "*rotlsi3_flags"
30897
+ [(set (match_operand:SI 0 "register_operand" "=r")
30898
+ (rotate:SI (match_operand:SI 1 "register_operand" "0")
30899
+ (match_operand:SI 2 "rx_shift_operand" "rn")))
30900
+ (set (reg CC_REG)
30901
+ (compare (rotate:SI (match_dup 1) (match_dup 2))
30903
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
30905
+ [(set_attr "length" "3")]
30908
(define_insn "rotrsi3"
30909
[(set (match_operand:SI 0 "register_operand" "=r")
30910
(rotatert:SI (match_operand:SI 1 "register_operand" "0")
30911
(match_operand:SI 2 "rx_shift_operand" "rn")))
30912
- (set (reg:CC_ZS CC_REG)
30913
- (compare:CC_ZS (rotatert:SI (match_dup 1) (match_dup 2))
30915
+ (clobber (reg:CC CC_REG))]
30918
[(set_attr "length" "3")]
30921
+(define_insn "*rotrsi3_flags"
30922
+ [(set (match_operand:SI 0 "register_operand" "=r")
30923
+ (rotatert:SI (match_operand:SI 1 "register_operand" "0")
30924
+ (match_operand:SI 2 "rx_shift_operand" "rn")))
30925
+ (set (reg CC_REG)
30926
+ (compare (rotatert:SI (match_dup 1) (match_dup 2))
30928
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
30930
+ [(set_attr "length" "3")]
30933
(define_insn "ashrsi3"
30934
[(set (match_operand:SI 0 "register_operand" "=r,r,r")
30935
(ashiftrt:SI (match_operand:SI 1 "register_operand" "0,0,r")
30936
(match_operand:SI 2 "rx_shift_operand" "r,n,n")))
30937
- (set (reg:CC_ZS CC_REG)
30938
- (compare:CC_ZS (ashiftrt:SI (match_dup 1) (match_dup 2))
30940
+ (clobber (reg:CC CC_REG))]
30944
@@ -1085,13 +1299,26 @@
30945
[(set_attr "length" "3,2,3")]
30948
+(define_insn "*ashrsi3_flags"
30949
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
30950
+ (ashiftrt:SI (match_operand:SI 1 "register_operand" "0,0,r")
30951
+ (match_operand:SI 2 "rx_shift_operand" "r,n,n")))
30952
+ (set (reg CC_REG)
30953
+ (compare (ashiftrt:SI (match_dup 1) (match_dup 2))
30955
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
30959
+ shar\t%2, %1, %0"
30960
+ [(set_attr "length" "3,2,3")]
30963
(define_insn "lshrsi3"
30964
[(set (match_operand:SI 0 "register_operand" "=r,r,r")
30965
(lshiftrt:SI (match_operand:SI 1 "register_operand" "0,0,r")
30966
(match_operand:SI 2 "rx_shift_operand" "r,n,n")))
30967
- (set (reg:CC_ZS CC_REG)
30968
- (compare:CC_ZS (lshiftrt:SI (match_dup 1) (match_dup 2))
30970
+ (clobber (reg:CC CC_REG))]
30974
@@ -1100,13 +1327,26 @@
30975
[(set_attr "length" "3,2,3")]
30978
+(define_insn "*lshrsi3_flags"
30979
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
30980
+ (lshiftrt:SI (match_operand:SI 1 "register_operand" "0,0,r")
30981
+ (match_operand:SI 2 "rx_shift_operand" "r,n,n")))
30982
+ (set (reg CC_REG)
30983
+ (compare (lshiftrt:SI (match_dup 1) (match_dup 2))
30985
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
30989
+ shlr\t%2, %1, %0"
30990
+ [(set_attr "length" "3,2,3")]
30993
(define_insn "ashlsi3"
30994
[(set (match_operand:SI 0 "register_operand" "=r,r,r")
30995
(ashift:SI (match_operand:SI 1 "register_operand" "0,0,r")
30996
(match_operand:SI 2 "rx_shift_operand" "r,n,n")))
30997
- (set (reg:CC_ZS CC_REG)
30998
- (compare:CC_ZS (ashift:SI (match_dup 1) (match_dup 2))
31000
+ (clobber (reg:CC CC_REG))]
31004
@@ -1115,16 +1355,57 @@
31005
[(set_attr "length" "3,2,3")]
31008
+(define_insn "*ashlsi3_flags"
31009
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r")
31010
+ (ashift:SI (match_operand:SI 1 "register_operand" "0,0,r")
31011
+ (match_operand:SI 2 "rx_shift_operand" "r,n,n")))
31012
+ (set (reg CC_REG)
31013
+ (compare (ashift:SI (match_dup 1) (match_dup 2))
31015
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
31019
+ shll\t%2, %1, %0"
31020
+ [(set_attr "length" "3,2,3")]
31023
+;; Saturate to 32-bits
31024
+(define_insn_and_split "ssaddsi3"
31025
+ [(set (match_operand:SI 0 "register_operand" "=r")
31026
+ (ss_plus:SI (match_operand:SI 1 "register_operand" "r")
31027
+ (match_operand:SI 2 "rx_source_operand" "riQ")))
31028
+ (clobber (reg:CC CC_REG))]
31031
+ "reload_completed"
31032
+ [(parallel [(set (match_dup 0)
31033
+ (plus:SI (match_dup 1) (match_dup 2)))
31034
+ (set (reg:CC_ZSC CC_REG)
31036
+ (plus:SI (match_dup 1) (match_dup 2))
31037
+ (const_int 0)))])
31038
+ (set (match_dup 0)
31039
+ (unspec:SI [(match_dup 0) (reg:CC CC_REG)]
31040
+ UNSPEC_BUILTIN_SAT))]
31044
+(define_insn "*sat"
31045
+ [(set (match_operand:SI 0 "register_operand" "=r")
31046
+ (unspec:SI [(match_operand:SI 1 "register_operand" "0")
31048
+ UNSPEC_BUILTIN_SAT))]
31049
+ "reload_completed"
31051
+ [(set_attr "length" "2")]
31054
(define_insn "subsi3"
31055
[(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r")
31056
(minus:SI (match_operand:SI 1 "register_operand" "0,0,0,r,0")
31057
(match_operand:SI 2 "rx_source_operand" "r,Uint04,n,r,Q")))
31058
- (set (reg:CC_ZSC CC_REG)
31059
- ;; Note - we do not acknowledge that the SUB instruction sets the Overflow
31060
- ;; flag because its interpretation is different from comparing the result
31061
- ;; against zero. Compile and run gcc.c-torture/execute/cmpsi-1.c to see this.
31062
- (compare:CC_ZSC (minus:SI (match_dup 1) (match_dup 2))
31064
+ (clobber (reg:CC CC_REG))]
31068
@@ -1136,32 +1417,267 @@
31069
(set_attr "length" "2,2,6,3,5")]
31072
-(define_insn "subdi3"
31073
- [(set (match_operand:DI 0 "register_operand" "=r,r")
31074
- (minus:DI (match_operand:DI 1 "register_operand" "0,0")
31075
- (match_operand:DI 2 "rx_source_operand" "r,Q")))
31076
- (set (reg:CC_ZSC CC_REG) ;; See subsi3
31077
- (compare:CC_ZSC (minus:DI (match_dup 1) (match_dup 2))
31080
- "sub\t%L2, %L0\n\tsbb\t%H2, %H0"
31081
- [(set_attr "timings" "22,44")
31082
- (set_attr "length" "5,11")]
31083
+;; Note that the O flag is set as if (compare op1 op2) not for
31084
+;; what is described here, (compare op0 0).
31085
+(define_insn "*subsi3_flags"
31086
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r")
31087
+ (minus:SI (match_operand:SI 1 "register_operand" "0,0,0,r,0")
31088
+ (match_operand:SI 2 "rx_source_operand" "r,Uint04,n,r,Q")))
31089
+ (set (reg CC_REG)
31090
+ (compare (minus:SI (match_dup 1) (match_dup 2))
31092
+ "reload_completed && rx_match_ccmode (insn, CC_ZSCmode)"
31099
+ [(set_attr "timings" "11,11,11,11,33")
31100
+ (set_attr "length" "2,2,6,3,5")]
31103
+;; A helper to expand the above with the CC_MODE filled in.
31104
+(define_expand "subsi3_flags"
31105
+ [(parallel [(set (match_operand:SI 0 "register_operand")
31106
+ (minus:SI (match_operand:SI 1 "register_operand")
31107
+ (match_operand:SI 2 "rx_source_operand")))
31108
+ (set (reg:CC_ZSC CC_REG)
31109
+ (compare:CC_ZSC (minus:SI (match_dup 1) (match_dup 2))
31110
+ (const_int 0)))])]
31113
+(define_insn "sbb_internal"
31114
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
31117
+ (match_operand:SI 1 "register_operand" " 0,0")
31118
+ (match_operand:SI 2 "rx_compare_operand" " r,Q"))
31119
+ (geu:SI (reg:CC CC_REG) (const_int 0))))
31120
+ (clobber (reg:CC CC_REG))]
31121
+ "reload_completed"
31123
+ [(set_attr "timings" "11,33")
31124
+ (set_attr "length" "3,6")]
31127
+(define_insn "*sbb_flags"
31128
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
31131
+ (match_operand:SI 1 "register_operand" " 0,0")
31132
+ (match_operand:SI 2 "rx_compare_operand" " r,Q"))
31133
+ (geu:SI (reg:CC CC_REG) (const_int 0))))
31134
+ (set (reg CC_REG)
31137
+ (minus:SI (match_dup 1) (match_dup 2))
31138
+ (geu:SI (reg:CC CC_REG) (const_int 0)))
31140
+ "reload_completed"
31142
+ [(set_attr "timings" "11,33")
31143
+ (set_attr "length" "3,6")]
31146
+(define_expand "subdi3"
31147
+ [(set (match_operand:DI 0 "register_operand")
31148
+ (minus:DI (match_operand:DI 1 "register_operand")
31149
+ (match_operand:DI 2 "rx_compare_operand")))]
31152
+ rtx op0l, op0h, op1l, op1h, op2l, op2h;
31154
+ op0l = gen_lowpart (SImode, operands[0]);
31155
+ op1l = gen_lowpart (SImode, operands[1]);
31156
+ op2l = gen_lowpart (SImode, operands[2]);
31157
+ op0h = gen_highpart (SImode, operands[0]);
31158
+ op1h = gen_highpart (SImode, operands[1]);
31159
+ op2h = gen_highpart_mode (SImode, DImode, operands[2]);
31161
+ emit_insn (gen_subdi3_internal (op0l, op0h, op1l, op2l, op1h, op2h));
31165
+(define_insn_and_split "subdi3_internal"
31166
+ [(set (match_operand:SI 0 "register_operand" "=&r,&r")
31167
+ (minus:SI (match_operand:SI 2 "register_operand" " 0, r")
31168
+ (match_operand:SI 3 "rx_compare_operand" "rQ, r")))
31169
+ (set (match_operand:SI 1 "register_operand" "= r, r")
31172
+ (match_operand:SI 4 "register_operand" " 1, 1")
31173
+ (match_operand:SI 5 "rx_compare_operand" " rQ,rQ"))
31174
+ (geu:SI (match_dup 2) (match_dup 3))))
31175
+ (clobber (reg:CC CC_REG))]
31178
+ "reload_completed"
31181
+ emit_insn (gen_subsi3_flags (operands[0], operands[2], operands[3]));
31182
+ emit_insn (gen_sbb_internal (operands[1], operands[4], operands[5]));
31186
(define_insn "xorsi3"
31187
[(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r")
31188
(xor:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0")
31189
(match_operand:SI 2 "rx_source_operand"
31190
"r,Sint08,Sint16,Sint24,i,Q")))
31191
- (set (reg:CC_ZS CC_REG)
31192
- (compare:CC_ZS (xor:SI (match_dup 1) (match_dup 2))
31194
+ (clobber (reg:CC CC_REG))]
31197
[(set_attr "timings" "11,11,11,11,11,33")
31198
(set_attr "length" "3,4,5,6,7,6")]
31201
+(define_insn "*xorsi3_flags"
31202
+ [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r")
31203
+ (xor:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0")
31204
+ (match_operand:SI 2 "rx_source_operand"
31205
+ "r,Sint08,Sint16,Sint24,i,Q")))
31206
+ (set (reg CC_REG)
31207
+ (compare (xor:SI (match_dup 1) (match_dup 2))
31209
+ "reload_completed && rx_match_ccmode (insn, CC_ZSmode)"
31211
+ [(set_attr "timings" "11,11,11,11,11,33")
31212
+ (set_attr "length" "3,4,5,6,7,6")]
31215
+;; A set of peepholes to catch extending loads followed by arithmetic operations.
31216
+;; We use iterators where possible to reduce the amount of typing and hence the
31217
+;; possibilities for typos.
31219
+(define_code_iterator extend_types [(zero_extend "") (sign_extend "")])
31220
+(define_code_attr letter [(zero_extend "R") (sign_extend "Q")])
31222
+(define_code_iterator memex_commutative [(plus "") (and "") (ior "") (xor "")])
31223
+(define_code_iterator memex_noncomm [(div "") (udiv "") (minus "")])
31224
+(define_code_iterator memex_nocc [(smax "") (smin "") (mult "")])
31226
+(define_code_attr op [(plus "add") (and "and") (div "div") (udiv "divu") (smax "max") (smin "min") (mult "mul") (ior "or") (minus "sub") (xor "xor")])
31229
+ [(set (match_operand:SI 0 "register_operand")
31230
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
31231
+ (parallel [(set (match_operand:SI 2 "register_operand")
31232
+ (memex_commutative:SI (match_dup 0)
31234
+ (clobber (reg:CC CC_REG))])]
31235
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
31236
+ [(parallel [(set:SI (match_dup 2)
31237
+ (memex_commutative:SI (match_dup 2)
31238
+ (extend_types:SI (match_dup 1))))
31239
+ (clobber (reg:CC CC_REG))])]
31243
+ [(set (match_operand:SI 0 "register_operand")
31244
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
31245
+ (parallel [(set (match_operand:SI 2 "register_operand")
31246
+ (memex_commutative:SI (match_dup 2)
31248
+ (clobber (reg:CC CC_REG))])]
31249
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
31250
+ [(parallel [(set:SI (match_dup 2)
31251
+ (memex_commutative:SI (match_dup 2)
31252
+ (extend_types:SI (match_dup 1))))
31253
+ (clobber (reg:CC CC_REG))])]
31257
+ [(set (match_operand:SI 0 "register_operand")
31258
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
31259
+ (parallel [(set (match_operand:SI 2 "register_operand")
31260
+ (memex_noncomm:SI (match_dup 2)
31262
+ (clobber (reg:CC CC_REG))])]
31263
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
31264
+ [(parallel [(set:SI (match_dup 2)
31265
+ (memex_noncomm:SI (match_dup 2)
31266
+ (extend_types:SI (match_dup 1))))
31267
+ (clobber (reg:CC CC_REG))])]
31271
+ [(set (match_operand:SI 0 "register_operand")
31272
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
31273
+ (set (match_operand:SI 2 "register_operand")
31274
+ (memex_nocc:SI (match_dup 0)
31276
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
31277
+ [(set:SI (match_dup 2)
31278
+ (memex_nocc:SI (match_dup 2)
31279
+ (extend_types:SI (match_dup 1))))]
31283
+ [(set (match_operand:SI 0 "register_operand")
31284
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
31285
+ (set (match_operand:SI 2 "register_operand")
31286
+ (memex_nocc:SI (match_dup 2)
31288
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
31289
+ [(set:SI (match_dup 2)
31290
+ (memex_nocc:SI (match_dup 2)
31291
+ (extend_types:SI (match_dup 1))))]
31294
+(define_insn "*<memex_commutative:code>si3_<extend_types:code><small_int_modes:mode>"
31295
+ [(set (match_operand:SI 0 "register_operand" "=r")
31296
+ (memex_commutative:SI (match_operand:SI 1 "register_operand" "%0")
31297
+ (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
31298
+ (clobber (reg:CC CC_REG))]
31300
+ "<memex_commutative:op>\t%<extend_types:letter>2, %0"
31301
+ [(set_attr "timings" "33")
31302
+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
31303
+) ;; rather than using iterators we could specify exact sizes.
31305
+(define_insn "*<memex_noncomm:code>si3_<extend_types:code><small_int_modes:mode>"
31306
+ [(set (match_operand:SI 0 "register_operand" "=r")
31307
+ (memex_noncomm:SI (match_operand:SI 1 "register_operand" "0")
31308
+ (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
31309
+ (clobber (reg:CC CC_REG))]
31311
+ "<memex_noncomm:op>\t%<extend_types:letter>2, %0"
31312
+ [(set_attr "timings" "33")
31313
+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
31314
+) ;; rather than using iterators we could specify exact sizes.
31316
+(define_insn "*<memex_nocc:code>si3_<extend_types:code><small_int_modes:mode>"
31317
+ [(set (match_operand:SI 0 "register_operand" "=r")
31318
+ (memex_nocc:SI (match_operand:SI 1 "register_operand" "%0")
31319
+ (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))]
31321
+ "<memex_nocc:op>\t%<extend_types:letter>2, %0"
31322
+ [(set_attr "timings" "33")
31323
+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
31324
+) ;; rather than using iterators we could specify exact sizes.
31327
+ [(set (match_operand:SI 0 "register_operand")
31328
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
31329
+ (set (reg:CC CC_REG)
31330
+ (compare:CC (match_operand:SI 2 "register_operand")
31332
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
31333
+ [(set (reg:CC CC_REG)
31334
+ (compare:CC (match_dup 2)
31335
+ (extend_types:SI (match_dup 1))))]
31338
+(define_insn "*comparesi3_<extend_types:code><small_int_modes:mode>"
31339
+ [(set (reg:CC CC_REG)
31340
+ (compare:CC (match_operand:SI 0 "register_operand" "=r")
31341
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand" "Q"))))]
31343
+ "cmp\t%<extend_types:letter>1, %0"
31344
+ [(set_attr "timings" "33")
31345
+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
31346
+) ;; rather than using iterators we could specify exact sizes.
31348
;; Floating Point Instructions
31350
@@ -1169,9 +1685,7 @@
31351
[(set (match_operand:SF 0 "register_operand" "=r,r,r")
31352
(plus:SF (match_operand:SF 1 "register_operand" "%0,0,0")
31353
(match_operand:SF 2 "rx_source_operand" "r,F,Q")))
31354
- (set (reg:CC_ZS CC_REG)
31355
- (compare:CC_ZS (plus:SF (match_dup 1) (match_dup 2))
31357
+ (clobber (reg:CC CC_REG))]
31358
"ALLOW_RX_FPU_INSNS"
31360
[(set_attr "timings" "44,44,66")
31361
@@ -1182,9 +1696,7 @@
31362
[(set (match_operand:SF 0 "register_operand" "=r,r,r")
31363
(div:SF (match_operand:SF 1 "register_operand" "0,0,0")
31364
(match_operand:SF 2 "rx_source_operand" "r,F,Q")))
31365
- (set (reg:CC_ZS CC_REG)
31366
- (compare:CC_ZS (div:SF (match_dup 1) (match_dup 2))
31368
+ (clobber (reg:CC CC_REG))]
31369
"ALLOW_RX_FPU_INSNS"
31371
[(set_attr "timings" "1616,1616,1818")
31372
@@ -1195,9 +1707,7 @@
31373
[(set (match_operand:SF 0 "register_operand" "=r,r,r")
31374
(mult:SF (match_operand:SF 1 "register_operand" "%0,0,0")
31375
(match_operand:SF 2 "rx_source_operand" "r,F,Q")))
31376
- (set (reg:CC_ZS CC_REG)
31377
- (compare:CC_ZS (mult:SF (match_dup 1) (match_dup 2))
31379
+ (clobber (reg:CC CC_REG))]
31380
"ALLOW_RX_FPU_INSNS"
31382
[(set_attr "timings" "33,33,55")
31383
@@ -1208,9 +1718,7 @@
31384
[(set (match_operand:SF 0 "register_operand" "=r,r,r")
31385
(minus:SF (match_operand:SF 1 "register_operand" "0,0,0")
31386
(match_operand:SF 2 "rx_source_operand" "r,F,Q")))
31387
- (set (reg:CC_ZS CC_REG)
31388
- (compare:CC_ZS (minus:SF (match_dup 1) (match_dup 2))
31390
+ (clobber (reg:CC CC_REG))]
31391
"ALLOW_RX_FPU_INSNS"
31393
[(set_attr "timings" "44,44,66")
31394
@@ -1220,9 +1728,7 @@
31395
(define_insn "fix_truncsfsi2"
31396
[(set (match_operand:SI 0 "register_operand" "=r,r")
31397
(fix:SI (match_operand:SF 1 "rx_compare_operand" "r,Q")))
31398
- (set (reg:CC_ZS CC_REG)
31399
- (compare:CC_ZS (fix:SI (match_dup 1))
31401
+ (clobber (reg:CC CC_REG))]
31402
"ALLOW_RX_FPU_INSNS"
31404
[(set_attr "timings" "22,44")
31405
@@ -1232,9 +1738,7 @@
31406
(define_insn "floatsisf2"
31407
[(set (match_operand:SF 0 "register_operand" "=r,r")
31408
(float:SF (match_operand:SI 1 "rx_compare_operand" "r,Q")))
31409
- (set (reg:CC_ZS CC_REG)
31410
- (compare:CC_ZS (float:SF (match_dup 1))
31412
+ (clobber (reg:CC CC_REG))]
31413
"ALLOW_RX_FPU_INSNS"
31415
[(set_attr "timings" "22,44")
31416
@@ -1242,217 +1746,216 @@
31419
;; Bit manipulation instructions.
31420
-;; Note - there are two versions of each pattern because the memory
31421
-;; accessing versions use QImode whilst the register accessing
31422
-;; versions use SImode.
31423
-;; The peephole are here because the combiner only looks at a maximum
31424
-;; of three instructions at a time.
31426
-(define_insn "bitset"
31427
- [(set:SI (match_operand:SI 0 "register_operand" "=r")
31428
- (ior:SI (match_operand:SI 1 "register_operand" "0")
31429
- (ashift:SI (const_int 1)
31430
- (match_operand:SI 2 "nonmemory_operand" "ri"))))]
31431
+;; ??? The *_in_memory patterns will not be matched without further help.
31432
+;; At one time we had the insv expander generate them, but I suspect that
31433
+;; in general we get better performance by exposing the register load to
31434
+;; the optimizers.
31436
+;; An alternate solution would be to re-organize these patterns such
31437
+;; that allow both register and memory operands. This would allow the
31438
+;; register allocator to spill and not load the register operand. This
31439
+;; would be possible only for operations for which we have a constant
31440
+;; bit offset, so that we can adjust the address by ofs/8 and replace
31441
+;; the offset in the insn by ofs%8.
31443
+(define_insn "*bitset"
31444
+ [(set (match_operand:SI 0 "register_operand" "=r")
31445
+ (ior:SI (ashift:SI (const_int 1)
31446
+ (match_operand:SI 1 "rx_shift_operand" "ri"))
31447
+ (match_operand:SI 2 "register_operand" "0")))]
31451
[(set_attr "length" "3")]
31454
-(define_insn "bitset_in_memory"
31455
- [(set:QI (match_operand:QI 0 "memory_operand" "=m")
31456
- (ior:QI (match_operand:QI 1 "memory_operand" "0")
31457
- (ashift:QI (const_int 1)
31458
- (match_operand:QI 2 "nonmemory_operand" "ri"))))]
31459
+(define_insn "*bitset_in_memory"
31460
+ [(set (match_operand:QI 0 "memory_operand" "+Q")
31461
+ (ior:QI (ashift:QI (const_int 1)
31462
+ (match_operand:QI 1 "nonmemory_operand" "ri"))
31467
[(set_attr "length" "3")
31468
- (set_attr "timings" "34")]
31469
+ (set_attr "timings" "33")]
31472
-;; (set (reg A) (const_int 1))
31473
-;; (set (reg A) (ashift (reg A) (reg B)))
31474
-;; (set (reg C) (ior (reg A) (reg C)))
31476
- [(set:SI (match_operand:SI 0 "register_operand" "")
31478
- (set:SI (match_dup 0)
31479
- (ashift:SI (match_dup 0)
31480
- (match_operand:SI 1 "register_operand" "")))
31481
- (set:SI (match_operand:SI 2 "register_operand" "")
31482
- (ior:SI (match_dup 0)
31484
- "dead_or_set_p (insn, operands[0])"
31485
- [(set:SI (match_dup 2)
31486
- (ior:SI (match_dup 2)
31487
- (ashift:SI (const_int 1)
31488
- (match_dup 1))))]
31491
-;; (set (reg A) (const_int 1))
31492
-;; (set (reg A) (ashift (reg A) (reg B)))
31493
-;; (set (reg A) (ior (reg A) (reg C)))
31494
-;; (set (reg C) (reg A)
31496
- [(set:SI (match_operand:SI 0 "register_operand" "")
31498
- (set:SI (match_dup 0)
31499
- (ashift:SI (match_dup 0)
31500
- (match_operand:SI 1 "register_operand" "")))
31501
- (set:SI (match_dup 0)
31502
- (ior:SI (match_dup 0)
31503
- (match_operand:SI 2 "register_operand" "")))
31504
- (set:SI (match_dup 2) (match_dup 0))]
31505
- "dead_or_set_p (insn, operands[0])"
31506
- [(set:SI (match_dup 2)
31507
- (ior:SI (match_dup 2)
31508
- (ashift:SI (const_int 1)
31509
- (match_dup 1))))]
31512
-(define_insn "bitinvert"
31513
- [(set:SI (match_operand:SI 0 "register_operand" "+r")
31514
- (xor:SI (match_operand:SI 1 "register_operand" "0")
31515
- (ashift:SI (const_int 1)
31516
- (match_operand:SI 2 "nonmemory_operand" "ri"))))]
31517
+(define_insn "*bitinvert"
31518
+ [(set (match_operand:SI 0 "register_operand" "=r")
31519
+ (xor:SI (ashift:SI (const_int 1)
31520
+ (match_operand:SI 1 "rx_shift_operand" "ri"))
31521
+ (match_operand:SI 2 "register_operand" "0")))]
31525
[(set_attr "length" "3")]
31528
-(define_insn "bitinvert_in_memory"
31529
- [(set:QI (match_operand:QI 0 "memory_operand" "+m")
31530
- (xor:QI (match_operand:QI 1 "register_operand" "0")
31531
- (ashift:QI (const_int 1)
31532
- (match_operand:QI 2 "nonmemory_operand" "ri"))))]
31533
+(define_insn "*bitinvert_in_memory"
31534
+ [(set (match_operand:QI 0 "memory_operand" "+Q")
31535
+ (xor:QI (ashift:QI (const_int 1)
31536
+ (match_operand:QI 1 "nonmemory_operand" "ri"))
31541
[(set_attr "length" "5")
31542
(set_attr "timings" "33")]
31545
-;; (set (reg A) (const_int 1))
31546
-;; (set (reg A) (ashift (reg A) (reg B)))
31547
-;; (set (reg C) (xor (reg A) (reg C)))
31549
- [(set:SI (match_operand:SI 0 "register_operand" "")
31551
- (set:SI (match_dup 0)
31552
- (ashift:SI (match_dup 0)
31553
- (match_operand:SI 1 "register_operand" "")))
31554
- (set:SI (match_operand:SI 2 "register_operand" "")
31555
- (xor:SI (match_dup 0)
31557
- "dead_or_set_p (insn, operands[0])"
31558
- [(set:SI (match_dup 2)
31559
- (xor:SI (match_dup 2)
31560
- (ashift:SI (const_int 1)
31561
- (match_dup 1))))]
31562
+(define_insn "*bitclr"
31563
+ [(set (match_operand:SI 0 "register_operand" "=r")
31567
+ (match_operand:SI 1 "rx_shift_operand" "ri")))
31568
+ (match_operand:SI 2 "register_operand" "0")))]
31571
+ [(set_attr "length" "3")]
31574
-;; (set (reg A) (const_int 1))
31575
-;; (set (reg A) (ashift (reg A) (reg B)))
31576
-;; (set (reg A) (xor (reg A) (reg C)))
31577
-;; (set (reg C) (reg A))
31579
- [(set:SI (match_operand:SI 0 "register_operand" "")
31581
- (set:SI (match_dup 0)
31582
- (ashift:SI (match_dup 0)
31583
- (match_operand:SI 1 "register_operand" "")))
31584
- (set:SI (match_dup 0)
31585
- (xor:SI (match_dup 0)
31586
- (match_operand:SI 2 "register_operand" "")))
31587
- (set:SI (match_dup 2) (match_dup 0))]
31588
- "dead_or_set_p (insn, operands[0])"
31589
- [(set:SI (match_dup 2)
31590
- (xor:SI (match_dup 2)
31591
- (ashift:SI (const_int 1)
31592
- (match_dup 1))))]
31594
+(define_insn "*bitclr_in_memory"
31595
+ [(set (match_operand:QI 0 "memory_operand" "+Q")
31599
+ (match_operand:QI 1 "nonmemory_operand" "ri")))
31603
+ [(set_attr "length" "3")
31604
+ (set_attr "timings" "33")]
31607
-(define_insn "bitclr"
31608
- [(set:SI (match_operand:SI 0 "register_operand" "+r")
31609
- (and:SI (match_operand:SI 1 "register_operand" "0")
31610
- (not:SI (ashift:SI (const_int 1)
31611
- (match_operand:SI 2 "nonmemory_operand" "ri")))))]
31614
+(define_insn "*insv_imm"
31615
+ [(set (zero_extract:SI
31616
+ (match_operand:SI 0 "register_operand" "+r")
31618
+ (match_operand:SI 1 "rx_shift_operand" "ri"))
31619
+ (match_operand:SI 2 "const_int_operand" ""))]
31622
+ if (INTVAL (operands[2]) & 1)
31623
+ return "bset\t%1, %0";
31625
+ return "bclr\t%1, %0";
31627
[(set_attr "length" "3")]
31630
-(define_insn "bitclr_in_memory"
31631
- [(set:QI (match_operand:QI 0 "memory_operand" "+m")
31632
- (and:QI (match_operand:QI 1 "memory_operand" "0")
31633
- (not:QI (ashift:QI (const_int 1)
31634
- (match_operand:QI 2 "nonmemory_operand" "ri")))))]
31635
+(define_insn_and_split "rx_insv_reg"
31636
+ [(set (zero_extract:SI
31637
+ (match_operand:SI 0 "register_operand" "+r")
31639
+ (match_operand:SI 1 "const_int_operand" ""))
31640
+ (match_operand:SI 2 "register_operand" "r"))
31641
+ (clobber (reg:CC CC_REG))]
31644
- [(set_attr "length" "3")
31645
- (set_attr "timings" "34")]
31647
+ "reload_completed"
31648
+ [(set (zero_extract:SI (match_dup 0) (const_int 1) (match_dup 1))
31653
+ /* Emit tst #1, op2. */
31654
+ flags = gen_rtx_REG (CC_ZSmode, CC_REG);
31655
+ x = gen_rtx_AND (SImode, operands[2], const1_rtx);
31656
+ x = gen_rtx_COMPARE (CC_ZSmode, x, const0_rtx);
31657
+ x = gen_rtx_SET (VOIDmode, flags, x);
31661
+ operands[3] = gen_rtx_NE (SImode, flags, const0_rtx);
31664
+(define_insn_and_split "*insv_cond"
31665
+ [(set (zero_extract:SI
31666
+ (match_operand:SI 0 "register_operand" "+r")
31668
+ (match_operand:SI 1 "const_int_operand" ""))
31669
+ (match_operator:SI 4 "comparison_operator"
31670
+ [(match_operand:SI 2 "register_operand" "r")
31671
+ (match_operand:SI 3 "rx_source_operand" "riQ")]))
31672
+ (clobber (reg:CC CC_REG))]
31675
+ "reload_completed"
31676
+ [(set (zero_extract:SI (match_dup 0) (const_int 1) (match_dup 1))
31681
+ flags = gen_rtx_REG (CCmode, CC_REG);
31682
+ x = gen_rtx_COMPARE (CCmode, operands[2], operands[3]);
31683
+ x = gen_rtx_SET (VOIDmode, flags, x);
31686
+ operands[4] = gen_rtx_fmt_ee (GET_CODE (operands[4]), SImode,
31687
+ flags, const0_rtx);
31690
+(define_insn "*bmcc"
31691
+ [(set (zero_extract:SI
31692
+ (match_operand:SI 0 "register_operand" "+r")
31694
+ (match_operand:SI 1 "const_int_operand" ""))
31695
+ (match_operator:SI 2 "comparison_operator"
31696
+ [(reg CC_REG) (const_int 0)]))]
31697
+ "reload_completed"
31699
+ [(set_attr "length" "3")]
31702
-;; (set (reg A) (const_int -2))
31703
-;; (set (reg A) (rotate (reg A) (reg B)))
31704
-;; (set (reg C) (and (reg A) (reg C)))
31706
- [(set:SI (match_operand:SI 0 "register_operand" "")
31708
- (set:SI (match_dup 0)
31709
- (rotate:SI (match_dup 0)
31710
- (match_operand:SI 1 "register_operand" "")))
31711
- (set:SI (match_operand:SI 2 "register_operand" "")
31712
- (and:SI (match_dup 0)
31714
- "dead_or_set_p (insn, operands[0])"
31715
- [(set:SI (match_dup 2)
31716
- (and:SI (match_dup 2)
31717
- (not:SI (ashift:SI (const_int 1)
31718
- (match_dup 1)))))]
31721
-;; (set (reg A) (const_int -2))
31722
-;; (set (reg A) (rotate (reg A) (reg B)))
31723
-;; (set (reg A) (and (reg A) (reg C)))
31724
-;; (set (reg C) (reg A)
31726
- [(set:SI (match_operand:SI 0 "register_operand" "")
31728
- (set:SI (match_dup 0)
31729
- (rotate:SI (match_dup 0)
31730
- (match_operand:SI 1 "register_operand" "")))
31731
- (set:SI (match_dup 0)
31732
- (and:SI (match_dup 0)
31733
- (match_operand:SI 2 "register_operand" "")))
31734
- (set:SI (match_dup 2) (match_dup 0))]
31735
- "dead_or_set_p (insn, operands[0])"
31736
- [(set:SI (match_dup 2)
31737
- (and:SI (match_dup 2)
31738
- (not:SI (ashift:SI (const_int 1)
31739
- (match_dup 1)))))]
31740
+;; Work around the fact that X=Y<0 is preferentially expanded as a shift.
31741
+(define_insn_and_split "*insv_cond_lt"
31742
+ [(set (zero_extract:SI
31743
+ (match_operand:SI 0 "register_operand" "+r")
31745
+ (match_operand:SI 1 "const_int_operand" ""))
31746
+ (match_operator:SI 3 "rshift_operator"
31747
+ [(match_operand:SI 2 "register_operand" "r")
31748
+ (const_int 31)]))
31749
+ (clobber (reg:CC CC_REG))]
31753
+ [(parallel [(set (zero_extract:SI (match_dup 0) (const_int 1) (match_dup 1))
31754
+ (lt:SI (match_dup 2) (const_int 0)))
31755
+ (clobber (reg:CC CC_REG))])]
31759
(define_expand "insv"
31760
- [(set:SI (zero_extract:SI (match_operand:SI 0 "nonimmediate_operand") ;; Destination
31761
- (match_operand 1 "immediate_operand") ;; # of bits to set
31762
- (match_operand 2 "immediate_operand")) ;; Starting bit
31763
- (match_operand 3 "immediate_operand"))] ;; Bits to insert
31766
- if (rx_expand_insv (operands))
31767
+ [(set (zero_extract:SI
31768
+ (match_operand:SI 0 "register_operand") ;; Destination
31769
+ (match_operand:SI 1 "const_int_operand") ;; # of bits to set
31770
+ (match_operand:SI 2 "nonmemory_operand")) ;; Starting bit
31771
+ (match_operand:SI 3 "nonmemory_operand"))] ;; Bits to insert
31774
+ /* We only handle single-bit inserts. */
31775
+ if (!CONST_INT_P (operands[1]) || INTVAL (operands[1]) != 1)
31778
+ /* Either the bit to insert or the position must be constant. */
31779
+ if (CONST_INT_P (operands[3]))
31780
+ operands[3] = GEN_INT (INTVAL (operands[3]) & 1);
31781
+ else if (CONST_INT_P (operands[2]))
31783
+ emit_insn (gen_rx_insv_reg (operands[0], operands[2], operands[3]));
31792
;; Atomic exchange operation.
31794
(define_insn "sync_lock_test_and_setsi"
31795
- [(set:SI (match_operand:SI 0 "register_operand" "=r,r")
31796
- (match_operand:SI 1 "rx_compare_operand" "=r,Q"))
31797
- (set:SI (match_dup 1)
31798
- (match_operand:SI 2 "register_operand" "0,0"))]
31799
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
31800
+ (match_operand:SI 1 "rx_compare_operand" "=r,Q"))
31801
+ (set (match_dup 1)
31802
+ (match_operand:SI 2 "register_operand" "0,0"))]
31805
[(set_attr "length" "3,6")
31806
@@ -1462,9 +1965,9 @@
31807
;; Block move functions.
31809
(define_expand "movstr"
31810
- [(set:SI (match_operand:BLK 1 "memory_operand") ;; Dest
31811
- (match_operand:BLK 2 "memory_operand")) ;; Source
31812
- (use (match_operand:SI 0 "register_operand")) ;; Updated Dest
31813
+ [(set (match_operand:BLK 1 "memory_operand") ;; Dest
31814
+ (match_operand:BLK 2 "memory_operand")) ;; Source
31815
+ (use (match_operand:SI 0 "register_operand")) ;; Updated Dest
31819
@@ -1487,8 +1990,8 @@
31822
(define_insn "rx_movstr"
31823
- [(set:SI (mem:BLK (reg:SI 1))
31824
- (mem:BLK (reg:SI 2)))
31825
+ [(set (mem:BLK (reg:SI 1))
31826
+ (mem:BLK (reg:SI 2)))
31827
(unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_MOVSTR)
31828
(clobber (reg:SI 1))
31829
(clobber (reg:SI 2))
31830
@@ -1500,8 +2003,8 @@
31833
(define_insn "rx_strend"
31834
- [(set:SI (match_operand:SI 0 "register_operand" "=r")
31835
- (unspec_volatile:SI [(match_operand:SI 1 "register_operand" "r")
31836
+ [(set (match_operand:SI 0 "register_operand" "=r")
31837
+ (unspec_volatile:SI [(match_operand:SI 1 "register_operand" "r")
31838
(reg:SI 3)] UNSPEC_STRLEN))
31839
(clobber (reg:SI 1))
31840
(clobber (reg:SI 2))
31841
@@ -1582,8 +2085,8 @@
31844
(define_insn "rx_setmem"
31845
- [(set:BLK (mem:BLK (reg:SI 1)) (reg 2))
31846
- (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_SETMEM)
31847
+ [(set (mem:BLK (reg:SI 1))
31848
+ (unspec_volatile:BLK [(reg:SI 1) (reg:SI 2) (reg:SI 3)] UNSPEC_SETMEM))
31849
(clobber (reg:SI 1))
31850
(clobber (reg:SI 3))]
31852
@@ -1636,11 +2139,11 @@
31855
(define_insn "rx_cmpstrn"
31856
- [(set:SI (match_operand:SI 0 "register_operand" "=r")
31857
- (unspec_volatile:SI [(reg:SI 1) (reg:SI 2) (reg:SI 3)]
31859
- (use (match_operand:BLK 1 "memory_operand" "m"))
31860
- (use (match_operand:BLK 2 "memory_operand" "m"))
31861
+ [(set (match_operand:SI 0 "register_operand" "=r")
31862
+ (unspec_volatile:SI [(reg:SI 1) (reg:SI 2) (reg:SI 3)]
31864
+ (use (match_operand:BLK 1 "memory_operand" "m"))
31865
+ (use (match_operand:BLK 2 "memory_operand" "m"))
31866
(clobber (reg:SI 1))
31867
(clobber (reg:SI 2))
31868
(clobber (reg:SI 3))
31869
@@ -1773,7 +2276,7 @@
31871
;; Byte swap (two 16-bit values).
31872
(define_insn "revw"
31873
- [(set (match_operand:SI 0 "register_operand" "+r")
31874
+ [(set (match_operand:SI 0 "register_operand" "=r")
31875
(unspec:SI [(match_operand:SI 1 "register_operand" "r")]
31876
UNSPEC_BUILTIN_REVW))]
31878
@@ -1807,7 +2310,7 @@
31880
;; Clear Processor Status Word
31881
(define_insn "clrpsw"
31882
- [(unspec:SI [(match_operand:SI 0 "immediate_operand" "i")]
31883
+ [(unspec_volatile:SI [(match_operand:SI 0 "immediate_operand" "i")]
31884
UNSPEC_BUILTIN_CLRPSW)
31885
(clobber (reg:CC CC_REG))]
31887
@@ -1817,7 +2320,7 @@
31889
;; Set Processor Status Word
31890
(define_insn "setpsw"
31891
- [(unspec:SI [(match_operand:SI 0 "immediate_operand" "i")]
31892
+ [(unspec_volatile:SI [(match_operand:SI 0 "immediate_operand" "i")]
31893
UNSPEC_BUILTIN_SETPSW)
31894
(clobber (reg:CC CC_REG))]
31896
@@ -1828,7 +2331,7 @@
31897
;; Move from control register
31898
(define_insn "mvfc"
31899
[(set (match_operand:SI 0 "register_operand" "=r")
31900
- (unspec:SI [(match_operand:SI 1 "immediate_operand" "i")]
31901
+ (unspec_volatile:SI [(match_operand:SI 1 "immediate_operand" "i")]
31902
UNSPEC_BUILTIN_MVFC))]
31905
@@ -1837,7 +2340,7 @@
31907
;; Move to control register
31908
(define_insn "mvtc"
31909
- [(unspec:SI [(match_operand:SI 0 "immediate_operand" "i,i")
31910
+ [(unspec_volatile:SI [(match_operand:SI 0 "immediate_operand" "i,i")
31911
(match_operand:SI 1 "nonmemory_operand" "r,i")]
31912
UNSPEC_BUILTIN_MVTC)]
31914
@@ -1852,7 +2355,7 @@
31916
;; Move to interrupt priority level
31917
(define_insn "mvtipl"
31918
- [(unspec:SI [(match_operand:SI 0 "immediate_operand" "Uint04")]
31919
+ [(unspec_volatile:SI [(match_operand:SI 0 "immediate_operand" "Uint04")]
31920
UNSPEC_BUILTIN_MVTIPL)]
31923
27198
--- a/src/gcc/config/s390/s390.c
31924
27199
+++ b/src/gcc/config/s390/s390.c
31925
@@ -2830,12 +2830,16 @@
31926
it is most likely being used as an address, so
31927
prefer ADDR_REGS. If 'class' is not a superset
31928
of ADDR_REGS, e.g. FP_REGS, reject this reload. */
31933
+ if (!legitimate_reload_constant_p (op))
31935
+ /* fallthrough */
31937
+ /* load address will be used. */
31938
if (reg_class_subset_p (ADDR_REGS, rclass))
31939
- return ADDR_REGS;
31940
+ return ADDR_REGS;
31944
@@ -2951,12 +2955,16 @@
31948
+ HOST_WIDE_INT offset;
31951
/* On z10 several optimizer steps may generate larl operands with
31954
- && s390_symref_operand_p (x, NULL, NULL)
31955
+ && s390_symref_operand_p (x, &symref, &offset)
31957
- && !s390_check_symref_alignment (x, 2))
31958
+ && !SYMBOL_REF_ALIGN1_P (symref)
31959
+ && (offset & 1) == 1)
31960
sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z10
31961
: CODE_FOR_reloadsi_larl_odd_addend_z10);
31963
@@ -8170,7 +8178,7 @@
27200
@@ -8178,7 +8178,7 @@
31965
27202
p = rtvec_alloc (2);
35833
30307
/* Check for the possibility of merging component references. If our
35834
30308
lhs is another similar operation, try to merge its rhs with our
35835
30309
rhs. Then try to merge our lhs and rhs. */
35836
--- a/src/gcc/fortran/ChangeLog
35837
+++ b/src/gcc/fortran/ChangeLog
35839
+2011-04-05 Duncan Sands <baldrick@free.fr>
35841
+ * f95-lang.c (build_builtin_fntypes): Swap frexp and scalbn parameter
35844
+2011-03-13 Paul Thomas <pault@gcc.gnu.org>
35847
+ * trans-array.c (get_array_ctor_all_strlen): Move up in file.
35848
+ (get_array_ctor_var_strlen): Add block dummy and add call to
35849
+ get_array_ctor_all_strlen instead of giving up on substrings.
35850
+ Call gcc_unreachable for default case.
35851
+ (get_array_ctor_strlen): Add extra argument to in call to
35852
+ get_array_ctor_var_strlen.
35854
+2011-01-27 Tobias Burnus <burnus@net-b.de>
35856
+ Backport from mainline
35857
+ 2011-02-26 Tobias Burnus <burnus@net-b.de>
35860
+ * openmp.c (gfc_resolve_omp_directive): Resolve if()
35861
+ condition of OpenMP's task.
35863
+2011-02-19 Tobias Burnus
35866
+ * trans-expr.c (arrayfunc_assign_needs_temporary): Use
35867
+ esym to check whether the specific procedure returns an
35868
+ allocatable or pointer.
35870
+2011-02-14 Tobias Burnus <burnus@net-b.de>
35873
+ * interface.c (compare_parameter): Avoid ICE with
35874
+ character components.
35876
+2011-01-25 Tobias Burnus <burnus@net-b.de>
35878
+ Backport from mainline
35879
+ 2011-01-17 Jakub Jelinek <jakub@redhat.com>
35882
+ * gfortran.h (struct gfc_omp_saved_state): New type.
35883
+ (gfc_omp_save_and_clear_state, gfc_omp_restore_state): New prototypes.
35884
+ * resolve.c (resolve_global_procedure): Call it around gfc_resolve
35886
+ * openmp.c (gfc_omp_save_and_clear_state, gfc_omp_restore_state): New
35889
+2011-01-25 Tobias Burnus <burnus@net-b.de>
35892
+ * interface.c (gfc_check_operator_interface): Fix
35893
+ defined-assignment check.
35895
+2011-01-21 Tobias Burnus <burnus@net-b.de>
35898
+ * error.c (gfc_error_now, gfc_fatal_error, gfc_error_check):
35899
+ Use defined instead of magic number exit status codes.
35900
+ * scanner.c (include_line, gfc_new_file): Ditto.
35901
+ * gfortranspec.c (lang_specific_driver): Ditto.
35903
+2011-01-16 Jakub Jelinek <jakub@redhat.com>
35905
+ Backport from mainline
35906
+ 2010-12-14 Jakub Jelinek <jakub@redhat.com>
35909
+ * trans-openmp.c (gfc_trans_omp_array_reduction): Handle allocatable
35912
+2011-01-16 Thomas Koenig <tkoenig@gcc.gnu.org>
35914
+ Backport from trunk
35916
+ * symbol.c (gfc_symbols_could_alias): Strip gfc_ prefix,
35917
+ make static and move in front of its only caller, to ...
35918
+ * trans-array.c (symbols_could_alias): ... here.
35919
+ Pass information about pointer and target status as
35920
+ arguments. Allocatable arrays don't alias anything
35921
+ unless they have the POINTER attribute.
35922
+ (gfc_could_be_alias): Keep track of pointer and target
35923
+ status when following references. Also check if typespecs
35924
+ of components match those of other components or symbols.
35925
+ * gfortran.h: Remove prototype for gfc_symbols_could_alias.
35927
+2011-01-02 Thomas Koenig <tkoenig@gcc.gnu.org>
35929
+ Backport from mainline
35931
+ * resolve.c (resolve_operator): Mark function for user-defined
35932
+ operator as referenced.
35934
2010-12-16 Release Manager
35936
* GCC 4.5.2 released.
35937
--- a/src/gcc/fortran/error.c
35938
+++ b/src/gcc/fortran/error.c
35939
@@ -939,7 +939,7 @@
35942
if (flag_fatal_errors)
35944
+ exit (FATAL_EXIT_CODE);
35948
@@ -956,7 +956,7 @@
35949
error_print (_("Fatal Error:"), _(gmsgid), argp);
35953
+ exit (FATAL_EXIT_CODE);
35957
@@ -1019,7 +1019,7 @@
35958
gfc_increment_error_count();
35960
if (flag_fatal_errors)
35962
+ exit (FATAL_EXIT_CODE);
35966
--- a/src/gcc/fortran/f95-lang.c
35967
+++ b/src/gcc/fortran/f95-lang.c
35968
@@ -646,19 +646,20 @@
35969
/* type (*) (type, type) */
35970
tmp = tree_cons (NULL_TREE, type, tmp);
35971
fntype[1] = build_function_type (type, tmp);
35972
- /* type (*) (int, type) */
35973
+ /* type (*) (type, int) */
35974
tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
35975
tmp = tree_cons (NULL_TREE, type, tmp);
35976
fntype[2] = build_function_type (type, tmp);
35977
/* type (*) (void) */
35978
fntype[3] = build_function_type (type, void_list_node);
35979
/* type (*) (type, &int) */
35980
- tmp = tree_cons (NULL_TREE, type, void_list_node);
35981
- tmp = tree_cons (NULL_TREE, build_pointer_type (integer_type_node), tmp);
35982
+ tmp = tree_cons (NULL_TREE, build_pointer_type (integer_type_node),
35984
+ tmp = tree_cons (NULL_TREE, type, tmp);
35985
fntype[4] = build_function_type (type, tmp);
35986
/* type (*) (type, int) */
35987
- tmp = tree_cons (NULL_TREE, type, void_list_node);
35988
- tmp = tree_cons (NULL_TREE, integer_type_node, tmp);
35989
+ tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
35990
+ tmp = tree_cons (NULL_TREE, type, tmp);
35991
fntype[5] = build_function_type (type, tmp);
35994
--- a/src/gcc/fortran/gfortran.h
35995
+++ b/src/gcc/fortran/gfortran.h
35996
@@ -2483,8 +2483,6 @@
35997
int gfc_get_ha_symbol (const char *, gfc_symbol **);
35998
int gfc_get_ha_sym_tree (const char *, gfc_symtree **);
36000
-int gfc_symbols_could_alias (gfc_symbol *, gfc_symbol *);
36002
void gfc_undo_symbols (void);
36003
void gfc_commit_symbols (void);
36004
void gfc_commit_symbol (gfc_symbol *);
36005
@@ -2577,11 +2575,14 @@
36006
gfc_expr *gfc_get_parentheses (gfc_expr *);
36009
+struct gfc_omp_saved_state { void *ptrs[2]; int ints[1]; };
36010
void gfc_free_omp_clauses (gfc_omp_clauses *);
36011
void gfc_resolve_omp_directive (gfc_code *, gfc_namespace *);
36012
void gfc_resolve_do_iterator (gfc_code *, gfc_symbol *);
36013
void gfc_resolve_omp_parallel_blocks (gfc_code *, gfc_namespace *);
36014
void gfc_resolve_omp_do_blocks (gfc_code *, gfc_namespace *);
36015
+void gfc_omp_save_and_clear_state (struct gfc_omp_saved_state *);
36016
+void gfc_omp_restore_state (struct gfc_omp_saved_state *);
36019
void gfc_free_actual_arglist (gfc_actual_arglist *);
36020
--- a/src/gcc/fortran/gfortranspec.c
36021
+++ b/src/gcc/fortran/gfortranspec.c
36022
@@ -375,7 +375,7 @@
36023
You may redistribute copies of GNU Fortran\n\
36024
under the terms of the GNU General Public License.\n\
36025
For more information about these matters, see the file named COPYING\n\n"));
36027
+ exit (SUCCESS_EXIT_CODE);
36031
--- a/src/gcc/fortran/interface.c
36032
+++ b/src/gcc/fortran/interface.c
36033
@@ -624,11 +624,12 @@
36035
/* Allowed are (per F2003, 12.3.2.1.2 Defined assignments):
36036
- First argument an array with different rank than second,
36037
- - Types and kinds do not conform, and
36038
+ - First argument is a scalar and second an array,
36039
+ - Types and kinds do not conform, or
36040
- First argument is of derived type. */
36041
if (sym->formal->sym->ts.type != BT_DERIVED
36042
&& sym->formal->sym->ts.type != BT_CLASS
36043
- && (r1 == 0 || r1 == r2)
36044
+ && (r2 == 0 || r1 == r2)
36045
&& (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type
36046
|| (gfc_numeric_ts (&sym->formal->sym->ts)
36047
&& gfc_numeric_ts (&sym->formal->next->sym->ts))))
36048
@@ -1385,7 +1386,7 @@
36049
int ranks_must_agree, int is_elemental, locus *where)
36053
+ bool rank_check, is_pointer;
36055
/* If the formal arg has type BT_VOID, it's to one of the iso_c_binding
36056
procs c_f_pointer or c_f_procpointer, and we need to accept most
36057
@@ -1468,22 +1469,56 @@
36060
/* At this point, we are considering a scalar passed to an array. This
36061
- is valid (cf. F95 12.4.1.1; F2003 12.4.1.2),
36062
+ is valid (cf. F95 12.4.1.1, F2003 12.4.1.2, and F2008 12.5.2.4),
36063
- if the actual argument is (a substring of) an element of a
36064
- non-assumed-shape/non-pointer array;
36065
- - (F2003) if the actual argument is of type character. */
36066
+ non-assumed-shape/non-pointer/non-polymorphic array; or
36067
+ - (F2003) if the actual argument is of type character of default/c_char
36070
+ is_pointer = actual->expr_type == EXPR_VARIABLE
36071
+ ? actual->symtree->n.sym->attr.pointer : false;
36073
for (ref = actual->ref; ref; ref = ref->next)
36074
- if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT)
36077
+ if (ref->type == REF_COMPONENT)
36078
+ is_pointer = ref->u.c.component->attr.pointer;
36079
+ else if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT
36080
+ && ref->u.ar.dimen > 0
36082
+ || (ref->next->type == REF_SUBSTRING && !ref->next->next)))
36086
- /* Not an array element. */
36087
- if (formal->ts.type == BT_CHARACTER
36089
- || (actual->expr_type == EXPR_VARIABLE
36090
- && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
36091
- || actual->symtree->n.sym->attr.pointer))))
36092
+ if (actual->ts.type == BT_CLASS && actual->expr_type != EXPR_NULL)
36095
+ gfc_error ("Polymorphic scalar passed to array dummy argument '%s' "
36096
+ "at %L", formal->name, &actual->where);
36100
+ if (actual->expr_type != EXPR_NULL && ref && actual->ts.type != BT_CHARACTER
36101
+ && (is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
36104
+ gfc_error ("Element of assumed-shaped or pointer "
36105
+ "array passed to array dummy argument '%s' at %L",
36106
+ formal->name, &actual->where);
36110
+ if (actual->ts.type == BT_CHARACTER && actual->expr_type != EXPR_NULL
36111
+ && (!ref || is_pointer || ref->u.ar.as->type == AS_ASSUMED_SHAPE))
36113
+ if (formal->ts.kind != 1 && (gfc_option.allow_std & GFC_STD_GNU) == 0)
36116
+ gfc_error ("Extension: Scalar non-default-kind, non-C_CHAR-kind "
36117
+ "CHARACTER actual argument with array dummy argument "
36118
+ "'%s' at %L", formal->name, &actual->where);
36122
if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0)
36124
gfc_error ("Fortran 2003: Scalar CHARACTER actual argument with "
36125
@@ -1496,7 +1531,8 @@
36129
- else if (ref == NULL && actual->expr_type != EXPR_NULL)
36131
+ if (ref == NULL && actual->expr_type != EXPR_NULL)
36134
gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
36135
@@ -1505,17 +1541,6 @@
36139
- if (actual->expr_type == EXPR_VARIABLE
36140
- && actual->symtree->n.sym->as
36141
- && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE
36142
- || actual->symtree->n.sym->attr.pointer))
36145
- gfc_error ("Element of assumed-shaped array passed to dummy "
36146
- "argument '%s' at %L", formal->name, &actual->where);
36153
--- a/src/gcc/fortran/openmp.c
36154
+++ b/src/gcc/fortran/openmp.c
36155
@@ -1363,6 +1363,31 @@
36159
+/* Save and clear openmp.c private state. */
36162
+gfc_omp_save_and_clear_state (struct gfc_omp_saved_state *state)
36164
+ state->ptrs[0] = omp_current_ctx;
36165
+ state->ptrs[1] = omp_current_do_code;
36166
+ state->ints[0] = omp_current_do_collapse;
36167
+ omp_current_ctx = NULL;
36168
+ omp_current_do_code = NULL;
36169
+ omp_current_do_collapse = 0;
36173
+/* Restore openmp.c private state from the saved state. */
36176
+gfc_omp_restore_state (struct gfc_omp_saved_state *state)
36178
+ omp_current_ctx = (struct omp_context *) state->ptrs[0];
36179
+ omp_current_do_code = (gfc_code *) state->ptrs[1];
36180
+ omp_current_do_collapse = state->ints[0];
36184
/* Note a DO iterator variable. This is special in !$omp parallel
36185
construct, where they are predetermined private. */
36187
@@ -1521,6 +1546,7 @@
36188
case EXEC_OMP_PARALLEL_SECTIONS:
36189
case EXEC_OMP_SECTIONS:
36190
case EXEC_OMP_SINGLE:
36191
+ case EXEC_OMP_TASK:
36192
if (code->ext.omp_clauses)
36193
resolve_omp_clauses (code);
36195
--- a/src/gcc/fortran/resolve.c
36196
+++ b/src/gcc/fortran/resolve.c
36197
@@ -1810,11 +1810,14 @@
36198
if (!gsym->ns->resolved)
36200
gfc_dt_list *old_dt_list;
36201
+ struct gfc_omp_saved_state old_omp_state;
36203
/* Stash away derived types so that the backend_decls do not
36205
old_dt_list = gfc_derived_types;
36206
gfc_derived_types = NULL;
36207
+ /* And stash away openmp state. */
36208
+ gfc_omp_save_and_clear_state (&old_omp_state);
36210
gfc_resolve (gsym->ns);
36212
@@ -1824,6 +1827,8 @@
36214
/* Restore the derived types of this namespace. */
36215
gfc_derived_types = old_dt_list;
36216
+ /* And openmp state. */
36217
+ gfc_omp_restore_state (&old_omp_state);
36220
/* Make sure that translation for the gsymbol occurs before
36221
@@ -3577,9 +3582,12 @@
36222
sprintf (msg, _("Operand of user operator '%s' at %%L is %s"),
36223
e->value.op.uop->name, gfc_typename (&op1->ts));
36225
- sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"),
36226
- e->value.op.uop->name, gfc_typename (&op1->ts),
36227
- gfc_typename (&op2->ts));
36229
+ sprintf (msg, _("Operands of user operator '%s' at %%L are %s/%s"),
36230
+ e->value.op.uop->name, gfc_typename (&op1->ts),
36231
+ gfc_typename (&op2->ts));
36232
+ e->value.op.uop->op->sym->attr.referenced = 1;
36237
--- a/src/gcc/fortran/scanner.c
36238
+++ b/src/gcc/fortran/scanner.c
36239
@@ -1841,7 +1841,7 @@
36241
filename = gfc_widechar_to_char (begin, -1);
36242
if (load_file (filename, NULL, false) == FAILURE)
36244
+ exit (FATAL_EXIT_CODE);
36246
gfc_free (filename);
36248
@@ -2045,7 +2045,7 @@
36249
printf ("%s:%3d %s\n", LOCATION_FILE (line_head->location),
36250
LOCATION_LINE (line_head->location), line_head->line);
36253
+ exit (SUCCESS_EXIT_CODE);
36257
--- a/src/gcc/fortran/symbol.c
36258
+++ b/src/gcc/fortran/symbol.c
36259
@@ -2733,41 +2733,6 @@
36263
-/* Return true if both symbols could refer to the same data object. Does
36264
- not take account of aliasing due to equivalence statements. */
36267
-gfc_symbols_could_alias (gfc_symbol *lsym, gfc_symbol *rsym)
36269
- /* Aliasing isn't possible if the symbols have different base types. */
36270
- if (gfc_compare_types (&lsym->ts, &rsym->ts) == 0)
36273
- /* Pointers can point to other pointers, target objects and allocatable
36274
- objects. Two allocatable objects cannot share the same storage. */
36275
- if (lsym->attr.pointer
36276
- && (rsym->attr.pointer || rsym->attr.allocatable || rsym->attr.target))
36278
- if (lsym->attr.target && rsym->attr.pointer)
36280
- if (lsym->attr.allocatable && rsym->attr.pointer)
36283
- /* Special case: Argument association, cf. F90 12.4.1.6, F2003 12.4.1.7
36284
- and F2008 12.5.2.13 items 3b and 4b. The pointer case (a) is already
36285
- checked above. */
36286
- if (lsym->attr.target && rsym->attr.target
36287
- && ((lsym->attr.dummy
36288
- && (!lsym->attr.dimension || lsym->as->type == AS_ASSUMED_SHAPE))
36289
- || (rsym->attr.dummy
36290
- && (!rsym->attr.dimension
36291
- || rsym->as->type == AS_ASSUMED_SHAPE))))
36298
/* Undoes all the changes made to symbols in the current statement.
36299
This subroutine is made simpler due to the fact that attributes are
36300
never removed once added. */
36301
--- a/src/gcc/fortran/trans-array.c
36302
+++ b/src/gcc/fortran/trans-array.c
36303
@@ -1483,11 +1483,55 @@
36307
+/* A catch-all to obtain the string length for anything that is not a
36308
+ a substring of non-constant length, a constant, array or variable. */
36311
+get_array_ctor_all_strlen (stmtblock_t *block, gfc_expr *e, tree *len)
36316
+ /* Don't bother if we already know the length is a constant. */
36317
+ if (*len && INTEGER_CST_P (*len))
36320
+ if (!e->ref && e->ts.u.cl && e->ts.u.cl->length
36321
+ && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
36323
+ /* This is easy. */
36324
+ gfc_conv_const_charlen (e->ts.u.cl);
36325
+ *len = e->ts.u.cl->backend_decl;
36329
+ /* Otherwise, be brutal even if inefficient. */
36330
+ ss = gfc_walk_expr (e);
36331
+ gfc_init_se (&se, NULL);
36333
+ /* No function call, in case of side effects. */
36334
+ se.no_function_call = 1;
36335
+ if (ss == gfc_ss_terminator)
36336
+ gfc_conv_expr (&se, e);
36338
+ gfc_conv_expr_descriptor (&se, e, ss);
36340
+ /* Fix the value. */
36341
+ *len = gfc_evaluate_now (se.string_length, &se.pre);
36343
+ gfc_add_block_to_block (block, &se.pre);
36344
+ gfc_add_block_to_block (block, &se.post);
36346
+ e->ts.u.cl->backend_decl = *len;
36351
/* Figure out the string length of a variable reference expression.
36352
Used by get_array_ctor_strlen. */
36355
-get_array_ctor_var_strlen (gfc_expr * expr, tree * len)
36356
+get_array_ctor_var_strlen (stmtblock_t *block, gfc_expr * expr, tree * len)
36360
@@ -1514,7 +1558,11 @@
36361
case REF_SUBSTRING:
36362
if (ref->u.ss.start->expr_type != EXPR_CONSTANT
36363
|| ref->u.ss.end->expr_type != EXPR_CONSTANT)
36366
+ /* Note that this might evaluate expr. */
36367
+ get_array_ctor_all_strlen (block, expr, len);
36370
mpz_init_set_ui (char_len, 1);
36371
mpz_add (char_len, char_len, ref->u.ss.end->value.integer);
36372
mpz_sub (char_len, char_len, ref->u.ss.start->value.integer);
36373
@@ -1524,10 +1572,7 @@
36377
- /* TODO: Substrings are tricky because we can't evaluate the
36378
- expression more than once. For now we just give up, and hope
36379
- we can figure it out elsewhere. */
36381
+ gcc_unreachable ();
36385
@@ -1535,49 +1580,6 @@
36389
-/* A catch-all to obtain the string length for anything that is not a
36390
- constant, array or variable. */
36392
-get_array_ctor_all_strlen (stmtblock_t *block, gfc_expr *e, tree *len)
36397
- /* Don't bother if we already know the length is a constant. */
36398
- if (*len && INTEGER_CST_P (*len))
36401
- if (!e->ref && e->ts.u.cl && e->ts.u.cl->length
36402
- && e->ts.u.cl->length->expr_type == EXPR_CONSTANT)
36404
- /* This is easy. */
36405
- gfc_conv_const_charlen (e->ts.u.cl);
36406
- *len = e->ts.u.cl->backend_decl;
36410
- /* Otherwise, be brutal even if inefficient. */
36411
- ss = gfc_walk_expr (e);
36412
- gfc_init_se (&se, NULL);
36414
- /* No function call, in case of side effects. */
36415
- se.no_function_call = 1;
36416
- if (ss == gfc_ss_terminator)
36417
- gfc_conv_expr (&se, e);
36419
- gfc_conv_expr_descriptor (&se, e, ss);
36421
- /* Fix the value. */
36422
- *len = gfc_evaluate_now (se.string_length, &se.pre);
36424
- gfc_add_block_to_block (block, &se.pre);
36425
- gfc_add_block_to_block (block, &se.post);
36427
- e->ts.u.cl->backend_decl = *len;
36432
/* Figure out the string length of a character array constructor.
36433
If len is NULL, don't calculate the length; this happens for recursive calls
36434
when a sub-array-constructor is an element but not at the first position,
36435
@@ -1619,7 +1621,7 @@
36436
case EXPR_VARIABLE:
36439
- get_array_ctor_var_strlen (c->expr, len);
36440
+ get_array_ctor_var_strlen (block, c->expr, len);
36444
@@ -3389,6 +3391,37 @@
36448
+/* Return true if both symbols could refer to the same data object. Does
36449
+ not take account of aliasing due to equivalence statements. */
36452
+symbols_could_alias (gfc_symbol *lsym, gfc_symbol *rsym, bool lsym_pointer,
36453
+ bool lsym_target, bool rsym_pointer, bool rsym_target)
36455
+ /* Aliasing isn't possible if the symbols have different base types. */
36456
+ if (gfc_compare_types (&lsym->ts, &rsym->ts) == 0)
36459
+ /* Pointers can point to other pointers and target objects. */
36461
+ if ((lsym_pointer && (rsym_pointer || rsym_target))
36462
+ || (rsym_pointer && (lsym_pointer || lsym_target)))
36465
+ /* Special case: Argument association, cf. F90 12.4.1.6, F2003 12.4.1.7
36466
+ and F2008 12.5.2.13 items 3b and 4b. The pointer case (a) is already
36467
+ checked above. */
36468
+ if (lsym->attr.target && rsym->attr.target
36469
+ && ((lsym->attr.dummy
36470
+ && (!lsym->attr.dimension || lsym->as->type == AS_ASSUMED_SHAPE))
36471
+ || (rsym->attr.dummy
36472
+ && (!rsym->attr.dimension
36473
+ || rsym->as->type == AS_ASSUMED_SHAPE))))
36480
/* Return true if the two SS could be aliased, i.e. both point to the same data
36482
@@ -3401,10 +3434,18 @@
36486
+ bool lsym_pointer, lsym_target, rsym_pointer, rsym_target;
36488
lsym = lss->expr->symtree->n.sym;
36489
rsym = rss->expr->symtree->n.sym;
36490
- if (gfc_symbols_could_alias (lsym, rsym))
36492
+ lsym_pointer = lsym->attr.pointer;
36493
+ lsym_target = lsym->attr.target;
36494
+ rsym_pointer = rsym->attr.pointer;
36495
+ rsym_target = rsym->attr.target;
36497
+ if (symbols_could_alias (lsym, rsym, lsym_pointer, lsym_target,
36498
+ rsym_pointer, rsym_target))
36501
if (rsym->ts.type != BT_DERIVED
36502
@@ -3419,27 +3460,75 @@
36503
if (lref->type != REF_COMPONENT)
36506
- if (gfc_symbols_could_alias (lref->u.c.sym, rsym))
36507
+ lsym_pointer = lsym_pointer || lref->u.c.sym->attr.pointer;
36508
+ lsym_target = lsym_target || lref->u.c.sym->attr.target;
36510
+ if (symbols_could_alias (lref->u.c.sym, rsym, lsym_pointer, lsym_target,
36511
+ rsym_pointer, rsym_target))
36514
+ if ((lsym_pointer && (rsym_pointer || rsym_target))
36515
+ || (rsym_pointer && (lsym_pointer || lsym_target)))
36517
+ if (gfc_compare_types (&lref->u.c.component->ts,
36522
for (rref = rss->expr->ref; rref != rss->data.info.ref;
36525
if (rref->type != REF_COMPONENT)
36528
- if (gfc_symbols_could_alias (lref->u.c.sym, rref->u.c.sym))
36529
+ rsym_pointer = rsym_pointer || rref->u.c.sym->attr.pointer;
36530
+ rsym_target = lsym_target || rref->u.c.sym->attr.target;
36532
+ if (symbols_could_alias (lref->u.c.sym, rref->u.c.sym,
36533
+ lsym_pointer, lsym_target,
36534
+ rsym_pointer, rsym_target))
36537
+ if ((lsym_pointer && (rsym_pointer || rsym_target))
36538
+ || (rsym_pointer && (lsym_pointer || lsym_target)))
36540
+ if (gfc_compare_types (&lref->u.c.component->ts,
36541
+ &rref->u.c.sym->ts))
36543
+ if (gfc_compare_types (&lref->u.c.sym->ts,
36544
+ &rref->u.c.component->ts))
36546
+ if (gfc_compare_types (&lref->u.c.component->ts,
36547
+ &rref->u.c.component->ts))
36553
+ lsym_pointer = lsym->attr.pointer;
36554
+ lsym_target = lsym->attr.target;
36555
+ lsym_pointer = lsym->attr.pointer;
36556
+ lsym_target = lsym->attr.target;
36558
for (rref = rss->expr->ref; rref != rss->data.info.ref; rref = rref->next)
36560
if (rref->type != REF_COMPONENT)
36563
- if (gfc_symbols_could_alias (rref->u.c.sym, lsym))
36564
+ rsym_pointer = rsym_pointer || rref->u.c.sym->attr.pointer;
36565
+ rsym_target = lsym_target || rref->u.c.sym->attr.target;
36567
+ if (symbols_could_alias (rref->u.c.sym, lsym,
36568
+ lsym_pointer, lsym_target,
36569
+ rsym_pointer, rsym_target))
36572
+ if ((lsym_pointer && (rsym_pointer || rsym_target))
36573
+ || (rsym_pointer && (lsym_pointer || lsym_target)))
36575
+ if (gfc_compare_types (&lsym->ts, &rref->u.c.component->ts))
36581
--- a/src/gcc/fortran/trans-expr.c
36582
+++ b/src/gcc/fortran/trans-expr.c
36583
@@ -5051,9 +5051,13 @@
36584
if (gfc_ref_needs_temporary_p (expr1->ref))
36587
- /* Functions returning pointers need temporaries. */
36588
- if (expr2->symtree->n.sym->attr.pointer
36589
- || expr2->symtree->n.sym->attr.allocatable)
36590
+ /* Functions returning pointers or allocatables need temporaries. */
36591
+ c = expr2->value.function.esym
36592
+ ? (expr2->value.function.esym->attr.pointer
36593
+ || expr2->value.function.esym->attr.allocatable)
36594
+ : (expr2->symtree->n.sym->attr.pointer
36595
+ || expr2->symtree->n.sym->attr.allocatable);
36599
/* Character array functions need temporaries unless the
36600
--- a/src/gcc/fortran/trans-openmp.c
36601
+++ b/src/gcc/fortran/trans-openmp.c
36602
@@ -480,13 +480,23 @@
36603
gfc_symbol init_val_sym, outer_sym, intrinsic_sym;
36604
gfc_expr *e1, *e2, *e3, *e4;
36606
- tree decl, backend_decl, stmt;
36607
+ tree decl, backend_decl, stmt, type, outer_decl;
36608
locus old_loc = gfc_current_locus;
36612
decl = OMP_CLAUSE_DECL (c);
36613
gfc_current_locus = where;
36614
+ type = TREE_TYPE (decl);
36615
+ outer_decl = create_tmp_var_raw (type, NULL);
36616
+ if (TREE_CODE (decl) == PARM_DECL
36617
+ && TREE_CODE (type) == REFERENCE_TYPE
36618
+ && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (type))
36619
+ && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (type)) == GFC_ARRAY_ALLOCATABLE)
36621
+ decl = build_fold_indirect_ref (decl);
36622
+ type = TREE_TYPE (type);
36625
/* Create a fake symbol for init value. */
36626
memset (&init_val_sym, 0, sizeof (init_val_sym));
36627
@@ -505,7 +515,9 @@
36628
outer_sym.attr.dummy = 0;
36629
outer_sym.attr.result = 0;
36630
outer_sym.attr.flavor = FL_VARIABLE;
36631
- outer_sym.backend_decl = create_tmp_var_raw (TREE_TYPE (decl), NULL);
36632
+ outer_sym.backend_decl = outer_decl;
36633
+ if (decl != OMP_CLAUSE_DECL (c))
36634
+ outer_sym.backend_decl = build_fold_indirect_ref (outer_decl);
36636
/* Create fake symtrees for it. */
36637
symtree1 = gfc_new_symtree (&root1, sym->name);
36638
@@ -622,12 +634,12 @@
36640
/* Create the init statement list. */
36642
- if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))
36643
- && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (decl)) == GFC_ARRAY_ALLOCATABLE)
36644
+ if (GFC_DESCRIPTOR_TYPE_P (type)
36645
+ && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
36647
/* If decl is an allocatable array, it needs to be allocated
36648
with the same bounds as the outer var. */
36649
- tree type = TREE_TYPE (decl), rank, size, esize, ptr;
36650
+ tree rank, size, esize, ptr;
36653
gfc_start_block (&block);
36654
@@ -663,8 +675,8 @@
36656
/* Create the merge statement list. */
36658
- if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))
36659
- && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (decl)) == GFC_ARRAY_ALLOCATABLE)
36660
+ if (GFC_DESCRIPTOR_TYPE_P (type)
36661
+ && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
36663
/* If decl is an allocatable array, it needs to be deallocated
36665
@@ -684,7 +696,7 @@
36666
OMP_CLAUSE_REDUCTION_MERGE (c) = stmt;
36668
/* And stick the placeholder VAR_DECL into the clause as well. */
36669
- OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = outer_sym.backend_decl;
36670
+ OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) = outer_decl;
36672
gfc_current_locus = old_loc;
36674
30310
--- a/src/gcc/function.c
36675
30311
+++ b/src/gcc/function.c
36676
30312
@@ -147,9 +147,6 @@
87726
78767
+/* { dg-final { scan-assembler-times "imull" 1 } } */
87727
--- a/src/gcc/testsuite/gcc.target/mips/save-restore-1.c
87728
+++ b/src/gcc/testsuite/gcc.target/mips/save-restore-1.c
87730
/* Check that we can use the save instruction to save varargs. */
87731
/* { dg-options "(-mips16) isa_rev>=1 -mabi=32 -O2" } */
87732
+/* { dg-skip-if "PR target/46610" { mips-sgi-irix6* } } */
87734
#include <stdarg.h>
87736
--- a/src/gcc/testsuite/gcc.target/mips/save-restore-3.c
87737
+++ b/src/gcc/testsuite/gcc.target/mips/save-restore-3.c
87739
/* Check that we can use the save instruction to save spilled arguments
87740
when the argument save area is out of range of a direct load or store. */
87741
/* { dg-options "(-mips16) isa_rev>=1 -mabi=32 -O2" } */
87742
+/* { dg-skip-if "PR target/46610" { mips-sgi-irix6* } } */
87746
--- a/src/gcc/testsuite/gcc.target/mips/save-restore-4.c
87747
+++ b/src/gcc/testsuite/gcc.target/mips/save-restore-4.c
87749
/* Check that we can use the save instruction to save $16, $17 and $31. */
87750
/* { dg-options "(-mips16) isa_rev>=1 -mabi=32 -O2" } */
87751
+/* { dg-skip-if "PR target/46610" { mips-sgi-irix6* } } */
87755
--- a/src/gcc/testsuite/gcc.target/mips/save-restore-5.c
87756
+++ b/src/gcc/testsuite/gcc.target/mips/save-restore-5.c
87758
/* Check that we don't try to save the same register twice. */
87759
/* { dg-options "(-mips16) isa_rev>=1 -mgp32 -O2" } */
87760
+/* { dg-skip-if "PR target/46610" { mips-sgi-irix6* } } */
87762
int bar (int, int, int, int);
87764
--- a/src/gcc/testsuite/gcc.target/powerpc/avoid-indexed-addresses.c
87765
+++ b/src/gcc/testsuite/gcc.target/powerpc/avoid-indexed-addresses.c
87767
/* { dg-do compile { target { powerpc*-*-* } } } */
87768
-/* { dg-options "-O2 -mavoid-indexed-addresses" } */
87769
+/* { dg-options "-O2 -mavoid-indexed-addresses -mno-altivec -mno-vsx" } */
87771
/* { dg-final { scan-assembler-not "lbzx" } }
87773
--- a/src/gcc/testsuite/gcc.target/powerpc/ppc32-abi-dfp-1.c
87774
+++ b/src/gcc/testsuite/gcc.target/powerpc/ppc32-abi-dfp-1.c
87777
reg_parms_t gparms;
87780
-/* Testcase could break on future gcc's, if parameter regs
87781
- are changed before this asm. */
87783
-#define save_parms(lparms) \
87784
- asm volatile ("lis 11,gparms@ha\n\t" \
87785
- "la 11,gparms@l(11)\n\t" \
87786
- "st 3,0(11)\n\t" \
87787
- "st 4,4(11)\n\t" \
87788
- "st 5,8(11)\n\t" \
87789
- "st 6,12(11)\n\t" \
87790
- "st 7,16(11)\n\t" \
87791
- "st 8,20(11)\n\t" \
87792
- "st 9,24(11)\n\t" \
87793
- "st 10,28(11)\n\t" \
87794
- "stfd 1,32(11)\n\t" \
87795
- "stfd 2,40(11)\n\t" \
87796
- "stfd 3,48(11)\n\t" \
87797
- "stfd 4,56(11)\n\t" \
87798
- "stfd 5,64(11)\n\t" \
87799
- "stfd 6,72(11)\n\t" \
87800
- "stfd 7,80(11)\n\t" \
87801
- "stfd 8,88(11)\n\t":::"11", "memory"); \
87806
struct sf *backchain;
87807
@@ -62,115 +37,159 @@
87808
unsigned int slot[200];
87811
+/* Wrapper to save the GPRs and FPRs and then jump to the real function. */
87812
+#define WRAPPER(NAME) \
87813
+__asm__ ("\t.globl\t" #NAME "_asm\n\t" \
87815
+ ".type " #NAME "_asm, @function\n" \
87816
+ #NAME "_asm:\n\t" \
87817
+ "lis 11,gparms@ha\n\t" \
87818
+ "la 11,gparms@l(11)\n\t" \
87819
+ "st 3,0(11)\n\t" \
87820
+ "st 4,4(11)\n\t" \
87821
+ "st 5,8(11)\n\t" \
87822
+ "st 6,12(11)\n\t" \
87823
+ "st 7,16(11)\n\t" \
87824
+ "st 8,20(11)\n\t" \
87825
+ "st 9,24(11)\n\t" \
87826
+ "st 10,28(11)\n\t" \
87827
+ "stfd 1,32(11)\n\t" \
87828
+ "stfd 2,40(11)\n\t" \
87829
+ "stfd 3,48(11)\n\t" \
87830
+ "stfd 4,56(11)\n\t" \
87831
+ "stfd 5,64(11)\n\t" \
87832
+ "stfd 6,72(11)\n\t" \
87833
+ "stfd 7,80(11)\n\t" \
87834
+ "stfd 8,88(11)\n\t" \
87835
+ "b " #NAME "\n\t" \
87836
+ ".size " #NAME ",.-" #NAME "\n")
87838
/* Fill up floating point registers with double arguments, forcing
87839
decimal float arguments into the parameter save area. */
87840
+extern void func0_asm (double, double, double, double, double,
87841
+ double, double, double, _Decimal64, _Decimal128);
87845
void __attribute__ ((noinline))
87846
func0 (double a1, double a2, double a3, double a4, double a5,
87847
double a6, double a7, double a8, _Decimal64 a9, _Decimal128 a10)
87849
- reg_parms_t lparms;
87852
- save_parms (lparms);
87853
sp = __builtin_frame_address (0);
87854
sp = sp->backchain;
87856
- if (a1 != lparms.fprs[0]) FAILURE
87857
- if (a2 != lparms.fprs[1]) FAILURE
87858
- if (a3 != lparms.fprs[2]) FAILURE
87859
- if (a4 != lparms.fprs[3]) FAILURE
87860
- if (a5 != lparms.fprs[4]) FAILURE
87861
- if (a6 != lparms.fprs[5]) FAILURE
87862
- if (a7 != lparms.fprs[6]) FAILURE
87863
- if (a8 != lparms.fprs[7]) FAILURE
87864
+ if (a1 != gparms.fprs[0]) FAILURE
87865
+ if (a2 != gparms.fprs[1]) FAILURE
87866
+ if (a3 != gparms.fprs[2]) FAILURE
87867
+ if (a4 != gparms.fprs[3]) FAILURE
87868
+ if (a5 != gparms.fprs[4]) FAILURE
87869
+ if (a6 != gparms.fprs[5]) FAILURE
87870
+ if (a7 != gparms.fprs[6]) FAILURE
87871
+ if (a8 != gparms.fprs[7]) FAILURE
87872
if (a9 != *(_Decimal64 *)&sp->slot[0]) FAILURE
87873
if (a10 != *(_Decimal128 *)&sp->slot[2]) FAILURE
87876
/* Alternate 64-bit and 128-bit decimal float arguments, checking that
87877
_Decimal128 is always passed in even/odd register pairs. */
87878
+extern void func1_asm (_Decimal64, _Decimal128, _Decimal64, _Decimal128,
87879
+ _Decimal64, _Decimal128, _Decimal64, _Decimal128);
87883
void __attribute__ ((noinline))
87884
func1 (_Decimal64 a1, _Decimal128 a2, _Decimal64 a3, _Decimal128 a4,
87885
_Decimal64 a5, _Decimal128 a6, _Decimal64 a7, _Decimal128 a8)
87887
- reg_parms_t lparms;
87890
- save_parms (lparms);
87891
sp = __builtin_frame_address (0);
87892
sp = sp->backchain;
87894
- if (a1 != *(_Decimal64 *)&lparms.fprs[0]) FAILURE /* f1 */
87895
- if (a2 != *(_Decimal128 *)&lparms.fprs[1]) FAILURE /* f2 & f3 */
87896
- if (a3 != *(_Decimal64 *)&lparms.fprs[3]) FAILURE /* f4 */
87897
- if (a4 != *(_Decimal128 *)&lparms.fprs[5]) FAILURE /* f6 & f7 */
87898
- if (a5 != *(_Decimal64 *)&lparms.fprs[7]) FAILURE /* f8 */
87899
+ if (a1 != *(_Decimal64 *)&gparms.fprs[0]) FAILURE /* f1 */
87900
+ if (a2 != *(_Decimal128 *)&gparms.fprs[1]) FAILURE /* f2 & f3 */
87901
+ if (a3 != *(_Decimal64 *)&gparms.fprs[3]) FAILURE /* f4 */
87902
+ if (a4 != *(_Decimal128 *)&gparms.fprs[5]) FAILURE /* f6 & f7 */
87903
+ if (a5 != *(_Decimal64 *)&gparms.fprs[7]) FAILURE /* f8 */
87904
if (a6 != *(_Decimal128 *)&sp->slot[0]) FAILURE
87905
if (a7 != *(_Decimal64 *)&sp->slot[4]) FAILURE
87906
if (a8 != *(_Decimal128 *)&sp->slot[6]) FAILURE
87909
+extern void func2_asm (_Decimal128, _Decimal64, _Decimal128, _Decimal64,
87910
+ _Decimal128, _Decimal64, _Decimal128, _Decimal64);
87914
void __attribute__ ((noinline))
87915
func2 (_Decimal128 a1, _Decimal64 a2, _Decimal128 a3, _Decimal64 a4,
87916
_Decimal128 a5, _Decimal64 a6, _Decimal128 a7, _Decimal64 a8)
87918
- reg_parms_t lparms;
87921
- save_parms (lparms);
87922
sp = __builtin_frame_address (0);
87923
sp = sp->backchain;
87925
- if (a1 != *(_Decimal128 *)&lparms.fprs[1]) FAILURE /* f2 & f3 */
87926
- if (a2 != *(_Decimal64 *)&lparms.fprs[3]) FAILURE /* f4 */
87927
- if (a3 != *(_Decimal128 *)&lparms.fprs[5]) FAILURE /* f6 & f7 */
87928
- if (a4 != *(_Decimal64 *)&lparms.fprs[7]) FAILURE /* f8 */
87929
+ if (a1 != *(_Decimal128 *)&gparms.fprs[1]) FAILURE /* f2 & f3 */
87930
+ if (a2 != *(_Decimal64 *)&gparms.fprs[3]) FAILURE /* f4 */
87931
+ if (a3 != *(_Decimal128 *)&gparms.fprs[5]) FAILURE /* f6 & f7 */
87932
+ if (a4 != *(_Decimal64 *)&gparms.fprs[7]) FAILURE /* f8 */
87933
if (a5 != *(_Decimal128 *)&sp->slot[0]) FAILURE
87934
if (a6 != *(_Decimal64 *)&sp->slot[4]) FAILURE
87935
if (a7 != *(_Decimal128 *)&sp->slot[6]) FAILURE
87936
if (a8 != *(_Decimal64 *)&sp->slot[10]) FAILURE
87939
+extern void func3_asm (_Decimal64, _Decimal128, _Decimal64, _Decimal128,
87944
void __attribute__ ((noinline))
87945
func3 (_Decimal64 a1, _Decimal128 a2, _Decimal64 a3, _Decimal128 a4,
87948
- reg_parms_t lparms;
87951
- save_parms (lparms);
87952
sp = __builtin_frame_address (0);
87953
sp = sp->backchain;
87955
- if (a1 != *(_Decimal64 *)&lparms.fprs[0]) FAILURE /* f1 */
87956
- if (a2 != *(_Decimal128 *)&lparms.fprs[1]) FAILURE /* f2 & f3 */
87957
- if (a3 != *(_Decimal64 *)&lparms.fprs[3]) FAILURE /* f4 */
87958
- if (a4 != *(_Decimal128 *)&lparms.fprs[5]) FAILURE /* f6 & f7 */
87959
+ if (a1 != *(_Decimal64 *)&gparms.fprs[0]) FAILURE /* f1 */
87960
+ if (a2 != *(_Decimal128 *)&gparms.fprs[1]) FAILURE /* f2 & f3 */
87961
+ if (a3 != *(_Decimal64 *)&gparms.fprs[3]) FAILURE /* f4 */
87962
+ if (a4 != *(_Decimal128 *)&gparms.fprs[5]) FAILURE /* f6 & f7 */
87963
if (a5 != *(_Decimal128 *)&sp->slot[0]) FAILURE
87966
+extern void func4_asm (_Decimal32, _Decimal32, _Decimal32, _Decimal32,
87967
+ _Decimal32, _Decimal32, _Decimal32, _Decimal32,
87968
+ _Decimal32, _Decimal32, _Decimal32, _Decimal32,
87969
+ _Decimal32, _Decimal32, _Decimal32, _Decimal32);
87973
void __attribute__ ((noinline))
87974
func4 (_Decimal32 a1, _Decimal32 a2, _Decimal32 a3, _Decimal32 a4,
87975
_Decimal32 a5, _Decimal32 a6, _Decimal32 a7, _Decimal32 a8,
87976
_Decimal32 a9, _Decimal32 a10, _Decimal32 a11, _Decimal32 a12,
87977
_Decimal32 a13, _Decimal32 a14, _Decimal32 a15, _Decimal32 a16)
87979
- reg_parms_t lparms;
87982
- save_parms (lparms);
87983
sp = __builtin_frame_address (0);
87984
sp = sp->backchain;
87986
/* _Decimal32 is passed in the lower half of an FPR, or in parameter slot. */
87987
- if (a1 != ((d32parm_t *)&lparms.fprs[0])->d) FAILURE /* f1 */
87988
- if (a2 != ((d32parm_t *)&lparms.fprs[1])->d) FAILURE /* f2 */
87989
- if (a3 != ((d32parm_t *)&lparms.fprs[2])->d) FAILURE /* f3 */
87990
- if (a4 != ((d32parm_t *)&lparms.fprs[3])->d) FAILURE /* f4 */
87991
- if (a5 != ((d32parm_t *)&lparms.fprs[4])->d) FAILURE /* f5 */
87992
- if (a6 != ((d32parm_t *)&lparms.fprs[5])->d) FAILURE /* f6 */
87993
- if (a7 != ((d32parm_t *)&lparms.fprs[6])->d) FAILURE /* f7 */
87994
- if (a8 != ((d32parm_t *)&lparms.fprs[7])->d) FAILURE /* f8 */
87995
+ if (a1 != ((d32parm_t *)&gparms.fprs[0])->d) FAILURE /* f1 */
87996
+ if (a2 != ((d32parm_t *)&gparms.fprs[1])->d) FAILURE /* f2 */
87997
+ if (a3 != ((d32parm_t *)&gparms.fprs[2])->d) FAILURE /* f3 */
87998
+ if (a4 != ((d32parm_t *)&gparms.fprs[3])->d) FAILURE /* f4 */
87999
+ if (a5 != ((d32parm_t *)&gparms.fprs[4])->d) FAILURE /* f5 */
88000
+ if (a6 != ((d32parm_t *)&gparms.fprs[5])->d) FAILURE /* f6 */
88001
+ if (a7 != ((d32parm_t *)&gparms.fprs[6])->d) FAILURE /* f7 */
88002
+ if (a8 != ((d32parm_t *)&gparms.fprs[7])->d) FAILURE /* f8 */
88003
if (a9 != *(_Decimal32 *)&sp->slot[0]) FAILURE
88004
if (a10 != *(_Decimal32 *)&sp->slot[1]) FAILURE
88005
if (a11 != *(_Decimal32 *)&sp->slot[2]) FAILURE
88006
@@ -181,24 +200,29 @@
88007
if (a16 != *(_Decimal32 *)&sp->slot[7]) FAILURE
88010
+extern void func5_asm (_Decimal32, _Decimal64, _Decimal128,
88011
+ _Decimal32, _Decimal64, _Decimal128,
88012
+ _Decimal32, _Decimal64, _Decimal128,
88013
+ _Decimal32, _Decimal64, _Decimal128);
88017
void __attribute__ ((noinline))
88018
func5 (_Decimal32 a1, _Decimal64 a2, _Decimal128 a3,
88019
_Decimal32 a4, _Decimal64 a5, _Decimal128 a6,
88020
_Decimal32 a7, _Decimal64 a8, _Decimal128 a9,
88021
_Decimal32 a10, _Decimal64 a11, _Decimal128 a12)
88023
- reg_parms_t lparms;
88026
- save_parms (lparms);
88027
sp = __builtin_frame_address (0);
88028
sp = sp->backchain;
88030
- if (a1 != ((d32parm_t *)&lparms.fprs[0])->d) FAILURE /* f1 */
88031
- if (a2 != *(_Decimal64 *)&lparms.fprs[1]) FAILURE /* f2 */
88032
- if (a3 != *(_Decimal128 *)&lparms.fprs[3]) FAILURE /* f4 & f5 */
88033
- if (a4 != ((d32parm_t *)&lparms.fprs[5])->d) FAILURE /* f6 */
88034
- if (a5 != *(_Decimal64 *)&lparms.fprs[6]) FAILURE /* f7 */
88035
+ if (a1 != ((d32parm_t *)&gparms.fprs[0])->d) FAILURE /* f1 */
88036
+ if (a2 != *(_Decimal64 *)&gparms.fprs[1]) FAILURE /* f2 */
88037
+ if (a3 != *(_Decimal128 *)&gparms.fprs[3]) FAILURE /* f4 & f5 */
88038
+ if (a4 != ((d32parm_t *)&gparms.fprs[5])->d) FAILURE /* f6 */
88039
+ if (a5 != *(_Decimal64 *)&gparms.fprs[6]) FAILURE /* f7 */
88041
if (a6 != *(_Decimal128 *)&sp->slot[0]) FAILURE
88042
if (a7 != *(_Decimal32 *)&sp->slot[4]) FAILURE
88043
@@ -212,15 +236,15 @@
88047
- func0 (1., 2., 3., 4., 5., 6., 7., 8., 9.dd, 10.dl);
88048
- func1 (1.dd, 2.dl, 3.dd, 4.dl, 5.dd, 6.dl, 7.dd, 8.dl);
88049
- func2 (1.dl, 2.dd, 3.dl, 4.dd, 5.dl, 6.dd, 7.dl, 8.dd);
88050
- func3 (1.dd, 2.dl, 3.dd, 4.dl, 5.dl);
88051
- func4 (501.2df, 502.2df, 503.2df, 504.2df, 505.2df, 506.2df, 507.2df,
88052
- 508.2df, 509.2df, 510.2df, 511.2df, 512.2df, 513.2df, 514.2df,
88053
- 515.2df, 516.2df);
88054
- func5 (601.2df, 602.2dd, 603.2dl, 604.2df, 605.2dd, 606.2dl,
88055
- 607.2df, 608.2dd, 609.2dl, 610.2df, 611.2dd, 612.2dl);
88056
+ func0_asm (1., 2., 3., 4., 5., 6., 7., 8., 9.dd, 10.dl);
88057
+ func1_asm (1.dd, 2.dl, 3.dd, 4.dl, 5.dd, 6.dl, 7.dd, 8.dl);
88058
+ func2_asm (1.dl, 2.dd, 3.dl, 4.dd, 5.dl, 6.dd, 7.dl, 8.dd);
88059
+ func3_asm (1.dd, 2.dl, 3.dd, 4.dl, 5.dl);
88060
+ func4_asm (501.2df, 502.2df, 503.2df, 504.2df, 505.2df, 506.2df, 507.2df,
88061
+ 508.2df, 509.2df, 510.2df, 511.2df, 512.2df, 513.2df, 514.2df,
88062
+ 515.2df, 516.2df);
88063
+ func5_asm (601.2df, 602.2dd, 603.2dl, 604.2df, 605.2dd, 606.2dl,
88064
+ 607.2df, 608.2dd, 609.2dl, 610.2df, 611.2dd, 612.2dl);
88068
--- a/src/gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c
88069
+++ b/src/gcc/testsuite/gcc.target/powerpc/ppc64-abi-dfp-1.c
88071
/* { dg-do run { target { powerpc64-*-* && { lp64 && dfprt } } } } */
88072
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
88073
/* { dg-options "-std=gnu99 -O2 -fno-strict-aliasing" } */
88075
/* Testcase to check for ABI compliance of parameter passing
88076
@@ -31,60 +32,42 @@
88077
reg_parms_t gparms;
88080
-/* Testcase could break on future gcc's, if parameter regs
88081
- are changed before this asm. */
88084
-#define save_parms(lparms) \
88085
- asm volatile ("ld 11,gparms@got(2)\n\t" \
88086
- "std 3,0(11)\n\t" \
88087
- "std 4,8(11)\n\t" \
88088
- "std 5,16(11)\n\t" \
88089
- "std 6,24(11)\n\t" \
88090
- "std 7,32(11)\n\t" \
88091
- "std 8,40(11)\n\t" \
88092
- "std 9,48(11)\n\t" \
88093
- "std 10,56(11)\n\t" \
88094
- "stfd 1,64(11)\n\t" \
88095
- "stfd 2,72(11)\n\t" \
88096
- "stfd 3,80(11)\n\t" \
88097
- "stfd 4,88(11)\n\t" \
88098
- "stfd 5,96(11)\n\t" \
88099
- "stfd 6,104(11)\n\t" \
88100
- "stfd 7,112(11)\n\t" \
88101
- "stfd 8,120(11)\n\t" \
88102
- "stfd 9,128(11)\n\t" \
88103
- "stfd 10,136(11)\n\t" \
88104
- "stfd 11,144(11)\n\t" \
88105
- "stfd 12,152(11)\n\t" \
88106
- "stfd 13,160(11)\n\t":::"11", "memory"); \
88109
-#define save_parms(lparms) \
88110
- asm volatile ("ld r11,gparms@got(r2)\n\t" \
88111
- "std r3,0(r11)\n\t" \
88112
- "std r4,8(r11)\n\t" \
88113
- "std r5,16(r11)\n\t" \
88114
- "std r6,24(r11)\n\t" \
88115
- "std r7,32(r11)\n\t" \
88116
- "std r8,40(r11)\n\t" \
88117
- "std r9,48(r11)\n\t" \
88118
- "std r10,56(r11)\n\t" \
88119
- "stfd f1,64(r11)\n\t" \
88120
- "stfd f2,72(r11)\n\t" \
88121
- "stfd f3,80(r11)\n\t" \
88122
- "stfd f4,88(r11)\n\t" \
88123
- "stfd f5,96(r11)\n\t" \
88124
- "stfd f6,104(r11)\n\t" \
88125
- "stfd f7,112(r11)\n\t" \
88126
- "stfd f8,120(r11)\n\t" \
88127
- "stfd f9,128(r11)\n\t" \
88128
- "stfd f10,136(r11)\n\t" \
88129
- "stfd f11,144(r11)\n\t" \
88130
- "stfd f12,152(r11)\n\t" \
88131
- "stfd f13,160(r11)\n\t":::"r11", "memory"); \
88134
+/* Wrapper to save the GPRs and FPRs and then jump to the real function. */
88135
+#define WRAPPER(NAME) \
88136
+__asm__ ("\t.globl\t" #NAME "_asm\n\t" \
88137
+ ".section \".opd\",\"aw\"\n\t" \
88139
+ #NAME "_asm:\n\t" \
88140
+ ".quad .L." #NAME "_asm,.TOC.@tocbase,0\n\t" \
88142
+ ".type " #NAME "_asm, @function\n" \
88143
+ ".L." #NAME "_asm:\n\t" \
88144
+ "ld 11,gparms@got(2)\n\t" \
88145
+ "std 3,0(11)\n\t" \
88146
+ "std 4,8(11)\n\t" \
88147
+ "std 5,16(11)\n\t" \
88148
+ "std 6,24(11)\n\t" \
88149
+ "std 7,32(11)\n\t" \
88150
+ "std 8,40(11)\n\t" \
88151
+ "std 9,48(11)\n\t" \
88152
+ "std 10,56(11)\n\t" \
88153
+ "stfd 1,64(11)\n\t" \
88154
+ "stfd 2,72(11)\n\t" \
88155
+ "stfd 3,80(11)\n\t" \
88156
+ "stfd 4,88(11)\n\t" \
88157
+ "stfd 5,96(11)\n\t" \
88158
+ "stfd 6,104(11)\n\t" \
88159
+ "stfd 7,112(11)\n\t" \
88160
+ "stfd 8,120(11)\n\t" \
88161
+ "stfd 9,128(11)\n\t" \
88162
+ "stfd 10,136(11)\n\t" \
88163
+ "stfd 11,144(11)\n\t" \
88164
+ "stfd 12,152(11)\n\t" \
88165
+ "stfd 13,160(11)\n\t" \
88166
+ "b " #NAME "\n\t" \
88168
+ ".byte 0,0,0,0,0,0,0,0\n\t" \
88169
+ ".size " #NAME ",.-" #NAME "\n")
88174
unsigned long slot[100];
88177
+extern void func0_asm (double, double, double, double, double, double,
88178
+ double, double, double, double, double, double,
88180
+ _Decimal64, _Decimal128, _Decimal64);
88184
/* Fill up floating point registers with double arguments, forcing
88185
decimal float arguments into the parameter save area. */
88186
void __attribute__ ((noinline))
88187
@@ -105,186 +95,209 @@
88188
double a13, double a14,
88189
_Decimal64 a15, _Decimal128 a16, _Decimal64 a17)
88191
- reg_parms_t lparms;
88194
- save_parms (lparms);
88195
sp = __builtin_frame_address (0);
88196
sp = sp->backchain;
88198
- if (a1 != lparms.fprs[0]) FAILURE
88199
- if (a2 != lparms.fprs[1]) FAILURE
88200
- if (a3 != lparms.fprs[2]) FAILURE
88201
- if (a4 != lparms.fprs[3]) FAILURE
88202
- if (a5 != lparms.fprs[4]) FAILURE
88203
- if (a6 != lparms.fprs[5]) FAILURE
88204
- if (a7 != lparms.fprs[6]) FAILURE
88205
- if (a8 != lparms.fprs[7]) FAILURE
88206
- if (a9 != lparms.fprs[8]) FAILURE
88207
- if (a10 != lparms.fprs[9]) FAILURE
88208
- if (a11 != lparms.fprs[10]) FAILURE
88209
- if (a12 != lparms.fprs[11]) FAILURE
88210
- if (a13 != lparms.fprs[12]) FAILURE
88211
+ if (a1 != gparms.fprs[0]) FAILURE
88212
+ if (a2 != gparms.fprs[1]) FAILURE
88213
+ if (a3 != gparms.fprs[2]) FAILURE
88214
+ if (a4 != gparms.fprs[3]) FAILURE
88215
+ if (a5 != gparms.fprs[4]) FAILURE
88216
+ if (a6 != gparms.fprs[5]) FAILURE
88217
+ if (a7 != gparms.fprs[6]) FAILURE
88218
+ if (a8 != gparms.fprs[7]) FAILURE
88219
+ if (a9 != gparms.fprs[8]) FAILURE
88220
+ if (a10 != gparms.fprs[9]) FAILURE
88221
+ if (a11 != gparms.fprs[10]) FAILURE
88222
+ if (a12 != gparms.fprs[11]) FAILURE
88223
+ if (a13 != gparms.fprs[12]) FAILURE
88224
if (a14 != *(double *)&sp->slot[13]) FAILURE
88225
if (a15 != *(_Decimal64 *)&sp->slot[14]) FAILURE
88226
if (a16 != *(_Decimal128 *)&sp->slot[15]) FAILURE
88227
if (a17 != *(_Decimal64 *)&sp->slot[17]) FAILURE
88230
+extern void func1_asm (double, double, double, double, double, double,
88231
+ double, double, double, double, double, double,
88232
+ double, _Decimal128 );
88236
void __attribute__ ((noinline))
88237
func1 (double a1, double a2, double a3, double a4, double a5, double a6,
88238
double a7, double a8, double a9, double a10, double a11, double a12,
88239
double a13, _Decimal128 a14)
88241
- reg_parms_t lparms;
88244
- save_parms (lparms);
88245
sp = __builtin_frame_address (0);
88246
sp = sp->backchain;
88248
- if (a1 != lparms.fprs[0]) FAILURE
88249
- if (a2 != lparms.fprs[1]) FAILURE
88250
- if (a3 != lparms.fprs[2]) FAILURE
88251
- if (a4 != lparms.fprs[3]) FAILURE
88252
- if (a5 != lparms.fprs[4]) FAILURE
88253
- if (a6 != lparms.fprs[5]) FAILURE
88254
- if (a7 != lparms.fprs[6]) FAILURE
88255
- if (a8 != lparms.fprs[7]) FAILURE
88256
- if (a9 != lparms.fprs[8]) FAILURE
88257
- if (a10 != lparms.fprs[9]) FAILURE
88258
- if (a11 != lparms.fprs[10]) FAILURE
88259
- if (a12 != lparms.fprs[11]) FAILURE
88260
- if (a13 != lparms.fprs[12]) FAILURE
88261
+ if (a1 != gparms.fprs[0]) FAILURE
88262
+ if (a2 != gparms.fprs[1]) FAILURE
88263
+ if (a3 != gparms.fprs[2]) FAILURE
88264
+ if (a4 != gparms.fprs[3]) FAILURE
88265
+ if (a5 != gparms.fprs[4]) FAILURE
88266
+ if (a6 != gparms.fprs[5]) FAILURE
88267
+ if (a7 != gparms.fprs[6]) FAILURE
88268
+ if (a8 != gparms.fprs[7]) FAILURE
88269
+ if (a9 != gparms.fprs[8]) FAILURE
88270
+ if (a10 != gparms.fprs[9]) FAILURE
88271
+ if (a11 != gparms.fprs[10]) FAILURE
88272
+ if (a12 != gparms.fprs[11]) FAILURE
88273
+ if (a13 != gparms.fprs[12]) FAILURE
88274
if (a14 != *(_Decimal128 *)&sp->slot[13]) FAILURE
88277
+extern void func2_asm (double, double, double, double, double, double,
88278
+ double, double, double, double, double, double,
88283
void __attribute__ ((noinline))
88284
func2 (double a1, double a2, double a3, double a4, double a5, double a6,
88285
double a7, double a8, double a9, double a10, double a11, double a12,
88288
- reg_parms_t lparms;
88291
- save_parms (lparms);
88292
sp = __builtin_frame_address (0);
88293
sp = sp->backchain;
88295
- if (a1 != lparms.fprs[0]) FAILURE
88296
- if (a2 != lparms.fprs[1]) FAILURE
88297
- if (a3 != lparms.fprs[2]) FAILURE
88298
- if (a4 != lparms.fprs[3]) FAILURE
88299
- if (a5 != lparms.fprs[4]) FAILURE
88300
- if (a6 != lparms.fprs[5]) FAILURE
88301
- if (a7 != lparms.fprs[6]) FAILURE
88302
- if (a8 != lparms.fprs[7]) FAILURE
88303
- if (a9 != lparms.fprs[8]) FAILURE
88304
- if (a10 != lparms.fprs[9]) FAILURE
88305
- if (a11 != lparms.fprs[10]) FAILURE
88306
- if (a12 != lparms.fprs[11]) FAILURE
88307
+ if (a1 != gparms.fprs[0]) FAILURE
88308
+ if (a2 != gparms.fprs[1]) FAILURE
88309
+ if (a3 != gparms.fprs[2]) FAILURE
88310
+ if (a4 != gparms.fprs[3]) FAILURE
88311
+ if (a5 != gparms.fprs[4]) FAILURE
88312
+ if (a6 != gparms.fprs[5]) FAILURE
88313
+ if (a7 != gparms.fprs[6]) FAILURE
88314
+ if (a8 != gparms.fprs[7]) FAILURE
88315
+ if (a9 != gparms.fprs[8]) FAILURE
88316
+ if (a10 != gparms.fprs[9]) FAILURE
88317
+ if (a11 != gparms.fprs[10]) FAILURE
88318
+ if (a12 != gparms.fprs[11]) FAILURE
88319
if (a13 != *(_Decimal128 *)&sp->slot[12]) FAILURE
88322
+extern void func3_asm (_Decimal64, _Decimal128, _Decimal64, _Decimal128,
88323
+ _Decimal64, _Decimal128, _Decimal64, _Decimal128,
88324
+ _Decimal64, _Decimal128);
88328
void __attribute__ ((noinline))
88329
func3 (_Decimal64 a1, _Decimal128 a2, _Decimal64 a3, _Decimal128 a4,
88330
_Decimal64 a5, _Decimal128 a6, _Decimal64 a7, _Decimal128 a8,
88331
_Decimal64 a9, _Decimal128 a10)
88333
- reg_parms_t lparms;
88336
- save_parms (lparms);
88337
sp = __builtin_frame_address (0);
88338
sp = sp->backchain;
88340
- if (a1 != *(_Decimal64 *)&lparms.fprs[0]) FAILURE /* f1 */
88341
- if (a2 != *(_Decimal128 *)&lparms.fprs[1]) FAILURE /* f2 & f3 */
88342
- if (a3 != *(_Decimal64 *)&lparms.fprs[3]) FAILURE /* f4 */
88343
- if (a4 != *(_Decimal128 *)&lparms.fprs[5]) FAILURE /* f6 & f7 */
88344
- if (a5 != *(_Decimal64 *)&lparms.fprs[7]) FAILURE /* f8 */
88345
- if (a6 != *(_Decimal128 *)&lparms.fprs[9]) FAILURE /* f10 & f11 */
88346
- if (a7 != *(_Decimal64 *)&lparms.fprs[11]) FAILURE /* f12 */
88347
+ if (a1 != *(_Decimal64 *)&gparms.fprs[0]) FAILURE /* f1 */
88348
+ if (a2 != *(_Decimal128 *)&gparms.fprs[1]) FAILURE /* f2 & f3 */
88349
+ if (a3 != *(_Decimal64 *)&gparms.fprs[3]) FAILURE /* f4 */
88350
+ if (a4 != *(_Decimal128 *)&gparms.fprs[5]) FAILURE /* f6 & f7 */
88351
+ if (a5 != *(_Decimal64 *)&gparms.fprs[7]) FAILURE /* f8 */
88352
+ if (a6 != *(_Decimal128 *)&gparms.fprs[9]) FAILURE /* f10 & f11 */
88353
+ if (a7 != *(_Decimal64 *)&gparms.fprs[11]) FAILURE /* f12 */
88354
if (a8 != *(_Decimal128 *)&sp->slot[10]) FAILURE
88355
if (a9 != *(_Decimal64 *)&sp->slot[12]) FAILURE
88356
if (a10 != *(_Decimal128 *)&sp->slot[13]) FAILURE
88359
+extern void func4_asm (_Decimal128, _Decimal64, _Decimal128, _Decimal64,
88360
+ _Decimal128, _Decimal64, _Decimal128, _Decimal64);
88364
void __attribute__ ((noinline))
88365
func4 (_Decimal128 a1, _Decimal64 a2, _Decimal128 a3, _Decimal64 a4,
88366
_Decimal128 a5, _Decimal64 a6, _Decimal128 a7, _Decimal64 a8)
88368
- reg_parms_t lparms;
88371
- save_parms (lparms);
88372
sp = __builtin_frame_address (0);
88373
sp = sp->backchain;
88375
- if (a1 != *(_Decimal128 *)&lparms.fprs[1]) FAILURE /* f2 & f3 */
88376
- if (a2 != *(_Decimal64 *)&lparms.fprs[3]) FAILURE /* f4 */
88377
- if (a3 != *(_Decimal128 *)&lparms.fprs[5]) FAILURE /* f6 & f7 */
88378
- if (a4 != *(_Decimal64 *)&lparms.fprs[7]) FAILURE /* f8 */
88379
- if (a5 != *(_Decimal128 *)&lparms.fprs[9]) FAILURE /* f10 & f11 */
88380
- if (a6 != *(_Decimal64 *)&lparms.fprs[11]) FAILURE /* f12 */
88381
+ if (a1 != *(_Decimal128 *)&gparms.fprs[1]) FAILURE /* f2 & f3 */
88382
+ if (a2 != *(_Decimal64 *)&gparms.fprs[3]) FAILURE /* f4 */
88383
+ if (a3 != *(_Decimal128 *)&gparms.fprs[5]) FAILURE /* f6 & f7 */
88384
+ if (a4 != *(_Decimal64 *)&gparms.fprs[7]) FAILURE /* f8 */
88385
+ if (a5 != *(_Decimal128 *)&gparms.fprs[9]) FAILURE /* f10 & f11 */
88386
+ if (a6 != *(_Decimal64 *)&gparms.fprs[11]) FAILURE /* f12 */
88387
if (a7 != *(_Decimal128 *)&sp->slot[9]) FAILURE
88388
if (a8 != *(_Decimal64 *)&sp->slot[11]) FAILURE
88391
+extern void func5_asm (_Decimal32, _Decimal32, _Decimal32, _Decimal32,
88392
+ _Decimal32, _Decimal32, _Decimal32, _Decimal32,
88393
+ _Decimal32, _Decimal32, _Decimal32, _Decimal32,
88394
+ _Decimal32, _Decimal32, _Decimal32, _Decimal32);
88398
void __attribute__ ((noinline))
88399
func5 (_Decimal32 a1, _Decimal32 a2, _Decimal32 a3, _Decimal32 a4,
88400
_Decimal32 a5, _Decimal32 a6, _Decimal32 a7, _Decimal32 a8,
88401
_Decimal32 a9, _Decimal32 a10, _Decimal32 a11, _Decimal32 a12,
88402
_Decimal32 a13, _Decimal32 a14, _Decimal32 a15, _Decimal32 a16)
88404
- reg_parms_t lparms;
88407
- save_parms (lparms);
88408
sp = __builtin_frame_address (0);
88409
sp = sp->backchain;
88411
/* _Decimal32 is passed in the lower half of an FPR or parameter slot. */
88412
- if (a1 != ((d32parm_t *)&lparms.fprs[0])->d) FAILURE /* f1 */
88413
- if (a2 != ((d32parm_t *)&lparms.fprs[1])->d) FAILURE /* f2 */
88414
- if (a3 != ((d32parm_t *)&lparms.fprs[2])->d) FAILURE /* f3 */
88415
- if (a4 != ((d32parm_t *)&lparms.fprs[3])->d) FAILURE /* f4 */
88416
- if (a5 != ((d32parm_t *)&lparms.fprs[4])->d) FAILURE /* f5 */
88417
- if (a6 != ((d32parm_t *)&lparms.fprs[5])->d) FAILURE /* f6 */
88418
- if (a7 != ((d32parm_t *)&lparms.fprs[6])->d) FAILURE /* f7 */
88419
- if (a8 != ((d32parm_t *)&lparms.fprs[7])->d) FAILURE /* f8 */
88420
- if (a9 != ((d32parm_t *)&lparms.fprs[8])->d) FAILURE /* f9 */
88421
- if (a10 != ((d32parm_t *)&lparms.fprs[9])->d) FAILURE /* f10 */
88422
- if (a11 != ((d32parm_t *)&lparms.fprs[10])->d) FAILURE /* f11 */
88423
- if (a12 != ((d32parm_t *)&lparms.fprs[11])->d) FAILURE /* f12 */
88424
- if (a13 != ((d32parm_t *)&lparms.fprs[12])->d) FAILURE /* f13 */
88425
+ if (a1 != ((d32parm_t *)&gparms.fprs[0])->d) FAILURE /* f1 */
88426
+ if (a2 != ((d32parm_t *)&gparms.fprs[1])->d) FAILURE /* f2 */
88427
+ if (a3 != ((d32parm_t *)&gparms.fprs[2])->d) FAILURE /* f3 */
88428
+ if (a4 != ((d32parm_t *)&gparms.fprs[3])->d) FAILURE /* f4 */
88429
+ if (a5 != ((d32parm_t *)&gparms.fprs[4])->d) FAILURE /* f5 */
88430
+ if (a6 != ((d32parm_t *)&gparms.fprs[5])->d) FAILURE /* f6 */
88431
+ if (a7 != ((d32parm_t *)&gparms.fprs[6])->d) FAILURE /* f7 */
88432
+ if (a8 != ((d32parm_t *)&gparms.fprs[7])->d) FAILURE /* f8 */
88433
+ if (a9 != ((d32parm_t *)&gparms.fprs[8])->d) FAILURE /* f9 */
88434
+ if (a10 != ((d32parm_t *)&gparms.fprs[9])->d) FAILURE /* f10 */
88435
+ if (a11 != ((d32parm_t *)&gparms.fprs[10])->d) FAILURE /* f11 */
88436
+ if (a12 != ((d32parm_t *)&gparms.fprs[11])->d) FAILURE /* f12 */
88437
+ if (a13 != ((d32parm_t *)&gparms.fprs[12])->d) FAILURE /* f13 */
88438
if (a14 != ((d32parm_t *)&sp->slot[13])->d) FAILURE
88439
if (a15 != ((d32parm_t *)&sp->slot[14])->d) FAILURE
88440
if (a16 != ((d32parm_t *)&sp->slot[15])->d) FAILURE
88443
+extern void func6_asm (_Decimal32, _Decimal64, _Decimal128,
88444
+ _Decimal32, _Decimal64, _Decimal128,
88445
+ _Decimal32, _Decimal64, _Decimal128,
88446
+ _Decimal32, _Decimal64, _Decimal128);
88450
void __attribute__ ((noinline))
88451
func6 (_Decimal32 a1, _Decimal64 a2, _Decimal128 a3,
88452
_Decimal32 a4, _Decimal64 a5, _Decimal128 a6,
88453
_Decimal32 a7, _Decimal64 a8, _Decimal128 a9,
88454
_Decimal32 a10, _Decimal64 a11, _Decimal128 a12)
88456
- reg_parms_t lparms;
88459
- save_parms (lparms);
88460
sp = __builtin_frame_address (0);
88461
sp = sp->backchain;
88463
- if (a1 != ((d32parm_t *)&lparms.fprs[0])->d) FAILURE /* f1 */
88464
- if (a2 != *(_Decimal64 *)&lparms.fprs[1]) FAILURE /* f2 */
88465
- if (a3 != *(_Decimal128 *)&lparms.fprs[3]) FAILURE /* f4 & f5 */
88466
- if (a4 != ((d32parm_t *)&lparms.fprs[5])->d) FAILURE /* f6 */
88467
- if (a5 != *(_Decimal64 *)&lparms.fprs[6]) FAILURE /* f7 */
88468
- if (a6 != *(_Decimal128 *)&lparms.fprs[7]) FAILURE /* f8 & f9 */
88469
- if (a7 != ((d32parm_t *)&lparms.fprs[9])->d) FAILURE /* f10 */
88470
- if (a8 != *(_Decimal64 *)&lparms.fprs[10]) FAILURE /* f11 */
88471
- if (a9 != *(_Decimal128 *)&lparms.fprs[11]) FAILURE /* f12 & f13 */
88472
+ if (a1 != ((d32parm_t *)&gparms.fprs[0])->d) FAILURE /* f1 */
88473
+ if (a2 != *(_Decimal64 *)&gparms.fprs[1]) FAILURE /* f2 */
88474
+ if (a3 != *(_Decimal128 *)&gparms.fprs[3]) FAILURE /* f4 & f5 */
88475
+ if (a4 != ((d32parm_t *)&gparms.fprs[5])->d) FAILURE /* f6 */
88476
+ if (a5 != *(_Decimal64 *)&gparms.fprs[6]) FAILURE /* f7 */
88477
+ if (a6 != *(_Decimal128 *)&gparms.fprs[7]) FAILURE /* f8 & f9 */
88478
+ if (a7 != ((d32parm_t *)&gparms.fprs[9])->d) FAILURE /* f10 */
88479
+ if (a8 != *(_Decimal64 *)&gparms.fprs[10]) FAILURE /* f11 */
88480
+ if (a9 != *(_Decimal128 *)&gparms.fprs[11]) FAILURE /* f12 & f13 */
88481
if (a10 != ((d32parm_t *)&sp->slot[12])->d) FAILURE
88482
if (a11 != *(_Decimal64 *)&sp->slot[13]) FAILURE
88484
@@ -292,23 +305,23 @@
88488
- func0 (1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5,
88489
- 14.5, 15.2dd, 16.2dl, 17.2dd);
88490
- func1 (101.5, 102.5, 103.5, 104.5, 105.5, 106.5, 107.5, 108.5, 109.5,
88491
- 110.5, 111.5, 112.5, 113.5, 114.2dd);
88492
- func2 (201.5, 202.5, 203.5, 204.5, 205.5, 206.5, 207.5, 208.5, 209.5,
88493
- 210.5, 211.5, 212.5, 213.2dd);
88494
- func3 (301.2dd, 302.2dl, 303.2dd, 304.2dl, 305.2dd, 306.2dl, 307.2dd,
88495
- 308.2dl, 309.2dd, 310.2dl);
88496
- func4 (401.2dl, 402.2dd, 403.2dl, 404.2dd, 405.2dl, 406.2dd, 407.2dl,
88498
+ func0_asm (1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5,
88499
+ 14.5, 15.2dd, 16.2dl, 17.2dd);
88500
+ func1_asm (101.5, 102.5, 103.5, 104.5, 105.5, 106.5, 107.5, 108.5, 109.5,
88501
+ 110.5, 111.5, 112.5, 113.5, 114.2dd);
88502
+ func2_asm (201.5, 202.5, 203.5, 204.5, 205.5, 206.5, 207.5, 208.5, 209.5,
88503
+ 210.5, 211.5, 212.5, 213.2dd);
88504
+ func3_asm (301.2dd, 302.2dl, 303.2dd, 304.2dl, 305.2dd, 306.2dl, 307.2dd,
88505
+ 308.2dl, 309.2dd, 310.2dl);
88506
+ func4_asm (401.2dl, 402.2dd, 403.2dl, 404.2dd, 405.2dl, 406.2dd, 407.2dl,
88509
/* _Decimal32 doesn't yet follow the ABI; enable this when it does. */
88510
- func5 (501.2df, 502.2df, 503.2df, 504.2df, 505.2df, 506.2df, 507.2df,
88511
- 508.2df, 509.2df, 510.2df, 511.2df, 512.2df, 513.2df, 514.2df,
88512
- 515.2df, 516.2df);
88513
- func6 (601.2df, 602.2dd, 603.2dl, 604.2df, 605.2dd, 606.2dl,
88514
- 607.2df, 608.2dd, 609.2dl, 610.2df, 611.2dd, 612.2dl);
88515
+ func5_asm (501.2df, 502.2df, 503.2df, 504.2df, 505.2df, 506.2df, 507.2df,
88516
+ 508.2df, 509.2df, 510.2df, 511.2df, 512.2df, 513.2df, 514.2df,
88517
+ 515.2df, 516.2df);
88518
+ func6_asm (601.2df, 602.2dd, 603.2dl, 604.2df, 605.2dd, 606.2dl,
88519
+ 607.2df, 608.2dd, 609.2dl, 610.2df, 611.2dd, 612.2dl);
88523
--- a/src/gcc/testsuite/gcc.target/powerpc/pr47862.c
88524
+++ b/src/gcc/testsuite/gcc.target/powerpc/pr47862.c
88526
+/* { dg-do compile { target { powerpc*-*-* } } } */
88527
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
88528
+/* { dg-require-effective-target powerpc_vsx_ok } */
88529
+/* { dg-options "-O2 -mcpu=power7" } */
88530
+/* { dg-final { scan-assembler-not "stfd" } } */
88532
+/* PR 47862: Verify caller-save spill of vectors in FP regs do not use
88533
+ legacy FP insns, which spill only half the vector. */
88534
+extern vector double dd[15];
88536
+vector double foo() {
88537
+ vector double a,b,c,d,e,f,g,h,i,j,k,l,m,n;
88539
+ a=dd[1]; b=dd[2]; c=dd[3]; d=dd[4]; e=dd[5]; f=dd[6]; g=dd[7]; h=dd[8]; i=dd[9];
88540
+ j=dd[10]; k=dd[11]; l=dd[12]; m=dd[13]; n=dd[14];
88542
+ return (a+b+c+d+e+f+g+h+i+j+k+l+m+n);
88545
--- a/src/gcc/testsuite/gcc.target/powerpc/pr48192.c
88546
+++ b/src/gcc/testsuite/gcc.target/powerpc/pr48192.c
88548
+/* { dg-do compile } */
88549
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
88550
+/* { dg-require-effective-target powerpc_vsx_ok } */
88551
+/* { dg-options "-O3 -mcpu=power7 -std=gnu89" } */
88553
+/* Make sure that the conditional macros vector, bool, and pixel are not
88554
+ considered as being defined. */
88557
+#error "bool is considered defined"
88561
+#error "vector is considered defined"
88565
+#error "pixel is condsidered defined"
88569
+#error "bool is considered defined"
88572
+#if defined(vector)
88573
+#error "vector is considered defined"
88576
+#if defined(pixel)
88577
+#error "pixel is condsidered defined"
88582
+#error "bool is considered defined"
88587
+#error "vector is considered defined"
88592
+#error "pixel is condsidered defined"
88595
+#define bool long double
88597
--- a/src/gcc/testsuite/gcc.target/powerpc/vsx-builtin-8.c
88598
+++ b/src/gcc/testsuite/gcc.target/powerpc/vsx-builtin-8.c
88600
+/* { dg-do compile { target { powerpc*-*-* } } } */
88601
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
88602
+/* { dg-require-effective-target powerpc_vsx_ok } */
88603
+/* { dg-options "-O3 -mcpu=power7" } */
88605
+/* Test the various load/store varients. */
88607
+#include <altivec.h>
88609
+#define TEST_COPY(NAME, TYPE) \
88610
+void NAME ## _copy_native (vector TYPE *a, vector TYPE *b) \
88615
+void NAME ## _copy_vec (vector TYPE *a, vector TYPE *b) \
88617
+ vector TYPE x = vec_ld (0, b); \
88618
+ vec_st (x, 0, a); \
88621
+#define TEST_COPYL(NAME, TYPE) \
88622
+void NAME ## _lvxl (vector TYPE *a, vector TYPE *b) \
88624
+ vector TYPE x = vec_ldl (0, b); \
88625
+ vec_stl (x, 0, a); \
88628
+#define TEST_VSX_COPY(NAME, TYPE) \
88629
+void NAME ## _copy_vsx (vector TYPE *a, vector TYPE *b) \
88631
+ vector TYPE x = vec_vsx_ld (0, b); \
88632
+ vec_vsx_st (x, 0, a); \
88635
+#define TEST_ALIGN(NAME, TYPE) \
88636
+void NAME ## _align (vector unsigned char *a, TYPE *b) \
88638
+ vector unsigned char x = vec_lvsl (0, b); \
88639
+ vector unsigned char y = vec_lvsr (0, b); \
88640
+ vec_st (x, 0, a); \
88641
+ vec_st (y, 8, a); \
88645
+TEST_COPY(uchar, unsigned char)
88646
+TEST_COPY(schar, signed char)
88647
+TEST_COPY(bchar, bool char)
88648
+TEST_COPY(ushort, unsigned short)
88649
+TEST_COPY(sshort, signed short)
88650
+TEST_COPY(bshort, bool short)
88651
+TEST_COPY(uint, unsigned int)
88652
+TEST_COPY(sint, signed int)
88653
+TEST_COPY(bint, bool int)
88654
+TEST_COPY(float, float)
88655
+TEST_COPY(double, double)
88656
+#endif /* NO_COPY */
88659
+TEST_COPYL(uchar, unsigned char)
88660
+TEST_COPYL(schar, signed char)
88661
+TEST_COPYL(bchar, bool char)
88662
+TEST_COPYL(ushort, unsigned short)
88663
+TEST_COPYL(sshort, signed short)
88664
+TEST_COPYL(bshort, bool short)
88665
+TEST_COPYL(uint, unsigned int)
88666
+TEST_COPYL(sint, signed int)
88667
+TEST_COPYL(bint, bool int)
88668
+TEST_COPYL(float, float)
88669
+TEST_COPYL(double, double)
88670
+#endif /* NO_COPYL */
88673
+TEST_ALIGN(uchar, unsigned char)
88674
+TEST_ALIGN(schar, signed char)
88675
+TEST_ALIGN(ushort, unsigned short)
88676
+TEST_ALIGN(sshort, signed short)
88677
+TEST_ALIGN(uint, unsigned int)
88678
+TEST_ALIGN(sint, signed int)
88679
+TEST_ALIGN(float, float)
88680
+TEST_ALIGN(double, double)
88681
+#endif /* NO_ALIGN */
88684
+#ifndef NO_VSX_COPY
88685
+TEST_VSX_COPY(uchar, unsigned char)
88686
+TEST_VSX_COPY(schar, signed char)
88687
+TEST_VSX_COPY(bchar, bool char)
88688
+TEST_VSX_COPY(ushort, unsigned short)
88689
+TEST_VSX_COPY(sshort, signed short)
88690
+TEST_VSX_COPY(bshort, bool short)
88691
+TEST_VSX_COPY(uint, unsigned int)
88692
+TEST_VSX_COPY(sint, signed int)
88693
+TEST_VSX_COPY(bint, bool int)
88694
+TEST_VSX_COPY(float, float)
88695
+TEST_VSX_COPY(double, double)
88696
+#endif /* NO_VSX_COPY */
88697
--- a/src/gcc/testsuite/gfortran.dg/argument_checking_13.f90
88698
+++ b/src/gcc/testsuite/gfortran.dg/argument_checking_13.f90
88700
real, allocatable :: deferred(:,:,:)
88701
real, pointer :: ptr(:,:,:)
88702
call rlv1(deferred(1,1,1)) ! valid since contiguous
88703
-call rlv1(ptr(1,1,1)) ! { dg-error "Element of assumed-shaped array" }
88704
-call rlv1(assumed_sh_dummy(1,1,1)) ! { dg-error "Element of assumed-shaped array" }
88705
-call rlv1(pointer_dummy(1,1,1)) ! { dg-error "Element of assumed-shaped array" }
88706
+call rlv1(ptr(1,1,1)) ! { dg-error "Element of assumed-shaped or pointer array" }
88707
+call rlv1(assumed_sh_dummy(1,1,1)) ! { dg-error "Element of assumed-shaped or pointer array" }
88708
+call rlv1(pointer_dummy(1,1,1)) ! { dg-error "Element of assumed-shaped or pointer array" }
88711
subroutine test2(assumed_sh_dummy, pointer_dummy)
88712
--- a/src/gcc/testsuite/gfortran.dg/argument_checking_17.f90
88713
+++ b/src/gcc/testsuite/gfortran.dg/argument_checking_17.f90
88715
+! { dg-do compile }
88717
+! PR fortran/47569
88719
+! Contributed by Jos de Kloe
88723
+ integer, parameter :: GRH_SIZE = 20, NMAX = 41624
88726
+ character :: mdr(NMAX)
88729
+ subroutine sub2(string,str_size)
88730
+ integer,intent(in) :: str_size
88731
+ character,intent(out) :: string(str_size)
88733
+ end subroutine sub2
88734
+ subroutine sub1(a)
88735
+ type(strtype),intent(inout) :: a
88736
+ call sub2(a%mdr(GRH_SIZE+1),a%size-GRH_SIZE)
88737
+ end subroutine sub1
88738
+end module teststr
88740
+! { dg-final { cleanup-modules "teststr" } }
88741
--- a/src/gcc/testsuite/gfortran.dg/array_constructor_33.f90
88742
+++ b/src/gcc/testsuite/gfortran.dg/array_constructor_33.f90
88744
! { dg-do compile }
88745
+! { dg-timeout-factor 4 }
88746
! PR20923 gfortran slow for large array constructors.
88747
! Test case prepared from PR by Jerry DeLisle <jvdelisle@gcc.gnu.org>
88749
--- a/src/gcc/testsuite/gfortran.dg/array_constructor_36.f90
88750
+++ b/src/gcc/testsuite/gfortran.dg/array_constructor_36.f90
88753
+! Test the fix for PR47348, in which the substring length
88754
+! in the array constructor at line 19 would be missed and
88755
+! the length of q used instead.
88757
+! Contributed by Thomas Koenig <tkoenig@netcologne.de>
88761
+ character(len = *), parameter :: fmt='(2(A,"|"))'
88762
+ character(len = *), parameter :: test='xyc|aec|'
88764
+ character(len = 4) :: q
88765
+ character(len = 8) :: buffer
88768
+ write (buffer, fmt) (/ trim(q), 'ae' /)//'c'
88769
+ if (buffer .ne. test) Call abort
88770
+ write (buffer, FMT) (/ q(1:i), 'ae' /)//'c'
88771
+ if (buffer .ne. test) Call abort
88773
--- a/src/gcc/testsuite/gfortran.dg/cray_pointers_2.f90
88774
+++ b/src/gcc/testsuite/gfortran.dg/cray_pointers_2.f90
88777
-! { dg-options "-fcray-pointer -fbounds-check" }
88778
+! Using two spaces between dg-do and run is a hack to keep gfortran-dg-runtest
88779
+! from cycling through optimization options for this expensive test.
88781
+! { dg-options "-O3 -fcray-pointer -fbounds-check" }
88782
+! { dg-timeout-factor 4 }
88783
! Series of routines for testing a Cray pointer implementation
88785
common /errors/errors(400)
88786
--- a/src/gcc/testsuite/gfortran.dg/debug/pr46756.f
88787
+++ b/src/gcc/testsuite/gfortran.dg/debug/pr46756.f
88789
+C PR debug/46756, reduced from ../20010519-1.f
88790
+C { dg-do compile }
88791
+C { dg-options "-O -fcompare-debug" }
88792
+ LOGICAL QDISK,QDW,QCMPCT
88793
+ LOGICAL LNOMA,LRAISE,LSCI,LBIG
88794
+ ASSIGN 801 TO I800 ! { dg-warning "Deleted feature: ASSIGN" "Deleted feature: ASSIGN" }
88797
+ ASSIGN 761 TO I760 ! { dg-warning "Deleted feature: ASSIGN" "Deleted feature: ASSIGN" }
88803
+ DO WHILE((CVGMX.GT.TOLDIM).AND.(ITER.LT.ITMX))
88804
+ IF(.NOT.QDW) THEN
88805
+ ASSIGN 641 to I640 ! { dg-warning "Deleted feature: ASSIGN" "Deleted feature: ASSIGN" }
88812
+ GOTO I640 ! { dg-warning "Deleted feature: Assigned" "Assigned GO TO" }
88814
+ GOTO I760 ! { dg-warning "Deleted feature: Assigned" "Assigned GO TO" }
88816
+ GOTO I800 ! { dg-warning "Deleted feature: Assigned" "Assigned GO TO" }
88818
--- a/src/gcc/testsuite/gfortran.dg/dependency_39.f90
88819
+++ b/src/gcc/testsuite/gfortran.dg/dependency_39.f90
88822
+! PR 45777 - component ref aliases when both are pointers
88825
+ integer, dimension(:), allocatable :: data
88828
+ subroutine s1(t,d)
88829
+ integer, dimension(:), pointer :: d
88830
+ type(t1), pointer :: t
88831
+ d(1:5)=t%data(3:7)
88832
+ end subroutine s1
88833
+ subroutine s2(d,t)
88834
+ integer, dimension(:), pointer :: d
88835
+ type(t1), pointer :: t
88836
+ t%data(3:7) = d(1:5)
88837
+ end subroutine s2
88842
+ type(t1), pointer :: t
88843
+ integer, dimension(:), pointer :: d
88845
+ allocate(t%data(10))
88846
+ t%data=(/(i,i=1,10)/)
88849
+ if (any(d.ne.(/3,4,5,6,7/))) call abort()
88850
+ t%data=(/(i,i=1,10)/)
88853
+ if (any(t%data.ne.(/1,2,1,2,3,4,5,8,9,10/))) call abort
88854
+ deallocate(t%data)
88857
+! { dg-final { cleanup-modules "m1" } }
88858
--- a/src/gcc/testsuite/gfortran.dg/func_result_6.f90
88859
+++ b/src/gcc/testsuite/gfortran.dg/func_result_6.f90
88863
+! PR fortran/47775
88865
+! Contributed by Fran Martinez Fadrique
88867
+! Before, a temporary was missing for generic procedured (cf. test())
88868
+! as the allocatable attribute was ignored for the check whether a
88869
+! temporary is required
88874
+ procedure, NOPASS :: foo => foo
88875
+ generic :: gen => foo
88879
+ integer, allocatable :: foo(:)
88889
+integer, pointer :: ptr1, ptr2
88890
+integer, target :: bar1(2)
88891
+integer, target, allocatable :: bar2(:)
88898
+if (ptr1 /= 11) call abort()
88900
+if (ptr1 /= 12) call abort()
88902
+if (ptr2 /= 13) call abort()
88904
+if (ptr2 /= 14) call abort()
88905
+bar2(:) = x%gen(5)
88906
+if (ptr2 /= 15) call abort()
88907
+bar2(:) = x%foo(6)
88908
+if (ptr2 /= 16) call abort()
88918
+integer, target :: bar(2)
88919
+integer, pointer :: ptr
88922
+if (ptr /= 2) call abort()
88924
+if (ptr /= 77) call abort()
88927
+ integer, allocatable :: foo(:)
88931
+end subroutine test
88933
+! { dg-final { cleanup-modules "m" } }
88934
--- a/src/gcc/testsuite/gfortran.dg/g77/cabs.f
88935
+++ b/src/gcc/testsuite/gfortran.dg/g77/cabs.f
88937
-c { dg-do run { xfail mips-sgi-irix6* } } PR 16292
88939
+c { dg-xfail-run-if "PR target/16292" { mips-sgi-irix6* } { -O0 } { -mabi=32 } }
88943
--- a/src/gcc/testsuite/gfortran.dg/gomp/pr47331.f90
88944
+++ b/src/gcc/testsuite/gfortran.dg/gomp/pr47331.f90
88946
+! PR fortran/47331
88947
+! { dg-do compile }
88948
+! { dg-options "-fopenmp -fwhole-file" }
88953
+ !$omp end parallel
88954
+end subroutine foo
88961
+end subroutine bar
88963
+subroutine baz (k)
88969
+end program pr47331
88970
--- a/src/gcc/testsuite/gfortran.dg/intrinsic_ifunction_2.f90
88971
+++ b/src/gcc/testsuite/gfortran.dg/intrinsic_ifunction_2.f90
88974
+! PR 48066 - this used to segfault.
88976
+ real(8) :: empty(0, 3), square(0)
88977
+ logical :: lempty(0, 3), lsquare(0)
88978
+ square = sum(empty * empty, 2)
88979
+ lsquare = any(lempty .and. lempty, 2)
88981
--- a/src/gcc/testsuite/gfortran.dg/ldist-1.f90
88982
+++ b/src/gcc/testsuite/gfortran.dg/ldist-1.f90
88985
end Subroutine PADEC
88987
-! { dg-final { scan-tree-dump-times "distributed: split to 4 loops" 1 "ldist" } }
88988
+! There are 5 legal partitions in this code. Based on the data
88989
+! locality heuristic, this loop should not be split.
88991
+! { dg-final { scan-tree-dump-not "distributed: split to" "ldist" } }
88992
! { dg-final { cleanup-tree-dump "ldist" } }
88993
--- a/src/gcc/testsuite/gfortran.dg/ldist-pr43023.f90
88994
+++ b/src/gcc/testsuite/gfortran.dg/ldist-pr43023.f90
88996
+! { dg-do compile }
88997
+! { dg-options "-O2 -ftree-loop-distribution" }
89004
+real, dimension(:,:), allocatable :: Angle
89005
+real, dimension(:), allocatable :: exth, ezth, hxth, hyth, hyphi
89009
+SUBROUTINE NFT_Init()
89018
+ exth(n) = cos(fi)*cos(th)
89019
+ ezth(n) = -sin(th)
89020
+ hxth(n) = -sin(fi)
89021
+ hyth(n) = cos(fi)
89022
+ hyphi(n) = -sin(fi)
89024
+END SUBROUTINE NFT_Init
89026
+END MODULE NFT_mod
89027
--- a/src/gcc/testsuite/gfortran.dg/namelist_71.f90
89028
+++ b/src/gcc/testsuite/gfortran.dg/namelist_71.f90
89031
+! PR47778 Reading array of structures from namelist
89032
+! Test case derived from the reporters test case.
89038
+ type (field_descr), dimension(3) :: vel ! 3 velocity components
89039
+ type (field_descr), dimension(3) :: scal ! 3 scalars
89041
+type (fsetup) field_setup
89042
+namelist /nl_setup/ field_setup
89043
+field_setup%vel%number = 0
89044
+field_setup%scal%number = 0
89045
+! write(*,nml=nl_setup)
89046
+open(10, status="scratch")
89047
+write(10,'(a)') "&nl_setup"
89048
+write(10,'(a)') " field_setup%vel(1)%number= 3,"
89049
+write(10,'(a)') " field_setup%vel(2)%number= 9,"
89050
+write(10,'(a)') " field_setup%vel(3)%number= 27,"
89051
+write(10,'(a)') " field_setup%scal(1)%number= 2,"
89052
+write(10,'(a)') " field_setup%scal(2)%number= 4,"
89053
+write(10,'(a)') " field_setup%scal(3)%number= 8,"
89054
+write(10,'(a)') "/"
89056
+read(10,nml=nl_setup)
89057
+if (field_setup%vel(1)%number .ne. 3) call abort
89058
+if (field_setup%vel(2)%number .ne. 9) call abort
89059
+if (field_setup%vel(3)%number .ne. 27) call abort
89060
+if (field_setup%scal(1)%number .ne. 2) call abort
89061
+if (field_setup%scal(2)%number .ne. 4) call abort
89062
+if (field_setup%scal(3)%number .ne. 8) call abort
89063
+!write(*,nml=nl_setup)
89064
+end program test_nml
89066
--- a/src/gcc/testsuite/gfortran.dg/power2.f90
89067
+++ b/src/gcc/testsuite/gfortran.dg/power2.f90
89069
INTEGER(KIND=1) :: k1
89070
INTEGER(KIND=2) :: k2
89078
--- a/src/gcc/testsuite/gfortran.dg/pr44592.f90
89079
+++ b/src/gcc/testsuite/gfortran.dg/pr44592.f90
89082
+! { dg-options "-O3" }
89083
+! From forall_12.f90
89084
+! Fails with loop reversal at -O3
89086
+ character(len=1) :: b(4) = (/"1","2","3","4"/), c(4)
89089
+ ! This statement must be here for the abort below
89090
+ b(1:3)(i:i) = b(2:4)(i:i)
89093
+ b(4:2:-1)(i:i) = b(3:1:-1)(i:i)
89095
+ ! This fails. If the condition is printed, the result is F F F F
89096
+ if (any (b .ne. (/"1","1","2","3"/))) i = 2
89098
+ print *, b .ne. (/"1","1","2","3"/)
89099
+ if (i == 2) call abort
89101
--- a/src/gcc/testsuite/gfortran.dg/pr46804.f90
89102
+++ b/src/gcc/testsuite/gfortran.dg/pr46804.f90
89104
+! PR rtl-optimization/46804
89106
+! { dg-options "-O -fPIC -fexpensive-optimizations -fgcse -foptimize-register-move -fpeel-loops -fno-tree-loop-optimize" }
89109
+ integer, parameter :: n1 = 2, n2 = 3, n3 = 4, slen = 3
89110
+ character (len = slen), dimension (n1, n2, n3) :: a
89111
+ integer (kind = 1), dimension (2, 4) :: shift1
89112
+ integer (kind = 2), dimension (2, 4) :: shift2
89113
+ integer (kind = 4), dimension (2, 4) :: shift3
89117
+ a (i1, i2, i3) = 'ab'(i1:i1) // 'cde'(i2:i2) // 'fghi'(i3:i3)
89121
+ shift1 (1, :) = (/ 4, 11, 19, 20 /)
89122
+ shift1 (2, :) = (/ 55, 5, 1, 2 /)
89125
+ call test (cshift (a, shift2, 2))
89126
+ call test (cshift (a, shift3, 2))
89128
+ subroutine test (b)
89129
+ character (len = slen), dimension (n1, n2, n3) :: b
89133
+ i2p = mod (shift1 (i1, i3) + i2 - 1, n2) + 1
89134
+ if (b (i1, i2, i3) .ne. a (i1, i2p, i3)) call abort
89138
+ end subroutine test
89140
--- a/src/gcc/testsuite/gfortran.dg/pr47878.f90
89141
+++ b/src/gcc/testsuite/gfortran.dg/pr47878.f90
89143
+! PR fortran/47878
89146
+ open (99, recl = 40)
89147
+ write (99, '(5i3)') 1, 2, 3
89149
+ read (99, '(5i3)') a
89150
+ if (any (a.ne.(/1, 2, 3, 0, 0/))) call abort
89151
+ close (99, status = 'delete')
89153
--- a/src/gcc/testsuite/gfortran.dg/redefined_intrinsic_assignment_2.f90
89154
+++ b/src/gcc/testsuite/gfortran.dg/redefined_intrinsic_assignment_2.f90
89156
+! { dg-do compile }
89158
+! PR fortran/47448
89160
+! ASSIGNMENT(=) checks. Defined assignment is allowed if and only if
89161
+! it does not override an intrinsic assignment.
89165
+ interface assignment(=)
89166
+ module procedure valid, valid2
89169
+ ! Valid: scalar = array
89170
+ subroutine valid (lhs,rhs)
89171
+ integer, intent(out) :: lhs
89172
+ integer, intent(in) :: rhs(:)
89174
+ end subroutine valid
89176
+ ! Valid: array of different ranks
89177
+ subroutine valid2 (lhs,rhs)
89178
+ integer, intent(out) :: lhs(:)
89179
+ integer, intent(in) :: rhs(:,:)
89180
+ lhs(:) = rhs(:,1)
89181
+ end subroutine valid2
89185
+ interface assignment(=)
89186
+ module procedure invalid
89189
+ ! Invalid: scalar = scalar
89190
+ subroutine invalid (lhs,rhs) ! { dg-error "must not redefine an INTRINSIC type assignment" }
89191
+ integer, intent(out) :: lhs
89192
+ integer, intent(in) :: rhs
89194
+ end subroutine invalid
89198
+ interface assignment(=)
89199
+ module procedure invalid2
89202
+ ! Invalid: array = scalar
89203
+ subroutine invalid2 (lhs,rhs) ! { dg-error "must not redefine an INTRINSIC type assignment" }
89204
+ integer, intent(out) :: lhs(:)
89205
+ integer, intent(in) :: rhs
89207
+ end subroutine invalid2
89211
+ interface assignment(=)
89212
+ module procedure invalid3
89215
+ ! Invalid: array = array for same rank
89216
+ subroutine invalid3 (lhs,rhs) ! { dg-error "must not redefine an INTRINSIC type assignment" }
89217
+ integer, intent(out) :: lhs(:)
89218
+ integer, intent(in) :: rhs(:)
89220
+ end subroutine invalid3
89223
+! { dg-final { cleanup-modules "test1" } }
89224
--- a/src/gcc/testsuite/gfortran.dg/userdef_operator_2.f90
89225
+++ b/src/gcc/testsuite/gfortran.dg/userdef_operator_2.f90
89227
+! { dg-do compile }
89228
+! PR 45338 - no ICE when cmp is not used explicitly.
89229
+! Test case by Simon Smart
89233
+ subroutine test_fn (cmp)
89234
+ interface operator(.myop.)
89235
+ pure function cmp (a, b) result(ret)
89236
+ integer, intent(in) :: a, b
89241
+ print*, a .myop. b
89242
+ end subroutine test_fn
89243
+end module test_mod
89244
78768
--- a/src/gcc/testsuite/gfortran.dg/vect/vect.exp
89245
78769
+++ b/src/gcc/testsuite/gfortran.dg/vect/vect.exp
89246
78770
@@ -105,7 +105,7 @@
95106
--- a/src/libgfortran/ChangeLog
95107
+++ b/src/libgfortran/ChangeLog
95109
+2011-03-13 Thomas Koenig <tkoenig@gcc.gnu.org>
95111
+ PR libfortran/48066
95112
+ Backport from trunk
95113
+ * m4/ifunction.m4: If return array is empty, return.
95114
+ * m4/ifunction_logical.m4: Likewise.
95115
+ * generated/all_l16.c: Regenerated.
95116
+ * generated/all_l1.c: Regenerated.
95117
+ * generated/all_l2.c: Regenerated.
95118
+ * generated/all_l4.c: Regenerated.
95119
+ * generated/all_l8.c: Regenerated.
95120
+ * generated/any_l16.c: Regenerated.
95121
+ * generated/any_l1.c: Regenerated.
95122
+ * generated/any_l2.c: Regenerated.
95123
+ * generated/any_l4.c: Regenerated.
95124
+ * generated/any_l8.c: Regenerated.
95125
+ * generated/count_16_l.c: Regenerated.
95126
+ * generated/count_1_l.c: Regenerated.
95127
+ * generated/count_2_l.c: Regenerated.
95128
+ * generated/count_4_l.c: Regenerated.
95129
+ * generated/count_8_l.c: Regenerated.
95130
+ * generated/maxloc1_16_i16.c: Regenerated.
95131
+ * generated/maxloc1_16_i1.c: Regenerated.
95132
+ * generated/maxloc1_16_i2.c: Regenerated.
95133
+ * generated/maxloc1_16_i4.c: Regenerated.
95134
+ * generated/maxloc1_16_i8.c: Regenerated.
95135
+ * generated/maxloc1_16_r10.c: Regenerated.
95136
+ * generated/maxloc1_16_r16.c: Regenerated.
95137
+ * generated/maxloc1_16_r4.c: Regenerated.
95138
+ * generated/maxloc1_16_r8.c: Regenerated.
95139
+ * generated/maxloc1_4_i16.c: Regenerated.
95140
+ * generated/maxloc1_4_i1.c: Regenerated.
95141
+ * generated/maxloc1_4_i2.c: Regenerated.
95142
+ * generated/maxloc1_4_i4.c: Regenerated.
95143
+ * generated/maxloc1_4_i8.c: Regenerated.
95144
+ * generated/maxloc1_4_r10.c: Regenerated.
95145
+ * generated/maxloc1_4_r16.c: Regenerated.
95146
+ * generated/maxloc1_4_r4.c: Regenerated.
95147
+ * generated/maxloc1_4_r8.c: Regenerated.
95148
+ * generated/maxloc1_8_i16.c: Regenerated.
95149
+ * generated/maxloc1_8_i1.c: Regenerated.
95150
+ * generated/maxloc1_8_i2.c: Regenerated.
95151
+ * generated/maxloc1_8_i4.c: Regenerated.
95152
+ * generated/maxloc1_8_i8.c: Regenerated.
95153
+ * generated/maxloc1_8_r10.c: Regenerated.
95154
+ * generated/maxloc1_8_r16.c: Regenerated.
95155
+ * generated/maxloc1_8_r4.c: Regenerated.
95156
+ * generated/maxloc1_8_r8.c: Regenerated.
95157
+ * generated/maxval_i16.c: Regenerated.
95158
+ * generated/maxval_i1.c: Regenerated.
95159
+ * generated/maxval_i2.c: Regenerated.
95160
+ * generated/maxval_i4.c: Regenerated.
95161
+ * generated/maxval_i8.c: Regenerated.
95162
+ * generated/maxval_r10.c: Regenerated.
95163
+ * generated/maxval_r16.c: Regenerated.
95164
+ * generated/maxval_r4.c: Regenerated.
95165
+ * generated/maxval_r8.c: Regenerated.
95166
+ * generated/minloc1_16_i16.c: Regenerated.
95167
+ * generated/minloc1_16_i1.c: Regenerated.
95168
+ * generated/minloc1_16_i2.c: Regenerated.
95169
+ * generated/minloc1_16_i4.c: Regenerated.
95170
+ * generated/minloc1_16_i8.c: Regenerated.
95171
+ * generated/minloc1_16_r10.c: Regenerated.
95172
+ * generated/minloc1_16_r16.c: Regenerated.
95173
+ * generated/minloc1_16_r4.c: Regenerated.
95174
+ * generated/minloc1_16_r8.c: Regenerated.
95175
+ * generated/minloc1_4_i16.c: Regenerated.
95176
+ * generated/minloc1_4_i1.c: Regenerated.
95177
+ * generated/minloc1_4_i2.c: Regenerated.
95178
+ * generated/minloc1_4_i4.c: Regenerated.
95179
+ * generated/minloc1_4_i8.c: Regenerated.
95180
+ * generated/minloc1_4_r10.c: Regenerated.
95181
+ * generated/minloc1_4_r16.c: Regenerated.
95182
+ * generated/minloc1_4_r4.c: Regenerated.
95183
+ * generated/minloc1_4_r8.c: Regenerated.
95184
+ * generated/minloc1_8_i16.c: Regenerated.
95185
+ * generated/minloc1_8_i1.c: Regenerated.
95186
+ * generated/minloc1_8_i2.c: Regenerated.
95187
+ * generated/minloc1_8_i4.c: Regenerated.
95188
+ * generated/minloc1_8_i8.c: Regenerated.
95189
+ * generated/minloc1_8_r10.c: Regenerated.
95190
+ * generated/minloc1_8_r16.c: Regenerated.
95191
+ * generated/minloc1_8_r4.c: Regenerated.
95192
+ * generated/minloc1_8_r8.c: Regenerated.
95193
+ * generated/minval_i16.c: Regenerated.
95194
+ * generated/minval_i1.c: Regenerated.
95195
+ * generated/minval_i2.c: Regenerated.
95196
+ * generated/minval_i4.c: Regenerated.
95197
+ * generated/minval_i8.c: Regenerated.
95198
+ * generated/minval_r10.c: Regenerated.
95199
+ * generated/minval_r16.c: Regenerated.
95200
+ * generated/minval_r4.c: Regenerated.
95201
+ * generated/minval_r8.c: Regenerated.
95202
+ * generated/product_c10.c: Regenerated.
95203
+ * generated/product_c16.c: Regenerated.
95204
+ * generated/product_c4.c: Regenerated.
95205
+ * generated/product_c8.c: Regenerated.
95206
+ * generated/product_i16.c: Regenerated.
95207
+ * generated/product_i1.c: Regenerated.
95208
+ * generated/product_i2.c: Regenerated.
95209
+ * generated/product_i4.c: Regenerated.
95210
+ * generated/product_i8.c: Regenerated.
95211
+ * generated/product_r10.c: Regenerated.
95212
+ * generated/product_r16.c: Regenerated.
95213
+ * generated/product_r4.c: Regenerated.
95214
+ * generated/product_r8.c: Regenerated.
95215
+ * generated/sum_c10.c: Regenerated.
95216
+ * generated/sum_c16.c: Regenerated.
95217
+ * generated/sum_c4.c: Regenerated.
95218
+ * generated/sum_c8.c: Regenerated.
95219
+ * generated/sum_i16.c: Regenerated.
95220
+ * generated/sum_i1.c: Regenerated.
95221
+ * generated/sum_i2.c: Regenerated.
95222
+ * generated/sum_i4.c: Regenerated.
95223
+ * generated/sum_i8.c: Regenerated.
95224
+ * generated/sum_r10.c: Regenerated.
95225
+ * generated/sum_r16.c: Regenerated.
95226
+ * generated/sum_r4.c: Regenerated.
95227
+ * generated/sum_r8.c: Regenerated.
95229
+2011-03-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
95231
+ PR libgfortran/47778
95232
+ * io/list_read.c (namelist_read): Intialize the error string buffere.
95233
+ If pprev_nl was used during the previous namelist read and the rank
95234
+ was zero, reset the pointer to NULL for the next namelist read.
95236
+2011-03-04 Jakub Jelinek <jakub@redhat.com>
95238
+ Backport from mainline
95240
+ * io/transfer.c (read_sf): Call fbuf_getptr only at the end,
95241
+ and subtract n, dtp->u.p.sf_seen_eor and seen_comma from it.
95243
+2011-03-04 Janne Blomqvist <jb@gcc.gnu.org>
95244
+ Jerry DeLisle <jvdelisle@gcc.gnu.org>
95246
+ Backport from mainline
95247
+ PR libfortran/47694
95248
+ * io/fbuf.h (fbuf_getptr): New inline function.
95249
+ * io/transfer.c (read_sf): Use fbuf_getptr and fbuf_getc to scan
95250
+ through the string instead of fbuf_read.
95252
+2011-02-22 Tobias Burnus <burnus@net-b.de>
95253
+ Kai-Uwe Eckhardt <kuehro@gmx.de>
95255
+ PR libfortran/47830
95256
+ * intrinsics/c99_functions.c (roundl): Make C valid for
95259
2010-12-16 Release Manager
95261
* GCC 4.5.2 released.
95262
--- a/src/libgfortran/generated/all_l1.c
95263
+++ b/src/libgfortran/generated/all_l1.c
95264
@@ -142,7 +142,7 @@
95266
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95267
if (extent[n] <= 0)
95272
base = array->data;
95273
--- a/src/libgfortran/generated/all_l16.c
95274
+++ b/src/libgfortran/generated/all_l16.c
95275
@@ -142,7 +142,7 @@
95277
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95278
if (extent[n] <= 0)
95283
base = array->data;
95284
--- a/src/libgfortran/generated/all_l2.c
95285
+++ b/src/libgfortran/generated/all_l2.c
95286
@@ -142,7 +142,7 @@
95288
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95289
if (extent[n] <= 0)
95294
base = array->data;
95295
--- a/src/libgfortran/generated/all_l4.c
95296
+++ b/src/libgfortran/generated/all_l4.c
95297
@@ -142,7 +142,7 @@
95299
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95300
if (extent[n] <= 0)
95305
base = array->data;
95306
--- a/src/libgfortran/generated/all_l8.c
95307
+++ b/src/libgfortran/generated/all_l8.c
95308
@@ -142,7 +142,7 @@
95310
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95311
if (extent[n] <= 0)
95316
base = array->data;
95317
--- a/src/libgfortran/generated/any_l1.c
95318
+++ b/src/libgfortran/generated/any_l1.c
95319
@@ -142,7 +142,7 @@
95321
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95322
if (extent[n] <= 0)
95327
base = array->data;
95328
--- a/src/libgfortran/generated/any_l16.c
95329
+++ b/src/libgfortran/generated/any_l16.c
95330
@@ -142,7 +142,7 @@
95332
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95333
if (extent[n] <= 0)
95338
base = array->data;
95339
--- a/src/libgfortran/generated/any_l2.c
95340
+++ b/src/libgfortran/generated/any_l2.c
95341
@@ -142,7 +142,7 @@
95343
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95344
if (extent[n] <= 0)
95349
base = array->data;
95350
--- a/src/libgfortran/generated/any_l4.c
95351
+++ b/src/libgfortran/generated/any_l4.c
95352
@@ -142,7 +142,7 @@
95354
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95355
if (extent[n] <= 0)
95360
base = array->data;
95361
--- a/src/libgfortran/generated/any_l8.c
95362
+++ b/src/libgfortran/generated/any_l8.c
95363
@@ -142,7 +142,7 @@
95365
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95366
if (extent[n] <= 0)
95371
base = array->data;
95372
--- a/src/libgfortran/generated/count_16_l.c
95373
+++ b/src/libgfortran/generated/count_16_l.c
95374
@@ -142,7 +142,7 @@
95376
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95377
if (extent[n] <= 0)
95382
base = array->data;
95383
--- a/src/libgfortran/generated/count_1_l.c
95384
+++ b/src/libgfortran/generated/count_1_l.c
95385
@@ -142,7 +142,7 @@
95387
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95388
if (extent[n] <= 0)
95393
base = array->data;
95394
--- a/src/libgfortran/generated/count_2_l.c
95395
+++ b/src/libgfortran/generated/count_2_l.c
95396
@@ -142,7 +142,7 @@
95398
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95399
if (extent[n] <= 0)
95404
base = array->data;
95405
--- a/src/libgfortran/generated/count_4_l.c
95406
+++ b/src/libgfortran/generated/count_4_l.c
95407
@@ -142,7 +142,7 @@
95409
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95410
if (extent[n] <= 0)
95415
base = array->data;
95416
--- a/src/libgfortran/generated/count_8_l.c
95417
+++ b/src/libgfortran/generated/count_8_l.c
95418
@@ -142,7 +142,7 @@
95420
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95421
if (extent[n] <= 0)
95426
base = array->data;
95427
--- a/src/libgfortran/generated/maxloc1_16_i1.c
95428
+++ b/src/libgfortran/generated/maxloc1_16_i1.c
95429
@@ -129,7 +129,7 @@
95431
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95432
if (extent[n] <= 0)
95437
base = array->data;
95438
--- a/src/libgfortran/generated/maxloc1_16_i16.c
95439
+++ b/src/libgfortran/generated/maxloc1_16_i16.c
95440
@@ -129,7 +129,7 @@
95442
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95443
if (extent[n] <= 0)
95448
base = array->data;
95449
--- a/src/libgfortran/generated/maxloc1_16_i2.c
95450
+++ b/src/libgfortran/generated/maxloc1_16_i2.c
95451
@@ -129,7 +129,7 @@
95453
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95454
if (extent[n] <= 0)
95459
base = array->data;
95460
--- a/src/libgfortran/generated/maxloc1_16_i4.c
95461
+++ b/src/libgfortran/generated/maxloc1_16_i4.c
95462
@@ -129,7 +129,7 @@
95464
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95465
if (extent[n] <= 0)
95470
base = array->data;
95471
--- a/src/libgfortran/generated/maxloc1_16_i8.c
95472
+++ b/src/libgfortran/generated/maxloc1_16_i8.c
95473
@@ -129,7 +129,7 @@
95475
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95476
if (extent[n] <= 0)
95481
base = array->data;
95482
--- a/src/libgfortran/generated/maxloc1_16_r10.c
95483
+++ b/src/libgfortran/generated/maxloc1_16_r10.c
95484
@@ -129,7 +129,7 @@
95486
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95487
if (extent[n] <= 0)
95492
base = array->data;
95493
--- a/src/libgfortran/generated/maxloc1_16_r16.c
95494
+++ b/src/libgfortran/generated/maxloc1_16_r16.c
95495
@@ -129,7 +129,7 @@
95497
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95498
if (extent[n] <= 0)
95503
base = array->data;
95504
--- a/src/libgfortran/generated/maxloc1_16_r4.c
95505
+++ b/src/libgfortran/generated/maxloc1_16_r4.c
95506
@@ -129,7 +129,7 @@
95508
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95509
if (extent[n] <= 0)
95514
base = array->data;
95515
--- a/src/libgfortran/generated/maxloc1_16_r8.c
95516
+++ b/src/libgfortran/generated/maxloc1_16_r8.c
95517
@@ -129,7 +129,7 @@
95519
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95520
if (extent[n] <= 0)
95525
base = array->data;
95526
--- a/src/libgfortran/generated/maxloc1_4_i1.c
95527
+++ b/src/libgfortran/generated/maxloc1_4_i1.c
95528
@@ -129,7 +129,7 @@
95530
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95531
if (extent[n] <= 0)
95536
base = array->data;
95537
--- a/src/libgfortran/generated/maxloc1_4_i16.c
95538
+++ b/src/libgfortran/generated/maxloc1_4_i16.c
95539
@@ -129,7 +129,7 @@
95541
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95542
if (extent[n] <= 0)
95547
base = array->data;
95548
--- a/src/libgfortran/generated/maxloc1_4_i2.c
95549
+++ b/src/libgfortran/generated/maxloc1_4_i2.c
95550
@@ -129,7 +129,7 @@
95552
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95553
if (extent[n] <= 0)
95558
base = array->data;
95559
--- a/src/libgfortran/generated/maxloc1_4_i4.c
95560
+++ b/src/libgfortran/generated/maxloc1_4_i4.c
95561
@@ -129,7 +129,7 @@
95563
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95564
if (extent[n] <= 0)
95569
base = array->data;
95570
--- a/src/libgfortran/generated/maxloc1_4_i8.c
95571
+++ b/src/libgfortran/generated/maxloc1_4_i8.c
95572
@@ -129,7 +129,7 @@
95574
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95575
if (extent[n] <= 0)
95580
base = array->data;
95581
--- a/src/libgfortran/generated/maxloc1_4_r10.c
95582
+++ b/src/libgfortran/generated/maxloc1_4_r10.c
95583
@@ -129,7 +129,7 @@
95585
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95586
if (extent[n] <= 0)
95591
base = array->data;
95592
--- a/src/libgfortran/generated/maxloc1_4_r16.c
95593
+++ b/src/libgfortran/generated/maxloc1_4_r16.c
95594
@@ -129,7 +129,7 @@
95596
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95597
if (extent[n] <= 0)
95602
base = array->data;
95603
--- a/src/libgfortran/generated/maxloc1_4_r4.c
95604
+++ b/src/libgfortran/generated/maxloc1_4_r4.c
95605
@@ -129,7 +129,7 @@
95607
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95608
if (extent[n] <= 0)
95613
base = array->data;
95614
--- a/src/libgfortran/generated/maxloc1_4_r8.c
95615
+++ b/src/libgfortran/generated/maxloc1_4_r8.c
95616
@@ -129,7 +129,7 @@
95618
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95619
if (extent[n] <= 0)
95624
base = array->data;
95625
--- a/src/libgfortran/generated/maxloc1_8_i1.c
95626
+++ b/src/libgfortran/generated/maxloc1_8_i1.c
95627
@@ -129,7 +129,7 @@
95629
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95630
if (extent[n] <= 0)
95635
base = array->data;
95636
--- a/src/libgfortran/generated/maxloc1_8_i16.c
95637
+++ b/src/libgfortran/generated/maxloc1_8_i16.c
95638
@@ -129,7 +129,7 @@
95640
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95641
if (extent[n] <= 0)
95646
base = array->data;
95647
--- a/src/libgfortran/generated/maxloc1_8_i2.c
95648
+++ b/src/libgfortran/generated/maxloc1_8_i2.c
95649
@@ -129,7 +129,7 @@
95651
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95652
if (extent[n] <= 0)
95657
base = array->data;
95658
--- a/src/libgfortran/generated/maxloc1_8_i4.c
95659
+++ b/src/libgfortran/generated/maxloc1_8_i4.c
95660
@@ -129,7 +129,7 @@
95662
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95663
if (extent[n] <= 0)
95668
base = array->data;
95669
--- a/src/libgfortran/generated/maxloc1_8_i8.c
95670
+++ b/src/libgfortran/generated/maxloc1_8_i8.c
95671
@@ -129,7 +129,7 @@
95673
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95674
if (extent[n] <= 0)
95679
base = array->data;
95680
--- a/src/libgfortran/generated/maxloc1_8_r10.c
95681
+++ b/src/libgfortran/generated/maxloc1_8_r10.c
95682
@@ -129,7 +129,7 @@
95684
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95685
if (extent[n] <= 0)
95690
base = array->data;
95691
--- a/src/libgfortran/generated/maxloc1_8_r16.c
95692
+++ b/src/libgfortran/generated/maxloc1_8_r16.c
95693
@@ -129,7 +129,7 @@
95695
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95696
if (extent[n] <= 0)
95701
base = array->data;
95702
--- a/src/libgfortran/generated/maxloc1_8_r4.c
95703
+++ b/src/libgfortran/generated/maxloc1_8_r4.c
95704
@@ -129,7 +129,7 @@
95706
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95707
if (extent[n] <= 0)
95712
base = array->data;
95713
--- a/src/libgfortran/generated/maxloc1_8_r8.c
95714
+++ b/src/libgfortran/generated/maxloc1_8_r8.c
95715
@@ -129,7 +129,7 @@
95717
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95718
if (extent[n] <= 0)
95723
base = array->data;
95724
--- a/src/libgfortran/generated/maxval_i1.c
95725
+++ b/src/libgfortran/generated/maxval_i1.c
95726
@@ -128,7 +128,7 @@
95728
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95729
if (extent[n] <= 0)
95734
base = array->data;
95735
--- a/src/libgfortran/generated/maxval_i16.c
95736
+++ b/src/libgfortran/generated/maxval_i16.c
95737
@@ -128,7 +128,7 @@
95739
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95740
if (extent[n] <= 0)
95745
base = array->data;
95746
--- a/src/libgfortran/generated/maxval_i2.c
95747
+++ b/src/libgfortran/generated/maxval_i2.c
95748
@@ -128,7 +128,7 @@
95750
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95751
if (extent[n] <= 0)
95756
base = array->data;
95757
--- a/src/libgfortran/generated/maxval_i4.c
95758
+++ b/src/libgfortran/generated/maxval_i4.c
95759
@@ -128,7 +128,7 @@
95761
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95762
if (extent[n] <= 0)
95767
base = array->data;
95768
--- a/src/libgfortran/generated/maxval_i8.c
95769
+++ b/src/libgfortran/generated/maxval_i8.c
95770
@@ -128,7 +128,7 @@
95772
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95773
if (extent[n] <= 0)
95778
base = array->data;
95779
--- a/src/libgfortran/generated/maxval_r10.c
95780
+++ b/src/libgfortran/generated/maxval_r10.c
95781
@@ -128,7 +128,7 @@
95783
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95784
if (extent[n] <= 0)
95789
base = array->data;
95790
--- a/src/libgfortran/generated/maxval_r16.c
95791
+++ b/src/libgfortran/generated/maxval_r16.c
95792
@@ -128,7 +128,7 @@
95794
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95795
if (extent[n] <= 0)
95800
base = array->data;
95801
--- a/src/libgfortran/generated/maxval_r4.c
95802
+++ b/src/libgfortran/generated/maxval_r4.c
95803
@@ -128,7 +128,7 @@
95805
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95806
if (extent[n] <= 0)
95811
base = array->data;
95812
--- a/src/libgfortran/generated/maxval_r8.c
95813
+++ b/src/libgfortran/generated/maxval_r8.c
95814
@@ -128,7 +128,7 @@
95816
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95817
if (extent[n] <= 0)
95822
base = array->data;
95823
--- a/src/libgfortran/generated/minloc1_16_i1.c
95824
+++ b/src/libgfortran/generated/minloc1_16_i1.c
95825
@@ -129,7 +129,7 @@
95827
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95828
if (extent[n] <= 0)
95833
base = array->data;
95834
--- a/src/libgfortran/generated/minloc1_16_i16.c
95835
+++ b/src/libgfortran/generated/minloc1_16_i16.c
95836
@@ -129,7 +129,7 @@
95838
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95839
if (extent[n] <= 0)
95844
base = array->data;
95845
--- a/src/libgfortran/generated/minloc1_16_i2.c
95846
+++ b/src/libgfortran/generated/minloc1_16_i2.c
95847
@@ -129,7 +129,7 @@
95849
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95850
if (extent[n] <= 0)
95855
base = array->data;
95856
--- a/src/libgfortran/generated/minloc1_16_i4.c
95857
+++ b/src/libgfortran/generated/minloc1_16_i4.c
95858
@@ -129,7 +129,7 @@
95860
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95861
if (extent[n] <= 0)
95866
base = array->data;
95867
--- a/src/libgfortran/generated/minloc1_16_i8.c
95868
+++ b/src/libgfortran/generated/minloc1_16_i8.c
95869
@@ -129,7 +129,7 @@
95871
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95872
if (extent[n] <= 0)
95877
base = array->data;
95878
--- a/src/libgfortran/generated/minloc1_16_r10.c
95879
+++ b/src/libgfortran/generated/minloc1_16_r10.c
95880
@@ -129,7 +129,7 @@
95882
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95883
if (extent[n] <= 0)
95888
base = array->data;
95889
--- a/src/libgfortran/generated/minloc1_16_r16.c
95890
+++ b/src/libgfortran/generated/minloc1_16_r16.c
95891
@@ -129,7 +129,7 @@
95893
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95894
if (extent[n] <= 0)
95899
base = array->data;
95900
--- a/src/libgfortran/generated/minloc1_16_r4.c
95901
+++ b/src/libgfortran/generated/minloc1_16_r4.c
95902
@@ -129,7 +129,7 @@
95904
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95905
if (extent[n] <= 0)
95910
base = array->data;
95911
--- a/src/libgfortran/generated/minloc1_16_r8.c
95912
+++ b/src/libgfortran/generated/minloc1_16_r8.c
95913
@@ -129,7 +129,7 @@
95915
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95916
if (extent[n] <= 0)
95921
base = array->data;
95922
--- a/src/libgfortran/generated/minloc1_4_i1.c
95923
+++ b/src/libgfortran/generated/minloc1_4_i1.c
95924
@@ -129,7 +129,7 @@
95926
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95927
if (extent[n] <= 0)
95932
base = array->data;
95933
--- a/src/libgfortran/generated/minloc1_4_i16.c
95934
+++ b/src/libgfortran/generated/minloc1_4_i16.c
95935
@@ -129,7 +129,7 @@
95937
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95938
if (extent[n] <= 0)
95943
base = array->data;
95944
--- a/src/libgfortran/generated/minloc1_4_i2.c
95945
+++ b/src/libgfortran/generated/minloc1_4_i2.c
95946
@@ -129,7 +129,7 @@
95948
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95949
if (extent[n] <= 0)
95954
base = array->data;
95955
--- a/src/libgfortran/generated/minloc1_4_i4.c
95956
+++ b/src/libgfortran/generated/minloc1_4_i4.c
95957
@@ -129,7 +129,7 @@
95959
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95960
if (extent[n] <= 0)
95965
base = array->data;
95966
--- a/src/libgfortran/generated/minloc1_4_i8.c
95967
+++ b/src/libgfortran/generated/minloc1_4_i8.c
95968
@@ -129,7 +129,7 @@
95970
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95971
if (extent[n] <= 0)
95976
base = array->data;
95977
--- a/src/libgfortran/generated/minloc1_4_r10.c
95978
+++ b/src/libgfortran/generated/minloc1_4_r10.c
95979
@@ -129,7 +129,7 @@
95981
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95982
if (extent[n] <= 0)
95987
base = array->data;
95988
--- a/src/libgfortran/generated/minloc1_4_r16.c
95989
+++ b/src/libgfortran/generated/minloc1_4_r16.c
95990
@@ -129,7 +129,7 @@
95992
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
95993
if (extent[n] <= 0)
95998
base = array->data;
95999
--- a/src/libgfortran/generated/minloc1_4_r4.c
96000
+++ b/src/libgfortran/generated/minloc1_4_r4.c
96001
@@ -129,7 +129,7 @@
96003
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96004
if (extent[n] <= 0)
96009
base = array->data;
96010
--- a/src/libgfortran/generated/minloc1_4_r8.c
96011
+++ b/src/libgfortran/generated/minloc1_4_r8.c
96012
@@ -129,7 +129,7 @@
96014
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96015
if (extent[n] <= 0)
96020
base = array->data;
96021
--- a/src/libgfortran/generated/minloc1_8_i1.c
96022
+++ b/src/libgfortran/generated/minloc1_8_i1.c
96023
@@ -129,7 +129,7 @@
96025
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96026
if (extent[n] <= 0)
96031
base = array->data;
96032
--- a/src/libgfortran/generated/minloc1_8_i16.c
96033
+++ b/src/libgfortran/generated/minloc1_8_i16.c
96034
@@ -129,7 +129,7 @@
96036
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96037
if (extent[n] <= 0)
96042
base = array->data;
96043
--- a/src/libgfortran/generated/minloc1_8_i2.c
96044
+++ b/src/libgfortran/generated/minloc1_8_i2.c
96045
@@ -129,7 +129,7 @@
96047
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96048
if (extent[n] <= 0)
96053
base = array->data;
96054
--- a/src/libgfortran/generated/minloc1_8_i4.c
96055
+++ b/src/libgfortran/generated/minloc1_8_i4.c
96056
@@ -129,7 +129,7 @@
96058
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96059
if (extent[n] <= 0)
96064
base = array->data;
96065
--- a/src/libgfortran/generated/minloc1_8_i8.c
96066
+++ b/src/libgfortran/generated/minloc1_8_i8.c
96067
@@ -129,7 +129,7 @@
96069
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96070
if (extent[n] <= 0)
96075
base = array->data;
96076
--- a/src/libgfortran/generated/minloc1_8_r10.c
96077
+++ b/src/libgfortran/generated/minloc1_8_r10.c
96078
@@ -129,7 +129,7 @@
96080
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96081
if (extent[n] <= 0)
96086
base = array->data;
96087
--- a/src/libgfortran/generated/minloc1_8_r16.c
96088
+++ b/src/libgfortran/generated/minloc1_8_r16.c
96089
@@ -129,7 +129,7 @@
96091
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96092
if (extent[n] <= 0)
96097
base = array->data;
96098
--- a/src/libgfortran/generated/minloc1_8_r4.c
96099
+++ b/src/libgfortran/generated/minloc1_8_r4.c
96100
@@ -129,7 +129,7 @@
96102
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96103
if (extent[n] <= 0)
96108
base = array->data;
96109
--- a/src/libgfortran/generated/minloc1_8_r8.c
96110
+++ b/src/libgfortran/generated/minloc1_8_r8.c
96111
@@ -129,7 +129,7 @@
96113
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96114
if (extent[n] <= 0)
96119
base = array->data;
96120
--- a/src/libgfortran/generated/minval_i1.c
96121
+++ b/src/libgfortran/generated/minval_i1.c
96122
@@ -128,7 +128,7 @@
96124
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96125
if (extent[n] <= 0)
96130
base = array->data;
96131
--- a/src/libgfortran/generated/minval_i16.c
96132
+++ b/src/libgfortran/generated/minval_i16.c
96133
@@ -128,7 +128,7 @@
96135
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96136
if (extent[n] <= 0)
96141
base = array->data;
96142
--- a/src/libgfortran/generated/minval_i2.c
96143
+++ b/src/libgfortran/generated/minval_i2.c
96144
@@ -128,7 +128,7 @@
96146
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96147
if (extent[n] <= 0)
96152
base = array->data;
96153
--- a/src/libgfortran/generated/minval_i4.c
96154
+++ b/src/libgfortran/generated/minval_i4.c
96155
@@ -128,7 +128,7 @@
96157
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96158
if (extent[n] <= 0)
96163
base = array->data;
96164
--- a/src/libgfortran/generated/minval_i8.c
96165
+++ b/src/libgfortran/generated/minval_i8.c
96166
@@ -128,7 +128,7 @@
96168
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96169
if (extent[n] <= 0)
96174
base = array->data;
96175
--- a/src/libgfortran/generated/minval_r10.c
96176
+++ b/src/libgfortran/generated/minval_r10.c
96177
@@ -128,7 +128,7 @@
96179
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96180
if (extent[n] <= 0)
96185
base = array->data;
96186
--- a/src/libgfortran/generated/minval_r16.c
96187
+++ b/src/libgfortran/generated/minval_r16.c
96188
@@ -128,7 +128,7 @@
96190
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96191
if (extent[n] <= 0)
96196
base = array->data;
96197
--- a/src/libgfortran/generated/minval_r4.c
96198
+++ b/src/libgfortran/generated/minval_r4.c
96199
@@ -128,7 +128,7 @@
96201
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96202
if (extent[n] <= 0)
96207
base = array->data;
96208
--- a/src/libgfortran/generated/minval_r8.c
96209
+++ b/src/libgfortran/generated/minval_r8.c
96210
@@ -128,7 +128,7 @@
96212
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96213
if (extent[n] <= 0)
96218
base = array->data;
96219
--- a/src/libgfortran/generated/product_c10.c
96220
+++ b/src/libgfortran/generated/product_c10.c
96221
@@ -128,7 +128,7 @@
96223
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96224
if (extent[n] <= 0)
96229
base = array->data;
96230
--- a/src/libgfortran/generated/product_c16.c
96231
+++ b/src/libgfortran/generated/product_c16.c
96232
@@ -128,7 +128,7 @@
96234
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96235
if (extent[n] <= 0)
96240
base = array->data;
96241
--- a/src/libgfortran/generated/product_c4.c
96242
+++ b/src/libgfortran/generated/product_c4.c
96243
@@ -128,7 +128,7 @@
96245
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96246
if (extent[n] <= 0)
96251
base = array->data;
96252
--- a/src/libgfortran/generated/product_c8.c
96253
+++ b/src/libgfortran/generated/product_c8.c
96254
@@ -128,7 +128,7 @@
96256
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96257
if (extent[n] <= 0)
96262
base = array->data;
96263
--- a/src/libgfortran/generated/product_i1.c
96264
+++ b/src/libgfortran/generated/product_i1.c
96265
@@ -128,7 +128,7 @@
96267
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96268
if (extent[n] <= 0)
96273
base = array->data;
96274
--- a/src/libgfortran/generated/product_i16.c
96275
+++ b/src/libgfortran/generated/product_i16.c
96276
@@ -128,7 +128,7 @@
96278
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96279
if (extent[n] <= 0)
96284
base = array->data;
96285
--- a/src/libgfortran/generated/product_i2.c
96286
+++ b/src/libgfortran/generated/product_i2.c
96287
@@ -128,7 +128,7 @@
96289
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96290
if (extent[n] <= 0)
96295
base = array->data;
96296
--- a/src/libgfortran/generated/product_i4.c
96297
+++ b/src/libgfortran/generated/product_i4.c
96298
@@ -128,7 +128,7 @@
96300
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96301
if (extent[n] <= 0)
96306
base = array->data;
96307
--- a/src/libgfortran/generated/product_i8.c
96308
+++ b/src/libgfortran/generated/product_i8.c
96309
@@ -128,7 +128,7 @@
96311
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96312
if (extent[n] <= 0)
96317
base = array->data;
96318
--- a/src/libgfortran/generated/product_r10.c
96319
+++ b/src/libgfortran/generated/product_r10.c
96320
@@ -128,7 +128,7 @@
96322
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96323
if (extent[n] <= 0)
96328
base = array->data;
96329
--- a/src/libgfortran/generated/product_r16.c
96330
+++ b/src/libgfortran/generated/product_r16.c
96331
@@ -128,7 +128,7 @@
96333
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96334
if (extent[n] <= 0)
96339
base = array->data;
96340
--- a/src/libgfortran/generated/product_r4.c
96341
+++ b/src/libgfortran/generated/product_r4.c
96342
@@ -128,7 +128,7 @@
96344
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96345
if (extent[n] <= 0)
96350
base = array->data;
96351
--- a/src/libgfortran/generated/product_r8.c
96352
+++ b/src/libgfortran/generated/product_r8.c
96353
@@ -128,7 +128,7 @@
96355
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96356
if (extent[n] <= 0)
96361
base = array->data;
96362
--- a/src/libgfortran/generated/sum_c10.c
96363
+++ b/src/libgfortran/generated/sum_c10.c
96364
@@ -128,7 +128,7 @@
96366
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96367
if (extent[n] <= 0)
96372
base = array->data;
96373
--- a/src/libgfortran/generated/sum_c16.c
96374
+++ b/src/libgfortran/generated/sum_c16.c
96375
@@ -128,7 +128,7 @@
96377
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96378
if (extent[n] <= 0)
96383
base = array->data;
96384
--- a/src/libgfortran/generated/sum_c4.c
96385
+++ b/src/libgfortran/generated/sum_c4.c
96386
@@ -128,7 +128,7 @@
96388
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96389
if (extent[n] <= 0)
96394
base = array->data;
96395
--- a/src/libgfortran/generated/sum_c8.c
96396
+++ b/src/libgfortran/generated/sum_c8.c
96397
@@ -128,7 +128,7 @@
96399
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96400
if (extent[n] <= 0)
96405
base = array->data;
96406
--- a/src/libgfortran/generated/sum_i1.c
96407
+++ b/src/libgfortran/generated/sum_i1.c
96408
@@ -128,7 +128,7 @@
96410
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96411
if (extent[n] <= 0)
96416
base = array->data;
96417
--- a/src/libgfortran/generated/sum_i16.c
96418
+++ b/src/libgfortran/generated/sum_i16.c
96419
@@ -128,7 +128,7 @@
96421
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96422
if (extent[n] <= 0)
96427
base = array->data;
96428
--- a/src/libgfortran/generated/sum_i2.c
96429
+++ b/src/libgfortran/generated/sum_i2.c
96430
@@ -128,7 +128,7 @@
96432
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96433
if (extent[n] <= 0)
96438
base = array->data;
96439
--- a/src/libgfortran/generated/sum_i4.c
96440
+++ b/src/libgfortran/generated/sum_i4.c
96441
@@ -128,7 +128,7 @@
96443
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96444
if (extent[n] <= 0)
96449
base = array->data;
96450
--- a/src/libgfortran/generated/sum_i8.c
96451
+++ b/src/libgfortran/generated/sum_i8.c
96452
@@ -128,7 +128,7 @@
96454
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96455
if (extent[n] <= 0)
96460
base = array->data;
96461
--- a/src/libgfortran/generated/sum_r10.c
96462
+++ b/src/libgfortran/generated/sum_r10.c
96463
@@ -128,7 +128,7 @@
96465
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96466
if (extent[n] <= 0)
96471
base = array->data;
96472
--- a/src/libgfortran/generated/sum_r16.c
96473
+++ b/src/libgfortran/generated/sum_r16.c
96474
@@ -128,7 +128,7 @@
96476
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96477
if (extent[n] <= 0)
96482
base = array->data;
96483
--- a/src/libgfortran/generated/sum_r4.c
96484
+++ b/src/libgfortran/generated/sum_r4.c
96485
@@ -128,7 +128,7 @@
96487
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96488
if (extent[n] <= 0)
96493
base = array->data;
96494
--- a/src/libgfortran/generated/sum_r8.c
96495
+++ b/src/libgfortran/generated/sum_r8.c
96496
@@ -128,7 +128,7 @@
96498
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96499
if (extent[n] <= 0)
96504
base = array->data;
96505
--- a/src/libgfortran/intrinsics/c99_functions.c
96506
+++ b/src/libgfortran/intrinsics/c99_functions.c
96507
@@ -601,7 +601,7 @@
96508
if (x > DBL_MAX || x < -DBL_MAX)
96510
#ifdef HAVE_NEXTAFTERL
96511
- static long double prechalf = nexafterl (0.5L, LDBL_MAX);
96512
+ long double prechalf = nextafterl (0.5L, LDBL_MAX);
96514
static long double prechalf = 0.5L;
96516
--- a/src/libgfortran/io/fbuf.h
96517
+++ b/src/libgfortran/io/fbuf.h
96519
return fbuf_getc_refill (u);
96522
+static inline char *
96523
+fbuf_getptr (gfc_unit * u)
96525
+ return (char*) (u->fbuf->buf + u->fbuf->pos);
96529
--- a/src/libgfortran/io/list_read.c
96530
+++ b/src/libgfortran/io/list_read.c
96531
@@ -2863,6 +2863,11 @@
96534
char nml_err_msg[200];
96536
+ /* Initialize the error string buffer just in case we get an unexpected fail
96537
+ somewhere and end up at nml_err_ret. */
96538
+ strcpy (nml_err_msg, "Internal namelist read error");
96540
/* Pointer to the previously read object, in case attempt is made to read
96541
new object name. Should this fail, error message can give previous
96543
@@ -2950,7 +2955,11 @@
96548
+ /* Reset the previous namelist pointer if we know we are not going
96549
+ to be doing multiple reads within a single namelist object. */
96550
+ if (prev_nl && prev_nl->var_rank == 0)
96554
dtp->u.p.eof_jump = NULL;
96556
--- a/src/libgfortran/io/transfer.c
96557
+++ b/src/libgfortran/io/transfer.c
96558
@@ -236,16 +236,16 @@
96559
read_sf (st_parameter_dt *dtp, int * length)
96561
static char *empty_string[0];
96562
- char *base, *p, q;
96564
int n, lorig, seen_comma;
96566
/* If we have seen an eor previously, return a length of 0. The
96567
- caller is responsible for correctly padding the input field. */
96568
+ * caller is responsible for correctly padding the input field. */
96569
if (dtp->u.p.sf_seen_eor)
96572
/* Just return something that isn't a NULL pointer, otherwise the
96573
- caller thinks an error occured. */
96574
+ * caller thinks an error occured. */
96575
return (char*) empty_string;
96578
@@ -253,42 +253,36 @@
96580
/* Read data into format buffer and scan through it. */
96582
- base = p = fbuf_read (dtp->u.p.current_unit, length);
96583
- if (base == NULL)
96586
while (n < *length)
96590
- if (q == '\n' || q == '\r')
96591
+ q = fbuf_getc (dtp->u.p.current_unit);
96594
+ else if (q == '\n' || q == '\r')
96596
/* Unexpected end of line. Set the position. */
96597
- fbuf_seek (dtp->u.p.current_unit, n + 1 ,SEEK_CUR);
96598
dtp->u.p.sf_seen_eor = 1;
96600
/* If we see an EOR during non-advancing I/O, we need to skip
96601
- the rest of the I/O statement. Set the corresponding flag. */
96602
+ * the rest of the I/O statement. Set the corresponding flag. */
96603
if (dtp->u.p.advance_status == ADVANCE_NO || dtp->u.p.seen_dollar)
96604
dtp->u.p.eor_condition = 1;
96606
/* If we encounter a CR, it might be a CRLF. */
96607
if (q == '\r') /* Probably a CRLF */
96609
- /* See if there is an LF. Use fbuf_read rather then fbuf_getc so
96610
- the position is not advanced unless it really is an LF. */
96612
- p = fbuf_read (dtp->u.p.current_unit, &readlen);
96613
- if (*p == '\n' && readlen == 1)
96615
- dtp->u.p.sf_seen_eor = 2;
96616
- fbuf_seek (dtp->u.p.current_unit, 1 ,SEEK_CUR);
96618
+ /* See if there is an LF. */
96619
+ q2 = fbuf_getc (dtp->u.p.current_unit);
96621
+ dtp->u.p.sf_seen_eor = 2;
96622
+ else if (q2 != EOF) /* Oops, seek back. */
96623
+ fbuf_seek (dtp->u.p.current_unit, -1, SEEK_CUR);
96626
/* Without padding, terminate the I/O statement without assigning
96627
- the value. With padding, the value still needs to be assigned,
96628
- so we can just continue with a short read. */
96629
+ * the value. With padding, the value still needs to be assigned,
96630
+ * so we can just continue with a short read. */
96631
if (dtp->u.p.current_unit->pad_status == PAD_NO)
96633
generate_error (&dtp->common, LIBERROR_EOR, NULL);
96634
@@ -299,25 +293,23 @@
96637
/* Short circuit the read if a comma is found during numeric input.
96638
- The flag is set to zero during character reads so that commas in
96639
- strings are not ignored */
96641
+ * The flag is set to zero during character reads so that commas in
96642
+ * strings are not ignored */
96643
+ else if (q == ',')
96644
if (dtp->u.p.sf_read_comma == 1)
96647
notify_std (&dtp->common, GFC_STD_GNU,
96648
"Comma in formatted numeric read.");
96657
- fbuf_seek (dtp->u.p.current_unit, n + seen_comma, SEEK_CUR);
96660
/* A short read implies we hit EOF, unless we hit EOR, a comma, or
96661
- some other stuff. Set the relevant flags. */
96662
+ * some other stuff. Set the relevant flags. */
96663
if (lorig > *length && !dtp->u.p.sf_seen_eor && !seen_comma)
96666
@@ -352,7 +344,12 @@
96667
if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0)
96668
dtp->u.p.size_used += (GFC_IO_INT) n;
96671
+ /* We can't call fbuf_getptr before the loop doing fbuf_getc, because
96672
+ * fbuf_getc might reallocate the buffer. So return current pointer
96673
+ * minus all the advances, which is n plus up to two characters
96674
+ * of newline or comma. */
96675
+ return fbuf_getptr (dtp->u.p.current_unit)
96676
+ - n - dtp->u.p.sf_seen_eor - seen_comma;
96680
--- a/src/libgfortran/m4/ifunction.m4
96681
+++ b/src/libgfortran/m4/ifunction.m4
96682
@@ -116,7 +116,7 @@
96684
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96685
if (extent[n] <= 0)
96690
base = array->data;
96691
--- a/src/libgfortran/m4/ifunction_logical.m4
96692
+++ b/src/libgfortran/m4/ifunction_logical.m4
96693
@@ -130,7 +130,7 @@
96695
dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
96696
if (extent[n] <= 0)
96701
base = array->data;
96702
--- a/src/libgomp/ChangeLog
96703
+++ b/src/libgomp/ChangeLog
96705
+2011-02-27 Tobias Burnus <burnus@net-b.de>
96707
+ Backport from mainline
96708
+ 2011-02-27 Jakub Jelinek <jakub@redhat.com>
96711
+ * testsuite/libgomp.fortran/task3.f90: New test.
96714
+2011-01-16 Jakub Jelinek <jakub@redhat.com>
96716
+ Backport from mainline
96717
+ 2010-12-14 Jakub Jelinek <jakub@redhat.com>
96720
+ * libgomp.fortran/allocatable6.f90: New test.
96722
+2010-12-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
96724
+ Backport from mainline:
96725
+ 2010-12-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
96727
+ * configure.tgt (mips-sgi-irix6*): Add -lpthread to XLDFLAGS.
96729
2010-12-16 Release Manager
96731
* GCC 4.5.2 released.
96732
--- a/src/libgomp/configure.tgt
96733
+++ b/src/libgomp/configure.tgt
96734
@@ -125,6 +125,10 @@
96735
config_path="bsd posix"
96739
+ # Need to link with -lpthread so libgomp.so is self-contained.
96740
+ XLDFLAGS="${XLDFLAGS} -lpthread"
96745
--- a/src/libgomp/testsuite/libgomp.fortran/allocatable6.f90
96746
+++ b/src/libgomp/testsuite/libgomp.fortran/allocatable6.f90
96748
+! PR fortran/46874
96752
+ subroutine sub (a, b, c, d, n)
96754
+ integer, allocatable :: a(:), b(:), c(:), d(:)
96758
+ integer, allocatable :: a(:), b(:), c(:), d(:)
96760
+ allocate (a(50), b(50), c(50), d(50))
96762
+ a(i) = 2 + modulo (i, 7)
96763
+ b(i) = 179 - modulo (i, 11)
96767
+ call sub (a, b, c, d, 50)
96770
+ if (i .eq. 3) then
96772
+ else if (i .gt. 1 .and. i .lt. 9) then
96775
+ if (c(i) .ne. j) call abort
96776
+ j = 179 - modulo (i, 11)
96777
+ if (i .gt. 1 .and. i .lt. 9) j = i
96778
+ if (d(i) .ne. j) call abort
96780
+ deallocate (a, b, c, d)
96783
+subroutine sub (a, b, c, d, n)
96785
+ integer, allocatable :: a(:), b(:), c(:), d(:)
96786
+!$omp parallel do shared(a, b) reduction(+:c) reduction(min:d)
96788
+ c(a(i)) = c(a(i)) + 1
96789
+ d(i) = min(d(i), b(i))
96790
+ d(a(i)) = min(d(a(i)), a(i))
96793
--- a/src/libgomp/testsuite/libgomp.fortran/task3.f90
96794
+++ b/src/libgomp/testsuite/libgomp.fortran/task3.f90
96797
+! { dg-options "-fopenmp" }
96799
+! PR fortran/47886
96801
+! Test case contributed by Bill Long
96803
+! derived from OpenMP test OMP3f/F03_2_7_1d.F90
96804
+program F03_2_7_1d
96807
+ integer, parameter :: NT = 4
96808
+ integer :: sum = 0
96810
+ call omp_set_num_threads(NT);
96813
+ !$omp task if(omp_get_num_threads() > 0)
96817
+ !$omp end parallel
96818
+ if (sum /= NT) then
96819
+ print *, "FAIL - sum == ", sum, " (expected ", NT, ")"
96822
+end program F03_2_7_1d
96823
--- a/src/libjava/ChangeLog
96824
+++ b/src/libjava/ChangeLog
96826
+2011-01-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
96828
+ Backport from mainline:
96829
+ 2011-01-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
96831
+ * testsuite/libjava.jni/jni.exp (gcj_jni_get_cxxflags_invocation):
96832
+ Add -shared-libgcc to cxxflags for *-*-solaris*.
96835
+2010-12-13 Andrew John Hughes <ahughes@redhat.com>
96838
+ * libjava/java/security/VMAccessController.java:
96839
+ (DEFAULT_CONTEXT): Create ProtectionDomain with
96840
+ four argument constructor (arguments are the same
96841
+ as those implied by the two argument constructor).
96842
+ (getContext()): Create ProtectionDomain instances
96843
+ with four argument constructor using a null Principal
96844
+ array (as before) but including the classloader, which
96845
+ was always null before.
96847
2010-12-16 Release Manager
96849
* GCC 4.5.2 released.
96850
--- a/src/libjava/java/security/VMAccessController.java
96851
+++ b/src/libjava/java/security/VMAccessController.java
96853
Permissions permissions = new Permissions();
96854
permissions.add(new AllPermission());
96855
ProtectionDomain[] domain = new ProtectionDomain[] {
96856
- new ProtectionDomain(source, permissions)
96857
+ new ProtectionDomain(source, permissions, null, null)
96859
DEFAULT_CONTEXT = new AccessControlContext(domain);
96861
@@ -178,12 +178,13 @@
96862
for (int i = 3; i < classes.length; i++)
96864
Class clazz = classes[i];
96865
+ ClassLoader loader = clazz.getClassLoader();
96869
debug("checking " + clazz);
96870
// subject to getClassLoader RuntimePermission
96871
- debug("loader = " + clazz.getClassLoader());
96872
+ debug("loader = " + loader);
96875
if (privileged && i == classes.length - 2)
96876
@@ -208,7 +209,8 @@
96877
// Create a static snapshot of this domain, which may change over time
96878
// if the current policy changes.
96879
domains.add(new ProtectionDomain(domain.getCodeSource(),
96880
- domain.getPermissions()));
96881
+ domain.getPermissions(),
96886
--- a/src/libjava/testsuite/libjava.jni/jni.exp
96887
+++ b/src/libjava/testsuite/libjava.jni/jni.exp
96888
@@ -274,8 +274,10 @@
96889
eval lappend cxxflags "-shared-libgcc -lgcj $libiconv"
96892
+ # Make sure libgcc unwinder is used on 64-bit Solaris 10+/x86 rather than
96894
if { [istarget "*-*-solaris*"] } {
96895
- lappend cxxflags "-lsocket"
96896
+ lappend cxxflags "-shared-libgcc"
96900
--- a/src/libstdc++-v3/ChangeLog
96901
+++ b/src/libstdc++-v3/ChangeLog
96903
+2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
96905
+ * testsuite/22_locale/num_put/put/char/14220.cc: Don't xfail on
96906
+ sparc*-sun-solaris2.10 && lp64.
96908
+2011-03-14 Andrey Zholos <aaz@althenia.net>
96910
+ PR libstdc++/48114
96911
+ * include/bits/random.tcc (binomial_distribution<>::operator()):
96912
+ Fix thinko in computation, __param.p() is a double.
96914
+2011-02-25 Johannes Singler <singler@kit.edu>
96916
+ PR libstdc++/47433
96917
+ * include/parallel/losertree.h
96918
+ (_LoserTree<>::__delete_min_insert):
96919
+ Do not qualify swap with std:: for value type,
96920
+ but include a using directive instead.
96921
+ (_LoserTreeUnguarded<>::__delete_min_insert): Likewise.
96922
+ * include/parallel/balanced_quicksort.h (__qsb_divide):
96923
+ Use std::iter_swap instead of std::swap.
96924
+ (__qsb_local_sort_with_helping): Likewise.
96925
+ * include/parallel/partition.h (__parallel_partition):
96926
+ Likewise. (__parallel_nth_element): Likewise.
96928
+2011-02-25 Johannes Singler <singler@kit.edu>
96930
+ * include/parallel/numeric (inner_product, partial_sum):
96931
+ Qualify subsequent call with __gnu_parallel instead of
96932
+ _GLIBCXX_STD_P to reenable parallel execution without ambiguity.
96933
+ * include/parallel/algobase.h (equal): Likewise.
96934
+ * include/parallel/algo.h (find_first_of, search_n, merge,
96935
+ nth_element, partial_sort, max_element, min_element): Likewise.
96936
+ * testsuite/25_algorithms/headers/algorithm/
96937
+ parallel_algorithm_mixed1.cc (main): Add respective test cases.
96938
+ * testsuite/25_algorithms/headers/algorithm/
96939
+ parallel_algorithm_mixed2.cc (main): Likewise.
96940
+ * testsuite/26_numerics/headers/numeric/
96941
+ parallel_numeric_mixed1.cc (main): Likewise.
96942
+ * testsuite/26_numerics/headers/numeric/
96943
+ parallel_numeric_mixed2.cc (main): Likewise.
96945
+2011-02-13 Gerald Pfeifer <gerald@pfeifer.com>
96947
+ * doc/xml/faq.xml: Adjust link to bug database.
96948
+ Remove old item on broken header files.
96950
+2011-02-12 Paolo Carlini <paolo.carlini@oracle.com>
96952
+ PR libstdc++/47709
96953
+ * include/ext/algorithm (is_heap): In C++0x mode import from
96955
+ * testsuite/ext/is_heap/47709.cc: New.
96957
+2011-02-08 Jonathan Wakely <jwakely.gcc@gmail.com>
96959
+ * doc/xml/gnu/gpl-2.0.xml: Remove.
96960
+ * doc/Makefile.am: Update.
96961
+ * doc/Makefile.in: Regenerate.
96963
+2011-02-06 Gerald Pfeifer <gerald@pfeifer.com>
96965
+ * doc/xml/manual/debug.xml: Use GDB instead of gdb.
96966
+ Adjust link to GDB manual.
96968
+2011-02-01 Paolo Carlini <paolo.carlini@oracle.com>
96970
+ PR libstdc++/46914
96971
+ * include/bits/atomic_0.h (_ATOMIC_STORE_, _ATOMIC_MODIFY_,
96972
+ _ATOMIC_CMPEXCHNG_): Rename __v -> __w, and __m -> __n, to
96973
+ avoid name conflicts.
96975
+2011-01-30 Gerald Pfeifer <gerald@pfeifer.com>
96977
+ * doc/xml/manual/codecvt.xml: Fix link to The Austin Common
96978
+ Standards Revision Group.
96979
+ * doc/xml/manual/locale.xml: Ditto.
96980
+ * doc/xml/manual/messages.xml: Ditto.
96981
+ * doc/xml/manual/using_exceptions.xml: Ditto.
96983
+2011-01-19 Graham Reed <greed@pobox.com>
96985
+ PR libstdc++/47354
96986
+ * src/bitmap_allocator.cc (free_list::_M_get): Lock mutex.
96988
+2010-12-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
96990
+ Backport from mainline:
96991
+ 2010-12-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
96993
+ * testsuite/lib/libstdc++.exp (v3-build_support): Delete
96994
+ libtestc++.a before creation.
96996
2010-12-16 Release Manager
96998
* GCC 4.5.2 released.
96999
82870
--- a/src/libstdc++-v3/acinclude.m4
97000
82871
+++ b/src/libstdc++-v3/acinclude.m4
97001
82872
@@ -95,7 +95,7 @@
97494
83345
<para>The guideline is simple: the more recent the C++ library, the
97495
83346
more recent the C library. (This is also documented in the main
97496
@@ -745,7 +747,7 @@
97499
Before reporting a bug, please examine the
97500
- <ulink url="http://gcc.gnu.org/bugs.html">bugs database</ulink> with the
97501
+ <ulink url="http://gcc.gnu.org/bugs/">bugs database</ulink> with the
97502
category set to <quote>g++</quote>.
97505
@@ -848,17 +850,9 @@
97507
<answer id="a-v2_headers">
97509
- If you have found an extremely broken header file which is
97510
- causing problems for you, look carefully before submitting a
97511
- "high" priority bug report (which you probably
97512
- shouldn't do anyhow; see the last paragraph of the page
97513
- describing <ulink url="http://gcc.gnu.org/bugs.html">the GCC
97514
- bug database</ulink>).
97517
- If the headers are in <filename>${prefix}/include/g++-3</filename>, or
97518
- if the installed library's name looks like
97519
- <filename>libstdc++-2.10.a</filename> or
97520
+ If you are using headers in
97521
+ <filename>${prefix}/include/g++-3</filename>, or if the installed
97522
+ library's name looks like <filename>libstdc++-2.10.a</filename> or
97523
<filename>libstdc++-libc6-2.10.so</filename>, then you are using the
97524
old libstdc++-v2 library, which is nonstandard and
97525
unmaintained. Do not report problems with -v2 to the -v3
97526
--- a/src/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml
97527
+++ b/src/libstdc++-v3/doc/xml/gnu/gpl-2.0.xml
97529
-<?xml version='1.0' encoding='ISO-8859-1'?>
97530
-<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
97531
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
97532
-<appendix id="appendix.gpl-2.0">
97534
- <title>GNU General Public License</title>
97535
- <pubdate>Version 2, June 1991</pubdate>
97537
- <year>1989, 1991</year>
97538
- <holder>Free Software Foundation, Inc.</holder>
97540
- <legalnotice id="gpl-legalnotice">
97542
- <address>Free Software Foundation, Inc.
97543
- <street>51 Franklin Street, Fifth Floor</street>,
97544
- <city>Boston</city>, <state>MA</state> <postcode>02110-1301</postcode>
97545
- <country>USA</country>
97548
- <para>Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.</para>
97550
- <releaseinfo>Version 2, June 1991</releaseinfo>
97552
- <title>GNU General Public License</title>
97553
- <section id="gpl-1">
97554
- <title>Preamble</title>
97555
- <para>The licenses for most software are designed to take away your
97556
- freedom to share and change it. By contrast, the GNU General Public License is
97557
- intended to guarantee your freedom to share and change
97558
- free software - to make sure the software is free for all its users.
97559
- This General Public License applies to most of the Free Software
97560
- Foundation's software and to any other program whose authors commit
97561
- to using it. (Some other Free Software Foundation software is covered
97562
- by the GNU Library General Public License instead.) You can apply it
97563
- to your programs, too.</para>
97565
- <para>When we speak of free software, we are referring to freedom, not price.
97566
- Our General Public Licenses are designed to make sure that you have the
97567
- freedom to distribute copies of free software (and charge for this
97568
- service if you wish), that you receive source code or can get it if you
97569
- want it, that you can change the software or use pieces of it in new free
97570
- programs; and that you know you can do these things.</para>
97572
- <para>To protect your rights, we need to make restrictions that forbid anyone
97573
- to deny you these rights or to ask you to surrender the rights. These
97574
- restrictions translate to certain responsibilities for you if you distribute
97575
- copies of the software, or if you modify it.</para>
97577
- <para>For example, if you distribute copies of such a program, whether gratis or
97578
- for a fee, you must give the recipients all the rights that you have. You
97579
- must make sure that they, too, receive or can get the source code. And you
97580
- must show them these terms so they know their rights.</para>
97582
- <para>We protect your rights with two steps:
97585
- <para>copyright the software, and</para>
97588
- <para>offer you this license which gives you legal permission to copy,
97589
- distribute and/or modify the software.</para>
97594
- <para>Also, for each author's protection and ours, we want to make certain that
97595
- everyone understands that there is no warranty for this free software. If
97596
- the software is modified by someone else and passed on, we want its
97597
- recipients to know that what they have is not the original, so that any
97598
- problems introduced by others will not reflect on the original authors'
97599
- reputations.</para>
97601
- <para>Finally, any free program is threatened constantly by software patents.
97602
- We wish to avoid the danger that redistributors of a free program will
97603
- individually obtain patent licenses, in effect making the program
97604
- proprietary. To prevent this, we have made it clear that any patent must be
97605
- licensed for everyone's free use or not licensed at all.</para>
97607
- <para>The precise terms and conditions for copying, distribution and modification
97610
- <section id="gpl-2">
97611
- <title>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</title>
97612
- <section id="gpl-2-0">
97613
- <title>Section 0</title>
97614
- <para>This License applies to any program or other work which contains a notice
97615
- placed by the copyright holder saying it may be distributed under the terms
97616
- of this General Public License. The <quote>Program</quote>, below, refers to any such
97617
- program or work, and a
97618
- <quote>work based on the Program</quote> means either
97619
- the Program or any derivative work under copyright law: that is to say, a
97620
- work containing the Program or a portion of it, either verbatim or with
97621
- modifications and/or translated into another language. (Hereinafter, translation
97622
- is included without limitation in the term
97623
- <quote>modification</quote>.) Each licensee is addressed as <quote>you</quote>.</para>
97625
- <para>Activities other than copying, distribution and modification are not covered by
97626
- this License; they are outside its scope. The act of running the Program is not
97627
- restricted, and the output from the Program is covered only if its contents
97628
- constitute a work based on the Program (independent of having been made by running
97629
- the Program). Whether that is true depends on what the Program does.</para>
97631
- <section id="gpl-2-1">
97632
- <title>Section 1</title>
97633
- <para>You may copy and distribute verbatim copies of the Program's source code as you
97634
- receive it, in any medium, provided that you conspicuously and appropriately
97635
- publish on each copy an appropriate copyright notice and disclaimer of warranty;
97636
- keep intact all the notices that refer to this License and to the absence of any
97637
- warranty; and give any other recipients of the Program a copy of this License
97638
- along with the Program.</para>
97640
- <para>You may charge a fee for the physical act of transferring a copy, and you may at
97641
- your option offer warranty protection in exchange for a fee.</para>
97643
- <section id="gpl-2-2">
97644
- <title>Section 2</title>
97645
- <para>You may modify your copy or copies of the Program or any portion of it, thus
97646
- forming a work based on the Program, and copy and distribute such modifications
97647
- or work under the terms of
97648
- <link linkend="gpl-2-1">Section 1</link> above, provided
97649
- that you also meet all of these conditions:
97650
- <orderedlist numeration="loweralpha">
97652
- <para>You must cause the modified files to carry prominent notices stating that
97653
- you changed the files and the date of any change.</para>
97656
- <para>You must cause any work that you distribute or publish, that in whole or
97657
- in part contains or is derived from the Program or any part thereof, to be
97658
- licensed as a whole at no charge to all third parties under the terms of
97659
- this License.</para>
97662
- <para>If the modified program normally reads commands interactively when run, you
97663
- must cause it, when started running for such interactive use in the most
97664
- ordinary way, to print or display an announcement including an appropriate
97665
- copyright notice and a notice that there is no warranty (or else, saying
97666
- that you provide a warranty) and that users may redistribute the program
97667
- under these conditions, and telling the user how to view a copy of this
97668
- License. (Exception: If the Program itself is interactive but does not
97669
- normally print such an announcement, your work based on the Program is not
97670
- required to print an announcement.)</para>
97675
- <para>These requirements apply to the modified work as a whole. If identifiable sections
97676
- of that work are not derived from the Program, and can be reasonably considered
97677
- independent and separate works in themselves, then this License, and its terms,
97678
- do not apply to those sections when you distribute them as separate works. But when
97679
- you distribute the same sections as part of a whole which is a work based on the
97680
- Program, the distribution of the whole must be on the terms of this License, whose
97681
- permissions for other licensees extend to the entire whole, and thus to each and
97682
- every part regardless of who wrote it.</para>
97684
- <para>Thus, it is not the intent of this section to claim rights or contest your rights
97685
- to work written entirely by you; rather, the intent is to exercise the right to control
97686
- the distribution of derivative or collective works based on the Program.</para>
97688
- <para>In addition, mere aggregation of another work not based on the Program with the Program
97689
- (or with a work based on the Program) on a volume of a storage or distribution medium
97690
- does not bring the other work under the scope of this License.</para>
97692
- <section id="gpl-2-3">
97693
- <title>Section 3</title>
97694
- <para>You may copy and distribute the Program (or a work based on it, under
97695
- <link linkend="gpl-2-2">Section 2</link> in object code or executable form under the terms of
97696
- <link linkend="gpl-2-1">Sections 1</link> and
97697
- <link linkend="gpl-2-2">2</link> above provided that you also do one of the following:
97698
- <orderedlist numeration="loweralpha">
97700
- <para>Accompany it with the complete corresponding machine-readable source code, which
97701
- must be distributed under the terms of Sections 1 and 2 above on a medium
97702
- customarily used for software interchange; or,</para>
97705
- <para>Accompany it with a written offer, valid for at least three years, to give any
97706
- third party, for a charge no more than your cost of physically performing source
97707
- distribution, a complete machine-readable copy of the corresponding source code,
97708
- to be distributed under the terms of Sections 1 and 2 above on a medium customarily
97709
- used for software interchange; or,</para>
97712
- <para>Accompany it with the information you received as to the offer to distribute
97713
- corresponding source code. (This alternative is allowed only for noncommercial
97714
- distribution and only if you received the program in object code or executable form
97715
- with such an offer, in accord with Subsection b above.)</para>
97720
- <para>The source code for a work means the preferred form of the work for making modifications
97721
- to it. For an executable work, complete source code means all the source code for all modules
97722
- it contains, plus any associated interface definition files, plus the scripts used to control
97723
- compilation and installation of the executable. However, as a special exception, the source
97724
- code distributed need not include anything that is normally distributed (in either source or
97725
- binary form) with the major components (compiler, kernel, and so on) of the operating system
97726
- on which the executable runs, unless that component itself accompanies the executable.</para>
97728
- <para>If distribution of executable or object code is made by offering access to copy from a
97729
- designated place, then offering equivalent access to copy the source code from the same place
97730
- counts as distribution of the source code, even though third parties are not compelled to
97731
- copy the source along with the object code.</para>
97733
- <section id="gpl-2-4">
97734
- <title>Section 4</title>
97735
- <para>You may not copy, modify, sublicense, or distribute the Program except as expressly provided
97736
- under this License. Any attempt otherwise to copy, modify, sublicense or distribute the
97737
- Program is void, and will automatically terminate your rights under this License. However,
97738
- parties who have received copies, or rights, from you under this License will not have their
97739
- licenses terminated so long as such parties remain in full compliance.</para>
97741
- <section id="gpl-2-5">
97742
- <title>Section 5</title>
97743
- <para>You are not required to accept this License, since you have not signed it. However, nothing
97744
- else grants you permission to modify or distribute the Program or its derivative works.
97745
- These actions are prohibited by law if you do not accept this License. Therefore, by modifying
97746
- or distributing the Program (or any work based on the Program), you indicate your acceptance
97747
- of this License to do so, and all its terms and conditions for copying, distributing or
97748
- modifying the Program or works based on it.</para>
97750
- <section id="gpl-2-6">
97751
- <title>Section 6</title>
97752
- <para>Each time you redistribute the Program (or any work based on the Program), the recipient
97753
- automatically receives a license from the original licensor to copy, distribute or modify
97754
- the Program subject to these terms and conditions. You may not impose any further restrictions
97755
- on the recipients' exercise of the rights granted herein. You are not responsible for enforcing
97756
- compliance by third parties to this License.</para>
97758
- <section id="gpl-2-7">
97759
- <title>Section 7</title>
97760
- <para>If, as a consequence of a court judgment or allegation of patent infringement or for any other
97761
- reason (not limited to patent issues), conditions are imposed on you (whether by court order,
97762
- agreement or otherwise) that contradict the conditions of this License, they do not excuse you
97763
- from the conditions of this License. If you cannot distribute so as to satisfy simultaneously
97764
- your obligations under this License and any other pertinent obligations, then as a consequence
97765
- you may not distribute the Program at all. For example, if a patent license would not permit
97766
- royalty-free redistribution of the Program by all those who receive copies directly or
97767
- indirectly through you, then the only way you could satisfy both it and this License would be
97768
- to refrain entirely from distribution of the Program.</para>
97770
- <para>If any portion of this section is held invalid or unenforceable under any particular circumstance,
97771
- the balance of the section is intended to apply and the section as a whole is intended to apply
97772
- in other circumstances.</para>
97774
- <para>It is not the purpose of this section to induce you to infringe any patents or other property
97775
- right claims or to contest validity of any such claims; this section has the sole purpose of
97776
- protecting the integrity of the free software distribution system, which is implemented by public
97777
- license practices. Many people have made generous contributions to the wide range of software
97778
- distributed through that system in reliance on consistent application of that system; it is up
97779
- to the author/donor to decide if he or she is willing to distribute software through any other
97780
- system and a licensee cannot impose that choice.</para>
97782
- <para>This section is intended to make thoroughly clear what is believed to be a consequence of the
97783
- rest of this License.</para>
97785
- <section id="gpl-2-8">
97786
- <title>Section 8</title>
97787
- <para>If the distribution and/or use of the Program is restricted in certain countries either by patents
97788
- or by copyrighted interfaces, the original copyright holder who places the Program under this License
97789
- may add an explicit geographical distribution limitation excluding those countries, so that
97790
- distribution is permitted only in or among countries not thus excluded. In such case, this License
97791
- incorporates the limitation as if written in the body of this License.</para>
97793
- <section id="gpl-2-9">
97794
- <title>Section 9</title>
97795
- <para>The Free Software Foundation may publish revised and/or new versions of the General Public License
97796
- from time to time. Such new versions will be similar in spirit to the present version, but may differ
97797
- in detail to address new problems or concerns.</para>
97799
- <para>Each version is given a distinguishing version number. If the Program specifies a version number of
97800
- this License which applies to it and <quote>any later version</quote>, you have the option of following the terms
97801
- and conditions either of that version or of any later version published by the Free Software
97802
- Foundation. If the Program does not specify a version number of this License, you may choose any
97803
- version ever published by the Free Software Foundation.</para>
97805
- <section id="gpl-2-10">
97806
- <title>Section 10</title>
97807
- <para>If you wish to incorporate parts of the Program into other free programs whose distribution
97808
- conditions are different, write to the author to ask for permission. For software which is copyrighted
97809
- by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions
97810
- for this. Our decision will be guided by the two goals of preserving the free status of all
97811
- derivatives of our free software and of promoting the sharing and reuse of software generally.</para>
97813
- <section id="gpl-2-11">
97814
- <title>NO WARRANTY Section 11</title>
97815
- <para>BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT
97816
- PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
97817
- OTHER PARTIES PROVIDE THE PROGRAM <quote>AS IS</quote> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
97818
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
97819
- PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
97820
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</para>
97822
- <section id="gpl-2-12">
97823
- <title>Section 12</title>
97824
- <para>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR
97825
- ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
97826
- FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
97827
- USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
97828
- INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH
97829
- ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
97832
- <para>END OF TERMS AND CONDITIONS</para>
97835
- <section id="gpl-3">
97836
- <title>How to Apply These Terms to Your New Programs</title>
97837
- <para>If you develop a new program, and you want it to be of the greatest
97838
- possible use to the public, the best way to achieve this is to make it
97839
- free software which everyone can redistribute and change under these terms.</para>
97841
- <para>To do so, attach the following notices to the program. It is safest
97842
- to attach them to the start of each source file to most effectively
97843
- convey the exclusion of warranty; and each file should have at least
97844
- the <quote>copyright</quote> line and a pointer to where the full notice is found.</para>
97846
- <para><one line to give the program's name and a brief idea of what it does.>
97847
- Copyright (C) <year> <name of author></para>
97849
- <para>This program is free software; you can redistribute it and/or modify
97850
- it under the terms of the GNU General Public License as published by
97851
- the Free Software Foundation; either version 2 of the License, or
97852
- (at your option) any later version.</para>
97854
- <para>This program is distributed in the hope that it will be useful,
97855
- but WITHOUT ANY WARRANTY; without even the implied warranty of
97856
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
97857
- GNU General Public License for more details.</para>
97859
- <para>You should have received a copy of the GNU General Public License
97860
- along with this program; if not, write to the Free Software
97861
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA</para>
97863
- <para>Also add information on how to contact you by electronic and paper mail.</para>
97865
- <para>If the program is interactive, make it output a short notice like this
97866
- when it starts in an interactive mode:</para>
97868
- <para>Gnomovision version 69, Copyright (C) year name of author
97869
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type <quote>show w</quote>.
97870
- This is free software, and you are welcome to redistribute it
97871
- under certain conditions; type <quote>show c</quote> for details.</para>
97873
- <para>The hypothetical commands <quote>show w</quote> and <quote>show c</quote> should
97874
- show the appropriate parts of the General Public License. Of course, the commands you
97875
- use may be called something other than <quote>show w</quote> and <quote>show c</quote>;
97876
- they could even be mouse-clicks or menu items--whatever suits your program.</para>
97878
- <para>You should also get your employer (if you work as a programmer) or your
97879
- school, if any, to sign a <quote>copyright disclaimer</quote> for the program, if
97880
- necessary. Here is a sample; alter the names:</para>
97882
- <para>Yoyodyne, Inc., hereby disclaims all copyright interest in the program
97883
- <quote>Gnomovision</quote> (which makes passes at compilers) written by James Hacker.</para>
97885
- <para><signature of Ty Coon>, 1 April 1989
97886
- Ty Coon, President of Vice</para>
97888
- <para>This General Public License does not permit incorporating your program into
97889
- proprietary programs. If your program is a subroutine library, you may
97890
- consider it more useful to permit linking proprietary applications with the
97891
- library. If this is what you want to do, use the GNU Library General
97892
- Public License instead of this License.</para>
97895
--- a/src/libstdc++-v3/doc/xml/manual/codecvt.xml
97896
+++ b/src/libstdc++-v3/doc/xml/manual/codecvt.xml
97897
@@ -595,7 +595,7 @@
97900
<biblioid class="uri">
97901
- <ulink url="http://www.opengroup.org/austin">
97902
+ <ulink url="http://www.opengroup.org/austin/">
97904
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
97906
83347
--- a/src/libstdc++-v3/doc/xml/manual/configure.xml
97907
83348
+++ b/src/libstdc++-v3/doc/xml/manual/configure.xml
97908
83349
@@ -113,8 +113,7 @@