@@ -96,6 +96,18 @@ fn memcmp_builtin(b: &mut Bencher, n: usize) {
96
96
} )
97
97
}
98
98
99
+ fn memcmp_builtin_unaligned ( b : & mut Bencher , n : usize ) {
100
+ let v1 = AlignedVec :: new ( 0 , n) ;
101
+ let mut v2 = AlignedVec :: new ( 0 , n) ;
102
+ v2[ n - 1 ] = 1 ;
103
+ b. bytes = n as u64 ;
104
+ b. iter ( || {
105
+ let s1: & [ u8 ] = black_box ( & v1[ 0 ..] ) ;
106
+ let s2: & [ u8 ] = black_box ( & v2[ 1 ..] ) ;
107
+ s1. cmp ( s2)
108
+ } )
109
+ }
110
+
99
111
fn memcmp_rust ( b : & mut Bencher , n : usize ) {
100
112
let v1 = AlignedVec :: new ( 0 , n) ;
101
113
let mut v2 = AlignedVec :: new ( 0 , n) ;
@@ -108,6 +120,18 @@ fn memcmp_rust(b: &mut Bencher, n: usize) {
108
120
} )
109
121
}
110
122
123
+ fn memcmp_rust_unaligned ( b : & mut Bencher , n : usize ) {
124
+ let v1 = AlignedVec :: new ( 0 , n) ;
125
+ let mut v2 = AlignedVec :: new ( 0 , n) ;
126
+ v2[ n - 1 ] = 1 ;
127
+ b. bytes = n as u64 ;
128
+ b. iter ( || {
129
+ let s1: & [ u8 ] = black_box ( & v1[ 0 ..] ) ;
130
+ let s2: & [ u8 ] = black_box ( & v2[ 1 ..] ) ;
131
+ unsafe { memcmp ( s1. as_ptr ( ) , s2. as_ptr ( ) , n - 1 ) }
132
+ } )
133
+ }
134
+
111
135
fn memmove_builtin ( b : & mut Bencher , n : usize , offset : usize ) {
112
136
let mut v = AlignedVec :: new ( 0 , n + n / 2 + offset) ;
113
137
b. bytes = n as u64 ;
@@ -209,6 +233,38 @@ fn memset_rust_1048576_offset(b: &mut Bencher) {
209
233
memset_rust ( b, 1048576 , 65 )
210
234
}
211
235
236
+ #[ bench]
237
+ fn memcmp_builtin_8 ( b : & mut Bencher ) {
238
+ memcmp_builtin ( b, 8 )
239
+ }
240
+ #[ bench]
241
+ fn memcmp_rust_8 ( b : & mut Bencher ) {
242
+ memcmp_rust ( b, 8 )
243
+ }
244
+ #[ bench]
245
+ fn memcmp_builtin_16 ( b : & mut Bencher ) {
246
+ memcmp_builtin ( b, 16 )
247
+ }
248
+ #[ bench]
249
+ fn memcmp_rust_16 ( b : & mut Bencher ) {
250
+ memcmp_rust ( b, 16 )
251
+ }
252
+ #[ bench]
253
+ fn memcmp_builtin_32 ( b : & mut Bencher ) {
254
+ memcmp_builtin ( b, 32 )
255
+ }
256
+ #[ bench]
257
+ fn memcmp_rust_32 ( b : & mut Bencher ) {
258
+ memcmp_rust ( b, 32 )
259
+ }
260
+ #[ bench]
261
+ fn memcmp_builtin_64 ( b : & mut Bencher ) {
262
+ memcmp_builtin ( b, 64 )
263
+ }
264
+ #[ bench]
265
+ fn memcmp_rust_64 ( b : & mut Bencher ) {
266
+ memcmp_rust ( b, 64 )
267
+ }
212
268
#[ bench]
213
269
fn memcmp_builtin_4096 ( b : & mut Bencher ) {
214
270
memcmp_builtin ( b, 4096 )
@@ -225,6 +281,54 @@ fn memcmp_builtin_1048576(b: &mut Bencher) {
225
281
fn memcmp_rust_1048576 ( b : & mut Bencher ) {
226
282
memcmp_rust ( b, 1048576 )
227
283
}
284
+ #[ bench]
285
+ fn memcmp_builtin_unaligned_7 ( b : & mut Bencher ) {
286
+ memcmp_builtin_unaligned ( b, 8 )
287
+ }
288
+ #[ bench]
289
+ fn memcmp_rust_unaligned_7 ( b : & mut Bencher ) {
290
+ memcmp_rust_unaligned ( b, 8 )
291
+ }
292
+ #[ bench]
293
+ fn memcmp_builtin_unaligned_15 ( b : & mut Bencher ) {
294
+ memcmp_builtin_unaligned ( b, 16 )
295
+ }
296
+ #[ bench]
297
+ fn memcmp_rust_unaligned_15 ( b : & mut Bencher ) {
298
+ memcmp_rust_unaligned ( b, 16 )
299
+ }
300
+ #[ bench]
301
+ fn memcmp_builtin_unaligned_31 ( b : & mut Bencher ) {
302
+ memcmp_builtin_unaligned ( b, 32 )
303
+ }
304
+ #[ bench]
305
+ fn memcmp_rust_unaligned_31 ( b : & mut Bencher ) {
306
+ memcmp_rust_unaligned ( b, 32 )
307
+ }
308
+ #[ bench]
309
+ fn memcmp_builtin_unaligned_63 ( b : & mut Bencher ) {
310
+ memcmp_builtin_unaligned ( b, 64 )
311
+ }
312
+ #[ bench]
313
+ fn memcmp_rust_unaligned_63 ( b : & mut Bencher ) {
314
+ memcmp_rust_unaligned ( b, 64 )
315
+ }
316
+ #[ bench]
317
+ fn memcmp_builtin_unaligned_4095 ( b : & mut Bencher ) {
318
+ memcmp_builtin_unaligned ( b, 4096 )
319
+ }
320
+ #[ bench]
321
+ fn memcmp_rust_unaligned_4095 ( b : & mut Bencher ) {
322
+ memcmp_rust_unaligned ( b, 4096 )
323
+ }
324
+ #[ bench]
325
+ fn memcmp_builtin_unaligned_1048575 ( b : & mut Bencher ) {
326
+ memcmp_builtin_unaligned ( b, 1048576 )
327
+ }
328
+ #[ bench]
329
+ fn memcmp_rust_unaligned_1048575 ( b : & mut Bencher ) {
330
+ memcmp_rust_unaligned ( b, 1048576 )
331
+ }
228
332
229
333
#[ bench]
230
334
fn memmove_builtin_4096 ( b : & mut Bencher ) {
0 commit comments