mod accessors;
#[cfg(feature = "tracing")]
mod diff;
#[allow(unused_imports)]
pub use accessors::*;
#[cfg(feature = "tracing")]
pub use diff::*;
#[repr(C)]
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
pub struct GeneralRegisters {
pub rax: u64,
pub rcx: u64,
pub rdx: u64,
pub rbx: u64,
_unused_rsp: u64,
pub rbp: u64,
pub rsi: u64,
pub rdi: u64,
pub r8: u64,
pub r9: u64,
pub r10: u64,
pub r11: u64,
pub r12: u64,
pub r13: u64,
pub r14: u64,
pub r15: u64,
}
impl GeneralRegisters {
pub const REGISTER_NAMES: [&'static str; 16] = [
"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", "r8", "r9", "r10", "r11", "r12",
"r13", "r14", "r15",
];
pub const fn register_name(index: u8) -> &'static str {
Self::REGISTER_NAMES[index as usize]
}
}
macro_rules! save_regs_to_stack {
() => {
"
push r15
push r14
push r13
push r12
push r11
push r10
push r9
push r8
push rdi
push rsi
push rbp
sub rsp, 8
push rbx
push rdx
push rcx
push rax"
};
}
macro_rules! restore_regs_from_stack {
() => {
"
pop rax
pop rcx
pop rdx
pop rbx
add rsp, 8
pop rbp
pop rsi
pop rdi
pop r8
pop r9
pop r10
pop r11
pop r12
pop r13
pop r14
pop r15"
};
}