mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-21 02:24:17 +08:00
Make function fixed_point_scaling_factor a method of struct type
This logically connects this function to the object it inspects. gdb/ChangeLog: * gdbtypes.h (struct type) <fixed_point_scaling_factor>: New method, replacing fixed_point_scaling_factor. All callers updated throughout this project. (fixed_point_scaling_factor): Delete declaration. * gdbtypes.c (type::fixed_point_scaling_factor): Replaces fixed_point_scaling_factor. Adjust implementation accordingly.
This commit is contained in:
@ -1,3 +1,12 @@
|
|||||||
|
2020-11-24 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
* gdbtypes.h (struct type) <fixed_point_scaling_factor>: New method,
|
||||||
|
replacing fixed_point_scaling_factor. All callers updated
|
||||||
|
throughout this project.
|
||||||
|
(fixed_point_scaling_factor): Delete declaration.
|
||||||
|
* gdbtypes.c (type::fixed_point_scaling_factor): Replaces
|
||||||
|
fixed_point_scaling_factor. Adjust implementation accordingly.
|
||||||
|
|
||||||
2020-11-24 Joel Brobecker <brobecker@adacore.com>
|
2020-11-24 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* gdbtypes.h (struct type) <fixed_point_type_base_type> New method,
|
* gdbtypes.h (struct type) <fixed_point_type_base_type> New method,
|
||||||
|
@ -4927,7 +4927,7 @@ static void
|
|||||||
print_fixed_point_type_info (struct type *type, int spaces)
|
print_fixed_point_type_info (struct type *type, int spaces)
|
||||||
{
|
{
|
||||||
printfi_filtered (spaces + 2, "scaling factor: %s\n",
|
printfi_filtered (spaces + 2, "scaling factor: %s\n",
|
||||||
fixed_point_scaling_factor (type).str ().c_str ());
|
type->fixed_point_scaling_factor ().str ().c_str ());
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct obstack dont_print_type_obstack;
|
static struct obstack dont_print_type_obstack;
|
||||||
@ -5881,9 +5881,9 @@ type::fixed_point_type_base_type ()
|
|||||||
/* See gdbtypes.h. */
|
/* See gdbtypes.h. */
|
||||||
|
|
||||||
const gdb_mpq &
|
const gdb_mpq &
|
||||||
fixed_point_scaling_factor (struct type *type)
|
type::fixed_point_scaling_factor ()
|
||||||
{
|
{
|
||||||
type = type->fixed_point_type_base_type ();
|
struct type *type = this->fixed_point_type_base_type ();
|
||||||
|
|
||||||
return type->fixed_point_info ().scaling_factor;
|
return type->fixed_point_info ().scaling_factor;
|
||||||
}
|
}
|
||||||
|
@ -1224,6 +1224,11 @@ struct type
|
|||||||
|
|
||||||
struct type *fixed_point_type_base_type ();
|
struct type *fixed_point_type_base_type ();
|
||||||
|
|
||||||
|
/* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return its scaling
|
||||||
|
factor. */
|
||||||
|
|
||||||
|
const gdb_mpq &fixed_point_scaling_factor ();
|
||||||
|
|
||||||
/* * Return the dynamic property of the requested KIND from this type's
|
/* * Return the dynamic property of the requested KIND from this type's
|
||||||
list of dynamic properties. */
|
list of dynamic properties. */
|
||||||
dynamic_prop *dyn_prop (dynamic_prop_node_kind kind) const;
|
dynamic_prop *dyn_prop (dynamic_prop_node_kind kind) const;
|
||||||
@ -2596,9 +2601,6 @@ extern int type_not_associated (const struct type *type);
|
|||||||
a range type whose base type is a TYPE_CODE_FIXED_POINT. */
|
a range type whose base type is a TYPE_CODE_FIXED_POINT. */
|
||||||
extern bool is_fixed_point_type (struct type *type);
|
extern bool is_fixed_point_type (struct type *type);
|
||||||
|
|
||||||
/* Given TYPE, which is a fixed point type, return its scaling factor. */
|
|
||||||
extern const gdb_mpq &fixed_point_scaling_factor (struct type *type);
|
|
||||||
|
|
||||||
/* Allocate a fixed-point type info for TYPE. This should only be
|
/* Allocate a fixed-point type info for TYPE. This should only be
|
||||||
called by INIT_FIXED_POINT_SPECIFIC. */
|
called by INIT_FIXED_POINT_SPECIFIC. */
|
||||||
extern void allocate_fixed_point_type_info (struct type *type);
|
extern void allocate_fixed_point_type_info (struct type *type);
|
||||||
|
@ -667,7 +667,7 @@ print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
|
|||||||
void
|
void
|
||||||
print_type_fixed_point (struct type *type, struct ui_file *stream)
|
print_type_fixed_point (struct type *type, struct ui_file *stream)
|
||||||
{
|
{
|
||||||
std::string small_img = fixed_point_scaling_factor (type).str ();
|
std::string small_img = type->fixed_point_scaling_factor ().str ();
|
||||||
|
|
||||||
fprintf_filtered (stream, "%s-byte fixed point (small = %s)",
|
fprintf_filtered (stream, "%s-byte fixed point (small = %s)",
|
||||||
pulongest (TYPE_LENGTH (type)), small_img.c_str ());
|
pulongest (TYPE_LENGTH (type)), small_img.c_str ());
|
||||||
|
@ -911,11 +911,11 @@ fixed_point_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
|
|||||||
v1.read_fixed_point (gdb::make_array_view (value_contents (arg1),
|
v1.read_fixed_point (gdb::make_array_view (value_contents (arg1),
|
||||||
TYPE_LENGTH (type1)),
|
TYPE_LENGTH (type1)),
|
||||||
type_byte_order (type1), type1->is_unsigned (),
|
type_byte_order (type1), type1->is_unsigned (),
|
||||||
fixed_point_scaling_factor (type1));
|
type1->fixed_point_scaling_factor ());
|
||||||
v2.read_fixed_point (gdb::make_array_view (value_contents (arg2),
|
v2.read_fixed_point (gdb::make_array_view (value_contents (arg2),
|
||||||
TYPE_LENGTH (type2)),
|
TYPE_LENGTH (type2)),
|
||||||
type_byte_order (type2), type2->is_unsigned (),
|
type_byte_order (type2), type2->is_unsigned (),
|
||||||
fixed_point_scaling_factor (type2));
|
type2->fixed_point_scaling_factor ());
|
||||||
|
|
||||||
#define INIT_VAL_WITH_FIXED_POINT_VAL(RESULT) \
|
#define INIT_VAL_WITH_FIXED_POINT_VAL(RESULT) \
|
||||||
do { \
|
do { \
|
||||||
@ -924,7 +924,7 @@ fixed_point_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
|
|||||||
(gdb::make_array_view (value_contents_raw (val), \
|
(gdb::make_array_view (value_contents_raw (val), \
|
||||||
TYPE_LENGTH (type1)), \
|
TYPE_LENGTH (type1)), \
|
||||||
type_byte_order (type1), type1->is_unsigned (), \
|
type_byte_order (type1), type1->is_unsigned (), \
|
||||||
fixed_point_scaling_factor (type1)); \
|
type1->fixed_point_scaling_factor ()); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
switch (op)
|
switch (op)
|
||||||
|
@ -363,7 +363,7 @@ value_cast_to_fixed_point (struct type *to_type, struct value *from_val)
|
|||||||
mpq_set_z (vq.val, vz.val);
|
mpq_set_z (vq.val, vz.val);
|
||||||
|
|
||||||
if (is_fixed_point_type (from_type))
|
if (is_fixed_point_type (from_type))
|
||||||
mpq_mul (vq.val, vq.val, fixed_point_scaling_factor (from_type).val);
|
mpq_mul (vq.val, vq.val, from_type->fixed_point_scaling_factor ().val);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -373,7 +373,7 @@ value_cast_to_fixed_point (struct type *to_type, struct value *from_val)
|
|||||||
/* Divide that value by the scaling factor to obtain the unscaled
|
/* Divide that value by the scaling factor to obtain the unscaled
|
||||||
value, first in rational form, and then in integer form. */
|
value, first in rational form, and then in integer form. */
|
||||||
|
|
||||||
mpq_div (vq.val, vq.val, fixed_point_scaling_factor (to_type).val);
|
mpq_div (vq.val, vq.val, to_type->fixed_point_scaling_factor ().val);
|
||||||
gdb_mpz unscaled = vq.get_rounded ();
|
gdb_mpz unscaled = vq.get_rounded ();
|
||||||
|
|
||||||
/* Finally, create the result value, and pack the unscaled value
|
/* Finally, create the result value, and pack the unscaled value
|
||||||
@ -527,7 +527,7 @@ value_cast (struct type *type, struct value *arg2)
|
|||||||
fp_val.read_fixed_point
|
fp_val.read_fixed_point
|
||||||
(gdb::make_array_view (value_contents (arg2), TYPE_LENGTH (type2)),
|
(gdb::make_array_view (value_contents (arg2), TYPE_LENGTH (type2)),
|
||||||
type_byte_order (type2), type2->is_unsigned (),
|
type_byte_order (type2), type2->is_unsigned (),
|
||||||
fixed_point_scaling_factor (type2));
|
type2->fixed_point_scaling_factor ());
|
||||||
|
|
||||||
struct value *v = allocate_value (to_type);
|
struct value *v = allocate_value (to_type);
|
||||||
target_float_from_host_double (value_contents_raw (v),
|
target_float_from_host_double (value_contents_raw (v),
|
||||||
|
@ -811,7 +811,7 @@ generic_val_print_fixed_point (struct value *val, struct ui_file *stream,
|
|||||||
|
|
||||||
f.read_fixed_point (gdb::make_array_view (valaddr, TYPE_LENGTH (type)),
|
f.read_fixed_point (gdb::make_array_view (valaddr, TYPE_LENGTH (type)),
|
||||||
type_byte_order (type), type->is_unsigned (),
|
type_byte_order (type), type->is_unsigned (),
|
||||||
fixed_point_scaling_factor (type));
|
type->fixed_point_scaling_factor ());
|
||||||
|
|
||||||
const char *fmt = TYPE_LENGTH (type) < 4 ? "%.11Fg" : "%.17Fg";
|
const char *fmt = TYPE_LENGTH (type) < 4 ? "%.11Fg" : "%.17Fg";
|
||||||
std::string str = gmp_string_printf (fmt, f.val);
|
std::string str = gmp_string_printf (fmt, f.val);
|
||||||
|
@ -2814,7 +2814,7 @@ unpack_long (struct type *type, const gdb_byte *valaddr)
|
|||||||
gdb_mpq vq;
|
gdb_mpq vq;
|
||||||
vq.read_fixed_point (gdb::make_array_view (valaddr, len),
|
vq.read_fixed_point (gdb::make_array_view (valaddr, len),
|
||||||
byte_order, nosign,
|
byte_order, nosign,
|
||||||
fixed_point_scaling_factor (type));
|
type->fixed_point_scaling_factor ());
|
||||||
|
|
||||||
gdb_mpz vz;
|
gdb_mpz vz;
|
||||||
mpz_tdiv_q (vz.val, mpq_numref (vq.val), mpq_denref (vq.val));
|
mpz_tdiv_q (vz.val, mpq_numref (vq.val), mpq_denref (vq.val));
|
||||||
|
Reference in New Issue
Block a user