aboutsummaryrefslogtreecommitdiff
path: root/gdb/ns32k-tdep.c
diff options
context:
space:
mode:
authorJason Thorpe <thorpej@netbsd.org>2002-05-26 17:59:39 +0000
committerJason Thorpe <thorpej@netbsd.org>2002-05-26 17:59:39 +0000
commitf2c762e031983be932f3d26aa45a91aa2711fe20 (patch)
treece3ed971a4ebe487c643b09e57cd791e27d3742d /gdb/ns32k-tdep.c
parentd43efbe3280e3f780c19bac2b50030e82f003e78 (diff)
downloadfsf-binutils-gdb-f2c762e031983be932f3d26aa45a91aa2711fe20.zip
fsf-binutils-gdb-f2c762e031983be932f3d26aa45a91aa2711fe20.tar.gz
fsf-binutils-gdb-f2c762e031983be932f3d26aa45a91aa2711fe20.tar.bz2
* ns32k-tdep.c (ns32k_register_byte_32082,
ns32k_register_byte_32382, ns32k_register_raw_size, ns32k_register_virtual_size, ns32k_register_virtual_type): New functions. * config/ns32k/tm-nbsd.h (REGISTER_BYTE): Define as ns32k_register_byte_32382. * config/ns32k/tm-umax.h: Update copyright years. (REGISTER_BYTE): Define as ns32k_register_byte_32082. (REGISTER_RAW_SIZE): Define as ns32k_register_raw_size. (REGISTER_VIRTUAL_SIZE): Define as ns32k_register_virtual_size. (REGISTER_VIRTUAL_TYPE): Define as ns32k_register_virtual_type. (ns32k_get_enter_addr): Fix prototype.
Diffstat (limited to 'gdb/ns32k-tdep.c')
-rw-r--r--gdb/ns32k-tdep.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/gdb/ns32k-tdep.c b/gdb/ns32k-tdep.c
index 4c2fd0f..f6fb85f 100644
--- a/gdb/ns32k-tdep.c
+++ b/gdb/ns32k-tdep.c
@@ -64,6 +64,59 @@ ns32k_register_name_32382 (int regno)
return (register_names[regno]);
}
+int
+ns32k_register_byte_32082 (int regno)
+{
+ if (regno >= LP0_REGNUM)
+ return (LP0_REGNUM * 4) + ((regno - LP0_REGNUM) * 8);
+
+ return (regno * 4);
+}
+
+int
+ns32k_register_byte_32382 (int regno)
+{
+ /* This is a bit yuk. The even numbered double precision floating
+ point long registers occupy the same space as the even:odd numbered
+ single precision floating point registers, but the extra 32381 FPU
+ registers are at the end. Doing it this way is compatible for both
+ 32081 and 32381 equipped machines. */
+
+ return ((regno < LP0_REGNUM ? regno
+ : (regno - LP0_REGNUM) & 1 ? regno - 1
+ : (regno - LP0_REGNUM + FP0_REGNUM)) * 4);
+}
+
+int
+ns32k_register_raw_size (int regno)
+{
+ /* All registers are 4 bytes, except for the doubled floating
+ registers. */
+
+ return ((regno >= LP0_REGNUM) ? 8 : 4);
+}
+
+int
+ns32k_register_virtual_size (int regno)
+{
+ return ((regno >= LP0_REGNUM) ? 8 : 4);
+}
+
+struct type *
+ns32k_register_virtual_type (int regno)
+{
+ if (regno < FP0_REGNUM)
+ return (builtin_type_int);
+
+ if (regno < FP0_REGNUM + 8)
+ return (builtin_type_float);
+
+ if (regno < LP0_REGNUM)
+ return (builtin_type_int);
+
+ return (builtin_type_double);
+}
+
/* Advance PC across any function entry prologue instructions
to reach some "real" code. */