Commit Graph

547 Commits

Author SHA1 Message Date
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
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
Dan Gohman
a6ecd1a73f Add "volatile" and "memory" clobber to asm! that doesn't fall through.
Use the "volatile" option and the "memory" clobber on inline asm that does
things like return directly, to reduce the chances of compilers rearranging
the code.
2017-11-15 12:49:10 -08:00
Alex Crichton
93e3091ffc
Merge pull request #206 from aeleos/div
Implement divsf3 and divdf3
2017-11-14 13:58:07 +01:00
Oliver Geller
8bb30026c7 Implement divsf3 and divdf3 2017-11-13 20:22:27 -05:00
Alex Crichton
bb2c81b700
Merge pull request #205 from aeleos/master
Implement mulsf3 and muldf3
2017-11-14 00:41:18 +01:00
Oliver Geller
897048543f Implement mulsf3 and muldf3 2017-11-08 17:36:34 -05:00
Alex Crichton
1be2858df7
Merge pull request #203 from alexcrichton/wasm
Prepare this crate for more wasm32 compatibility
2017-11-03 00:45:26 -04:00
Alex Crichton
46fbf3a565 Work around OSX on Travis 2017-11-02 11:14:05 -07:00
Alex Crichton
45cd956acc Prepare this crate for more wasm32 compatibility
This commit prepares the build script for a wasm32 target that doesn't use
Emcripten, notably forcing the `mem` feature to get activated and forcibly
ignoring the `c` feature, even if activated, for the wasm32 target.
2017-11-01 19:29:41 -07:00
bors
2d414afec5 Auto merge of #200 - japaric:no-binfmt-misc, r=alexcrichton
drop binfmt_misc dependency

Instead use the Cargo runner feature. The binfmt_misc approach requires running a privileged
container for setup. Not all docker setups support privileged containers so the test suite should be
more accessible with this change as no privileged container is needed.

r? @alexcrichton
2017-10-08 02:02:35 +00:00
Jorge Aparicio
2446cc468f drop binfmt_misc dependency
Instead use the Cargo runner feature. The binfmt_misc approach requires running a privileged
container for setup. Not all docker setups support privileged containers so the test suite should be
more accessible with this change as no privileged container is needed.
2017-10-07 22:19:37 +02:00
bors
5b96befbc5 Auto merge of #115 - Amanieu:linux-arm-atomic, r=alexcrichton
Add atomic support for pre-ARMv6 on Linux

This uses the [kernel user helpers](https://www.kernel.org/doc/Documentation/arm/kernel_user_helpers.txt) which are available starting from kernel 2.6.15. Since Rust currently requires 2.6.18 at a minimum, this should be fine in practice. I did not include support for 64-bit atomics since that functionality is only available in kernel 3.1.

This PR allows Rust to work on older ARM versions such as ARMv4 and ARMv5 with the full libstd.
2017-10-06 23:08:42 +00:00
Amanieu d'Antras
73e38dcf2f Add atomic support for pre-ARMv6 on Linux 2017-10-05 12:44:12 +01:00
Alex Crichton
fe8d893a6b Update target specs 2017-10-03 02:28:49 -07:00