2022-06-13 14:37:29 -07:00
|
|
|
//! Memory unit.
|
|
|
|
|
|
2022-06-17 16:51:32 -07:00
|
|
|
const NUM_MEMORY_OPS: usize = 4;
|
|
|
|
|
const NUM_MEMORY_VALUE_LIMBS: usize = 8;
|
|
|
|
|
|
|
|
|
|
pub(crate) const TIMESTAMP: usize = 0;
|
|
|
|
|
pub(crate) const IS_READ: usize = TIMESTAMP + 1;
|
|
|
|
|
pub(crate) const ADDR_CONTEXT: usize = IS_READ + 1;
|
|
|
|
|
pub(crate) const ADDR_SEGMENT: usize = ADDR_CONTEXT + 1;
|
|
|
|
|
pub(crate) const ADDR_VIRTUAL: usize = ADDR_SEGMENT + 1;
|
|
|
|
|
pub(crate) const VALUE_START: usize = ADDR_VIRTUAL + 1;
|
|
|
|
|
|
|
|
|
|
pub(crate) const fn value_limb(i: usize) -> usize {
|
|
|
|
|
debug_assert!(i < NUM_MEMORY_VALUE_LIMBS);
|
|
|
|
|
VALUE_START + i
|
2022-06-07 14:40:42 -07:00
|
|
|
}
|
|
|
|
|
|
2022-06-17 16:51:32 -07:00
|
|
|
pub(crate) const SORTED_TIMESTAMP: usize = VALUE_START + NUM_MEMORY_VALUE_LIMBS;
|
|
|
|
|
pub(crate) const SORTED_IS_READ: usize = SORTED_TIMESTAMP + 1;
|
|
|
|
|
pub(crate) const SORTED_ADDR_CONTEXT: usize = SORTED_IS_READ + 1;
|
|
|
|
|
pub(crate) const SORTED_ADDR_SEGMENT: usize = SORTED_ADDR_CONTEXT + 1;
|
|
|
|
|
pub(crate) const SORTED_ADDR_VIRTUAL: usize = SORTED_ADDR_SEGMENT + 1;
|
|
|
|
|
pub(crate) const SORTED_VALUE_START: usize = SORTED_ADDR_VIRTUAL + 1;
|
2022-06-07 14:40:42 -07:00
|
|
|
|
2022-06-17 16:51:32 -07:00
|
|
|
pub(crate) const fn sorted_value_limb(i: usize) -> usize {
|
|
|
|
|
debug_assert!(i < NUM_MEMORY_VALUE_LIMBS);
|
|
|
|
|
SORTED_VALUE_START + i
|
2022-06-07 14:40:42 -07:00
|
|
|
}
|
|
|
|
|
|
2022-06-17 16:51:32 -07:00
|
|
|
pub(crate) const CONTEXT_FIRST_CHANGE: usize = SORTED_VALUE_START + NUM_MEMORY_VALUE_LIMBS;
|
|
|
|
|
pub(crate) const SEGMENT_FIRST_CHANGE: usize = CONTEXT_FIRST_CHANGE + 1;
|
|
|
|
|
pub(crate) const VIRTUAL_FIRST_CHANGE: usize = SEGMENT_FIRST_CHANGE + 1;
|
2022-06-07 14:40:42 -07:00
|
|
|
|
2022-06-17 16:51:32 -07:00
|
|
|
pub(crate) const RANGE_CHECK: usize = VIRTUAL_FIRST_CHANGE + 1;
|
|
|
|
|
pub(crate) const COUNTER: usize = RANGE_CHECK + 1;
|
|
|
|
|
pub(crate) const RANGE_CHECK_PERMUTED: usize = COUNTER + 1;
|
|
|
|
|
pub(crate) const COUNTER_PERMUTED: usize = RANGE_CHECK_PERMUTED + 1;
|
|
|
|
|
|
|
|
|
|
pub(crate) const fn is_memop(i: usize) -> usize {
|
|
|
|
|
debug_assert!(i < NUM_MEMORY_OPS);
|
|
|
|
|
COUNTER_PERMUTED + i
|
|
|
|
|
}
|
2022-06-09 10:39:25 -07:00
|
|
|
|
2022-06-17 16:51:32 -07:00
|
|
|
pub(crate) const NUM_REGISTERS: usize = COUNTER_PERMUTED + NUM_MEMORY_OPS;
|