mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
rust: zerocopy: import crate
This is a subset of the Rust `zerocopy` crate, version v0.8.50 (released
2026-05-31), licensed under "BSD-2-Clause OR Apache-2.0 OR MIT", from:
https://github.com/google/zerocopy/tree/v0.8.50
The files are copied as-is, with no modifications whatsoever (not even
adding the SPDX identifiers).
The `benches` folder is added (i.e. not just `src` like in other cases)
since the files there are included in the rendered documentation,
as well as the `rustdoc` CSS style file that is needed to make those
visually more understandable.
For copyright details, please see:
https://github.com/google/zerocopy/blob/v0.8.50/README.md?plain=1
https://github.com/google/zerocopy/blob/v0.8.50/LICENSE-BSD
https://github.com/google/zerocopy/blob/v0.8.50/LICENSE-APACHE
https://github.com/google/zerocopy/blob/v0.8.50/LICENSE-MIT
The next two patches modify these files as needed for use within the
kernel. This patch split allows reviewers to double-check the import
and to clearly see the differences introduced.
The following script may be used to verify the contents:
for path in $(cd rust/zerocopy/ && find . -type f); do
curl --silent --show-error --location \
https://github.com/google/zerocopy/raw/v0.8.50/$path \
| diff --unified rust/zerocopy/$path - && echo $path: OK
done
Cc: Joshua Liebow-Feeser <joshlf@google.com>
Cc: Jack Wrenn <jswrenn@google.com>
Link: https://patch.msgid.link/20260608141439.182634-9-ojeda@kernel.org
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
9
rust/zerocopy/benches/as_bytes_dynamic_size.rs
Normal file
9
rust/zerocopy/benches/as_bytes_dynamic_size.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_as_bytes_dynamic_size(source: &format::CocoPacket) -> &[u8] {
|
||||
source.as_bytes()
|
||||
}
|
||||
5
rust/zerocopy/benches/as_bytes_dynamic_size.x86-64
Normal file
5
rust/zerocopy/benches/as_bytes_dynamic_size.x86-64
Normal file
@@ -0,0 +1,5 @@
|
||||
bench_as_bytes_dynamic_size:
|
||||
mov rax, rdi
|
||||
lea rdx, [2*rsi + 5]
|
||||
and rdx, -2
|
||||
ret
|
||||
47
rust/zerocopy/benches/as_bytes_dynamic_size.x86-64.mca
Normal file
47
rust/zerocopy/benches/as_bytes_dynamic_size.x86-64.mca
Normal file
@@ -0,0 +1,47 @@
|
||||
Iterations: 100
|
||||
Instructions: 400
|
||||
Total Cycles: 137
|
||||
Total uOps: 400
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 2.92
|
||||
IPC: 2.92
|
||||
Block RThroughput: 1.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 0.50 lea rdx, [2*rsi + 5]
|
||||
1 1 0.33 and rdx, -2
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 1.33 1.33 - 1.34 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - 0.66 - 0.34 - - mov rax, rdi
|
||||
- - 0.33 0.67 - - - - lea rdx, [2*rsi + 5]
|
||||
- - 1.00 - - - - - and rdx, -2
|
||||
- - - - - 1.00 - - ret
|
||||
9
rust/zerocopy/benches/as_bytes_static_size.rs
Normal file
9
rust/zerocopy/benches/as_bytes_static_size.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_as_bytes_static_size(source: &format::CocoPacket) -> &[u8] {
|
||||
source.as_bytes()
|
||||
}
|
||||
4
rust/zerocopy/benches/as_bytes_static_size.x86-64
Normal file
4
rust/zerocopy/benches/as_bytes_static_size.x86-64
Normal file
@@ -0,0 +1,4 @@
|
||||
bench_as_bytes_static_size:
|
||||
mov rax, rdi
|
||||
mov edx, 6
|
||||
ret
|
||||
45
rust/zerocopy/benches/as_bytes_static_size.x86-64.mca
Normal file
45
rust/zerocopy/benches/as_bytes_static_size.x86-64.mca
Normal file
@@ -0,0 +1,45 @@
|
||||
Iterations: 100
|
||||
Instructions: 300
|
||||
Total Cycles: 104
|
||||
Total uOps: 300
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 2.88
|
||||
IPC: 2.88
|
||||
Block RThroughput: 1.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 0.33 mov edx, 6
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 0.99 1.00 - 1.01 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.99 - - 0.01 - - mov rax, rdi
|
||||
- - - 1.00 - - - - mov edx, 6
|
||||
- - - - - 1.00 - - ret
|
||||
9
rust/zerocopy/benches/extend_vec_zeroed.rs
Normal file
9
rust/zerocopy/benches/extend_vec_zeroed.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_extend_vec_zeroed(v: &mut Vec<format::LocoPacket>, additional: usize) -> Option<()> {
|
||||
FromZeros::extend_vec_zeroed(v, additional).ok()
|
||||
}
|
||||
60
rust/zerocopy/benches/extend_vec_zeroed.x86-64
Normal file
60
rust/zerocopy/benches/extend_vec_zeroed.x86-64
Normal file
@@ -0,0 +1,60 @@
|
||||
bench_extend_vec_zeroed:
|
||||
push r15
|
||||
push r14
|
||||
push r13
|
||||
push r12
|
||||
push rbx
|
||||
sub rsp, 32
|
||||
mov rbx, rdi
|
||||
mov rax, qword ptr [rdi]
|
||||
mov r12, qword ptr [rdi + 16]
|
||||
mov rcx, rax
|
||||
sub rcx, r12
|
||||
cmp rsi, rcx
|
||||
jbe .LBB6_3
|
||||
mov r15, r12
|
||||
add r15, rsi
|
||||
jae .LBB6_6
|
||||
.LBB6_2:
|
||||
xor eax, eax
|
||||
jmp .LBB6_5
|
||||
.LBB6_3:
|
||||
mov rax, qword ptr [rbx + 8]
|
||||
lea r15, [r12 + rsi]
|
||||
.LBB6_4:
|
||||
lea rcx, [r12 + 2*r12]
|
||||
lea rdi, [rax + 2*rcx]
|
||||
add rsi, rsi
|
||||
lea rdx, [rsi + 2*rsi]
|
||||
xor esi, esi
|
||||
call qword ptr [rip + memset@GOTPCREL]
|
||||
mov qword ptr [rbx + 16], r15
|
||||
mov al, 1
|
||||
.LBB6_5:
|
||||
add rsp, 32
|
||||
pop rbx
|
||||
pop r12
|
||||
pop r13
|
||||
pop r14
|
||||
pop r15
|
||||
ret
|
||||
.LBB6_6:
|
||||
mov r13, rsi
|
||||
lea rcx, [rax + rax]
|
||||
cmp r15, rcx
|
||||
cmova rcx, r15
|
||||
cmp rcx, 5
|
||||
mov r14d, 4
|
||||
cmovae r14, rcx
|
||||
mov rdx, qword ptr [rbx + 8]
|
||||
lea rdi, [rsp + 8]
|
||||
mov rsi, rax
|
||||
mov rcx, r14
|
||||
call <alloc::raw_vec::RawVecInner>::finish_grow
|
||||
cmp dword ptr [rsp + 8], 1
|
||||
je .LBB6_2
|
||||
mov rax, qword ptr [rsp + 16]
|
||||
mov qword ptr [rbx + 8], rax
|
||||
mov qword ptr [rbx], r14
|
||||
mov rsi, r13
|
||||
jmp .LBB6_4
|
||||
147
rust/zerocopy/benches/extend_vec_zeroed.x86-64.mca
Normal file
147
rust/zerocopy/benches/extend_vec_zeroed.x86-64.mca
Normal file
@@ -0,0 +1,147 @@
|
||||
Iterations: 100
|
||||
Instructions: 5400
|
||||
Total Cycles: 6595
|
||||
Total uOps: 6800
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 1.03
|
||||
IPC: 0.82
|
||||
Block RThroughput: 17.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
2 5 1.00 * push r15
|
||||
2 5 1.00 * push r14
|
||||
2 5 1.00 * push r13
|
||||
2 5 1.00 * push r12
|
||||
2 5 1.00 * push rbx
|
||||
1 1 0.33 sub rsp, 32
|
||||
1 1 0.33 mov rbx, rdi
|
||||
1 5 0.50 * mov rax, qword ptr [rdi]
|
||||
1 5 0.50 * mov r12, qword ptr [rdi + 16]
|
||||
1 1 0.33 mov rcx, rax
|
||||
1 1 0.33 sub rcx, r12
|
||||
1 1 0.33 cmp rsi, rcx
|
||||
1 1 1.00 jbe .LBB6_3
|
||||
1 1 0.33 mov r15, r12
|
||||
1 1 0.33 add r15, rsi
|
||||
1 1 1.00 jae .LBB6_6
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 1.00 jmp .LBB6_5
|
||||
1 5 0.50 * mov rax, qword ptr [rbx + 8]
|
||||
1 1 0.50 lea r15, [r12 + rsi]
|
||||
1 1 0.50 lea rcx, [r12 + 2*r12]
|
||||
1 1 0.50 lea rdi, [rax + 2*rcx]
|
||||
1 1 0.33 add rsi, rsi
|
||||
1 1 0.50 lea rdx, [rsi + 2*rsi]
|
||||
1 0 0.25 xor esi, esi
|
||||
4 7 1.00 * call qword ptr [rip + memset@GOTPCREL]
|
||||
1 1 1.00 * mov qword ptr [rbx + 16], r15
|
||||
1 1 0.33 mov al, 1
|
||||
1 1 0.33 add rsp, 32
|
||||
1 6 0.50 * pop rbx
|
||||
1 6 0.50 * pop r12
|
||||
1 6 0.50 * pop r13
|
||||
1 6 0.50 * pop r14
|
||||
1 6 0.50 * pop r15
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 mov r13, rsi
|
||||
1 1 0.50 lea rcx, [rax + rax]
|
||||
1 1 0.33 cmp r15, rcx
|
||||
3 3 1.00 cmova rcx, r15
|
||||
1 1 0.33 cmp rcx, 5
|
||||
1 1 0.33 mov r14d, 4
|
||||
2 2 0.67 cmovae r14, rcx
|
||||
1 5 0.50 * mov rdx, qword ptr [rbx + 8]
|
||||
1 1 0.50 lea rdi, [rsp + 8]
|
||||
1 1 0.33 mov rsi, rax
|
||||
1 1 0.33 mov rcx, r14
|
||||
3 5 1.00 call <alloc::raw_vec::RawVecInner>::finish_grow
|
||||
2 6 0.50 * cmp dword ptr [rsp + 8], 1
|
||||
1 1 1.00 je .LBB6_2
|
||||
1 5 0.50 * mov rax, qword ptr [rsp + 16]
|
||||
1 1 1.00 * mov qword ptr [rbx + 8], rax
|
||||
1 1 1.00 * mov qword ptr [rbx], r14
|
||||
1 1 0.33 mov rsi, r13
|
||||
1 1 1.00 jmp .LBB6_4
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 12.00 12.00 10.00 13.00 11.00 11.00
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - - 1.00 - 0.49 0.51 push r15
|
||||
- - - - 1.00 - 0.51 0.49 push r14
|
||||
- - - - 1.00 - 0.50 0.50 push r13
|
||||
- - - - 1.00 - 0.50 0.50 push r12
|
||||
- - - - 1.00 - 0.50 0.50 push rbx
|
||||
- - 0.01 0.99 - - - - sub rsp, 32
|
||||
- - - - - 1.00 - - mov rbx, rdi
|
||||
- - - - - - 0.50 0.50 mov rax, qword ptr [rdi]
|
||||
- - - - - - 0.50 0.50 mov r12, qword ptr [rdi + 16]
|
||||
- - - 1.00 - - - - mov rcx, rax
|
||||
- - - 0.99 - 0.01 - - sub rcx, r12
|
||||
- - - - - 1.00 - - cmp rsi, rcx
|
||||
- - - - - 1.00 - - jbe .LBB6_3
|
||||
- - 0.01 0.98 - 0.01 - - mov r15, r12
|
||||
- - 0.99 0.01 - - - - add r15, rsi
|
||||
- - - - - 1.00 - - jae .LBB6_6
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - - - 1.00 - - jmp .LBB6_5
|
||||
- - - - - - 0.50 0.50 mov rax, qword ptr [rbx + 8]
|
||||
- - 1.00 - - - - - lea r15, [r12 + rsi]
|
||||
- - 0.98 0.02 - - - - lea rcx, [r12 + 2*r12]
|
||||
- - 0.99 0.01 - - - - lea rdi, [rax + 2*rcx]
|
||||
- - - 1.00 - - - - add rsi, rsi
|
||||
- - 0.99 0.01 - - - - lea rdx, [rsi + 2*rsi]
|
||||
- - - - - - - - xor esi, esi
|
||||
- - - - 1.00 1.00 1.00 1.00 call qword ptr [rip + memset@GOTPCREL]
|
||||
- - - - 1.00 - 0.50 0.50 mov qword ptr [rbx + 16], r15
|
||||
- - 0.01 0.99 - - - - mov al, 1
|
||||
- - 1.00 - - - - - add rsp, 32
|
||||
- - - - - - 0.50 0.50 pop rbx
|
||||
- - - - - - 0.50 0.50 pop r12
|
||||
- - - - - - 0.50 0.50 pop r13
|
||||
- - - - - - 0.50 0.50 pop r14
|
||||
- - - - - - 0.50 0.50 pop r15
|
||||
- - - - - 1.00 - - ret
|
||||
- - 1.00 - - - - - mov r13, rsi
|
||||
- - 0.01 0.99 - - - - lea rcx, [rax + rax]
|
||||
- - 0.99 0.01 - - - - cmp r15, rcx
|
||||
- - 2.00 0.01 - 0.99 - - cmova rcx, r15
|
||||
- - 0.01 0.99 - - - - cmp rcx, 5
|
||||
- - 0.01 0.99 - - - - mov r14d, 4
|
||||
- - 1.00 0.01 - 0.99 - - cmovae r14, rcx
|
||||
- - - - - - 0.50 0.50 mov rdx, qword ptr [rbx + 8]
|
||||
- - 0.01 0.99 - - - - lea rdi, [rsp + 8]
|
||||
- - - 1.00 - - - - mov rsi, rax
|
||||
- - - 0.01 - 0.99 - - mov rcx, r14
|
||||
- - - - 1.00 1.00 0.50 0.50 call <alloc::raw_vec::RawVecInner>::finish_grow
|
||||
- - - 0.99 - 0.01 0.50 0.50 cmp dword ptr [rsp + 8], 1
|
||||
- - - - - 1.00 - - je .LBB6_2
|
||||
- - - - - - 0.50 0.50 mov rax, qword ptr [rsp + 16]
|
||||
- - - - 1.00 - 0.49 0.51 mov qword ptr [rbx + 8], rax
|
||||
- - - - 1.00 - 0.51 0.49 mov qword ptr [rbx], r14
|
||||
- - 0.99 0.01 - - - - mov rsi, r13
|
||||
- - - - - 1.00 - - jmp .LBB6_4
|
||||
24
rust/zerocopy/benches/formats/coco_dynamic_padding.rs
Normal file
24
rust/zerocopy/benches/formats/coco_dynamic_padding.rs
Normal file
@@ -0,0 +1,24 @@
|
||||
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, SplitAt)]
|
||||
#[repr(C, align(4))]
|
||||
pub struct Packet<Magic> {
|
||||
magic_number: Magic,
|
||||
milk: u8,
|
||||
mug_size: u8,
|
||||
temperature: [u8; 5],
|
||||
marshmallows: [[u8; 3]],
|
||||
}
|
||||
|
||||
/// 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]>;
|
||||
27
rust/zerocopy/benches/formats/coco_dynamic_size.rs
Normal file
27
rust/zerocopy/benches/formats/coco_dynamic_size.rs
Normal file
@@ -0,0 +1,27 @@
|
||||
use zerocopy_derive::*;
|
||||
|
||||
// The only valid value of this type are the bytes `0xC0C0`.
|
||||
#[derive(TryFromBytes, KnownLayout, Immutable, IntoBytes)]
|
||||
#[repr(u16)]
|
||||
pub enum C0C0 {
|
||||
_XC0C0 = 0xC0C0,
|
||||
}
|
||||
|
||||
macro_rules! define_packet {
|
||||
($name: ident, $trait: ident, $leading_field: ty) => {
|
||||
#[derive($trait, KnownLayout, Immutable, IntoBytes, SplitAt)]
|
||||
#[repr(C, align(2))]
|
||||
pub struct $name {
|
||||
magic_number: $leading_field,
|
||||
mug_size: u8,
|
||||
temperature: u8,
|
||||
marshmallows: [[u8; 2]],
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// Packet begins with bytes 0xC0C0.
|
||||
define_packet!(CocoPacket, TryFromBytes, C0C0);
|
||||
|
||||
/// Packet begins with any two bytes.
|
||||
define_packet!(LocoPacket, FromBytes, [u8; 2]);
|
||||
27
rust/zerocopy/benches/formats/coco_static_size.rs
Normal file
27
rust/zerocopy/benches/formats/coco_static_size.rs
Normal file
@@ -0,0 +1,27 @@
|
||||
use zerocopy_derive::*;
|
||||
|
||||
// The only valid value of this type are the bytes `0xC0C0`.
|
||||
#[derive(TryFromBytes, KnownLayout, Immutable, IntoBytes)]
|
||||
#[repr(u16)]
|
||||
pub enum C0C0 {
|
||||
_XC0C0 = 0xC0C0,
|
||||
}
|
||||
|
||||
macro_rules! define_packet {
|
||||
($name: ident, $trait: ident, $leading_field: ty) => {
|
||||
#[derive($trait, KnownLayout, Immutable, IntoBytes)]
|
||||
#[repr(C, align(2))]
|
||||
pub struct $name {
|
||||
magic_number: $leading_field,
|
||||
mug_size: u8,
|
||||
temperature: u8,
|
||||
marshmallows: [u8; 2],
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// Packet begins with bytes 0xC0C0.
|
||||
define_packet!(CocoPacket, TryFromBytes, C0C0);
|
||||
|
||||
/// Packet begins with any two bytes.
|
||||
define_packet!(LocoPacket, FromBytes, [u8; 2]);
|
||||
13
rust/zerocopy/benches/insert_vec_zeroed.rs
Normal file
13
rust/zerocopy/benches/insert_vec_zeroed.rs
Normal file
@@ -0,0 +1,13 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_insert_vec_zeroed(
|
||||
v: &mut Vec<format::LocoPacket>,
|
||||
position: usize,
|
||||
additional: usize,
|
||||
) -> Option<()> {
|
||||
FromZeros::insert_vec_zeroed(v, position, additional).ok()
|
||||
}
|
||||
79
rust/zerocopy/benches/insert_vec_zeroed.x86-64
Normal file
79
rust/zerocopy/benches/insert_vec_zeroed.x86-64
Normal file
@@ -0,0 +1,79 @@
|
||||
bench_insert_vec_zeroed:
|
||||
push rbp
|
||||
push r15
|
||||
push r14
|
||||
push r13
|
||||
push r12
|
||||
push rbx
|
||||
sub rsp, 24
|
||||
mov r12, qword ptr [rdi + 16]
|
||||
mov r13, r12
|
||||
sub r13, rsi
|
||||
jb .LBB6_10
|
||||
mov rbx, rdi
|
||||
mov rax, qword ptr [rdi]
|
||||
mov rcx, rax
|
||||
sub rcx, r12
|
||||
cmp rdx, rcx
|
||||
jbe .LBB6_4
|
||||
add r12, rdx
|
||||
jae .LBB6_7
|
||||
.LBB6_3:
|
||||
xor eax, eax
|
||||
jmp .LBB6_6
|
||||
.LBB6_4:
|
||||
mov rax, qword ptr [rbx + 8]
|
||||
add r12, rdx
|
||||
.LBB6_5:
|
||||
lea rcx, [rsi + 2*rsi]
|
||||
lea r14, [rax + 2*rcx]
|
||||
add rdx, rdx
|
||||
lea r15, [rdx + 2*rdx]
|
||||
lea rdi, [r14 + r15]
|
||||
add r13, r13
|
||||
lea rdx, [2*r13]
|
||||
add rdx, r13
|
||||
mov rsi, r14
|
||||
call qword ptr [rip + memmove@GOTPCREL]
|
||||
mov rdi, r14
|
||||
xor esi, esi
|
||||
mov rdx, r15
|
||||
call qword ptr [rip + memset@GOTPCREL]
|
||||
mov qword ptr [rbx + 16], r12
|
||||
mov al, 1
|
||||
.LBB6_6:
|
||||
add rsp, 24
|
||||
pop rbx
|
||||
pop r12
|
||||
pop r13
|
||||
pop r14
|
||||
pop r15
|
||||
pop rbp
|
||||
ret
|
||||
.LBB6_7:
|
||||
mov r15, rsi
|
||||
mov rbp, rdx
|
||||
lea rcx, [rax + rax]
|
||||
cmp r12, rcx
|
||||
cmova rcx, r12
|
||||
cmp rcx, 5
|
||||
mov r14d, 4
|
||||
cmovae r14, rcx
|
||||
mov rdx, qword ptr [rbx + 8]
|
||||
mov rdi, rsp
|
||||
mov rsi, rax
|
||||
mov rcx, r14
|
||||
call <alloc::raw_vec::RawVecInner>::finish_grow
|
||||
cmp dword ptr [rsp], 1
|
||||
je .LBB6_3
|
||||
mov rax, qword ptr [rsp + 8]
|
||||
mov qword ptr [rbx + 8], rax
|
||||
mov qword ptr [rbx], r14
|
||||
mov rdx, rbp
|
||||
mov rsi, r15
|
||||
jmp .LBB6_5
|
||||
.LBB6_10:
|
||||
lea rdi, [rip + .Lanon.HASH.1]
|
||||
lea rdx, [rip + .Lanon.HASH.3]
|
||||
mov esi, 37
|
||||
call qword ptr [rip + core::panicking::panic@GOTPCREL]
|
||||
183
rust/zerocopy/benches/insert_vec_zeroed.x86-64.mca
Normal file
183
rust/zerocopy/benches/insert_vec_zeroed.x86-64.mca
Normal file
@@ -0,0 +1,183 @@
|
||||
Iterations: 100
|
||||
Instructions: 7200
|
||||
Total Cycles: 7648
|
||||
Total uOps: 9300
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 1.22
|
||||
IPC: 0.94
|
||||
Block RThroughput: 23.3
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
2 5 1.00 * push rbp
|
||||
2 5 1.00 * push r15
|
||||
2 5 1.00 * push r14
|
||||
2 5 1.00 * push r13
|
||||
2 5 1.00 * push r12
|
||||
2 5 1.00 * push rbx
|
||||
1 1 0.33 sub rsp, 24
|
||||
1 5 0.50 * mov r12, qword ptr [rdi + 16]
|
||||
1 1 0.33 mov r13, r12
|
||||
1 1 0.33 sub r13, rsi
|
||||
1 1 1.00 jb .LBB6_10
|
||||
1 1 0.33 mov rbx, rdi
|
||||
1 5 0.50 * mov rax, qword ptr [rdi]
|
||||
1 1 0.33 mov rcx, rax
|
||||
1 1 0.33 sub rcx, r12
|
||||
1 1 0.33 cmp rdx, rcx
|
||||
1 1 1.00 jbe .LBB6_4
|
||||
1 1 0.33 add r12, rdx
|
||||
1 1 1.00 jae .LBB6_7
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 1.00 jmp .LBB6_6
|
||||
1 5 0.50 * mov rax, qword ptr [rbx + 8]
|
||||
1 1 0.33 add r12, rdx
|
||||
1 1 0.50 lea rcx, [rsi + 2*rsi]
|
||||
1 1 0.50 lea r14, [rax + 2*rcx]
|
||||
1 1 0.33 add rdx, rdx
|
||||
1 1 0.50 lea r15, [rdx + 2*rdx]
|
||||
1 1 0.50 lea rdi, [r14 + r15]
|
||||
1 1 0.33 add r13, r13
|
||||
1 1 0.50 lea rdx, [2*r13]
|
||||
1 1 0.33 add rdx, r13
|
||||
1 1 0.33 mov rsi, r14
|
||||
4 7 1.00 * call qword ptr [rip + memmove@GOTPCREL]
|
||||
1 1 0.33 mov rdi, r14
|
||||
1 0 0.25 xor esi, esi
|
||||
1 1 0.33 mov rdx, r15
|
||||
4 7 1.00 * call qword ptr [rip + memset@GOTPCREL]
|
||||
1 1 1.00 * mov qword ptr [rbx + 16], r12
|
||||
1 1 0.33 mov al, 1
|
||||
1 1 0.33 add rsp, 24
|
||||
1 6 0.50 * pop rbx
|
||||
1 6 0.50 * pop r12
|
||||
1 6 0.50 * pop r13
|
||||
1 6 0.50 * pop r14
|
||||
1 6 0.50 * pop r15
|
||||
1 6 0.50 * pop rbp
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 mov r15, rsi
|
||||
1 1 0.33 mov rbp, rdx
|
||||
1 1 0.50 lea rcx, [rax + rax]
|
||||
1 1 0.33 cmp r12, rcx
|
||||
3 3 1.00 cmova rcx, r12
|
||||
1 1 0.33 cmp rcx, 5
|
||||
1 1 0.33 mov r14d, 4
|
||||
2 2 0.67 cmovae r14, rcx
|
||||
1 5 0.50 * mov rdx, qword ptr [rbx + 8]
|
||||
1 1 0.33 mov rdi, rsp
|
||||
1 1 0.33 mov rsi, rax
|
||||
1 1 0.33 mov rcx, r14
|
||||
3 5 1.00 call <alloc::raw_vec::RawVecInner>::finish_grow
|
||||
2 6 0.50 * cmp dword ptr [rsp], 1
|
||||
1 1 1.00 je .LBB6_3
|
||||
1 5 0.50 * mov rax, qword ptr [rsp + 8]
|
||||
1 1 1.00 * mov qword ptr [rbx + 8], rax
|
||||
1 1 1.00 * mov qword ptr [rbx], r14
|
||||
1 1 0.33 mov rdx, rbp
|
||||
1 1 0.33 mov rsi, r15
|
||||
1 1 1.00 jmp .LBB6_5
|
||||
1 1 0.50 lea rdi, [rip + .Lanon.HASH.1]
|
||||
1 1 0.50 lea rdx, [rip + .Lanon.HASH.3]
|
||||
1 1 0.33 mov esi, 37
|
||||
4 7 1.00 * call qword ptr [rip + core::panicking::panic@GOTPCREL]
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 17.02 16.50 13.00 19.48 14.00 14.00
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - - 1.00 - 0.98 0.02 push rbp
|
||||
- - - - 1.00 - 0.02 0.98 push r15
|
||||
- - - - 1.00 - 0.99 0.01 push r14
|
||||
- - - - 1.00 - 0.01 0.99 push r13
|
||||
- - - - 1.00 - 0.99 0.01 push r12
|
||||
- - - - 1.00 - 0.01 0.99 push rbx
|
||||
- - 0.49 0.51 - - - - sub rsp, 24
|
||||
- - - - - - 0.04 0.96 mov r12, qword ptr [rdi + 16]
|
||||
- - 0.49 0.50 - 0.01 - - mov r13, r12
|
||||
- - 0.48 0.51 - 0.01 - - sub r13, rsi
|
||||
- - - - - 1.00 - - jb .LBB6_10
|
||||
- - 0.49 0.49 - 0.02 - - mov rbx, rdi
|
||||
- - - - - - 0.97 0.03 mov rax, qword ptr [rdi]
|
||||
- - 0.51 0.49 - - - - mov rcx, rax
|
||||
- - 0.49 0.02 - 0.49 - - sub rcx, r12
|
||||
- - 0.49 0.50 - 0.01 - - cmp rdx, rcx
|
||||
- - - - - 1.00 - - jbe .LBB6_4
|
||||
- - 0.02 0.49 - 0.49 - - add r12, rdx
|
||||
- - - - - 1.00 - - jae .LBB6_7
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - - - 1.00 - - jmp .LBB6_6
|
||||
- - - - - - 0.97 0.03 mov rax, qword ptr [rbx + 8]
|
||||
- - 0.51 0.49 - - - - add r12, rdx
|
||||
- - 0.49 0.51 - - - - lea rcx, [rsi + 2*rsi]
|
||||
- - 0.50 0.50 - - - - lea r14, [rax + 2*rcx]
|
||||
- - 0.51 0.49 - - - - add rdx, rdx
|
||||
- - 0.50 0.50 - - - - lea r15, [rdx + 2*rdx]
|
||||
- - 0.49 0.51 - - - - lea rdi, [r14 + r15]
|
||||
- - 0.50 0.49 - 0.01 - - add r13, r13
|
||||
- - 0.51 0.49 - - - - lea rdx, [2*r13]
|
||||
- - 0.01 0.01 - 0.98 - - add rdx, r13
|
||||
- - 0.01 - - 0.99 - - mov rsi, r14
|
||||
- - - - 1.00 1.00 1.98 0.02 call qword ptr [rip + memmove@GOTPCREL]
|
||||
- - 0.49 0.50 - 0.01 - - mov rdi, r14
|
||||
- - - - - - - - xor esi, esi
|
||||
- - 0.50 0.50 - - - - mov rdx, r15
|
||||
- - - - 1.00 1.00 1.96 0.04 call qword ptr [rip + memset@GOTPCREL]
|
||||
- - - - 1.00 - 0.01 0.99 mov qword ptr [rbx + 16], r12
|
||||
- - 0.50 - - 0.50 - - mov al, 1
|
||||
- - 0.51 0.49 - - - - add rsp, 24
|
||||
- - - - - - 0.02 0.98 pop rbx
|
||||
- - - - - - 0.03 0.97 pop r12
|
||||
- - - - - - 0.03 0.97 pop r13
|
||||
- - - - - - 0.97 0.03 pop r14
|
||||
- - - - - - 0.03 0.97 pop r15
|
||||
- - - - - - 0.01 0.99 pop rbp
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.49 0.51 - - - - mov r15, rsi
|
||||
- - 0.51 0.49 - - - - mov rbp, rdx
|
||||
- - 0.49 0.51 - - - - lea rcx, [rax + rax]
|
||||
- - 0.49 0.50 - 0.01 - - cmp r12, rcx
|
||||
- - 1.04 0.50 - 1.46 - - cmova rcx, r12
|
||||
- - 0.49 0.49 - 0.02 - - cmp rcx, 5
|
||||
- - 0.50 - - 0.50 - - mov r14d, 4
|
||||
- - 0.50 0.51 - 0.99 - - cmovae r14, rcx
|
||||
- - - - - - 0.97 0.03 mov rdx, qword ptr [rbx + 8]
|
||||
- - - 0.51 - 0.49 - - mov rdi, rsp
|
||||
- - 0.01 0.50 - 0.49 - - mov rsi, rax
|
||||
- - 0.49 0.50 - 0.01 - - mov rcx, r14
|
||||
- - - - 1.00 1.00 0.99 0.01 call <alloc::raw_vec::RawVecInner>::finish_grow
|
||||
- - 0.51 0.49 - - 0.50 0.50 cmp dword ptr [rsp], 1
|
||||
- - - - - 1.00 - - je .LBB6_3
|
||||
- - - - - - 0.50 0.50 mov rax, qword ptr [rsp + 8]
|
||||
- - - - 1.00 - 0.99 0.01 mov qword ptr [rbx + 8], rax
|
||||
- - - - 1.00 - 0.01 0.99 mov qword ptr [rbx], r14
|
||||
- - 0.49 0.50 - 0.01 - - mov rdx, rbp
|
||||
- - 0.50 0.01 - 0.49 - - mov rsi, r15
|
||||
- - - - - 1.00 - - jmp .LBB6_5
|
||||
- - 0.01 0.99 - - - - lea rdi, [rip + .Lanon.HASH.1]
|
||||
- - 0.99 0.01 - - - - lea rdx, [rip + .Lanon.HASH.3]
|
||||
- - 0.02 0.49 - 0.49 - - mov esi, 37
|
||||
- - - - 1.00 1.00 0.02 1.98 call qword ptr [rip + core::panicking::panic@GOTPCREL]
|
||||
9
rust/zerocopy/benches/new_box_zeroed.rs
Normal file
9
rust/zerocopy/benches/new_box_zeroed.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_new_box_zeroed() -> Option<Box<format::LocoPacket>> {
|
||||
FromZeros::new_box_zeroed().ok()
|
||||
}
|
||||
7
rust/zerocopy/benches/new_box_zeroed.x86-64
Normal file
7
rust/zerocopy/benches/new_box_zeroed.x86-64
Normal file
@@ -0,0 +1,7 @@
|
||||
bench_new_box_zeroed:
|
||||
push rax
|
||||
call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
mov edi, 6
|
||||
mov esi, 2
|
||||
pop rax
|
||||
jmp qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
51
rust/zerocopy/benches/new_box_zeroed.x86-64.mca
Normal file
51
rust/zerocopy/benches/new_box_zeroed.x86-64.mca
Normal file
@@ -0,0 +1,51 @@
|
||||
Iterations: 100
|
||||
Instructions: 600
|
||||
Total Cycles: 1197
|
||||
Total uOps: 1100
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 0.92
|
||||
IPC: 0.50
|
||||
Block RThroughput: 2.8
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
2 5 1.00 * push rax
|
||||
4 7 1.00 * call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
1 1 0.33 mov edi, 6
|
||||
1 1 0.33 mov esi, 2
|
||||
1 6 0.50 * pop rax
|
||||
2 6 1.00 * jmp qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 0.99 1.00 2.00 2.01 2.07 2.93
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - - 1.00 - 0.93 0.07 push rax
|
||||
- - - - 1.00 1.00 0.12 1.88 call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
- - 0.99 - - 0.01 - - mov edi, 6
|
||||
- - - 1.00 - - - - mov esi, 2
|
||||
- - - - - - 0.94 0.06 pop rax
|
||||
- - - - - 1.00 0.08 0.92 jmp qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
@@ -0,0 +1,11 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_new_box_zeroed_with_elems_dynamic_padding(
|
||||
count: usize,
|
||||
) -> Option<Box<format::LocoPacket>> {
|
||||
FromZeros::new_box_zeroed_with_elems(count).ok()
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
bench_new_box_zeroed_with_elems_dynamic_padding:
|
||||
push r14
|
||||
push rbx
|
||||
push rax
|
||||
mov rbx, rdi
|
||||
movabs rax, 3074457345618258598
|
||||
cmp rdi, rax
|
||||
ja .LBB5_1
|
||||
lea r14, [rbx + 2*rbx]
|
||||
or r14, 3
|
||||
add r14, 9
|
||||
call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
mov esi, 4
|
||||
mov rdi, r14
|
||||
call qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
jmp .LBB5_3
|
||||
.LBB5_1:
|
||||
xor eax, eax
|
||||
.LBB5_3:
|
||||
mov rdx, rbx
|
||||
add rsp, 8
|
||||
pop rbx
|
||||
pop r14
|
||||
ret
|
||||
@@ -0,0 +1,81 @@
|
||||
Iterations: 100
|
||||
Instructions: 2100
|
||||
Total Cycles: 2990
|
||||
Total uOps: 3000
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 1.00
|
||||
IPC: 0.70
|
||||
Block RThroughput: 7.5
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
2 5 1.00 * push r14
|
||||
2 5 1.00 * push rbx
|
||||
2 5 1.00 * push rax
|
||||
1 1 0.33 mov rbx, rdi
|
||||
1 1 0.33 movabs rax, 3074457345618258598
|
||||
1 1 0.33 cmp rdi, rax
|
||||
1 1 1.00 ja .LBB5_1
|
||||
1 1 0.50 lea r14, [rbx + 2*rbx]
|
||||
1 1 0.33 or r14, 3
|
||||
1 1 0.33 add r14, 9
|
||||
4 7 1.00 * call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
1 1 0.33 mov esi, 4
|
||||
1 1 0.33 mov rdi, r14
|
||||
4 7 1.00 * call qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
1 1 1.00 jmp .LBB5_3
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 0.33 mov rdx, rbx
|
||||
1 1 0.33 add rsp, 8
|
||||
1 6 0.50 * pop rbx
|
||||
1 6 0.50 * pop r14
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 4.49 4.50 5.00 6.01 4.50 4.50
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - - 1.00 - 0.50 0.50 push r14
|
||||
- - - - 1.00 - 0.50 0.50 push rbx
|
||||
- - - - 1.00 - 0.50 0.50 push rax
|
||||
- - 0.49 0.50 - 0.01 - - mov rbx, rdi
|
||||
- - 0.50 0.50 - - - - movabs rax, 3074457345618258598
|
||||
- - 0.50 0.50 - - - - cmp rdi, rax
|
||||
- - - - - 1.00 - - ja .LBB5_1
|
||||
- - 0.50 0.50 - - - - lea r14, [rbx + 2*rbx]
|
||||
- - 0.50 0.50 - - - - or r14, 3
|
||||
- - 0.50 - - 0.50 - - add r14, 9
|
||||
- - - - 1.00 1.00 1.00 1.00 call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
- - - 0.50 - 0.50 - - mov esi, 4
|
||||
- - 0.50 0.50 - - - - mov rdi, r14
|
||||
- - - - 1.00 1.00 1.00 1.00 call qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
- - - - - 1.00 - - jmp .LBB5_3
|
||||
- - - - - - - - xor eax, eax
|
||||
- - 0.51 0.49 - - - - mov rdx, rbx
|
||||
- - 0.49 0.51 - - - - add rsp, 8
|
||||
- - - - - - 0.50 0.50 pop rbx
|
||||
- - - - - - 0.50 0.50 pop r14
|
||||
- - - - - 1.00 - - ret
|
||||
@@ -0,0 +1,9 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_new_box_zeroed_with_elems_dynamic_size(count: usize) -> Option<Box<format::LocoPacket>> {
|
||||
FromZeros::new_box_zeroed_with_elems(count).ok()
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
bench_new_box_zeroed_with_elems_dynamic_size:
|
||||
push r14
|
||||
push rbx
|
||||
push rax
|
||||
mov rbx, rdi
|
||||
movabs rax, 4611686018427387901
|
||||
cmp rdi, rax
|
||||
ja .LBB5_1
|
||||
lea r14, [2*rbx + 4]
|
||||
call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
mov esi, 2
|
||||
mov rdi, r14
|
||||
call qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
jmp .LBB5_3
|
||||
.LBB5_1:
|
||||
xor eax, eax
|
||||
.LBB5_3:
|
||||
mov rdx, rbx
|
||||
add rsp, 8
|
||||
pop rbx
|
||||
pop r14
|
||||
ret
|
||||
@@ -0,0 +1,77 @@
|
||||
Iterations: 100
|
||||
Instructions: 1900
|
||||
Total Cycles: 2990
|
||||
Total uOps: 2800
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 0.94
|
||||
IPC: 0.64
|
||||
Block RThroughput: 7.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
2 5 1.00 * push r14
|
||||
2 5 1.00 * push rbx
|
||||
2 5 1.00 * push rax
|
||||
1 1 0.33 mov rbx, rdi
|
||||
1 1 0.33 movabs rax, 4611686018427387901
|
||||
1 1 0.33 cmp rdi, rax
|
||||
1 1 1.00 ja .LBB5_1
|
||||
1 1 0.50 lea r14, [2*rbx + 4]
|
||||
4 7 1.00 * call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
1 1 0.33 mov esi, 2
|
||||
1 1 0.33 mov rdi, r14
|
||||
4 7 1.00 * call qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
1 1 1.00 jmp .LBB5_3
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 0.33 mov rdx, rbx
|
||||
1 1 0.33 add rsp, 8
|
||||
1 6 0.50 * pop rbx
|
||||
1 6 0.50 * pop r14
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 3.97 3.98 5.00 5.05 4.50 4.50
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - - 1.00 - 0.50 0.50 push r14
|
||||
- - - - 1.00 - 0.50 0.50 push rbx
|
||||
- - - - 1.00 - 0.50 0.50 push rax
|
||||
- - 0.05 0.94 - 0.01 - - mov rbx, rdi
|
||||
- - 0.94 0.06 - - - - movabs rax, 4611686018427387901
|
||||
- - 0.06 0.94 - - - - cmp rdi, rax
|
||||
- - - - - 1.00 - - ja .LBB5_1
|
||||
- - 0.94 0.06 - - - - lea r14, [2*rbx + 4]
|
||||
- - - - 1.00 1.00 1.00 1.00 call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
- - 0.98 0.02 - - - - mov esi, 2
|
||||
- - 0.02 0.94 - 0.04 - - mov rdi, r14
|
||||
- - - - 1.00 1.00 1.00 1.00 call qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
- - - - - 1.00 - - jmp .LBB5_3
|
||||
- - - - - - - - xor eax, eax
|
||||
- - 0.94 0.06 - - - - mov rdx, rbx
|
||||
- - 0.04 0.96 - - - - add rsp, 8
|
||||
- - - - - - 0.50 0.50 pop rbx
|
||||
- - - - - - 0.50 0.50 pop r14
|
||||
- - - - - 1.00 - - ret
|
||||
9
rust/zerocopy/benches/new_vec_zeroed.rs
Normal file
9
rust/zerocopy/benches/new_vec_zeroed.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_new_vec_zeroed(len: usize) -> Option<Vec<format::LocoPacket>> {
|
||||
FromZeros::new_vec_zeroed(len).ok()
|
||||
}
|
||||
40
rust/zerocopy/benches/new_vec_zeroed.x86-64
Normal file
40
rust/zerocopy/benches/new_vec_zeroed.x86-64
Normal file
@@ -0,0 +1,40 @@
|
||||
bench_new_vec_zeroed:
|
||||
mov rax, rdi
|
||||
movabs rcx, 1537228672809129301
|
||||
cmp rsi, rcx
|
||||
ja .LBB5_5
|
||||
test rsi, rsi
|
||||
je .LBB5_2
|
||||
push r15
|
||||
push r14
|
||||
push rbx
|
||||
lea rcx, [rsi + rsi]
|
||||
lea rbx, [rcx + 2*rcx]
|
||||
mov r14, rax
|
||||
mov r15, rsi
|
||||
call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
mov esi, 2
|
||||
mov rdi, rbx
|
||||
call qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
mov rsi, r15
|
||||
mov rcx, rax
|
||||
mov rax, r14
|
||||
test rcx, rcx
|
||||
pop rbx
|
||||
pop r14
|
||||
pop r15
|
||||
je .LBB5_5
|
||||
mov qword ptr [rax], rsi
|
||||
mov qword ptr [rax + 8], rcx
|
||||
mov qword ptr [rax + 16], rsi
|
||||
ret
|
||||
.LBB5_5:
|
||||
movabs rcx, -9223372036854775808
|
||||
mov qword ptr [rax], rcx
|
||||
ret
|
||||
.LBB5_2:
|
||||
mov ecx, 2
|
||||
mov qword ptr [rax], rsi
|
||||
mov qword ptr [rax + 8], rcx
|
||||
mov qword ptr [rax + 16], rsi
|
||||
ret
|
||||
113
rust/zerocopy/benches/new_vec_zeroed.x86-64.mca
Normal file
113
rust/zerocopy/benches/new_vec_zeroed.x86-64.mca
Normal file
@@ -0,0 +1,113 @@
|
||||
Iterations: 100
|
||||
Instructions: 3700
|
||||
Total Cycles: 3486
|
||||
Total uOps: 4600
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 1.32
|
||||
IPC: 1.06
|
||||
Block RThroughput: 12.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 0.33 movabs rcx, 1537228672809129301
|
||||
1 1 0.33 cmp rsi, rcx
|
||||
1 1 1.00 ja .LBB5_5
|
||||
1 1 0.33 test rsi, rsi
|
||||
1 1 1.00 je .LBB5_2
|
||||
2 5 1.00 * push r15
|
||||
2 5 1.00 * push r14
|
||||
2 5 1.00 * push rbx
|
||||
1 1 0.50 lea rcx, [rsi + rsi]
|
||||
1 1 0.50 lea rbx, [rcx + 2*rcx]
|
||||
1 1 0.33 mov r14, rax
|
||||
1 1 0.33 mov r15, rsi
|
||||
4 7 1.00 * call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
1 1 0.33 mov esi, 2
|
||||
1 1 0.33 mov rdi, rbx
|
||||
4 7 1.00 * call qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
1 1 0.33 mov rsi, r15
|
||||
1 1 0.33 mov rcx, rax
|
||||
1 1 0.33 mov rax, r14
|
||||
1 1 0.33 test rcx, rcx
|
||||
1 6 0.50 * pop rbx
|
||||
1 6 0.50 * pop r14
|
||||
1 6 0.50 * pop r15
|
||||
1 1 1.00 je .LBB5_5
|
||||
1 1 1.00 * mov qword ptr [rax], rsi
|
||||
1 1 1.00 * mov qword ptr [rax + 8], rcx
|
||||
1 1 1.00 * mov qword ptr [rax + 16], rsi
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 movabs rcx, -9223372036854775808
|
||||
1 1 1.00 * mov qword ptr [rax], rcx
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 mov ecx, 2
|
||||
1 1 1.00 * mov qword ptr [rax], rsi
|
||||
1 1 1.00 * mov qword ptr [rax + 8], rcx
|
||||
1 1 1.00 * mov qword ptr [rax + 16], rsi
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 6.99 6.99 12.00 10.02 8.00 9.00
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.01 0.98 - 0.01 - - mov rax, rdi
|
||||
- - 0.98 0.02 - - - - movabs rcx, 1537228672809129301
|
||||
- - 0.02 0.98 - - - - cmp rsi, rcx
|
||||
- - - - - 1.00 - - ja .LBB5_5
|
||||
- - 0.98 - - 0.02 - - test rsi, rsi
|
||||
- - - - - 1.00 - - je .LBB5_2
|
||||
- - - - 1.00 - - 1.00 push r15
|
||||
- - - - 1.00 - 1.00 - push r14
|
||||
- - - - 1.00 - - 1.00 push rbx
|
||||
- - - 1.00 - - - - lea rcx, [rsi + rsi]
|
||||
- - - 1.00 - - - - lea rbx, [rcx + 2*rcx]
|
||||
- - 1.00 - - - - - mov r14, rax
|
||||
- - 1.00 - - - - - mov r15, rsi
|
||||
- - - - 1.00 1.00 2.00 - call qword ptr [rip + __rustc::__rust_no_alloc_shim_is_unstable_v2@GOTPCREL]
|
||||
- - - 0.01 - 0.99 - - mov esi, 2
|
||||
- - 0.01 0.99 - - - - mov rdi, rbx
|
||||
- - - - 1.00 1.00 - 2.00 call qword ptr [rip + __rustc::__rust_alloc_zeroed@GOTPCREL]
|
||||
- - 0.01 - - 0.99 - - mov rsi, r15
|
||||
- - 0.99 0.01 - - - - mov rcx, rax
|
||||
- - - 0.99 - 0.01 - - mov rax, r14
|
||||
- - 0.99 0.01 - - - - test rcx, rcx
|
||||
- - - - - - - 1.00 pop rbx
|
||||
- - - - - - 1.00 - pop r14
|
||||
- - - - - - - 1.00 pop r15
|
||||
- - - - - 1.00 - - je .LBB5_5
|
||||
- - - - 1.00 - 1.00 - mov qword ptr [rax], rsi
|
||||
- - - - 1.00 - - 1.00 mov qword ptr [rax + 8], rcx
|
||||
- - - - 1.00 - 1.00 - mov qword ptr [rax + 16], rsi
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.01 0.99 - - - - movabs rcx, -9223372036854775808
|
||||
- - - - 1.00 - - 1.00 mov qword ptr [rax], rcx
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.99 0.01 - - - - mov ecx, 2
|
||||
- - - - 1.00 - 1.00 - mov qword ptr [rax], rsi
|
||||
- - - - 1.00 - - 1.00 mov qword ptr [rax + 8], rcx
|
||||
- - - - 1.00 - 1.00 - mov qword ptr [rax + 16], rsi
|
||||
- - - - - 1.00 - - ret
|
||||
9
rust/zerocopy/benches/new_zeroed.rs
Normal file
9
rust/zerocopy/benches/new_zeroed.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_new_zeroed() -> format::LocoPacket {
|
||||
FromZeros::new_zeroed()
|
||||
}
|
||||
3
rust/zerocopy/benches/new_zeroed.x86-64
Normal file
3
rust/zerocopy/benches/new_zeroed.x86-64
Normal file
@@ -0,0 +1,3 @@
|
||||
bench_new_zeroed:
|
||||
xor eax, eax
|
||||
ret
|
||||
43
rust/zerocopy/benches/new_zeroed.x86-64.mca
Normal file
43
rust/zerocopy/benches/new_zeroed.x86-64.mca
Normal file
@@ -0,0 +1,43 @@
|
||||
Iterations: 100
|
||||
Instructions: 200
|
||||
Total Cycles: 103
|
||||
Total uOps: 200
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 1.94
|
||||
IPC: 1.94
|
||||
Block RThroughput: 1.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - - - - 1.00 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - - - 1.00 - - ret
|
||||
7
rust/zerocopy/benches/read_from_bytes.rs
Normal file
7
rust/zerocopy/benches/read_from_bytes.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_read_from_bytes_static_size(source: &[u8]) -> Option<format::LocoPacket> {
|
||||
zerocopy::FromBytes::read_from_bytes(source).ok()
|
||||
}
|
||||
15
rust/zerocopy/benches/read_from_bytes.x86-64
Normal file
15
rust/zerocopy/benches/read_from_bytes.x86-64
Normal file
@@ -0,0 +1,15 @@
|
||||
bench_read_from_bytes_static_size:
|
||||
mov rcx, rsi
|
||||
cmp rsi, 6
|
||||
jne .LBB5_2
|
||||
mov eax, dword ptr [rdi]
|
||||
movzx ecx, word ptr [rdi + 4]
|
||||
shl rcx, 32
|
||||
or rcx, rax
|
||||
.LBB5_2:
|
||||
shl rcx, 16
|
||||
inc rcx
|
||||
xor eax, eax
|
||||
cmp rsi, 6
|
||||
cmove rax, rcx
|
||||
ret
|
||||
65
rust/zerocopy/benches/read_from_bytes.x86-64.mca
Normal file
65
rust/zerocopy/benches/read_from_bytes.x86-64.mca
Normal file
@@ -0,0 +1,65 @@
|
||||
Iterations: 100
|
||||
Instructions: 1300
|
||||
Total Cycles: 377
|
||||
Total uOps: 1400
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.71
|
||||
IPC: 3.45
|
||||
Block RThroughput: 3.5
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rcx, rsi
|
||||
1 1 0.33 cmp rsi, 6
|
||||
1 1 1.00 jne .LBB5_2
|
||||
1 5 0.50 * mov eax, dword ptr [rdi]
|
||||
1 5 0.50 * movzx ecx, word ptr [rdi + 4]
|
||||
1 1 0.50 shl rcx, 32
|
||||
1 1 0.33 or rcx, rax
|
||||
1 1 0.50 shl rcx, 16
|
||||
1 1 0.33 inc rcx
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 0.33 cmp rsi, 6
|
||||
2 2 0.67 cmove rax, rcx
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 3.66 3.67 - 3.67 1.00 1.00
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.63 0.36 - 0.01 - - mov rcx, rsi
|
||||
- - 0.05 0.05 - 0.90 - - cmp rsi, 6
|
||||
- - - - - 1.00 - - jne .LBB5_2
|
||||
- - - - - - - 1.00 mov eax, dword ptr [rdi]
|
||||
- - - - - - 1.00 - movzx ecx, word ptr [rdi + 4]
|
||||
- - 0.97 - - 0.03 - - shl rcx, 32
|
||||
- - 0.02 0.35 - 0.63 - - or rcx, rax
|
||||
- - 0.98 - - 0.02 - - shl rcx, 16
|
||||
- - - 0.98 - 0.02 - - inc rcx
|
||||
- - - - - - - - xor eax, eax
|
||||
- - 0.03 0.93 - 0.04 - - cmp rsi, 6
|
||||
- - 0.98 1.00 - 0.02 - - cmove rax, rcx
|
||||
- - - - - 1.00 - - ret
|
||||
10
rust/zerocopy/benches/read_from_prefix.rs
Normal file
10
rust/zerocopy/benches/read_from_prefix.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_read_from_prefix_static_size(source: &[u8]) -> Option<format::LocoPacket> {
|
||||
match zerocopy::FromBytes::read_from_prefix(source) {
|
||||
Ok((packet, _rest)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
14
rust/zerocopy/benches/read_from_prefix.x86-64
Normal file
14
rust/zerocopy/benches/read_from_prefix.x86-64
Normal file
@@ -0,0 +1,14 @@
|
||||
bench_read_from_prefix_static_size:
|
||||
cmp rsi, 5
|
||||
jbe .LBB5_2
|
||||
mov eax, dword ptr [rdi]
|
||||
movzx edi, word ptr [rdi + 4]
|
||||
shl rdi, 32
|
||||
or rdi, rax
|
||||
.LBB5_2:
|
||||
shl rdi, 16
|
||||
inc rdi
|
||||
xor eax, eax
|
||||
cmp rsi, 6
|
||||
cmovae rax, rdi
|
||||
ret
|
||||
63
rust/zerocopy/benches/read_from_prefix.x86-64.mca
Normal file
63
rust/zerocopy/benches/read_from_prefix.x86-64.mca
Normal file
@@ -0,0 +1,63 @@
|
||||
Iterations: 100
|
||||
Instructions: 1200
|
||||
Total Cycles: 905
|
||||
Total uOps: 1300
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 1.44
|
||||
IPC: 1.33
|
||||
Block RThroughput: 3.3
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 cmp rsi, 5
|
||||
1 1 1.00 jbe .LBB5_2
|
||||
1 5 0.50 * mov eax, dword ptr [rdi]
|
||||
1 5 0.50 * movzx edi, word ptr [rdi + 4]
|
||||
1 1 0.50 shl rdi, 32
|
||||
1 1 0.33 or rdi, rax
|
||||
1 1 0.50 shl rdi, 16
|
||||
1 1 0.33 inc rdi
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 0.33 cmp rsi, 6
|
||||
2 2 0.67 cmovae rax, rdi
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 3.32 3.32 - 3.36 1.00 1.00
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.05 0.94 - 0.01 - - cmp rsi, 5
|
||||
- - - - - 1.00 - - jbe .LBB5_2
|
||||
- - - - - - - 1.00 mov eax, dword ptr [rdi]
|
||||
- - - - - - 1.00 - movzx edi, word ptr [rdi + 4]
|
||||
- - 0.71 - - 0.29 - - shl rdi, 32
|
||||
- - - 0.64 - 0.36 - - or rdi, rax
|
||||
- - 1.00 - - - - - shl rdi, 16
|
||||
- - 0.31 0.40 - 0.29 - - inc rdi
|
||||
- - - - - - - - xor eax, eax
|
||||
- - 0.34 0.35 - 0.31 - - cmp rsi, 6
|
||||
- - 0.91 0.99 - 0.10 - - cmovae rax, rdi
|
||||
- - - - - 1.00 - - ret
|
||||
10
rust/zerocopy/benches/read_from_suffix.rs
Normal file
10
rust/zerocopy/benches/read_from_suffix.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_read_from_suffix_static_size(source: &[u8]) -> Option<format::LocoPacket> {
|
||||
match zerocopy::FromBytes::read_from_suffix(source) {
|
||||
Ok((_rest, packet)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
15
rust/zerocopy/benches/read_from_suffix.x86-64
Normal file
15
rust/zerocopy/benches/read_from_suffix.x86-64
Normal file
@@ -0,0 +1,15 @@
|
||||
bench_read_from_suffix_static_size:
|
||||
mov rcx, rsi
|
||||
cmp rsi, 6
|
||||
jb .LBB5_2
|
||||
mov eax, dword ptr [rdi + rsi - 6]
|
||||
movzx ecx, word ptr [rdi + rsi - 2]
|
||||
shl rcx, 32
|
||||
or rcx, rax
|
||||
.LBB5_2:
|
||||
shl rcx, 16
|
||||
inc rcx
|
||||
xor eax, eax
|
||||
cmp rsi, 6
|
||||
cmovae rax, rcx
|
||||
ret
|
||||
65
rust/zerocopy/benches/read_from_suffix.x86-64.mca
Normal file
65
rust/zerocopy/benches/read_from_suffix.x86-64.mca
Normal file
@@ -0,0 +1,65 @@
|
||||
Iterations: 100
|
||||
Instructions: 1300
|
||||
Total Cycles: 377
|
||||
Total uOps: 1400
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.71
|
||||
IPC: 3.45
|
||||
Block RThroughput: 3.5
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rcx, rsi
|
||||
1 1 0.33 cmp rsi, 6
|
||||
1 1 1.00 jb .LBB5_2
|
||||
1 5 0.50 * mov eax, dword ptr [rdi + rsi - 6]
|
||||
1 5 0.50 * movzx ecx, word ptr [rdi + rsi - 2]
|
||||
1 1 0.50 shl rcx, 32
|
||||
1 1 0.33 or rcx, rax
|
||||
1 1 0.50 shl rcx, 16
|
||||
1 1 0.33 inc rcx
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 0.33 cmp rsi, 6
|
||||
2 2 0.67 cmovae rax, rcx
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 3.66 3.67 - 3.67 1.00 1.00
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.63 0.36 - 0.01 - - mov rcx, rsi
|
||||
- - 0.05 0.05 - 0.90 - - cmp rsi, 6
|
||||
- - - - - 1.00 - - jb .LBB5_2
|
||||
- - - - - - - 1.00 mov eax, dword ptr [rdi + rsi - 6]
|
||||
- - - - - - 1.00 - movzx ecx, word ptr [rdi + rsi - 2]
|
||||
- - 0.97 - - 0.03 - - shl rcx, 32
|
||||
- - 0.02 0.35 - 0.63 - - or rcx, rax
|
||||
- - 0.98 - - 0.02 - - shl rcx, 16
|
||||
- - - 0.98 - 0.02 - - inc rcx
|
||||
- - - - - - - - xor eax, eax
|
||||
- - 0.03 0.93 - 0.04 - - cmp rsi, 6
|
||||
- - 0.98 1.00 - 0.02 - - cmovae rax, rcx
|
||||
- - - - - 1.00 - - ret
|
||||
7
rust/zerocopy/benches/ref_from_bytes_dynamic_padding.rs
Normal file
7
rust/zerocopy/benches/ref_from_bytes_dynamic_padding.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_bytes_dynamic_padding(source: &[u8]) -> Option<&format::LocoPacket> {
|
||||
zerocopy::FromBytes::ref_from_bytes(source).ok()
|
||||
}
|
||||
22
rust/zerocopy/benches/ref_from_bytes_dynamic_padding.x86-64
Normal file
22
rust/zerocopy/benches/ref_from_bytes_dynamic_padding.x86-64
Normal file
@@ -0,0 +1,22 @@
|
||||
bench_ref_from_bytes_dynamic_padding:
|
||||
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
|
||||
.LBB5_4:
|
||||
mov rax, rdi
|
||||
ret
|
||||
@@ -0,0 +1,77 @@
|
||||
Iterations: 100
|
||||
Instructions: 1900
|
||||
Total Cycles: 645
|
||||
Total uOps: 2000
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.10
|
||||
IPC: 2.95
|
||||
Block RThroughput: 5.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[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 mov rax, rdi
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 6.32 6.33 - 6.35 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 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
|
||||
7
rust/zerocopy/benches/ref_from_bytes_dynamic_size.rs
Normal file
7
rust/zerocopy/benches/ref_from_bytes_dynamic_size.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_bytes_dynamic_size(source: &[u8]) -> Option<&format::LocoPacket> {
|
||||
zerocopy::FromBytes::ref_from_bytes(source).ok()
|
||||
}
|
||||
20
rust/zerocopy/benches/ref_from_bytes_dynamic_size.x86-64
Normal file
20
rust/zerocopy/benches/ref_from_bytes_dynamic_size.x86-64
Normal file
@@ -0,0 +1,20 @@
|
||||
bench_ref_from_bytes_dynamic_size:
|
||||
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
|
||||
ret
|
||||
75
rust/zerocopy/benches/ref_from_bytes_dynamic_size.x86-64.mca
Normal file
75
rust/zerocopy/benches/ref_from_bytes_dynamic_size.x86-64.mca
Normal file
@@ -0,0 +1,75 @@
|
||||
Iterations: 100
|
||||
Instructions: 1800
|
||||
Total Cycles: 704
|
||||
Total uOps: 2000
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 2.84
|
||||
IPC: 2.56
|
||||
Block RThroughput: 5.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
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 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 5.97 5.98 - 6.05 - -
|
||||
|
||||
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
|
||||
- - - - - 1.00 - - ret
|
||||
7
rust/zerocopy/benches/ref_from_bytes_static_size.rs
Normal file
7
rust/zerocopy/benches/ref_from_bytes_static_size.rs
Normal file
@@ -0,0 +1,7 @@
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_bytes_static_size(source: &[u8]) -> Option<&format::LocoPacket> {
|
||||
zerocopy::FromBytes::ref_from_bytes(source).ok()
|
||||
}
|
||||
8
rust/zerocopy/benches/ref_from_bytes_static_size.x86-64
Normal file
8
rust/zerocopy/benches/ref_from_bytes_static_size.x86-64
Normal file
@@ -0,0 +1,8 @@
|
||||
bench_ref_from_bytes_static_size:
|
||||
mov ecx, edi
|
||||
and ecx, 1
|
||||
xor rsi, 6
|
||||
xor eax, eax
|
||||
or rsi, rcx
|
||||
cmove rax, rdi
|
||||
ret
|
||||
53
rust/zerocopy/benches/ref_from_bytes_static_size.x86-64.mca
Normal file
53
rust/zerocopy/benches/ref_from_bytes_static_size.x86-64.mca
Normal file
@@ -0,0 +1,53 @@
|
||||
Iterations: 100
|
||||
Instructions: 700
|
||||
Total Cycles: 240
|
||||
Total uOps: 800
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.33
|
||||
IPC: 2.92
|
||||
Block RThroughput: 2.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov ecx, edi
|
||||
1 1 0.33 and ecx, 1
|
||||
1 1 0.33 xor rsi, 6
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 0.33 or rsi, rcx
|
||||
2 2 0.67 cmove rax, rdi
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 2.33 2.33 - 2.34 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.01 0.98 - 0.01 - - mov ecx, edi
|
||||
- - 0.02 0.66 - 0.32 - - and ecx, 1
|
||||
- - 0.33 0.66 - 0.01 - - xor rsi, 6
|
||||
- - - - - - - - xor eax, eax
|
||||
- - 0.98 0.02 - - - - or rsi, rcx
|
||||
- - 0.99 0.01 - 1.00 - - cmove rax, rdi
|
||||
- - - - - 1.00 - - ret
|
||||
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_bytes_with_elems_dynamic_padding(
|
||||
source: &[u8],
|
||||
count: usize,
|
||||
) -> Option<&format::LocoPacket> {
|
||||
zerocopy::FromBytes::ref_from_bytes_with_elems(source, count).ok()
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
bench_ref_from_bytes_with_elems_dynamic_padding:
|
||||
movabs rax, 3074457345618258598
|
||||
cmp rdx, rax
|
||||
seta cl
|
||||
mov rax, rdi
|
||||
test al, 3
|
||||
setne dil
|
||||
or dil, cl
|
||||
jne .LBB5_2
|
||||
lea rcx, [rdx + 2*rdx]
|
||||
or rcx, 3
|
||||
add rcx, 9
|
||||
cmp rsi, rcx
|
||||
je .LBB5_3
|
||||
.LBB5_2:
|
||||
xor eax, eax
|
||||
mov rdx, rsi
|
||||
.LBB5_3:
|
||||
ret
|
||||
@@ -0,0 +1,71 @@
|
||||
Iterations: 100
|
||||
Instructions: 1600
|
||||
Total Cycles: 539
|
||||
Total uOps: 1700
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.15
|
||||
IPC: 2.97
|
||||
Block RThroughput: 4.3
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 movabs rax, 3074457345618258598
|
||||
1 1 0.33 cmp rdx, rax
|
||||
2 2 1.00 seta cl
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 0.33 test al, 3
|
||||
1 1 0.50 setne dil
|
||||
1 1 0.33 or dil, cl
|
||||
1 1 1.00 jne .LBB5_2
|
||||
1 1 0.50 lea rcx, [rdx + 2*rdx]
|
||||
1 1 0.33 or rcx, 3
|
||||
1 1 0.33 add rcx, 9
|
||||
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 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 5.33 5.32 - 5.35 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.01 0.98 - 0.01 - - movabs rax, 3074457345618258598
|
||||
- - - 1.00 - - - - cmp rdx, rax
|
||||
- - 1.98 - - 0.02 - - seta cl
|
||||
- - 0.02 0.98 - - - - mov rax, rdi
|
||||
- - - 0.67 - 0.33 - - test al, 3
|
||||
- - 0.67 - - 0.33 - - setne dil
|
||||
- - 0.99 - - 0.01 - - or dil, cl
|
||||
- - - - - 1.00 - - jne .LBB5_2
|
||||
- - 0.01 0.99 - - - - lea rcx, [rdx + 2*rdx]
|
||||
- - - 0.01 - 0.99 - - or rcx, 3
|
||||
- - 0.65 0.02 - 0.33 - - add rcx, 9
|
||||
- - 0.99 0.01 - - - - cmp rsi, rcx
|
||||
- - - - - 1.00 - - je .LBB5_3
|
||||
- - - - - - - - xor eax, eax
|
||||
- - 0.01 0.66 - 0.33 - - mov rdx, rsi
|
||||
- - - - - 1.00 - - ret
|
||||
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_bytes_with_elems_dynamic_size(
|
||||
source: &[u8],
|
||||
count: usize,
|
||||
) -> Option<&format::LocoPacket> {
|
||||
zerocopy::FromBytes::ref_from_bytes_with_elems(source, count).ok()
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
bench_ref_from_bytes_with_elems_dynamic_size:
|
||||
movabs rax, 4611686018427387901
|
||||
cmp rdx, rax
|
||||
seta cl
|
||||
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:
|
||||
ret
|
||||
@@ -0,0 +1,65 @@
|
||||
Iterations: 100
|
||||
Instructions: 1300
|
||||
Total Cycles: 439
|
||||
Total uOps: 1400
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.19
|
||||
IPC: 2.96
|
||||
Block RThroughput: 3.5
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 movabs rax, 4611686018427387901
|
||||
1 1 0.33 cmp rdx, rax
|
||||
2 2 1.00 seta cl
|
||||
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 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 4.32 4.33 - 4.35 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - 0.99 - 0.01 - - movabs rax, 4611686018427387901
|
||||
- - 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
|
||||
- - - - - 1.00 - - ret
|
||||
10
rust/zerocopy/benches/ref_from_prefix_dynamic_padding.rs
Normal file
10
rust/zerocopy/benches/ref_from_prefix_dynamic_padding.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_prefix_dynamic_padding(source: &[u8]) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_prefix(source) {
|
||||
Ok((packet, _rest)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
22
rust/zerocopy/benches/ref_from_prefix_dynamic_padding.x86-64
Normal file
22
rust/zerocopy/benches/ref_from_prefix_dynamic_padding.x86-64
Normal file
@@ -0,0 +1,22 @@
|
||||
bench_ref_from_prefix_dynamic_padding:
|
||||
xor edx, edx
|
||||
mov eax, 0
|
||||
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, -9
|
||||
movabs rcx, -6148914691236517205
|
||||
mov rax, rsi
|
||||
mul rcx
|
||||
shr rdx
|
||||
mov rax, rdi
|
||||
ret
|
||||
@@ -0,0 +1,77 @@
|
||||
Iterations: 100
|
||||
Instructions: 1900
|
||||
Total Cycles: 608
|
||||
Total uOps: 2000
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.29
|
||||
IPC: 3.13
|
||||
Block RThroughput: 5.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 0 0.25 xor edx, edx
|
||||
1 1 0.33 mov eax, 0
|
||||
1 1 0.33 test dil, 3
|
||||
1 1 1.00 je .LBB5_1
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 movabs rax, 9223372036854775804
|
||||
1 1 0.33 and rsi, rax
|
||||
1 1 0.33 cmp rsi, 9
|
||||
1 1 1.00 jae .LBB5_3
|
||||
1 1 0.33 mov edx, 1
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 add rsi, -9
|
||||
1 1 0.33 movabs rcx, -6148914691236517205
|
||||
1 1 0.33 mov rax, rsi
|
||||
2 4 1.00 mul rcx
|
||||
1 1 0.50 shr rdx
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 6.00 6.00 - 6.00 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - - - - - - xor edx, edx
|
||||
- - 0.01 0.98 - 0.01 - - mov eax, 0
|
||||
- - 0.98 0.01 - 0.01 - - test dil, 3
|
||||
- - - - - 1.00 - - je .LBB5_1
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.01 0.99 - - - - movabs rax, 9223372036854775804
|
||||
- - - 1.00 - - - - and rsi, rax
|
||||
- - - 1.00 - - - - cmp rsi, 9
|
||||
- - - - - 1.00 - - jae .LBB5_3
|
||||
- - 1.00 - - - - - mov edx, 1
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.02 0.02 - 0.96 - - add rsi, -9
|
||||
- - 0.99 0.01 - - - - movabs rcx, -6148914691236517205
|
||||
- - 0.01 0.99 - - - - mov rax, rsi
|
||||
- - 1.00 1.00 - - - - mul rcx
|
||||
- - 1.00 - - - - - shr rdx
|
||||
- - 0.98 - - 0.02 - - mov rax, rdi
|
||||
- - - - - 1.00 - - ret
|
||||
10
rust/zerocopy/benches/ref_from_prefix_dynamic_size.rs
Normal file
10
rust/zerocopy/benches/ref_from_prefix_dynamic_size.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_prefix_dynamic_size(source: &[u8]) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_prefix(source) {
|
||||
Ok((packet, _rest)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
17
rust/zerocopy/benches/ref_from_prefix_dynamic_size.x86-64
Normal file
17
rust/zerocopy/benches/ref_from_prefix_dynamic_size.x86-64
Normal file
@@ -0,0 +1,17 @@
|
||||
bench_ref_from_prefix_dynamic_size:
|
||||
xor edx, edx
|
||||
mov eax, 0
|
||||
test dil, 1
|
||||
jne .LBB5_4
|
||||
cmp rsi, 4
|
||||
jae .LBB5_3
|
||||
mov edx, 1
|
||||
xor eax, eax
|
||||
ret
|
||||
.LBB5_3:
|
||||
add rsi, -4
|
||||
shr rsi
|
||||
mov rdx, rsi
|
||||
mov rax, rdi
|
||||
.LBB5_4:
|
||||
ret
|
||||
@@ -0,0 +1,67 @@
|
||||
Iterations: 100
|
||||
Instructions: 1400
|
||||
Total Cycles: 405
|
||||
Total uOps: 1400
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.46
|
||||
IPC: 3.46
|
||||
Block RThroughput: 4.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 0 0.25 xor edx, edx
|
||||
1 1 0.33 mov eax, 0
|
||||
1 1 0.33 test dil, 1
|
||||
1 1 1.00 jne .LBB5_4
|
||||
1 1 0.33 cmp rsi, 4
|
||||
1 1 1.00 jae .LBB5_3
|
||||
1 1 0.33 mov edx, 1
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 add rsi, -4
|
||||
1 1 0.50 shr rsi
|
||||
1 1 0.33 mov rdx, rsi
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 3.99 3.99 - 4.02 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - - - - - - xor edx, edx
|
||||
- - 0.01 0.98 - 0.01 - - mov eax, 0
|
||||
- - 0.98 0.02 - - - - test dil, 1
|
||||
- - - - - 1.00 - - jne .LBB5_4
|
||||
- - 0.02 0.98 - - - - cmp rsi, 4
|
||||
- - - - - 1.00 - - jae .LBB5_3
|
||||
- - 0.98 0.01 - 0.01 - - mov edx, 1
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.01 0.99 - - - - add rsi, -4
|
||||
- - 1.00 - - - - - shr rsi
|
||||
- - - 1.00 - - - - mov rdx, rsi
|
||||
- - 0.99 0.01 - - - - mov rax, rdi
|
||||
- - - - - 1.00 - - ret
|
||||
10
rust/zerocopy/benches/ref_from_prefix_static_size.rs
Normal file
10
rust/zerocopy/benches/ref_from_prefix_static_size.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_prefix_static_size(source: &[u8]) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_prefix(source) {
|
||||
Ok((packet, _rest)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
8
rust/zerocopy/benches/ref_from_prefix_static_size.x86-64
Normal file
8
rust/zerocopy/benches/ref_from_prefix_static_size.x86-64
Normal file
@@ -0,0 +1,8 @@
|
||||
bench_ref_from_prefix_static_size:
|
||||
xor eax, eax
|
||||
cmp rsi, 6
|
||||
mov rcx, rdi
|
||||
cmovb rcx, rax
|
||||
test dil, 1
|
||||
cmove rax, rcx
|
||||
ret
|
||||
53
rust/zerocopy/benches/ref_from_prefix_static_size.x86-64.mca
Normal file
53
rust/zerocopy/benches/ref_from_prefix_static_size.x86-64.mca
Normal file
@@ -0,0 +1,53 @@
|
||||
Iterations: 100
|
||||
Instructions: 700
|
||||
Total Cycles: 274
|
||||
Total uOps: 900
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.28
|
||||
IPC: 2.55
|
||||
Block RThroughput: 2.3
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 0.33 cmp rsi, 6
|
||||
1 1 0.33 mov rcx, rdi
|
||||
2 2 0.67 cmovb rcx, rax
|
||||
1 1 0.33 test dil, 1
|
||||
2 2 0.67 cmove rax, rcx
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 2.66 2.67 - 2.67 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - 0.01 - 0.99 - - cmp rsi, 6
|
||||
- - 0.01 0.67 - 0.32 - - mov rcx, rdi
|
||||
- - 1.00 0.99 - 0.01 - - cmovb rcx, rax
|
||||
- - 0.66 0.01 - 0.33 - - test dil, 1
|
||||
- - 0.99 0.99 - 0.02 - - cmove rax, rcx
|
||||
- - - - - 1.00 - - ret
|
||||
@@ -0,0 +1,13 @@
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_prefix_with_elems_dynamic_padding(
|
||||
source: &[u8],
|
||||
count: usize,
|
||||
) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_prefix_with_elems(source, count) {
|
||||
Ok((packet, _rest)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
bench_ref_from_prefix_with_elems_dynamic_padding:
|
||||
movabs rax, 3074457345618258598
|
||||
cmp rdx, rax
|
||||
ja .LBB5_1
|
||||
xor ecx, ecx
|
||||
mov eax, 0
|
||||
test dil, 3
|
||||
je .LBB5_3
|
||||
mov rdx, rcx
|
||||
ret
|
||||
.LBB5_1:
|
||||
mov edx, 1
|
||||
xor eax, eax
|
||||
ret
|
||||
.LBB5_3:
|
||||
lea rax, [rdx + 2*rdx]
|
||||
or rax, 3
|
||||
add rax, 9
|
||||
xor r8d, r8d
|
||||
cmp rax, rsi
|
||||
mov ecx, 1
|
||||
cmovbe rcx, rdx
|
||||
cmova rdi, r8
|
||||
mov rax, rdi
|
||||
mov rdx, rcx
|
||||
ret
|
||||
@@ -0,0 +1,85 @@
|
||||
Iterations: 100
|
||||
Instructions: 2300
|
||||
Total Cycles: 807
|
||||
Total uOps: 2700
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.35
|
||||
IPC: 2.85
|
||||
Block RThroughput: 6.8
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 movabs rax, 3074457345618258598
|
||||
1 1 0.33 cmp rdx, rax
|
||||
1 1 1.00 ja .LBB5_1
|
||||
1 0 0.25 xor ecx, ecx
|
||||
1 1 0.33 mov eax, 0
|
||||
1 1 0.33 test dil, 3
|
||||
1 1 1.00 je .LBB5_3
|
||||
1 1 0.33 mov rdx, rcx
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 mov edx, 1
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 1.00 U ret
|
||||
1 1 0.50 lea rax, [rdx + 2*rdx]
|
||||
1 1 0.33 or rax, 3
|
||||
1 1 0.33 add rax, 9
|
||||
1 0 0.25 xor r8d, r8d
|
||||
1 1 0.33 cmp rax, rsi
|
||||
1 1 0.33 mov ecx, 1
|
||||
3 3 1.00 cmovbe rcx, rdx
|
||||
3 3 1.00 cmova rdi, r8
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 0.33 mov rdx, rcx
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 7.99 7.99 - 8.02 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.47 0.52 - 0.01 - - movabs rax, 3074457345618258598
|
||||
- - 0.94 0.01 - 0.05 - - cmp rdx, rax
|
||||
- - - - - 1.00 - - ja .LBB5_1
|
||||
- - - - - - - - xor ecx, ecx
|
||||
- - 0.03 0.97 - - - - mov eax, 0
|
||||
- - 0.01 0.52 - 0.47 - - test dil, 3
|
||||
- - - - - 1.00 - - je .LBB5_3
|
||||
- - 0.03 0.51 - 0.46 - - mov rdx, rcx
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.04 0.96 - - - - mov edx, 1
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.01 0.99 - - - - lea rax, [rdx + 2*rdx]
|
||||
- - 0.52 0.48 - - - - or rax, 3
|
||||
- - 0.51 0.49 - - - - add rax, 9
|
||||
- - - - - - - - xor r8d, r8d
|
||||
- - 0.97 0.03 - - - - cmp rax, rsi
|
||||
- - 0.01 0.99 - - - - mov ecx, 1
|
||||
- - 1.04 0.97 - 0.99 - - cmovbe rcx, rdx
|
||||
- - 1.44 0.54 - 1.02 - - cmova rdi, r8
|
||||
- - 0.97 0.01 - 0.02 - - mov rax, rdi
|
||||
- - 1.00 - - - - - mov rdx, rcx
|
||||
- - - - - 1.00 - - ret
|
||||
@@ -0,0 +1,13 @@
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_prefix_with_elems_dynamic_size(
|
||||
source: &[u8],
|
||||
count: usize,
|
||||
) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_prefix_with_elems(source, count) {
|
||||
Ok((packet, _rest)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
bench_ref_from_prefix_with_elems_dynamic_size:
|
||||
movabs rax, 4611686018427387901
|
||||
cmp rdx, rax
|
||||
ja .LBB5_1
|
||||
mov rcx, rdx
|
||||
xor edx, edx
|
||||
mov eax, 0
|
||||
test dil, 1
|
||||
jne .LBB5_4
|
||||
lea rax, [2*rcx + 4]
|
||||
xor r8d, r8d
|
||||
cmp rax, rsi
|
||||
mov edx, 1
|
||||
cmovbe rdx, rcx
|
||||
cmova rdi, r8
|
||||
mov rax, rdi
|
||||
.LBB5_4:
|
||||
ret
|
||||
.LBB5_1:
|
||||
mov edx, 1
|
||||
xor eax, eax
|
||||
ret
|
||||
@@ -0,0 +1,77 @@
|
||||
Iterations: 100
|
||||
Instructions: 1900
|
||||
Total Cycles: 672
|
||||
Total uOps: 2300
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.42
|
||||
IPC: 2.83
|
||||
Block RThroughput: 5.8
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 movabs rax, 4611686018427387901
|
||||
1 1 0.33 cmp rdx, rax
|
||||
1 1 1.00 ja .LBB5_1
|
||||
1 1 0.33 mov rcx, rdx
|
||||
1 0 0.25 xor edx, edx
|
||||
1 1 0.33 mov eax, 0
|
||||
1 1 0.33 test dil, 1
|
||||
1 1 1.00 jne .LBB5_4
|
||||
1 1 0.50 lea rax, [2*rcx + 4]
|
||||
1 0 0.25 xor r8d, r8d
|
||||
1 1 0.33 cmp rax, rsi
|
||||
1 1 0.33 mov edx, 1
|
||||
3 3 1.00 cmovbe rdx, rcx
|
||||
3 3 1.00 cmova rdi, r8
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 mov edx, 1
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 6.66 6.66 - 6.68 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - 0.99 - 0.01 - - movabs rax, 4611686018427387901
|
||||
- - 0.37 0.63 - - - - cmp rdx, rax
|
||||
- - - - - 1.00 - - ja .LBB5_1
|
||||
- - 0.63 0.37 - - - - mov rcx, rdx
|
||||
- - - - - - - - xor edx, edx
|
||||
- - 0.01 0.98 - 0.01 - - mov eax, 0
|
||||
- - 0.98 0.02 - - - - test dil, 1
|
||||
- - - - - 1.00 - - jne .LBB5_4
|
||||
- - 0.01 0.99 - - - - lea rax, [2*rcx + 4]
|
||||
- - - - - - - - xor r8d, r8d
|
||||
- - 1.00 - - - - - cmp rax, rsi
|
||||
- - - 0.67 - 0.33 - - mov edx, 1
|
||||
- - 0.73 0.98 - 1.29 - - cmovbe rdx, rcx
|
||||
- - 1.60 0.36 - 1.04 - - cmova rdi, r8
|
||||
- - 0.99 0.01 - - - - mov rax, rdi
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.34 0.66 - - - - mov edx, 1
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - - - 1.00 - - ret
|
||||
10
rust/zerocopy/benches/ref_from_suffix_dynamic_padding.rs
Normal file
10
rust/zerocopy/benches/ref_from_suffix_dynamic_padding.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_suffix_dynamic_padding(source: &[u8]) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_suffix(source) {
|
||||
Ok((_rest, packet)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
23
rust/zerocopy/benches/ref_from_suffix_dynamic_padding.x86-64
Normal file
23
rust/zerocopy/benches/ref_from_suffix_dynamic_padding.x86-64
Normal file
@@ -0,0 +1,23 @@
|
||||
bench_ref_from_suffix_dynamic_padding:
|
||||
lea eax, [rsi + rdi]
|
||||
test al, 3
|
||||
jne .LBB5_1
|
||||
movabs rax, 9223372036854775804
|
||||
and rax, rsi
|
||||
cmp rax, 9
|
||||
jae .LBB5_3
|
||||
.LBB5_1:
|
||||
xor eax, eax
|
||||
ret
|
||||
.LBB5_3:
|
||||
add rax, -9
|
||||
movabs rcx, -6148914691236517205
|
||||
mul rcx
|
||||
shr rdx
|
||||
lea rax, [rdx + 2*rdx]
|
||||
sub rsi, rax
|
||||
or rax, -4
|
||||
add rsi, rdi
|
||||
add rax, rsi
|
||||
add rax, -8
|
||||
ret
|
||||
@@ -0,0 +1,79 @@
|
||||
Iterations: 100
|
||||
Instructions: 2000
|
||||
Total Cycles: 682
|
||||
Total uOps: 2100
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.08
|
||||
IPC: 2.93
|
||||
Block RThroughput: 5.3
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.50 lea eax, [rsi + rdi]
|
||||
1 1 0.33 test al, 3
|
||||
1 1 1.00 jne .LBB5_1
|
||||
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 jae .LBB5_3
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 1.00 U ret
|
||||
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 sub rsi, rax
|
||||
1 1 0.33 or rax, -4
|
||||
1 1 0.33 add rsi, rdi
|
||||
1 1 0.33 add rax, rsi
|
||||
1 1 0.33 add rax, -8
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 6.65 6.67 - 6.68 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.90 0.10 - - - - lea eax, [rsi + rdi]
|
||||
- - 0.93 - - 0.07 - - test al, 3
|
||||
- - - - - 1.00 - - jne .LBB5_1
|
||||
- - 0.51 0.47 - 0.02 - - movabs rax, 9223372036854775804
|
||||
- - - - - 1.00 - - and rax, rsi
|
||||
- - - 0.09 - 0.91 - - cmp rax, 9
|
||||
- - - - - 1.00 - - jae .LBB5_3
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.43 0.47 - 0.10 - - add rax, -9
|
||||
- - 0.42 0.39 - 0.19 - - movabs rcx, -6148914691236517205
|
||||
- - 1.00 1.00 - - - - mul rcx
|
||||
- - 0.69 - - 0.31 - - shr rdx
|
||||
- - 0.54 0.46 - - - - lea rax, [rdx + 2*rdx]
|
||||
- - 0.07 0.91 - 0.02 - - sub rsi, rax
|
||||
- - 0.91 0.05 - 0.04 - - or rax, -4
|
||||
- - 0.08 0.90 - 0.02 - - add rsi, rdi
|
||||
- - 0.09 0.91 - - - - add rax, rsi
|
||||
- - 0.08 0.92 - - - - add rax, -8
|
||||
- - - - - 1.00 - - ret
|
||||
10
rust/zerocopy/benches/ref_from_suffix_dynamic_size.rs
Normal file
10
rust/zerocopy/benches/ref_from_suffix_dynamic_size.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_suffix_dynamic_size(source: &[u8]) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_suffix(source) {
|
||||
Ok((_rest, packet)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
13
rust/zerocopy/benches/ref_from_suffix_dynamic_size.x86-64
Normal file
13
rust/zerocopy/benches/ref_from_suffix_dynamic_size.x86-64
Normal file
@@ -0,0 +1,13 @@
|
||||
bench_ref_from_suffix_dynamic_size:
|
||||
mov rdx, rsi
|
||||
lea ecx, [rsi + rdi]
|
||||
mov eax, edx
|
||||
and eax, 1
|
||||
add rax, rdi
|
||||
xor esi, esi
|
||||
sub rdx, 4
|
||||
cmovb rax, rsi
|
||||
shr rdx
|
||||
test cl, 1
|
||||
cmovne rax, rsi
|
||||
ret
|
||||
@@ -0,0 +1,63 @@
|
||||
Iterations: 100
|
||||
Instructions: 1200
|
||||
Total Cycles: 439
|
||||
Total uOps: 1400
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.19
|
||||
IPC: 2.73
|
||||
Block RThroughput: 3.5
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rdx, rsi
|
||||
1 1 0.50 lea ecx, [rsi + rdi]
|
||||
1 1 0.33 mov eax, edx
|
||||
1 1 0.33 and eax, 1
|
||||
1 1 0.33 add rax, rdi
|
||||
1 0 0.25 xor esi, esi
|
||||
1 1 0.33 sub rdx, 4
|
||||
2 2 0.67 cmovb rax, rsi
|
||||
1 1 0.50 shr rdx
|
||||
1 1 0.33 test cl, 1
|
||||
2 2 0.67 cmovne rax, rsi
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 4.33 4.33 - 4.34 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.02 0.32 - 0.66 - - mov rdx, rsi
|
||||
- - 0.32 0.68 - - - - lea ecx, [rsi + rdi]
|
||||
- - 0.66 - - 0.34 - - mov eax, edx
|
||||
- - 0.02 0.33 - 0.65 - - and eax, 1
|
||||
- - - 0.99 - 0.01 - - add rax, rdi
|
||||
- - - - - - - - xor esi, esi
|
||||
- - 0.65 - - 0.35 - - sub rdx, 4
|
||||
- - 1.00 1.00 - - - - cmovb rax, rsi
|
||||
- - 0.66 - - 0.34 - - shr rdx
|
||||
- - - 0.01 - 0.99 - - test cl, 1
|
||||
- - 1.00 1.00 - - - - cmovne rax, rsi
|
||||
- - - - - 1.00 - - ret
|
||||
10
rust/zerocopy/benches/ref_from_suffix_static_size.rs
Normal file
10
rust/zerocopy/benches/ref_from_suffix_static_size.rs
Normal file
@@ -0,0 +1,10 @@
|
||||
#[path = "formats/coco_static_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_suffix_static_size(source: &[u8]) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_suffix(source) {
|
||||
Ok((_rest, packet)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
13
rust/zerocopy/benches/ref_from_suffix_static_size.x86-64
Normal file
13
rust/zerocopy/benches/ref_from_suffix_static_size.x86-64
Normal file
@@ -0,0 +1,13 @@
|
||||
bench_ref_from_suffix_static_size:
|
||||
lea eax, [rsi + rdi]
|
||||
cmp rsi, 6
|
||||
setb cl
|
||||
or cl, al
|
||||
test cl, 1
|
||||
je .LBB5_2
|
||||
xor eax, eax
|
||||
ret
|
||||
.LBB5_2:
|
||||
lea rax, [rdi + rsi]
|
||||
add rax, -6
|
||||
ret
|
||||
61
rust/zerocopy/benches/ref_from_suffix_static_size.x86-64.mca
Normal file
61
rust/zerocopy/benches/ref_from_suffix_static_size.x86-64.mca
Normal file
@@ -0,0 +1,61 @@
|
||||
Iterations: 100
|
||||
Instructions: 1100
|
||||
Total Cycles: 338
|
||||
Total uOps: 1100
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.25
|
||||
IPC: 3.25
|
||||
Block RThroughput: 3.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.50 lea eax, [rsi + rdi]
|
||||
1 1 0.33 cmp rsi, 6
|
||||
1 1 0.50 setb cl
|
||||
1 1 0.33 or cl, al
|
||||
1 1 0.33 test cl, 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 rax, [rdi + rsi]
|
||||
1 1 0.33 add rax, -6
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 3.32 3.33 - 3.35 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.97 0.03 - - - - lea eax, [rsi + rdi]
|
||||
- - 0.33 0.32 - 0.35 - - cmp rsi, 6
|
||||
- - 1.00 - - - - - setb cl
|
||||
- - - 1.00 - - - - or cl, al
|
||||
- - - 1.00 - - - - test cl, 1
|
||||
- - - - - 1.00 - - je .LBB5_2
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.34 0.66 - - - - lea rax, [rdi + rsi]
|
||||
- - 0.68 0.32 - - - - add rax, -6
|
||||
- - - - - 1.00 - - ret
|
||||
@@ -0,0 +1,13 @@
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_suffix_with_elems_dynamic_padding(
|
||||
source: &[u8],
|
||||
count: usize,
|
||||
) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_suffix_with_elems(source, count) {
|
||||
Ok((_rest, packet)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
bench_ref_from_suffix_with_elems_dynamic_padding:
|
||||
movabs rax, 3074457345618258598
|
||||
cmp rdx, rax
|
||||
ja .LBB5_1
|
||||
lea r8d, [rsi + rdi]
|
||||
xor ecx, ecx
|
||||
mov eax, 0
|
||||
test r8b, 3
|
||||
je .LBB5_3
|
||||
mov rdx, rcx
|
||||
ret
|
||||
.LBB5_3:
|
||||
lea rax, [rdx + 2*rdx]
|
||||
or rax, 3
|
||||
add rax, 9
|
||||
sub rsi, rax
|
||||
jae .LBB5_4
|
||||
.LBB5_1:
|
||||
xor eax, eax
|
||||
mov edx, 1
|
||||
ret
|
||||
.LBB5_4:
|
||||
add rdi, rsi
|
||||
mov rcx, rdx
|
||||
mov rax, rdi
|
||||
mov rdx, rcx
|
||||
ret
|
||||
@@ -0,0 +1,85 @@
|
||||
Iterations: 100
|
||||
Instructions: 2300
|
||||
Total Cycles: 706
|
||||
Total uOps: 2300
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.26
|
||||
IPC: 3.26
|
||||
Block RThroughput: 6.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 movabs rax, 3074457345618258598
|
||||
1 1 0.33 cmp rdx, rax
|
||||
1 1 1.00 ja .LBB5_1
|
||||
1 1 0.50 lea r8d, [rsi + rdi]
|
||||
1 0 0.25 xor ecx, ecx
|
||||
1 1 0.33 mov eax, 0
|
||||
1 1 0.33 test r8b, 3
|
||||
1 1 1.00 je .LBB5_3
|
||||
1 1 0.33 mov rdx, rcx
|
||||
1 1 1.00 U ret
|
||||
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 sub rsi, rax
|
||||
1 1 1.00 jae .LBB5_4
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 0.33 mov edx, 1
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 add rdi, rsi
|
||||
1 1 0.33 mov rcx, rdx
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 0.33 mov rdx, rcx
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 6.99 7.00 - 7.01 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - - 0.99 - 0.01 - - movabs rax, 3074457345618258598
|
||||
- - 0.01 0.50 - 0.49 - - cmp rdx, rax
|
||||
- - - - - 1.00 - - ja .LBB5_1
|
||||
- - - 1.00 - - - - lea r8d, [rsi + rdi]
|
||||
- - - - - - - - xor ecx, ecx
|
||||
- - 0.50 0.49 - 0.01 - - mov eax, 0
|
||||
- - 0.49 0.51 - - - - test r8b, 3
|
||||
- - - - - 1.00 - - je .LBB5_3
|
||||
- - 0.51 0.49 - - - - mov rdx, rcx
|
||||
- - - - - 1.00 - - ret
|
||||
- - 0.50 0.50 - - - - lea rax, [rdx + 2*rdx]
|
||||
- - 1.00 - - - - - or rax, 3
|
||||
- - 1.00 - - - - - add rax, 9
|
||||
- - 0.99 0.01 - - - - sub rsi, rax
|
||||
- - - - - 1.00 - - jae .LBB5_4
|
||||
- - - - - - - - xor eax, eax
|
||||
- - - 1.00 - - - - mov edx, 1
|
||||
- - - - - 1.00 - - ret
|
||||
- - 1.00 - - - - - add rdi, rsi
|
||||
- - - 1.00 - - - - mov rcx, rdx
|
||||
- - 0.99 0.01 - - - - mov rax, rdi
|
||||
- - - 0.50 - 0.50 - - mov rdx, rcx
|
||||
- - - - - 1.00 - - ret
|
||||
@@ -0,0 +1,13 @@
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_ref_from_suffix_with_elems_dynamic_size(
|
||||
source: &[u8],
|
||||
count: usize,
|
||||
) -> Option<&format::LocoPacket> {
|
||||
match zerocopy::FromBytes::ref_from_suffix_with_elems(source, count) {
|
||||
Ok((_rest, packet)) => Some(packet),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
bench_ref_from_suffix_with_elems_dynamic_size:
|
||||
movabs rax, 4611686018427387901
|
||||
cmp rdx, rax
|
||||
ja .LBB5_1
|
||||
lea r8d, [rsi + rdi]
|
||||
xor ecx, ecx
|
||||
mov eax, 0
|
||||
test r8b, 1
|
||||
jne .LBB5_5
|
||||
lea rax, [2*rdx + 4]
|
||||
sub rsi, rax
|
||||
jae .LBB5_4
|
||||
.LBB5_1:
|
||||
xor eax, eax
|
||||
mov edx, 1
|
||||
ret
|
||||
.LBB5_4:
|
||||
add rdi, rsi
|
||||
mov rcx, rdx
|
||||
mov rax, rdi
|
||||
.LBB5_5:
|
||||
mov rdx, rcx
|
||||
ret
|
||||
@@ -0,0 +1,77 @@
|
||||
Iterations: 100
|
||||
Instructions: 1900
|
||||
Total Cycles: 571
|
||||
Total uOps: 1900
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 3.33
|
||||
IPC: 3.33
|
||||
Block RThroughput: 5.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 movabs rax, 4611686018427387901
|
||||
1 1 0.33 cmp rdx, rax
|
||||
1 1 1.00 ja .LBB5_1
|
||||
1 1 0.50 lea r8d, [rsi + rdi]
|
||||
1 0 0.25 xor ecx, ecx
|
||||
1 1 0.33 mov eax, 0
|
||||
1 1 0.33 test r8b, 1
|
||||
1 1 1.00 jne .LBB5_5
|
||||
1 1 0.50 lea rax, [2*rdx + 4]
|
||||
1 1 0.33 sub rsi, rax
|
||||
1 1 1.00 jae .LBB5_4
|
||||
1 0 0.25 xor eax, eax
|
||||
1 1 0.33 mov edx, 1
|
||||
1 1 1.00 U ret
|
||||
1 1 0.33 add rdi, rsi
|
||||
1 1 0.33 mov rcx, rdx
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 0.33 mov rdx, rcx
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 5.66 5.66 - 5.68 - -
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.66 0.33 - 0.01 - - movabs rax, 4611686018427387901
|
||||
- - 0.01 0.99 - - - - cmp rdx, rax
|
||||
- - - - - 1.00 - - ja .LBB5_1
|
||||
- - 0.99 0.01 - - - - lea r8d, [rsi + rdi]
|
||||
- - - - - - - - xor ecx, ecx
|
||||
- - 0.33 0.33 - 0.34 - - mov eax, 0
|
||||
- - 0.33 0.34 - 0.33 - - test r8b, 1
|
||||
- - - - - 1.00 - - jne .LBB5_5
|
||||
- - 0.34 0.66 - - - - lea rax, [2*rdx + 4]
|
||||
- - - 1.00 - - - - sub rsi, rax
|
||||
- - - - - 1.00 - - jae .LBB5_4
|
||||
- - - - - - - - xor eax, eax
|
||||
- - 1.00 - - - - - mov edx, 1
|
||||
- - - - - 1.00 - - ret
|
||||
- - - 1.00 - - - - add rdi, rsi
|
||||
- - 1.00 - - - - - mov rcx, rdx
|
||||
- - 0.32 0.68 - - - - mov rax, rdi
|
||||
- - 0.68 0.32 - - - - mov rdx, rcx
|
||||
- - - - - 1.00 - - ret
|
||||
12
rust/zerocopy/benches/split_at_dynamic_padding.rs
Normal file
12
rust/zerocopy/benches/split_at_dynamic_padding.rs
Normal file
@@ -0,0 +1,12 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_split_at_dynamic_padding(
|
||||
source: &format::CocoPacket,
|
||||
len: usize,
|
||||
) -> Option<Split<&format::CocoPacket>> {
|
||||
source.split_at(len)
|
||||
}
|
||||
12
rust/zerocopy/benches/split_at_dynamic_padding.x86-64
Normal file
12
rust/zerocopy/benches/split_at_dynamic_padding.x86-64
Normal file
@@ -0,0 +1,12 @@
|
||||
bench_split_at_dynamic_padding:
|
||||
mov rax, rdi
|
||||
cmp rcx, rdx
|
||||
jbe .LBB5_2
|
||||
xor esi, esi
|
||||
mov qword ptr [rax], rsi
|
||||
ret
|
||||
.LBB5_2:
|
||||
mov qword ptr [rax + 8], rdx
|
||||
mov qword ptr [rax + 16], rcx
|
||||
mov qword ptr [rax], rsi
|
||||
ret
|
||||
59
rust/zerocopy/benches/split_at_dynamic_padding.x86-64.mca
Normal file
59
rust/zerocopy/benches/split_at_dynamic_padding.x86-64.mca
Normal file
@@ -0,0 +1,59 @@
|
||||
Iterations: 100
|
||||
Instructions: 1000
|
||||
Total Cycles: 404
|
||||
Total uOps: 1000
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 2.48
|
||||
IPC: 2.48
|
||||
Block RThroughput: 4.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 0.33 cmp rcx, rdx
|
||||
1 1 1.00 jbe .LBB5_2
|
||||
1 0 0.25 xor esi, esi
|
||||
1 1 1.00 * mov qword ptr [rax], rsi
|
||||
1 1 1.00 U ret
|
||||
1 1 1.00 * mov qword ptr [rax + 8], rdx
|
||||
1 1 1.00 * mov qword ptr [rax + 16], rcx
|
||||
1 1 1.00 * mov qword ptr [rax], rsi
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 0.99 1.00 4.00 3.01 2.00 2.00
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.99 - - 0.01 - - mov rax, rdi
|
||||
- - - 1.00 - - - - cmp rcx, rdx
|
||||
- - - - - 1.00 - - jbe .LBB5_2
|
||||
- - - - - - - - xor esi, esi
|
||||
- - - - 1.00 - - 1.00 mov qword ptr [rax], rsi
|
||||
- - - - - 1.00 - - ret
|
||||
- - - - 1.00 - 1.00 - mov qword ptr [rax + 8], rdx
|
||||
- - - - 1.00 - - 1.00 mov qword ptr [rax + 16], rcx
|
||||
- - - - 1.00 - 1.00 - mov qword ptr [rax], rsi
|
||||
- - - - - 1.00 - - ret
|
||||
12
rust/zerocopy/benches/split_at_dynamic_size.rs
Normal file
12
rust/zerocopy/benches/split_at_dynamic_size.rs
Normal file
@@ -0,0 +1,12 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_split_at_dynamic_size(
|
||||
source: &format::CocoPacket,
|
||||
len: usize,
|
||||
) -> Option<Split<&format::CocoPacket>> {
|
||||
source.split_at(len)
|
||||
}
|
||||
12
rust/zerocopy/benches/split_at_dynamic_size.x86-64
Normal file
12
rust/zerocopy/benches/split_at_dynamic_size.x86-64
Normal file
@@ -0,0 +1,12 @@
|
||||
bench_split_at_dynamic_size:
|
||||
mov rax, rdi
|
||||
cmp rcx, rdx
|
||||
jbe .LBB5_2
|
||||
xor esi, esi
|
||||
mov qword ptr [rax], rsi
|
||||
ret
|
||||
.LBB5_2:
|
||||
mov qword ptr [rax + 8], rdx
|
||||
mov qword ptr [rax + 16], rcx
|
||||
mov qword ptr [rax], rsi
|
||||
ret
|
||||
59
rust/zerocopy/benches/split_at_dynamic_size.x86-64.mca
Normal file
59
rust/zerocopy/benches/split_at_dynamic_size.x86-64.mca
Normal file
@@ -0,0 +1,59 @@
|
||||
Iterations: 100
|
||||
Instructions: 1000
|
||||
Total Cycles: 404
|
||||
Total uOps: 1000
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 2.48
|
||||
IPC: 2.48
|
||||
Block RThroughput: 4.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 0.33 cmp rcx, rdx
|
||||
1 1 1.00 jbe .LBB5_2
|
||||
1 0 0.25 xor esi, esi
|
||||
1 1 1.00 * mov qword ptr [rax], rsi
|
||||
1 1 1.00 U ret
|
||||
1 1 1.00 * mov qword ptr [rax + 8], rdx
|
||||
1 1 1.00 * mov qword ptr [rax + 16], rcx
|
||||
1 1 1.00 * mov qword ptr [rax], rsi
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 0.99 1.00 4.00 3.01 2.00 2.00
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.99 - - 0.01 - - mov rax, rdi
|
||||
- - - 1.00 - - - - cmp rcx, rdx
|
||||
- - - - - 1.00 - - jbe .LBB5_2
|
||||
- - - - - - - - xor esi, esi
|
||||
- - - - 1.00 - - 1.00 mov qword ptr [rax], rsi
|
||||
- - - - - 1.00 - - ret
|
||||
- - - - 1.00 - 1.00 - mov qword ptr [rax + 8], rdx
|
||||
- - - - 1.00 - - 1.00 mov qword ptr [rax + 16], rcx
|
||||
- - - - 1.00 - 1.00 - mov qword ptr [rax], rsi
|
||||
- - - - - 1.00 - - ret
|
||||
12
rust/zerocopy/benches/split_at_unchecked_dynamic_padding.rs
Normal file
12
rust/zerocopy/benches/split_at_unchecked_dynamic_padding.rs
Normal file
@@ -0,0 +1,12 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
unsafe fn bench_split_at_unchecked_dynamic_padding(
|
||||
source: &format::CocoPacket,
|
||||
len: usize,
|
||||
) -> Split<&format::CocoPacket> {
|
||||
unsafe { source.split_at_unchecked(len) }
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
bench_split_at_unchecked_dynamic_padding:
|
||||
mov rax, rdi
|
||||
mov qword ptr [rdi], rsi
|
||||
mov qword ptr [rdi + 8], rdx
|
||||
mov qword ptr [rdi + 16], rcx
|
||||
ret
|
||||
@@ -0,0 +1,49 @@
|
||||
Iterations: 100
|
||||
Instructions: 500
|
||||
Total Cycles: 303
|
||||
Total uOps: 500
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 1.65
|
||||
IPC: 1.65
|
||||
Block RThroughput: 3.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 1.00 * mov qword ptr [rdi], rsi
|
||||
1 1 1.00 * mov qword ptr [rdi + 8], rdx
|
||||
1 1 1.00 * mov qword ptr [rdi + 16], rcx
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 0.49 0.50 3.00 1.01 1.50 1.50
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.49 0.50 - 0.01 - - mov rax, rdi
|
||||
- - - - 1.00 - 0.50 0.50 mov qword ptr [rdi], rsi
|
||||
- - - - 1.00 - 0.50 0.50 mov qword ptr [rdi + 8], rdx
|
||||
- - - - 1.00 - 0.50 0.50 mov qword ptr [rdi + 16], rcx
|
||||
- - - - - 1.00 - - ret
|
||||
12
rust/zerocopy/benches/split_at_unchecked_dynamic_size.rs
Normal file
12
rust/zerocopy/benches/split_at_unchecked_dynamic_size.rs
Normal file
@@ -0,0 +1,12 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
unsafe fn bench_split_at_unchecked_dynamic_size(
|
||||
source: &format::CocoPacket,
|
||||
len: usize,
|
||||
) -> Split<&format::CocoPacket> {
|
||||
unsafe { source.split_at_unchecked(len) }
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
bench_split_at_unchecked_dynamic_size:
|
||||
mov rax, rdi
|
||||
mov qword ptr [rdi], rsi
|
||||
mov qword ptr [rdi + 8], rdx
|
||||
mov qword ptr [rdi + 16], rcx
|
||||
ret
|
||||
@@ -0,0 +1,49 @@
|
||||
Iterations: 100
|
||||
Instructions: 500
|
||||
Total Cycles: 303
|
||||
Total uOps: 500
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 1.65
|
||||
IPC: 1.65
|
||||
Block RThroughput: 3.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 1 1.00 * mov qword ptr [rdi], rsi
|
||||
1 1 1.00 * mov qword ptr [rdi + 8], rdx
|
||||
1 1 1.00 * mov qword ptr [rdi + 16], rcx
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 0.49 0.50 3.00 1.01 1.50 1.50
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.49 0.50 - 0.01 - - mov rax, rdi
|
||||
- - - - 1.00 - 0.50 0.50 mov qword ptr [rdi], rsi
|
||||
- - - - 1.00 - 0.50 0.50 mov qword ptr [rdi + 8], rdx
|
||||
- - - - 1.00 - 0.50 0.50 mov qword ptr [rdi + 16], rcx
|
||||
- - - - - 1.00 - - ret
|
||||
11
rust/zerocopy/benches/split_via_immutable_dynamic_padding.rs
Normal file
11
rust/zerocopy/benches/split_via_immutable_dynamic_padding.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_dynamic_padding.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_split_via_immutable_dynamic_padding(
|
||||
split: Split<&format::CocoPacket>,
|
||||
) -> (&format::CocoPacket, &[[u8; 3]]) {
|
||||
split.via_immutable()
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
bench_split_via_immutable_dynamic_padding:
|
||||
mov rax, rdi
|
||||
mov rcx, qword ptr [rsi]
|
||||
mov rdx, qword ptr [rsi + 8]
|
||||
mov rsi, qword ptr [rsi + 16]
|
||||
lea rdi, [rsi + 2*rsi]
|
||||
add rdi, rcx
|
||||
add rdi, 9
|
||||
sub rdx, rsi
|
||||
mov qword ptr [rax], rcx
|
||||
mov qword ptr [rax + 8], rsi
|
||||
mov qword ptr [rax + 16], rdi
|
||||
mov qword ptr [rax + 24], rdx
|
||||
ret
|
||||
@@ -0,0 +1,65 @@
|
||||
Iterations: 100
|
||||
Instructions: 1300
|
||||
Total Cycles: 510
|
||||
Total uOps: 1300
|
||||
|
||||
Dispatch Width: 4
|
||||
uOps Per Cycle: 2.55
|
||||
IPC: 2.55
|
||||
Block RThroughput: 4.0
|
||||
|
||||
|
||||
Instruction Info:
|
||||
[1]: #uOps
|
||||
[2]: Latency
|
||||
[3]: RThroughput
|
||||
[4]: MayLoad
|
||||
[5]: MayStore
|
||||
[6]: HasSideEffects (U)
|
||||
|
||||
[1] [2] [3] [4] [5] [6] Instructions:
|
||||
1 1 0.33 mov rax, rdi
|
||||
1 5 0.50 * mov rcx, qword ptr [rsi]
|
||||
1 5 0.50 * mov rdx, qword ptr [rsi + 8]
|
||||
1 5 0.50 * mov rsi, qword ptr [rsi + 16]
|
||||
1 1 0.50 lea rdi, [rsi + 2*rsi]
|
||||
1 1 0.33 add rdi, rcx
|
||||
1 1 0.33 add rdi, 9
|
||||
1 1 0.33 sub rdx, rsi
|
||||
1 1 1.00 * mov qword ptr [rax], rcx
|
||||
1 1 1.00 * mov qword ptr [rax + 8], rsi
|
||||
1 1 1.00 * mov qword ptr [rax + 16], rdi
|
||||
1 1 1.00 * mov qword ptr [rax + 24], rdx
|
||||
1 1 1.00 U ret
|
||||
|
||||
|
||||
Resources:
|
||||
[0] - SBDivider
|
||||
[1] - SBFPDivider
|
||||
[2] - SBPort0
|
||||
[3] - SBPort1
|
||||
[4] - SBPort4
|
||||
[5] - SBPort5
|
||||
[6.0] - SBPort23
|
||||
[6.1] - SBPort23
|
||||
|
||||
|
||||
Resource pressure per iteration:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1]
|
||||
- - 2.00 2.00 4.00 2.00 3.50 3.50
|
||||
|
||||
Resource pressure by instruction:
|
||||
[0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
|
||||
- - 0.03 0.93 - 0.04 - - mov rax, rdi
|
||||
- - - - - - 0.49 0.51 mov rcx, qword ptr [rsi]
|
||||
- - - - - - 1.00 - mov rdx, qword ptr [rsi + 8]
|
||||
- - - - - - 0.01 0.99 mov rsi, qword ptr [rsi + 16]
|
||||
- - 0.93 0.07 - - - - lea rdi, [rsi + 2*rsi]
|
||||
- - 0.05 0.02 - 0.93 - - add rdi, rcx
|
||||
- - 0.49 0.49 - 0.02 - - add rdi, 9
|
||||
- - 0.50 0.49 - 0.01 - - sub rdx, rsi
|
||||
- - - - 1.00 - 0.50 0.50 mov qword ptr [rax], rcx
|
||||
- - - - 1.00 - 0.50 0.50 mov qword ptr [rax + 8], rsi
|
||||
- - - - 1.00 - 0.49 0.51 mov qword ptr [rax + 16], rdi
|
||||
- - - - 1.00 - 0.51 0.49 mov qword ptr [rax + 24], rdx
|
||||
- - - - - 1.00 - - ret
|
||||
11
rust/zerocopy/benches/split_via_immutable_dynamic_size.rs
Normal file
11
rust/zerocopy/benches/split_via_immutable_dynamic_size.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
use zerocopy::*;
|
||||
|
||||
#[path = "formats/coco_dynamic_size.rs"]
|
||||
mod format;
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
fn bench_split_via_immutable_dynamic_size(
|
||||
split: Split<&format::CocoPacket>,
|
||||
) -> (&format::CocoPacket, &[[u8; 2]]) {
|
||||
split.via_immutable()
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user