aboutsummaryrefslogtreecommitdiff
path: root/gdb/target-float.h
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2017-11-06 15:57:31 +0100
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2017-11-06 15:57:31 +0100
commit50637b26f85dc3e59b616f1b01ca8885cf98f0b4 (patch)
tree9802b0d858d7571b8a56d752733ee2c58658eecf /gdb/target-float.h
parentf69fdf9bca80ac703890a51e124e408cbccbb743 (diff)
downloadgdb-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.h12
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