diff --git a/src/externs.rs b/src/externs.rs index fd538a09a34611bf7e1fe323a1feddb444ca53d7..4968e3c9142abd23ed2ad14746d00a1fd1df8b5f 100644 --- a/src/externs.rs +++ b/src/externs.rs @@ -16,7 +16,8 @@ pub unsafe extern fn memcpy(dest: *mut u8, src: *const u8, let mut i: usize = 0; // Copy `WORD_SIZE` bytes at a time - while i < n_usize { + let n_fast = n_usize*WORD_SIZE; + while i < n_fast { *((dest as usize + i) as *mut usize) = *((src as usize + i) as *const usize); i += WORD_SIZE; @@ -64,7 +65,8 @@ pub unsafe extern fn memmove(dest: *mut u8, src: *const u8, let mut i: usize = 0; // Copy `WORD_SIZE` bytes at a time - while i < n_usize { + let n_fast = n_usize*WORD_SIZE; + while i < n_fast { *((dest as usize + i) as *mut usize) = *((src as usize + i) as *const usize); i += WORD_SIZE; @@ -94,7 +96,8 @@ pub unsafe extern fn memset(dest: *mut u8, c: i32, n: usize) -> *mut u8 { let mut i: usize = 0; // Set `WORD_SIZE` bytes at a time - while i < n_usize { + let n_fast = n_usize*WORD_SIZE; + while i < n_fast { *((dest as usize + i) as *mut usize) = c; i += WORD_SIZE; } @@ -121,7 +124,8 @@ pub unsafe extern fn memcmp(s1: *const u8, s2: *const u8, n: usize) -> i32 { let n_usize: usize = n/WORD_SIZE; let mut i: usize = 0; - while i < n_usize { + let n_fast = n_usize*WORD_SIZE; + while i < n_fast { let a = *((s1 as usize + i) as *const usize); let b = *((s2 as usize + i) as *const usize); if a != b {