gcc dhd

David Huggins-Daines dhd@puffin.external.hp.com
Tue, 29 Aug 2000 16:41:43 -0600


CVSROOT:	/home/cvs/parisc
Module name:	gcc
Changes by:	dhd	00/08/29 16:41:43

Modified files:
	gcc            : ChangeLog 
	gcc/config/pa  : pa-linux.h pa.c 

Log message:
Now it is my time to hang my head in shame.  This is a dirty hack that
should not live long, but I really, really want to get Perl (among
other things) to work.

The problem is that, without argument relocations (and we will NEVER,
EVER, EVER implement those) the 32-bit ABI gives us no way to pass
mixed floating point and integer arguments within the first four words
and have a variadic function find them correctly.

So we just reload any floating point arguments that live in registers
into integer registers, thus passing these floating point arguments in
*both* integer and floating point registers.

From looking at the output of HP's 64-bit compiler it appears that
they do the same thing if the prototype of the function is not known,
whereas if it is known, they will either pass floating point arguments
exclusively in integer registers (if it is variadic) or exclusively in
floating point registers (if it is non-variadic).  Can we do this?