Trait rsim::processor::isa_mods::vector::registers::VectorRegisterFile [−][src]
pub trait VectorRegisterFile<TElem> { fn load_vreg_elem(
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<TElem>; fn load_vreg_elem_int(
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<u128>; fn store_vreg_elem(
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: TElem
) -> Result<()>; fn store_vreg_elem_int(
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: u128
) -> Result<()>; fn load_vreg(&mut self, vs: u8) -> Result<TElem>; fn load_vreg_int(&mut self, vs: u8) -> Result<u128>; fn store_vreg(&mut self, vs: u8, val: TElem) -> Result<()>; fn store_vreg_int(&mut self, vs: u8, val: u128) -> Result<()>; fn seg_masked_out(&self, vm: bool, i: u32) -> bool; fn dump(&self); fn reset(&mut self); }
Trait for a vector register file where VLEN=128, ELEN=128. Data is stored in TElem, which can be plain integers or a SafeTaggedCap (which implicitly adds 1-bit)
Required methods
fn load_vreg_elem(
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<TElem>
[src]
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<TElem>
Load a value from an element in a vertex register group, with specified EEW Requires the type of the value to store matches the EEW.
Example: if EEW=32bits, VLEN=128bits (4 32-bit elements per register), vd
= 3, idx
= 5,
the actual vd
= 3 + (idx_from_base / 4) = 4, and
the actual idx
= idx_from_base % 4 = 1.
this would return v4[64:32] (element 1 of v4)
fn load_vreg_elem_int(
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<u128>
[src]
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<u128>
fn store_vreg_elem(
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: TElem
) -> Result<()>
[src]
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: TElem
) -> Result<()>
Store a value in an element in a vertex register group, with specified EEW. Requires the type of the value to store matches the EEW.
Example: if EEW=32bits, VLEN=128bits (4 32-bit elements per register), vd_base
= 3, idx_from_base
= 5,
the actual vd
= 3 + (idx_from_base / 4) = 4, and
the actual idx
= idx_from_base % 4 = 1.
This would store val
into v4[64:32] (element 1 of v4)
fn store_vreg_elem_int(
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: u128
) -> Result<()>
[src]
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: u128
) -> Result<()>
fn load_vreg(&mut self, vs: u8) -> Result<TElem>
[src]
fn load_vreg_int(&mut self, vs: u8) -> Result<u128>
[src]
fn store_vreg(&mut self, vs: u8, val: TElem) -> Result<()>
[src]
fn store_vreg_int(&mut self, vs: u8, val: u128) -> Result<()>
[src]
fn seg_masked_out(&self, vm: bool, i: u32) -> bool
[src]
Returns true if the mask is enabled and element i
has been masked out, e.g. that it should not be touched.
fn dump(&self)
[src]
fn reset(&mut self)
[src]
Implementors
impl VectorRegisterFile<SafeTaggedCap> for CheriVectorRegisterFile
[src]
impl VectorRegisterFile<SafeTaggedCap> for CheriVectorRegisterFile
[src]fn load_vreg(&mut self, vs: u8) -> Result<SafeTaggedCap>
[src]
fn load_vreg_int(&mut self, vs: u8) -> Result<u128>
[src]
fn store_vreg(&mut self, vd: u8, val: SafeTaggedCap) -> Result<()>
[src]
fn store_vreg_int(&mut self, vd: u8, val: u128) -> Result<()>
[src]
fn load_vreg_elem(
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<SafeTaggedCap>
[src]
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<SafeTaggedCap>
fn load_vreg_elem_int(
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<u128>
[src]
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<u128>
fn store_vreg_elem(
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: SafeTaggedCap
) -> Result<()>
[src]
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: SafeTaggedCap
) -> Result<()>
fn store_vreg_elem_int(
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: u128
) -> Result<()>
[src]
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: u128
) -> Result<()>
fn seg_masked_out(&self, vm: bool, i: u32) -> bool
[src]
fn dump(&self)
[src]
fn reset(&mut self)
[src]
impl VectorRegisterFile<u128> for IntVectorRegisterFile
[src]
impl VectorRegisterFile<u128> for IntVectorRegisterFile
[src]fn load_vreg_elem(
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<u128>
[src]
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<u128>
fn load_vreg_elem_int(
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<u128>
[src]
&self,
eew: Sew,
vd_base: u8,
idx_from_base: u32
) -> Result<u128>
fn store_vreg_elem(
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: u128
) -> Result<()>
[src]
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: u128
) -> Result<()>
fn store_vreg_elem_int(
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: u128
) -> Result<()>
[src]
&mut self,
eew: Sew,
vd_base: u8,
idx_from_base: u32,
val: u128
) -> Result<()>