diff --git a/src/arm.rs b/src/arm.rs index b46b0ea..17423cd 100644 --- a/src/arm.rs +++ b/src/arm.rs @@ -57,10 +57,15 @@ pub unsafe fn __aeabi_ldivmod() { intrinsics::unreachable(); } -// TODO: These two functions should be defined as aliases +// TODO: These aeabi_* functions should be defined as aliases #[cfg_attr(not(test), no_mangle)] -pub extern "C" fn __aeabi_uidiv(a: u32, b: u32) -> u32 { - ::int::udiv::__udivsi3(a, b) +pub extern "C" fn __aeabi_dadd(a: f64, b: f64) -> f64 { + ::float::add::__adddf3(a, b) +} + +#[cfg_attr(not(test), no_mangle)] +pub extern "C" fn __aeabi_fadd(a: f32, b: f32) -> f32 { + ::float::add::__addsf3(a, b) } #[cfg_attr(not(test), no_mangle)] @@ -68,6 +73,31 @@ pub extern "C" fn __aeabi_idiv(a: i32, b: i32) -> i32 { ::int::sdiv::__divsi3(a, b) } +#[cfg_attr(not(test), no_mangle)] +pub extern "C" fn __aeabi_lasr(a: i64, b: u32) -> i64 { + ::int::shift::__ashrdi3(a, b) +} + +#[cfg_attr(not(test), no_mangle)] +pub extern "C" fn __aeabi_llsl(a: u64, b: u32) -> u64 { + ::int::shift::__ashldi3(a, b) +} + +#[cfg_attr(not(test), no_mangle)] +pub extern "C" fn __aeabi_llsr(a: u64, b: u32) -> u64 { + ::int::shift::__lshrdi3(a, b) +} + +#[cfg_attr(not(test), no_mangle)] +pub extern "C" fn __aeabi_lmul(a: u64, b: u64) -> u64 { + ::int::mul::__muldi3(a, b) +} + +#[cfg_attr(not(test), no_mangle)] +pub extern "C" fn __aeabi_uidiv(a: u32, b: u32) -> u32 { + ::int::udiv::__udivsi3(a, b) +} + extern "C" { fn memcpy(dest: *mut u8, src: *const u8, n: usize) -> *mut u8; fn memmove(dest: *mut u8, src: *const u8, n: usize) -> *mut u8; diff --git a/src/float/add.rs b/src/float/add.rs index 3ebc92b..076a462 100644 --- a/src/float/add.rs +++ b/src/float/add.rs @@ -183,19 +183,6 @@ macro_rules! add { add!(__addsf3: f32); add!(__adddf3: f64); -// FIXME: Implement these using aliases -#[cfg(target_arch = "arm")] -#[cfg_attr(not(test), no_mangle)] -pub extern fn __aeabi_dadd(a: f64, b: f64) -> f64 { - __adddf3(a, b) -} - -#[cfg(target_arch = "arm")] -#[cfg_attr(not(test), no_mangle)] -pub extern fn __aeabi_fadd(a: f32, b: f32) -> f32 { - __addsf3(a, b) -} - #[cfg(test)] mod tests { use core::{f32, f64};