* rs6000-tdep.c (rs6000_extract_return_value): When extracting a float,

use convert_typed_floating to get the appropriate format.
This commit is contained in:
Jerome Guitton
2004-04-23 16:21:34 +00:00
parent 2abe3c6ccd
commit 65951cd9b4
2 changed files with 10 additions and 12 deletions

View File

@ -1,3 +1,8 @@
2004-04-23 Jerome Guitton <guitton@gnat.fr>
* rs6000-tdep.c (rs6000_extract_return_value): When extracting a float,
use convert_typed_floating to get the appropriate format.
2004-04-22 Randolph Chung <tausq@debian.org>
* hppa-tdep.h (find_unwind_entry, hppa_get_field, hppa_extract_5_load)

View File

@ -1412,22 +1412,15 @@ rs6000_extract_return_value (struct type *valtype, char *regbuf, char *valbuf)
if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
{
double dd;
float ff;
/* floats and doubles are returned in fpr1. fpr's have a size of 8 bytes.
We need to truncate the return value into float size (4 byte) if
necessary. */
if (TYPE_LENGTH (valtype) > 4) /* this is a double */
memcpy (valbuf,
&regbuf[DEPRECATED_REGISTER_BYTE (FP0_REGNUM + 1)],
TYPE_LENGTH (valtype));
else
{ /* float */
memcpy (&dd, &regbuf[DEPRECATED_REGISTER_BYTE (FP0_REGNUM + 1)], 8);
ff = (float) dd;
memcpy (valbuf, &ff, sizeof (float));
}
convert_typed_floating (&regbuf[DEPRECATED_REGISTER_BYTE
(FP0_REGNUM + 1)],
builtin_type_double,
valbuf,
valtype);
}
else if (TYPE_CODE (valtype) == TYPE_CODE_ARRAY
&& TYPE_LENGTH (valtype) == 16