diff options
author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2017-11-06 15:57:31 +0100 |
---|---|---|
committer | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2017-11-06 15:57:31 +0100 |
commit | 50637b26f85dc3e59b616f1b01ca8885cf98f0b4 (patch) | |
tree | 9802b0d858d7571b8a56d752733ee2c58658eecf /gdb/target-float.h | |
parent | f69fdf9bca80ac703890a51e124e408cbccbb743 (diff) | |
download | gdb-50637b26f85dc3e59b616f1b01ca8885cf98f0b4.zip gdb-50637b26f85dc3e59b616f1b01ca8885cf98f0b4.tar.gz gdb-50637b26f85dc3e59b616f1b01ca8885cf98f0b4.tar.bz2 |
Target FP: Add conversion routines to target-float.{c,h}
This patch adds the following conversion routines:
- target_float_to_longest
- target_float_from_longest
- target_float_from_ulongest
- target_float_convert
which call the equivalent decimal_ routines to handle decimal FP,
and call helper routines that currently still go via DOUBLEST to
handle binary FP.
The target_float_convert routine not only handles BFP<->BFP and
DFP<->DFP conversions, but also BFP<->DFP, which are implemented
by converting to a string and back.
These helpers are used in particular to implement conversion
from and to FP in value_cast, without going through DOUBLEST there.
In order to implement this for the FP<-integer case, the
pack_long / pack_unsigned_long routines are extended to support
floating-point values as output (thereby allowing use of
value_from_[u]longest with a floating-point target type).
This latter change also allows simplification of value_one.
gdb/ChangeLog:
2017-11-06 Ulrich Weigand <uweigand@de.ibm.com>
* target-float.c (floatformat_to_longest): New function.
(floatformat_from_longest, floatformat_from_ulongest): Likewise.
(floatformat_convert): Likewise.
(target_float_to_longest): Likewise.
(target_float_from_longest, target_float_from_ulongest): Likewise.
(target_float_convert): Likewise.
* target-float.h (target_float_to_longest): Add prototype.
(target_float_from_longest, target_float_from_ulongest): Likewise.
(target_float_convert): Likewise.
* value.c (unpack_long): Use target_float_to_longest.
(pack_long): Allow FP types. Use target_float_from_longest.
(pack_unsigned_long): Likewise using target_float_from_ulongest.
* valops.c: Include "target-float.h". Do not include "dfp.h".
(value_cast): Handle conversions to FP using target_float_convert,
value_from_ulongest, and value_from_longest.
(value_one): Use value_from_longest for FP types as well.
Diffstat (limited to 'gdb/target-float.h')
-rw-r--r-- | gdb/target-float.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gdb/target-float.h b/gdb/target-float.h index 317e98e..9ea1812 100644 --- a/gdb/target-float.h +++ b/gdb/target-float.h @@ -32,4 +32,16 @@ extern bool target_float_from_string (gdb_byte *addr, const struct type *type, const std::string &string); +extern LONGEST target_float_to_longest (const gdb_byte *addr, + const struct type *type); +extern void target_float_from_longest (gdb_byte *addr, + const struct type *type, + LONGEST val); +extern void target_float_from_ulongest (gdb_byte *addr, + const struct type *type, + ULONGEST val); +extern void target_float_convert (const gdb_byte *from, + const struct type *from_type, + gdb_byte *to, const struct type *to_type); + #endif |