X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Ftarget-float.c;h=d077ca2e8e888fd1554ddbbaf01dfdc54c3d76fc;hb=ea764154c27a11619ba764a4c92f395ba5007234;hp=4ef3505b067233485ccc8e53c904670e1ba354fc;hpb=85102364b2d1845fe9ae7d70096671a3ea4bccf3;p=binutils-gdb.git diff --git a/gdb/target-float.c b/gdb/target-float.c index 4ef3505b067..d077ca2e8e8 100644 --- a/gdb/target-float.c +++ b/gdb/target-float.c @@ -1,6 +1,6 @@ /* Floating point routines for GDB, the GNU debugger. - Copyright (C) 2017-2019 Free Software Foundation, Inc. + Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is part of GDB. @@ -189,9 +189,9 @@ get_field (const bfd_byte *data, enum floatformat_byteorders order, int excess = FLOATFORMAT_CHAR_BIT - (total_len % FLOATFORMAT_CHAR_BIT); cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - - ((start + len + excess) / FLOATFORMAT_CHAR_BIT); + - ((start + len + excess) / FLOATFORMAT_CHAR_BIT); cur_bitshift = ((start + len + excess) % FLOATFORMAT_CHAR_BIT) - - FLOATFORMAT_CHAR_BIT; + - FLOATFORMAT_CHAR_BIT; } else { @@ -249,9 +249,9 @@ put_field (unsigned char *data, enum floatformat_byteorders order, int excess = FLOATFORMAT_CHAR_BIT - (total_len % FLOATFORMAT_CHAR_BIT); cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - - ((start + len + excess) / FLOATFORMAT_CHAR_BIT); + - ((start + len + excess) / FLOATFORMAT_CHAR_BIT); cur_bitshift = ((start + len + excess) % FLOATFORMAT_CHAR_BIT) - - FLOATFORMAT_CHAR_BIT; + - FLOATFORMAT_CHAR_BIT; } else { @@ -481,7 +481,7 @@ floatformat_mantissa (const struct floatformat *fmt, floating-point number of format FMT. */ static std::string floatformat_printf_format (const struct floatformat *fmt, - const char *format, char length) + const char *format, char length) { std::string host_format; char conversion; @@ -508,7 +508,7 @@ floatformat_printf_format (const struct floatformat *fmt, else { /* Use the specified format, stripping out the conversion character - and length modifier, if present. */ + and length modifier, if present. */ size_t len = strlen (format); gdb_assert (len > 1); conversion = format[--len]; @@ -647,8 +647,8 @@ host_float_ops::from_target (const struct floatformat *fmt, { double dto; - floatformat_to_double (fmt->split_half ? fmt->split_half : fmt, - from, &dto); + floatformat_to_double /* ARI: floatformat_to_double */ + (fmt->split_half ? fmt->split_half : fmt, from, &dto); *to = (T) dto; return; } @@ -878,23 +878,23 @@ host_float_ops::to_target (const struct floatformat *fmt, mant -= mant_long; /* If the integer bit is implicit, then we need to discard it. - If we are discarding a zero, we should be (but are not) creating - a denormalized number which means adjusting the exponent - (I think). */ + If we are discarding a zero, we should be (but are not) creating + a denormalized number which means adjusting the exponent + (I think). */ if (mant_bits_left == fmt->man_len && fmt->intbit == floatformat_intbit_no) { mant_long <<= 1; mant_long &= 0xffffffffL; - /* If we are processing the top 32 mantissa bits of a doublest - so as to convert to a float value with implied integer bit, - we will only be putting 31 of those 32 bits into the - final value due to the discarding of the top bit. In the - case of a small float value where the number of mantissa - bits is less than 32, discarding the top bit does not alter - the number of bits we will be adding to the result. */ - if (mant_bits == 32) - mant_bits -= 1; + /* If we are processing the top 32 mantissa bits of a doublest + so as to convert to a float value with implied integer bit, + we will only be putting 31 of those 32 bits into the + final value due to the discarding of the top bit. In the + case of a small float value where the number of mantissa + bits is less than 32, discarding the top bit does not alter + the number of bits we will be adding to the result. */ + if (mant_bits == 32) + mant_bits -= 1; } if (mant_bits < 32) @@ -1191,7 +1191,7 @@ public: const gdb_byte *y, const struct type *type_y) const override; private: - /* Local wrapper class to handle mpfr_t initalization and cleanup. */ + /* Local wrapper class to handle mpfr_t initialization and cleanup. */ class gdb_mpfr { public: @@ -1456,23 +1456,23 @@ mpfr_float_ops::to_target (const struct floatformat *fmt, mpfr_sub_ui (tmp.val, tmp.val, mant_long, MPFR_RNDZ); /* If the integer bit is implicit, then we need to discard it. - If we are discarding a zero, we should be (but are not) creating - a denormalized number which means adjusting the exponent - (I think). */ + If we are discarding a zero, we should be (but are not) creating + a denormalized number which means adjusting the exponent + (I think). */ if (mant_bits_left == fmt->man_len && fmt->intbit == floatformat_intbit_no) { mant_long <<= 1; mant_long &= 0xffffffffL; - /* If we are processing the top 32 mantissa bits of a doublest - so as to convert to a float value with implied integer bit, - we will only be putting 31 of those 32 bits into the - final value due to the discarding of the top bit. In the - case of a small float value where the number of mantissa - bits is less than 32, discarding the top bit does not alter - the number of bits we will be adding to the result. */ - if (mant_bits == 32) - mant_bits -= 1; + /* If we are processing the top 32 mantissa bits of a doublest + so as to convert to a float value with implied integer bit, + we will only be putting 31 of those 32 bits into the + final value due to the discarding of the top bit. In the + case of a small float value where the number of mantissa + bits is less than 32, discarding the top bit does not alter + the number of bits we will be adding to the result. */ + if (mant_bits == 32) + mant_bits -= 1; } if (mant_bits < 32) @@ -1742,7 +1742,7 @@ mpfr_float_ops::compare (const gdb_byte *x, const struct type *type_x, static void match_endianness (const gdb_byte *from, const struct type *type, gdb_byte *to) { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_DECFLOAT); + gdb_assert (type->code () == TYPE_CODE_DECFLOAT); int len = TYPE_LENGTH (type); int i; @@ -1753,7 +1753,7 @@ match_endianness (const gdb_byte *from, const struct type *type, gdb_byte *to) #define OPPOSITE_BYTE_ORDER BFD_ENDIAN_BIG #endif - if (gdbarch_byte_order (get_type_arch (type)) == OPPOSITE_BYTE_ORDER) + if (type_byte_order (type) == OPPOSITE_BYTE_ORDER) for (i = 0; i < len; i++) to[i] = from[len - i - 1]; else @@ -1768,7 +1768,7 @@ match_endianness (const gdb_byte *from, const struct type *type, gdb_byte *to) static void set_decnumber_context (decContext *ctx, const struct type *type) { - gdb_assert (TYPE_CODE (type) == TYPE_CODE_DECFLOAT); + gdb_assert (type->code () == TYPE_CODE_DECFLOAT); switch (TYPE_LENGTH (type)) { @@ -1808,7 +1808,7 @@ decimal_check_errors (decContext *ctx) for computation to each size of decimal float. */ static void decimal_from_number (const decNumber *from, - gdb_byte *to, const struct type *type) + gdb_byte *to, const struct type *type) { gdb_byte dec[16]; @@ -1839,7 +1839,7 @@ decimal_from_number (const decNumber *from, appropriate representation for computation. */ static void decimal_to_number (const gdb_byte *addr, const struct type *type, - decNumber *to) + decNumber *to) { gdb_byte dec[16]; match_endianness (addr, type, dec); @@ -2032,7 +2032,7 @@ decimal_float_ops::from_ulongest (gdb_byte *addr, const struct type *type, /* Converts a decimal float of LEN bytes to a LONGEST. */ LONGEST decimal_float_ops::to_longest (const gdb_byte *addr, - const struct type *type) const + const struct type *type) const { /* libdecnumber has a function to convert from decimal to integer, but it doesn't work when the decimal number has a fractional part. */ @@ -2142,7 +2142,7 @@ static bool target_float_same_category_p (const struct type *type1, const struct type *type2) { - return TYPE_CODE (type1) == TYPE_CODE (type2); + return type1->code () == type2->code (); } /* Return whether TYPE1 and TYPE2 use the same floating-point format. */ @@ -2153,15 +2153,15 @@ target_float_same_format_p (const struct type *type1, if (!target_float_same_category_p (type1, type2)) return false; - switch (TYPE_CODE (type1)) + switch (type1->code ()) { case TYPE_CODE_FLT: return floatformat_from_type (type1) == floatformat_from_type (type2); case TYPE_CODE_DECFLOAT: return (TYPE_LENGTH (type1) == TYPE_LENGTH (type2) - && (gdbarch_byte_order (get_type_arch (type1)) - == gdbarch_byte_order (get_type_arch (type2)))); + && (type_byte_order (type1) + == type_byte_order (type2))); default: gdb_assert_not_reached ("unexpected type code"); @@ -2173,7 +2173,7 @@ target_float_same_format_p (const struct type *type1, static int target_float_format_length (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: return floatformat_totalsize_bytes (floatformat_from_type (type)); @@ -2205,10 +2205,10 @@ enum target_float_ops_kind static enum target_float_ops_kind get_target_float_ops_kind (const struct type *type) { - switch (TYPE_CODE (type)) + switch (type->code ()) { case TYPE_CODE_FLT: - { + { const struct floatformat *fmt = floatformat_from_type (type); /* Binary floating-point formats matching a host format. */ @@ -2234,7 +2234,7 @@ get_target_float_ops_kind (const struct type *type) } } -/* Return target_float_ops to peform operations for KIND. */ +/* Return target_float_ops to perform operations for KIND. */ static const target_float_ops * get_target_float_ops (enum target_float_ops_kind kind) { @@ -2243,29 +2243,29 @@ get_target_float_ops (enum target_float_ops_kind kind) /* If the type format matches one of the host floating-point types, use that type as intermediate format. */ case target_float_ops_kind::host_float: - { + { static host_float_ops host_float_ops_float; return &host_float_ops_float; } case target_float_ops_kind::host_double: - { + { static host_float_ops host_float_ops_double; return &host_float_ops_double; } case target_float_ops_kind::host_long_double: - { + { static host_float_ops host_float_ops_long_double; return &host_float_ops_long_double; } /* For binary floating-point formats that do not match any host format, - use mpfr_t as intermediate format to provide precise target-floating - point emulation. However, if the MPFR library is not available, - use the largest host floating-point type as intermediate format. */ + use mpfr_t as intermediate format to provide precise target-floating + point emulation. However, if the MPFR library is not available, + use the largest host floating-point type as intermediate format. */ case target_float_ops_kind::binary: - { + { #ifdef HAVE_LIBMPFR static mpfr_float_ops binary_float_ops; #else @@ -2300,7 +2300,7 @@ get_target_float_ops (const struct type *type) static const target_float_ops * get_target_float_ops (const struct type *type1, const struct type *type2) { - gdb_assert (TYPE_CODE (type1) == TYPE_CODE (type2)); + gdb_assert (type1->code () == type2->code ()); enum target_float_ops_kind kind1 = get_target_float_ops_kind (type1); enum target_float_ops_kind kind2 = get_target_float_ops_kind (type2); @@ -2315,10 +2315,10 @@ get_target_float_ops (const struct type *type1, const struct type *type2) bool target_float_is_valid (const gdb_byte *addr, const struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) return floatformat_is_valid (floatformat_from_type (type), addr); - if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + if (type->code () == TYPE_CODE_DECFLOAT) return true; gdb_assert_not_reached ("unexpected type code"); @@ -2329,11 +2329,11 @@ target_float_is_valid (const gdb_byte *addr, const struct type *type) bool target_float_is_zero (const gdb_byte *addr, const struct type *type) { - if (TYPE_CODE (type) == TYPE_CODE_FLT) + if (type->code () == TYPE_CODE_FLT) return (floatformat_classify (floatformat_from_type (type), addr) == float_zero); - if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT) + if (type->code () == TYPE_CODE_DECFLOAT) return decimal_is_zero (addr, type); gdb_assert_not_reached ("unexpected type code"); @@ -2347,7 +2347,7 @@ target_float_to_string (const gdb_byte *addr, const struct type *type, { /* Unless we need to adhere to a specific format, provide special output for special cases of binary floating-point numbers. */ - if (format == nullptr && TYPE_CODE (type) == TYPE_CODE_FLT) + if (format == nullptr && type->code () == TYPE_CODE_FLT) { const struct floatformat *fmt = floatformat_from_type (type); @@ -2451,11 +2451,11 @@ target_float_convert (const gdb_byte *from, const struct type *from_type, /* Convert between two different formats in the same category. */ if (!target_float_same_format_p (from_type, to_type)) - { - const target_float_ops *ops = get_target_float_ops (from_type, to_type); - ops->convert (from, from_type, to, to_type); - return; - } + { + const target_float_ops *ops = get_target_float_ops (from_type, to_type); + ops->convert (from, from_type, to, to_type); + return; + } /* The floating-point formats match, so we simply copy the data, ensuring possible padding bytes in the target buffer are zeroed out. */