Minimize MIPS decode table

This commit is contained in:
gingerBill
2026-06-14 19:22:17 +01:00
parent 176ee8c68d
commit 67dfa25696
3 changed files with 211 additions and 325 deletions

View File

@@ -814,345 +814,233 @@ DECODE_ENTRIES := [783]Decode_Entry{
}
@(rodata)
DECODE_INDEX_PRIMARY := [64]Decode_Index{
/* [00] */ {0, 84},
/* [01] */ {84, 20},
/* [02] */ {104, 1},
/* [03] */ {105, 1},
/* [04] */ {106, 1},
/* [05] */ {107, 1},
/* [06] */ {108, 1},
/* [07] */ {109, 1},
/* [08] */ {110, 1},
/* [09] */ {111, 1},
/* [10] */ {112, 1},
/* [11] */ {113, 1},
/* [12] */ {114, 1},
/* [13] */ {115, 1},
/* [14] */ {116, 1},
/* [15] */ {117, 2},
/* [16] */ {119, 13},
/* [17] */ {132, 114},
/* [18] */ {246, 36},
/* [19] */ {282, 5},
/* [20] */ {287, 1},
/* [21] */ {288, 1},
/* [22] */ {289, 1},
/* [23] */ {290, 1},
/* [24] */ {291, 13},
/* [25] */ {304, 15},
/* [26] */ {319, 1},
/* [27] */ {320, 13},
/* [28] */ {333, 109},
/* [29] */ {442, 1},
/* [30] */ {443, 117},
/* [31] */ {560, 78},
/* [32] */ {638, 1},
/* [33] */ {639, 1},
/* [34] */ {640, 1},
/* [35] */ {641, 1},
/* [36] */ {642, 1},
/* [37] */ {643, 1},
/* [38] */ {644, 1},
/* [39] */ {645, 1},
/* [40] */ {646, 1},
/* [41] */ {647, 1},
/* [42] */ {648, 1},
/* [43] */ {649, 1},
/* [44] */ {650, 1},
/* [45] */ {651, 1},
/* [46] */ {652, 1},
/* [47] */ {653, 1},
/* [48] */ {654, 1},
/* [49] */ {655, 1},
/* [50] */ {656, 3},
/* [51] */ {659, 1},
/* [52] */ {660, 63},
/* [53] */ {723, 3},
/* [54] */ {726, 5},
/* [55] */ {731, 6},
/* [56] */ {737, 1},
/* [57] */ {738, 1},
/* [58] */ {739, 3},
/* [59] */ {742, 2},
/* [60] */ {744, 27},
/* [61] */ {771, 3},
/* [62] */ {774, 5},
/* [63] */ {779, 4},
0x00 = {0, 84},
0x01 = {84, 20},
0x02 = {104, 1},
0x03 = {105, 1},
0x04 = {106, 1},
0x05 = {107, 1},
0x06 = {108, 1},
0x07 = {109, 1},
0x08 = {110, 1},
0x09 = {111, 1},
0x0A = {112, 1},
0x0B = {113, 1},
0x0C = {114, 1},
0x0D = {115, 1},
0x0E = {116, 1},
0x0F = {117, 2},
0x10 = {119, 13},
0x11 = {132, 114},
0x12 = {246, 36},
0x13 = {282, 5},
0x14 = {287, 1},
0x15 = {288, 1},
0x16 = {289, 1},
0x17 = {290, 1},
0x18 = {291, 13},
0x19 = {304, 15},
0x1A = {319, 1},
0x1B = {320, 13},
0x1C = {333, 109},
0x1D = {442, 1},
0x1E = {443, 117},
0x1F = {560, 78},
0x20 = {638, 1},
0x21 = {639, 1},
0x22 = {640, 1},
0x23 = {641, 1},
0x24 = {642, 1},
0x25 = {643, 1},
0x26 = {644, 1},
0x27 = {645, 1},
0x28 = {646, 1},
0x29 = {647, 1},
0x2A = {648, 1},
0x2B = {649, 1},
0x2C = {650, 1},
0x2D = {651, 1},
0x2E = {652, 1},
0x2F = {653, 1},
0x30 = {654, 1},
0x31 = {655, 1},
0x32 = {656, 3},
0x33 = {659, 1},
0x34 = {660, 63},
0x35 = {723, 3},
0x36 = {726, 5},
0x37 = {731, 6},
0x38 = {737, 1},
0x39 = {738, 1},
0x3A = {739, 3},
0x3B = {742, 2},
0x3C = {744, 27},
0x3D = {771, 3},
0x3E = {774, 5},
0x3F = {779, 4},
}
@(rodata)
DECODE_INDEX_SPECIAL := [64]Decode_Index{
/* [00] */ {0, 5},
/* [01] */ {5, 2},
/* [02] */ {7, 2},
/* [03] */ {9, 1},
/* [04] */ {10, 1},
/* [05] */ {11, 1},
/* [06] */ {12, 2},
/* [07] */ {14, 1},
/* [08] */ {15, 1},
/* [09] */ {16, 1},
/* [10] */ {17, 1},
/* [11] */ {18, 1},
/* [12] */ {19, 1},
/* [13] */ {20, 1},
/* [14] */ {0, 0},
/* [15] */ {21, 1},
/* [16] */ {22, 1},
/* [17] */ {23, 1},
/* [18] */ {24, 1},
/* [19] */ {25, 1},
/* [20] */ {26, 1},
/* [21] */ {27, 1},
/* [22] */ {28, 2},
/* [23] */ {30, 1},
/* [24] */ {31, 2},
/* [25] */ {33, 3},
/* [26] */ {36, 2},
/* [27] */ {38, 2},
/* [28] */ {40, 3},
/* [29] */ {43, 3},
/* [30] */ {46, 3},
/* [31] */ {49, 3},
/* [32] */ {52, 1},
/* [33] */ {53, 1},
/* [34] */ {54, 1},
/* [35] */ {55, 1},
/* [36] */ {56, 1},
/* [37] */ {57, 1},
/* [38] */ {58, 1},
/* [39] */ {59, 1},
/* [40] */ {60, 1},
/* [41] */ {61, 1},
/* [42] */ {62, 1},
/* [43] */ {63, 1},
/* [44] */ {64, 1},
/* [45] */ {65, 1},
/* [46] */ {66, 1},
/* [47] */ {67, 1},
/* [48] */ {68, 1},
/* [49] */ {69, 1},
/* [50] */ {70, 1},
/* [51] */ {71, 1},
/* [52] */ {72, 1},
/* [53] */ {73, 1},
/* [54] */ {74, 1},
/* [55] */ {75, 1},
/* [56] */ {76, 1},
/* [57] */ {0, 0},
/* [58] */ {77, 2},
/* [59] */ {79, 1},
/* [60] */ {80, 1},
/* [61] */ {0, 0},
/* [62] */ {81, 2},
/* [63] */ {83, 1},
0x00 = {0, 5},
0x01 = {5, 2},
0x02 = {7, 2},
0x03 = {9, 1},
0x04 = {10, 1},
0x05 = {11, 1},
0x06 = {12, 2},
0x07 = {14, 1},
0x08 = {15, 1},
0x09 = {16, 1},
0x0A = {17, 1},
0x0B = {18, 1},
0x0C = {19, 1},
0x0D = {20, 1},
0x0F = {21, 1},
0x10 = {22, 1},
0x11 = {23, 1},
0x12 = {24, 1},
0x13 = {25, 1},
0x14 = {26, 1},
0x15 = {27, 1},
0x16 = {28, 2},
0x17 = {30, 1},
0x18 = {31, 2},
0x19 = {33, 3},
0x1A = {36, 2},
0x1B = {38, 2},
0x1C = {40, 3},
0x1D = {43, 3},
0x1E = {46, 3},
0x1F = {49, 3},
0x20 = {52, 1},
0x21 = {53, 1},
0x22 = {54, 1},
0x23 = {55, 1},
0x24 = {56, 1},
0x25 = {57, 1},
0x26 = {58, 1},
0x27 = {59, 1},
0x28 = {60, 1},
0x29 = {61, 1},
0x2A = {62, 1},
0x2B = {63, 1},
0x2C = {64, 1},
0x2D = {65, 1},
0x2E = {66, 1},
0x2F = {67, 1},
0x30 = {68, 1},
0x31 = {69, 1},
0x32 = {70, 1},
0x33 = {71, 1},
0x34 = {72, 1},
0x35 = {73, 1},
0x36 = {74, 1},
0x37 = {75, 1},
0x38 = {76, 1},
0x3A = {77, 2},
0x3B = {79, 1},
0x3C = {80, 1},
0x3E = {81, 2},
0x3F = {83, 1},
}
@(rodata)
DECODE_INDEX_REGIMM := [32]Decode_Index{
/* [00] */ {84, 1},
/* [01] */ {85, 1},
/* [02] */ {86, 1},
/* [03] */ {87, 1},
/* [04] */ {0, 0},
/* [05] */ {0, 0},
/* [06] */ {88, 1},
/* [07] */ {0, 0},
/* [08] */ {89, 1},
/* [09] */ {90, 1},
/* [10] */ {91, 1},
/* [11] */ {92, 1},
/* [12] */ {93, 1},
/* [13] */ {0, 0},
/* [14] */ {94, 1},
/* [15] */ {0, 0},
/* [16] */ {95, 1},
/* [17] */ {96, 1},
/* [18] */ {97, 1},
/* [19] */ {98, 1},
/* [20] */ {0, 0},
/* [21] */ {0, 0},
/* [22] */ {0, 0},
/* [23] */ {99, 1},
/* [24] */ {100, 1},
/* [25] */ {101, 1},
/* [26] */ {0, 0},
/* [27] */ {0, 0},
/* [28] */ {102, 1},
/* [29] */ {0, 0},
/* [30] */ {103, 1},
/* [31] */ {0, 0},
0x00 = {84, 1},
0x01 = {85, 1},
0x02 = {86, 1},
0x03 = {87, 1},
0x06 = {88, 1},
0x08 = {89, 1},
0x09 = {90, 1},
0x0A = {91, 1},
0x0B = {92, 1},
0x0C = {93, 1},
0x0E = {94, 1},
0x10 = {95, 1},
0x11 = {96, 1},
0x12 = {97, 1},
0x13 = {98, 1},
0x17 = {99, 1},
0x18 = {100, 1},
0x19 = {101, 1},
0x1C = {102, 1},
0x1E = {103, 1},
}
@(rodata)
DECODE_INDEX_COP1 := [32]Decode_Index{
/* [00] */ {132, 1},
/* [01] */ {133, 1},
/* [02] */ {134, 1},
/* [03] */ {135, 1},
/* [04] */ {136, 1},
/* [05] */ {137, 1},
/* [06] */ {138, 1},
/* [07] */ {139, 1},
/* [08] */ {140, 4},
/* [09] */ {144, 1},
/* [10] */ {0, 0},
/* [11] */ {0, 0},
/* [12] */ {0, 0},
/* [13] */ {145, 1},
/* [14] */ {0, 0},
/* [15] */ {0, 0},
/* [16] */ {146, 37},
/* [17] */ {183, 37},
/* [18] */ {0, 0},
/* [19] */ {0, 0},
/* [20] */ {220, 2},
/* [21] */ {222, 2},
/* [22] */ {224, 22},
/* [23] */ {0, 0},
/* [24] */ {0, 0},
/* [25] */ {0, 0},
/* [26] */ {0, 0},
/* [27] */ {0, 0},
/* [28] */ {0, 0},
/* [29] */ {0, 0},
/* [30] */ {0, 0},
/* [31] */ {0, 0},
0x00 = {132, 1},
0x01 = {133, 1},
0x02 = {134, 1},
0x03 = {135, 1},
0x04 = {136, 1},
0x05 = {137, 1},
0x06 = {138, 1},
0x07 = {139, 1},
0x08 = {140, 4},
0x09 = {144, 1},
0x0D = {145, 1},
0x10 = {146, 37},
0x11 = {183, 37},
0x14 = {220, 2},
0x15 = {222, 2},
0x16 = {224, 22},
}
@(rodata)
DECODE_INDEX_SPECIAL2 := [64]Decode_Index{
/* [00] */ {333, 1},
/* [01] */ {334, 1},
/* [02] */ {335, 1},
/* [03] */ {0, 0},
/* [04] */ {336, 2},
/* [05] */ {338, 1},
/* [06] */ {0, 0},
/* [07] */ {0, 0},
/* [08] */ {339, 25},
/* [09] */ {364, 26},
/* [10] */ {0, 0},
/* [11] */ {0, 0},
/* [12] */ {0, 0},
/* [13] */ {0, 0},
/* [14] */ {0, 0},
/* [15] */ {0, 0},
/* [16] */ {390, 1},
/* [17] */ {391, 1},
/* [18] */ {392, 1},
/* [19] */ {393, 1},
/* [20] */ {0, 0},
/* [21] */ {0, 0},
/* [22] */ {0, 0},
/* [23] */ {0, 0},
/* [24] */ {394, 1},
/* [25] */ {395, 1},
/* [26] */ {396, 1},
/* [27] */ {397, 1},
/* [28] */ {0, 0},
/* [29] */ {0, 0},
/* [30] */ {0, 0},
/* [31] */ {0, 0},
/* [32] */ {398, 2},
/* [33] */ {400, 2},
/* [34] */ {0, 0},
/* [35] */ {0, 0},
/* [36] */ {402, 1},
/* [37] */ {403, 1},
/* [38] */ {0, 0},
/* [39] */ {0, 0},
/* [40] */ {404, 17},
/* [41] */ {421, 8},
/* [42] */ {0, 0},
/* [43] */ {0, 0},
/* [44] */ {0, 0},
/* [45] */ {0, 0},
/* [46] */ {0, 0},
/* [47] */ {0, 0},
/* [48] */ {429, 5},
/* [49] */ {434, 1},
/* [50] */ {0, 0},
/* [51] */ {0, 0},
/* [52] */ {435, 1},
/* [53] */ {0, 0},
/* [54] */ {436, 1},
/* [55] */ {437, 1},
/* [56] */ {0, 0},
/* [57] */ {0, 0},
/* [58] */ {0, 0},
/* [59] */ {0, 0},
/* [60] */ {438, 1},
/* [61] */ {0, 0},
/* [62] */ {439, 1},
/* [63] */ {440, 2},
0x00 = {333, 1},
0x01 = {334, 1},
0x02 = {335, 1},
0x04 = {336, 2},
0x05 = {338, 1},
0x08 = {339, 25},
0x09 = {364, 26},
0x10 = {390, 1},
0x11 = {391, 1},
0x12 = {392, 1},
0x13 = {393, 1},
0x18 = {394, 1},
0x19 = {395, 1},
0x1A = {396, 1},
0x1B = {397, 1},
0x20 = {398, 2},
0x21 = {400, 2},
0x24 = {402, 1},
0x25 = {403, 1},
0x28 = {404, 17},
0x29 = {421, 8},
0x30 = {429, 5},
0x31 = {434, 1},
0x34 = {435, 1},
0x36 = {436, 1},
0x37 = {437, 1},
0x3C = {438, 1},
0x3E = {439, 1},
0x3F = {440, 2},
}
@(rodata)
DECODE_INDEX_SPECIAL3 := [64]Decode_Index{
/* [00] */ {560, 2},
/* [01] */ {562, 1},
/* [02] */ {563, 1},
/* [03] */ {564, 1},
/* [04] */ {565, 1},
/* [05] */ {566, 1},
/* [06] */ {567, 1},
/* [07] */ {568, 1},
/* [08] */ {0, 0},
/* [09] */ {0, 0},
/* [10] */ {569, 3},
/* [11] */ {0, 0},
/* [12] */ {572, 1},
/* [13] */ {0, 0},
/* [14] */ {0, 0},
/* [15] */ {573, 8},
/* [16] */ {581, 12},
/* [17] */ {0, 0},
/* [18] */ {593, 9},
/* [19] */ {602, 9},
/* [20] */ {0, 0},
/* [21] */ {0, 0},
/* [22] */ {0, 0},
/* [23] */ {0, 0},
/* [24] */ {0, 0},
/* [25] */ {0, 0},
/* [26] */ {0, 0},
/* [27] */ {0, 0},
/* [28] */ {0, 0},
/* [29] */ {0, 0},
/* [30] */ {0, 0},
/* [31] */ {0, 0},
/* [32] */ {611, 5},
/* [33] */ {0, 0},
/* [34] */ {0, 0},
/* [35] */ {0, 0},
/* [36] */ {616, 4},
/* [37] */ {0, 0},
/* [38] */ {0, 0},
/* [39] */ {0, 0},
/* [40] */ {0, 0},
/* [41] */ {0, 0},
/* [42] */ {0, 0},
/* [43] */ {0, 0},
/* [44] */ {0, 0},
/* [45] */ {0, 0},
/* [46] */ {0, 0},
/* [47] */ {0, 0},
/* [48] */ {620, 9},
/* [49] */ {0, 0},
/* [50] */ {0, 0},
/* [51] */ {0, 0},
/* [52] */ {0, 0},
/* [53] */ {0, 0},
/* [54] */ {0, 0},
/* [55] */ {0, 0},
/* [56] */ {629, 9},
/* [57] */ {0, 0},
/* [58] */ {0, 0},
/* [59] */ {0, 0},
/* [60] */ {0, 0},
/* [61] */ {0, 0},
/* [62] */ {0, 0},
/* [63] */ {0, 0},
0x00 = {560, 2},
0x01 = {562, 1},
0x02 = {563, 1},
0x03 = {564, 1},
0x04 = {565, 1},
0x05 = {566, 1},
0x06 = {567, 1},
0x07 = {568, 1},
0x0A = {569, 3},
0x0C = {572, 1},
0x0F = {573, 8},
0x10 = {581, 12},
0x12 = {593, 9},
0x13 = {602, 9},
0x20 = {611, 5},
0x24 = {616, 4},
0x30 = {620, 9},
0x38 = {629, 9},
}

View File

@@ -27,7 +27,7 @@ package rexcode_mips
// 10. PS2 EE MMI [§ MMI]
// 11. PSP Allegrex VFPU [§ VFPU]
@(rodata)
ENCODING_TABLE: [Mnemonic][]Encoding = #partial {
ENCODING_TABLE := #partial [Mnemonic][]Encoding{
.INVALID = {},
// =========================================================================

View File

@@ -238,10 +238,8 @@ emit_range_table :: proc(sb: ^strings.Builder, name: string, ranges: []Range) {
fmt.sbprintfln(sb, "@(rodata)")
fmt.sbprintfln(sb, "%s := [%d]Decode_Index{{", name, len(ranges))
for r, i in ranges {
if r.count == 0 {
fmt.sbprintfln(sb, "\t/* [%2d] */ {{0, 0}},", i)
} else {
fmt.sbprintfln(sb, "\t/* [%2d] */ {{%d, %d}},", i, r.start, r.count)
if r.count != 0 {
fmt.sbprintfln(sb, "\t0x%02X = {{%d, %d}},", i, r.start, r.count)
}
}
strings.write_string(sb, "}\n\n")