Skip to content
  • Jakub Jelinek's avatar
    1910ecf1
    c: Add _Decimal64x support · 1910ecf1
    Jakub Jelinek authored
    The following patch adds _Decimal64x type support.  Our dfp libraries (dpd &
    libbid) can only handle decimal32, decimal64 and decimal128 formats and I
    don't see that changing any time soon, so the following patch just hardcodes
    that _Decimal64x has the same mode as _Decimal128 (but is a distinct type).
    In the unlikely event some target would introduce something different that
    can be of course changed with target hooks but would be an ABI change.
    _Decimal128x is optional and we don't have a wider decimal type, so that
    type isn't added.
    
    2024-11-15  Jakub Jelinek  <jakub@redhat.com>
    
    gcc/
    	* tree-core.h (enum tree_index): Add TI_DFLOAT64X_TYPE.
    	* tree.h (dfloat64x_type_node): Define.
    	* tree.cc (build_common_tree_nodes): Initialize dfloat64x_type_node.
    	* builtin-types.def (BT_DFLOAT64X): New DEF_PRIMITIVE_TYPE.
    	(BT_FN_DFLOAT64X): New DEF_FUNCTION_TYPE_0.
    	(BT_FN_DFLOAT64X_CONST_STRING, BT_FN_DFLOAT64X_DFLOAT64X): New
    	DEF_FUNCTION_TYPE_1.
    	* builtins.def (BUILT_IN_FABSD64X, BUILT_IN_INFD64X, BUILT_IN_NAND64X,
    	BUILT_IN_NANSD64X): New builtins.
    	* builtins.cc (expand_builtin): Handle BUILT_IN_FABSD64X.
    	(fold_builtin_0): Handle BUILT_IN_INFD64X.
    	(fold_builtin_1): Handle BUILT_IN_FABSD64X.
    	* fold-const-call.cc (fold_const_call): Handle CFN_BUILT_IN_NAND64X
    	and CFN_BUILT_IN_NANSD64X.
    	* ginclude/float.h (DEC64X_MANT_DIG, DEC64X_MIN_EXP, DEC64X_MAX_EXP,
    	DEC64X_MAX, DEC64X_EPSILON, DEC64X_MIN, DEC64X_TRUE_MIN,
    	DEC64X_SNAN): Redefine.
    gcc/c-family/
    	* c-common.h (enum rid): Add RID_DFLOAT64X.
    	* c-common.cc (c_global_trees): Fix comment typo.  Add
    	dfloat64x_type_node.
    	(c_common_nodes_and_builtins): Handle RID_DFLOAT64X.
    	* c-cppbuiltin.cc (c_cpp_builtins): Call
    	builtin_define_decimal_float_constants also for dfloat64x_type_node
    	if non-NULL.
    	* c-lex.cc (interpret_float): Handle d64x suffixes.
    	* c-pretty-print.cc (pp_c_floating_constant): Print d64x suffixes
    	on dfloat64x_type_node typed constants.
    gcc/c/
    	* c-tree.h (enum c_typespec_keyword): Add cts_dfloat64x and adjust
    	comment.
    	* c-parser.cc (c_keyword_starts_typename, c_token_starts_declspecs,
    	c_parser_declspecs, c_parser_gnu_attribute_any_word): Handle
    	RID_DFLOAT64X.
    	(c_parser_postfix_expression): Handle _Decimal64x arguments in
    	__builtin_tgmath.
    	(warn_for_abs): Handle BUILT_IN_FABSD64X.
    	* c-decl.cc (declspecs_add_type): Handle cts_dfloat64x and
    	RID_DFLOAT64X.
    	(finish_declspecs): Handle cts_dfloat64x.
    	* c-typeck.cc (c_common_type): Handle dfloat64x_type_node.
    gcc/testsuite/
    	* gcc.dg/dfp/c11-decimal64x-1.c: New test.
    	* gcc.dg/dfp/c11-decimal64x-2.c: New test.
    	* gcc.dg/dfp/c23-decimal64x-1.c: New test.
    	* gcc.dg/dfp/c23-decimal64x-2.c: New test.
    	* gcc.dg/dfp/c23-decimal64x-3.c: New test.
    	* gcc.dg/dfp/c23-decimal64x-4.c: New test.
    libcpp/
    	* expr.cc (interpret_float_suffix): Handle d64x and D64x
    	suffixes, adjust comment.
    1910ecf1
    c: Add _Decimal64x support
    Jakub Jelinek authored
    The following patch adds _Decimal64x type support.  Our dfp libraries (dpd &
    libbid) can only handle decimal32, decimal64 and decimal128 formats and I
    don't see that changing any time soon, so the following patch just hardcodes
    that _Decimal64x has the same mode as _Decimal128 (but is a distinct type).
    In the unlikely event some target would introduce something different that
    can be of course changed with target hooks but would be an ABI change.
    _Decimal128x is optional and we don't have a wider decimal type, so that
    type isn't added.
    
    2024-11-15  Jakub Jelinek  <jakub@redhat.com>
    
    gcc/
    	* tree-core.h (enum tree_index): Add TI_DFLOAT64X_TYPE.
    	* tree.h (dfloat64x_type_node): Define.
    	* tree.cc (build_common_tree_nodes): Initialize dfloat64x_type_node.
    	* builtin-types.def (BT_DFLOAT64X): New DEF_PRIMITIVE_TYPE.
    	(BT_FN_DFLOAT64X): New DEF_FUNCTION_TYPE_0.
    	(BT_FN_DFLOAT64X_CONST_STRING, BT_FN_DFLOAT64X_DFLOAT64X): New
    	DEF_FUNCTION_TYPE_1.
    	* builtins.def (BUILT_IN_FABSD64X, BUILT_IN_INFD64X, BUILT_IN_NAND64X,
    	BUILT_IN_NANSD64X): New builtins.
    	* builtins.cc (expand_builtin): Handle BUILT_IN_FABSD64X.
    	(fold_builtin_0): Handle BUILT_IN_INFD64X.
    	(fold_builtin_1): Handle BUILT_IN_FABSD64X.
    	* fold-const-call.cc (fold_const_call): Handle CFN_BUILT_IN_NAND64X
    	and CFN_BUILT_IN_NANSD64X.
    	* ginclude/float.h (DEC64X_MANT_DIG, DEC64X_MIN_EXP, DEC64X_MAX_EXP,
    	DEC64X_MAX, DEC64X_EPSILON, DEC64X_MIN, DEC64X_TRUE_MIN,
    	DEC64X_SNAN): Redefine.
    gcc/c-family/
    	* c-common.h (enum rid): Add RID_DFLOAT64X.
    	* c-common.cc (c_global_trees): Fix comment typo.  Add
    	dfloat64x_type_node.
    	(c_common_nodes_and_builtins): Handle RID_DFLOAT64X.
    	* c-cppbuiltin.cc (c_cpp_builtins): Call
    	builtin_define_decimal_float_constants also for dfloat64x_type_node
    	if non-NULL.
    	* c-lex.cc (interpret_float): Handle d64x suffixes.
    	* c-pretty-print.cc (pp_c_floating_constant): Print d64x suffixes
    	on dfloat64x_type_node typed constants.
    gcc/c/
    	* c-tree.h (enum c_typespec_keyword): Add cts_dfloat64x and adjust
    	comment.
    	* c-parser.cc (c_keyword_starts_typename, c_token_starts_declspecs,
    	c_parser_declspecs, c_parser_gnu_attribute_any_word): Handle
    	RID_DFLOAT64X.
    	(c_parser_postfix_expression): Handle _Decimal64x arguments in
    	__builtin_tgmath.
    	(warn_for_abs): Handle BUILT_IN_FABSD64X.
    	* c-decl.cc (declspecs_add_type): Handle cts_dfloat64x and
    	RID_DFLOAT64X.
    	(finish_declspecs): Handle cts_dfloat64x.
    	* c-typeck.cc (c_common_type): Handle dfloat64x_type_node.
    gcc/testsuite/
    	* gcc.dg/dfp/c11-decimal64x-1.c: New test.
    	* gcc.dg/dfp/c11-decimal64x-2.c: New test.
    	* gcc.dg/dfp/c23-decimal64x-1.c: New test.
    	* gcc.dg/dfp/c23-decimal64x-2.c: New test.
    	* gcc.dg/dfp/c23-decimal64x-3.c: New test.
    	* gcc.dg/dfp/c23-decimal64x-4.c: New test.
    libcpp/
    	* expr.cc (interpret_float_suffix): Handle d64x and D64x
    	suffixes, adjust comment.
Loading