i-cexten.ads (Float_128): New type.

ada/
	* libgnat/i-cexten.ads (Float_128): New type.
c-family/
	* c-ada-spec.c (dump_ada_node) <NULLPTR_TYPE>: New case.
	<REAL_TYPE>: Deal specifically with _Float128/__float128.

From-SVN: r258068
This commit is contained in:
Eric Botcazou 2018-02-28 14:31:02 +00:00 committed by Eric Botcazou
parent 9e25c7ed96
commit c6db43fa35
4 changed files with 34 additions and 4 deletions

View File

@ -1,3 +1,7 @@
2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
* libgnat/i-cexten.ads (Float_128): New type.
2018-02-02 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (array_type_has_nonaliased_component): Return

View File

@ -72,6 +72,15 @@ package Interfaces.C.Extensions is
pragma Convention (C_Pass_By_Copy, Signed_128);
for Signed_128'Alignment use unsigned_long_long'Alignment * 2;
-- 128-bit floating-point type available on x86:
-- typedef long_double float_128 __attribute__ ((mode (TF)));
type Float_128 is record
low, high : unsigned_long_long;
end record;
pragma Convention (C_Pass_By_Copy, Float_128);
for Float_128'Alignment use unsigned_long_long'Alignment * 2;
-- Types for bitfields
type Unsigned_1 is mod 2 ** 1;

View File

@ -1,3 +1,8 @@
2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (dump_ada_node) <NULLPTR_TYPE>: New case.
<REAL_TYPE>: Deal specifically with _Float128/__float128.
2018-02-28 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (dump_ada_double_name) <ENUMERAL_TYPE>: New case.

View File

@ -2126,6 +2126,7 @@ dump_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
pp_string (buffer, "--- unexpected node: TREE_VEC");
return 0;
case NULLPTR_TYPE:
case VOID_TYPE:
if (package_prefix)
{
@ -2151,8 +2152,20 @@ dump_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
dump_ada_enum_type (buffer, node, type, spc, true);
break;
case INTEGER_TYPE:
case REAL_TYPE:
if (TYPE_NAME (node)
&& TREE_CODE (TYPE_NAME (node)) == TYPE_DECL
&& IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))) [0] == '_'
&& (id_equal (DECL_NAME (TYPE_NAME (node)), "_Float128")
|| id_equal (DECL_NAME (TYPE_NAME (node)), "__float128")))
{
append_withs ("Interfaces.C.Extensions", false);
pp_string (buffer, "Extensions.Float_128");
break;
}
/* fallthrough */
case INTEGER_TYPE:
case FIXED_POINT_TYPE:
case BOOLEAN_TYPE:
if (TYPE_NAME (node))
@ -2233,9 +2246,8 @@ dump_ada_node (pretty_printer *buffer, tree node, tree type, int spc,
{
if (TREE_CODE (node) == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (node)) == INTEGER_TYPE
&& !strcmp
(IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME
(TREE_TYPE (node)))), "char"))
&& id_equal (DECL_NAME (TYPE_NAME (TREE_TYPE (node))),
"char"))
{
if (!name_only)
pp_string (buffer, "new ");