aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Gohman <sunfish@mozilla.com>2015-06-10 05:25:22 -0700
committerDan Gohman <sunfish@mozilla.com>2015-06-12 14:26:17 -0700
commit79b6d14866993c57bd4a81663bf3f8059f1ce0f6 (patch)
tree69d9fec5e53912045d35a3048d9a0d080b85e61f
parent1578d64ffa884dae4cb57e286e16fc1ca94311d7 (diff)
downloadnanowasm-design-79b6d14866993c57bd4a81663bf3f8059f1ce0f6.tar.gz
Fold "Operations which may not be available" into other sections.
And add a paragraph about 128-bit floating-point support. Also specify that FMA would be IEEE-754 or not available.
-rw-r--r--FutureFeatures.md41
1 files changed, 32 insertions, 9 deletions
diff --git a/FutureFeatures.md b/FutureFeatures.md
index c38225b..fff3cc7 100644
--- a/FutureFeatures.md
+++ b/FutureFeatures.md
@@ -152,13 +152,6 @@ include:
[a proposal in the SIMD.js repository]: https://github.com/johnmccutchan/ecmascript_simd/issues/180
-## Operations which may not be available or may not perform well on all platforms
-
-* Fused multiply-add.
-* Reciprocal square root approximate.
-* 16-bit floating point.
-* and more!
-
## Platform-independent Just-in-Time compilation
WebAssembly is a new virtual ISA, and as such applications won't be able to
@@ -234,13 +227,43 @@ use cases:
* Float32MinNum - minimum; if exactly one operand is NaN, returns the other operand
* Float32MaxNum - maximum; if exactly one operand is NaN, returns the other operand
- * Float32FMA - fused multiply-add
+ * Float32FMA - fused multiply-add (results always conforming to IEEE-754)
* Float64MinNum - minimum; if exactly one operand is NaN, returns the other operand
* Float64MaxNum - maximum; if exactly one operand is NaN, returns the other operand
- * Float64FMA - fused multiply-add
+ * Float64FMA - fused multiply-add (results always conforming to IEEE-754)
MinNum, and MaxNum operations would treat -0 as being effectively less than 0.
+Note that some operations, like FMA, may not be available or may not perform
+well on all platforms. These should be guarded by
+[feature tests](FeatureTest.md) so that if available, they behave consistently.
+
+## Floating point approximation operations
+
+ * Float32ReciprocalApproximation - reciprocal approximation
+ * Float64ReciprocalApproximation - reciprocal approximation
+ * Float32ReciprocalSqrtApproximation - reciprocal sqrt approximation
+ * Float64ReciprocalSqrtApproximation - reciprocal sqrt approximation
+
+These operations would not required to be fully precise, but the specifics
+would need clarification.
+
+## 16-bit and 128-bit floating-point support
+
+For 16-bit floating-point support, it may make sense to split the feature
+into two parts: support for just converting between 16-bit and 32-bit
+formats possibly folded into load and store operations, and full support
+for actual 16-bit arithmetic.
+
+128-bit is an interesting question because hardware support for it is very
+rare, so it's usually going to be implemented with software emulation anyway,
+so there's nothing preventing WebAssembly applications from linking to an
+appropriate emulation library and getting similarly performant results.
+Emulation libraries would have more flexibility to offer approximation
+techniques such as double-double arithmetic. If we standardize 128-bit
+floating point in WebAssembly, it will probably be standard IEEE-754
+quadruple precision.
+
## Floating-point library intrinsics
These operations aren't needed because they can be implemented in WebAssembly