<font size=2 face="sans-serif">2014/05/13, 12:00 EST:</font>
<br><font size=2 face="sans-serif">&nbsp; <b>Attendees</b>: Jim, Rajan,
Fred, David, Mike, Ian</font>
<br>
<br><font size=2 face="sans-serif"><b>&nbsp; New agenda items:</b></font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; None.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; </font>
<br><font size=2 face="sans-serif"><b>&nbsp; Old action items:</b></font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Jim: Work with John Benito
and David Keaton to get the parts 2, 3 and 4 issued for ballot. - Done</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Jim: Part 4: Divide it
up and assign (or open to assign) reviewers to parts of the document. -
Done</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Jim: Part 4: Give the
document to Joseph and ask if he has any issues with it. - Done (no issues
from Joseph)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; David: Part 5: Complete
exception specification with the full syntax dealing with scope and sub-exceptions.
Include a discussion document with reasons choices and alternatives. -
Partially done (more of an outline. Sent on 2014/05/12). Keep open.</font>
<br>
<br><font size=2 face="sans-serif"><b>&nbsp; Next Meeting:</b></font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; June 12th (Thursday),
2014, 12:00 EST, 9:00 PDT</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Same teleconference number.</font>
<br>
<br><font size=2 face="sans-serif"><b>&nbsp; New action items:</b></font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; David: Part 5: (From last
meeting): Complete exception specification with the full syntax dealing
with scope and sub-exceptions. Include a discussion document with reasons
choices and alternatives. - Partially done (more of an outline. Sent on
2014/05/12). Keep open.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; David: Part 5: For fast_subnormal,
change to &quot;allows abrupt underflow&quot; -&gt; &quot;allows (but not
requires) abrupt underflow&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; David: Part 5: Put in
exception category in the sub-exceptions as the prefix. Ex. FE_DIV_ZERO
-&gt; FE_DIVBYZERO_DIVIDES</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; David: Part 5: Add in
FE_INVALID_OTHER and FE_DIVBYZERO_OTHER</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; David: Part 5: OPTFLAG
-&gt; MAY_FLAG, NOFLAG -&gt; NO_FLAG, SUBSTITUTEXOR -&gt; SUBSTITUTE_XOR</font>
<br>
<br><font size=2 face="sans-serif"><b>&nbsp; Discussion:</b></font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; The wiki links at the
top point to the ballot documents. There are Word versions as well as PDF
versions.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Editorial changes are
being kept in live documents by Jim for the next version as needed.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Part 1: Sent off for publication.</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Part 2: Submitted to ISO
for DTS ballot.</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Part 3: Submitted to ISO
for PDTS ballot.</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Part 4: (</font><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1835.pdf"><font size=2 face="sans-serif">http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1835.pdf</font></a><font size=2 face="sans-serif">)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; Submitted to ISO
for PDTS ballot.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; Part 5: (Email from David
sent 2014/04/14)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; Took parts from
C11 and IEEE 754 and parts 1 and 2 to develop the framework/outline sent
in the email.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; FENV_WIDTH pragma:
none means no preferred width.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: What
is the difference between none and float?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; David: No
difference. Generic should be standard (re floating types).</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; There
does need to be a difference since you can have float64, and float128 only
since none would then be float64 and not float32.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: It
is legitimate to add float64 to double. The FLT_EVAL_METHODs and DEC_EVAL_METHOD
defines the evaluation method but do not prescribe the evaluation method.
The pragma should match up with those macros.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Perhaps
have the pragma act as is if it sets the macro.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Ian: Is
width relevant to anything beyond x86?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; David: Yes,
if you want to treat floats as doubles like pre-ANSI C.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim/Ian:
The pragmas should affect which lexical block they are associated with.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; What the
numbers mean (used for *_EVAL_METHOD) are not obvious.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Fred: What
represents none? 0 is float.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: The
user would have to use 0 or -1 since the EVAL_METHOD macro would have been
set to 1 for David's case.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Fred: How
do we define the decimal widths?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: We'd
have to name the pragma's differently (split them up).</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; The pragma
should change the macro value.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; David: The
pragma should not accept -1 as an argument.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Ian: Does
adding in the half precision affect anything?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Rajan: Covered
by the value 16 (from Part 3).</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; The pragma
names will be FLT_EVAL_METHOD and DEC_EVAL_METHOD now.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; Underflow optimization:</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Abrupt vs
value changing</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: Existing
pragmas use ON/OFF and do we want to use that vs ENABLE/DISABLE?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; David: Difference
between allowing an optimization for example, but not requiring it.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim/Ian:
The existing pragmas use ON/OFF but have the same semantics. They are ENABLE/DISABLE.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; David: The
distinction should be there.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: The
distinction must be listed in the spec. For the name however we should
discuss if we want it to be inconsistent.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Rajan: Keep
consistency if possible with C11. Everyone: Agreed.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; *ToDo: David:
For fast_subnormal, change to &quot;allows abrupt underflow&quot; -&gt;
&quot;allows (but not requires) abrupt underflow&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: The
value changing optimizations switch is a coarse knob to set them all or
off for all?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; David: In
general yes, but with some exceptions. A list of optimizations will need
to be given.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; The global
switch will be for all, and we can have smaller ones for individual optimizations.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; reproducible vs
value changing opt (Chapter 10 and 11 of IEEE):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Reproducible
means gives same results. Value changing does not have to have the same
results.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; i.e. Disabling
value changing optimizations does not necessarily give you reproducible
results. Ex. the transcendental functions.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: Do
you see the compiler diagnosing non-reproducible operations?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; David: It
could. Ex. no correctly rounded versions of trance dental functions so
it is not necessarily reproducible.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: It
could for example replace a normal call with a cr prefixed call.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Note
that reproducible doesn't mean any operation has to be reproducible. We
need to spell out what extent reproducible means (ex. transcendental, order
of operations, intermediate values). If it cannot be made so, the implementation
should diagnose it.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; We can require
an implementation to say if it can't support a particular pragma.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; We can have
a minimal set that everything has to support, and leave the others optional.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: Should
FLT_EVAL_METHOD of zero require evaluating to the type?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; David: reproducibility
would require eval method = 0.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; exception handling:</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: Can
each sub-exception have the group exception macro name as it's base like
the current invalid ones?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; *ToDo: David:
Put in exception category in the sub-exceptions as the prefix. Ex. FE_DIV_ZERO
-&gt; FE_DIVBYZERO_DIVIDES</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: If
you have log sub-exception, why not acos or others?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; David: Maybe
have one for logb, and one for section 9 functions for both divzero and
invalid. Note acos(-2) is invalid sqrt, but not obvious without looking
into it. Perhaps say invalid_other that is intended to apply to recommended
library functions?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Don't
expect the sub-exceptions to be used, but in the cases where it is used
it is invaluable.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Perhaps
we just leave out the functions?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; *ToDo: David:
Add in FE_INVALID_OTHER and FE_DIVBYZERO_OTHER</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; control flow:</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; record:
Used for debuggers.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Jim: We
can say what it is intended to be used for, but no behaviour change from
a C point of view.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; OPTFLAG
- Can be read as optimization flag.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; *ToDo: David:
OPTFLAG -&gt; MAY_FLAG, NOFLAG -&gt; NO_FLAG, SUBSTITUTEXOR -&gt; SUBSTITUTE_XOR</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Substitute
scope:</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ex.
f / g -&gt; f' / g' being done in a loop with the pragma outside it. Note
that f' / g' could also be an exception.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goto
can be done, with a goto back, but where to go back to?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ian:
The C++ style try/catch can do it.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Rajan:
Use something like a function exceptionName(f/g, f'/g') syntax.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Mike:
Like the ternary operator in C.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Like
an if statement with an empty true case.</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ieee_substitute(p/q,
FE_INVALID_DIV, p'/q') // Macro</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Or</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ieee_substitute(p/q,
FE_INVALID_DIV) ? p/q : p'/q'</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Up
the the optimizer to know if the calculation needs to be redone.</font>
<br>
<br><font size=2 face="sans-serif">Regards,<br>
<br>
Rajan Bhakta<br>
z/OS XL C/C++ Compiler Technical Architect<br>
ISO C Standards Representative for Canada<br>
C Compiler Development<br>
Contact: rbhakta@us.ibm.com, Rajan Bhakta/Houston/IBM</font>