1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use once_cell::sync::Lazy;
use RV32FRegister::*;

pub use super::super::super::basic::parser::oplist::RISCVOpdSet;
use super::{
    super::{
        super::basic::{interface::parser::ParserRISCVInstOp, parser::oplist::*},
        constants::{RV32FInstruction, RV32FRegister},
    },
    lexer::RV32FOpToken,
};
use crate::utility::enum_map::build_map_mut_data;

pub static OP_LIST: Lazy<Vec<Vec<RISCVOpdSet>>> = Lazy::new(|| {
    let mut op_def = [
        (RV32FOpToken::FaddS, vec![]),
        (RV32FOpToken::FclassS, vec![]),
        (RV32FOpToken::FcvtSW, vec![]),
        (RV32FOpToken::FcvtSWu, vec![]),
        (RV32FOpToken::FcvtWS, vec![]),
        (RV32FOpToken::FcvtWuS, vec![]),
        (RV32FOpToken::FdivS, vec![]),
        (RV32FOpToken::FeqS, vec![]),
        (RV32FOpToken::FleS, vec![]),
        (RV32FOpToken::FltS, vec![]),
        (RV32FOpToken::Flw, vec![]),
        (RV32FOpToken::FmaddS, vec![]),
        (RV32FOpToken::FmaxS, vec![]),
        (RV32FOpToken::FminS, vec![]),
        (RV32FOpToken::FmsubS, vec![]),
        (RV32FOpToken::FmulS, vec![]),
        (RV32FOpToken::FmvSX, vec![]),
        (RV32FOpToken::FmvXS, vec![]),
        (RV32FOpToken::FnmaddS, vec![]),
        (RV32FOpToken::FnmsubS, vec![]),
        (RV32FOpToken::FsgnjS, vec![]),
        (RV32FOpToken::FsgnjnS, vec![]),
        (RV32FOpToken::FsgnjxS, vec![]),
        (RV32FOpToken::FsqrtS, vec![]),
        (RV32FOpToken::FsubS, vec![]),
        (RV32FOpToken::Fsw, vec![]),
        (RV32FOpToken::FabsS, vec![]),
        (RV32FOpToken::FgeS, vec![]),
        (RV32FOpToken::FgtS, vec![]),
        (RV32FOpToken::FmvS, vec![]),
        (RV32FOpToken::FmvWX, vec![]),
        (RV32FOpToken::FmvXW, vec![]),
        (RV32FOpToken::FnegS, vec![]),
        // (RV32FOpToken::FaddD, vec![]),
        // (RV32FOpToken::FclassD, vec![]),
        // (RV32FOpToken::FcvtDS, vec![]),
        // (RV32FOpToken::FcvtDW, vec![]),
        // (RV32FOpToken::FcvtDWu, vec![]),
        // (RV32FOpToken::FcvtSD, vec![]),
        // (RV32FOpToken::FcvtWD, vec![]),
        // (RV32FOpToken::FcvtWuD, vec![]),
        // (RV32FOpToken::FdivD, vec![]),
        // (RV32FOpToken::FeqD, vec![]),
        // (RV32FOpToken::Fld, vec![]),
        // (RV32FOpToken::FleD, vec![]),
        // (RV32FOpToken::FltD, vec![]),
        // (RV32FOpToken::FmaddD, vec![]),
        // (RV32FOpToken::FmaxD, vec![]),
        // (RV32FOpToken::FminD, vec![]),
        // (RV32FOpToken::FmsubD, vec![]),
        // (RV32FOpToken::FmulD, vec![]),
        // (RV32FOpToken::FnmaddD, vec![]),
        // (RV32FOpToken::FnmsubD, vec![]),
        // (RV32FOpToken::Fsd, vec![]),
        // (RV32FOpToken::FsgnjD, vec![]),
        // (RV32FOpToken::FsgnjnD, vec![]),
        // (RV32FOpToken::FsgnjxD, vec![]),
        // (RV32FOpToken::FsqrtD, vec![]),
        // (RV32FOpToken::FsubD, vec![]),
        // (RV32FOpToken::FabsD, vec![]),
        // (RV32FOpToken::FgeD, vec![]),
        // (RV32FOpToken::FgtD, vec![]),
        // (RV32FOpToken::FmvD, vec![]),
        // (RV32FOpToken::FnegD, vec![]),
        (RV32FOpToken::Frcsr, vec![]),
        (RV32FOpToken::Frflags, vec![]),
        (RV32FOpToken::Frrm, vec![]),
        (RV32FOpToken::Frsr, vec![]),
        (RV32FOpToken::Fsflags, vec![]),
        (RV32FOpToken::Fsrm, vec![]),
        (RV32FOpToken::Fsrr, vec![]),
    ];
    build_map_mut_data(&mut op_def, |def| (def.0, std::mem::take(&mut def.1)))
});