Now features templates for timed clflush and maccess.

This commit is contained in:
Guillume DIDIER 2021-10-14 14:32:48 +02:00
parent 843cf63ba9
commit 372777a64d

View File

@ -1,20 +1,60 @@
global_asm!(
".global timed_maccess_template",
"timed_maccess_template:",
"nop",
"mfence",
"rdtsc",
"shl rdx, 32",
"mov rsi, rdx",
"add rsi, rax",
"mfence",
"mov rdi, [rdi]",
"mfence",
"rdtsc",
"shl rdx, 32",
"add rax, rdx",
"mfence",
"sub rax, rsi",
"ret",
".global timed_maccess_template_end",
"timed_maccess_template_end:",
"nop",
".global timed_clflush_template",
"timed_clflush_template:",
"mfence",
"rdtsc",
"shl rdx, 32",
"mov rsi, rdx",
"add rsi, rax",
"mfence",
"clflush [rdi]",
"mfence",
"rdtsc",
"shl rdx, 32",
"add rax, rdx",
"mfence",
"sub rax, rsi",
"ret",
".global timed_clflush_template_end",
"timed_clflush_template_end:",
"nop",
);
extern "C" {
fn timed_maccess_template(pointer: *const u8) -> u64;
fn timed_maccess_template_end();
fn timed_clflush_template(pointer: *const u8) -> u64;
fn timed_clflush_template_end();
}
pub fn tmp_test() {
let size = timed_maccess_template_end as *const u8 as usize
- timed_maccess_template as *const u8 as usize;
println!("function size : {}", size);
println!("maccess function size : {}", size);
let size = timed_clflush_template_end as *const u8 as usize
- timed_clflush_template as *const u8 as usize;
println!("clflush function size : {}", size);
let mem: u8 = 42;
let p = &mem as *const u8;
println!("maccess {:p} : {}", p, unsafe { timed_maccess_template(p) });
println!("clflush {:p} : {}", p, unsafe { timed_clflush_template(p) });
}