diff options
author | Daniel Jacobowitz <drow@false.org> | 2007-10-24 20:29:14 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2007-10-24 20:29:14 +0000 |
commit | 83acabca138ee4ef3dcb7072dd1ed797fdfae4e4 (patch) | |
tree | 4d2ecdea61f930b1ee9c7fe7b730129d29dc2384 /gdb/i387-tdep.c | |
parent | 24bf05ac93c26e876121110acc0cf8911bd7c38f (diff) | |
download | fsf-binutils-gdb-83acabca138ee4ef3dcb7072dd1ed797fdfae4e4.zip fsf-binutils-gdb-83acabca138ee4ef3dcb7072dd1ed797fdfae4e4.tar.gz fsf-binutils-gdb-83acabca138ee4ef3dcb7072dd1ed797fdfae4e4.tar.bz2 |
* 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.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c index 73a7797..e665989 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); } |