Skip to main content

ab_riscv_primitives/instructions/rv64/zk/
zkn.rs

1//! RV64 Zkn extension
2
3pub mod zknd;
4pub mod zkne;
5pub mod zknh;
6
7use crate::hart::HartConfig;
8use crate::instructions::rv64::b::zbb::Rv64ZbbZbkbSharedInstruction;
9use crate::instructions::rv64::zk::zbkb::Rv64ZbkbInstruction;
10use crate::instructions::rv64::zk::zbkc::Rv64ZbkcInstruction;
11use crate::instructions::rv64::zk::zbkx::Rv64ZbkxInstruction;
12use crate::instructions::rv64::zk::zkn::zknd::{
13    Rv64ZkndInstruction, Rv64ZkndKsRnum, Rv64ZkndZkneSharedInstruction,
14};
15use crate::instructions::rv64::zk::zkn::zkne::Rv64ZkneInstruction;
16use crate::instructions::rv64::zk::zkn::zknh::Rv64ZknhInstruction;
17use crate::instructions::utils::Shamt;
18use crate::instructions::{ImplementedExtension, Instruction, IsaExtension};
19use crate::registers::general_purpose::Register;
20use ab_riscv_macros::instruction;
21use core::fmt;
22
23/// RISC-V RV64 Zkn (Zbkb + Zbkc + Zbkx + Zknd + Zkne + Zknh) instruction
24#[instruction(
25    inherit = [
26        Rv64ZbkbInstruction,
27        Rv64ZbkcInstruction,
28        Rv64ZbkxInstruction,
29        Rv64ZkndInstruction,
30        Rv64ZkneInstruction,
31        Rv64ZknhInstruction,
32    ]
33)]
34#[derive(Debug, Clone, Copy)]
35#[derive_const(PartialEq, Eq)]
36pub enum Rv64ZknInstruction<Hart>
37where
38    Hart: HartConfig, {}
39
40#[instruction]
41const impl<Reg, Hart> Instruction for Rv64ZknInstruction<Hart>
42where
43    Reg: [const] Register<Type = u64>,
44    Hart: [const] HartConfig<Reg = Reg>,
45{
46    const OWN_ISA_EXTENSIONS: &'static [IsaExtension] = &[IsaExtension::new("zkn", 1, 0)];
47
48    const ALIGNMENT: u8 = align_of::<u32>() as u8;
49
50    type Hart = Hart;
51
52    #[inline(always)]
53    #[cfg_attr(feature = "no-panic", no_panic_const::no_panic(const))]
54    fn try_decode(instruction: u32) -> Option<Self> {
55        None
56    }
57
58    #[inline(always)]
59    fn size(&self) -> u8 {
60        size_of::<u32>() as u8
61    }
62}
63
64#[instruction]
65impl<Reg, Hart> fmt::Display for Rv64ZknInstruction<Hart>
66where
67    Reg: fmt::Display + Copy,
68    Hart: HartConfig<Reg = Reg>,
69{
70    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
71        match self {}
72    }
73}