Skip to content

Commit f0bcaae

Browse files
committed
regularize the location and documentation of division functions
1 parent f3846bc commit f0bcaae

File tree

2 files changed

+33
-25
lines changed

2 files changed

+33
-25
lines changed

src/int/sdiv.rs

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -60,42 +60,52 @@ impl Divmod for i64 {}
6060
intrinsics! {
6161
#[maybe_use_optimized_c_shim]
6262
#[arm_aeabi_alias = __aeabi_idiv]
63+
/// Returns `n / d`
6364
pub extern "C" fn __divsi3(a: i32, b: i32) -> i32 {
6465
a.div(b)
6566
}
6667

6768
#[maybe_use_optimized_c_shim]
68-
pub extern "C" fn __divdi3(a: i64, b: i64) -> i64 {
69-
a.div(b)
69+
/// Returns `n % d`
70+
pub extern "C" fn __modsi3(a: i32, b: i32) -> i32 {
71+
a.mod_(b)
7072
}
71-
72-
#[win64_128bit_abi_hack]
73-
pub extern "C" fn __divti3(a: i128, b: i128) -> i128 {
74-
a.div(b)
73+
74+
#[maybe_use_optimized_c_shim]
75+
/// Returns `n / d` and sets `*rem = n % d`
76+
pub extern "C" fn __divmodsi4(a: i32, b: i32, rem: &mut i32) -> i32 {
77+
a.divmod(b, rem, |a, b| __divsi3(a, b))
7578
}
7679

7780
#[maybe_use_optimized_c_shim]
78-
pub extern "C" fn __modsi3(a: i32, b: i32) -> i32 {
79-
a.mod_(b)
81+
/// Returns `n / d`
82+
pub extern "C" fn __divdi3(a: i64, b: i64) -> i64 {
83+
a.div(b)
8084
}
8185

8286
#[maybe_use_optimized_c_shim]
87+
/// Returns `n % d`
8388
pub extern "C" fn __moddi3(a: i64, b: i64) -> i64 {
8489
a.mod_(b)
8590
}
8691

87-
#[win64_128bit_abi_hack]
88-
pub extern "C" fn __modti3(a: i128, b: i128) -> i128 {
89-
a.mod_(b)
92+
#[aapcs_on_arm]
93+
/// Returns `n / d` and sets `*rem = n % d`
94+
pub extern "C" fn __divmoddi4(a: i64, b: i64, rem: &mut i64) -> i64 {
95+
a.divmod(b, rem, |a, b| __divdi3(a, b))
9096
}
9197

92-
#[maybe_use_optimized_c_shim]
93-
pub extern "C" fn __divmodsi4(a: i32, b: i32, rem: &mut i32) -> i32 {
94-
a.divmod(b, rem, |a, b| __divsi3(a, b))
98+
#[win64_128bit_abi_hack]
99+
/// Returns `n / d`
100+
pub extern "C" fn __divti3(a: i128, b: i128) -> i128 {
101+
a.div(b)
95102
}
96103

97-
#[aapcs_on_arm]
98-
pub extern "C" fn __divmoddi4(a: i64, b: i64, rem: &mut i64) -> i64 {
99-
a.divmod(b, rem, |a, b| __divdi3(a, b))
104+
#[win64_128bit_abi_hack]
105+
/// Returns `n % d`
106+
pub extern "C" fn __modti3(a: i128, b: i128) -> i128 {
107+
a.mod_(b)
100108
}
109+
110+
// LLVM does not currently have a `__divmodti4` function
101111
}

src/int/udiv.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,11 @@ intrinsics! {
241241
rem
242242
}
243243

244+
/// Returns `n / d` and sets `*rem = n % d`
245+
pub extern "C" fn __udivmoddi4(n: u64, d: u64, rem: Option<&mut u64>) -> u64 {
246+
udivmod_inner!(n, d, rem, u64)
247+
}
248+
244249
#[win64_128bit_abi_hack]
245250
/// Returns `n / d`
246251
pub extern "C" fn __udivti3(n: u128, d: u128) -> u128 {
@@ -255,16 +260,9 @@ intrinsics! {
255260
rem
256261
}
257262

258-
/// Returns `n / d` and sets `*rem = n % d`
259-
pub extern "C" fn __udivmoddi4(n: u64, d: u64, rem: Option<&mut u64>) -> u64 {
260-
udivmod_inner!(n, d, rem, u64)
261-
}
262-
263263
#[win64_128bit_abi_hack]
264264
/// Returns `n / d` and sets `*rem = n % d`
265-
pub extern "C" fn __udivmodti4(n: u128,
266-
d: u128,
267-
rem: Option<&mut u128>) -> u128 {
265+
pub extern "C" fn __udivmodti4(n: u128, d: u128, rem: Option<&mut u128>) -> u128 {
268266
udivmod_inner!(n, d, rem, u128)
269267
}
270268
}

0 commit comments

Comments
 (0)