Commit Graph

461 Commits

Author SHA1 Message Date
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
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
Jan Teske
dd0be67665 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
Scott McMurray
f468c28f74 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
ba376a3912 Autogenerate the add/sub tests 2017-11-25 06:25:19 -08:00
Scott McMurray
51a0396d2a Make them all pub 2017-11-25 05:53:53 -08:00
Scott McMurray
a35d63583f Tweak addo & subo to try and fix MIPS 2017-11-25 05:26:24 -08:00
Scott McMurray
ff97668431 Implement all the 128-bit operator lang items from rust PR 46093 2017-11-25 04:21:05 -08:00
Alex Crichton
7115a910c8 Remove divsf3.c from compiler-rt
We implement this now!
2017-11-19 09:08:27 -08:00
Dan Gohman
3bd28c8b6d 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
Oliver Geller
99ea83e095 Implement divsf3 and divdf3 2017-11-13 20:22:27 -05:00
Oliver Geller
5923e278c3 Implement mulsf3 and muldf3 2017-11-08 17:36:34 -05:00
Alex Crichton
a46f33ce48 Work around OSX on Travis 2017-11-02 11:14:05 -07:00
Alex Crichton
4fc3de624a 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
Jorge Aparicio
0601024adf 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
Amanieu d'Antras
c95fefa9f6 Add atomic support for pre-ARMv6 on Linux 2017-10-05 12:44:12 +01:00
Alex Crichton
d43287ac57 Update target specs 2017-10-03 02:28:49 -07:00
est31
c582a5c118 Partially revert a272d753f5c75ab9acb7b282765a3c7517caac25
This partially reverts commit "Convert float_to_int! into a function"
2017-09-29 02:20:27 +02:00
est31
aef124cc75 Partially revert 482d98318fc1bfd003942c9de4ee1c7e8a0c45f0
This partially reverts "Convert int_to_float! to a function".
2017-09-29 02:19:40 +02:00
Alex Crichton
832c7758f9 Ignore failing test on mips 2017-09-22 21:31:27 -07:00
Alex Crichton
46dab7688f Update to the cc dependency 2017-09-22 21:30:12 -07:00
Alex Crichton
0a260ce265 Disable empty intrinsics on i686-apple-darwin
These all currently just produce empty object files
2017-09-17 15:25:34 -07:00
bors
c75798725a Auto merge of #194 - mattico:i386, r=alexcrichton
Implement x86 chkstk in "rust"

cc #183

Basically the same as the x86_64 ones, except `__alloca` doesn't need to fix the parameter register. I've manually verified that the disassembly is the same, and that these work in a compiled rust program.

The second commit disables compiling probestack functions for `feature = mangled-names`. They aren't needed during testing because they aren't comparison tested and the unmangled versions are the ones that actually get used.

r? @alexcrichton
2017-09-16 02:58:04 +00:00
Matt Ickstadt
81fe6a9654 Don't compile probestack functions during testing 2017-09-15 18:13:06 -05:00
Matt Ickstadt
1f98921e44 Implement x86 chkstk in "rust" 2017-09-15 18:04:59 -05:00
Alex Crichton
259327c25b Update MinGW download location 2017-09-15 15:59:15 -07:00
bors
215a08d624 Auto merge of #192 - est31:master, r=alexcrichton
Refactor float implementation

Refactors the float implementation. Fixes #169. Parts of the PR were inspired a previous PR by @mattico .
2017-09-14 17:27:43 +00:00
est31
5ce08df93e Remove duplication by adding a macro 2017-09-14 17:39:25 +02:00
est31
f2794913f3 Convert add! to a function 2017-09-14 17:33:44 +02:00
est31
13477e488f Convert int_to_float! to a function 2017-09-14 16:32:50 +02:00