* sparc-tdep.c (sparc64_write_fp): Delete.

(sparc_push_dummy_frame): Replace write_fp call with code to store
the FP directly.
(sparc_gdbarch_init): Do not initialize write_fp.
This commit is contained in:
Andrew Cagney 2002-04-05 23:38:07 +00:00
parent 32d279374d
commit 2757dd8645
2 changed files with 27 additions and 14 deletions

View File

@ -1,3 +1,10 @@
2002-04-04 Andrew Cagney <ac131313@redhat.com>
* sparc-tdep.c (sparc64_write_fp): Delete.
(sparc_push_dummy_frame): Replace write_fp call with code to store
the FP directly.
(sparc_gdbarch_init): Do not initialize write_fp.
2002-04-05 Kevin Buettner <kevinb@redhat.com>
* rs6000-tdep.c (skip_prologue): Eliminate unused/unreachable

View File

@ -986,8 +986,26 @@ sparc_push_dummy_frame (void)
if (strcmp (target_shortname, "sim") != 0)
{
write_fp (old_sp);
/* NOTE: cagney/2002-04-04: The code below originally contained
GDB's _only_ call to write_fp(). That call was eliminated by
inlining the corresponding code. For the 64 bit case, the
old function (sparc64_write_fp) did the below although I'm
not clear why. The same goes for why this is only done when
the underlying target is a simulator. */
if (gdbarch_tdep (current_gdbarch)->intreg_size == 8)
{
/* Target is a 64 bit SPARC. */
CORE_ADDR oldfp = read_register (FP_REGNUM);
if (oldfp & 1)
write_register (FP_REGNUM, old_sp - 2047);
else
write_register (FP_REGNUM, old_sp);
}
else
{
/* Target is a 32 bit SPARC. */
write_register (FP_REGNUM, old_sp);
}
/* Set return address register for the call dummy to the current PC. */
write_register (I7_REGNUM, read_pc () - 8);
}
@ -2261,16 +2279,6 @@ sparc64_write_sp (CORE_ADDR val)
write_register (SP_REGNUM, val);
}
void
sparc64_write_fp (CORE_ADDR val)
{
CORE_ADDR oldfp = read_register (FP_REGNUM);
if (oldfp & 1)
write_register (FP_REGNUM, val - 2047);
else
write_register (FP_REGNUM, val);
}
/* The SPARC 64 ABI passes floating-point arguments in FP0 to FP31,
and all other arguments in O0 to O5. They are also copied onto
the stack in the correct places. Apparently (empirically),
@ -3038,7 +3046,6 @@ sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_store_struct_return (gdbarch, sparc32_store_struct_return);
set_gdbarch_use_struct_convention (gdbarch,
generic_use_struct_convention);
set_gdbarch_write_fp (gdbarch, generic_target_write_fp);
set_gdbarch_write_sp (gdbarch, generic_target_write_sp);
tdep->y_regnum = SPARC32_Y_REGNUM;
tdep->fp_max_regnum = SPARC_FP0_REGNUM + 32;
@ -3097,7 +3104,6 @@ sparc_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_store_struct_return (gdbarch, sparc64_store_struct_return);
set_gdbarch_use_struct_convention (gdbarch,
sparc64_use_struct_convention);
set_gdbarch_write_fp (gdbarch, sparc64_write_fp);
set_gdbarch_write_sp (gdbarch, sparc64_write_sp);
tdep->y_regnum = SPARC64_Y_REGNUM;
tdep->fp_max_regnum = SPARC_FP0_REGNUM + 48;