use deepsize2::DeepSizeOf;
use serde::{Deserialize, Serialize};
use crate::events::{
MemoryLocalEvent, MemoryReadRecord, MemoryWriteRecord, PageProtLocalEvent, PageProtRecord,
};
#[derive(Default, PartialEq, Copy, Clone, Debug, Serialize, Deserialize, DeepSizeOf)]
pub enum FieldOperation {
#[default]
Add,
Mul,
Sub,
Div,
}
#[derive(Default, Debug, Clone, Serialize, Deserialize, DeepSizeOf)]
pub struct FpPageProtRecords {
pub read_page_prot_records: Vec<PageProtRecord>,
pub write_page_prot_records: Vec<PageProtRecord>,
}
#[derive(Default, Debug, Clone, Serialize, Deserialize, DeepSizeOf)]
pub struct FpOpEvent {
pub clk: u64,
pub x_ptr: u64,
pub x: Vec<u64>,
pub y_ptr: u64,
pub y: Vec<u64>,
pub op: FieldOperation,
pub x_memory_records: Vec<MemoryWriteRecord>,
pub y_memory_records: Vec<MemoryReadRecord>,
pub local_mem_access: Vec<MemoryLocalEvent>,
pub page_prot_records: FpPageProtRecords,
pub local_page_prot_access: Vec<PageProtLocalEvent>,
}
#[derive(Default, Debug, Clone, Serialize, Deserialize, DeepSizeOf)]
pub struct Fp2AddSubEvent {
pub clk: u64,
pub op: FieldOperation,
pub x_ptr: u64,
pub x: Vec<u64>,
pub y_ptr: u64,
pub y: Vec<u64>,
pub x_memory_records: Vec<MemoryWriteRecord>,
pub y_memory_records: Vec<MemoryReadRecord>,
pub local_mem_access: Vec<MemoryLocalEvent>,
pub page_prot_records: FpPageProtRecords,
pub local_page_prot_access: Vec<PageProtLocalEvent>,
}
#[derive(Default, Debug, Clone, Serialize, Deserialize, DeepSizeOf)]
pub struct Fp2MulEvent {
pub clk: u64,
pub x_ptr: u64,
pub x: Vec<u64>,
pub y_ptr: u64,
pub y: Vec<u64>,
pub x_memory_records: Vec<MemoryWriteRecord>,
pub y_memory_records: Vec<MemoryReadRecord>,
pub local_mem_access: Vec<MemoryLocalEvent>,
pub page_prot_records: FpPageProtRecords,
pub local_page_prot_access: Vec<PageProtLocalEvent>,
}