<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Jun 21, 2012, at 5:34 PM, Lang Hames <<a href="mailto:lhames@gmail.com">lhames@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Hi Hal,<div><br></div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I object to 'never' because there may be cases in the future where we<br>

can determine that extra precision cannot change the result so we can<br>
use fma while maintaining strict standard compliance. 'strict' is much<br>
better.<br></blockquote><div><br></div><div>That's two votes for 'strict'. I'm happy with that. :)</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

For an option whose job it is to set the default FP_CONTRACT state, I<br>
think that -ffp-contract=[no|yes|default] is the best. This makes the<br>
one-to-one correspondence clear to the user.<br></blockquote><div><br></div><div><div>This flag isn't intended to set the default FP_CONTRACT behaviour, it's about providing FMA formation modes outside those described by FP_CONTRACT, in particular enabling aggressive formation of FMAs across expression boundaries. I had intended enable this aggressve FMA formation under the -fexcess-precision flag, but as Steve pointed out that flag is overly broad. </div>
<div><br></div><div><span class="Apple-style-span" style="border-collapse:collapse;color:rgb(34,34,34);font-family:arial,helvetica,sans-serif">So, proposal:</span></div><div><span class="Apple-style-span" style="border-collapse:collapse;color:rgb(34,34,34);font-family:arial,helvetica,sans-serif"><br>
</span></div><div><span class="Apple-style-span" style="border-collapse:collapse;color:rgb(34,34,34);font-family:arial,helvetica,sans-serif">New flag: -ffuse-fp-ops={fast,standard,strict}.  Default value will be 'standard', which means following FP_CONTRACT rules.</span></div>
<div><br></div><div>When -ffuse-fp-ops=fast we form FMAs wherever they're profitable, regardless of the FP_CONTRACT state.</div><div>When -ffuse-fp-ops=strict we form FMAs iff/when we can prove that the excess precision won't change the result (which to start with will mean never forming FMAs).</div>
<div><br></div><div>-ffast-math implies -ffuse-fp-ops=fast</div><div>-fexcess-precision implies -ffuse-fp-ops=fast</div><div><br></div></div><div>Sound ok?</div></div></div></blockquote><br></div><div>Sounds great!</div></body></html>