Commit Graph

88 Commits (ec413b2b6727983b7707e7f32b22d4dd3cc5d9b6)

Author SHA1 Message Date
Sébastien Marie ffffe2ed64 openbsd: doesn't use `static` as it could result duplicated symbols 2018-07-16 06:17:38 +02:00
Sébastien Marie d8bbc81016 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 cb04a0718b
Merge pull request #234 from ketsuban/master
Add __floatdisf and __floatundisf intrinsics
2018-04-05 10:06:16 -05:00
Thomas Winwood e3dda36162
Remove reference to C impl of float[un]disf 2018-04-05 15:03:44 +01:00
Paolo Teti 463a127ea9 Remove ledf2vfp.S and lesf2vfp.S from build list 2018-02-25 19:49:31 +01:00
Paolo Teti 280012b1df 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
Paolo Teti e7bf03019c 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 e15ab79173 Set -mfloat-abi=hard not only for thumb targets 2018-02-11 21:23:59 +01: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
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 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
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 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 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
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
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 3d1600b654 comparesf2/comparedf2: do not build the C versions of intrinsics. 2017-12-29 06:16:35 +00: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 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
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
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
Alex Crichton 02b3734a5b Remove divsf3.c from compiler-rt
We implement this now!
2017-11-19 09:08:27 -08:00
Oliver Geller 8bb30026c7 Implement divsf3 and divdf3 2017-11-13 20:22:27 -05:00
Oliver Geller 897048543f Implement mulsf3 and muldf3 2017-11-08 17:36:34 -05: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
Amanieu d'Antras 73e38dcf2f Add atomic support for pre-ARMv6 on Linux 2017-10-05 12:44:12 +01:00
Alex Crichton 6cf8fe7932 Update to the `cc` dependency 2017-09-22 21:30:12 -07:00
Alex Crichton 1be538be1e Disable empty intrinsics on i686-apple-darwin
These all currently just produce empty object files
2017-09-17 15:25:34 -07:00
Matt Ickstadt b3679bcfba Implement x86 chkstk in "rust" 2017-09-15 18:04:59 -05:00
Tamir Duberstein a32e76eaea
Update rustbuild commentary
Also use `cfg!(feature = "rustbuild")` instead of the environment
variable to ease grep-ability.
2017-09-12 20:54:32 -04:00
est31 02ea9e5f54 Update the gcc crate to 0.3.53 and disable compilation warnings
They are inside the compiler-rt submodule, about which we don't have
direct control over.
2017-09-07 07:49:34 +02:00
Alex Crichton 91eaa85902 Don't mangle probes all the time 2017-07-07 20:35:14 -07:00
Alex Crichton a1700f9da9 Fix a typo in the build script 2017-07-03 15:28:03 -07:00
Alex Crichton 070990f10a Compile ffsdi2 with `rustbuild` feature
This is not used by LLVM/Rust, but is apparently used by gcc/C which jemalloc
can require at least.
2017-07-03 15:00:51 -07:00
Alex Crichton 681aaa914d Use the Rust implementation of udivsi3 on ARM
Although compiler-rt presumably has a more optimized implementation written in
assembly, it appears buggy for whatever reason, causing #173.

For now let's see if integration into rust-lang/rust will work with the
Rust-defined implementation!
2017-07-03 09:48:11 -07:00
Alex Crichton 4859aba5f4 Don't build gcc_personality_v0 2017-06-24 11:36:05 -07:00
Alex Crichton b42d267065 Don't compile assembly on x86_64 Windows
They've all got the wrong ABI...
2017-06-23 21:09:24 -07:00
Alex Crichton 94bc9953a1 Don't build chkstk on x86_64 2017-06-23 20:43:51 -07:00
Alex Crichton a839d53a02 Deal with floatdidf on x86_64
Apparently LLVM will lower this down to just an instruction
2017-06-23 13:28:24 -07:00
Alex Crichton ac3715de0f Remove defined intrinsics from build.rs
No need to load these from C!
2017-06-23 11:14:50 -07:00
est31 258feadae4 Build.rs: better debug output 2017-05-10 02:41:29 +02:00
est31 6047cdf1e8 floattidf, floatuntidf: ignore differences smaller than 2 in test
Its possible that the generated f64 is different from the expected one
by one bit. This is legal when both values are equally close to the i128/u128.
2017-05-08 01:26:30 +02:00
est31 191c0be298 Print generated files 2017-05-07 04:40:00 +02:00
est31 e24673b6c7 Fix test name gotten wrong 2017-05-06 15:47:38 +02:00
est31 b870667509 Adjust for changed cast function 2017-05-06 15:47:38 +02:00