Commit Graph

49 Commits

Author SHA1 Message Date
20f4092eb2 Update Binaryen and other dependencies; Update dist files 2019-01-09 13:02:47 +01:00
a661ff7d89 Update Binaryen to latest 2018-12-01 03:09:43 +01:00
c30c62e383 Cast to bool by comparing to zero (#343) 2018-11-23 15:20:52 +01:00
4944280cdc Add Math.signbit (#333) 2018-11-18 11:46:48 +01:00
410036e445 Use mixed Horner scheme in Math.exp/expm1 to improve instruction parallelization (#311) 2018-11-09 17:56:42 +01:00
4f95dce6e2 Do not emit debug info by default
This basically flips the --noDebug flag to become a --debug flag, so some optimizations, like inlining, aren't skipped by default, which might be unexpected.
2018-11-09 12:28:10 +01:00
2bdc2a72f1 Use stack IR when emitting text format (#312) 2018-11-08 08:04:24 +01:00
d864bef1eb Improve per-bit divmod loop for mod & rem (#307) 2018-10-30 15:10:50 +01:00
e58582e9e9 Minor remquof improvemnts (#306) 2018-10-27 18:27:54 +02:00
376afd45fc Improve Math routines; Add Mathf-specific prng (#297) 2018-10-26 00:10:17 +02:00
f7c734789e Update Binaryen to latest; Various fixes 2018-10-11 08:49:08 +02:00
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
d90cd085e5 Update Binaryen 2018-09-13 23:10:49 +02:00
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
c27b6e8951 Add integer power functions (#212) 2018-09-09 04:07:27 +02:00
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
dc0f271fc2 Initial GC integration (#196) 2018-08-02 18:23:02 +02:00
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
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
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
7a8995b18b Properly inline getters; Simplify blocks when last statement returns 2018-06-22 15:26:59 +02:00
c6ec5e2832 Utilize Binaryen's -O4
When specifying -O3 or -Oz, asc now automatically increases the optimize level to 4, then including costly non-LLVM optimizations for blocky code, in turn achieving similar results as an LLVM-based generator.
2018-06-09 14:05:33 +02:00
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
829af2285c Fix continue labels in 'for' loops skipping the incrementor 2018-05-23 11:32:12 +02:00
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
6c0a5c47d9 Update Binaryen and take care of WebAssembly/binaryen#1547 2018-05-14 16:55:55 +02:00
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
ef9b43740d Eliminate leftover temporary function types using latest Binaryen 2018-05-09 16:33:42 +02:00
25a1f6230a Suppress some unnecessary blocks and nops; Fix compilation of always 'break'ing 'do's 2018-05-06 05:46:35 +02:00
50f6c1c460 Update internal ABI to zero/sign-extend where necessary only (#87) 2018-05-06 00:00:54 +02:00
8997561670 Update dependencies (#93) 2018-05-03 18:25:32 +02:00
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
a15457d8b9 Simplify isFinite & isNaN (#78) 2018-04-18 15:14:24 +02:00
4929fca363 Move some numeric builtins to stdlib; Minor refactoring 2018-04-17 02:50:38 +02:00
78a679759a Update dependencies 2018-04-13 15:31:23 +02:00
748e811137 Proper isNaN/isFinite without a temp. local 2018-04-12 20:40:00 +02:00
1cea3c6f08 Improve Math#sign (#72) 2018-04-12 19:26:50 +02:00
2002e32c9c Inline small stdlib functions (#71) 2018-04-12 14:17:29 +02:00
623597c23a Make the transition to ArrayBuffer backed Arrays (#70)
* Traverse base classes when resolving overloads
* Implement preliminary TypedArray accessors
* Extract decorator flags from common flags to make space
* Add '**' overload
* Implement basic explicit inlining
* Support inlining of instance methods
* Reduce number of required locals when inlining
* Implement inlining of operator overloads
* Fix issues when inlining generic functions
2018-04-11 23:35:19 +02:00
acfef646ef Update dist files; Also parse name and source mapping sections in lib/parse 2018-04-04 03:41:04 +02:00
06198a3723 Rename lib prefix to '~lib' (parens aren't valid); Add built-in alignof<T>; Prepare for ArrayBufferView 2018-04-02 19:05:26 +02:00
59a22c1842 A little 'asinit' CLI tool for quickly setting up a project; Minor refactoring 2018-04-01 23:46:41 +02:00
164f134053 Even more math (#56)
Remaining implementations of JavaScript's Math functions (except sin/cos/tan), both double (Math) and single (Mathf) precision, ported from musl incl. tests from libc-test, plus some changes to match JS semantics. Also binds fmod to `%` and pow to `**`.
2018-03-30 17:25:54 +02:00
e47a130771 More math 2018-03-26 23:46:41 +02:00
792202ac5a Add an option to alias global objects
This for example allows to switch the default 'Math' implementation a program will use. Uses 'NativeMath' by default.
2018-03-26 16:54:25 +02:00
e75d006d26 Implement Math/Mathf.pow 2018-03-26 03:50:06 +02:00
e26734ef90 Implement Math/Mathf.exp; Initial math test suite 2018-03-25 17:42:56 +02:00
38a025950e Support parameter properties; Minor formatting 2018-03-25 00:21:58 +01:00
721d77012b Math scaffolding 2018-03-24 17:18:15 +01:00