This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: CVS-980418: Unable to find a register to spill
- To: Andreas Jaeger <aj at arthur dot rhein-neckar dot de>
- Subject: Re: CVS-980418: Unable to find a register to spill
- From: Andreas Jaeger <aj at arthur dot rhein-neckar dot de>
- Date: Sat, 18 Apr 1998 22:54:09 +0200 (CEST)
- Cc: egcs-bugs at cygnus dot com
- References: <13625.3352.764745.443674@arthur.rhein-neckar.de>
>>>>> Andreas Jaeger writes:
> I've managed again to bootstrap egcs and make check had no failures
> for the gcc part - and these 8 failures for g++:
> FAIL: g++.brendan/ptolemy1.C (test for excess errors)
> FAIL: g++.brendan/ptolemy2.C (test for excess errors)
> FAIL: g++.mike/p4484.C (test for excess errors)
> FAIL: g++.mike/p8155.C (test for excess errors)
> FAIL: g++.mike/p9129.C (test for errors, line 10)
> FAIL: g++.mike/pmf1.C (test for excess errors)
> FAIL: g++.mike/pmf8.C (test for excess errors)
> FAIL: g++.other/pmf1.C (test for excess errors)
> But trying to compile the current glibc 2.1 snapshot I got an compiler
> error:
> $ /opt/egcs/lib/gcc-lib/i486-pc-linux-gnu/egcs-2.91.23/cc1 s_ldexpl.i -quiet -dumpbase s_ldexpl.c -g -O -Wall -Winline -Wno-parentheses -Wstrict-prototypes -Wwrite-strings -Wno-uninitialized -Wno-write-strings -version -fPIC -o s_ldexpl.s
> GNU C version egcs-2.91.23 980411 (gcc2 ss-980401 experimental) (i486-pc-linux-gnu) compiled by GNU C version egcs-2.91.23 980411 (gcc2 ss-980401 experimental).
> ../sysdeps/libm-ieee754/s_ldexpl.c: In function `__ldexpl':
> ../sysdeps/libm-ieee754/s_ldexpl.c:36: Unable to find a register to spill.
> (insn:QI 12 10 14 (set (mem:XF (pre_dec:SI (reg:SI 7 %esp)))
> (reg/v:XF 21)) 76 {movxf_push} (insn_list 4 (nil))
> (insn_list:REG_LIBCALL 18 (nil)))
> Aborted
> I'm appending the s_ldexpl.i in the hope that this will help to find
> the bug. I don't get an error when compiling without -fPIC or with
> -O0.
Sorry for my long mail. I've extracted the relevant part and the
example is now much smaller:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
extern int __finitel (long double __value) __attribute__ ( (__const__) ) ;
extern int __finite (double __value) __attribute__ ( (__const__) ) ;
extern long double __scalbnl (long double __x, int __n) ;
extern int *__errno_location (void) __attribute__ ((__const__));
long double __ldexpl(long double value, int exp)
{
if(!__finitel(value)||value==0.0) return value;
value = __scalbnl(value,exp);
if(!__finitel(value)||value==0.0) (*__errno_location ()) = ( 34 ) ;
return value;
}
extern __typeof ( __ldexpl ) ldexpl __attribute__ ((weak, alias ("__ldexpl")));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$ /opt/egcs/lib/gcc-lib/i486-pc-linux-gnu/egcs-2.91.23/cc1 s_ldexpl.i -quiet -dumpbase s_ldexpl.c -g -O -Wall -Winline -Wno-parentheses -Wstrict-prototypes -Wwrite-strings -Wno-uninitialized -Wno-write-strings -version -fPIC -o s_ldexpl.s
GNU C version egcs-2.91.23 980411 (gcc2 ss-980401 experimental) (i486-pc-linux-gnu) compiled by GNU C version egcs-2.91.23 980411 (gcc2 ss-980401 experimental).
s_ldexpl.i: In function `__ldexpl':
s_ldexpl.i:17: Unable to find a register to spill.
(insn:QI 12 10 14 (set (mem:XF (pre_dec:SI (reg:SI 7 %esp)))
(reg/v:XF 21)) 76 {movxf_push} (insn_list 4 (nil))
(insn_list:REG_LIBCALL 18 (nil)))
Aborted
Andreas
--
Andreas Jaeger aj@arthur.rhein-neckar.de jaeger@informatik.uni-kl.de
for pgp-key finger ajaeger@alma.student.uni-kl.de