diff --git a/Cargo.toml b/Cargo.toml index dfd1fde..48f6ee0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,5 +3,11 @@ authors = ["Jorge Aparicio "] name = "rustc_builtins" version = "0.1.0" +[dependencies] +rlibc = { git = "https://github.com/alexcrichton/rlibc", optional = true } + [dev-dependencies] quickcheck = "0.3.1" + +[features] +default = ["rlibc/weak"] diff --git a/src/lib.rs b/src/lib.rs index 2d1c839..7b621dd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -18,12 +18,13 @@ extern crate quickcheck; #[cfg(test)] extern crate core; +#[cfg(all(not(windows), not(target_os = "macos")))] +extern crate rlibc; + #[cfg(target_arch = "arm")] pub mod arm; pub mod udiv; -#[cfg(all(not(windows), not(target_os = "macos")))] -pub mod mem; pub mod mul; pub mod shift; diff --git a/src/mem.rs b/src/mem.rs deleted file mode 100644 index 7a94034..0000000 --- a/src/mem.rs +++ /dev/null @@ -1,60 +0,0 @@ -// NOTE Copied verbatim from the rlibc crate -// cf. https://crates.io/crates/rlibc - -#[linkage = "weak"] -#[no_mangle] -pub unsafe extern "C" fn memcpy(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 { - let mut i = 0; - while i < n { - *dest.offset(i as isize) = *src.offset(i as isize); - i += 1; - } - dest -} - -#[linkage = "weak"] -#[no_mangle] -pub unsafe extern "C" fn memmove(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 { - if src < dest as *const u8 { - // copy from end - let mut i = n; - while i != 0 { - i -= 1; - *dest.offset(i as isize) = *src.offset(i as isize); - } - } else { - // copy from beginning - let mut i = 0; - while i < n { - *dest.offset(i as isize) = *src.offset(i as isize); - i += 1; - } - } - dest -} - -#[linkage = "weak"] -#[no_mangle] -pub unsafe extern "C" fn memset(s: *mut u8, c: i32, n: usize) -> *mut u8 { - let mut i = 0; - while i < n { - *s.offset(i as isize) = c as u8; - i += 1; - } - s -} - -#[linkage = "weak"] -#[no_mangle] -pub unsafe extern "C" fn memcmp(s1: *const u8, s2: *const u8, n: usize) -> i32 { - let mut i = 0; - while i < n { - let a = *s1.offset(i as isize); - let b = *s2.offset(i as isize); - if a != b { - return a as i32 - b as i32; - } - i += 1; - } - 0 -}