* tm-hppa.h (STORE_RETURN_VALUE): Fix to work with -msoft-float

calling conventions too.  Use the TYPE of the return value, not
	its length to determine if it should also be copied into the
	floating point registers.
This commit is contained in:
Jeff Law 1995-08-22 08:13:34 +00:00
parent 7e72b115ad
commit 90df364f49
2 changed files with 16 additions and 3 deletions

View file

@ -1,5 +1,10 @@
Tue Aug 22 02:00:47 1995 Jeff Law (law@snake.cs.utah.edu)
* tm-hppa.h (STORE_RETURN_VALUE): Fix to work with -msoft-float
calling conventions too. Use the TYPE of the return value, not
its length to determine if it should also be copied into the
floating point registers.
* tm-hppa.h (PROLOGUE_FIRSTLINE_OVERLAP): Delete. Causes more
problems than it fixes.
* hppa-tdep.c (skip_prologue): If we exit the main loop without

View file

@ -258,7 +258,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Extract from an array REGBUF containing the (raw) register state
a function return value of type TYPE, and copy that, in virtual format,
into VALBUF. */
into VALBUF.
FIXME: Not sure what to do for soft float here. */
#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
{ \
@ -274,10 +276,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
}
/* Write into appropriate registers a function return value
of type TYPE, given in virtual format. */
of type TYPE, given in virtual format.
For software floating point the return value goes into the integer
registers. But we don't have any flag to key this on, so we always
store the value into the integer registers, and if it's a float value,
then we put it in the float registers too. */
#define STORE_RETURN_VALUE(TYPE,VALBUF) \
write_register_bytes ((TYPE_LENGTH(TYPE) > 4 \
write_register_bytes (REGISTER_BYTE (28),(VALBUF), TYPE_LENGTH (TYPE)) ; \
write_register_bytes ((TYPE_CODE(TYPE) == TYPE_CODE_FLT \
? REGISTER_BYTE (FP4_REGNUM) \
: REGISTER_BYTE (28)), \
(VALBUF), TYPE_LENGTH (TYPE))