Minimize rsp decoding tables

This commit is contained in:
gingerBill
2026-06-14 19:35:30 +01:00
parent 253c1570d8
commit 2f5d548471
3 changed files with 118 additions and 293 deletions

View File

@@ -147,313 +147,140 @@ DECODE_ENTRIES := [116]Decode_Entry{
@(rodata)
DECODE_INDEX_PRIMARY := [64]Decode_Index{
/* [00] */ {0, 20},
/* [01] */ {20, 4},
/* [02] */ {24, 1},
/* [03] */ {25, 1},
/* [04] */ {26, 1},
/* [05] */ {27, 1},
/* [06] */ {28, 1},
/* [07] */ {29, 1},
/* [08] */ {30, 1},
/* [09] */ {31, 1},
/* [10] */ {32, 1},
/* [11] */ {33, 1},
/* [12] */ {34, 1},
/* [13] */ {35, 1},
/* [14] */ {36, 1},
/* [15] */ {37, 1},
/* [16] */ {38, 2},
/* [17] */ {0, 0},
/* [18] */ {40, 44},
/* [19] */ {0, 0},
/* [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] */ {84, 1},
/* [33] */ {85, 1},
/* [34] */ {0, 0},
/* [35] */ {86, 1},
/* [36] */ {87, 1},
/* [37] */ {88, 1},
/* [38] */ {0, 0},
/* [39] */ {0, 0},
/* [40] */ {89, 1},
/* [41] */ {90, 1},
/* [42] */ {0, 0},
/* [43] */ {91, 1},
/* [44] */ {0, 0},
/* [45] */ {0, 0},
/* [46] */ {0, 0},
/* [47] */ {0, 0},
/* [48] */ {0, 0},
/* [49] */ {0, 0},
/* [50] */ {92, 12},
/* [51] */ {0, 0},
/* [52] */ {0, 0},
/* [53] */ {0, 0},
/* [54] */ {0, 0},
/* [55] */ {0, 0},
/* [56] */ {0, 0},
/* [57] */ {0, 0},
/* [58] */ {104, 12},
/* [59] */ {0, 0},
/* [60] */ {0, 0},
/* [61] */ {0, 0},
/* [62] */ {0, 0},
/* [63] */ {0, 0},
0x00 = {0, 20},
0x01 = {20, 4},
0x02 = {24, 1},
0x03 = {25, 1},
0x04 = {26, 1},
0x05 = {27, 1},
0x06 = {28, 1},
0x07 = {29, 1},
0x08 = {30, 1},
0x09 = {31, 1},
0x0A = {32, 1},
0x0B = {33, 1},
0x0C = {34, 1},
0x0D = {35, 1},
0x0E = {36, 1},
0x0F = {37, 1},
0x10 = {38, 2},
0x12 = {40, 44},
0x20 = {84, 1},
0x21 = {85, 1},
0x23 = {86, 1},
0x24 = {87, 1},
0x25 = {88, 1},
0x28 = {89, 1},
0x29 = {90, 1},
0x2B = {91, 1},
0x32 = {92, 12},
0x3A = {104, 12},
}
@(rodata)
DECODE_INDEX_SPECIAL := [64]Decode_Index{
/* [00] */ {0, 2},
/* [01] */ {0, 0},
/* [02] */ {2, 1},
/* [03] */ {3, 1},
/* [04] */ {4, 1},
/* [05] */ {0, 0},
/* [06] */ {5, 1},
/* [07] */ {6, 1},
/* [08] */ {7, 1},
/* [09] */ {8, 1},
/* [10] */ {0, 0},
/* [11] */ {0, 0},
/* [12] */ {0, 0},
/* [13] */ {9, 1},
/* [14] */ {0, 0},
/* [15] */ {0, 0},
/* [16] */ {0, 0},
/* [17] */ {0, 0},
/* [18] */ {0, 0},
/* [19] */ {0, 0},
/* [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] */ {10, 1},
/* [33] */ {11, 1},
/* [34] */ {12, 1},
/* [35] */ {13, 1},
/* [36] */ {14, 1},
/* [37] */ {15, 1},
/* [38] */ {16, 1},
/* [39] */ {17, 1},
/* [40] */ {0, 0},
/* [41] */ {0, 0},
/* [42] */ {18, 1},
/* [43] */ {19, 1},
/* [44] */ {0, 0},
/* [45] */ {0, 0},
/* [46] */ {0, 0},
/* [47] */ {0, 0},
/* [48] */ {0, 0},
/* [49] */ {0, 0},
/* [50] */ {0, 0},
/* [51] */ {0, 0},
/* [52] */ {0, 0},
/* [53] */ {0, 0},
/* [54] */ {0, 0},
/* [55] */ {0, 0},
/* [56] */ {0, 0},
/* [57] */ {0, 0},
/* [58] */ {0, 0},
/* [59] */ {0, 0},
/* [60] */ {0, 0},
/* [61] */ {0, 0},
/* [62] */ {0, 0},
/* [63] */ {0, 0},
0x00 = {0, 2},
0x02 = {2, 1},
0x03 = {3, 1},
0x04 = {4, 1},
0x06 = {5, 1},
0x07 = {6, 1},
0x08 = {7, 1},
0x09 = {8, 1},
0x0D = {9, 1},
0x20 = {10, 1},
0x21 = {11, 1},
0x22 = {12, 1},
0x23 = {13, 1},
0x24 = {14, 1},
0x25 = {15, 1},
0x26 = {16, 1},
0x27 = {17, 1},
0x2A = {18, 1},
0x2B = {19, 1},
}
@(rodata)
DECODE_INDEX_REGIMM := [32]Decode_Index{
/* [00] */ {20, 1},
/* [01] */ {21, 1},
/* [02] */ {0, 0},
/* [03] */ {0, 0},
/* [04] */ {0, 0},
/* [05] */ {0, 0},
/* [06] */ {0, 0},
/* [07] */ {0, 0},
/* [08] */ {0, 0},
/* [09] */ {0, 0},
/* [10] */ {0, 0},
/* [11] */ {0, 0},
/* [12] */ {0, 0},
/* [13] */ {0, 0},
/* [14] */ {0, 0},
/* [15] */ {0, 0},
/* [16] */ {22, 1},
/* [17] */ {23, 1},
/* [18] */ {0, 0},
/* [19] */ {0, 0},
/* [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},
0x00 = {20, 1},
0x01 = {21, 1},
0x10 = {22, 1},
0x11 = {23, 1},
}
@(rodata)
DECODE_INDEX_COP2 := [64]Decode_Index{
/* [00] */ {40, 5},
/* [01] */ {45, 1},
/* [02] */ {0, 0},
/* [03] */ {0, 0},
/* [04] */ {46, 1},
/* [05] */ {47, 1},
/* [06] */ {48, 1},
/* [07] */ {49, 1},
/* [08] */ {50, 1},
/* [09] */ {51, 1},
/* [10] */ {0, 0},
/* [11] */ {0, 0},
/* [12] */ {52, 1},
/* [13] */ {53, 1},
/* [14] */ {54, 1},
/* [15] */ {55, 1},
/* [16] */ {56, 1},
/* [17] */ {57, 1},
/* [18] */ {0, 0},
/* [19] */ {58, 1},
/* [20] */ {59, 1},
/* [21] */ {60, 1},
/* [22] */ {0, 0},
/* [23] */ {0, 0},
/* [24] */ {0, 0},
/* [25] */ {0, 0},
/* [26] */ {0, 0},
/* [27] */ {0, 0},
/* [28] */ {0, 0},
/* [29] */ {61, 1},
/* [30] */ {0, 0},
/* [31] */ {0, 0},
/* [32] */ {62, 1},
/* [33] */ {63, 1},
/* [34] */ {64, 1},
/* [35] */ {65, 1},
/* [36] */ {66, 1},
/* [37] */ {67, 1},
/* [38] */ {68, 1},
/* [39] */ {69, 1},
/* [40] */ {70, 1},
/* [41] */ {71, 1},
/* [42] */ {72, 1},
/* [43] */ {73, 1},
/* [44] */ {74, 1},
/* [45] */ {75, 1},
/* [46] */ {0, 0},
/* [47] */ {0, 0},
/* [48] */ {76, 1},
/* [49] */ {77, 1},
/* [50] */ {78, 1},
/* [51] */ {79, 1},
/* [52] */ {80, 1},
/* [53] */ {81, 1},
/* [54] */ {82, 1},
/* [55] */ {83, 1},
/* [56] */ {0, 0},
/* [57] */ {0, 0},
/* [58] */ {0, 0},
/* [59] */ {0, 0},
/* [60] */ {0, 0},
/* [61] */ {0, 0},
/* [62] */ {0, 0},
/* [63] */ {0, 0},
0x00 = {40, 5},
0x01 = {45, 1},
0x04 = {46, 1},
0x05 = {47, 1},
0x06 = {48, 1},
0x07 = {49, 1},
0x08 = {50, 1},
0x09 = {51, 1},
0x0C = {52, 1},
0x0D = {53, 1},
0x0E = {54, 1},
0x0F = {55, 1},
0x10 = {56, 1},
0x11 = {57, 1},
0x13 = {58, 1},
0x14 = {59, 1},
0x15 = {60, 1},
0x1D = {61, 1},
0x20 = {62, 1},
0x21 = {63, 1},
0x22 = {64, 1},
0x23 = {65, 1},
0x24 = {66, 1},
0x25 = {67, 1},
0x26 = {68, 1},
0x27 = {69, 1},
0x28 = {70, 1},
0x29 = {71, 1},
0x2A = {72, 1},
0x2B = {73, 1},
0x2C = {74, 1},
0x2D = {75, 1},
0x30 = {76, 1},
0x31 = {77, 1},
0x32 = {78, 1},
0x33 = {79, 1},
0x34 = {80, 1},
0x35 = {81, 1},
0x36 = {82, 1},
0x37 = {83, 1},
}
@(rodata)
DECODE_INDEX_LWC2 := [32]Decode_Index{
/* [00] */ {92, 1},
/* [01] */ {93, 1},
/* [02] */ {94, 1},
/* [03] */ {95, 1},
/* [04] */ {96, 1},
/* [05] */ {97, 1},
/* [06] */ {98, 1},
/* [07] */ {99, 1},
/* [08] */ {100, 1},
/* [09] */ {101, 1},
/* [10] */ {102, 1},
/* [11] */ {103, 1},
/* [12] */ {0, 0},
/* [13] */ {0, 0},
/* [14] */ {0, 0},
/* [15] */ {0, 0},
/* [16] */ {0, 0},
/* [17] */ {0, 0},
/* [18] */ {0, 0},
/* [19] */ {0, 0},
/* [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},
0x00 = {92, 1},
0x01 = {93, 1},
0x02 = {94, 1},
0x03 = {95, 1},
0x04 = {96, 1},
0x05 = {97, 1},
0x06 = {98, 1},
0x07 = {99, 1},
0x08 = {100, 1},
0x09 = {101, 1},
0x0A = {102, 1},
0x0B = {103, 1},
}
@(rodata)
DECODE_INDEX_SWC2 := [32]Decode_Index{
/* [00] */ {104, 1},
/* [01] */ {105, 1},
/* [02] */ {106, 1},
/* [03] */ {107, 1},
/* [04] */ {108, 1},
/* [05] */ {109, 1},
/* [06] */ {110, 1},
/* [07] */ {111, 1},
/* [08] */ {112, 1},
/* [09] */ {113, 1},
/* [10] */ {114, 1},
/* [11] */ {115, 1},
/* [12] */ {0, 0},
/* [13] */ {0, 0},
/* [14] */ {0, 0},
/* [15] */ {0, 0},
/* [16] */ {0, 0},
/* [17] */ {0, 0},
/* [18] */ {0, 0},
/* [19] */ {0, 0},
/* [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},
0x00 = {104, 1},
0x01 = {105, 1},
0x02 = {106, 1},
0x03 = {107, 1},
0x04 = {108, 1},
0x05 = {109, 1},
0x06 = {110, 1},
0x07 = {111, 1},
0x08 = {112, 1},
0x09 = {113, 1},
0x0A = {114, 1},
0x0B = {115, 1},
}

View File

@@ -12,7 +12,7 @@ package rexcode_rsp
// Vector L/S — opcode 0x32 (LWC2) or 0x3A (SWC2) with op2 selector
// at bits 15-11 and 7-bit signed offset at 6-0.
@(rodata)
ENCODING_TABLE: [Mnemonic][]Encoding = #partial {
ENCODING_TABLE:= #partial [Mnemonic][]Encoding{
.INVALID = {},
// =========================================================================

View File

@@ -211,10 +211,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, " /* [%2d] */ {{0, 0}},", i)
} else {
fmt.sbprintfln(sb, " /* [%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")