* 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:
Mark Kettenis 2001-05-09 09:58:45 +00:00
parent 6e0ce711e9
commit d7a0d72c95
3 changed files with 51 additions and 15 deletions

View File

@ -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>
* Makefile.in (mn10300-tdep.o): New rule.

View File

@ -238,23 +238,17 @@ extern int i386_register_virtual_size[];
/* Largest value REGISTER_VIRTUAL_SIZE can have. */
#define MAX_REGISTER_VIRTUAL_SIZE 16
/* 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
could be used for things other than address. */
/* Return the GDB type object for the "standard" data type of data in
register REGNUM. */
#define REGISTER_VIRTUAL_TYPE(N) \
(((N) == PC_REGNUM || (N) == FP_REGNUM || (N) == SP_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)
#define REGISTER_VIRTUAL_TYPE(regnum) i386_register_virtual_type (regnum)
extern struct type *i386_register_virtual_type (int regnum);
/* REGISTER_CONVERTIBLE(N) is true iff register N'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. */
#define REGISTER_CONVERTIBLE(n) (IS_FP_REGNUM (n))
/* Return true iff register REGNUM's virtual format is different from
its raw format. */
#define REGISTER_CONVERTIBLE(regnum) i386_register_convertible (regnum)
extern int i386_register_convertible (int regnum);
/* Convert data from raw format for register REGNUM in buffer FROM to
virtual format with type TYPE in buffer TO. */

View File

@ -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
virtual format with type TYPE in buffer TO. In principle both
formats are identical except that the virtual format has two extra