Commit Graph

202 Commits

Author SHA1 Message Date
Jorge Aparicio
109c33ed0a test out of range condition using f64
to avoid imprecision due to rounding to f32
2017-04-08 10:18:19 -05:00
Jorge Aparicio
2faec6a4fb fix debug assertion in modsi3 / moddi3
fixes #151
this fix is very similar to #149
2017-03-13 20:40:44 -05:00
bors
9681358dc5 Auto merge of #149 - rust-lang-nursery:gh148, r=alexcrichton
fix debug assertion in divdi3

fixes #148

r? @alexcrichton
2017-03-07 00:38:33 +00:00
Jorge Aparicio
c93b32b3e5 fix debug assertion in divdi3
fixes #148
2017-03-06 17:46:11 -05:00
Jorge Aparicio
4c556dc9e7 fix quickcheck tests
the check! macro syntax has changed
2017-03-06 12:17:41 -05:00
Jorge Aparicio
c6e06f4157 refactor 'impl Int' 2017-03-06 12:17:10 -05:00
Wilfried Chauveau
09d2f2f1f5 exclude from tests values out of integer range (and NaN). 2017-03-06 11:56:52 -05:00
Wilfried Chauveau
d96102d270 implement float/double to (u)int conversion. 2017-03-06 11:56:52 -05:00
Wilfried Chauveau
293fef5ebe impl (unsigned/signed) int to single/double precision float conversion based on llvm algorithms. 2017-03-06 11:55:57 -05:00
Jorge Aparicio
644a1c9ac9 fix infinite recursion in divmoddi4 / mulodi4
on ARMv7-M processors, divmoddi4 was calling mulodi4 and mulodi4 was calling
divmoddi4 leading to infinite recursion. This commit breaks the cycle by using
wrapping multiplication in divmoddi4.

fixes #145
2017-03-06 10:38:19 -05:00
Jorge Aparicio
5bb969d8f5 implement float subtraction
as a + (-b)
2017-02-08 10:10:40 -05:00
Jorge Aparicio
47b45d1d62 adjust the check! macro to accept AAPCS intrinsics 2017-02-07 23:07:51 -05:00
Jorge Aparicio
57085be2ea ARM: keep some non-aeabi symbols around
- multi3: there's no aeabi equivalent
- divmod{s,d}i4: these are directly called by __aeabi_{l,i}divmod
- add{s,d}f3: required by the C sub{s,d}f3 implementation

but make sure they also use the AAPCS calling convention
2017-02-07 14:28:02 -05:00
Jorge Aparicio
dfa7b161aa use AAPCS calling convention on all aeabi intrinsics
also, on ARM, inline(always) the actual implementation of the intrinsics so we
end with code like this:

```
00000000 <__aeabi_dadd>:
    (implementation here)
```

instead of "trampolines" like this:

```
00000000 <__aeabi_dadd>:
    (shuffle registers)
    (call __adddf3)

00000000 <__adddf3>:
    (implementation here)
```

closes #116
2017-02-07 09:41:26 -05:00
est31
37d349015e Disable quickcheck tests on mips
Two reasons:
    * the C versions __divti3 and __modti3 are apparently broken,
      at least when used in quickcheck. They change their own arguments.
    * compiler_rt's support for mips is disabled already on clang [1].
      Its desireable to support working "cargo test" on that compiler
      as well, and not greet the tester with linker errors.

[1]: http://llvm.org/viewvc/llvm-project?view=revision&revision=224488
2017-02-04 12:23:45 +01:00
est31
f8a4e3fd70 Panic when invalid overflow value is returned 2017-02-04 01:39:19 +01:00
est31
b78e956f08 Add quickcheck tests 2017-02-03 23:46:15 +01:00
est31
417b07b821 Add newly implemented intrinsics to test file 2017-02-03 01:51:46 +01:00
est31
9013dbef02 u128 sdiv intrinsics 2017-02-02 22:13:28 +01:00
est31
2f3c534cfe u128 udiv intrinsics 2017-02-02 22:11:14 +01:00
est31
8fe50d813c Macro-ify udivmod 2017-02-02 22:03:42 +01:00
est31
1e27c3f937 i128 shift intrinsics 2017-02-02 22:02:51 +01:00
est31
3055aa21b6 i128 mul intrinsics 2017-02-02 21:36:56 +01:00
est31
b356429374 int module: macro-ify trait impls and add {u,i}128 support 2017-02-02 21:36:02 +01:00
est31
a2e2ec1a18 Add i128 to lib.rs as feature 2017-02-02 21:27:11 +01:00
Jorge Aparicio
b6f059d627 fix the build
the unused macro_use crate lint has tightened; fix the new warnings
2017-01-26 16:17:23 -05:00
James Duley
ee0aacf4be mul.rs: use wrapping_mul not plain
rustc in debug mode with a plain multiplication will call @llvm.umul.with.overflow.* which may call the builtin resulting in infinite recursion.
2017-01-02 22:57:38 +13:00
Jorge Aparicio
53da94d74f more #[no_mangle] 2016-12-31 10:04:40 -05:00
Jorge Aparicio
3992ed1e7a CI: use a recent nightly
- add #[no_mangle] to the panic_fmt lang item to adjust to changes in
the visibility algorithm

- adjust to changes in the layout of Cargo's target directory

- use a newer Xargo to reduce the build time of the sysroot (only core
is compiled as part of the sysroot now)
2016-12-31 10:04:40 -05:00
Vadzim Dambrouski
9897bfb8a9 Fix memset arguments for MSP430 target.
On MSP430 second argument to memset has i16 type instead of i32.
2016-12-19 05:31:20 +03:00
Jorge Aparicio
a1caa7ccac add implementations of memcpy et al
behind the "mem" Cargo feature, which used to be named "weak"

fixes #126
2016-12-17 23:06:37 -05:00
Jorge Aparicio
3484b2b68e by default, mark this crate as the #![compiler_builtins] crate
as this is how most users will want to use this crate
2016-12-11 16:18:43 -05:00
Matt Ickstadt
f68475e080 Use better cfg name for arm-linux tests 2016-11-12 15:52:59 -06:00
Matt Ickstadt
77ca63c511 Use correct lib name in qc test failure 2016-11-12 15:30:57 -06:00
Matt Ickstadt
655f642d3f Add float quickcheck 2016-11-12 14:55:28 -06:00
Christopher Serr
4733417140 Fix a few clippy warnings 2016-10-16 13:53:31 +02:00
Jorge Aparicio
5d164a4eda fix the powerpc64le target
by selecting a CPU that's compatible with the instructions that `rustc`
generates
2016-10-14 09:59:21 -05:00
Jorge Aparicio
a163ca7ac3 fix more warnings 2016-10-10 20:21:11 -05:00
Jorge Aparicio
e05caa1227 fix warnings 2016-10-10 19:45:34 -05:00
Jorge Aparicio
8f0847eb94 rename to compiler_builtins, add rust-lang/rust-ish crate attributes 2016-10-10 19:05:21 -05:00
Jorge Aparicio
24c0247c6a add the compiler_builtins feature to src/lib.rs 2016-10-10 16:45:24 -05:00
Jorge Aparicio
d2a3c45a29 set crate_name and crate_type in src/lib.rs 2016-10-10 16:43:38 -05:00
Jorge Aparicio
96ddd4ed8d use test::black_box instead of ptr::*_volatile
both prevent LLVM from optimizing away the intrinsics but the former
doesn't produce an `intrinsics` binary that segfaults
2016-10-07 18:26:21 -05:00
Jorge Aparicio
c82403551d fix unsafe warnings 2016-10-07 18:19:40 -05:00
Jorge Aparicio
fd69beba29 get profile.dev (-debug-assertions) + LTO working 2016-10-07 18:19:40 -05:00
Jorge Aparicio
a21fb956f9 insert more abort() calls where division by zero may occur 2016-10-07 18:19:40 -05:00
Jorge Aparicio
a2ffc799d0 check that we don't have any call to panic in our implementations 2016-10-07 18:19:40 -05:00
Jorge Aparicio
534d22e287 panic! -> abort
closes #79
2016-10-07 18:19:40 -05:00
Matt Ickstadt
6622c49be6 Implement powi_f2 2016-10-03 11:20:42 -05:00
Matt Ickstadt
02140cddc9 Initial implementation of multitester 2016-10-02 14:38:40 -05:00
Jorge Aparicio
3b8dedd416 Revert "Merge pull request #48 from mattico/add_float_quickcheck"
This reverts commit e34a6058df, reversing
changes made to cab88e6133.
2016-09-30 19:12:17 -05:00
Matt Ickstadt
010d153966 Add Quickcheck types for float tests 2016-09-30 14:29:52 -05:00
Matt Ickstadt
9b1fed8d3f Cleanup add builtin assignments 2016-09-30 14:29:52 -05:00
Matt Ickstadt
58e89b3024 Add floating point deconstruction helpers 2016-09-30 14:29:52 -05:00
Jorge Aparicio
f77ca915c4 add an opt-in cargo feature to build intrinsics from compiler-rt source
closes #63
cc #66
2016-09-29 16:06:24 -05:00
Alex Crichton
8e161a791a Expand and refactor teting infrastructure
This commit moves over most of the testing infrastructure to in-tree docker
images that are all dispatched to from Travis (no other test configuration).
This allows versioning modifications to the test infrastructure as well as the
code itself. Additionally separate docker images allows for easy modification of
one without worrying about tampering of others as well as easy addition of new
targets by simply adding a new `Dockerfile`.

Additionally this commit bundles the master version of the `compiler-rt` source
repository from `llvm-mirror/compiler-rt` to test against. The compiler-rt
library itself is compiled as a `cdylib` which is then dynamically located at
runtime and we look for symbols in. There's a few hoops here, but they currently
get the job done.

All tests now execute against both gcc_s and compiler-rt, and this
testing strategy is now all hidden behind a macro as well (refactoring
all existing tests along the way).
2016-09-28 22:09:55 -07:00
homunkulus
c56a3f8a6e Auto merge of #73 - japaric:weak, r=japaric
put weak mem* symbols behind an opt-in Cargo feature

closes #64
cc #66
2016-09-22 23:59:48 +00:00
Jorge Aparicio
b7fa7d3a59 put weak mem* symbols behind an opt-in Cargo feature
closes #64
cc #66
2016-09-22 18:02:25 -05:00
homunkulus
d5e38beef9 Auto merge of #71 - japaric:aeabi-aliases, r=japaric
add missing aeabi aliases
2016-09-22 22:55:43 +00:00
Jorge Aparicio
d34be6ab4e add missing aeabi aliases 2016-09-22 17:02:36 -05:00
Jorge Aparicio
384c48ce9b don't test always against gcc_s
instead test half of the time against gcc_s and the other half test
against the native operation (\*).

(\*) Not all the targets have available a native version of the
intrinsics under test. On those targets we'll end up testing our
implementation against itself half of the time. This is not much of a
problem because we do several quickcheck runs per intrinsic.
2016-09-21 21:38:06 -05:00
Jorge Aparicio
337bd7e209 armhf: don't compare our impls against gcc_s 2016-09-21 21:14:38 -05:00
Jorge Aparicio
225d4c9d45 avoid division overflow in idivmod test 2016-09-17 21:10:41 -05:00
Jorge Aparicio
9493c37455 test our implementations against gcc_s
if it exposes the same intrinsics that we implement -- gcc_s doesn't
implement all the intrinsics for all the architectures.

closes #65
2016-09-16 15:53:14 -05:00
Jorge Aparicio
2e561b3869 use utility function to compare the repr of floats
follow up of #43
2016-08-21 11:24:58 -05:00
Jorge Aparicio
c427112561 Merge pull request #49 from japaric/edge
qc: bias towards generation of edge cases
2016-08-21 11:03:44 -05:00
Matt Ickstadt
da53b70d34 Use mem::swap to swap variables 2016-08-20 22:30:02 -05:00
Jorge Aparicio
fc0cdeb7f1 qc: bias towards generation of edge cases 2016-08-20 22:17:50 -05:00
Matt Ickstadt
ef16de3d37 Implement soft float add builtins 2016-08-20 16:06:02 -05:00
Matt Ickstadt
6f0d50ebea Move integer functions to separate module 2016-08-20 15:55:06 -05:00
Jorge Aparicio
8603e64554 Merge pull request #44 from Amanieu/sdiv
Add signed division functions
2016-08-19 09:16:53 -05:00
Amanieu d'Antras
b9e916c769 Add tests for ARM division builtins 2016-08-19 12:13:02 +01:00
Amanieu d'Antras
f919660be5 Add signed division functions 2016-08-19 12:13:02 +01:00
Jorge Aparicio
5e47ca2699 rename muldi4 to muldi3
closes #42
2016-08-18 21:27:16 -05:00
Matt Ickstadt
aab3a10a9d Disable mangling for msvc stack builtins
This prevents linker errors in test builds due to the `jmp` instruction in __alloca
2016-08-17 12:55:15 -05:00
Matt Ickstadt
c9bff743cd Use jmp to implement __alloca fallthrough 2016-08-17 12:11:38 -05:00
Matt Ickstadt
b6091ababa Add x86_64 builtins 2016-08-16 19:55:17 -05:00
Jorge Aparicio
ac352a3512 add core_intrinsics feature gate 2016-08-15 21:08:04 -05:00
Jorge Aparicio
55eb1b71a0 remove unused feature gates 2016-08-14 22:08:36 -05:00
Jorge Aparicio
8965b061c2 use rlibc crate instead 2016-08-14 22:03:19 -05:00
Jorge Aparicio
fdbb7883da exclude windows and macos 2016-08-14 22:01:15 -05:00
Jorge Aparicio
265939fc00 add weak memcpy et al symbols
closes #28
2016-08-14 22:00:31 -05:00
Jorge Aparicio
45aec943d3 use wrapping_add in muldi4 2016-08-13 18:47:39 -05:00
Jorge Aparicio
f3eb08a96d fix a bug in udivmoddi4 2016-08-13 18:45:00 -05:00
Jorge Aparicio
69376af183 quickcheck: better generation of input arguments
closes #31
2016-08-13 16:58:44 -05:00
Amanieu d'Antras
97217e3ad9 Fix inline assembly to work on ARMv6-M 2016-08-13 17:29:38 +01:00
Amanieu d'Antras
acceaa95f1 Various changes 2016-08-13 09:56:40 +01:00
Amanieu d'Antras
0a0a8f37c9 Remove the absv implementation, it isn't needed by Rust 2016-08-13 09:54:58 +01:00
Jorge Aparicio
eb206842f2 address second row of review 2016-08-11 01:45:48 -05:00
Jorge Aparicio
1c22269948 don't transmute in test 2016-08-11 01:42:34 -05:00
Jorge Aparicio
3ff25d956a put div intrinsics in their own module + some docs 2016-08-11 01:26:27 -05:00
Jorge Aparicio
a84579d3c1 refactor: use Int traits, words -> U64, fmt 2016-08-11 01:15:51 -05:00
Jorge Aparicio
d6be95a3bb note about calling convention 2016-08-11 00:36:19 -05:00
Jorge Aparicio
a2fc4da7a5 move return into if branches 2016-08-11 00:33:27 -05:00
Jorge Aparicio
0915e15c9a *mut T -> Option<&mut T> 2016-08-11 00:31:49 -05:00
Jorge Aparicio
cc9d3e8e5f port __udivmodsi4, aeabi_uidivmod and udivsi3
also rewrite these last two new aeabi intrinsics as naked functions
2016-08-11 00:26:16 -05:00
Jorge Aparicio
950564607d port udivmoddi4 and __aeabi_uldivmod 2016-08-11 00:26:12 -05:00
Amanieu d'Antras
8a94b69d85 Add traits for integer operations 2016-08-11 05:38:11 +01:00
Amanieu d'Antras
065aaa9144 Remove the x86-specific floating-point builtins 2016-08-08 08:36:59 +01:00
Amanieu d'Antras
a147763c19 Remove builtins that are not called by LLVM 2016-08-08 08:25:11 +01:00
Amanieu d'Antras
36fb191695 Rewrite the arm mem* builtins without asm and naked functions 2016-08-08 07:25:32 +01:00
Jorge Aparicio
1faf15fc64 initial commit 2016-08-07 15:58:21 -05:00