mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
7c40d33db3
Phase 1a (boot slice): 30 instructions at 0xBFC00000, compiles clean. Phase 1b (instruction coverage): 54 opcodes implemented in strict_translator, 44,629 walker-reachable instructions covered, 0 missing. Phase 1c (function discovery): 76 functions from 2 seeds, 2,988 instructions, 199 call edges, 27 indirect jumps. All validated through StrictTranslator. Phase 1d (indirect control flow): 27 sites classified — 21 A0/B0/C0 dispatch stubs, 4 computed calls, 2 computed tail calls. Ghidra cross-referenced with 0 disagreements. Phase 1e (relocation): ROM-to-RAM copy at FUN_bfc00420 proven with both Ghidra (static) and DuckStation (runtime). 69 address aliases, 68/69 function entries match byte-for-byte in RAM. Normalization rule documented. Includes PRINCIPLES.md and DEBUG.md adapted from recomp-template. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
700 lines
23 KiB
JSON
700 lines
23 KiB
JSON
{
|
|
"schema": "psxrecomp-v4 phase1b instruction_coverage v1",
|
|
"inventory_source": "generated/instruction_inventory.json",
|
|
"translator_source": "recompiler/src/strict_translator.cpp",
|
|
"totals": {
|
|
"inventory_buckets": 56,
|
|
"implemented": 54,
|
|
"missing": 0,
|
|
"deferred": 2,
|
|
"implemented_but_unused_in_inventory": 2
|
|
},
|
|
"rows": [
|
|
{
|
|
"bucket_key": "17|none|0",
|
|
"primary_opcode_hex": "0x11",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "COP1",
|
|
"category": "PRIVILEGED_OR_DATA",
|
|
"count": 17,
|
|
"first_example": "0xbfc0233c",
|
|
"status": "deferred",
|
|
"reason": "FPU; PS1 has no COP1 hardware. Decide after Phase 1c reachability proves whether the BIOS atof routines are live."
|
|
},
|
|
{
|
|
"bucket_key": "49|none|0",
|
|
"primary_opcode_hex": "0x31",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "LWC1",
|
|
"category": "PRIVILEGED_OR_DATA",
|
|
"count": 2,
|
|
"first_example": "0xbfc02544",
|
|
"status": "deferred",
|
|
"reason": "FPU load; same rationale as COP1."
|
|
},
|
|
{
|
|
"bucket_key": "16|rs_cop0|0",
|
|
"primary_opcode_hex": "0x10",
|
|
"sub_kind": "rs_cop0",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "MFC0",
|
|
"category": "COP0",
|
|
"count": 2,
|
|
"first_example": "0xbfc01920",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x10 rs 0x00 (gpr[rt] = cop0[rd]; respects $zero via emit_gpr_write; no SR-write hooks)"
|
|
},
|
|
{
|
|
"bucket_key": "16|rs_cop0|4",
|
|
"primary_opcode_hex": "0x10",
|
|
"sub_kind": "rs_cop0",
|
|
"sub_value_hex": "0x04",
|
|
"mnemonic": "MTC0",
|
|
"category": "COP0",
|
|
"count": 13,
|
|
"first_example": "0xbfc0023c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x10 rs 0x04 (cop0[rd] = gpr[rt]; cop0[0] is Index, not zero; no IRQ delivery)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|32",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x20",
|
|
"mnemonic": "ADD",
|
|
"category": "CPU",
|
|
"count": 1,
|
|
"first_example": "0xbfc03d40",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x20 (overflow-checked, calls psx_arith_overflow on trap)"
|
|
},
|
|
{
|
|
"bucket_key": "8|none|0",
|
|
"primary_opcode_hex": "0x08",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "ADDI",
|
|
"category": "CPU",
|
|
"count": 13,
|
|
"first_example": "0xbfc00274",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x08 (overflow-checked, calls psx_arith_overflow on trap)"
|
|
},
|
|
{
|
|
"bucket_key": "9|none|0",
|
|
"primary_opcode_hex": "0x09",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "ADDIU",
|
|
"category": "CPU",
|
|
"count": 7237,
|
|
"first_example": "0xbfc00014",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp:141-151"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|33",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x21",
|
|
"mnemonic": "ADDU",
|
|
"category": "CPU",
|
|
"count": 3806,
|
|
"first_example": "0xbfc003dc",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x21"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|36",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x24",
|
|
"mnemonic": "AND",
|
|
"category": "CPU",
|
|
"count": 165,
|
|
"first_example": "0xbfc0128c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x24"
|
|
},
|
|
{
|
|
"bucket_key": "12|none|0",
|
|
"primary_opcode_hex": "0x0C",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "ANDI",
|
|
"category": "CPU",
|
|
"count": 634,
|
|
"first_example": "0xbfc0081c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x0C (zero-extended imm)"
|
|
},
|
|
{
|
|
"bucket_key": "4|none|0",
|
|
"primary_opcode_hex": "0x04",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "BEQ",
|
|
"category": "CPU",
|
|
"count": 2768,
|
|
"first_example": "0xbfc00970",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x04 (terminator; PC-relative target = pc+4+simm*4)"
|
|
},
|
|
{
|
|
"bucket_key": "1|rt|1",
|
|
"primary_opcode_hex": "0x01",
|
|
"sub_kind": "rt",
|
|
"sub_value_hex": "0x01",
|
|
"mnemonic": "BGEZ",
|
|
"category": "CPU",
|
|
"count": 181,
|
|
"first_example": "0xbfc00ed8",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp REGIMM rt 0x01 (terminator; signed compare against 0)"
|
|
},
|
|
{
|
|
"bucket_key": "7|none|0",
|
|
"primary_opcode_hex": "0x07",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "BGTZ",
|
|
"category": "CPU",
|
|
"count": 49,
|
|
"first_example": "0xbfc01ab8",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x07 (terminator; signed compare against 0)"
|
|
},
|
|
{
|
|
"bucket_key": "6|none|0",
|
|
"primary_opcode_hex": "0x06",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "BLEZ",
|
|
"category": "CPU",
|
|
"count": 131,
|
|
"first_example": "0xbfc0151c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x06 (terminator; signed compare against 0)"
|
|
},
|
|
{
|
|
"bucket_key": "1|rt|0",
|
|
"primary_opcode_hex": "0x01",
|
|
"sub_kind": "rt",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "BLTZ",
|
|
"category": "CPU",
|
|
"count": 25,
|
|
"first_example": "0xbfc0113c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp REGIMM rt 0x00 (terminator; signed compare against 0)"
|
|
},
|
|
{
|
|
"bucket_key": "5|none|0",
|
|
"primary_opcode_hex": "0x05",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "BNE",
|
|
"category": "CPU",
|
|
"count": 1463,
|
|
"first_example": "0xbfc00270",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x05 (terminator; PC-relative target = pc+4+simm*4)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|13",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x0D",
|
|
"mnemonic": "BREAK",
|
|
"category": "CPU",
|
|
"count": 93,
|
|
"first_example": "0xbfc012cc",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x0D (non-terminator; calls psx_break(cpu, code, pc) then return; no exception model)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|26",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x1A",
|
|
"mnemonic": "DIV",
|
|
"category": "CPU",
|
|
"count": 73,
|
|
"first_example": "0xbfc07c7c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x1A (signed; guards div-by-zero and INT32_MIN/-1 to match R3000A)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|27",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x1B",
|
|
"mnemonic": "DIVU",
|
|
"category": "CPU",
|
|
"count": 18,
|
|
"first_example": "0xbfc012a8",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x1B (unsigned; guards div-by-zero to match R3000A)"
|
|
},
|
|
{
|
|
"bucket_key": "2|none|0",
|
|
"primary_opcode_hex": "0x02",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "J",
|
|
"category": "CPU",
|
|
"count": 2,
|
|
"first_example": "0xbfc00070",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp:112-123"
|
|
},
|
|
{
|
|
"bucket_key": "3|none|0",
|
|
"primary_opcode_hex": "0x03",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "JAL",
|
|
"category": "CPU",
|
|
"count": 2606,
|
|
"first_example": "0xbfc00680",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp:126-138"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|9",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x09",
|
|
"mnemonic": "JALR",
|
|
"category": "CPU",
|
|
"count": 73,
|
|
"first_example": "0xbfc02d5c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x09"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|8",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x08",
|
|
"mnemonic": "JR",
|
|
"category": "CPU",
|
|
"count": 716,
|
|
"first_example": "0xbfc00454",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x08"
|
|
},
|
|
{
|
|
"bucket_key": "32|none|0",
|
|
"primary_opcode_hex": "0x20",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "LB",
|
|
"category": "CPU",
|
|
"count": 261,
|
|
"first_example": "0xbfc00960",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x20 (sign-extended byte; $zero variant uses (void) to keep the read side effect; no alignment requirement)"
|
|
},
|
|
{
|
|
"bucket_key": "36|none|0",
|
|
"primary_opcode_hex": "0x24",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "LBU",
|
|
"category": "CPU",
|
|
"count": 457,
|
|
"first_example": "0xbfc00cc4",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x24 (zero-extended byte; $zero variant keeps read side effect; no alignment requirement)"
|
|
},
|
|
{
|
|
"bucket_key": "33|none|0",
|
|
"primary_opcode_hex": "0x21",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "LH",
|
|
"category": "CPU",
|
|
"count": 527,
|
|
"first_example": "0xbfc01040",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x21 (sign-extended halfword; 2-aligned; addr & 1 -> psx_unaligned_access)"
|
|
},
|
|
{
|
|
"bucket_key": "37|none|0",
|
|
"primary_opcode_hex": "0x25",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "LHU",
|
|
"category": "CPU",
|
|
"count": 150,
|
|
"first_example": "0xbfc08e44",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x25 (zero-extended halfword; 2-aligned; addr & 1 -> psx_unaligned_access)"
|
|
},
|
|
{
|
|
"bucket_key": "15|none|0",
|
|
"primary_opcode_hex": "0x0F",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "LUI",
|
|
"category": "CPU",
|
|
"count": 4122,
|
|
"first_example": "0xbfc00000",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp:166-174"
|
|
},
|
|
{
|
|
"bucket_key": "35|none|0",
|
|
"primary_opcode_hex": "0x23",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "LW",
|
|
"category": "CPU",
|
|
"count": 5482,
|
|
"first_example": "0xbfc00334",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x23 (32-bit word; 4-aligned; addr & 3 -> psx_unaligned_access)"
|
|
},
|
|
{
|
|
"bucket_key": "34|none|0",
|
|
"primary_opcode_hex": "0x22",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "LWL",
|
|
"category": "CPU",
|
|
"count": 6,
|
|
"first_example": "0xbfc19598",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x22 (little-endian unaligned high-bytes load; merges with old rt; no alignment fault by design)"
|
|
},
|
|
{
|
|
"bucket_key": "38|none|0",
|
|
"primary_opcode_hex": "0x26",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "LWR",
|
|
"category": "CPU",
|
|
"count": 6,
|
|
"first_example": "0xbfc1959c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x26 (little-endian unaligned low-bytes load; merges with old rt; no alignment fault by design)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|16",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x10",
|
|
"mnemonic": "MFHI",
|
|
"category": "CPU",
|
|
"count": 45,
|
|
"first_example": "0xbfc012b0",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x10 (read cpu->hi)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|18",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x12",
|
|
"mnemonic": "MFLO",
|
|
"category": "CPU",
|
|
"count": 172,
|
|
"first_example": "0xbfc012bc",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x12 (read cpu->lo)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|25",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x19",
|
|
"mnemonic": "MULTU",
|
|
"category": "CPU",
|
|
"count": 115,
|
|
"first_example": "0xbfc026e4",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x19 (uint64 product into HI:LO)"
|
|
},
|
|
{
|
|
"bucket_key": "NOP|none|0",
|
|
"primary_opcode_hex": "NOP",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "NOP",
|
|
"category": "CPU",
|
|
"count": 3884,
|
|
"first_example": "0xbfc00010",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp:54-59"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|39",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x27",
|
|
"mnemonic": "NOR",
|
|
"category": "CPU",
|
|
"count": 7,
|
|
"first_example": "0xbfc11f40",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x27"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|37",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x25",
|
|
"mnemonic": "OR",
|
|
"category": "CPU",
|
|
"count": 126,
|
|
"first_example": "0xbfc001b0",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x25"
|
|
},
|
|
{
|
|
"bucket_key": "13|none|0",
|
|
"primary_opcode_hex": "0x0D",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "ORI",
|
|
"category": "CPU",
|
|
"count": 485,
|
|
"first_example": "0xbfc00004",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp:154-163"
|
|
},
|
|
{
|
|
"bucket_key": "40|none|0",
|
|
"primary_opcode_hex": "0x28",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "SB",
|
|
"category": "CPU",
|
|
"count": 703,
|
|
"first_example": "0xbfc008d4",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x28 (byte store; no alignment requirement)"
|
|
},
|
|
{
|
|
"bucket_key": "41|none|0",
|
|
"primary_opcode_hex": "0x29",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "SH",
|
|
"category": "CPU",
|
|
"count": 693,
|
|
"first_example": "0xbfc0040c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x29 (halfword store; 2-aligned; addr & 1 -> psx_unaligned_access)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|0",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "SLL",
|
|
"category": "CPU",
|
|
"count": 1680,
|
|
"first_example": "0xbfc00820",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp:72-78"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|4",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x04",
|
|
"mnemonic": "SLLV",
|
|
"category": "CPU",
|
|
"count": 10,
|
|
"first_example": "0xbfc11f2c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x04 (variable shift, rs[4:0] via & 0x1Fu mask)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|42",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x2A",
|
|
"mnemonic": "SLT",
|
|
"category": "CPU",
|
|
"count": 166,
|
|
"first_example": "0xbfc01180",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x2A"
|
|
},
|
|
{
|
|
"bucket_key": "10|none|0",
|
|
"primary_opcode_hex": "0x0A",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "SLTI",
|
|
"category": "CPU",
|
|
"count": 235,
|
|
"first_example": "0xbfc02444",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x0A"
|
|
},
|
|
{
|
|
"bucket_key": "11|none|0",
|
|
"primary_opcode_hex": "0x0B",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "SLTIU",
|
|
"category": "CPU",
|
|
"count": 79,
|
|
"first_example": "0xbfc00f00",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x0B (sign-extends imm then unsigned-compares)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|43",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x2B",
|
|
"mnemonic": "SLTU",
|
|
"category": "CPU",
|
|
"count": 130,
|
|
"first_example": "0xbfc003c0",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x2B"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|3",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x03",
|
|
"mnemonic": "SRA",
|
|
"category": "CPU",
|
|
"count": 300,
|
|
"first_example": "0xbfc016bc",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x03 (arithmetic right shift via int32_t cast, literal shamt)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|7",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x07",
|
|
"mnemonic": "SRAV",
|
|
"category": "CPU",
|
|
"count": 5,
|
|
"first_example": "0xbfc3c8f8",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x07 (variable arithmetic right, rs[4:0] via & 0x1Fu mask)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|2",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x02",
|
|
"mnemonic": "SRL",
|
|
"category": "CPU",
|
|
"count": 94,
|
|
"first_example": "0xbfc01ce4",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x02 (logical right shift, literal shamt)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|35",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x23",
|
|
"mnemonic": "SUBU",
|
|
"category": "CPU",
|
|
"count": 517,
|
|
"first_example": "0xbfc00ee0",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x23"
|
|
},
|
|
{
|
|
"bucket_key": "43|none|0",
|
|
"primary_opcode_hex": "0x2B",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "SW",
|
|
"category": "CPU",
|
|
"count": 4037,
|
|
"first_example": "0xbfc0000c",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x2B (4-aligned; addr & 3 -> psx_unaligned_access)"
|
|
},
|
|
{
|
|
"bucket_key": "42|none|0",
|
|
"primary_opcode_hex": "0x2A",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "SWL",
|
|
"category": "CPU",
|
|
"count": 6,
|
|
"first_example": "0xbfc195a4",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x2A (unaligned high-bytes word store; no alignment fault by design)"
|
|
},
|
|
{
|
|
"bucket_key": "46|none|0",
|
|
"primary_opcode_hex": "0x2E",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "SWR",
|
|
"category": "CPU",
|
|
"count": 6,
|
|
"first_example": "0xbfc195a8",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x2E (unaligned low-bytes word store; no alignment fault by design)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|12",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x0C",
|
|
"mnemonic": "SYSCALL",
|
|
"category": "CPU",
|
|
"count": 2,
|
|
"first_example": "0xbfc0d8c4",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x0C (non-terminator; calls psx_syscall(cpu, gpr[2]) then return; no exception model)"
|
|
},
|
|
{
|
|
"bucket_key": "0|funct|38",
|
|
"primary_opcode_hex": "0x00",
|
|
"sub_kind": "funct",
|
|
"sub_value_hex": "0x26",
|
|
"mnemonic": "XOR",
|
|
"category": "CPU",
|
|
"count": 28,
|
|
"first_example": "0xbfc07528",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x26"
|
|
},
|
|
{
|
|
"bucket_key": "14|none|0",
|
|
"primary_opcode_hex": "0x0E",
|
|
"sub_kind": "none",
|
|
"sub_value_hex": "0x00",
|
|
"mnemonic": "XORI",
|
|
"category": "CPU",
|
|
"count": 5,
|
|
"first_example": "0xbfc14104",
|
|
"status": "implemented",
|
|
"source": "recompiler/src/strict_translator.cpp primary 0x0E (zero-extended imm)"
|
|
}
|
|
],
|
|
"implemented_but_unused": [
|
|
{
|
|
"bucket_key": "0|funct|6",
|
|
"mnemonic": "SRLV",
|
|
"source": "recompiler/src/strict_translator.cpp SPECIAL funct 0x06 (variable logical right, rs[4:0] via & 0x1Fu mask; ISA-completeness exception, zero inventory hits)",
|
|
"note": "Implemented in strict_translator but not observed in any walked BIOS function. May be needed for code that lives in copy-to-RAM bytes (exception handler) \u2014 re-evaluate after Phase 1e relocation work."
|
|
},
|
|
{
|
|
"bucket_key": "16|rfe|0",
|
|
"mnemonic": "RFE",
|
|
"source": "recompiler/src/strict_translator.cpp:191-205",
|
|
"note": "Implemented in strict_translator but not observed in any walked BIOS function. May be needed for code that lives in copy-to-RAM bytes (exception handler) \u2014 re-evaluate after Phase 1e relocation work."
|
|
}
|
|
]
|
|
} |