Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions benches/formats/coco.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ pub enum C0C0 {
}

#[derive(FromBytes, KnownLayout, Immutable)]
#[repr(C, align(2))]
#[repr(C, align(4))]
pub struct Packet<Magic> {
magic_number: Magic,
milk: u8,
mug_size: u8,
temperature: u8,
marshmallows: [[u8; 2]],
temperature: [u8; 5],
marshmallows: [[u8; 3]],
}

/// A packet begining with the magic number `0xC0C0`.
Expand Down
23 changes: 23 additions & 0 deletions benches/formats/coco_no_padding.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
use zerocopy_derive::*;

// The only valid value of this type are the bytes `0xC0C0`.
#[derive(TryFromBytes, KnownLayout, Immutable)]
#[repr(u16)]
pub enum C0C0 {
_XC0C0 = 0xC0C0,
}

#[derive(FromBytes, KnownLayout, Immutable)]
#[repr(C, align(2))]
pub struct Packet<Magic> {
magic_number: Magic,
mug_size: u8,
temperature: u8,
marshmallows: [[u8; 2]],
}

/// A packet begining with the magic number `0xC0C0`.
pub type CocoPacket = Packet<C0C0>;

/// A packet beginning with any two initialized bytes.
pub type LocoPacket = Packet<[u8; 2]>;
36 changes: 19 additions & 17 deletions benches/ref_from_bytes.x86-64
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
bench_ref_from_bytes:
test dil, 3
jne .LBB5_3
movabs rax, 9223372036854775804
and rax, rsi
cmp rax, 9
jb .LBB5_3
add rax, -9
movabs rcx, -6148914691236517205
mul rcx
shr rdx
lea rax, [rdx + 2*rdx]
or rax, 3
add rax, 9
cmp rsi, rax
je .LBB5_4
.LBB5_3:
xor edi, edi
mov rdx, rsi
cmp rsi, 4
setb al
or al, dil
test al, 1
je .LBB5_2
xor eax, eax
ret
.LBB5_2:
lea rcx, [rdx - 4]
mov rsi, rcx
and rsi, -2
add rsi, 4
shr rcx
xor eax, eax
cmp rdx, rsi
cmove rdx, rcx
cmove rax, rdi
.LBB5_4:
mov rax, rdi
ret
78 changes: 40 additions & 38 deletions benches/ref_from_bytes.x86-64.mca
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
Iterations: 100
Instructions: 1800
Total Cycles: 704
Instructions: 1900
Total Cycles: 645
Total uOps: 2000

Dispatch Width: 4
uOps Per Cycle: 2.84
IPC: 2.56
uOps Per Cycle: 3.10
IPC: 2.95
Block RThroughput: 5.0


Expand All @@ -18,23 +18,24 @@ Instruction Info:
[6]: HasSideEffects (U)

[1] [2] [3] [4] [5] [6] Instructions:
1 1 0.33 test dil, 3
1 1 1.00 jne .LBB5_3
1 1 0.33 movabs rax, 9223372036854775804
1 1 0.33 and rax, rsi
1 1 0.33 cmp rax, 9
1 1 1.00 jb .LBB5_3
1 1 0.33 add rax, -9
1 1 0.33 movabs rcx, -6148914691236517205
2 4 1.00 mul rcx
1 1 0.50 shr rdx
1 1 0.50 lea rax, [rdx + 2*rdx]
1 1 0.33 or rax, 3
1 1 0.33 add rax, 9
1 1 0.33 cmp rsi, rax
1 1 1.00 je .LBB5_4
1 0 0.25 xor edi, edi
1 1 0.33 mov rdx, rsi
1 1 0.33 cmp rsi, 4
1 1 0.50 setb al
1 1 0.33 or al, dil
1 1 0.33 test al, 1
1 1 1.00 je .LBB5_2
1 0 0.25 xor eax, eax
1 1 1.00 U ret
1 1 0.50 lea rcx, [rdx - 4]
1 1 0.33 mov rsi, rcx
1 1 0.33 and rsi, -2
1 1 0.33 add rsi, 4
1 1 0.50 shr rcx
1 0 0.25 xor eax, eax
1 1 0.33 cmp rdx, rsi
2 2 0.67 cmove rdx, rcx
2 2 0.67 cmove rax, rdi
1 1 0.33 mov rax, rdi
1 1 1.00 U ret


Expand All @@ -51,25 +52,26 @@ Resources:

Resource pressure per iteration:
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
- - 5.97 5.98 - 6.05 - -
- - 6.32 6.33 - 6.35 - -

Resource pressure by instruction:
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
- - 0.97 0.01 - 0.02 - - mov rdx, rsi
- - 0.01 0.02 - 0.97 - - cmp rsi, 4
- - 0.03 - - 0.97 - - setb al
- - 0.01 0.02 - 0.97 - - or al, dil
- - - 0.98 - 0.02 - - test al, 1
- - - - - 1.00 - - je .LBB5_2
- - - - - - - - xor eax, eax
- - - - - 1.00 - - ret
- - 0.98 0.02 - - - - lea rcx, [rdx - 4]
- - 0.01 0.99 - - - - mov rsi, rcx
- - - 0.98 - 0.02 - - and rsi, -2
- - 0.98 0.01 - 0.01 - - add rsi, 4
- - 0.99 - - 0.01 - - shr rcx
- - - - - - - - xor eax, eax
- - 0.02 0.97 - 0.01 - - cmp rdx, rsi
- - 0.99 0.99 - 0.02 - - cmove rdx, rcx
- - 0.98 0.99 - 0.03 - - cmove rax, rdi
- - 0.64 0.35 - 0.01 - - test dil, 3
- - - - - 1.00 - - jne .LBB5_3
- - 0.34 0.65 - 0.01 - - movabs rax, 9223372036854775804
- - 0.35 0.65 - - - - and rax, rsi
- - 0.33 0.34 - 0.33 - - cmp rax, 9
- - - - - 1.00 - - jb .LBB5_3
- - 0.35 - - 0.65 - - add rax, -9
- - 0.97 0.01 - 0.02 - - movabs rcx, -6148914691236517205
- - 1.00 1.00 - - - - mul rcx
- - 0.99 - - 0.01 - - shr rdx
- - 0.33 0.67 - - - - lea rax, [rdx + 2*rdx]
- - 0.34 0.66 - - - - or rax, 3
- - 0.33 0.66 - 0.01 - - add rax, 9
- - 0.01 0.99 - - - - cmp rsi, rax
- - - - - 1.00 - - je .LBB5_4
- - - - - - - - xor edi, edi
- - 0.32 0.01 - 0.67 - - mov rdx, rsi
- - 0.02 0.34 - 0.64 - - mov rax, rdi
- - - - - 1.00 - - ret
38 changes: 26 additions & 12 deletions benches/ref_from_bytes_with_elems.x86-64
Original file line number Diff line number Diff line change
@@ -1,16 +1,30 @@
bench_ref_from_bytes_with_elems:
movabs rax, 9223372036854775805
mov rcx, rdx
mov edx, 3
mov rax, rcx
mul rdx
jo .LBB5_5
cmp rax, -10
ja .LBB5_5
mov edx, eax
not edx
and edx, 3
add rdx, rax
add rdx, 9
cmp rsi, rdx
jne .LBB5_5
mov r8d, edi
and r8d, 3
jne .LBB5_5
add rax, 9
cmp rdx, rax
seta cl
jb .LBB5_5
mov rax, rdi
or dil, cl
test dil, 1
jne .LBB5_2
lea rcx, [2*rdx + 4]
cmp rsi, rcx
je .LBB5_3
.LBB5_2:
xor eax, eax
mov rdx, rsi
.LBB5_3:
mov rdx, rcx
ret
.LBB5_5:
xor edi, edi
mov rcx, rsi
mov rax, rdi
mov rdx, rcx
ret
88 changes: 59 additions & 29 deletions benches/ref_from_bytes_with_elems.x86-64.mca
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
Iterations: 100
Instructions: 1300
Total Cycles: 439
Total uOps: 1400
Instructions: 2800
Total Cycles: 944
Total uOps: 2900

Dispatch Width: 4
uOps Per Cycle: 3.19
IPC: 2.96
Block RThroughput: 3.5
uOps Per Cycle: 3.07
IPC: 2.97
Block RThroughput: 7.3


Instruction Info:
Expand All @@ -18,18 +18,33 @@ Instruction Info:
[6]: HasSideEffects (U)

[1] [2] [3] [4] [5] [6] Instructions:
1 1 0.33 movabs rax, 9223372036854775805
1 1 0.33 mov rcx, rdx
1 1 0.33 mov edx, 3
1 1 0.33 mov rax, rcx
2 4 1.00 mul rdx
1 1 1.00 jo .LBB5_5
1 1 0.33 cmp rax, -10
1 1 1.00 ja .LBB5_5
1 1 0.33 mov edx, eax
1 1 0.33 not edx
1 1 0.33 and edx, 3
1 1 0.33 add rdx, rax
1 1 0.33 add rdx, 9
1 1 0.33 cmp rsi, rdx
1 1 1.00 jne .LBB5_5
1 1 0.33 mov r8d, edi
1 1 0.33 and r8d, 3
1 1 1.00 jne .LBB5_5
1 1 0.33 add rax, 9
1 1 0.33 cmp rdx, rax
2 2 1.00 seta cl
1 1 1.00 jb .LBB5_5
1 1 0.33 mov rax, rdi
1 1 0.33 or dil, cl
1 1 0.33 test dil, 1
1 1 1.00 jne .LBB5_2
1 1 0.50 lea rcx, [2*rdx + 4]
1 1 0.33 cmp rsi, rcx
1 1 1.00 je .LBB5_3
1 0 0.25 xor eax, eax
1 1 0.33 mov rdx, rsi
1 1 0.33 mov rdx, rcx
1 1 1.00 U ret
1 0 0.25 xor edi, edi
1 1 0.33 mov rcx, rsi
1 1 0.33 mov rax, rdi
1 1 0.33 mov rdx, rcx
1 1 1.00 U ret


Expand All @@ -46,20 +61,35 @@ Resources:

Resource pressure per iteration:
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
- - 4.32 4.33 - 4.35 - -
- - 9.32 9.32 - 9.36 - -

Resource pressure by instruction:
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
- - - 0.99 - 0.01 - - movabs rax, 9223372036854775805
- - 0.33 0.67 - - - - cmp rdx, rax
- - 1.98 - - 0.02 - - seta cl
- - 0.01 0.99 - - - - mov rax, rdi
- - 1.00 - - - - - or dil, cl
- - 0.99 0.01 - - - - test dil, 1
- - - - - 1.00 - - jne .LBB5_2
- - - 1.00 - - - - lea rcx, [2*rdx + 4]
- - 0.01 - - 0.99 - - cmp rsi, rcx
- - - - - 1.00 - - je .LBB5_3
- - - - - - - - xor eax, eax
- - - 0.67 - 0.33 - - mov rdx, rsi
- - 0.64 0.18 - 0.18 - - mov rcx, rdx
- - 0.17 0.83 - - - - mov edx, 3
- - 0.50 0.49 - 0.01 - - mov rax, rcx
- - 1.00 1.00 - - - - mul rdx
- - - - - 1.00 - - jo .LBB5_5
- - 0.82 0.18 - - - - cmp rax, -10
- - - - - 1.00 - - ja .LBB5_5
- - 0.02 0.98 - - - - mov edx, eax
- - 0.82 0.02 - 0.16 - - not edx
- - 0.82 0.17 - 0.01 - - and edx, 3
- - 0.99 - - 0.01 - - add rdx, rax
- - 0.98 0.01 - 0.01 - - add rdx, 9
- - 1.00 - - - - - cmp rsi, rdx
- - - - - 1.00 - - jne .LBB5_5
- - 0.16 0.83 - 0.01 - - mov r8d, edi
- - 0.17 0.17 - 0.66 - - and r8d, 3
- - - - - 1.00 - - jne .LBB5_5
- - 0.02 0.98 - - - - add rax, 9
- - - 0.17 - 0.83 - - cmp rdx, rax
- - - - - 1.00 - - jb .LBB5_5
- - 0.01 0.67 - 0.32 - - mov rax, rdi
- - 0.02 0.98 - - - - mov rdx, rcx
- - - - - 1.00 - - ret
- - - - - - - - xor edi, edi
- - 0.34 0.66 - - - - mov rcx, rsi
- - 0.34 0.50 - 0.16 - - mov rax, rdi
- - 0.50 0.50 - - - - mov rdx, rcx
- - - - - 1.00 - - ret
19 changes: 12 additions & 7 deletions benches/ref_from_prefix.x86-64
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
bench_ref_from_prefix:
xor edx, edx
mov eax, 0
test dil, 1
jne .LBB5_4
cmp rsi, 4
test dil, 3
je .LBB5_1
ret
.LBB5_1:
movabs rax, 9223372036854775804
and rsi, rax
cmp rsi, 9
jae .LBB5_3
mov edx, 1
xor eax, eax
ret
.LBB5_3:
add rsi, -4
shr rsi
mov rdx, rsi
add rsi, -9
movabs rcx, -6148914691236517205
mov rax, rsi
mul rcx
shr rdx
mov rax, rdi
.LBB5_4:
ret
Loading
Loading