67 Commits

Author SHA1 Message Date
dcode
b19005f5bb Use new RC utility for inlining so we can eventually inline everything 2019-05-29 03:41:03 +02:00
dcode
51fdf9db4f fix 2019-05-23 03:08:25 +02:00
dcode
3e480d9423 progress 2019-05-20 23:10:06 +02:00
dcode
da4a7751fd optimize logical and/or, initial null checking in flows 2019-04-09 03:04:45 +02:00
dcode
c16c19e18d unify runtime header 2019-04-08 23:22:13 +02:00
dcode
e1070cee86 rtti & refactoring 2019-04-06 20:17:48 +02:00
dcode
27f1905510 runtime integration and flag 2019-03-31 21:58:42 +02:00
dcode
3146f8f9e0 use gc interface directly, document 2019-03-26 23:35:08 +01:00
dcode
9b664dc175 harden / elaborate on makeCallInline 2019-03-20 14:16:18 +01:00
dcode
7693b543f4 optimize array literal init, warn on unsupported inlining 2019-03-19 08:20:10 +01:00
dcode
f21b339563 checked builtin array get, optimize abv layout 2019-03-17 08:46:26 +01:00
dcode
e63c6bd388 local flow flags, see what works 2019-03-17 01:35:44 +01:00
Max Graey
208dc2f1de Implement Mathf.sin/cos/tan (#491) 2019-03-05 19:36:22 +01:00
Daniel Wirtz
4e1bba3a24
Use Binaryen's function signature naming scheme (#522) 2019-03-01 00:01:23 +01:00
Max Graey
6b495f71d0 Ensure Math.clz32/imul compatibility with JS (#474) 2019-02-21 00:32:58 +01:00
Daniel Wirtz
0c64f21250
Rework resolver (#489)
* Rework IR and resolver to use nested lookup tables
* Integrate types into IR
* Make components prefer IR, slimmed down AST
* Implement `export *`
* Add `@lazy` annotation and remove `--noTreeShaking`
* Add `@start` annotation and remove magic `main`
* Related refactoring, cleanup and docs
2019-02-21 00:11:22 +01:00
Daniel Wirtz
2f1a6c44ce
Add SIMD prerequisites (#469) 2019-02-07 15:26:26 +01:00
Daniel Wirtz
831054dfd3
Rework inlining logic (#463) 2019-02-06 23:42:43 +01:00
dcode
cd1cfe6957 Update Binaryen to latest and rebuild dist files 2019-02-05 17:12:10 +01:00
Max Graey
c7441066dc Minor math tweaks + ipow32f/ipow64f (#428) 2019-01-24 23:17:44 +01:00
Max Graey
d3715688fc Fix Math.imul and add tests (#432) 2019-01-24 01:23:53 +01:00
Daniel Wirtz
c30c62e383
Cast to bool by comparing to zero (#343) 2018-11-23 15:20:52 +01:00
Max Graey
4944280cdc Add Math.signbit (#333) 2018-11-18 11:46:48 +01:00
dcodeIO
d62d84521e Reduce inlining verbosity
With debug info and source maps in place there is not much value anymore in emitting explicitly named blocks.
2018-11-12 14:54:08 +01:00
Max Graey
410036e445 Use mixed Horner scheme in Math.exp/expm1 to improve instruction parallelization (#311) 2018-11-09 17:56:42 +01:00
Daniel Wirtz
2bdc2a72f1
Use stack IR when emitting text format (#312) 2018-11-08 08:04:24 +01:00
Max Graey
d864bef1eb Improve per-bit divmod loop for mod & rem (#307) 2018-10-30 15:10:50 +01:00
Max Graey
e58582e9e9 Minor remquof improvemnts (#306) 2018-10-27 18:27:54 +02:00
Max Graey
376afd45fc Improve Math routines; Add Mathf-specific prng (#297) 2018-10-26 00:10:17 +02:00
Daniel Wirtz
f7c734789e
Update Binaryen to latest; Various fixes 2018-10-11 08:49:08 +02:00
dcodeIO
16d1a833dd Always add a null function at table index zero
This allows function references (a table index internally) to be nullable
2018-09-17 01:48:35 +02:00
dcodeIO
6949cf9f9e Switch signed/unsigned instructions when upcasting 32- to 64-bit integers, fixes #247
Matches C semantics now. Turns around some instructions in tests, especially libm, but doesn't break anything.
2018-09-10 14:25:33 +02:00
Max Graey
c27b6e8951 Add integer power functions (#212) 2018-09-09 04:07:27 +02:00
dcodeIO
631478c7c9 Rework static memory segment creation; Fix stdlib gc hooks not marking own fields; Align everything to 8 bytes that might be touched by GC 2018-08-04 00:36:59 +02:00
Daniel Wirtz
dc0f271fc2
Initial GC integration (#196) 2018-08-02 18:23:02 +02:00
dcodeIO
34839353fd Inline isNaN and isFinite
Looking at our existing tests it seems that inlining these can be performed by reusing locals most of the time, and sometimes enables erasing quite a bit of unnecessary code when optimizing.
2018-07-19 04:12:40 +02:00
dcodeIO
26e46f6f86 Reintroduce builtin decorator so these can appear anywhere in stdlib again
Avoids wrapping an undocumented function within 'memory.size' for example.
2018-07-19 02:10:04 +02:00
dcodeIO
a1b75b69b7 Rename memory instructions; Rework constant handling 2018-07-18 23:49:32 +02:00
dcodeIO
9c16363796 Initial external decorator for annotating explicit import names; Use file name as default module name in imports; Emit empty memory if there are no static segments; Update TLSF and examples accordingly 2018-06-28 01:44:32 +02:00
dcodeIO
27e61f8f67 Remove noMemory option; Omit 'start' if 'main' is present; Unwrap more unnecessary blocks 2018-06-27 19:03:39 +02:00
dcodeIO
7a8995b18b Properly inline getters; Simplify blocks when last statement returns 2018-06-22 15:26:59 +02:00
dcodeIO
7ad13f9d65 Add a 'call_indirect' builtin to emit arbitrary calls (might trap at runtime); Optimize 'for' loop compilation a bit 2018-05-25 15:59:17 +02:00
dcodeIO
829af2285c Fix continue labels in 'for' loops skipping the incrementor 2018-05-23 11:32:12 +02:00
dcodeIO
73417a9a06 Move 'abort' out of builtins and make it overridable
Now defaults to 'env.abort' as imported in lib/env.ts, but can be overridden through '--use abort=someThingElseOrNothingAtAll'
2018-05-21 18:48:29 +02:00
dcodeIO
6c0a5c47d9 Update Binaryen and take care of WebAssembly/binaryen#1547 2018-05-14 16:55:55 +02:00
dcodeIO
e415377cda Avoid trampolines where optional arguments are constant literals, see #102; Fix temporary local flags not being cleared; Fix inlined temporary locals not being free'd; Fix inlined flows not breaking after returns; Allow changetype of u32s, i.e. function pointers 2018-05-11 16:31:56 +02:00
dcodeIO
ef9b43740d Eliminate leftover temporary function types using latest Binaryen 2018-05-09 16:33:42 +02:00
dcodeIO
25a1f6230a Suppress some unnecessary blocks and nops; Fix compilation of always 'break'ing 'do's 2018-05-06 05:46:35 +02:00
Daniel Wirtz
50f6c1c460
Update internal ABI to zero/sign-extend where necessary only (#87) 2018-05-06 00:00:54 +02:00
dcodeIO
6d6d1dddcf Improve inlining where locals can be aliased; Add a crude mechanism for explicit unchecked array accesses
The `unchecked` builtin should be handled with ultimate care and it would be a lot better if there'd be a mechanism doing this automatically.
2018-04-25 05:04:35 +02:00