mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-03 04:12:10 +08:00
66c02b9ed1
This patch adds the following target floating-point routines: - target_float_binop - target_float_compare which call the equivalent decimal_ routines to handle decimal FP, and call helper routines that currently still go via DOUBLEST to handle binary FP (derived from current valarith.c code). These routines are used to handle both binary and decimal FP types in scalar_binop, value_equal, and value_less, mostly following the method currently used for decimal FP. The existing value_args_as_decimal helper is renamed to value_args_as_target_float and extended to handle both binary and decimal types. The unary operations value_pos and value_neg are also simplified, the former by using a simple copy for all scalar types, the latter by using value_binop (... BINOP_SUB) to implement negation as subtraction from zero. ChangeLog: 2017-11-06 Ulrich Weigand <uweigand@de.ibm.com> * target-float.c: Include <math.h>. (floatformat_binop): New function. (floatformat_compare): Likewise. (target_float_binop): Likewise. (target_float_compare): Likewise. * target-float.h: Include "expression.h". (target_float_binop): Add prototype. (target_float_compare): Likewise. * valarith.c: Do not include "doublest.h" and "dfp.h". Include "common/byte-vector.h". (value_args_as_decimal): Remove, replace by ... (value_args_as_target_float): ... this function. Handle both binary and decimal target floating-point formats. (scalar_binop): Handle both binary and decimal FP using value_args_as_target_float and target_float_binop. (value_equal): Handle both binary and decimal FP using value_args_as_target_float and target_float_compare. (value_less): Likewise. (value_pos): Handle all scalar types as simple copy. (value_neg): Handle all scalar types via BINOP_SUB from 0. * dfp.c (decimal_binop): Throw error instead of internal_error when called with an unsupported operation code.
57 lines
2.0 KiB
C++
57 lines
2.0 KiB
C++
/* Floating point definitions for GDB.
|
|
|
|
Copyright (C) 1986-2017 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef TYPED_FLOAT_H
|
|
#define TYPED_FLOAT_H
|
|
|
|
#include "expression.h"
|
|
|
|
extern bool target_float_is_valid (const gdb_byte *addr,
|
|
const struct type *type);
|
|
extern bool target_float_is_zero (const gdb_byte *addr,
|
|
const struct type *type);
|
|
|
|
extern std::string target_float_to_string (const gdb_byte *addr,
|
|
const struct type *type,
|
|
const char *format = nullptr);
|
|
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);
|
|
|
|
extern void target_float_binop (enum exp_opcode opcode,
|
|
const gdb_byte *x, const struct type *type_x,
|
|
const gdb_byte *y, const struct type *type_y,
|
|
gdb_byte *res, const struct type *type_res);
|
|
extern int target_float_compare (const gdb_byte *x, const struct type *type_x,
|
|
const gdb_byte *y, const struct type *type_y);
|
|
|
|
#endif
|