On Mon, Mar 24, 2025 at 09:44:40AM +0100, Jakub Jelinek wrote: > On Sun, Mar 23, 2025 at 08:28:47PM -0500, Robert Dubner wrote: > > Jim is back from a short COBOL-related business trip. I am going to take > > this working collection of patched patched patches and put it up where he > > can get at it. > > > > That location is the float_to_tree branch of > > > > https://gitlab.cobolworx.com/COBOLworx/gcc-cobol.git > > > > And we'll review it. We want to make sure that these changes don't do any > > damage that might be hidden because there are no tests for some things > > that nonetheless might be visible to us when we look at it. > > > > So, with the understanding that this is still pending internal Jim & Bob > > review, I am putting the probable patch here: > > So, first of all, you'll need a ChangeLog entry for this. > Here is a proposal for that. >
Forgot, there is PR cobol/119241 missing in the ChangeLog entry at the start. > * gcobolspec.cc (lang_specific_driver): Formatting fix. > * genapi.cc: Include fold-const.h and realmpfr.h. > (initialize_variable_internal): Use real_to_decimal instead of > strfromf128. > (get_binary_value_from_float): Use wide_int_to_tree instead of > build_int_cst_type. > (psa_FldLiteralN): Use fold_convert instead of strfromf128, > real_from_string and build_real. > (parser_display_internal): Rewritten to work on REAL_VALUE_TYPE > rather than _Float128. > (mh_source_is_literalN): Use FIXED_WIDE_INT(128) rather than > __int128, wide_int_to_tree rather than build_int_cst_type, > fold_convert rather than build_string_literal. > (real_powi10): New function. > (binary_initial_from_float128): Change type of last argument from > _Float128 to REAL_VALUE_TYPE, process it using real.cc and mpfr > APIs. > (digits_from_float128): Likewise. > (initial_from_float128): Make static. Remove value argument, add > local REAL_VALUE_TYPE value variable instead, process it using > real.cc and native_encode_expr APIs. > (parser_symbol_add): Adjust initial_from_float128 caller. > * genapi.h (initial_from_float128): Remove declaration. > * genutil.cc (get_power_of_ten): Change return type from __int128 > to FIXED_WIDE_INT(128), ditto for retval type, change type of pos > from __int128 to unsigned long long. > (scale_by_power_of_ten_N): Use wide_int_to_tree instead of > build_int_cst_type. Use FIXED_WIDE_INT(128) instead of __int128 > as power_of_ten variable type. > (copy_little_endian_into_place): Likewise. > * genutil.h (get_power_of_ten): Change return type from __int128 > to FIXED_WIDE_INT(128). > (FIXED_WIDE_INT): > * parse.y (%union): Change type of float128 from _Float128 to > REAL_VALUE_TYPE. > (string_of): Change argument type from _Float128 to > const REAL_VALUE_TYPE &, use real_to_decimal rather than > strfromf128. Add another overload with tree argument type. > (field: cdf): Use real_zerop rather than comparison against 0.0. > (occurs_clause, const_value): Use real_to_integer. > (value78): Use build_real and real_to_integer. > (data_descr1): Use real_to_integer. > (count): Use real_to_integer, real_from_integer and real_identical > instead of direct comparison. > (value_clause): Use real_from_string3 instead of num_str2i. Use > real_identical instead of direct comparison. Use build_real. > (allocate): Use real_isneg and real_iszero instead of <= 0 comparison. > (move_tgt): Use real_to_integer, real_value_truncate, > real_from_integer and real_identical instead of comparison of casts. > (cce_expr): Use real_arithmetic and real_convert or real_value_negate > instead of direct arithmetics on _Float128. > (cce_factor): Use real_from_string3 instead of numstr2i. > (literal_refmod_valid): Use real_to_integer. > * symbols.cc (symbol_table_t::registers_t::registers_t): Formatting > fix. > (ERROR_FIELD): Likewise. > (extend_66_capacity): Likewise. > (cbl_occurs_t::subscript_ok): Use real_to_integer, real_from_integer > and real_identical. > * symbols.h (cbl_field_data_t::etc_t::value): Change type from > _Float128 to tree. > (cbl_field_data_t::etc_t::etc_t): Adjust defaulted argument value. > (cbl_field_data_t::cbl_field_data_t): Formatting fix. Use etc() > rather than etc(0). > (cbl_field_data_t::value_of): Change return type from _Float128 to > tree. > (cbl_field_data_t::operator=): Change return and argument type from > _Float128 to tree. > (cbl_field_data_t::valify): Use real_from_string, real_value_truncate > and build_real. > (cbl_field_t::same_as): Use build_zero_cst instead of _Float128(0.0). > > Co-authored-by: Richard Biener <rgue...@suse.de> > Co-authored-by: Jakub Jelinek <ja...@redhat.com> Jakub