summaryrefslogtreecommitdiff
path: root/gdb/i387-tdep.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2007-10-24 20:29:14 +0000
committerDaniel Jacobowitz <drow@false.org>2007-10-24 20:29:14 +0000
commit83acabca138ee4ef3dcb7072dd1ed797fdfae4e4 (patch)
tree4d2ecdea61f930b1ee9c7fe7b730129d29dc2384 /gdb/i387-tdep.c
parent24bf05ac93c26e876121110acc0cf8911bd7c38f (diff)
* amd64-tdep.c (amd64_convert_register_p): Delete.
(amd64_init_abi): Use i387_convert_register_p. * alpha-tdep.c (alpha_convert_register_p): Return zero for eight byte types. (alpha_register_to_value, alpha_value_to_register): Do not handle eight byte types. * i386-tdep.c (i386_convert_register_p): Use i387_convert_register_p. * i387-tdep.c (i387_convert_register_p): New. (i387_register_to_value, i387_value_to_register): Update comments. * i387-tdep.h (i387_convert_register_p): Declare. * ia64-tdep.c (ia64_convert_register_p): Return zero for builtin_type_ia64_ext. (ia64_gdbarch_init): Do not initialize builtin_type_ia64_ext here. (_initialize_ia64_tdep): Initialize builtin_type_ia64_ext here. * m68k-tdep.c (m68k_convert_register_p): Return zero for builtin_type_m68881_ext. (m68k_register_to_value, m68k_value_to_register): Update comments. * gdbint.texinfo (Register and Memory Data, Target Conditionals): Document that gdbarch_convert_register_p should return zero for no-op conversions.
Diffstat (limited to 'gdb/i387-tdep.c')
-rw-r--r--gdb/i387-tdep.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c
index 73a7797b0a..e665989e04 100644
--- a/gdb/i387-tdep.c
+++ b/gdb/i387-tdep.c
@@ -285,6 +285,25 @@ i387_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
}
+/* Return nonzero if a value of type TYPE stored in register REGNUM
+ needs any special handling. */
+
+int
+i387_convert_register_p (int regnum, struct type *type)
+{
+ if (i386_fp_regnum_p (regnum))
+ {
+ /* Floating point registers must be converted unless we are
+ accessing them in their hardware type. */
+ if (type == builtin_type_i387_ext)
+ return 0;
+ else
+ return 1;
+ }
+
+ return 0;
+}
+
/* Read a value of type TYPE from register REGNUM in frame FRAME, and
return its contents in TO. */
@@ -304,8 +323,7 @@ i387_register_to_value (struct frame_info *frame, int regnum,
return;
}
- /* Convert to TYPE. This should be a no-op if TYPE is equivalent to
- the extended floating-point format used by the FPU. */
+ /* Convert to TYPE. */
get_frame_register (frame, regnum, from);
convert_typed_floating (from, builtin_type_i387_ext, to, type);
}
@@ -329,8 +347,7 @@ i387_value_to_register (struct frame_info *frame, int regnum,
return;
}
- /* Convert from TYPE. This should be a no-op if TYPE is equivalent
- to the extended floating-point format used by the FPU. */
+ /* Convert from TYPE. */
convert_typed_floating (from, type, to, builtin_type_i387_ext);
put_frame_register (frame, regnum, to);
}