riscy_isa/opcode/
amo_function.rs

1#[derive(Copy, Clone, Debug, PartialEq)]
2pub enum AmoFunction {
3    LR,
4    SC,
5    SWAP,
6    ADD,
7    AND,
8    OR,
9    XOR,
10    MAX,
11    MIN,
12    MAXU,
13    MINU,
14}
15
16impl AmoFunction {
17    pub fn from_func5(func5: u8) -> Self {
18        match func5 {
19            0b00010 => AmoFunction::LR,
20            0b00011 => AmoFunction::SC,
21            0b00001 => AmoFunction::SWAP,
22            0b00000 => AmoFunction::ADD,
23            0b00100 => AmoFunction::XOR,
24            0b01100 => AmoFunction::AND,
25            0b01000 => AmoFunction::OR,
26            0b10000 => AmoFunction::MIN,
27            0b10100 => AmoFunction::MAX,
28            0b11100 => AmoFunction::MAXU,
29            0b11000 => AmoFunction::MINU,
30            _ => unimplemented!("AMO function {:#05b}", func5),
31        }
32    }
33}