Skip to content

Commit 906b2bf

Browse files
committed
Auto merge of #174 - alexcrichton:less-compiler-rt, r=alexcrichton
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!
2 parents a6bbbea + 681aaa9 commit 906b2bf

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

build.rs

+13-4
Original file line numberDiff line numberDiff line change
@@ -4196,16 +4196,27 @@ mod c {
41964196
"arm/clzsi2.S",
41974197
"arm/comparesf2.S",
41984198
"arm/divmodsi4.S",
4199-
"arm/divsi3.S",
42004199
"arm/modsi3.S",
42014200
"arm/switch16.S",
42024201
"arm/switch32.S",
42034202
"arm/switch8.S",
42044203
"arm/switchu8.S",
42054204
"arm/sync_synchronize.S",
42064205
"arm/udivmodsi4.S",
4207-
"arm/udivsi3.S",
42084206
"arm/umodsi3.S",
4207+
4208+
// Exclude these two files for now even though we haven't
4209+
// translated their implementation into Rust yet (#173).
4210+
// They appear... buggy? The `udivsi3` implementation was
4211+
// the one that seemed buggy, but the `divsi3` file
4212+
// references a symbol from `udivsi3` so we compile them
4213+
// both with the Rust versions.
4214+
//
4215+
// Note that if these are added back they should be removed
4216+
// from thumbv6m below.
4217+
//
4218+
// "arm/divsi3.S",
4219+
// "arm/udivsi3.S",
42094220
],
42104221
);
42114222
}
@@ -4315,14 +4326,12 @@ mod c {
43154326
"clzsi2",
43164327
"comparesf2",
43174328
"divmodsi4",
4318-
"divsi3",
43194329
"modsi3",
43204330
"switch16",
43214331
"switch32",
43224332
"switch8",
43234333
"switchu8",
43244334
"udivmodsi4",
4325-
"udivsi3",
43264335
"umodsi3",
43274336
],
43284337
);

src/int/sdiv.rs

-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ impl Divmod for i32 {}
5757
impl Divmod for i64 {}
5858

5959
intrinsics! {
60-
#[use_c_shim_if(all(target_arch = "arm", not(target_os = "ios"), not(thumbv6m)))]
6160
#[arm_aeabi_alias = __aeabi_idiv]
6261
pub extern "C" fn __divsi3(a: i32, b: i32) -> i32 {
6362
a.div(b)

src/int/udiv.rs

-3
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,6 @@ macro_rules! udivmod_inner {
148148
}
149149

150150
intrinsics! {
151-
#[use_c_shim_if(all(target_arch = "arm",
152-
not(target_os = "ios"),
153-
not(thumbv6m)))]
154151
#[arm_aeabi_alias = __aeabi_uidiv]
155152
/// Returns `n / d`
156153
pub extern "C" fn __udivsi3(n: u32, d: u32) -> u32 {

0 commit comments

Comments
 (0)