summaryrefslogtreecommitdiff
path: root/src/instructions/gen_tools.rs
blob: ad9ad622aec4fa3bb3abab749b12da4af6be246d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use std::hint::unreachable_unchecked;

use crate::instructions::{OpcodeHandler, Splitter};

pub fn insert_funct3_splitter(splitter: &mut Option<Splitter>) -> &mut [OpcodeHandler; 8] {
    match splitter {
        Some(Splitter::Funct3Splitter(s)) => s.as_mut(),
        Some(_) => panic!("Unexpected splitter variant"),
        None => {
            *splitter = Some(Splitter::Funct3Splitter(Box::new(std::array::from_fn(
                |_i| OpcodeHandler {
                    handler: None,
                    splitter: None,
                },
            ))));
            match splitter {
                Some(Splitter::Funct3Splitter(s)) => s.as_mut(),
                _ => unsafe { unreachable_unchecked() },
            }
        }
    }
}