From: Eric Botcazou Date: Fri, 24 May 2013 09:40:28 +0000 (+0000) Subject: gigi.h (gnat_init_gcc_fp): Declare. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=df09b22cf9e06a2b1c429161297c7c0ac1d5f194;p=gcc.git gigi.h (gnat_init_gcc_fp): Declare. * gcc-interface/gigi.h (gnat_init_gcc_fp): Declare. * gcc-interface/trans.c (gigi): Call it. * gcc-interface/misc.c (gnat_init_gcc_fp): New function. From-SVN: r199287 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 6657464ed92..c072ddf10bb 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2013-05-24 Eric Botcazou + + * gcc-interface/gigi.h (gnat_init_gcc_fp): Declare. + * gcc-interface/trans.c (gigi): Call it. + * gcc-interface/misc.c (gnat_init_gcc_fp): New function. + 2013-05-24 Eric Botcazou * gcc-interface/gigi.h (enum inline_status_t): New type. diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h index 5dee7b56fb1..e2cc1466cab 100644 --- a/gcc/ada/gcc-interface/gigi.h +++ b/gcc/ada/gcc-interface/gigi.h @@ -502,7 +502,13 @@ extern tree get_block_jmpbuf_decl (void); for location information and flag propagation. */ extern void gnat_pushdecl (tree decl, Node_Id gnat_node); +/* Initialize the GCC support for exception handling. */ extern void gnat_init_gcc_eh (void); + +/* Initialize the GCC support for floating-point operations. */ +extern void gnat_init_gcc_fp (void); + +/* Install the builtin functions we might need. */ extern void gnat_install_builtins (void); /* Return an integer type with the number of bits of precision given by diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c index 2fd2743bbe1..7b168df4e03 100644 --- a/gcc/ada/gcc-interface/misc.c +++ b/gcc/ada/gcc-interface/misc.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 1992-2012, Free Software Foundation, Inc. * + * Copyright (C) 1992-2013, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -346,9 +346,7 @@ gnat_init (void) return true; } -/* If we are using the GCC mechanism to process exception handling, we - have to register the personality routine for Ada and to initialize - various language dependent hooks. */ +/* Initialize the GCC support for exception handling. */ void gnat_init_gcc_eh (void) @@ -381,6 +379,28 @@ gnat_init_gcc_eh (void) init_eh (); } +/* Initialize the GCC support for floating-point operations. */ + +void +gnat_init_gcc_fp (void) +{ + /* Disable FP optimizations that ignore the signedness of zero if + S'Signed_Zeros is True, but don't override the user if not. */ + if (Signed_Zeros_On_Target) + flag_signed_zeros = 1; + else if (!global_options_set.x_flag_signed_zeros) + flag_signed_zeros = 0; + + /* Assume that FP operations can trap if S'Machine_Overflow is True, + but don't override the user if not. + + ??? Alpha/VMS enables FP traps without declaring it. */ + if (Machine_Overflows_On_Target || TARGET_ABI_OPEN_VMS) + flag_trapping_math = 1; + else if (!global_options_set.x_flag_trapping_math) + flag_trapping_math = 0; +} + /* Print language-specific items in declaration NODE. */ static void diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index f854dbe1c1f..6c9407e4e35 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -677,6 +677,9 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED, if (Exception_Mechanism == Back_End_Exceptions) gnat_init_gcc_eh (); + /* Initialize the GCC support for FP operations. */ + gnat_init_gcc_fp (); + /* Now translate the compilation unit proper. */ Compilation_Unit_to_gnu (gnat_root);