253 Commits

Author SHA1 Message Date
Andrey Zgarbul
7c1e4dbf11 fix traits 2019-05-09 07:36:52 +03:00
Andrey Zgarbul
ac371e42ef Merge branch 'm1elports' of https://github.com/burrbull/libm into m1elports 2019-05-09 07:00:32 +03:00
Andrey Zgarbul
5c5ba6fe82 rm asine, mv lgamma 2019-05-09 06:58:58 +03:00
Andrey Zgarbul
92db6e9c1b sh +x 2019-05-07 09:07:26 +03:00
Andrey Zgarbul
fcdb5a8c13 tests, fixes, format 2019-05-07 07:16:24 +03:00
Andrey Zgarbul
764f5741ee Merge branch 'lots-of-untested-ports' of https://github.com/m1el/libm 2019-05-06 09:11:10 +03:00
Alex Crichton
ef8a8ae9ee Merge pull request rust-lang/libm#161 from alexcrichton/ldexp
Add bindings for ldexp/ldexpf
2019-05-02 14:38:55 -05:00
Alex Crichton
a3ed9fdfcd Merge pull request rust-lang/libm#151 from 4tm4j33tk4ur/clippy
fixed some clippy warnings
2019-05-02 14:38:27 -05:00
Alex Crichton
01d0e3eed8 Run cargo fmt 2019-05-02 12:36:37 -07:00
Alex Crichton
3c2a09589a Merge pull request rust-lang/libm#153 from m1el/floorf-uint-underflow
Fixed uint overflow in floorf for negative exponents
2019-05-02 14:35:15 -05:00
Alex Crichton
dc3eebd0b7 Add a test that overflow does not happen 2019-05-02 12:34:05 -07:00
Alex Crichton
3110f741a6 Merge pull request rust-lang/libm#143 from mb64/wrapping-atan2
Fix the atan family of functions behavior with bounds checks
2019-05-02 14:32:22 -05:00
Alex Crichton
ef597e0e8f Update some URLs 2019-05-02 12:31:48 -07:00
Alex Crichton
beac41a229 Merge pull request rust-lang/libm#142 from mb64/wrapping-sqrt
Change `sqrt` to use wrapping newtypes
2019-05-02 14:30:49 -05:00
Alex Crichton
9b63889bae Merge pull request rust-lang/libm#128 from rrbutani/pow
Add some tests for pow
2019-05-02 14:23:47 -05:00
Alex Crichton
a7ca98487e Add bindings for ldexp/ldexpf
Should help in fixing wasmerio/wasmer#407
2019-05-02 12:21:55 -07:00
Anna Bogus
6ab6ca024e fixed some clippy warnings 2019-05-02 12:16:48 -07:00
Igor null
f4c572727a fixed uint underflow in floorf for negative exponents 2019-05-02 12:14:30 -07:00
Mark Barbone
c981490c75 Modify atan2 to use wrapping_ ops 2019-05-02 12:13:26 -07:00
Alex Crichton
1cbbb87c89 Update contributing docs 2019-05-02 12:12:47 -07:00
Mark Barbone
d8cc6337f6 Change sqrt to use wrapping operations 2019-05-02 12:09:22 -07:00
Rahul Butani
7f76eda7b5 Use core for constants instead of std
(thanks @vks)
2019-05-02 12:08:30 -07:00
Rahul Butani
f52b7ea8f5 rustfmt'ed 2019-05-02 12:08:30 -07:00
Rahul Butani
770e0edb70 Some additional tests 2019-05-02 12:08:30 -07:00
Rahul Butani
399b9acdd2 Cleaned up + rustfmt'ed 2019-05-02 12:08:30 -07:00
Rahul Butani
272f92def5 Add some tests for pow
These probably aren't comprehensive but they cover all the edge cases identified in the original musl source.
2019-05-02 12:08:30 -07:00
Alex Crichton
c4468281d4 More azure config fixes 2019-05-02 12:05:02 -07:00
Alex Crichton
47a543171c Run rustfmt 2019-05-02 11:44:58 -07:00
Alex Crichton
9cf8475f2f Fix azure config 2019-05-02 11:41:20 -07:00
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
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
Igor null
4f1f71a8d6 Ported several remaining math functions from musl
Please note that these aren't tested yet.
2018-08-26 16:36:59 +03: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
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