This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Long Double Register Spillage in PA Port
- To: law at cygnus dot com
- Subject: Long Double Register Spillage in PA Port
- From: Mark Klein <mklein at dis dot com>
- Date: Sun, 23 Jul 2000 10:06:28 -0700
- Cc: gcc at gcc dot gnu dot org
Hi, Jeff.
In my latest build (using the most recent snapshot), I get:
../../../libstdc++/std/ldcomplex.h: In method `complex<long
double>::complex (long double, long double)':
../../../libstdc++/std/ldcomplex.h:39: Unable to find a register to
spill in class `GENERAL_REGS'.
../../../libstdc++/std/ldcomplex.h:39: This is the insn:
(insn 10 17 12 (set (subreg:SI (reg/v:TF 40 %fr8) 0)
(mem/f:SI (reg/v:SI 19 %r19) 0)) 69 {pre_ldw-4} (nil)
(nil))
../../../libstdc++/std/ldcomplex.h:39: Internal compiler error in `
spill_failure', at reload1.c:1826
Is this something you've seen in other PA ports, or could this
be something just in my port?
I know that my function_args() was markedly different from yours
before the PA64 additions and now I don't recognize it at all :-)
In my function_args, I needed to consider that (at least for
the MPE port) arguments larger than 2 words were always passed
in the stack, regardless of whether or not arg0-arg3 were
available for the first long double. But, I don't see that is
the case in the current function_args. Note that this is class
GENERAL_REGS, so it appears that this might be the issue since
this long double value should be loaded into the GENERAL_REGS.
My copy of the calling convention doc (09740-90015) used by MPE
says:
"Any Larger Than 64 Bits: A short pointer (using sr5-sr7) to the
high-order byte of the value is passed as a nonfloating-point
32-bit value parameter."
Does HP-UX allow long doubles to be passed in registers for PA32?
TIA,
Regards,
Mark
--
Mark Klein DIS International, Ltd.
http://www.dis.com 415-892-8400
PGP Public Key Available