213 Commits

Author SHA1 Message Date
Alex Crichton
0656dec456 Delete stray test 2019-05-02 11:38:26 -07:00
Alex Crichton
8d79795d70 Overhaul tests
* Move everything to azure pipelines
* Inline docker configuration in this repo (no `cross`)
* Delete `no-panic` example, use `#[no_panic]` instead.
2019-05-02 11:37:21 -07:00
Alex Crichton
7cb4a204a2 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
8560077059 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
ae69253dc7 Move crates to crates folder 2019-05-02 08:12:00 -07:00
Alex Crichton
fa6d92bb41 Set up CI with Azure Pipelines
[skip ci]
2019-05-02 09:15:01 -05:00
Alex Crichton
a9d5577f55 Merge pull request rust-lang/libm#152 from alexcrichton/wasm-sqrt
Optimize intrinsics on wasm32
2018-10-24 09:59:46 +02:00
Jorge Aparicio
5c6fd41b3d merge [features] tables 2018-10-24 00:18:30 +02:00
Alex Crichton
9b03920fe1 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
bors[bot]
5ead70a89e Merge rust-lang/libm#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
527eefef9c tweak the order of the tests 2018-07-27 00:38:56 -05:00
Jorge Aparicio
28b3fff3c5 uncomment the other build jobs 2018-07-27 00:27:25 -05:00
Jorge Aparicio
99da9ff292 make qemu-arm executable 2018-07-27 00:21:54 -05:00
Jorge Aparicio
c626608e41 add newlib support to the test generator 2018-07-27 00:11:06 -05:00
bors[bot]
adaeaa64d7 Merge rust-lang/libm#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 rust-lang/libm#129

Co-authored-by: Jorge Aparicio <jorge@japaric.io>
2018-07-25 20:03:34 +00:00
Jorge Aparicio
47e65384f2 ci: fix if condition 2018-07-25 15:02:10 -05:00
Jorge Aparicio
a4197d1cde cargo fmt 2018-07-25 14:49:14 -05:00
Jorge Aparicio
657906b30c ci: add nightly build job to rnu the no-panic test 2018-07-25 14:48:49 -05:00
Jorge Aparicio
6454687134 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 rust-lang/libm#129
2018-07-25 13:16:10 -05:00
Jorge Aparicio
7774eac962 README: all the math functions we needed are now supported 2018-07-21 12:01:49 -05:00
Jorge Aparicio
ddd9a3c5ba v0.1.2 2018-07-18 11:48:47 -05:00
bors[bot]
e2569e64ad Merge rust-lang/libm#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
a8cce5bda1 update changelog; add more copyright notices 2018-07-17 20:04:33 -05:00
bors[bot]
7f3144ab0d Merge rust-lang/libm#126
126: implement pow r=japaric a=japaric

cargo fmt version of rust-lang/libm#125 
closes rust-lang/libm#125 
closes rust-lang/libm#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
9f920e739a cargo fmt 2018-07-17 19:46:12 -05:00
Rahul Butani
1c555103ae rustfmt'ed + some clean up 2018-07-17 15:08:22 -05:00
Rahul Butani
440e835967 Enable tests and expose 2018-07-17 15:08:22 -05:00
Rahul Butani
f12ba75f67 pow! 2018-07-17 15:08:22 -05:00
bors[bot]
89c7f41c04 Merge rust-lang/libm#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 rust-lang/libm#9 

Co-authored-by: Joseph Ryan <josephryan3.14@gmail.com>
2018-07-17 03:19:09 +00:00
Joseph Ryan
9d3ada544a Merge remote-tracking branch 'upstream/master' 2018-07-16 21:26:39 -05:00
Joseph Ryan
203a8aea86 rustfmt 2018-07-16 21:22:35 -05:00
Joseph Ryan
4394b4f070 Merge branch 'master' of github.com:P1n3appl3/libm 2018-07-16 21:18:49 -05:00
Joseph Ryan
fe84c2050e Add unit tests for atan2 2018-07-16 21:18:38 -05:00
bors[bot]
694d7b418d Merge rust-lang/libm#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
29c1188f1f cargo fmt 2018-07-16 20:03:30 -05:00
Jorge Aparicio
addfefd63f fix another rebase error 2018-07-16 18:54:19 -05:00
Jorge Aparicio
579a0ad4fd fix rebase error 2018-07-16 18:46:59 -05:00
Jorge Aparicio
d6edc4b6ab Merge branch 'master' into master 2018-07-16 18:46:26 -05:00
bors[bot]
fc6efb1419 Merge rust-lang/libm#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
e6f9e77006 Implement atan 2018-07-16 21:04:57 +01:00
bors[bot]
345be50d45 Merge rust-lang/libm#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
99830bac40 test edge cases 2018-07-16 13:03:40 -05:00
bors[bot]
9252cdd3fa Merge rust-lang/libm#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
e8e1197629 words insertion on k_expo2 2018-07-15 21:36:22 -03:00
Cássio Kirch
1e61787694 unused cast removed 2018-07-15 21:35:08 -03:00
Jorge Aparicio
bbf1c5432a enable tests for cosh 2018-07-15 18:13:09 -05:00
Cássio Kirch
06aba07681 implement cosh 2018-07-15 19:49:12 -03:00
bors[bot]
8d962a0b0b Merge rust-lang/libm#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
57848a7309 inline more functions; add more methods to F{32,64}Ext 2018-07-15 16:00:09 -05:00
bors[bot]
2570761a2c Merge rust-lang/libm#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