Commit Graph

70 Commits

Author SHA1 Message Date
bjorn3 783430e6ae Replace {u,i}128_* lang items with __rust_{u,i}128_* unmangled functions
The -Zlower-128bit-ops feature is completely broken, as libcore needs
those lang items to compile with this feature, but they are only
provided by compiler_builtins, which itself depends on libcore.
According to rust-lang/rust#58969 the feature never got finished.

This commit removes the associated lang items and replaces them with
normal unmangled functions, when there is no existing intrinsic. This
makes it easier for alternative codegen backends to implement 128bit
integer support.
2019-07-13 11:38:35 +02:00
Alex Crichton cf98161da7 Remove the need for #[cfg] in #[use_c_shim_if]
This commit tweaks the implementation of the synthetic
`#[use_c_shim_if]` attribute, renaming it to
`#[maybe_use_optimized_c_shim]` in the process. This no longer requires
specifying a `#[cfg]` clause indicating when the optimized intrinsic
should be used, but rather this is inferred and printed from the build
script.

The build script will now print out appropriate `#[cfg]` directives for
rustc to indicate what intrinsics it's compiling. This should remove the
need for us to keep the build script and the source in sync, but rather
the build script can simply take care of everything.
2019-05-15 12:59:31 -07:00
Alex Crichton c88c9502b7 Run rustfmt over everything 2019-05-14 14:40:38 -07:00
Alex Crichton 8521530f49 Fix __divsi3 and __udivsi3 on thumbv6m targets
This commit fixes a bug accidentally introduced in #285 where some
lingering references remained to `#[cfg(thumbv6m)]` but this, since the
historical revert, was renamed to `#[cfg(thumb_1)]`. This caused on the
thumbv6m platform for the intrinsics to be accidentally omitted because
the build script didn't actually compile them but the Rust code thought
the C code was in use.

After correcting the `#[cfg]` statements the CI configuration for the
`thumb*` family of targets was all updated. The support for xargo
testing was removed from `run.sh` since it had long since bitrotted, and
the script was updated to simply build the intrinsics example to attempt
to link for each of these targets. This in turn exposed the bug locally
and allowed to confirm a fix once the `#[cfg]` statements were
corrected.

cc rust-lang/rust#60782
2019-05-14 12:26:09 -07:00
Alex Crichton 4addb9bab9
Merge pull request #286 from alexcrichton/fix-dupe
Fix duplicate symbol __clzsi2
2019-05-02 17:17:52 -05:00
Alex Crichton 752e35a11f Fix duplicate symbol __clzsi2
Looks like our tests weren't quite testing compiler-builtins when it was
compiled with unmangled symbols, so update the tests to catch this and
then fix the compilation of the `__clzsi2` intrinsic to use the C
version if it's compiled.
2019-05-02 13:35:50 -07:00
Alex Crichton 4bbc838ac7 Revert "Use the Rust implementation of udivsi3 on ARM"
This reverts commit 681aaa914d.
2019-05-02 12:49:19 -07:00
Hugues de Valon c924aed0b9 Fix Armv8-M Baseline compilation
Armv8-M Baseline, ie thumbv8m.base-none-eabi, is a superset of the
Armv6-M architecture profile. As it shares almost the same instruction
set, this commit copies the configuration for thumbv6m-none-eabi to
enable it.
2019-03-14 12:58:23 +00:00
Lokathor 9a68e74ebd Attempt to use `intrinsics!` 2019-01-04 19:17:02 -07:00
Lokathor 4e3fc640df Move clzi2 into the int module 2018-12-21 18:02:12 -07:00
Jordan Rhee 78f544f57d Support windows/arm target 2018-09-06 09:27:24 -07: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
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
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
Oliver Geller 897048543f Implement mulsf3 and muldf3 2017-11-08 17:36:34 -05:00
est31 0cd476220b Remove duplication by adding a macro 2017-09-14 17:39:25 +02:00
est31 3efae7f7d9 Convert add! to a function 2017-09-14 17:33:44 +02:00
est31 482d98318f Convert int_to_float! to a function 2017-09-14 16:32:50 +02:00
est31 ff63f7b80f Convert float_to_int! into a function 2017-09-14 14:59:32 +02:00
est31 c9a261895e Refactor int builtins to use associated consts 2017-09-13 22:09:31 +02:00
Tim Neumann c138713df1 Avoid memcpy references in unoptimized code 2017-07-22 23:10:30 +02: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 2147753559 Remove usage of unwrap_or_else 2017-06-23 21:31:54 -07:00
Alex Crichton 7de57cd4f9 Handle aeabi aliasing
Objects in compiler-rt may have two symbols, so this makes sure that we don't
bring in those objects by accident by defining the aliases ourselves.
2017-06-23 15:55:11 -07:00
Alex Crichton a16ebb0dcb Use `nm` to weed out panics 2017-06-23 11:52:22 -07:00
Alex Crichton 83d63eaa9b Convert float intrinsics to the `intrinsics!` macro 2017-06-23 11:05:25 -07:00
Alex Crichton 47ff81325c Use more intrinsics on msvc 2017-06-23 07:53:34 -07:00
Alex Crichton d17042106f Port udiv to the `intrinsics!` macro 2017-06-22 23:23:36 -07:00
Alex Crichton 7886ae275b Port sdiv to traits + `intrinsics!`
Enhance `intrinsics!` along the way!
2017-06-22 23:09:28 -07:00
Alex Crichton 275d1032b5 Port mul intrinsics to traits
Also add a few features to the `intrinsics!` macro
2017-06-22 22:36:37 -07:00
Alex Crichton eeb44abacf Remove executable bit from mod.rs 2017-06-22 22:04:40 -07:00
Alex Crichton 2f2bb32e40 Use traits instead of macros for shift intrinsics
This is an attempt to tidy up the definition of intrinsics by making them more
rust-like at the definition site and using traits instead of macros for the
definition. Additionally the helper macro, `intrinsics!`, now fills in a
definition for #[cfg]'d off intrinsics when compiling with C code
2017-06-22 22:03:07 -07:00
est31 673a6f9948 Fix overflow bug when creating the absolute value
Previously, the tests failed on some platforms due to it.
2017-05-08 04:30:48 +02:00
Jorge Aparicio cc0d8ba2d1 remove the current test suite 2017-04-10 11:14:05 -05:00
bors 28ac4908f8 Auto merge of #147 - rust-lang-nursery:conv, r=japaric
Conversion from&to float<->integer

this is a rebased version of #139

cc @ithinuel
2017-04-08 15:20:35 +00:00
Jorge Aparicio 2faec6a4fb fix debug assertion in modsi3 / moddi3
fixes #151
this fix is very similar to #149
2017-03-13 20:40:44 -05:00
bors 9681358dc5 Auto merge of #149 - rust-lang-nursery:gh148, r=alexcrichton
fix debug assertion in divdi3

fixes #148

r? @alexcrichton
2017-03-07 00:38:33 +00:00
Jorge Aparicio c93b32b3e5 fix debug assertion in divdi3
fixes #148
2017-03-06 17:46:11 -05:00
Jorge Aparicio c6e06f4157 refactor 'impl Int' 2017-03-06 12:17:10 -05:00
Wilfried Chauveau 293fef5ebe impl (unsigned/signed) int to single/double precision float conversion based on llvm algorithms. 2017-03-06 11:55:57 -05:00
Jorge Aparicio 644a1c9ac9 fix infinite recursion in divmoddi4 / mulodi4
on ARMv7-M processors, divmoddi4 was calling mulodi4 and mulodi4 was calling
divmoddi4 leading to infinite recursion. This commit breaks the cycle by using
wrapping multiplication in divmoddi4.

fixes #145
2017-03-06 10:38:19 -05:00
Jorge Aparicio 47b45d1d62 adjust the check! macro to accept AAPCS intrinsics 2017-02-07 23:07:51 -05:00
Jorge Aparicio 57085be2ea ARM: keep some non-aeabi symbols around
- multi3: there's no aeabi equivalent
- divmod{s,d}i4: these are directly called by __aeabi_{l,i}divmod
- add{s,d}f3: required by the C sub{s,d}f3 implementation

but make sure they also use the AAPCS calling convention
2017-02-07 14:28:02 -05:00
Jorge Aparicio dfa7b161aa use AAPCS calling convention on all aeabi intrinsics
also, on ARM, inline(always) the actual implementation of the intrinsics so we
end with code like this:

```
00000000 <__aeabi_dadd>:
    (implementation here)
```

instead of "trampolines" like this:

```
00000000 <__aeabi_dadd>:
    (shuffle registers)
    (call __adddf3)

00000000 <__adddf3>:
    (implementation here)
```

closes #116
2017-02-07 09:41:26 -05:00
est31 37d349015e Disable quickcheck tests on mips
Two reasons:
    * the C versions __divti3 and __modti3 are apparently broken,
      at least when used in quickcheck. They change their own arguments.
    * compiler_rt's support for mips is disabled already on clang [1].
      Its desireable to support working "cargo test" on that compiler
      as well, and not greet the tester with linker errors.

[1]: http://llvm.org/viewvc/llvm-project?view=revision&revision=224488
2017-02-04 12:23:45 +01:00
est31 f8a4e3fd70 Panic when invalid overflow value is returned 2017-02-04 01:39:19 +01:00