You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Delete unnecessary sections
As garbage collection, multiple return, and Memset/Memcpy Operators have
dedicated tracking issues and all the links have been fixed, we can
remove their sections. Most of the data being removed is still present
in the tracking issues.
The two sections on tail calls are not removed as they contain some
information not in the tail calls tracking issue (#1144).
* Create section for preserving old links
This commit creates a section containing all proposals moved to tacking
issues. It also does some general cleanup.
though there would be some different performance characteristics.
205
-
206
169
### Asynchronous Signals
207
170
208
171
TODO
@@ -443,11 +406,6 @@ pass was otherwise necessary.
443
406
444
407
If globals are allowed array types, significant portions of memory could be moved out of linear memory which could reduce fragmentation issues. Languages like Fortran which limit aliasing would be one use case. C/C++ compilers could also determine that some global variables never have their address taken.
445
408
446
-
### Multiple Return
447
-
448
-
The stack based nature of WebAssembly lends itself to the possibility
449
-
of supporting multiple return values from blocks / functions.
450
-
451
409
### Multiple Tables and Memories
452
410
453
411
The MVP limits modules to at most one memory and at most one table (the default
@@ -494,24 +452,51 @@ static signature validation check. This could be improved by allowing:
494
452
* any other specific GC reference type, effectively allowing WebAssembly code
495
453
to implement a variety of rooting API schemes.
496
454
455
+
## Proposals moved to tacking issues
456
+
457
+
These proposals have now moved to [tracking issues](#tracking-issues). The old
458
+
links are preserved here for backwards compatibility.
459
+
460
+
### GC/DOM Integration
461
+
462
+
See issue [1079][].
463
+
497
464
### Memset and Memcpy Operators
498
465
499
-
Copying and clearing large memory regions is very common, and making these
500
-
operations fast is architecture dependent. Although this can be done in the MVP
501
-
via `i32.load` and `i32.store`, this requires more bytes of code and forces VMs
502
-
to recognize the loops as well. The following operators can be added to improve
503
-
performance:
466
+
See issue [1114][].
467
+
468
+
### Tail Calls
469
+
470
+
See issue [1144][].
471
+
472
+
#### Signature-restricted Proper Tail Calls
473
+
474
+
See the [asm.js RFC][] for a full description of signature-restricted Proper
475
+
Tail Calls (PTC).
476
+
477
+
Useful properties of signature-restricted PTCs:
478
+
479
+
* In most cases, can be compiled to a single jump.
480
+
* Can express indirect `goto` via function-pointer calls.
481
+
* Can be used as a compile target for languages with unrestricted PTCs; the code
482
+
generator can use a stack in the linear memory to effectively implement a custom call
483
+
ABI on top of signature-restricted PTCs.
484
+
* An engine that wishes to perform aggressive optimization can fuse a graph of
485
+
PTCs into a single function.
486
+
* To reduce compile time, a code generator can use PTCs to break up ultra-large
487
+
functions into smaller functions at low overhead using PTCs.
488
+
* A compiler can exert some amount of control over register allocation via the
489
+
ordering of arguments in the PTC signature.
504
490
505
-
*`move_memory`: Copy data from a source memory region to destination region;
506
-
these regions may overlap: the copy is performed as if the source region was
507
-
first copied to a temporary buffer, then the temporary buffer is copied to
508
-
the destination region
509
-
*`set_memory`: Set all bytes in a memory region to a given byte
0 commit comments