Commit Graph

760 Commits

Author SHA1 Message Date
bors 2801c99793 Auto merge of #229 - paoloteti:extend, r=alexcrichton
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 21:55:46 +00:00
Paolo Teti 45f924ece5 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
bors 3e7fba7669 Auto merge of #228 - paoloteti:eabihf, r=alexcrichton
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-05 05:18:36 +00:00
Paolo Teti 13db8bf436 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
Alex Crichton 2d8f137801
Merge pull request #227 from paoloteti/softfloat
Fix __aeabi_fcmple and add test cases
2018-02-04 08:25:47 -06:00
Paolo Teti 73884ae671 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 1129b62ca2
Merge pull request #226 from alexcrichton/refactor-tests
Simplify how testing is done
2018-01-31 14:22:51 -06:00
Alex Crichton 2a13475197 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 032424971d Allow thumb failures
They've been broken for some time anyway
2018-01-31 07:26:44 -08:00
Alex Crichton 93977e65a0
Merge pull request #225 from paoloteti/armhf
Add support for mul[s/d]f3vfp and div[s/d]f3vfp
2018-01-31 09:25:51 -06:00
Paolo Teti 1269ad1438 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 9e04723812 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 f42b9e0bad __[mul/div]sf3vfp and __[mul/div]df3vfp only on ARM 2018-01-30 18:48:20 +01:00
Paolo Teti 8f018562ca 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 345447948f Update to release_60 of LLVM's compiler-rt 2018-01-24 21:49:11 -08:00
Alex Crichton 0a95675bab
Merge pull request #224 from alexcrichton/fix-float-cmp
Fix some typos/bugs with float comparison intrinsics
2018-01-24 20:26:10 -06:00
Alex Crichton 7d5fb94560 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
Alex Crichton 22f76e35fa
Merge pull request #223 from paoloteti/be
Skip aeabi_cdcmp and aeabi_cfcmp on big-endian targets
2018-01-19 13:58:10 -06:00
Paolo Teti 083f107c5e Fix build issue and comments
Fix an unclosed if block
2018-01-19 19:27:25 +01:00
Paolo Teti a75a49990c 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
Alex Crichton bf912e607e
Merge pull request #222 from whitequark/master
Implement comparesf2/comparedf2 intrinsics
2018-01-13 17:27:55 -06:00
whitequark 205322baf0 comparesf2: do not build the assembly versions of intrinsics on ARM. 2018-01-12 21:33:24 +00:00
whitequark 07b446a9ab comparesf2/comparedf2: fix a signedness bug and add tests. 2017-12-29 07:58:34 +00:00
whitequark 4cf6571362 README: update to explain how to run quickcheck-style tests. 2017-12-29 06:36:09 +00:00
whitequark 3d1600b654 comparesf2/comparedf2: do not build the C versions of intrinsics. 2017-12-29 06:16:35 +00:00
whitequark 6adcc9e9cb 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 f5d86476a8 Implement comparesf2/comparedf2 intrinsics. 2017-12-28 03:45:32 +00:00
whitequark 82ee1dd760 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 0ba07e4926 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 cc9a70f61c Work around japaric/xargo#186 temporarily 2017-12-26 12:20:17 -08:00
Alex Crichton a076c9aaa7 Disable incremental + LTO
This causes errors in more recent versions of rustc
2017-12-26 10:14:11 -08:00
Marco A L Barbosa f4edcf7b24 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
bors 3a9ba44406 Auto merge of #219 - Amanieu:sync_val_compare_and_swap, r=alexcrichton
Fix argument order for __sync_val_compare_and_swap

Fixes https://github.com/rust-lang/rust/issues/46822#issuecomment-353698138
2017-12-23 15:36:04 +00:00
Amanieu d'Antras e8ea848785 Fix argument order for __sync_val_compare_and_swap 2017-12-23 08:45:25 +01:00
bors 000d06a57a Auto merge of #218 - Amanieu:blx_fix, r=alexcrichton
Fix __kuser_cmpxchg inline asm

The wrong register was passed to BLX. However I just changed them to normal function calls to simplify things.
2017-12-20 06:04:26 +00:00
Amanieu d'Antras 0fe7c79389 Replace inline asm with function calls in __kuser_cmpxchg and __kuser_memory_barrier 2017-12-20 01:57:05 +00:00
bors 0633d73c55 Auto merge of #215 - alexcrichton:fix-ci, r=alexcrichton
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 16:20:20 +00:00
Alex Crichton a6f7dfd2fd 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 200c94eebf 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 55e57a3762
Avoid warning spew
...when the compiler doesn't support '-fomit-frame-pointer' on the
target architecture.
2017-11-27 17:41:54 -05:00
bors 18feaccbfd Auto merge of #211 - haellowyyn:fix-multi-definition-of-mulsf3, r=alexcrichton
Remove mulsf3.c and muldf3.c from compiler-rt.

mulsf3 and muldf3 have Rust implementations since 8970485. This PR removes the C implementations to avoid conflicts.

Without this I wasn't able to compile the crate with the "c" feature enabled, the errors being
`multiple definition of '__muldf3'` and `multiple definition of '__mulsf3'`.
2017-11-26 21:10:30 +00:00
Jan Teske 047406083a Remove mulsf3.c and muldf3.c from compiler-rt.
mulsf3 and muldf3 have Rust implementations since 8970485. Remove the
C implementations to avoid conflicts.
2017-11-26 21:53:57 +01:00
Alex Crichton 60d949ba1d
Merge pull request #210 from scottmcm/add-128bit-lang-items
Implement all the 128-bit operator lang items (Rust 45676 part 2)
2017-11-26 09:37:52 -06:00
Scott McMurray ba750103a3 Another attempt at making MIPS happy
(I really don't understand how arithmetic makes it segfault...)
2017-11-25 07:00:26 -08:00
Scott McMurray bcc41a9b8d Autogenerate the add/sub tests 2017-11-25 06:25:19 -08:00
Scott McMurray ed89a17f25 Make them all `pub` 2017-11-25 05:53:53 -08:00
Scott McMurray 665f268872 Tweak addo & subo to try and fix MIPS 2017-11-25 05:26:24 -08:00
Scott McMurray 5e71218390 Implement all the 128-bit operator lang items from rust PR 46093 2017-11-25 04:21:05 -08:00
Alex Crichton 02b3734a5b Remove divsf3.c from compiler-rt
We implement this now!
2017-11-19 09:08:27 -08:00
Alex Crichton f5532b22b5
Merge pull request #207 from sunfishcode/master
Add "volatile" and "memory" clobber to asm! that doesn't fall through.
2017-11-15 23:44:02 +01:00