* tm-hppa.h (STORE_RETURN_VALUE): Fix to work with -msoft-float
authorJeff Law <law@redhat.com>
Tue, 22 Aug 1995 08:13:34 +0000 (08:13 +0000)
committerJeff Law <law@redhat.com>
Tue, 22 Aug 1995 08:13:34 +0000 (08:13 +0000)
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.

gdb/ChangeLog
gdb/config/pa/tm-hppa.h

index 44740bb..3a9f1f2 100644 (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
index 142d8b3..1178f48 100644 (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))