use strum_macros::{IntoStaticStr, VariantArray};
use super::{super::super::basic::parser::lexer::RISCVOpToken, oplist::OP_LIST};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, VariantArray, IntoStaticStr)]
#[strum(serialize_all = "snake_case")]
pub enum RV32IOpToken {
Add,
Addi,
And,
Andi,
Auipc,
Beq,
Bge,
Bgeu,
Blt,
Bltu,
Bne,
Csrrc,
Csrrci,
Csrrs,
Csrrsi,
Csrrw,
Csrrwi,
Div,
Divu,
Ebreak,
Ecall,
Fence,
FenceI,
Jal,
Jalr,
Lb,
Lbu,
Lh,
Lhu,
Lui,
Lw,
Mul,
Mulh,
Mulhsu,
Mulhu,
Or,
Ori,
Rem,
Remu,
Sb,
Sh,
Sll,
Slli,
Slt,
Slti,
Sltiu,
Sltu,
Sra,
Srai,
Srl,
Srli,
Sub,
Sw,
Uret,
Wfi,
Xor,
Xori,
B,
Beqz,
Bgez,
Bgt,
Bgtu,
Bgtz,
Ble,
Bleu,
Blez,
Bltz,
Bnez,
Call,
Csrc,
Csrci,
Csrr,
Csrs,
Csrsi,
Csrw,
Csrwi,
J,
Jr,
La,
Li,
Mv,
Neg,
Nop,
Not,
Rdcycle,
Rdcycleh,
Rdinstret,
Rdinstreth,
Rdtime,
Rdtimeh,
Ret,
Seqz,
SextB,
SextH,
Sgt,
Sgtu,
Sgtz,
Sltz,
Snez,
Tail,
ZextB,
ZextH,
}
impl RV32IOpToken {
pub fn name(&self) -> String {
Into::<&'static str>::into(self).replace("_", ".")
}
}
impl From<RV32IOpToken> for RISCVOpToken {
fn from(op: RV32IOpToken) -> RISCVOpToken {
RISCVOpToken {
val: op as u8,
get_opd_set_fn: |v| &OP_LIST[v as usize],
}
}
}