412 Commits

Author SHA1 Message Date
Alex Crichton 28c69b4197 Rework how testing is done
Use a build script to generate musl reference outputs and then ensure
that everything gets hooked up to actually run reference tests.
2019-05-02 10:48:55 -07:00
Alex Crichton 575e81ca56 Remove newlib generator
It's broken and we can try to add it back later if necessary
2019-05-02 08:12:23 -07:00
Alex Crichton 35fc5ed551 Move crates to crates folder 2019-05-02 08:12:00 -07:00
Alex Crichton aa8e7832be Set up CI with Azure Pipelines
[skip ci]
2019-05-02 09:15:01 -05:00
Alex Crichton 3559e70379 Merge pull request #152 from alexcrichton/wasm-sqrt
Optimize intrinsics on wasm32
2018-10-24 09:59:46 +02:00
Jorge Aparicio ad5641b23f merge [features] tables 2018-10-24 00:18:30 +02:00
Alex Crichton 284f2d007c Optimize intrinsics on wasm32
Profiling a recent demo I was playing with on `wasm32-unknown-unknown`
pointed me to the surprising result that 15% of the execution time was
in the `sqrt` intrinsic (there's a lot of math here). Upon investigation
I remembered that wasm (unconditionally) has a native `f32.sqrt`
instruction!

I was then subsequently confused that a simple `f.sqrt()` actually
codegens to use `f32.sqrt` in Rust, but I later realized that the
implementations of intrinsics in this library often use other intrinsics
to implement them. That means that the real intrinsic here, `acos`,
internally called `sqrt` at some point but wasn't using the optimized
implementation!

To help fix this situation this PR is intended on providing the
infrastructure for optimized implementations (via code generation) to be
used for each intrinsic. I've gone thorugh the various math instructions
that wasm has available and updated each of the intrinsic
implementations in this crate to optionally use the LLVM intrinsic
versions, which are known to unconditionally compile down to a single
instruction (unlike the arbitrary platform, where we don't know what it
will compile down to!).

To do this I created a new macro to wrap the invocation of LLVM
intrinsics. Invoking LLVM intrinsics is turned off by default (through a
new and on-by-default feature, `stable`). When the `stable` feature is
disabled, however, then the wasm-target specifically will enable usage
of the LLVM intrinsics. I've additionally added a CI builder which
should verify that these continue to build on Travis.

After this I intended to update the submodule in the `compiler-builtins`
repository so we can pull in the optimized implementation there, and
`compiler-builtins` naturally won't set `feature = "stable"` when
compiling so all the intrinsics should get compiled in by default. After
a further update of `the libcompiler_builtins` submodule in
rust-lang/rust we should be good to go!
2018-10-11 14:52:09 -07:00
Igor null a4e0202602 Ported several remaining math functions from musl
Please note that these aren't tested yet.
2018-08-26 16:36:59 +03:00
bors[bot] 8e857c72cf Merge #132
132: add newlib support to the test generator r=japaric a=japaric



Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-27 05:39:21 +00:00
Jorge Aparicio 9b26c6a408 tweak the order of the tests 2018-07-27 00:38:56 -05:00
Jorge Aparicio 68329712b3 uncomment the other build jobs 2018-07-27 00:27:25 -05:00
Jorge Aparicio 42c1e72574 make qemu-arm executable 2018-07-27 00:21:54 -05:00
Jorge Aparicio 3332a6d303 add newlib support to the test generator 2018-07-27 00:11:06 -05:00
bors[bot] 96e36ea262 Merge #131
131: omit bounds check in release mode r=japaric a=japaric

this eliminates panicking branches in the optimized version of the functions. We keep the bounds
checks when running the test suite to check that we never do an out of bounds access.

This commit also adds a "must link" test that ensures that future changes in our implementation
won't add panicking branches.

closes #129

Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-25 20:03:34 +00:00
Jorge Aparicio 3c5ba36414 ci: fix if condition 2018-07-25 15:02:10 -05:00
Jorge Aparicio 2e5ec3358b cargo fmt 2018-07-25 14:49:14 -05:00
Jorge Aparicio 6af6e1bfa0 ci: add nightly build job to rnu the no-panic test 2018-07-25 14:48:49 -05:00
Jorge Aparicio ce02130e55 omit bounds check in release mode
this eliminates panicking branches in the optimized version of the functions. We keep the bounds
checks when running the test suite to check that we never do an out of bounds access.

This commit also adds a "must link" test that ensures that future changes in our implementation
won't add panicking branches.

closes #129
2018-07-25 13:16:10 -05:00
Jorge Aparicio 861720b0ed README: all the math functions we needed are now supported 2018-07-21 12:01:49 -05:00
Jorge Aparicio 6f04dab39d v0.1.2 2018-07-18 11:48:47 -05:00
bors[bot] d65f60f242 Merge #127
127: update changelog; add more copyright notices r=japaric a=japaric



Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-18 03:10:48 +00:00
Jorge Aparicio 7e5fe7c2e1 update changelog; add more copyright notices 2018-07-17 20:04:33 -05:00
bors[bot] 80291c3f8b Merge #126
126: implement pow r=japaric a=japaric

cargo fmt version of #125 
closes #125 
closes #124

Co-authored-by: Rahul Butani <rr.butani@gmail.com>
Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-18 00:47:19 +00:00
Jorge Aparicio ea9f617cd4 cargo fmt 2018-07-17 19:46:12 -05:00
Rahul Butani 422532b33d rustfmt'ed + some clean up 2018-07-17 15:08:22 -05:00
Rahul Butani 24768f42dd Enable tests and expose 2018-07-17 15:08:22 -05:00
Rahul Butani 0a09954701 pow! 2018-07-17 15:08:22 -05:00
bors[bot] e979c7d82b Merge #122
122: Add sanity_check for atan2 r=japaric a=P1n3appl3

It's already been merged, but now I can say with certainty that this closes #9 

Co-authored-by: Joseph Ryan <josephryan3.14@gmail.com>
2018-07-17 03:19:09 +00:00
Joseph Ryan d1f3e3094a Merge remote-tracking branch 'upstream/master' 2018-07-16 21:26:39 -05:00
Joseph Ryan ef47df3b35 rustfmt 2018-07-16 21:22:35 -05:00
Joseph Ryan bf94d54243 Merge branch 'master' of github.com:P1n3appl3/libm 2018-07-16 21:18:49 -05:00
Joseph Ryan 70b27a0f6f Add unit tests for atan2 2018-07-16 21:18:38 -05:00
bors[bot] f585251755 Merge #112
112: [WIP]: implement atan2 r=japaric a=P1n3appl3

This depends on `atan()`. There was a pr for that but it seems to have been closed without adding it?

Co-authored-by: Joseph Ryan <josephryan3.14@gmail.com>
Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-17 01:03:56 +00:00
Jorge Aparicio 99981facaf cargo fmt 2018-07-16 20:03:30 -05:00
Jorge Aparicio 59cfaf5dd0 fix another rebase error 2018-07-16 18:54:19 -05:00
Jorge Aparicio aa9c941f64 fix rebase error 2018-07-16 18:46:59 -05:00
Jorge Aparicio 9e1bc8e5ee Merge branch 'master' into master 2018-07-16 18:46:26 -05:00
bors[bot] 8361310b21 Merge #121
121: Implement atan r=japaric a=derekdreery

New version of PR

Co-authored-by: Richard Dodd <richard.o.dodd@gmail.com>
2018-07-16 20:12:18 +00:00
Richard Dodd d731dcbe53 Implement atan 2018-07-16 21:04:57 +01:00
bors[bot] d30c103ea8 Merge #120
120: test edge cases r=japaric a=japaric

the test generator is not good at generating test cases that contain values like inf, zero and nan.
This commit adds test cases that contain those values.

Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-16 18:32:43 +00:00
Jorge Aparicio bebe357e8f test edge cases 2018-07-16 13:03:40 -05:00
bors[bot] 3932e2ea8e Merge #117
117: implement cosh r=japaric a=kirch7

`cosh(f64)` implemented. I had to implement `__expo2(f64)` also.

Co-authored-by: Cássio Kirch <cassio.kirch@inf.ufrgs.br>
Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-16 00:51:17 +00:00
Cássio Kirch 7175c5b64c words insertion on k_expo2 2018-07-15 21:36:22 -03:00
Cássio Kirch 41c5d03fa9 unused cast removed 2018-07-15 21:35:08 -03:00
Jorge Aparicio ad0e05ab57 enable tests for cosh 2018-07-15 18:13:09 -05:00
Cássio Kirch abcf9e72c2 implement cosh 2018-07-15 19:49:12 -03:00
bors[bot] 0e97df2a7f Merge #116
116: inline more functions; add more methods to F{32,64}Ext r=japaric a=japaric



Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-15 21:01:18 +00:00
Jorge Aparicio 745b3020c0 inline more functions; add more methods to F{32,64}Ext 2018-07-15 16:00:09 -05:00
bors[bot] 3c048e9859 Merge #115
115: add more copyright notices r=japaric a=japaric



Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-15 19:50:34 +00:00
Jorge Aparicio 54af49db47 add more copyright notices 2018-07-15 14:50:00 -05:00