* amd64-tdep.c (amd64_sse_type): Remove.

(amd64_register_info): Use i386_eflags_type and i386_sse_type
where appropriate.
(AMD64_NUM_REGS): Use ARRAY_SIZE.
(amd64_register_type): Remove code to build amd_sse_type.
* i386-tdep.c (i386_eflag_type): New variable.
(i386_mmx_type, i386_sse_type): Make global.
(i386_init_types): New function.
(i386_build_mmx_type, i386_build_sse_type): Remove functions.
(i386_register_type): Return i386_eflag_type, i386_sse_type and
i386_mmx_type when appropriate.
(_initialize_i386_tdep): Call i386_init_types.
* i386-tdep.h (i386_eflags_type, i386_mmx_type, i386_sse_type):
Declare extern.
Based on a previous patch form Michal Ludvig:
This commit is contained in:
Mark Kettenis
2006-01-18 21:26:47 +00:00
parent 4f2aea11c7
commit 5ae96ec1ab
4 changed files with 119 additions and 102 deletions

View File

@ -1,7 +1,9 @@
/* Target-dependent code for AMD64.
Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
Inc. Contributed by Jiri Smid, SuSE Labs.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
Contributed by Jiri Smid, SuSE Labs.
This file is part of GDB.
@ -55,8 +57,6 @@ struct amd64_register_info
struct type **type;
};
static struct type *amd64_sse_type;
static struct amd64_register_info const amd64_register_info[] =
{
{ "rax", &builtin_type_int64 },
@ -78,7 +78,7 @@ static struct amd64_register_info const amd64_register_info[] =
{ "r14", &builtin_type_int64 },
{ "r15", &builtin_type_int64 },
{ "rip", &builtin_type_void_func_ptr },
{ "eflags", &builtin_type_int32 },
{ "eflags", &i386_eflags_type },
{ "cs", &builtin_type_int32 },
{ "ss", &builtin_type_int32 },
{ "ds", &builtin_type_int32 },
@ -105,28 +105,27 @@ static struct amd64_register_info const amd64_register_info[] =
{ "fop", &builtin_type_int32 },
/* %xmm0 is register number 40. */
{ "xmm0", &amd64_sse_type },
{ "xmm1", &amd64_sse_type },
{ "xmm2", &amd64_sse_type },
{ "xmm3", &amd64_sse_type },
{ "xmm4", &amd64_sse_type },
{ "xmm5", &amd64_sse_type },
{ "xmm6", &amd64_sse_type },
{ "xmm7", &amd64_sse_type },
{ "xmm8", &amd64_sse_type },
{ "xmm9", &amd64_sse_type },
{ "xmm10", &amd64_sse_type },
{ "xmm11", &amd64_sse_type },
{ "xmm12", &amd64_sse_type },
{ "xmm13", &amd64_sse_type },
{ "xmm14", &amd64_sse_type },
{ "xmm15", &amd64_sse_type },
{ "xmm0", &i386_sse_type },
{ "xmm1", &i386_sse_type },
{ "xmm2", &i386_sse_type },
{ "xmm3", &i386_sse_type },
{ "xmm4", &i386_sse_type },
{ "xmm5", &i386_sse_type },
{ "xmm6", &i386_sse_type },
{ "xmm7", &i386_sse_type },
{ "xmm8", &i386_sse_type },
{ "xmm9", &i386_sse_type },
{ "xmm10", &i386_sse_type },
{ "xmm11", &i386_sse_type },
{ "xmm12", &i386_sse_type },
{ "xmm13", &i386_sse_type },
{ "xmm14", &i386_sse_type },
{ "xmm15", &i386_sse_type },
{ "mxcsr", &builtin_type_int32 }
};
/* Total number of registers. */
#define AMD64_NUM_REGS \
(sizeof (amd64_register_info) / sizeof (amd64_register_info[0]))
#define AMD64_NUM_REGS ARRAY_SIZE (amd64_register_info)
/* Return the name of register REGNUM. */
@ -145,33 +144,9 @@ amd64_register_name (int regnum)
static struct type *
amd64_register_type (struct gdbarch *gdbarch, int regnum)
{
struct type *t;
gdb_assert (regnum >= 0 && regnum < AMD64_NUM_REGS);
/* ??? Unfortunately, amd64_init_abi is called too early, and so we
cannot create the amd64_sse_type early enough to avoid any check
at this point. */
t = *amd64_register_info[regnum].type;
if (t != NULL)
return t;
gdb_assert (amd64_sse_type == NULL);
t = init_composite_type ("__gdb_builtin_type_vec128i", TYPE_CODE_UNION);
append_composite_type_field (t, "v4_float", builtin_type_v4_float);
append_composite_type_field (t, "v2_double", builtin_type_v2_double);
append_composite_type_field (t, "v16_int8", builtin_type_v16_int8);
append_composite_type_field (t, "v8_int16", builtin_type_v8_int16);
append_composite_type_field (t, "v4_int32", builtin_type_v4_int32);
append_composite_type_field (t, "v2_int64", builtin_type_v2_int64);
append_composite_type_field (t, "uint128", builtin_type_int128);
TYPE_FLAGS (t) |= TYPE_FLAG_VECTOR;
TYPE_NAME (t) = "builtin_type_vec128i";
amd64_sse_type = t;
return t;
return *amd64_register_info[regnum].type;
}
/* DWARF Register Number Mapping as defined in the System V psABI,