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
est31
b91c39da73
Implement tests for floatuntidf and floatuntisf
2017-05-06 05:37:24 +02:00
est31
2d2bf21f73
Implement tests for fixunsdfti and fixunssfti
2017-05-06 05:37:24 +02:00
est31
d188d3dc12
Implement tests for fixdfti and fixsfti
2017-05-06 05:37:24 +02:00
est31
f9b5297ccc
Implement tests for floattidf and floattisf
2017-05-06 05:37:24 +02:00
Jorge Aparicio
63f91a0c31
Revert "i128 test: transmute intrinsic output before comparing"
...
This reverts commit 46085a2313
.
2017-04-11 15:03:21 -05:00
Jorge Aparicio
46085a2313
i128 test: transmute intrinsic output before comparing
...
on Windows, these intrinsics return a U64x2 type because of ABI requirements
2017-04-11 14:47:23 -05:00