@@ -69,7 +69,7 @@ pub unsafe fn copy_forward(mut dest: *mut u8, mut src: *const u8, count: usize)
69
69
70
70
#[ inline( always) ]
71
71
pub unsafe fn copy_backward ( dest : * mut u8 , src : * const u8 , count : usize ) {
72
- let ( pre_byte_count, qword_count, byte_count) = rep_param_rev ( dest, count) ;
72
+ let ( pre_byte_count, qword_count, byte_count) = rep_param ( dest, count) ;
73
73
// We can't separate this block due to std/cld
74
74
asm ! (
75
75
"std" ,
@@ -80,12 +80,12 @@ pub unsafe fn copy_backward(dest: *mut u8, src: *const u8, count: usize) {
80
80
"rep movsq" ,
81
81
"add rsi, 7" ,
82
82
"add rdi, 7" ,
83
- "mov ecx, {byte_count :e}" ,
83
+ "mov ecx, {pre_byte_count :e}" ,
84
84
"rep movsb" ,
85
85
"cld" ,
86
- byte_count = in( reg) byte_count ,
86
+ pre_byte_count = in( reg) pre_byte_count ,
87
87
qword_count = in( reg) qword_count,
88
- inout( "ecx" ) pre_byte_count => _,
88
+ inout( "ecx" ) byte_count => _,
89
89
inout( "rdi" ) dest. add( count - 1 ) => _,
90
90
inout( "rsi" ) src. add( count - 1 ) => _,
91
91
// We modify flags, but we restore it afterwards
@@ -205,13 +205,3 @@ fn rep_param(dest: *mut u8, mut count: usize) -> (usize, usize, usize) {
205
205
let byte_count = count & 0b111 ;
206
206
( pre_byte_count, qword_count, byte_count)
207
207
}
208
-
209
- /// Determine optimal parameters for a reverse `rep` instruction (i.e. direction bit is set).
210
- fn rep_param_rev ( dest : * mut u8 , mut count : usize ) -> ( usize , usize , usize ) {
211
- // Unaligned writes are still slow on modern processors, so align the destination address.
212
- let pre_byte_count = ( ( dest as usize + count) & 0b111 ) . min ( count) ;
213
- count -= pre_byte_count;
214
- let qword_count = count >> 3 ;
215
- let byte_count = count & 0b111 ;
216
- ( pre_byte_count, qword_count, byte_count)
217
- }
0 commit comments