On 3/2/23 11:32, Jakub Jelinek wrote:
> Hi!
>
> On Fri, Feb 10, 2023 at 10:06:03AM +0100, Gerald Pfeifer wrote:
>> Yes, thank you! Two minor suggestions/questions below:
>>
>>> --- a/htdocs/gcc-13/changes.html
>>> +++ b/htdocs/gcc-13/changes.html
>>> + <code>-fexcess-precision=fast</code>. The option affects mainly
>>
>> Here I'd say "mainly affects".
>>
>>> + IA-32/x86-64 where when defaulting to x87 math and in some cases on
>>> + Motorola 68000 <code>float</code> and <code>double</code> expressions
>>> + are evaluated in <code>long double</code> precision and S/390,
>>> System z,
>>> + IBM z Systems where <code>float</code> expressions are evaluated in
>>> + <code>double</code> precision.
>>
>> The "where when" part proved a bit tricky for my brain. :-)
>>
>> I think it is precise, but am wondering whether
>>
>> ...IA-32/x64 using x87 math and in some cases on Motorola 68000, where
>> <code>float</code> and <code>double</code> expressions are evaluated...
>>
>> might work? What do you think?
>
> Thanks, committed with those tweaks.
>
> Martin would like to see some note in porting_to.html for it too,
> here is my attempt to do so:
I like the suggested wording. Thanks for it.
Martin
>
> diff --git a/htdocs/gcc-13/porting_to.html b/htdocs/gcc-13/porting_to.html
> index 9a9a3147..5cbeefb6 100644
> --- a/htdocs/gcc-13/porting_to.html
> +++ b/htdocs/gcc-13/porting_to.html
> @@ -120,5 +120,29 @@ the operand as an lvalue.<br>
> }
> </code></pre>
>
> +<h3 id="excess-precision">Excess precision changes</h3>
> +<p>GCC 13 implements in C++ <a href="changes.html#cxx">excess precision
> support</a>
> +which has been implemented just in the C front-end before. The new behavior
> is
> +enabled by default in <code>-std=c++</code><em>NN</em> modes and when
> +<code>FLT_EVAL_METHOD</code> is 1 or 2 affects behavior of floating point
> +constants and expressions. E.g. for <code>FLT_EVAL_METHOD</code> equal
> +to 2 on ia32:
> +
> +<pre><code>
> +#include <stdlib.h>
> +void foo (void) { if (1.1f + 3.3f != 1.1L + 3.3L) abort (); }
> +void bar (void) { double d = 4.2; if (d == 4.2) abort (); }
> +</code></pre>
> +
> +will not abort with standard excess precision, because constants and
> expressions
> +in <code>float</code> or <code>double</code> are evaluated in precision of
> +<code>long double</code> and demoted only on casts or assignments, but will
> +abort with fast excess precision, where whether something is evaluated in
> +precision of <code>long double</code> or not depends on what evaluations are
> +done in the i387 floating point stack or are spilled from it.
> +
> +The <code>-fexcess-precision=fast</code> option can be used to request the
> +previous behavior.
> +
> </body>
> </html>
>
>
> Jakub
>