Commit Graph

589 Commits

Author SHA1 Message Date
Alex Crichton
e2a5e16b9e
Merge pull request #261 from paoloteti/fix-travis-ci
Attempt to fix TravisCI
2018-09-14 09:17:36 -07:00
Paolo Teti
620a8d4272 Apple-darwin: set DEBUG_LTO_BUILD_DOESNT_WORK
Temporary workaround for the well known
"undefined references problem for debug-assertions+lto" (#79)
2018-09-14 09:40:34 +02:00
Paolo Teti
c03769a47e panic_handler is now stable
Fixes the following warning:

"warning: the feature `panic_handler` has been stable since
1.30.0 and no longer requires an attribute to enable"
2018-09-13 10:25:59 +02:00
Alex Crichton
84523d81a1
Merge pull request #259 from paoloteti/cc-rs
Remove superfluous cc flags
2018-09-09 10:44:02 -07:00
Paolo Teti
296f04fe63 Remove unused variable target_arch_arm
Previous commit makes this variable unused
2018-09-08 19:04:09 +02:00
Paolo Teti
66d52cf01d Remove superfluous cc flags
Latest `cc-rs` already manage all arm/thumb flags, so We can
safely remove this piece of code.
2018-09-08 17:41:26 +02:00
Alex Crichton
447bb5391f
Merge pull request #256 from jordanrh1/windows-arm
Support windows/arm target
2018-09-07 10:08:01 -07:00
Jordan Rhee
71c5701c58 Remove unnecessary check 2018-09-07 08:27:38 -07:00
Jordan Rhee
19a7eedbf3 Try undoing unnecessary change 2018-09-06 09:27:24 -07:00
Jordan Rhee
6310b74d85 Support windows/arm target 2018-09-06 09:27:24 -07:00
Alex Crichton
38d5777d98 Fix some use_c_shim_if directives
This was an accidental regression introduced in #252 by removing compilation of
C files without adjusting the `#[use_c_shim_if]` directives. This restores the
compilation of the assembly files and updates the `#[use_c_shim_if]` directives.
2018-09-04 10:21:06 -07:00
Paolo Teti
8a4148f60b Rename panic_implementation -> panic_handler
panic_implementation has been deprecated/renamed.
New name is panic_handler
2018-09-01 21:17:07 +02:00
Alex Crichton
7bb11cdb98 Merge remote-tracking branch 'origin/master' into HEAD 2018-08-31 16:00:25 -07:00
Alex Crichton
091b21da57 Fix compile on riscv again 2018-08-31 16:00:12 -07:00
Alex Crichton
a7286980a0 Merge remote-tracking branch 'origin/master' into HEAD 2018-08-30 14:13:52 -07:00
Alex Crichton
1b4201f90d Fix compilation on riscv32 2018-08-30 14:13:15 -07:00
Charles Samborski
cbff830235
Fix link in README.md (Rust operator precedence) 2018-08-28 15:48:58 +02:00
Alex Crichton
ff82848c8e Update LLVM's compiler-rt submodule 2018-08-22 11:19:18 -07:00
Adrian Bunk
c9b4a8423c Fix __sync_fetch_and_nand_* for pre-v6 ARM
gcc changed semantics for __sync_fetch_and_nand_* in gcc 4.4,
and this was implementing the old semantics:
https://gcc.gnu.org/onlinedocs/gcc-8.2.0/gcc/_005f_005fsync-Builtins.html
2018-08-18 12:29:01 +03:00
Alex Crichton
2fe6c43d13 Merge remote-tracking branch 'origin/rust-llvm-release-7-0-0-v2' 2018-08-17 11:22:36 -07:00
Alex Crichton
2095fdab37 Remove unused features 2018-08-17 11:21:28 -07:00
Yu Ding
0e67871a43 Follow up on PR #252 2018-08-06 23:03:37 -07:00
Yu Ding
e3ac57b234 Fix symbol collision caused by floatdisf
[PR #234](https://github.com/rust-lang-nursery/compiler-builtins/pull/234) added floatdisf implementation in rust and removed floatdisf.c from build.rs. However the removal is in-complete. In x86_64+!msvc environment, the symbol floatdisf would be generated twice. Bugs found in Redox OS issue [#1195](https://gitlab.redox-os.org/redox-os/redox/issues/1195) and Mesalink travis [log](https://travis-ci.org/mesalock-linux/mesalink/jobs/412928048) at line 738. This patch fixes it by removing floatdisf.c from this environment.

Signed-off-by: Yu Ding <dingelish@gmail.com>
2018-08-06 20:54:48 -07:00
Alex Crichton
b0b04fc043 Upgrade to LLVM 7 branch point 2018-08-04 17:29:48 -07:00
David Craven
831af41ae4
Implement __mulsi3. 2018-07-27 23:03:24 +02:00
Alex Crichton
be2f980cf6 Update libm to elide bounds checks 2018-07-25 18:11:47 -07:00
Jorge Aparicio
cfa1690e69 fix warnings 2018-07-24 16:57:22 -05:00
Jorge Aparicio
8b1e42bf2a expose fmod{,f} symbols on thumb
these symbols are required for the built-in operation `f32 % f32`
2018-07-24 13:26:50 -05:00
Alex Crichton
bb88e27e3c Use intrinsics! macro for math intrinsics
Make sure they respect the `mangled-names` feature as well as have the `"C"`
ABI.
2018-07-18 10:04:33 -07:00
Jorge Aparicio
f43deaa6a4 fix path 2018-07-18 11:36:24 -05:00
Jorge Aparicio
1dbcef117c expose math symbol on wasm32-unknown-unknown 2018-07-18 11:34:20 -05:00
Alex Crichton
33086672fa Don't build multc3 on AArch64 MSVC
Apparently it doesn't compile due to an odd compiler error! This intrinsic has
to do with complex arithmetic anyway and we shouldn't need it.
2018-07-16 16:37:57 -07:00
Sébastien Marie
b1b06f583a openbsd: doesn't use static as it could result duplicated symbols 2018-07-16 06:17:38 +02:00
Alex Crichton
3ae27657a1 Try to fix intrinsics example on nightly 2018-07-12 09:29:32 -07:00
Alex Crichton
f8a81455d3
Merge pull request #247 from ljedrz/outdated_feature
Remove #![feature(i128_type)] as i128 is stable
2018-07-12 10:33:05 -05:00
Alex Crichton
4f50a214f7 Try to fix example's compile on nightly 2018-07-12 08:32:39 -07:00
ljedrz
806431c947 Remove #![feature(i128_type)] as i128 is stable 2018-07-12 14:40:56 +02:00
Alex Crichton
b3ffa4f2eb Upgrade compiler-rt submodule, mostly for sanitizers 2018-07-10 13:42:41 -07:00
Masaki Hara
bf7b7b9109 Explain why we need extra check in probestack. 2018-05-28 13:29:35 +09:00
Masaki Hara
247819f3a0 Fix segfault on probestack with dynamic alloca. 2018-05-27 23:28:17 +09:00
Alex Crichton
3f8bdca10d Allow failures on thumb for now 2018-05-14 06:56:42 -07:00
Alex Crichton
87fad11100 Update compiler-rt
Pick up a PR we forgot to backport
2018-05-14 06:55:34 -07:00
Alex Crichton
abf6fa3ae1
Merge pull request #241 from semarie/openbsd
use system library on openbsd
2018-05-12 14:02:43 -05:00
Alex Crichton
5f184b9b56 More attempts for intrinsics example 2018-05-12 07:21:36 -07:00
Sébastien Marie
c207fd3869 use system library on openbsd
compiler_rt is provided by default on OpenBSD, so use it instead of
rebuilding it from source.
2018-05-12 09:40:51 +02:00
Alex Crichton
f58152286a More CI fixes 2018-05-11 16:52:34 -07:00
Alex Crichton
99d7dde58d Attempt to fix tests on latest nightly 2018-05-11 16:45:30 -07:00
Alex Crichton
6249080093
Merge pull request #234 from ketsuban/master
Add __floatdisf and __floatundisf intrinsics
2018-04-05 10:06:16 -05:00
Thomas Winwood
ed6d12ecea
Remove reference to C impl of float[un]disf 2018-04-05 15:03:44 +01:00
Tim Neumann
f83c8529e7 Fix incorrect names used / generated on ARM 2018-03-27 14:32:01 +02:00
Mark Mansi
635855abdd stable_features allowed temporarily 2018-03-20 19:16:13 -05:00
Mark Mansi
b90fa1e14f Put back feature 2018-03-18 14:07:01 -05:00
Mark Mansi
f0f2db7490 i128 is being stabilized 2018-03-17 21:37:35 -05:00
Thomas Winwood
09d201db35 Add __floatdisf and __floatundisf intrinsics 2018-03-14 14:56:01 +00:00
Paolo Teti
ad3a5b6826 Remove ledf2vfp.S and lesf2vfp.S from build list 2018-02-25 19:49:31 +01:00
Paolo Teti
9fbdac0e38 TravisCI: remove allow_failures for thumb* targets 2018-02-25 19:23:30 +01:00
Paolo Teti
6fedebb166 Add missing test cases for __unordsf2/__unorddf2 2018-02-25 18:35:36 +01:00
Paolo Teti
20de84d127 Add __ledf2vfp and __lesf2vfp
Now that `73884ae` is in some nightly release We can add ledf2vfp/leds2vfp
and so these two functions be aliased to aeabi_fcmple/aeabi_dcmple on soft-float targets.
2018-02-25 17:50:56 +01:00
Paolo Teti
d7799358e4 Remove no_std features
Everything default unconditionally to #![no_std].
2018-02-25 09:19:34 +01:00
Paolo Teti
81356ccde4 Keep mangled-names as a default feature 2018-02-25 01:11:49 +01:00
Paolo Teti
ef48c1984b testcrate/lib.rs: use #![no_std] unconditionally 2018-02-25 00:22:39 +01:00
Paolo Teti
e319f042fd Use upstream for utest
Fix has been merged into upstream.
2018-02-24 22:48:27 +01:00
Paolo Teti
64ea229988 Fix CI for thumb* targets
Main fix is inside 'utest' all the rest are minor fixes due to the
new 'testcrate'.

Still allow failures on TravisCI for a while.
2018-02-18 18:15:57 +01:00
Paolo Teti
63b78c86d9 Fix thumbv6m build (feature=c)
1. Avoid undefined references as:
   undefined reference to `__modsi3'
   undefined reference to `__umodsi3'

2. We can't remove assembly implementations that are not in the list
2018-02-16 17:34:01 +01:00
bors
3ef457499c Auto merge of #231 - paoloteti:vfp, r=alexcrichton
Collection of VFP intrinsics

Nothing really exciting here, just a list of trivial VFP intrinsics.

First of all set  `mfloat-abi=hard` not only for thumb targets, then add support for the following intrinsics:

```
 __gesf2vfp
 __gedf2vfp
 __gtsf2vfp
 __gtdf2vfp
 __ltsf2vfp
 __ltdf2vfp
 __nesf2vfp
 __nedf2vfp
 __eqsf2vfp
 __eqdf2vfp
 __extendsfdf2vfp
```
Resulting implementation is really trivial thanks to native code generated by LLVM on hard-float targets
2018-02-12 18:57:43 +00:00
Alex Crichton
ed1e8401ad Merge branch 'llvm-60' 2018-02-12 10:57:11 -08:00
Paolo Teti
347871f7ec Update Progress list
Already implemented, but not marked as done.
2018-02-12 18:23:55 +01:00
Paolo Teti
b2aea631fe Collection of VFP intrinsics
Nothing really exciting here. LLVM on hard-float target use native instructions
for all listed VFP intrinsics and so resulting implementation is really trivial.

Implemented intrinsics:

 __gesf2vfp
 __gedf2vfp
 __gtsf2vfp
 __gtdf2vfp
 __ltsf2vfp
 __ltdf2vfp
 __nesf2vfp
 __nedf2vfp
 __eqsf2vfp
 __eqdf2vfp
 __extendsfdf2vfp
2018-02-11 23:46:56 +01:00
Paolo Teti
4e1ff92946 Set -mfloat-abi=hard not only for thumb targets 2018-02-11 21:23:59 +01:00
Paolo Teti
f70ccac08e Fix __subsf3 and __subdf3 on x86
Be sure to do not mix hard-float and soft-float calls.
Disassembled code show exactly this.
So replace add with an explicit call to __addsf3/__adddf3

This seems the root cause of some sporadic failures.
2018-02-09 20:35:55 +01:00
Paolo Teti
178b78b924 Fix issue extending f32::MIN/MAX to f64 and improve testcrate.
I was able to trigger an issue extending f32::MAX or f32::MIN to a f64.
Issue was not triggered by `testcrate` mainly because f32::MAX/MIN are
not in the list of special values to generate.

This PR fix the issue and improve `testcrate` adding MAX/MIN/MIN_POSITIVE
in the list of special values.
2018-02-09 17:23:16 +01:00
Paolo Teti
0af69177f9 Add generic conversion from a narrower to a wider FP type
Add `extend` module to implement conversion from a narrower to a wider
floating-point type.

This implementation is only intended to support *widening* operations.
Module to convert a *narrower* floating-point will be added in the future.
2018-02-08 18:20:45 +01:00
Paolo Teti
97e6b3712a Add support for sub*f3vfp and add*f3vfp
As done before for mul and div let's use extern "C" to generate `"aapcs"`
or `"aapcs-vfp"` depending on target configuration.
2018-02-04 18:34:31 +01:00
Paolo Teti
07c82d2200 Fix __aeabi_fcmple and add test cases
`le` in __aeabi_fcmple means `less or equal`
2018-02-04 10:56:02 +01:00
Alex Crichton
41290fe728 Simplify how testing is done
All tests are moved to a separate crate in this repository to enable features by
default. Additionally the test generation is moved to a seprate build script and
simplified to reduce the amount of boilerplate needed per test.

Overall this should still be testing everything, just in a different location!
2018-01-31 11:32:20 -08:00
Alex Crichton
4d0ea26a26 Allow thumb failures
They've been broken for some time anyway
2018-01-31 07:26:44 -08:00
Paolo Teti
4c7de1e315 Fix build errors on arm*-linux-gnueabi
I removed std::mem, but We need it.
2018-01-30 23:10:56 +01:00
Paolo Teti
cc3ea0ab93 Add test cases for Mul[s/d]f3vfp and Div[s/d]f3vfp
for ARM targets only
2018-01-30 20:15:37 +01:00
Paolo Teti
2986291965 __[mul/div]sf3vfp and __[mul/div]df3vfp only on ARM 2018-01-30 18:48:20 +01:00
Paolo Teti
9a4e458b48 Add support for mul[s/d]f3vfp and div[s/d]f3vfp
Here using `"C"` the compiler will use `"aapcs"` or `"aapcs-vfp"`
depending on target configuration.

Of course this translates in a call to `__aeabi_fdiv` / `__aeabi_fmul`
on non-HF targets.

On `eabi` targets with +vfpv2/vfpv3 LLVM generate:

   vmov	s0, r1
   vmov	s2, r0
   vdiv.f32	s0, s2, s0
   vmov	r0, s0
   bx	lr

On `eabihf` targets with +vfpv3-d16/d32/f32 +fp-only-sp LLVM generate:

  vdiv.f32	s0, s0, s1
  bx	lr

That's exactly what We need for [div/mul][s/d]f3vfp.S
2018-01-29 20:49:55 +01:00
Alex Crichton
ffd4f4d43d Update to release_60 of LLVM's compiler-rt 2018-01-24 21:49:11 -08:00
Alex Crichton
b751493472 Fix some typos/bugs with float comparison intrinsics
* I believe `__gtdf2` erroneously used `f32` instead of `f64`
* Most of these needed `#[arm_aeabi_alias]` to ensure they're correctly called
  through the alias
* Some existing aliases were corrected with the right names
2018-01-24 17:01:04 -08:00
Paolo Teti
c68621f444 Fix build issue and comments
Fix an unclosed if block
2018-01-19 19:27:25 +01:00
Paolo Teti
2754f64c18 Skip aeabi_cdcmp and aeabi_cfcmp on big-endian targets
First of all aeabi_cdcmp and aeabi_cfcmp are never called LLVM.
Second are little-endian only, so build fail on big-endian targets.
Temporally workaround: exclude these files for big-endian targets.
2018-01-19 09:19:05 +01:00
whitequark
746c4717e1 comparesf2: do not build the assembly versions of intrinsics on ARM. 2018-01-12 21:33:24 +00:00
whitequark
566e7ede90 comparesf2/comparedf2: fix a signedness bug and add tests. 2017-12-29 07:58:34 +00:00
whitequark
45112fc65f README: update to explain how to run quickcheck-style tests. 2017-12-29 06:36:09 +00:00
whitequark
a0777758df comparesf2/comparedf2: do not build the C versions of intrinsics. 2017-12-29 06:16:35 +00:00
whitequark
fee371a365 comparesf2/comparedf2: use i32 instead of bool for return type.
Note that this changes semantics:
    pub extern "C" fn __eqsf2(a: f32, b: f32) -> bool {
        cmp(a, b).to_le_abi() != 0
    }

is not the same as

    pub extern "C" fn __eqsf2(a: f32, b: f32) -> i32 {
        cmp(a, b).to_le_abi()
    }

However, compiler-rt does the latter, so this is actually
an improvement.
2017-12-29 06:14:51 +00:00
whitequark
24175dd6ca Implement comparesf2/comparedf2 intrinsics. 2017-12-28 03:45:32 +00:00
whitequark
c329f6ef75 comparesf2/comparedf2 are called on soft-float targets.
E.g. take a look at the assembly output for:

  pub fn comparesf2(a: f32, b: f32) -> bool { a > b }
  pub fn comparedf2(a: f64, b: f64) -> bool { a > b }

which will include calls to __gtsf2 and __gtdf2.
2017-12-28 02:57:42 +00:00
bors
5634754f1e Auto merge of #220 - malbarbo:armv4t, r=alexcrichton
Use kernel user helpers for armv4t

Rename armv5te cfg to kernel_user_helpers and enable it for armv4t.
2017-12-26 20:21:11 +00:00
Alex Crichton
dbaa47027e Work around japaric/xargo#186 temporarily 2017-12-26 12:20:17 -08:00
Alex Crichton
4481a6c4ab Disable incremental + LTO
This causes errors in more recent versions of rustc
2017-12-26 10:14:11 -08:00
Marco A L Barbosa
90bd768b20 Use kernel user helpers for armv4t
Rename armv5te cfg to kernel_user_helpers and enable it for armv4t
2017-12-26 13:02:05 -02:00
Amanieu d'Antras
af91189aa7 Fix argument order for __sync_val_compare_and_swap 2017-12-23 08:45:25 +01:00
Amanieu d'Antras
dd2e94ae5b Replace inline asm with function calls in __kuser_cmpxchg and __kuser_memory_barrier 2017-12-20 01:57:05 +00:00
Alex Crichton
19a725d772 Fix nightly CI
Currently we're getting lots of errors about duplicate lang items so deal with
this by `#[cfg_attr]`'ing off the lang item attribute in tests.
2017-12-08 08:19:28 -08:00
bors
be3b817149 Auto merge of #212 - tamird:fomit-frame-pointer-not-supported-arm, r=alexcrichton
Avoid warning spew

...when the compiler doesn't support '-fomit-frame-pointer' on the
target architecture.
2017-11-28 17:31:37 +00:00
Tamir Duberstein
fe9bd52cc1
Avoid warning spew
...when the compiler doesn't support '-fomit-frame-pointer' on the
target architecture.
2017-11-27 17:41:54 -05:00