* i386-tdep.c (i386_register_virtual_type): New function.
(i386_register_convertible): New function. * config/i386/tm-i386.h (REGISTER_VIRTUAL_TYPE): Redefine in terms of i386_register_virtual_type. (REGISTER_CONVERTIBLE): Redefine in terms of i386_register_convertible. (i386_register_virtual_type, i386_register_convertible): New prototypes.
This commit is contained in:
parent
6e0ce711e9
commit
d7a0d72c95
3 changed files with 51 additions and 15 deletions
|
@ -1,3 +1,14 @@
|
||||||
|
2001-05-09 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
||||||
|
* i386-tdep.c (i386_register_virtual_type): New function.
|
||||||
|
(i386_register_convertible): New function.
|
||||||
|
* config/i386/tm-i386.h (REGISTER_VIRTUAL_TYPE): Redefine in terms
|
||||||
|
of i386_register_virtual_type.
|
||||||
|
(REGISTER_CONVERTIBLE): Redefine in terms of
|
||||||
|
i386_register_convertible.
|
||||||
|
(i386_register_virtual_type, i386_register_convertible): New
|
||||||
|
prototypes.
|
||||||
|
|
||||||
2001-05-08 Jim Blandy <jimb@redhat.com>
|
2001-05-08 Jim Blandy <jimb@redhat.com>
|
||||||
|
|
||||||
* Makefile.in (mn10300-tdep.o): New rule.
|
* Makefile.in (mn10300-tdep.o): New rule.
|
||||||
|
|
|
@ -238,23 +238,17 @@ extern int i386_register_virtual_size[];
|
||||||
/* Largest value REGISTER_VIRTUAL_SIZE can have. */
|
/* Largest value REGISTER_VIRTUAL_SIZE can have. */
|
||||||
#define MAX_REGISTER_VIRTUAL_SIZE 16
|
#define MAX_REGISTER_VIRTUAL_SIZE 16
|
||||||
|
|
||||||
/* Return the GDB type object for the "standard" data type of data in
|
/* Return the GDB type object for the "standard" data type of data in
|
||||||
register N. Perhaps si and di should go here, but potentially they
|
register REGNUM. */
|
||||||
could be used for things other than address. */
|
|
||||||
|
|
||||||
#define REGISTER_VIRTUAL_TYPE(N) \
|
#define REGISTER_VIRTUAL_TYPE(regnum) i386_register_virtual_type (regnum)
|
||||||
(((N) == PC_REGNUM || (N) == FP_REGNUM || (N) == SP_REGNUM) \
|
extern struct type *i386_register_virtual_type (int regnum);
|
||||||
? lookup_pointer_type (builtin_type_void) \
|
|
||||||
: IS_FP_REGNUM(N) ? builtin_type_long_double \
|
|
||||||
: IS_SSE_REGNUM(N) ? builtin_type_v4sf \
|
|
||||||
: builtin_type_int)
|
|
||||||
|
|
||||||
/* REGISTER_CONVERTIBLE(N) is true iff register N's virtual format is
|
/* Return true iff register REGNUM's virtual format is different from
|
||||||
different from its raw format. Note that this definition assumes
|
its raw format. */
|
||||||
that the host supports IEEE 32-bit floats, since it doesn't say
|
|
||||||
that SSE registers need conversion. Even if we can't find a
|
#define REGISTER_CONVERTIBLE(regnum) i386_register_convertible (regnum)
|
||||||
counterexample, this is still sloppy. */
|
extern int i386_register_convertible (int regnum);
|
||||||
#define REGISTER_CONVERTIBLE(n) (IS_FP_REGNUM (n))
|
|
||||||
|
|
||||||
/* Convert data from raw format for register REGNUM in buffer FROM to
|
/* Convert data from raw format for register REGNUM in buffer FROM to
|
||||||
virtual format with type TYPE in buffer TO. */
|
virtual format with type TYPE in buffer TO. */
|
||||||
|
|
|
@ -905,6 +905,37 @@ i386_extract_struct_value_address (char *regbuf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return the GDB type object for the "standard" data type of data in
|
||||||
|
register REGNUM. Perhaps %esi and %edi should go here, but
|
||||||
|
potentially they could be used for things other than address. */
|
||||||
|
|
||||||
|
struct type *
|
||||||
|
i386_register_virtual_type (int regnum)
|
||||||
|
{
|
||||||
|
if (regnum == PC_REGNUM || regnum == FP_REGNUM || regnum == SP_REGNUM)
|
||||||
|
return lookup_pointer_type (builtin_type_void);
|
||||||
|
|
||||||
|
if (IS_FP_REGNUM (regnum))
|
||||||
|
return builtin_type_long_double;
|
||||||
|
|
||||||
|
if (IS_SSE_REGNUM (regnum))
|
||||||
|
return builtin_type_v4sf;
|
||||||
|
|
||||||
|
return builtin_type_int;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return true iff register REGNUM's virtual format is different from
|
||||||
|
its raw format. Note that this definition assumes that the host
|
||||||
|
supports IEEE 32-bit floats, since it doesn't say that SSE
|
||||||
|
registers need conversion. Even if we can't find a counterexample,
|
||||||
|
this is still sloppy. */
|
||||||
|
|
||||||
|
int
|
||||||
|
i386_register_convertible (int regnum)
|
||||||
|
{
|
||||||
|
return IS_FP_REGNUM (regnum);
|
||||||
|
}
|
||||||
|
|
||||||
/* Convert data from raw format for register REGNUM in buffer FROM to
|
/* Convert data from raw format for register REGNUM in buffer FROM to
|
||||||
virtual format with type TYPE in buffer TO. In principle both
|
virtual format with type TYPE in buffer TO. In principle both
|
||||||
formats are identical except that the virtual format has two extra
|
formats are identical except that the virtual format has two extra
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue