| Index: src/IceInst.def
|
| diff --git a/src/IceInst.def b/src/IceInst.def
|
| index d2652135f943fd922a98f5ab01a179b256cf01ae..6bd2efbf1c8463f69bb9dcd9ea969f82209c72f9 100644
|
| --- a/src/IceInst.def
|
| +++ b/src/IceInst.def
|
| @@ -14,14 +14,31 @@
|
| #ifndef SUBZERO_SRC_ICEINST_DEF
|
| #define SUBZERO_SRC_ICEINST_DEF
|
|
|
| +// Floating point addition and multiplication are commutative.
|
| +// 1) non-special values and infinities are required to commute.
|
| +// 2) signed zeroes are handled by:
|
| +// From IEEE standard 754-2008:
|
| +// When the sum of two operands with opposite signs (or the difference of
|
| +// two operands with like signs) is exactly zero, the sign of that sum
|
| +// (or difference) shall be +0 in all rounding-direction attributes
|
| +// except roundTowardNegative; under that attribute, the sign of an exact
|
| +// zero sum (or difference) shall be −0.
|
| +// 3) NaNs are handled by:
|
| +// http://grouper.ieee.org/groups/1788/email/msg03558.html
|
| +// clause of 754 at work is 6.2.3 NaN propagation:
|
| +// "If two or more inputs are NaN, then the payload of the resulting NaN
|
| +// should be identical to the payload of one of the input NaNs if
|
| +// representable in the destination format. This standard does not
|
| +// specify which of the input NaNs will provide the payload."
|
| +
|
| #define ICEINSTARITHMETIC_TABLE \
|
| /* enum value, printable string, commutative */ \
|
| X(Add, "add", 1) \
|
| - X(Fadd, "fadd", 0) \
|
| + X(Fadd, "fadd", 1) \
|
| X(Sub, "sub", 0) \
|
| X(Fsub, "fsub", 0) \
|
| X(Mul, "mul", 1) \
|
| - X(Fmul, "fmul", 0) \
|
| + X(Fmul, "fmul", 1) \
|
| X(Udiv, "udiv", 0) \
|
| X(Sdiv, "sdiv", 0) \
|
| X(Fdiv, "fdiv", 0) \
|
|
|