@@ -38,6 +38,9 @@ use octez_riscv_data::components::atom::EncodeAtomMode;
3838use octez_riscv_data:: components:: data_space:: CloneDataSpaceMode ;
3939use octez_riscv_data:: components:: data_space:: DataSpaceMode ;
4040use octez_riscv_data:: components:: data_space:: EncodeDataSpaceMode ;
41+ use octez_riscv_data:: components:: vector:: CloneVectorMode ;
42+ use octez_riscv_data:: components:: vector:: EncodeVectorMode ;
43+ use octez_riscv_data:: components:: vector:: VectorMode ;
4144use octez_riscv_data:: foldable:: Fold ;
4245use octez_riscv_data:: foldable:: Foldable ;
4346use octez_riscv_data:: foldable:: NodeFold ;
@@ -105,7 +108,7 @@ impl<MC: memory::MemoryConfig, M: Mode> MachineCoreState<MC, M> {
105108 /// Reset the machine state.
106109 pub fn reset ( & mut self , listener : impl MemoryGovernanceListener )
107110 where
108- M : AtomMode + DataSpaceMode ,
111+ M : AtomMode + DataSpaceMode + VectorMode ,
109112 {
110113 self . hart . reset ( memory:: FIRST_ADDRESS ) ;
111114 self . main_memory . reset ( listener) ;
@@ -119,7 +122,7 @@ impl<MC: memory::MemoryConfig, M: Mode> MachineCoreState<MC, M> {
119122 phys_addr : Address ,
120123 ) -> Result < memory:: InstructionData < u16 > , Exception >
121124 where
122- M : AtomMode + DataSpaceMode ,
125+ M : AtomMode + DataSpaceMode + VectorMode ,
123126 {
124127 self . main_memory
125128 . read_exec ( phys_addr)
@@ -132,7 +135,7 @@ impl<MC: memory::MemoryConfig, M: Mode> MachineCoreState<MC, M> {
132135 #[ inline]
133136 fn fetch_instr ( & self , addr : Address ) -> Result < memory:: InstructionData < Instruction > , Exception >
134137 where
135- M : AtomMode + DataSpaceMode ,
138+ M : AtomMode + DataSpaceMode + VectorMode ,
136139 {
137140 let lower = self . fetch_instr_halfword ( addr) ?;
138141
@@ -229,7 +232,9 @@ where
229232pub const RISCV_ABI_SP_ALIGNMENT : NonZeroU64 =
230233 NonZeroU64 :: new ( 16 ) . expect ( "Alignment must be non-zero" ) ;
231234
232- impl < MC : memory:: MemoryConfig , M : AtomMode + DataSpaceMode > Default for MachineCoreState < MC , M > {
235+ impl < MC : memory:: MemoryConfig , M : AtomMode + DataSpaceMode + VectorMode > Default
236+ for MachineCoreState < MC , M >
237+ {
233238 fn default ( ) -> Self {
234239 Self {
235240 hart : HartState :: default ( ) ,
@@ -251,7 +256,7 @@ impl<'normal, MC: memory::MemoryConfig> Provable<'normal> for MachineCoreState<M
251256 }
252257}
253258
254- impl < MC : memory:: MemoryConfig , M : CloneAtomMode + CloneDataSpaceMode > Clone
259+ impl < MC : memory:: MemoryConfig , M : CloneAtomMode + CloneVectorMode + CloneDataSpaceMode > Clone
255260 for MachineCoreState < MC , M >
256261{
257262 fn clone ( & self ) -> Self {
@@ -263,7 +268,7 @@ impl<MC: memory::MemoryConfig, M: CloneAtomMode + CloneDataSpaceMode> Clone
263268 }
264269}
265270
266- impl < MC : memory:: MemoryConfig , M : CloneAtomMode + CloneDataSpaceMode > CloneState
271+ impl < MC : memory:: MemoryConfig , M : CloneAtomMode + CloneVectorMode + CloneDataSpaceMode > CloneState
267272 for MachineCoreState < MC , M >
268273{
269274 fn clone_state ( & self ) -> Self {
@@ -275,7 +280,7 @@ impl<MC: memory::MemoryConfig, M: CloneAtomMode + CloneDataSpaceMode> CloneState
275280 }
276281}
277282
278- impl < MC : memory:: MemoryConfig , M : EncodeAtomMode + EncodeDataSpaceMode > Encode
283+ impl < MC : memory:: MemoryConfig , M : EncodeAtomMode + EncodeDataSpaceMode + EncodeVectorMode > Encode
279284 for MachineCoreState < MC , M >
280285{
281286 fn encode < E : Encoder > ( & self , encoder : & mut E ) -> Result < ( ) , EncodeError > {
@@ -307,8 +312,11 @@ pub struct MachineState<MC: memory::MemoryConfig, PC, M: Mode> {
307312 pub page_cache : PC ,
308313}
309314
310- impl < MC : memory:: MemoryConfig , PC : PageCache < MC , M > , M : CloneAtomMode + CloneDataSpaceMode > Clone
311- for MachineState < MC , PC , M >
315+ impl <
316+ MC : memory:: MemoryConfig ,
317+ PC : PageCache < MC , M > ,
318+ M : CloneAtomMode + CloneVectorMode + CloneDataSpaceMode ,
319+ > Clone for MachineState < MC , PC , M >
312320{
313321 // TODO: RV-806: implement Clone on PageCache
314322 fn clone ( & self ) -> Self {
@@ -332,8 +340,11 @@ impl<'normal, MC: memory::MemoryConfig, PC: PageCache<MC, Normal>> Provable<'nor
332340 }
333341}
334342
335- impl < MC : memory:: MemoryConfig , PC : PageCache < MC , M > , M : CloneAtomMode + CloneDataSpaceMode >
336- CloneState for MachineState < MC , PC , M >
343+ impl <
344+ MC : memory:: MemoryConfig ,
345+ PC : PageCache < MC , M > ,
346+ M : CloneAtomMode + CloneVectorMode + CloneDataSpaceMode ,
347+ > CloneState for MachineState < MC , PC , M >
337348{
338349 fn clone_state ( & self ) -> Self {
339350 Self {
@@ -378,7 +389,7 @@ impl<MC, PC, M> Encode for MachineState<MC, PC, M>
378389where
379390 MC : MemoryConfig ,
380391 PC : PageCache < MC , M > ,
381- M : EncodeAtomMode + EncodeDataSpaceMode ,
392+ M : EncodeAtomMode + EncodeDataSpaceMode + EncodeVectorMode ,
382393{
383394 fn encode < E : Encoder > ( & self , encoder : & mut E ) -> Result < ( ) , EncodeError > {
384395 self . core . encode ( encoder)
@@ -468,8 +479,8 @@ impl<E> Default for StepManyResult<E> {
468479 }
469480}
470481
471- impl < MC : memory:: MemoryConfig , PC : PageCache < MC , M > , M : AtomMode + DataSpaceMode > Default
472- for MachineState < MC , PC , M >
482+ impl < MC : memory:: MemoryConfig , PC : PageCache < MC , M > , M : AtomMode + DataSpaceMode + VectorMode >
483+ Default for MachineState < MC , PC , M >
473484{
474485 fn default ( ) -> Self {
475486 Self {
@@ -483,7 +494,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
483494 /// Reset the machine state.
484495 pub fn reset ( & mut self )
485496 where
486- M : AtomMode + DataSpaceMode ,
497+ M : AtomMode + DataSpaceMode + VectorMode ,
487498 {
488499 let listener = & mut self . page_cache ;
489500 self . core . reset ( listener) ;
@@ -506,7 +517,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
506517 /// *not* writable.
507518 fn run_instr_at ( & mut self , addr : Address ) -> Result < ProgramCounterUpdate < Address > , Exception >
508519 where
509- M : AtomMode + DataSpaceMode ,
520+ M : AtomMode + DataSpaceMode + VectorMode ,
510521 {
511522 let memory:: InstructionData {
512523 data : instr,
@@ -531,7 +542,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
531542 #[ inline]
532543 pub fn step ( & mut self ) -> Result < ( ) , Exception >
533544 where
534- M : AtomMode + DataSpaceMode ,
545+ M : AtomMode + DataSpaceMode + VectorMode ,
535546 {
536547 match self . step_max_inner ( 1 ) . error {
537548 Some ( error) => Err ( error) ,
@@ -541,7 +552,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
541552
542553 pub ( super ) fn step_max_inner ( & mut self , max_steps : usize ) -> StepManyResult < Exception >
543554 where
544- M : AtomMode + DataSpaceMode ,
555+ M : AtomMode + DataSpaceMode + VectorMode ,
545556 {
546557 let mut result = StepManyResult :: ZERO ;
547558
@@ -583,7 +594,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
583594 #[ inline]
584595 pub fn step_max ( & mut self , max_steps : Bound < usize > ) -> StepManyResult < Exception >
585596 where
586- M : AtomMode + DataSpaceMode ,
597+ M : AtomMode + DataSpaceMode + VectorMode ,
587598 {
588599 let mut result = StepManyResult :: ZERO ;
589600
@@ -614,7 +625,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
614625 mut handle : impl FnMut ( & mut Self ) -> ControlFlow < E > ,
615626 ) -> StepManyResult < E >
616627 where
617- M : AtomMode + DataSpaceMode ,
628+ M : AtomMode + DataSpaceMode + VectorMode ,
618629 {
619630 let mut steps = 0usize ;
620631
@@ -652,7 +663,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
652663 mut handle : impl FnMut ( & mut Self ) -> ControlFlow < E > ,
653664 ) -> ControlFlow < E >
654665 where
655- M : AtomMode + DataSpaceMode ,
666+ M : AtomMode + DataSpaceMode + VectorMode ,
656667 {
657668 match cause {
658669 Exception :: EnvCall => return handle ( self ) ,
@@ -701,7 +712,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
701712 handle : impl FnMut ( & mut Self ) -> ControlFlow < E > ,
702713 ) -> ControlFlow < E >
703714 where
704- M : AtomMode + DataSpaceMode ,
715+ M : AtomMode + DataSpaceMode + VectorMode ,
705716 {
706717 let instr_pc = self . core . hart . pc . read ( ) ;
707718 let result = self
@@ -740,7 +751,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
740751 program : & Program < MC > ,
741752 ) -> Result < ( Address , Address ) , MachineError >
742753 where
743- M : AtomMode + DataSpaceMode ,
754+ M : AtomMode + DataSpaceMode + VectorMode ,
744755 {
745756 let program_start = program. segments . keys ( ) . min ( ) . copied ( ) . unwrap_or ( 0 ) ;
746757 let program_end = program
@@ -797,7 +808,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
797808
798809 fn dispatch_signal_or_trap ( & mut self , signal : Signal )
799810 where
800- M : AtomMode + DataSpaceMode ,
811+ M : AtomMode + DataSpaceMode + VectorMode ,
801812 {
802813 if self . core . dispatch_signal ( signal) . is_err ( ) {
803814 self . core . hart . pc . write ( 0 ) ;
@@ -810,7 +821,7 @@ impl<MC: memory::MemoryConfig, PC: PageCache<MC, M>, M: Mode> MachineState<MC, P
810821 ) where
811822 MB : memory:: buddy:: Buddy < M > ,
812823 MC : MemoryConfig < State < M > = memory:: state:: MemoryImpl < PAGES , TOTAL_BYTES , MB , M > > ,
813- M : AtomMode + DataSpaceMode ,
824+ M : AtomMode + DataSpaceMode + VectorMode ,
814825 {
815826 let ( main_memory, listener) = self . memory_with_listener ( ) ;
816827 main_memory. set_all_readable_writeable ( listener) ;
0 commit comments