riscy_isa/opcode/
amo_function.rs1#[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}