summaryrefslogtreecommitdiff
path: root/gdb/i386-tdep.c
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2002-09-19 16:49:55 +0000
committerAndrew Cagney <cagney@redhat.com>2002-09-19 16:49:55 +0000
commit9042b9ef4c23e284b31ab541298733679f55f601 (patch)
tree54244263f36b4751e76a968c17b6df48f5243762 /gdb/i386-tdep.c
parent6e2f20b77871967fc0053abc19f93068fe3f59ba (diff)
downloadgdb-9042b9ef4c23e284b31ab541298733679f55f601.tar.gz
2002-09-13 Andrew Cagney <cagney@redhat.com>
* i386-tdep.c (i386_add_reggroups): Add save_reggroup and restore_reggroup. (i386_register_reggroup_p): Rewrite. Use default_register_reggroup_p. * reggroups.h (save_reggroup, restore_reggroup): Declare. * reggroups.c (save_reggroup, restore_reggroup): Define. (_initialize_reggroup): Add save_reggroup and restore_reggroup to default_groups. * regcache.c (regcache_restore): Restore the registers in restore_reggroup. (regcache_save): Save registers in save_reggroup.
Diffstat (limited to 'gdb/i386-tdep.c')
-rw-r--r--gdb/i386-tdep.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 73cc6d56190..03a8ce9d645 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -1435,6 +1435,8 @@ i386_add_reggroups (struct gdbarch *gdbarch)
reggroup_add (gdbarch, general_reggroup);
reggroup_add (gdbarch, float_reggroup);
reggroup_add (gdbarch, all_reggroup);
+ reggroup_add (gdbarch, save_reggroup);
+ reggroup_add (gdbarch, restore_reggroup);
reggroup_add (gdbarch, vector_reggroup);
reggroup_add (gdbarch, system_reggroup);
}
@@ -1443,17 +1445,21 @@ int
i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
struct reggroup *group)
{
- if (group == all_reggroup)
- return 1;
- if (mmx_regnum_p (regnum))
- return (group == i368_mmx_reggroup || group == vector_reggroup);
- if (FP_REGNUM_P (regnum) || FPC_REGNUM_P (regnum))
- return (group == float_reggroup || group == all_reggroup);
- if (SSE_REGNUM_P (regnum) || regnum == MXCSR_REGNUM)
- return (group == i368_sse_reggroup || group == vector_reggroup);
+ int sse_regnum_p = SSE_REGNUM_P (regnum) || regnum == MXCSR_REGNUM;
+ int fp_regnum_p = FP_REGNUM_P (regnum) || FPC_REGNUM_P (regnum);
+ if (group == i368_mmx_reggroup)
+ return mmx_regnum_p (regnum);
+ if (group == i368_sse_reggroup)
+ return sse_regnum_p;
+ if (group == vector_reggroup)
+ return (mmx_regnum_p (regnum) || sse_regnum_p);
+ if (group == float_reggroup)
+ return (FP_REGNUM_P (regnum) || FPC_REGNUM_P (regnum));
if (group == general_reggroup)
return 1;
- return 0;
+ if (group == save_reggroup || group == restore_reggroup)
+ return (regnum < NUM_REGS);
+ return default_register_reggroup_p (gdbarch, regnum, group);
}