Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Richard Sandiford
Roger Sayle [EMAIL PROTECTED] writes:
 On Fri, 19 May 2006, Mark Mitchell wrote:
 I'm evaluating the options.  It would be helpful if someone has time to
 apply and test Richard's patch on 4.1, as that would let us know whether
 that option is viable as well.

 I've bootstrapped and regression tested a backport of Richard's patch
 against the gcc-4_1-branch on mips-sgi-irix6.5 with no new failures.
 His mainline change also has no testsuite problems on the same machine.

 The patch applies cleanly, with the exception of some mklibgcc.in
 hunks, due to the fact that the _floatun* symbols were added to 4.2
 and aren't available in 4.1.x libgcc, and that the LIB2FUNCS_EXCLUDE
 functionality isn't on the branch.  For the record, the final
 mklibgcc.in changes that I tested are attached to this e-mail.

Thanks.  I'll test this same version on mipsisa64-elf and
mips64-linux-gnu.

Richard


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Joseph S. Myers
On Sun, 21 May 2006, Roger Sayle wrote:

 The patch applies cleanly, with the exception of some mklibgcc.in
 hunks, due to the fact that the _floatun* symbols were added to 4.2
 and aren't available in 4.1.x libgcc, and that the LIB2FUNCS_EXCLUDE
 functionality isn't on the branch.  For the record, the final
 mklibgcc.in changes that I tested are attached to this e-mail.

This backport doesn't appear to be of the correct patch version, the final 
patch version used LIB2_SIDITI_CONV_FUNCS instead of 
LIB2LITERAL_CONVERSION_MODES.

The patch (both that on mainline and this backport) includes _floatdidf in 
both the hardcoded lib2funcs list and that generated from lists of modes.  
This means that only one of the _floatdidf entries in the list gets 
deleted if _floatdidf is in LIB1ASMFUNCS, so causing a build error on such 
platforms (e.g. arm-none-linux-gnueabi, once a separate problem building 
mainline glibc with mainline GCC is fixed).

-- 
Joseph S. Myers   http://www.srcf.ucam.org/~jsm28/gcc/
[EMAIL PROTECTED] (personal mail)
[EMAIL PROTECTED] (CodeSourcery mail)
[EMAIL PROTECTED] (Bugzilla assignments and CCs)


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Richard Sandiford
Joseph S. Myers [EMAIL PROTECTED] writes:
 The patch (both that on mainline and this backport) includes _floatdidf in 
 both the hardcoded lib2funcs list and that generated from lists of modes.  
 This means that only one of the _floatdidf entries in the list gets 
 deleted if _floatdidf is in LIB1ASMFUNCS, so causing a build error on such 
 platforms (e.g. arm-none-linux-gnueabi, once a separate problem building 
 mainline glibc with mainline GCC is fixed).

Argh!  That was very sloppy of me, sorry.  I've committed the patch below
as obvious after testing on i686-pc-linux-gnu.

Richard


* mklibgcc.in (lib2funcs): Remove _floatdidf from initial assignment.

Index: gcc/mklibgcc.in
===
--- gcc/mklibgcc.in (revision 113979)
+++ gcc/mklibgcc.in (working copy)
@@ -85,7 +85,7 @@ done
 # set to wordsize.  objfile is the name of the associated object file
 
 lib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3
-   _cmpdi2 _ucmpdi2 _floatdidf _clear_cache
+   _cmpdi2 _ucmpdi2 _clear_cache
_enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
_addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Richard Sandiford
Richard Sandiford [EMAIL PROTECTED] writes:
 Roger Sayle [EMAIL PROTECTED] writes:
 On Fri, 19 May 2006, Mark Mitchell wrote:
 I'm evaluating the options.  It would be helpful if someone has time to
 apply and test Richard's patch on 4.1, as that would let us know whether
 that option is viable as well.

 I've bootstrapped and regression tested a backport of Richard's patch
 against the gcc-4_1-branch on mips-sgi-irix6.5 with no new failures.
 His mainline change also has no testsuite problems on the same machine.

 The patch applies cleanly, with the exception of some mklibgcc.in
 hunks, due to the fact that the _floatun* symbols were added to 4.2
 and aren't available in 4.1.x libgcc, and that the LIB2FUNCS_EXCLUDE
 functionality isn't on the branch.  For the record, the final
 mklibgcc.in changes that I tested are attached to this e-mail.

 Thanks.  I'll test this same version on mipsisa64-elf and
 mips64-linux-gnu.

As Joseph said, that patch used the old makefile variable name, not the
revised LIBGCC2_SIDITI_CONV_FUNCS.  Here's what I ended up testing.
It includes the fix for the duplicate _floatdidf.

Tested against gcc-4_1-branch on mips64-linux-gnu and mipsisa64-elf.
Mark, what do you think?

Richard


PR target/27681
* libgcc2.c (MIN_UNITS_PER_WORD): Move default definition from
libgcc2.h.
(LIBGCC2_UNITS_PER_WORD): Provide default definition, using old
MIN_UNITS_PER_WORD logic from libgcc2.h.  Do nothing if
LIBGCC2_UNITS_PER_WORD  MIN_UNITS_PER_WORD.
* libgcc2.h (MIN_UNITS_PER_WORD): Remove definition from here.
Use LIBGCC2_UNITS_PER_WORD rather than MIN_UNITS_PER_WORD to
determine the size of Wtype, etc.
* mklibgcc.in (LIB2_SIDITI_CONV_FUNCS): New argument.
(swfloatfuncs): New variable.
(dwfloatfuncs): Likewise.
(lib2funcs): Remove floating-point conversion functions from
initial assignment.  Use LIB2_SIDITI_CONV_FUNCS to determine
the set of conversion routines needed.  Allow entries to specify
an object name, filename and word size.  Update users accordingly.
* Makefile.in (libgcc.mk): Pass LIB2_SIDITI_CONV_FUNCS.
* config/mips/t-mips (LIB2_SIDITI_CONV_FUNCS): Define.

Revert:

2006-02-08  Roger Sayle  [EMAIL PROTECTED]

PR target/22209
* config/fixtfdi.c: New libgcc source file.
* config/fixunstfdi.c: New source file.
* config/floatditf.c: New source file.
* config/floatunditf.c: New souce file.
* config/mips/t-iris6 (LIB2FUNCS_EXTRA): Include the new source
files above instead of config/mips/_tilib.c.
* config/mips/t-linux64 (LIB2FUNCS_EXTRA): Likewise.

Index: gcc/libgcc2.c
===
--- gcc/libgcc2.c   (revision 113971)
+++ gcc/libgcc2.c   (working copy)
@@ -40,6 +40,23 @@ #define ATTRIBUTE_HIDDEN  __attribute__ 
 #define ATTRIBUTE_HIDDEN
 #endif
 
+#ifndef MIN_UNITS_PER_WORD
+#define MIN_UNITS_PER_WORD UNITS_PER_WORD
+#endif
+
+#ifndef LIBGCC2_UNITS_PER_WORD
+# if MIN_UNITS_PER_WORD  4
+#  define LIBGCC2_UNITS_PER_WORD 8
+# elif (MIN_UNITS_PER_WORD  2 \
+|| (MIN_UNITS_PER_WORD  1  LONG_LONG_TYPE_SIZE  32))
+#  define LIBGCC2_UNITS_PER_WORD 4
+# else
+#  define LIBGCC2_UNITS_PER_WORD MIN_UNITS_PER_WORD
+# endif
+#endif
+
+#if LIBGCC2_UNITS_PER_WORD = MIN_UNITS_PER_WORD
+
 #include libgcc2.h
 
 #ifdef DECLARE_LIBRARY_RENAMES
@@ -2010,3 +2027,4 @@ func_ptr __DTOR_LIST__[2] = {0, 0};
 #endif
 #endif /* no INIT_SECTION_ASM_OP and not CTOR_LISTS_DEFINED_EXTERNALLY */
 #endif /* L_ctors */
+#endif /* LIBGCC2_UNITS_PER_WORD = MIN_UNITS_PER_WORD */
Index: gcc/libgcc2.h
===
--- gcc/libgcc2.h   (revision 113971)
+++ gcc/libgcc2.h   (working copy)
@@ -79,10 +79,6 @@ #define LIBGCC2_HAS_TF_MODE \
   (BITS_PER_UNIT == 8  LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128)
 #endif
 
-#ifndef MIN_UNITS_PER_WORD
-#define MIN_UNITS_PER_WORD UNITS_PER_WORD
-#endif
-
 /* In the first part of this file, we are interfacing to calls generated
by the compiler itself.  These calls pass values into these routines
which have very specific modes (rather than very specific types), and
@@ -155,7 +151,7 @@ #define double bogus_type
turns out that no platform would define COMPAT_DIMODE_TRAPPING_ARITHMETIC
if it existed.  */
 
-#if MIN_UNITS_PER_WORD  4
+#if LIBGCC2_UNITS_PER_WORD == 8
 #define W_TYPE_SIZE (8 * BITS_PER_UNIT)
 #define Wtype  DItype
 #define UWtype UDItype
@@ -166,8 +162,7 @@ #define UDWtype UTItype
 #define __NW(a,b)  __ ## a ## di ## b
 #define __NDW(a,b) __ ## a ## ti ## b
 #define COMPAT_SIMODE_TRAPPING_ARITHMETIC
-#elif MIN_UNITS_PER_WORD  2 \
-  || (MIN_UNITS_PER_WORD  1  LONG_LONG_TYPE_SIZE  32)
+#elif LIBGCC2_UNITS_PER_WORD == 4
 #define W_TYPE_SIZE (4 * BITS_PER_UNIT)
 #define Wtype  SItype
 #define UWtype USItype

Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Mark Mitchell
Richard Sandiford wrote:

 Tested against gcc-4_1-branch on mips64-linux-gnu and mipsisa64-elf.
 Mark, what do you think?

I'm a bit torn.  On the one hand, it doesn't look like there is any
other reason to do a 4.1.1 RC2.  So, we could declare that Fortran is
not release-critical, and just release 4.1.1.  On the other hand, it
seems a shame to have a release in which a popular programming language
is so horribly broken on a reasonably popular platform.

You indicated off-line that your biggest concern with the patch was not
its behavior on MIPS, but, rather, that it might break some other
platform.  I agree with that assessment of where the risks lie.

In particular, with code like:

 +if [ $LIB2_SIDITI_CONV_FUNCS ]; then
 +  for func in $swfloatfuncs; do
 +sifunc=`echo $func | sed -e 's/XX/si/'`
 +lib2funcs=$lib2funcs $sifunc:$sifunc:4
 +  done
 +  for func in $dwfloatfuncs; do
 +difunc=`echo $func | sed -e 's/XX/di/'`
 +tifunc=`echo $func | sed -e 's/XX/ti/'`
 +lib2funcs=$lib2funcs $difunc:$difunc:4 $tifunc:$difunc:8
 +  done
 +else
 +  lib2funcs=$lib2funcs `echo $swfloatfuncs | sed -e 's/XX/si/g'`
 +  lib2funcs=$lib2funcs `echo $dwfloatfuncs | sed -e 's/XX/di/g'`
 +fi

which, could, potentially change the libgcc API.

However, I've started at the patch for quite some time, and I don't see
any problems.  And, thus far, there seem to be no problems on mainline.

So, I think we should include this patch.  Please apply, and let me know
when you've done that, so that I can start an RC2 build.

Thanks for working on this difficult issue.

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Martin Michlmayr
* Mark Mitchell [EMAIL PROTECTED] [2006-05-22 11:36]:
 I'm a bit torn.  On the one hand, it doesn't look like there is any
 other reason to do a 4.1.1 RC2.

Did anyone investigate those abi_check failures I (and others) have
seen?  See http://gcc.gnu.org/ml/gcc-testresults/2006-05/msg01058.html

-- 
Martin Michlmayr
[EMAIL PROTECTED]


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Mark Mitchell
Martin Michlmayr wrote:
 * Mark Mitchell [EMAIL PROTECTED] [2006-05-22 11:36]:
 I'm a bit torn.  On the one hand, it doesn't look like there is any
 other reason to do a 4.1.1 RC2.
 
 Did anyone investigate those abi_check failures I (and others) have
 seen?  See http://gcc.gnu.org/ml/gcc-testresults/2006-05/msg01058.html

Yes, I asked the libstdc++ list, and Paolo C. says that they result from
using a slightly different configuration from the configuration used to
generate the baseline.

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Paolo Carlini

Mark Mitchell wrote:


Martin Michlmayr wrote:
 


* Mark Mitchell [EMAIL PROTECTED] [2006-05-22 11:36]:
   


I'm a bit torn.  On the one hand, it doesn't look like there is any
other reason to do a 4.1.1 RC2.
 


Did anyone investigate those abi_check failures I (and others) have
seen?  See http://gcc.gnu.org/ml/gcc-testresults/2006-05/msg01058.html
   


Yes, I asked the libstdc++ list, and Paolo C. says that they result from
using a slightly different configuration from the configuration used to
generate the baseline.

By the way, in case of no --enable-clocale= at configure time, a 
possible explanation is missing de_DE localedata, which leads to an 
automatic fall back to the generic locale model:


   http://gcc.gnu.org/onlinedocs/libstdc++/install.html

Indeed, in those testresults I'm seeing ~300 unsupported tests, 
consistent with that situation.


Of course, it would be nice if reporters could double check that on 
those machines gcc4.1.0 behaves the same.


Paolo.



Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Mark Mitchell
Mark Mitchell wrote:
 Richard Sandiford wrote:
 
 Tested against gcc-4_1-branch on mips64-linux-gnu and mipsisa64-elf.
 Mark, what do you think?
 
 I'm a bit torn.  On the one hand, it doesn't look like there is any
 other reason to do a 4.1.1 RC2.  So, we could declare that Fortran is
 not release-critical, and just release 4.1.1.  On the other hand, it
 seems a shame to have a release in which a popular programming language
 is so horribly broken on a reasonably popular platform.

Richard and I had another round of discussion about this patch, and I've
decided to reverse my earlier decision.  Sorry for the back-and-forth!

In contrast to what I suggested above, 4.1.1 RC1 works for Fortran; the
problem is that on soft-float 64-bit MIPS, conversions from
floating-point types to 64-bit integers, and to unsigned 32-bit
integers, are missing in libgcc.  That's a serious problem, but one that
we had in 4.1.0 as well.  And, there is certainly some risk that the
patch will break something; Joseph already caught one mistake.

So, Richard and I have decided to leave well enough alone.  Unless
something else crops up in the next day or two, we'll consider 4.1.1 RC1
good enough, and spin final bits based on that.  Gerald, your
install.texi change is still OK.

Thanks,

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-22 Thread Martin Michlmayr
* Paolo Carlini [EMAIL PROTECTED] [2006-05-22 22:37]:
 Of course, it would be nice if reporters could double check that on
 those machines gcc4.1.0 behaves the same.

I can confirm that the abi_check failure has gone away now that I have
generated the de_DE locale.

This makes me wonder, though, whether GCC could check whether the
de_DE locale exists on the system and if not skips the abi_check test
since it'll only give misleading results in that case.
-- 
Martin Michlmayr
http://www.cyrius.com/


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-21 Thread Roger Sayle

On Fri, 19 May 2006, Mark Mitchell wrote:
 I'm evaluating the options.  It would be helpful if someone has time to
 apply and test Richard's patch on 4.1, as that would let us know whether
 that option is viable as well.

I've bootstrapped and regression tested a backport of Richard's patch
against the gcc-4_1-branch on mips-sgi-irix6.5 with no new failures.
His mainline change also has no testsuite problems on the same machine.

The patch applies cleanly, with the exception of some mklibgcc.in
hunks, due to the fact that the _floatun* symbols were added to 4.2
and aren't available in 4.1.x libgcc, and that the LIB2FUNCS_EXCLUDE
functionality isn't on the branch.  For the record, the final
mklibgcc.in changes that I tested are attached to this e-mail.

I hope this helps.

Roger
--
Index: mklibgcc.in
===
*** mklibgcc.in (revision 113936)
--- mklibgcc.in (working copy)
***
*** 17,22 
--- 17,23 
  # LIB2ADDEHSTATIC
  # LIB2ADDEHSHARED
  # LIB2ADDEHDEP
+ # LIB2LITERAL_CONVERSION_MODES
  # LIBUNWIND
  # LIBUNWINDDEP
  # SHLIBUNWIND_LINK
*** echo 'dirs = libgcc'
*** 54,63 
  echo
  
  # Library members defined in libgcc2.c.
  lib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3
!   _cmpdi2 _ucmpdi2 _floatdidf _floatdisf _fixunsdfsi _fixunssfsi
!   _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi _fixxfdi _fixunsxfdi
!   _floatdixf _fixunsxfsi _fixtfdi _fixunstfdi _floatditf _clear_cache
_enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
_addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
--- 55,81 
  echo
  
  # Library members defined in libgcc2.c.
+ 
+ # The floating-point conversion routines that involve a single-word integer.
+ # XX stands for the integer mode.
+ swfloatfuncs=
+ for mode in sf df xf; do
+   swfloatfuncs=$swfloatfuncs _fixuns${mode}XX
+ done
+ 
+ # Likewise double-word routines.
+ dwfloatfuncs=
+ for mode in sf df xf tf; do
+   dwfloatfuncs=$dwfloatfuncs _fix${mode}XX _fixuns${mode}XX
+   dwfloatfuncs=$dwfloatfuncs _floatXX${mode}
+ done
+ 
+ # Entries of the form objfile:func:wordsize indicate that libgcc2.c
+ # should be compiled with Lfunc defined and with LIBGCC2_UNITS_PER_WORD
+ # set to wordsize.  objfile is the name of the associated object file
+ 
  lib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3
!   _cmpdi2 _ucmpdi2 _floatdidf _clear_cache
_enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
_addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
*** lib2funcs='_muldi3 _negdi2 _lshrdi3 _ash
*** 65,70 
--- 83,103 
_powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3
_divxc3 _divtc3'
  
+ if [ $LIB2LITERAL_CONVERSION_MODES ]; then
+   for func in $swfloatfuncs; do
+ sifunc=`echo $func | sed -e 's/XX/si/'`
+ lib2funcs=$lib2funcs $sifunc:$sifunc:4
+   done
+   for func in $dwfloatfuncs; do
+ difunc=`echo $func | sed -e 's/XX/di/'`
+ tifunc=`echo $func | sed -e 's/XX/ti/'`
+ lib2funcs=$lib2funcs $difunc:$difunc:4 $tifunc:$difunc:8
+   done
+ else
+   lib2funcs=$lib2funcs `echo $swfloatfuncs | sed -e 's/XX/si/g'`
+   lib2funcs=$lib2funcs `echo $dwfloatfuncs | sed -e 's/XX/di/g'`
+ fi
+ 
  # Disable SHLIB_LINK if shared libgcc not enabled.
  if [ @enable_shared@ = no ]; then
SHLIB_LINK=
*** fi
*** 145,152 
  # Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
  # defined as optimized assembly code in LIB1ASMFUNCS.
  for name in $LIB1ASMFUNCS; do
!   lib2funcs=`echo $lib2funcs | sed -e 's/^'$name' //' \
!  -e 's/ '$name' / /' \
   -e 's/ '$name'$//'`
LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
   -e 's/ '$name' / /' \
--- 178,185 
  # Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
  # defined as optimized assembly code in LIB1ASMFUNCS.
  for name in $LIB1ASMFUNCS; do
!   lib2funcs=`echo $lib2funcs | sed -e 's/^'$name'[ :]//' \
!  -e 's/ '$name'[ :]/ /' \
   -e 's/ '$name'$//'`
LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
   -e 's/ '$name' / /' \
*** for ml in $MULTILIBS; do
*** 248,263 
#
  
for name in $lib2funcs; do
  if [ $libgcc_s_so ]; then
out=libgcc/${dir}/${name}${objext}
outS=libgcc/${dir}/${name}_s${objext}
  
echo $outS: $libgcc2_c_dep
!   echo   $gcc_s_compile $flags -DL$name -c '$(srcdir)/libgcc2.c' \
-o $outS
  
echo $out: $libgcc2_c_dep
!   

Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Richard Sandiford
Mark Mitchell [EMAIL PROTECTED] writes:
 (My brain failed to digest the fact that the patch was on 4.1 as well as
 on mainline, perhaps in part because there doesn't seem to be a PR;
 Richard indicated to me that he would locate or open one now.)

Opened as 27681.  (And Roger: sorry for all the hassle this patch has
caused you.  A good deed and all that...)

Richard


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Roger Sayle

Hi Mark and Richard,

On Fri, 19 May 2006, Mark Mitchell wrote:
 Roger, would you please revert your MIPS MIN_UNITS_PER_WORD change
 for MIPS on the GCC 4.1 branch?

 (My brain failed to digest the fact that the patch was on 4.1 as well as
 on mainline, perhaps in part because there doesn't seem to be a PR;
 Richard indicated to me that he would locate or open one now.)

Please can you explicitly confirm that we want to reintroduce PR
target/22209 as a regression from gcc 4.1.0, and break the build
of libgfortran on all 64-bit MIPS platforms, including IRIX?

The MIPS backend still claims that TImode is scalar_mode_supported_p,
and it's therefore possible to write simple C and C++ testcases that
will regress with this change.  I know my testing of such a reversion
will reintroduce at least 4800 new failures in the dejagnu testsuite,
for no reported improvement vs gcc 4.1.0.  It's a lesser of two evils
issue, and it's only further development on mainline, and not a user
reported problem, that's revealed the potential fallout in 4.1.0.

The tradeoff is between unlinkable code in the default build on the
affected platforms, vs. unlinkable code when explicitly using
the -msoft-float flag, which isn't tested by the testsuite.

I'm happy to revert the changes at a moment's notice, especially if
that's what the realease manager and MIPS maintainers want, but I
just want to be certain that everyone's aware of the tradeoffs, so
that whatever the outcome, it's not my fault.

I'll start a bootstrap and regression test of the reversion against
the 4.1 branch straight away, it's not clear if recent backports have
introduced additional dependencies, but these machines aren't the
fastest on the planet, and it's still behind on evaluating the recent
set of mainline patches/changes.

Roger
--



Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Roger Sayle

Hi Richard,

On Fri, 19 May 2006, Richard Sandiford wrote:
 Mark Mitchell [EMAIL PROTECTED] writes:
  (My brain failed to digest the fact that the patch was on 4.1 as well as
  on mainline, perhaps in part because there doesn't seem to be a PR;
  Richard indicated to me that he would locate or open one now.)

 Opened as 27681.  (And Roger: sorry for all the hassle this patch has
 caused you.  A good deed and all that...)

Indeed, no good deed ever goes unpunished.  In fact, isn't it the MIPS
backend's use of the GOFAST libraries which is one of the major blockers
of adding -msoft-float tests to the testsuite?  :-)  My very strong
recommendation is to add a target-soft-float predicate to the dejgnu
testsuite's require predicates, that'll allow us to test -msoft-float
functionality on most platforms, by explicitly disabling the handful of
problematic non-libgcc soft FP targets.  This will both prevent this sort
of regression in the future, and actually allow us to (automatedly)
confirm that you patch has improved things.

The MIN_UNITS_PER_WORD trick is used on multiple platforms, including
PowerPC, IA-64 and s390, so without such tests we've no way of knowing
that your recent fix isn't also required on them in addition to MIPS.
See, for example, http://gcc.gnu.org/ml/gcc/2003-03/msg01365.html
which was the Ulrich's s390 change that inspired my problematic fix
for mips.h.

Roger
--



Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Joseph S. Myers
On Fri, 19 May 2006, Roger Sayle wrote:

 Indeed, no good deed ever goes unpunished.  In fact, isn't it the MIPS
 backend's use of the GOFAST libraries which is one of the major blockers

The GOFAST support is almost certainly unused and can probably be removed; 
at least, no-one has cared enough to fix the GOFAST case of bug 24998.  
(The relevant code to remove is I think the enable_gofast check in 
config.gcc, the documentation in doc/tm.texi, the file config/gofast.h, 
all the GOFAST conditionals in fp-bit.c and fp-bit.h, the effectively dead 
use of config/gofast.h and gofast_maybe_init_libfuncs in sparc/sparc.c, 
the comment in mips/elforion.h, the support in mips/mips.c, the file 
mips/t-gofast, and the use of US_SOFTWARE_GOFAST in mips/t-sr71k; the 
US_SOFTWARE_GOFAST macro can then be poisoned.)

-- 
Joseph S. Myers   http://www.srcf.ucam.org/~jsm28/gcc/
[EMAIL PROTECTED] (personal mail)
[EMAIL PROTECTED] (CodeSourcery mail)
[EMAIL PROTECTED] (Bugzilla assignments and CCs)


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Mark Mitchell
Roger Sayle wrote:
 Hi Mark and Richard,
 
 On Fri, 19 May 2006, Mark Mitchell wrote:
 Roger, would you please revert your MIPS MIN_UNITS_PER_WORD change
 for MIPS on the GCC 4.1 branch?

 (My brain failed to digest the fact that the patch was on 4.1 as well as
 on mainline, perhaps in part because there doesn't seem to be a PR;
 Richard indicated to me that he would locate or open one now.)
 
 Please can you explicitly confirm that we want to reintroduce PR
 target/22209 as a regression from gcc 4.1.0, and break the build
 of libgfortran on all 64-bit MIPS platforms, including IRIX?

Thank you for raising this issue.

The other choice may be to delay 4.1.1 until we have sufficient
confidence in Richard's patch.

Am I correct PR 22209 is only a Fortran problem?  This is not a
rhetorical question; I'm trying to gather data

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Andrew Pinski


On May 19, 2006, at 9:59 AM, Mark Mitchell wrote:



Am I correct PR 22209 is only a Fortran problem?  This is not a
rhetorical question; I'm trying to gather data


No, you can invoke it via using the attribute mode(TI), yes people
are not going to do that but who knows.

-- Pinski



Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Mark Mitchell
Andrew Pinski wrote:
 
 On May 19, 2006, at 9:59 AM, Mark Mitchell wrote:
 

 Am I correct PR 22209 is only a Fortran problem?  This is not a
 rhetorical question; I'm trying to gather data
 
 No, you can invoke it via using the attribute mode(TI)

Sure, but I'm not worried about that case.

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Andrew Pinski


On May 19, 2006, at 10:12 AM, Mark Mitchell wrote:


Andrew Pinski wrote:


On May 19, 2006, at 9:59 AM, Mark Mitchell wrote:



Am I correct PR 22209 is only a Fortran problem?  This is not a
rhetorical question; I'm trying to gather data


No, you can invoke it via using the attribute mode(TI)


Sure, but I'm not worried about that case.


If the back-end was not lying to the front-ends, this would never
have been a problem, hint hint.

Also why revert a patch which obvious works in the default  
configurations?


-- Pinski


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Roger Sayle

On Fri, 19 May 2006, Mark Mitchell wrote:
  No, you can invoke it via using the attribute mode(TI)
 Sure, but I'm not worried about that case.

That would be the only class of C or C++ failures that I could easily
construct by hand.  Although the RTL optimizers will introduce TImode
moves and temporary registers, it looks like they won't introduce any
arithmetic/logical operations without explicit pattern support from
the backend.

Hence, it's only things like configure scripts that identify the
presence of __int128_t and __uint128_t, and then explicitly use
128-bit operations in their source code that will be affected.
This is the source of the libgfortran failure, where the runtime
library detects these types are available, and uses them.  It's
not a problem in the gfortran compiler itself, which treats
INTEGER*8, exactly the same way the C/C++ treat __int128_t.

If libstdc++-3's configure checked for __int128_t and provided
a specialized STL instantiation, it would exhibit the same issue.

Roger
--



Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Mark Mitchell
Andrew Pinski wrote:

 Also why revert a patch which obvious works in the default configurations?

It eliminates a Fortran problem, but causes a C problem.

I'm evaluating the options.  It would be helpful if someone has time to
apply and test Richard's patch on 4.1, as that would let us know whether
that option is viable as well.

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Andrew Pinski
 
 Andrew Pinski wrote:
 
  Also why revert a patch which obvious works in the default configurations?
 
 It eliminates a Fortran problem, but causes a C problem.

I thought it only caused the problem with C code when supplying -msoft-float
which is not a default configuration?

It eliminates more than just a Fortran problem, it eliminates a C problem also.

-- Pinski


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Mark Mitchell
Andrew Pinski wrote:
 Andrew Pinski wrote:

 Also why revert a patch which obvious works in the default configurations?
 It eliminates a Fortran problem, but causes a C problem.
 
 I thought it only caused the problem with C code when supplying -msoft-float
 which is not a default configuration?

C code, compiled with -msoft-float, is very common on MIPS, whether or
not it's a default configuration.

Obviously, if we have to choose, shipping a compiler that works with
software floating-point C programs on MIPS is much more important than
shipping a compiler that works with Fortran.

Of course, we'd rather not have to choose.

-- 
Mark Mitchell
CodeSourcery
[EMAIL PROTECTED]
(650) 331-3385 x713


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Richard Sandiford
Roger Sayle [EMAIL PROTECTED] writes:
 Indeed, no good deed ever goes unpunished.  In fact, isn't it the MIPS
 backend's use of the GOFAST libraries which is one of the major blockers
 of adding -msoft-float tests to the testsuite?  :-)

No.  As I've explained earlier this week, -msoft-float code is simply
not link-compatible with -mhard-float code.

Mark Mitchell [EMAIL PROTECTED] writes:
 Andrew Pinski wrote:
 Andrew Pinski wrote:

 Also why revert a patch which obvious works in the default configurations?
 It eliminates a Fortran problem, but causes a C problem.
 
 I thought it only caused the problem with C code when supplying -msoft-float
 which is not a default configuration?

 C code, compiled with -msoft-float, is very common on MIPS, whether or
 not it's a default configuration.

Right.  What do people mean by default configuration?  The primary
interest in MIPS these days is as an embedded platform, and the main
bare-metal targets (mips-elf, mips64-elf mipsisa32-elf, mipsisa64-elf)
all have -msoft-float multilibs.  You don't have to do anything special
to get them.

Richard


Re: Revert patch for MIPS TImode functions for 4.1.1

2006-05-19 Thread Richard Sandiford
Andrew Pinski [EMAIL PROTECTED] writes:
 If the back-end was not lying to the front-ends, this would never
 have been a problem, hint hint.

I'm not sure what you mean here.  In what way is the back end lying
to the front end?

Richard