use crate::register_descriptors::RegisterDescriptor;
use crate::registers_meta::IntRegisterConversionError;
use core::ops::Index;
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[allow(non_camel_case_types)]
#[allow(clippy::exhaustive_enums)]
pub enum R4000AllegrexM3x3 {
M000 = 0,
M010 = 1,
M020 = 2,
M030 = 3,
M100 = 4,
M110 = 5,
M120 = 6,
M130 = 7,
M200 = 8,
M210 = 9,
M220 = 10,
M230 = 11,
M300 = 12,
M310 = 13,
M320 = 14,
M330 = 15,
M400 = 16,
M410 = 17,
M420 = 18,
M430 = 19,
M500 = 20,
M510 = 21,
M520 = 22,
M530 = 23,
M600 = 24,
M610 = 25,
M620 = 26,
M630 = 27,
M700 = 28,
M710 = 29,
M720 = 30,
M730 = 31,
E000 = 32,
E001 = 33,
E002 = 34,
E003 = 35,
E100 = 36,
E101 = 37,
E102 = 38,
E103 = 39,
E200 = 40,
E201 = 41,
E202 = 42,
E203 = 43,
E300 = 44,
E301 = 45,
E302 = 46,
E303 = 47,
E400 = 48,
E401 = 49,
E402 = 50,
E403 = 51,
E500 = 52,
E501 = 53,
E502 = 54,
E503 = 55,
E600 = 56,
E601 = 57,
E602 = 58,
E603 = 59,
E700 = 60,
E701 = 61,
E702 = 62,
E703 = 63,
M001 = 64,
M011 = 65,
M021 = 66,
M031 = 67,
M101 = 68,
M111 = 69,
M121 = 70,
M131 = 71,
M201 = 72,
M211 = 73,
M221 = 74,
M231 = 75,
M301 = 76,
M311 = 77,
M321 = 78,
M331 = 79,
M401 = 80,
M411 = 81,
M421 = 82,
M431 = 83,
M501 = 84,
M511 = 85,
M521 = 86,
M531 = 87,
M601 = 88,
M611 = 89,
M621 = 90,
M631 = 91,
M701 = 92,
M711 = 93,
M721 = 94,
M731 = 95,
E010 = 96,
E011 = 97,
E012 = 98,
E013 = 99,
E110 = 100,
E111 = 101,
E112 = 102,
E113 = 103,
E210 = 104,
E211 = 105,
E212 = 106,
E213 = 107,
E310 = 108,
E311 = 109,
E312 = 110,
E313 = 111,
E410 = 112,
E411 = 113,
E412 = 114,
E413 = 115,
E510 = 116,
E511 = 117,
E512 = 118,
E513 = 119,
E610 = 120,
E611 = 121,
E612 = 122,
E613 = 123,
E710 = 124,
E711 = 125,
E712 = 126,
E713 = 127,
}
pub static R4000ALLEGREX_M3X3: [RegisterDescriptor; 128] = {
let mut table = [RegisterDescriptor::default(); 128];
table[R4000AllegrexM3x3::M000 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M000", 0, concat!("$", "0"), false)
};
table[R4000AllegrexM3x3::M010 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M010", 1, concat!("$", "1"), false)
};
table[R4000AllegrexM3x3::M020 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M020", 2, concat!("$", "2"), false)
};
table[R4000AllegrexM3x3::M030 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M030", 3, concat!("$", "3"), false)
};
table[R4000AllegrexM3x3::M100 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M100", 4, concat!("$", "4"), false)
};
table[R4000AllegrexM3x3::M110 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M110", 5, concat!("$", "5"), false)
};
table[R4000AllegrexM3x3::M120 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M120", 6, concat!("$", "6"), false)
};
table[R4000AllegrexM3x3::M130 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M130", 7, concat!("$", "7"), false)
};
table[R4000AllegrexM3x3::M200 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M200", 8, concat!("$", "8"), false)
};
table[R4000AllegrexM3x3::M210 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M210", 9, concat!("$", "9"), false)
};
table[R4000AllegrexM3x3::M220 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M220", 10, concat!("$", "10"), false)
};
table[R4000AllegrexM3x3::M230 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M230", 11, concat!("$", "11"), false)
};
table[R4000AllegrexM3x3::M300 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M300", 12, concat!("$", "12"), false)
};
table[R4000AllegrexM3x3::M310 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M310", 13, concat!("$", "13"), false)
};
table[R4000AllegrexM3x3::M320 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M320", 14, concat!("$", "14"), false)
};
table[R4000AllegrexM3x3::M330 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M330", 15, concat!("$", "15"), false)
};
table[R4000AllegrexM3x3::M400 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M400", 16, concat!("$", "16"), false)
};
table[R4000AllegrexM3x3::M410 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M410", 17, concat!("$", "17"), false)
};
table[R4000AllegrexM3x3::M420 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M420", 18, concat!("$", "18"), false)
};
table[R4000AllegrexM3x3::M430 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M430", 19, concat!("$", "19"), false)
};
table[R4000AllegrexM3x3::M500 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M500", 20, concat!("$", "20"), false)
};
table[R4000AllegrexM3x3::M510 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M510", 21, concat!("$", "21"), false)
};
table[R4000AllegrexM3x3::M520 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M520", 22, concat!("$", "22"), false)
};
table[R4000AllegrexM3x3::M530 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M530", 23, concat!("$", "23"), false)
};
table[R4000AllegrexM3x3::M600 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M600", 24, concat!("$", "24"), false)
};
table[R4000AllegrexM3x3::M610 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M610", 25, concat!("$", "25"), false)
};
table[R4000AllegrexM3x3::M620 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M620", 26, concat!("$", "26"), false)
};
table[R4000AllegrexM3x3::M630 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M630", 27, concat!("$", "27"), false)
};
table[R4000AllegrexM3x3::M700 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M700", 28, concat!("$", "28"), false)
};
table[R4000AllegrexM3x3::M710 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M710", 29, concat!("$", "29"), false)
};
table[R4000AllegrexM3x3::M720 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M720", 30, concat!("$", "30"), false)
};
table[R4000AllegrexM3x3::M730 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M730", 31, concat!("$", "31"), false)
};
table[R4000AllegrexM3x3::E000 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E000", 32, concat!("$", "32"), false)
};
table[R4000AllegrexM3x3::E001 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E001", 33, concat!("$", "33"), false)
};
table[R4000AllegrexM3x3::E002 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E002", 34, concat!("$", "34"), false)
};
table[R4000AllegrexM3x3::E003 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E003", 35, concat!("$", "35"), false)
};
table[R4000AllegrexM3x3::E100 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E100", 36, concat!("$", "36"), false)
};
table[R4000AllegrexM3x3::E101 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E101", 37, concat!("$", "37"), false)
};
table[R4000AllegrexM3x3::E102 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E102", 38, concat!("$", "38"), false)
};
table[R4000AllegrexM3x3::E103 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E103", 39, concat!("$", "39"), false)
};
table[R4000AllegrexM3x3::E200 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E200", 40, concat!("$", "40"), false)
};
table[R4000AllegrexM3x3::E201 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E201", 41, concat!("$", "41"), false)
};
table[R4000AllegrexM3x3::E202 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E202", 42, concat!("$", "42"), false)
};
table[R4000AllegrexM3x3::E203 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E203", 43, concat!("$", "43"), false)
};
table[R4000AllegrexM3x3::E300 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E300", 44, concat!("$", "44"), false)
};
table[R4000AllegrexM3x3::E301 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E301", 45, concat!("$", "45"), false)
};
table[R4000AllegrexM3x3::E302 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E302", 46, concat!("$", "46"), false)
};
table[R4000AllegrexM3x3::E303 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E303", 47, concat!("$", "47"), false)
};
table[R4000AllegrexM3x3::E400 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E400", 48, concat!("$", "48"), false)
};
table[R4000AllegrexM3x3::E401 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E401", 49, concat!("$", "49"), false)
};
table[R4000AllegrexM3x3::E402 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E402", 50, concat!("$", "50"), false)
};
table[R4000AllegrexM3x3::E403 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E403", 51, concat!("$", "51"), false)
};
table[R4000AllegrexM3x3::E500 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E500", 52, concat!("$", "52"), false)
};
table[R4000AllegrexM3x3::E501 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E501", 53, concat!("$", "53"), false)
};
table[R4000AllegrexM3x3::E502 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E502", 54, concat!("$", "54"), false)
};
table[R4000AllegrexM3x3::E503 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E503", 55, concat!("$", "55"), false)
};
table[R4000AllegrexM3x3::E600 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E600", 56, concat!("$", "56"), false)
};
table[R4000AllegrexM3x3::E601 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E601", 57, concat!("$", "57"), false)
};
table[R4000AllegrexM3x3::E602 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E602", 58, concat!("$", "58"), false)
};
table[R4000AllegrexM3x3::E603 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E603", 59, concat!("$", "59"), false)
};
table[R4000AllegrexM3x3::E700 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E700", 60, concat!("$", "60"), false)
};
table[R4000AllegrexM3x3::E701 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E701", 61, concat!("$", "61"), false)
};
table[R4000AllegrexM3x3::E702 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E702", 62, concat!("$", "62"), false)
};
table[R4000AllegrexM3x3::E703 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E703", 63, concat!("$", "63"), false)
};
table[R4000AllegrexM3x3::M001 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M001", 64, concat!("$", "64"), false)
};
table[R4000AllegrexM3x3::M011 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M011", 65, concat!("$", "65"), false)
};
table[R4000AllegrexM3x3::M021 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M021", 66, concat!("$", "66"), false)
};
table[R4000AllegrexM3x3::M031 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M031", 67, concat!("$", "67"), false)
};
table[R4000AllegrexM3x3::M101 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M101", 68, concat!("$", "68"), false)
};
table[R4000AllegrexM3x3::M111 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M111", 69, concat!("$", "69"), false)
};
table[R4000AllegrexM3x3::M121 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M121", 70, concat!("$", "70"), false)
};
table[R4000AllegrexM3x3::M131 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M131", 71, concat!("$", "71"), false)
};
table[R4000AllegrexM3x3::M201 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M201", 72, concat!("$", "72"), false)
};
table[R4000AllegrexM3x3::M211 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M211", 73, concat!("$", "73"), false)
};
table[R4000AllegrexM3x3::M221 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M221", 74, concat!("$", "74"), false)
};
table[R4000AllegrexM3x3::M231 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M231", 75, concat!("$", "75"), false)
};
table[R4000AllegrexM3x3::M301 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M301", 76, concat!("$", "76"), false)
};
table[R4000AllegrexM3x3::M311 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M311", 77, concat!("$", "77"), false)
};
table[R4000AllegrexM3x3::M321 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M321", 78, concat!("$", "78"), false)
};
table[R4000AllegrexM3x3::M331 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M331", 79, concat!("$", "79"), false)
};
table[R4000AllegrexM3x3::M401 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M401", 80, concat!("$", "80"), false)
};
table[R4000AllegrexM3x3::M411 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M411", 81, concat!("$", "81"), false)
};
table[R4000AllegrexM3x3::M421 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M421", 82, concat!("$", "82"), false)
};
table[R4000AllegrexM3x3::M431 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M431", 83, concat!("$", "83"), false)
};
table[R4000AllegrexM3x3::M501 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M501", 84, concat!("$", "84"), false)
};
table[R4000AllegrexM3x3::M511 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M511", 85, concat!("$", "85"), false)
};
table[R4000AllegrexM3x3::M521 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M521", 86, concat!("$", "86"), false)
};
table[R4000AllegrexM3x3::M531 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M531", 87, concat!("$", "87"), false)
};
table[R4000AllegrexM3x3::M601 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M601", 88, concat!("$", "88"), false)
};
table[R4000AllegrexM3x3::M611 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M611", 89, concat!("$", "89"), false)
};
table[R4000AllegrexM3x3::M621 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M621", 90, concat!("$", "90"), false)
};
table[R4000AllegrexM3x3::M631 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M631", 91, concat!("$", "91"), false)
};
table[R4000AllegrexM3x3::M701 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M701", 92, concat!("$", "92"), false)
};
table[R4000AllegrexM3x3::M711 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M711", 93, concat!("$", "93"), false)
};
table[R4000AllegrexM3x3::M721 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M721", 94, concat!("$", "94"), false)
};
table[R4000AllegrexM3x3::M731 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("M731", 95, concat!("$", "95"), false)
};
table[R4000AllegrexM3x3::E010 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E010", 96, concat!("$", "96"), false)
};
table[R4000AllegrexM3x3::E011 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E011", 97, concat!("$", "97"), false)
};
table[R4000AllegrexM3x3::E012 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E012", 98, concat!("$", "98"), false)
};
table[R4000AllegrexM3x3::E013 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E013", 99, concat!("$", "99"), false)
};
table[R4000AllegrexM3x3::E110 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E110", 100, concat!("$", "100"), false)
};
table[R4000AllegrexM3x3::E111 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E111", 101, concat!("$", "101"), false)
};
table[R4000AllegrexM3x3::E112 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E112", 102, concat!("$", "102"), false)
};
table[R4000AllegrexM3x3::E113 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E113", 103, concat!("$", "103"), false)
};
table[R4000AllegrexM3x3::E210 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E210", 104, concat!("$", "104"), false)
};
table[R4000AllegrexM3x3::E211 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E211", 105, concat!("$", "105"), false)
};
table[R4000AllegrexM3x3::E212 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E212", 106, concat!("$", "106"), false)
};
table[R4000AllegrexM3x3::E213 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E213", 107, concat!("$", "107"), false)
};
table[R4000AllegrexM3x3::E310 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E310", 108, concat!("$", "108"), false)
};
table[R4000AllegrexM3x3::E311 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E311", 109, concat!("$", "109"), false)
};
table[R4000AllegrexM3x3::E312 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E312", 110, concat!("$", "110"), false)
};
table[R4000AllegrexM3x3::E313 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E313", 111, concat!("$", "111"), false)
};
table[R4000AllegrexM3x3::E410 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E410", 112, concat!("$", "112"), false)
};
table[R4000AllegrexM3x3::E411 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E411", 113, concat!("$", "113"), false)
};
table[R4000AllegrexM3x3::E412 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E412", 114, concat!("$", "114"), false)
};
table[R4000AllegrexM3x3::E413 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E413", 115, concat!("$", "115"), false)
};
table[R4000AllegrexM3x3::E510 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E510", 116, concat!("$", "116"), false)
};
table[R4000AllegrexM3x3::E511 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E511", 117, concat!("$", "117"), false)
};
table[R4000AllegrexM3x3::E512 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E512", 118, concat!("$", "118"), false)
};
table[R4000AllegrexM3x3::E513 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E513", 119, concat!("$", "119"), false)
};
table[R4000AllegrexM3x3::E610 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E610", 120, concat!("$", "120"), false)
};
table[R4000AllegrexM3x3::E611 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E611", 121, concat!("$", "121"), false)
};
table[R4000AllegrexM3x3::E612 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E612", 122, concat!("$", "122"), false)
};
table[R4000AllegrexM3x3::E613 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E613", 123, concat!("$", "123"), false)
};
table[R4000AllegrexM3x3::E710 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E710", 124, concat!("$", "124"), false)
};
table[R4000AllegrexM3x3::E711 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E711", 125, concat!("$", "125"), false)
};
table[R4000AllegrexM3x3::E712 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E712", 126, concat!("$", "126"), false)
};
table[R4000AllegrexM3x3::E713 as usize] = RegisterDescriptor {
..RegisterDescriptor::new("E713", 127, concat!("$", "127"), false)
};
table
};
impl R4000AllegrexM3x3 {
pub const fn try_from_u32(value: u32) -> Result<Self, IntRegisterConversionError> {
match value {
0 => Ok(Self::M000),
1 => Ok(Self::M010),
2 => Ok(Self::M020),
3 => Ok(Self::M030),
4 => Ok(Self::M100),
5 => Ok(Self::M110),
6 => Ok(Self::M120),
7 => Ok(Self::M130),
8 => Ok(Self::M200),
9 => Ok(Self::M210),
10 => Ok(Self::M220),
11 => Ok(Self::M230),
12 => Ok(Self::M300),
13 => Ok(Self::M310),
14 => Ok(Self::M320),
15 => Ok(Self::M330),
16 => Ok(Self::M400),
17 => Ok(Self::M410),
18 => Ok(Self::M420),
19 => Ok(Self::M430),
20 => Ok(Self::M500),
21 => Ok(Self::M510),
22 => Ok(Self::M520),
23 => Ok(Self::M530),
24 => Ok(Self::M600),
25 => Ok(Self::M610),
26 => Ok(Self::M620),
27 => Ok(Self::M630),
28 => Ok(Self::M700),
29 => Ok(Self::M710),
30 => Ok(Self::M720),
31 => Ok(Self::M730),
32 => Ok(Self::E000),
33 => Ok(Self::E001),
34 => Ok(Self::E002),
35 => Ok(Self::E003),
36 => Ok(Self::E100),
37 => Ok(Self::E101),
38 => Ok(Self::E102),
39 => Ok(Self::E103),
40 => Ok(Self::E200),
41 => Ok(Self::E201),
42 => Ok(Self::E202),
43 => Ok(Self::E203),
44 => Ok(Self::E300),
45 => Ok(Self::E301),
46 => Ok(Self::E302),
47 => Ok(Self::E303),
48 => Ok(Self::E400),
49 => Ok(Self::E401),
50 => Ok(Self::E402),
51 => Ok(Self::E403),
52 => Ok(Self::E500),
53 => Ok(Self::E501),
54 => Ok(Self::E502),
55 => Ok(Self::E503),
56 => Ok(Self::E600),
57 => Ok(Self::E601),
58 => Ok(Self::E602),
59 => Ok(Self::E603),
60 => Ok(Self::E700),
61 => Ok(Self::E701),
62 => Ok(Self::E702),
63 => Ok(Self::E703),
64 => Ok(Self::M001),
65 => Ok(Self::M011),
66 => Ok(Self::M021),
67 => Ok(Self::M031),
68 => Ok(Self::M101),
69 => Ok(Self::M111),
70 => Ok(Self::M121),
71 => Ok(Self::M131),
72 => Ok(Self::M201),
73 => Ok(Self::M211),
74 => Ok(Self::M221),
75 => Ok(Self::M231),
76 => Ok(Self::M301),
77 => Ok(Self::M311),
78 => Ok(Self::M321),
79 => Ok(Self::M331),
80 => Ok(Self::M401),
81 => Ok(Self::M411),
82 => Ok(Self::M421),
83 => Ok(Self::M431),
84 => Ok(Self::M501),
85 => Ok(Self::M511),
86 => Ok(Self::M521),
87 => Ok(Self::M531),
88 => Ok(Self::M601),
89 => Ok(Self::M611),
90 => Ok(Self::M621),
91 => Ok(Self::M631),
92 => Ok(Self::M701),
93 => Ok(Self::M711),
94 => Ok(Self::M721),
95 => Ok(Self::M731),
96 => Ok(Self::E010),
97 => Ok(Self::E011),
98 => Ok(Self::E012),
99 => Ok(Self::E013),
100 => Ok(Self::E110),
101 => Ok(Self::E111),
102 => Ok(Self::E112),
103 => Ok(Self::E113),
104 => Ok(Self::E210),
105 => Ok(Self::E211),
106 => Ok(Self::E212),
107 => Ok(Self::E213),
108 => Ok(Self::E310),
109 => Ok(Self::E311),
110 => Ok(Self::E312),
111 => Ok(Self::E313),
112 => Ok(Self::E410),
113 => Ok(Self::E411),
114 => Ok(Self::E412),
115 => Ok(Self::E413),
116 => Ok(Self::E510),
117 => Ok(Self::E511),
118 => Ok(Self::E512),
119 => Ok(Self::E513),
120 => Ok(Self::E610),
121 => Ok(Self::E611),
122 => Ok(Self::E612),
123 => Ok(Self::E613),
124 => Ok(Self::E710),
125 => Ok(Self::E711),
126 => Ok(Self::E712),
127 => Ok(Self::E713),
x => Err(IntRegisterConversionError::new_out_of_range(
x,
128,
"R4000AllegrexM3x3",
)),
}
}
#[must_use]
pub const fn count() -> usize {
128
}
}
impl TryFrom<u32> for R4000AllegrexM3x3 {
type Error = IntRegisterConversionError;
fn try_from(value: u32) -> Result<Self, Self::Error> {
Self::try_from_u32(value)
}
}
impl Default for R4000AllegrexM3x3 {
fn default() -> Self {
Self::default()
}
}
impl Index<R4000AllegrexM3x3> for [RegisterDescriptor] {
type Output = RegisterDescriptor;
fn index(&self, index: R4000AllegrexM3x3) -> &Self::Output {
&self[index as usize]
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn check_dollar() {
for x in &R4000ALLEGREX_M3X3 {
if x.has_dollar {
assert!(
x.name.starts_with('$'),
"Register {} is missing dollar sign",
x.name
);
assert!(
x.name_o32.is_none_or(|x| x.starts_with('$')),
"Register {:?} is missing dollar sign",
x.name_o32
);
assert!(
x.name_o64.is_none_or(|x| x.starts_with('$')),
"Register {:?} is missing dollar sign",
x.name_o64
);
assert!(
x.name_n32.is_none_or(|x| x.starts_with('$')),
"Register {:?} is missing dollar sign",
x.name_n32
);
assert!(
x.name_n64.is_none_or(|x| x.starts_with('$')),
"Register {:?} is missing dollar sign",
x.name_n64
);
assert!(
x.name_eabi32.is_none_or(|x| x.starts_with('$')),
"Register {:?} is missing dollar sign",
x.name_eabi32
);
assert!(
x.name_eabi64.is_none_or(|x| x.starts_with('$')),
"Register {:?} is missing dollar sign",
x.name_eabi64
);
} else {
assert!(
!x.name.starts_with('$'),
"Register {} has dollar sign when it shouldn't",
x.name
);
assert!(
x.name_o32.is_none_or(|x| !x.starts_with('$')),
"Register {:?} has dollar sign when it shouldn't",
x.name_o32
);
assert!(
x.name_o64.is_none_or(|x| !x.starts_with('$')),
"Register {:?} has dollar sign when it shouldn't",
x.name_o64
);
assert!(
x.name_n32.is_none_or(|x| !x.starts_with('$')),
"Register {:?} has dollar sign when it shouldn't",
x.name_n32
);
assert!(
x.name_n64.is_none_or(|x| !x.starts_with('$')),
"Register {:?} has dollar sign when it shouldn't",
x.name_n64
);
assert!(
x.name_eabi32.is_none_or(|x| !x.starts_with('$')),
"Register {:?} has dollar sign when it shouldn't",
x.name_eabi32
);
assert!(
x.name_eabi64.is_none_or(|x| !x.starts_with('$')),
"Register {:?} has dollar sign when it shouldn't",
x.name_eabi64
);
}
}
}
#[test]
fn check_descriptor_valid() {
for (i, x) in R4000ALLEGREX_M3X3.iter().enumerate() {
assert!(x.value() as usize == i, "Broken register index?");
x.check_valid_entry();
}
}
}