ab_riscv_interpreter/
b_64_ext.rs

1//! RV64 B extension
2
3pub mod zba_64_ext;
4pub mod zbb_64_ext;
5pub mod zbc_64_ext;
6pub mod zbs_64_ext;
7
8use crate::b_64_ext::zba_64_ext::execute_zba_64_ext;
9use crate::b_64_ext::zbb_64_ext::execute_zbb_64_ext;
10use crate::b_64_ext::zbc_64_ext::execute_zbc_64_ext;
11use crate::b_64_ext::zbs_64_ext::execute_zbs_64_ext;
12use ab_riscv_primitives::instruction::b_64_ext::BZbc64ExtInstruction;
13use ab_riscv_primitives::registers::{Register, Registers};
14
15/// Execute instructions from B (Zba + Zbb + Zbs) + Zbc extensions
16#[inline(always)]
17pub fn execute_b_zbc_64_ext<Reg>(regs: &mut Registers<Reg>, instruction: BZbc64ExtInstruction<Reg>)
18where
19    Reg: Register<Type = u64>,
20    [(); Reg::N]:,
21{
22    match instruction {
23        BZbc64ExtInstruction::Zba(instruction) => execute_zba_64_ext(regs, instruction),
24        BZbc64ExtInstruction::Zbb(instruction) => execute_zbb_64_ext(regs, instruction),
25        BZbc64ExtInstruction::Zbc(instruction) => execute_zbc_64_ext(regs, instruction),
26        BZbc64ExtInstruction::Zbs(instruction) => execute_zbs_64_ext(regs, instruction),
27    }
28}