@@ -96,6 +96,18 @@ fn memcmp_builtin(b: &mut Bencher, n: usize) {
9696 } )
9797}
9898
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+
99111fn memcmp_rust ( b : & mut Bencher , n : usize ) {
100112 let v1 = AlignedVec :: new ( 0 , n) ;
101113 let mut v2 = AlignedVec :: new ( 0 , n) ;
@@ -108,6 +120,18 @@ fn memcmp_rust(b: &mut Bencher, n: usize) {
108120 } )
109121}
110122
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+
111135fn memmove_builtin ( b : & mut Bencher , n : usize , offset : usize ) {
112136 let mut v = AlignedVec :: new ( 0 , n + n / 2 + offset) ;
113137 b. bytes = n as u64 ;
@@ -209,6 +233,38 @@ fn memset_rust_1048576_offset(b: &mut Bencher) {
209233 memset_rust ( b, 1048576 , 65 )
210234}
211235
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+ }
212268#[ bench]
213269fn memcmp_builtin_4096 ( b : & mut Bencher ) {
214270 memcmp_builtin ( b, 4096 )
@@ -225,6 +281,54 @@ fn memcmp_builtin_1048576(b: &mut Bencher) {
225281fn memcmp_rust_1048576 ( b : & mut Bencher ) {
226282 memcmp_rust ( b, 1048576 )
227283}
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+ }
228332
229333#[ bench]
230334fn memmove_builtin_4096 ( b : & mut Bencher ) {
0 commit comments