+2013-05-13 Joel Brobecker <brobecker@adacore.com>
+
+ * rs6000-aix-tdep.c (rs6000_push_dummy_call): Convert
+ floating point registers to register type before storing
+ value.
+ * rs6000-lynx178-tdep.c (rs6000_lynx178_push_dummy_call):
+ Likewise.
+
2013-05-10 Joel Brobecker <brobecker@adacore.com>
Tom Tromey <tromey@redhat.com>
if (TYPE_CODE (type) == TYPE_CODE_FLT)
{
-
/* Floating point arguments are passed in fpr's, as well as gpr's.
There are 13 fpr's reserved for passing parameters. At this point
- there is no way we would run out of them. */
+ there is no way we would run out of them.
+
+ Always store the floating point value using the register's
+ floating-point format. */
+ const int fp_regnum = tdep->ppc_fp0_regnum + 1 + f_argno;
+ gdb_byte reg_val[MAX_REGISTER_SIZE];
+ struct type *reg_type = register_type (gdbarch, fp_regnum);
gdb_assert (len <= 8);
- regcache_cooked_write (regcache,
- tdep->ppc_fp0_regnum + 1 + f_argno,
- value_contents (arg));
+ convert_typed_floating (value_contents (arg), type,
+ reg_val, reg_type);
+ regcache_cooked_write (regcache, fp_regnum, reg_val);
++f_argno;
}
/* Floating point arguments are passed in fpr's, as well as gpr's.
There are 13 fpr's reserved for passing parameters. At this point
- there is no way we would run out of them. */
+ there is no way we would run out of them.
+
+ Always store the floating point value using the register's
+ floating-point format. */
+ const int fp_regnum = tdep->ppc_fp0_regnum + 1 + f_argno;
+ gdb_byte reg_val[MAX_REGISTER_SIZE];
+ struct type *reg_type = register_type (gdbarch, fp_regnum);
gdb_assert (len <= 8);
- regcache_cooked_write (regcache,
- tdep->ppc_fp0_regnum + 1 + f_argno,
- value_contents (arg));
+ convert_typed_floating (value_contents (arg), type,
+ reg_val, reg_type);
+ regcache_cooked_write (regcache, fp_regnum, reg_val);
++f_argno;
}