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
> 

Reply via email to