Skip to main content

ab_riscv_interpreter/v/
zvexx.rs

1//! ZveXx extension
2
3pub mod arith;
4pub mod carry;
5pub mod config;
6pub mod fixed_point;
7pub mod load;
8pub mod mask;
9pub mod muldiv;
10pub mod perm;
11pub mod reduction;
12pub mod store;
13pub mod widen_narrow;
14pub mod zvexx_helpers;
15
16use crate::v::vector_registers::{VectorRegisters, VectorRegistersExt};
17use crate::v::zvexx::arith::zvexx_arith_helpers;
18use crate::v::zvexx::carry::zvexx_carry_helpers;
19use crate::v::zvexx::config::zvexx_config_helpers;
20use crate::v::zvexx::fixed_point::zvexx_fixed_point_helpers;
21use crate::v::zvexx::load::zvexx_load_helpers;
22use crate::v::zvexx::mask::zvexx_mask_helpers;
23use crate::v::zvexx::muldiv::zvexx_muldiv_helpers;
24use crate::v::zvexx::perm::zvexx_perm_helpers;
25use crate::v::zvexx::reduction::zvexx_reduction_helpers;
26use crate::v::zvexx::store::zvexx_store_helpers;
27use crate::v::zvexx::widen_narrow::zvexx_widen_narrow_helpers;
28use crate::zicsr::zicsr_helpers;
29use crate::{
30    CsrError, Csrs, ExecutableInstruction, ExecutableInstructionCsr, ExecutableInstructionOperands,
31    ExecutionError, ExecutionResult, FetchInstructionResult, InstructionFetcher,
32    OpaqueThreadedExecutionResult, PackedAddress, ProgramCounter, RegisterFile,
33    Rs1Rs2OperandValues, Rs1Rs2Operands, ThreadedExecutableInstruction, ThreadedExecutionResult,
34    VirtualMemory,
35};
36use ab_riscv_macros::instruction_execution;
37use ab_riscv_primitives::prelude::*;
38
39#[instruction_execution]
40const impl<Reg, Hart> ExecutableInstructionOperands for ZveXxInstruction<Hart>
41where
42    Reg: Register,
43    Hart: VectorHartConfig<Reg = Reg>,
44{
45}
46
47#[instruction_execution]
48const impl<Reg, Hart, Env> ExecutableInstructionCsr<Env> for ZveXxInstruction<Hart>
49where
50    Reg: Register,
51    Hart: VectorHartConfig<Reg = Reg>,
52{
53}
54
55#[instruction_execution]
56impl<Reg, Hart, Regs, Env, Memory, PC> ExecutableInstruction<Regs, Env, Memory, PC>
57    for ZveXxInstruction<Hart>
58where
59    Reg: Register,
60    Hart: VectorHartConfig<Reg = Reg>,
61{
62    #[inline(always)]
63    #[cfg_attr(feature = "no-panic", no_panic_const::no_panic)]
64    fn execute(
65        self,
66        Rs1Rs2OperandValues {
67            rs1_value,
68            rs2_value,
69        }: Rs1Rs2OperandValues<Reg::Type>,
70        _regs: &mut Regs,
71        env: &mut Env,
72        memory: &mut Memory,
73        program_counter: &PC,
74    ) -> ExecutionResult<Reg> {
75        ExecutionResult::ContinueNoWrite
76    }
77}