diff options
author | Mark Kettenis <kettenis@gnu.org> | 2000-03-26 21:21:50 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2000-03-26 21:21:50 +0000 |
commit | ac27f131b2fc0c5e0872c5855c599974b7416d07 (patch) | |
tree | 399afc0505a8f76691e4d2f234516cd003e5961e /gdb/config/i386/tm-linux.h | |
parent | 9f10757c407c9946029436682ae554f9739fa62d (diff) | |
download | gdb-ac27f131b2fc0c5e0872c5855c599974b7416d07.zip gdb-ac27f131b2fc0c5e0872c5855c599974b7416d07.tar.gz gdb-ac27f131b2fc0c5e0872c5855c599974b7416d07.tar.bz2 |
2000-03-26 Mark Kettenis <kettenis@gnu.org>
Provide `long double' support for most i386 targets.
* config/i386/tm-i386.h (TARGET_LONG_DOUBLE_FORMAT): Define as
&floatformat_i387_ext.
(TARGET_LONG_DOUBLE_BITS): Define as 96.
(REGISTER_VIRTUAL_TYPE): Change type for FPU registers to
`builtin_type_long_double'.
(REGISTER_CONVERT_TO_VIRTUAL): Call
i386_register_convert_to_virtual.
(REGISTER_CONVERT_TO_RAW): Call i386_register_convert_to_raw.
(i387_to_double, double_to_i387): Remove prototypes.
(i386_extract_return_value): Change prototype to match definition
in i386-tdep.c.
* config/i386/tm-i386mk.h (TARGET_LONG_DOUBLE_FORMAT): #undef.
(TARGET_LONG_DOUBLE_BITS): #undef.
* config/i386/tm-linux.h (TARGET_LONG_DOUBLE_BIT): Remove.
[HAVE_LONG_DOUBLE && HOST_I386] (LD_I387): Remove.
(i387_extract_floating, i387_store_floating): Remove prototypes.
(TARGET_EXTRACT_FLOATING, TARGET_STORE_FLOATING): Remove.
(REGISTER_CONVERT_TO_VIRTUAL, REGOISTER_CONVERT_TO_RAW): Remove.
(REGISTER_VIRTUAL_TYPE): Remove.
* i386-tdep.c (i386_register_convert_to_virtual): New function.
(i386_register_convert_to_raw): New function.
* i387-tdep.c [LD_I387] (i387_extract_floating): Remove.
(i387_store_floating): Remove.
Diffstat (limited to 'gdb/config/i386/tm-linux.h')
-rw-r--r-- | gdb/config/i386/tm-linux.h | 37 |
1 files changed, 4 insertions, 33 deletions
diff --git a/gdb/config/i386/tm-linux.h b/gdb/config/i386/tm-linux.h index 2e86a5c..d6a4616 100644 --- a/gdb/config/i386/tm-linux.h +++ b/gdb/config/i386/tm-linux.h @@ -30,20 +30,15 @@ #include "i386/tm-i386.h" #include "tm-linux.h" -/* This should probably move to tm-i386.h. */ -#define TARGET_LONG_DOUBLE_BIT 80 +/* FIXME: kettenis/2000-03-26: We should get rid of this last piece of + Linux-specific `long double'-support code, probably by adding code + to valprint.c:print_floating() to recognize various extended + floating-point formats. */ #if defined(HAVE_LONG_DOUBLE) && defined(HOST_I386) /* The host and target are i386 machines and the compiler supports long doubles. Long doubles on the host therefore have the same layout as a 387 FPU stack register. */ -#define LD_I387 - -extern int i387_extract_floating (PTR addr, int len, long double *dretptr); -extern int i387_store_floating (PTR addr, int len, long double val); - -#define TARGET_EXTRACT_FLOATING i387_extract_floating -#define TARGET_STORE_FLOATING i387_store_floating #define TARGET_ANALYZE_FLOATING \ do \ @@ -61,30 +56,6 @@ extern int i387_store_floating (PTR addr, int len, long double val); } \ while (0) -#undef REGISTER_CONVERT_TO_VIRTUAL -#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,TYPE,FROM,TO) \ -{ \ - long double val = *((long double *)FROM); \ - store_floating ((TO), TYPE_LENGTH (TYPE), val); \ -} - -#undef REGISTER_CONVERT_TO_RAW -#define REGISTER_CONVERT_TO_RAW(TYPE,REGNUM,FROM,TO) \ -{ \ - long double val = extract_floating ((FROM), TYPE_LENGTH (TYPE)); \ - *((long double *)TO) = val; \ -} - -/* Return the GDB type object for the "standard" data type - of data in register N. */ -#undef REGISTER_VIRTUAL_TYPE -#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) - #endif /* The following works around a problem with /usr/include/sys/procfs.h */ |