xenia-cpu: VMX128, FPSCR, decoder split, scheduler, decode/block caches
Split the monolithic interpreter into cohesive modules: dedicated decoder (decoder.rs) producing 8-byte DecodedInstr; opcode tables (opcode.rs); explicit traps (trap.rs); FPSCR helpers (fpscr.rs); overflow/carry helpers (overflow.rs); a 4 KiB-page-versioned decode cache and basic-block cache (block_cache.rs); and a full VMX/VMX128 implementation (vmx.rs) covering AltiVec + Xenon's 128-bit extensions. Add the parallel-execution substrate behind --parallel: a 7-party phaser (phaser.rs) for round-based barrier sync, ReservationTable (reservation.rs) for guest LL/SC, and the per-HW-thread scheduler core (scheduler.rs) that owns ThreadRefs, runqueues, and pending IRQs. Disassembler is now the single source of truth: disasm.rs gains the full base + extended + VMX128 mnemonic set, with golden JSON fixtures and a disasm_goldens test suite. Add a criterion-style interpreter bench. context.rs grows the per-thread state the new modules need (reservation slot, FPSCR, vector regs). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
571
crates/xenia-cpu/tests/golden/base_mnemonics.json
Normal file
571
crates/xenia-cpu/tests/golden/base_mnemonics.json
Normal file
@@ -0,0 +1,571 @@
|
||||
{
|
||||
"rows": [
|
||||
{
|
||||
"label": "add r3,r4,r5",
|
||||
"raw": "0x7C642A14",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "add",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "add. r3,r4,r5",
|
||||
"raw": "0x7C642A15",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "add.",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "addo r3,r4,r5",
|
||||
"raw": "0x7C642E14",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addo",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "addo. r3,r4,r5",
|
||||
"raw": "0x7C642E15",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addo.",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "neg r3,r4",
|
||||
"raw": "0x7C6400D0",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "neg",
|
||||
"operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "mullw r3,r4,r5",
|
||||
"raw": "0x7C6429D6",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mullw",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "divw r3,r4,r5",
|
||||
"raw": "0x7C642BD6",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "divw",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "mulhw. r3,r4,r5",
|
||||
"raw": "0x7C642897",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mulhw.",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "mulhwu. r3,r4,r5",
|
||||
"raw": "0x7C642817",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mulhwu.",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "mulld r3,r4,r5",
|
||||
"raw": "0x7C6429D2",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mulld",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "and r3,r4,r5",
|
||||
"raw": "0x7C832838",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "and",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "or r3,r4,r5 (non-mr: rs!=rb)",
|
||||
"raw": "0x7C832B78",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "or",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "xor r3,r4,r5",
|
||||
"raw": "0x7C832A78",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "xor",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "nor r3,r4,r5",
|
||||
"raw": "0x7C8328F8",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "nor",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "nand r3,r4,r5",
|
||||
"raw": "0x7C832BB8",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "nand",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "eqv r3,r4,r5",
|
||||
"raw": "0x7C832A38",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "eqv",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "andc r3,r4,r5",
|
||||
"raw": "0x7C832878",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "andc",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "orc r3,r4,r5",
|
||||
"raw": "0x7C832B38",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "orc",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "slw r3,r4,r5",
|
||||
"raw": "0x7C832830",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "slw",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "srw r3,r4,r5",
|
||||
"raw": "0x7C832C30",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "srw",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "sraw r3,r4,r5",
|
||||
"raw": "0x7C832E30",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "sraw",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "sld r3,r4,r5",
|
||||
"raw": "0x7C832836",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "sld",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "srd r3,r4,r5",
|
||||
"raw": "0x7C832C36",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "srd",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "srawi r3,r4,16",
|
||||
"raw": "0x7C838670",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "srawi",
|
||||
"operands": "r3, r4, 16"
|
||||
},
|
||||
{
|
||||
"label": "stwcx. r3,r4,r5",
|
||||
"raw": "0x7C64292D",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "stwcx.",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "stdcx. r3,r4,r5",
|
||||
"raw": "0x7C6429AD",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "stdcx.",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "lwarx r3,r4,r5",
|
||||
"raw": "0x7C642828",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "lwarx",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "ldarx r3,r4,r5",
|
||||
"raw": "0x7C6428A8",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "ldarx",
|
||||
"operands": "r3, r4, r5"
|
||||
},
|
||||
{
|
||||
"label": "cmpwi cr0, r3, 16",
|
||||
"raw": "0x2C030010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cmpi",
|
||||
"operands": "0, r3, 16",
|
||||
"ext_mnemonic": "cmpwi",
|
||||
"ext_operands": "r3, 16"
|
||||
},
|
||||
{
|
||||
"label": "cmpwi cr2, r3, 16",
|
||||
"raw": "0x2D030010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cmpi",
|
||||
"operands": "cr2, 0, r3, 16",
|
||||
"ext_mnemonic": "cmpwi",
|
||||
"ext_operands": "cr2, r3, 16"
|
||||
},
|
||||
{
|
||||
"label": "cmplwi cr0, r3, 16",
|
||||
"raw": "0x28030010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cmpli",
|
||||
"operands": "0, r3, 0x10",
|
||||
"ext_mnemonic": "cmplwi",
|
||||
"ext_operands": "r3, 0x10"
|
||||
},
|
||||
{
|
||||
"label": "cmpw r3,r4 in cr0",
|
||||
"raw": "0x7C032000",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cmp",
|
||||
"operands": "0, r3, r4",
|
||||
"ext_mnemonic": "cmpw",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "cmpd r3,r4",
|
||||
"raw": "0x7C232000",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cmp",
|
||||
"operands": "1, r3, r4",
|
||||
"ext_mnemonic": "cmpd",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "cmplw r3,r4",
|
||||
"raw": "0x7C032040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cmpl",
|
||||
"operands": "0, r3, r4",
|
||||
"ext_mnemonic": "cmplw",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "addi r3, r1, 16",
|
||||
"raw": "0x38610010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addi",
|
||||
"operands": "r3, r1, 16"
|
||||
},
|
||||
{
|
||||
"label": "addis r3, r1, 0x100 (ra!=0)",
|
||||
"raw": "0x3C610100",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addis",
|
||||
"operands": "r3, r1, 0x100"
|
||||
},
|
||||
{
|
||||
"label": "mulli r3, r4, 5",
|
||||
"raw": "0x1C640005",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mulli",
|
||||
"operands": "r3, r4, 5"
|
||||
},
|
||||
{
|
||||
"label": "subfic r3, r4, 5",
|
||||
"raw": "0x20640005",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "subfic",
|
||||
"operands": "r3, r4, 5"
|
||||
},
|
||||
{
|
||||
"label": "addic r3, r4, 16",
|
||||
"raw": "0x30640010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addic",
|
||||
"operands": "r3, r4, 16"
|
||||
},
|
||||
{
|
||||
"label": "addic. r3, r4, 16",
|
||||
"raw": "0x34640010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addic.",
|
||||
"operands": "r3, r4, 16"
|
||||
},
|
||||
{
|
||||
"label": "ori r4, r3, 0x10 (non-nop)",
|
||||
"raw": "0x60640010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "ori",
|
||||
"operands": "r4, r3, 0x10"
|
||||
},
|
||||
{
|
||||
"label": "oris r4, r3, 0x10",
|
||||
"raw": "0x64640010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "oris",
|
||||
"operands": "r4, r3, 0x10"
|
||||
},
|
||||
{
|
||||
"label": "xori r4, r3, 0x10",
|
||||
"raw": "0x68640010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "xori",
|
||||
"operands": "r4, r3, 0x10"
|
||||
},
|
||||
{
|
||||
"label": "andi. r4, r3, 0x10",
|
||||
"raw": "0x70640010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "andi.",
|
||||
"operands": "r4, r3, 0x10"
|
||||
},
|
||||
{
|
||||
"label": "lwz r5, 0x20(r1)",
|
||||
"raw": "0x80A10020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "lwz",
|
||||
"operands": "r5, 32(r1)"
|
||||
},
|
||||
{
|
||||
"label": "stw r5, 0x20(r1)",
|
||||
"raw": "0x90A10020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "stw",
|
||||
"operands": "r5, 32(r1)"
|
||||
},
|
||||
{
|
||||
"label": "lbz r5, 0x20(r1)",
|
||||
"raw": "0x88A10020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "lbz",
|
||||
"operands": "r5, 32(r1)"
|
||||
},
|
||||
{
|
||||
"label": "lhz r5, 0x20(r1)",
|
||||
"raw": "0xA0A10020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "lhz",
|
||||
"operands": "r5, 32(r1)"
|
||||
},
|
||||
{
|
||||
"label": "lfs f5, 0x20(r1)",
|
||||
"raw": "0xC0A10020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "lfs",
|
||||
"operands": "f5, 32(r1)"
|
||||
},
|
||||
{
|
||||
"label": "lfd f5, 0x20(r1)",
|
||||
"raw": "0xC8A10020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "lfd",
|
||||
"operands": "f5, 32(r1)"
|
||||
},
|
||||
{
|
||||
"label": "stfd f5, 0x20(r1)",
|
||||
"raw": "0xD8A10020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "stfd",
|
||||
"operands": "f5, 32(r1)"
|
||||
},
|
||||
{
|
||||
"label": "ld r5, 0x20(r1)",
|
||||
"raw": "0xE8A10020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "ld",
|
||||
"operands": "r5, 32(r1)"
|
||||
},
|
||||
{
|
||||
"label": "std r5, 0x20(r1)",
|
||||
"raw": "0xF8A10020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "std",
|
||||
"operands": "r5, 32(r1)"
|
||||
},
|
||||
{
|
||||
"label": "sync 0 (extends to sync)",
|
||||
"raw": "0x7C0004AC",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "sync",
|
||||
"operands": ""
|
||||
},
|
||||
{
|
||||
"label": "isync",
|
||||
"raw": "0x4C00012C",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "isync",
|
||||
"operands": ""
|
||||
},
|
||||
{
|
||||
"label": "eieio",
|
||||
"raw": "0x7C0006AC",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "eieio",
|
||||
"operands": ""
|
||||
},
|
||||
{
|
||||
"label": "dcbst r1, r2",
|
||||
"raw": "0x7C01106C",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "dcbst",
|
||||
"operands": "r1, r2"
|
||||
},
|
||||
{
|
||||
"label": "dcbf r1, r2",
|
||||
"raw": "0x7C0110AC",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "dcbf",
|
||||
"operands": "r1, r2"
|
||||
},
|
||||
{
|
||||
"label": "dcbt r1, r2",
|
||||
"raw": "0x7C01122C",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "dcbt",
|
||||
"operands": "r1, r2"
|
||||
},
|
||||
{
|
||||
"label": "dcbz r1, r2",
|
||||
"raw": "0x7C0117EC",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "dcbz",
|
||||
"operands": "r1, r2"
|
||||
},
|
||||
{
|
||||
"label": "dcbz128 r1, r2",
|
||||
"raw": "0x7C2117EC",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "dcbz128",
|
||||
"operands": "r1, r2"
|
||||
},
|
||||
{
|
||||
"label": "crnor 4,5,6 (no simplify)",
|
||||
"raw": "0x4C853042",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "crnor",
|
||||
"operands": "4*cr1+lt, 4*cr1+gt, 4*cr1+eq"
|
||||
},
|
||||
{
|
||||
"label": "crand 4,5,6",
|
||||
"raw": "0x4C853202",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "crand",
|
||||
"operands": "4*cr1+lt, 4*cr1+gt, 4*cr1+eq"
|
||||
},
|
||||
{
|
||||
"label": "cror 4,5,6 (no simplify)",
|
||||
"raw": "0x4C853382",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cror",
|
||||
"operands": "4*cr1+lt, 4*cr1+gt, 4*cr1+eq"
|
||||
},
|
||||
{
|
||||
"label": "tw 11, r3, r4 (uncommon TO)",
|
||||
"raw": "0x7D632008",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "tw",
|
||||
"operands": "11, r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "tdi 11, r3, 123",
|
||||
"raw": "0x0963007B",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "tdi",
|
||||
"operands": "11, r3, 123"
|
||||
},
|
||||
{
|
||||
"label": "mtcrf 0xFF, r5 → mtcr",
|
||||
"raw": "0x7CAFF120",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mtcrf",
|
||||
"operands": "0xFF, r5",
|
||||
"ext_mnemonic": "mtcr",
|
||||
"ext_operands": "r5"
|
||||
},
|
||||
{
|
||||
"label": "mfcr r5",
|
||||
"raw": "0x7CA00026",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mfcr",
|
||||
"operands": "r5"
|
||||
},
|
||||
{
|
||||
"label": "mfmsr r5",
|
||||
"raw": "0x7CA000A6",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mfmsr",
|
||||
"operands": "r5"
|
||||
},
|
||||
{
|
||||
"label": "mtmsr r5",
|
||||
"raw": "0x7CA00124",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mtmsr",
|
||||
"operands": "r5"
|
||||
},
|
||||
{
|
||||
"label": "mtmsrd r5",
|
||||
"raw": "0x7CA00164",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mtmsrd",
|
||||
"operands": "r5"
|
||||
},
|
||||
{
|
||||
"label": "fadd f3, f4, f5",
|
||||
"raw": "0xFC64282A",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "fadd",
|
||||
"operands": "f3, f4, f5"
|
||||
},
|
||||
{
|
||||
"label": "fsub f3, f4, f5",
|
||||
"raw": "0xFC642828",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "fsub",
|
||||
"operands": "f3, f4, f5"
|
||||
},
|
||||
{
|
||||
"label": "fdiv f3, f4, f5",
|
||||
"raw": "0xFC642824",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "fdiv",
|
||||
"operands": "f3, f4, f5"
|
||||
},
|
||||
{
|
||||
"label": "fmul f3, f0, f5 (encoded)",
|
||||
"raw": "0xFCE02832",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "fmul",
|
||||
"operands": "f7, f0, f0"
|
||||
},
|
||||
{
|
||||
"label": "fneg f3, f4",
|
||||
"raw": "0xFC640050",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "fneg",
|
||||
"operands": "f3, f0"
|
||||
},
|
||||
{
|
||||
"label": "fmr f3, f4",
|
||||
"raw": "0xFC640090",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "fmr",
|
||||
"operands": "f3, f0"
|
||||
},
|
||||
{
|
||||
"label": "mtfsf 0xFF, f5 (Rc=0)",
|
||||
"raw": "0xFDFE2D8E",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mtfsf",
|
||||
"operands": "0xFF, f5"
|
||||
},
|
||||
{
|
||||
"label": "mtfsf. 0xFF, f5 (Rc=1)",
|
||||
"raw": "0xFDFE2D8F",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mtfsf.",
|
||||
"operands": "0xFF, f5"
|
||||
}
|
||||
]
|
||||
}
|
||||
621
crates/xenia-cpu/tests/golden/extended_mnemonics.json
Normal file
621
crates/xenia-cpu/tests/golden/extended_mnemonics.json
Normal file
@@ -0,0 +1,621 @@
|
||||
{
|
||||
"rows": [
|
||||
{
|
||||
"label": "nop",
|
||||
"raw": "0x60000000",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "ori",
|
||||
"operands": "r0, r0, 0x0",
|
||||
"ext_mnemonic": "nop",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "li r3, 16",
|
||||
"raw": "0x38600010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addi",
|
||||
"operands": "r3, r0, 16",
|
||||
"ext_mnemonic": "li",
|
||||
"ext_operands": "r3, 16"
|
||||
},
|
||||
{
|
||||
"label": "li r3, -1",
|
||||
"raw": "0x3860FFFF",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addi",
|
||||
"operands": "r3, r0, -1",
|
||||
"ext_mnemonic": "li",
|
||||
"ext_operands": "r3, -1"
|
||||
},
|
||||
{
|
||||
"label": "subi r3, r4, 16",
|
||||
"raw": "0x3864FFF0",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addi",
|
||||
"operands": "r3, r4, -16",
|
||||
"ext_mnemonic": "subi",
|
||||
"ext_operands": "r3, r4, 16"
|
||||
},
|
||||
{
|
||||
"label": "lis r3, 0x1234",
|
||||
"raw": "0x3C601234",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addis",
|
||||
"operands": "r3, r0, 0x1234",
|
||||
"ext_mnemonic": "lis",
|
||||
"ext_operands": "r3, 0x1234"
|
||||
},
|
||||
{
|
||||
"label": "subis r3, r4, 0xFFFF",
|
||||
"raw": "0x3C64FFFF",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "addis",
|
||||
"operands": "r3, r4, 0xFFFF",
|
||||
"ext_mnemonic": "subis",
|
||||
"ext_operands": "r3, r4, 0x1"
|
||||
},
|
||||
{
|
||||
"label": "mr r3, r4",
|
||||
"raw": "0x7C832378",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "or",
|
||||
"operands": "r3, r4, r4",
|
||||
"ext_mnemonic": "mr",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "mr. r3, r4",
|
||||
"raw": "0x7C832379",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "or.",
|
||||
"operands": "r3, r4, r4",
|
||||
"ext_mnemonic": "mr.",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "mr (via and)",
|
||||
"raw": "0x7C832038",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "and",
|
||||
"operands": "r3, r4, r4",
|
||||
"ext_mnemonic": "mr",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "not r3, r4",
|
||||
"raw": "0x7C8320F8",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "nor",
|
||||
"operands": "r3, r4, r4",
|
||||
"ext_mnemonic": "not",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "subf → sub r3, r5, r4",
|
||||
"raw": "0x7C642850",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "subf",
|
||||
"operands": "r3, r4, r5",
|
||||
"ext_mnemonic": "sub",
|
||||
"ext_operands": "r3, r5, r4"
|
||||
},
|
||||
{
|
||||
"label": "slwi r3, r4, 4",
|
||||
"raw": "0x54832036",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rlwinm",
|
||||
"operands": "r3, r4, 4, 0, 27",
|
||||
"ext_mnemonic": "slwi",
|
||||
"ext_operands": "r3, r4, 4"
|
||||
},
|
||||
{
|
||||
"label": "srwi r3, r4, 4",
|
||||
"raw": "0x5483E13E",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rlwinm",
|
||||
"operands": "r3, r4, 28, 4, 31",
|
||||
"ext_mnemonic": "srwi",
|
||||
"ext_operands": "r3, r4, 4"
|
||||
},
|
||||
{
|
||||
"label": "rotlwi r3, r4, 8",
|
||||
"raw": "0x5483403E",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rlwinm",
|
||||
"operands": "r3, r4, 8, 0, 31",
|
||||
"ext_mnemonic": "rotlwi",
|
||||
"ext_operands": "r3, r4, 8"
|
||||
},
|
||||
{
|
||||
"label": "clrlwi r3, r4, 4",
|
||||
"raw": "0x5483013E",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rlwinm",
|
||||
"operands": "r3, r4, 0, 4, 31",
|
||||
"ext_mnemonic": "clrlwi",
|
||||
"ext_operands": "r3, r4, 4"
|
||||
},
|
||||
{
|
||||
"label": "clrrwi r3, r4, 4",
|
||||
"raw": "0x54830036",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rlwinm",
|
||||
"operands": "r3, r4, 0, 0, 27",
|
||||
"ext_mnemonic": "clrrwi",
|
||||
"ext_operands": "r3, r4, 4"
|
||||
},
|
||||
{
|
||||
"label": "extlwi r3, r4, 8, 8",
|
||||
"raw": "0x5483400E",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rlwinm",
|
||||
"operands": "r3, r4, 8, 0, 7",
|
||||
"ext_mnemonic": "extlwi",
|
||||
"ext_operands": "r3, r4, 8, 8"
|
||||
},
|
||||
{
|
||||
"label": "slwi. r3, r4, 4",
|
||||
"raw": "0x54832037",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rlwinm.",
|
||||
"operands": "r3, r4, 4, 0, 27",
|
||||
"ext_mnemonic": "slwi.",
|
||||
"ext_operands": "r3, r4, 4"
|
||||
},
|
||||
{
|
||||
"label": "rlwinm. r11,r11,0,31,31 (no simplify)",
|
||||
"raw": "0x556B07FF",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rlwinm.",
|
||||
"operands": "r11, r11, 0, 31, 31",
|
||||
"ext_mnemonic": "clrlwi.",
|
||||
"ext_operands": "r11, r11, 31"
|
||||
},
|
||||
{
|
||||
"label": "clrldi r3, r4, 32",
|
||||
"raw": "0x78830020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rldicl",
|
||||
"operands": "r3, r4, 0, 32",
|
||||
"ext_mnemonic": "clrldi",
|
||||
"ext_operands": "r3, r4, 32"
|
||||
},
|
||||
{
|
||||
"label": "srdi r3, r4, 8",
|
||||
"raw": "0x7883E200",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rldicl",
|
||||
"operands": "r3, r4, 56, 8",
|
||||
"ext_mnemonic": "srdi",
|
||||
"ext_operands": "r3, r4, 8"
|
||||
},
|
||||
{
|
||||
"label": "rotldi r3, r4, 8",
|
||||
"raw": "0x78832000",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "rldicl",
|
||||
"operands": "r3, r4, 8, 0",
|
||||
"ext_mnemonic": "rotldi",
|
||||
"ext_operands": "r3, r4, 8"
|
||||
},
|
||||
{
|
||||
"label": "cmpwi cr0, r3, 16",
|
||||
"raw": "0x2C030010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cmpi",
|
||||
"operands": "0, r3, 16",
|
||||
"ext_mnemonic": "cmpwi",
|
||||
"ext_operands": "r3, 16"
|
||||
},
|
||||
{
|
||||
"label": "cmpdi (L=1) variant",
|
||||
"raw": "0x2C230010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cmpi",
|
||||
"operands": "1, r3, 16",
|
||||
"ext_mnemonic": "cmpdi",
|
||||
"ext_operands": "r3, 16"
|
||||
},
|
||||
{
|
||||
"label": "blr",
|
||||
"raw": "0x4E800020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bclr",
|
||||
"operands": "20, lt",
|
||||
"ext_mnemonic": "blr",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "blrl",
|
||||
"raw": "0x4E800021",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bclrl",
|
||||
"operands": "20, lt",
|
||||
"ext_mnemonic": "blrl",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "bctr",
|
||||
"raw": "0x4E800420",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bcctr",
|
||||
"operands": "20, lt",
|
||||
"ext_mnemonic": "bctr",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "bctrl",
|
||||
"raw": "0x4E800421",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bcctrl",
|
||||
"operands": "20, lt",
|
||||
"ext_mnemonic": "bctrl",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "beqlr (BO=12, BI=2 → cr0.eq true)",
|
||||
"raw": "0x4D820020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bclr",
|
||||
"operands": "12, eq",
|
||||
"ext_mnemonic": "beqlr",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "bnelr",
|
||||
"raw": "0x4C820020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bclr",
|
||||
"operands": "4, eq",
|
||||
"ext_mnemonic": "bnelr",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "bc → b 0x82000040",
|
||||
"raw": "0x42800040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "20, lt, 0x82000040",
|
||||
"ext_mnemonic": "b",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bc l → bl 0x82000040",
|
||||
"raw": "0x42800041",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bcl",
|
||||
"operands": "20, lt, 0x82000040",
|
||||
"ext_mnemonic": "bl",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bc 12,cr0.eq → beq 0x82000040",
|
||||
"raw": "0x41820040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "12, eq, 0x82000040",
|
||||
"ext_mnemonic": "beq",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bc 4,cr0.eq → bne 0x82000040",
|
||||
"raw": "0x40820040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "4, eq, 0x82000040",
|
||||
"ext_mnemonic": "bne",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bc 12,cr0.lt → blt 0x82000040",
|
||||
"raw": "0x41800040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "12, lt, 0x82000040",
|
||||
"ext_mnemonic": "blt",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bc 4,cr0.lt → bge 0x82000040",
|
||||
"raw": "0x40800040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "4, lt, 0x82000040",
|
||||
"ext_mnemonic": "bge",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bc 12,cr0.gt → bgt 0x82000040",
|
||||
"raw": "0x41810040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "12, gt, 0x82000040",
|
||||
"ext_mnemonic": "bgt",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bc 4,cr0.gt → ble 0x82000040",
|
||||
"raw": "0x40810040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "4, gt, 0x82000040",
|
||||
"ext_mnemonic": "ble",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bc 12, cr2.eq → beq cr2, 0x...040",
|
||||
"raw": "0x418A0040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "12, 4*cr2+eq, 0x82000040",
|
||||
"ext_mnemonic": "beq",
|
||||
"ext_operands": "cr2, 0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bdnz 0x82000040",
|
||||
"raw": "0x42000040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "16, lt, 0x82000040",
|
||||
"ext_mnemonic": "bdnzge",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bdz 0x82000040",
|
||||
"raw": "0x42400040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bc",
|
||||
"operands": "18, lt, 0x82000040",
|
||||
"ext_mnemonic": "bdzge",
|
||||
"ext_operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "b +0x40 → 0x82000040",
|
||||
"raw": "0x48000040",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "b",
|
||||
"operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "bl +0x40 → 0x82000040",
|
||||
"raw": "0x48000041",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bl",
|
||||
"operands": "0x82000040",
|
||||
"branch_target": "0x82000040"
|
||||
},
|
||||
{
|
||||
"label": "ba 0x40 absolute",
|
||||
"raw": "0x48000042",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "ba",
|
||||
"operands": "0x00000040",
|
||||
"branch_target": "0x00000040"
|
||||
},
|
||||
{
|
||||
"label": "bla 0x40 absolute",
|
||||
"raw": "0x48000043",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bla",
|
||||
"operands": "0x00000040",
|
||||
"branch_target": "0x00000040"
|
||||
},
|
||||
{
|
||||
"label": "tdeqi r3, 123",
|
||||
"raw": "0x0883007B",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "tdi",
|
||||
"operands": "4, r3, 123",
|
||||
"ext_mnemonic": "tdeqi",
|
||||
"ext_operands": "r3, 123"
|
||||
},
|
||||
{
|
||||
"label": "twlti r3, 123",
|
||||
"raw": "0x0E03007B",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "twi",
|
||||
"operands": "16, r3, 123",
|
||||
"ext_mnemonic": "twlti",
|
||||
"ext_operands": "r3, 123"
|
||||
},
|
||||
{
|
||||
"label": "mflr r3",
|
||||
"raw": "0x7C6802A6",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mfspr",
|
||||
"operands": "r3, LR",
|
||||
"ext_mnemonic": "mflr",
|
||||
"ext_operands": "r3"
|
||||
},
|
||||
{
|
||||
"label": "mfctr r3",
|
||||
"raw": "0x7C6902A6",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mfspr",
|
||||
"operands": "r3, CTR",
|
||||
"ext_mnemonic": "mfctr",
|
||||
"ext_operands": "r3"
|
||||
},
|
||||
{
|
||||
"label": "mfxer r3",
|
||||
"raw": "0x7C6102A6",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mfspr",
|
||||
"operands": "r3, XER",
|
||||
"ext_mnemonic": "mfxer",
|
||||
"ext_operands": "r3"
|
||||
},
|
||||
{
|
||||
"label": "mtlr r3",
|
||||
"raw": "0x7C6803A6",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mtspr",
|
||||
"operands": "LR, r3",
|
||||
"ext_mnemonic": "mtlr",
|
||||
"ext_operands": "r3"
|
||||
},
|
||||
{
|
||||
"label": "mtctr r3",
|
||||
"raw": "0x7C6903A6",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mtspr",
|
||||
"operands": "CTR, r3",
|
||||
"ext_mnemonic": "mtctr",
|
||||
"ext_operands": "r3"
|
||||
},
|
||||
{
|
||||
"label": "mtxer r3",
|
||||
"raw": "0x7C6103A6",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mtspr",
|
||||
"operands": "XER, r3",
|
||||
"ext_mnemonic": "mtxer",
|
||||
"ext_operands": "r3"
|
||||
},
|
||||
{
|
||||
"label": "crnot 4, 5",
|
||||
"raw": "0x4C852842",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "crnor",
|
||||
"operands": "4*cr1+lt, 4*cr1+gt, 4*cr1+gt",
|
||||
"ext_mnemonic": "crnot",
|
||||
"ext_operands": "4*cr1+lt, 4*cr1+gt"
|
||||
},
|
||||
{
|
||||
"label": "crclr 4",
|
||||
"raw": "0x4C842182",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "crxor",
|
||||
"operands": "4*cr1+lt, 4*cr1+lt, 4*cr1+lt",
|
||||
"ext_mnemonic": "crclr",
|
||||
"ext_operands": "4*cr1+lt"
|
||||
},
|
||||
{
|
||||
"label": "crset 4",
|
||||
"raw": "0x4C842242",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "creqv",
|
||||
"operands": "4*cr1+lt, 4*cr1+lt, 4*cr1+lt",
|
||||
"ext_mnemonic": "crset",
|
||||
"ext_operands": "4*cr1+lt"
|
||||
},
|
||||
{
|
||||
"label": "crmove 4, 5",
|
||||
"raw": "0x4C852B82",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "cror",
|
||||
"operands": "4*cr1+lt, 4*cr1+gt, 4*cr1+gt",
|
||||
"ext_mnemonic": "crmove",
|
||||
"ext_operands": "4*cr1+lt, 4*cr1+gt"
|
||||
},
|
||||
{
|
||||
"label": "lwsync",
|
||||
"raw": "0x7C2004AC",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "sync",
|
||||
"operands": ""
|
||||
},
|
||||
{
|
||||
"label": "trap",
|
||||
"raw": "0x7FE00008",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "tw",
|
||||
"operands": "31, r0, r0",
|
||||
"ext_mnemonic": "trap",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "blr (BO=20, BI=4 — BI is don't-care)",
|
||||
"raw": "0x4E840020",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bclr",
|
||||
"operands": "20, 4*cr1+lt",
|
||||
"ext_mnemonic": "blr",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "blrl (BO=20, BI=7)",
|
||||
"raw": "0x4E870021",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bclrl",
|
||||
"operands": "20, 4*cr1+so",
|
||||
"ext_mnemonic": "blrl",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "bctr (BO=20, BI=4)",
|
||||
"raw": "0x4E840420",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "bcctr",
|
||||
"operands": "20, 4*cr1+lt",
|
||||
"ext_mnemonic": "bctr",
|
||||
"ext_operands": ""
|
||||
},
|
||||
{
|
||||
"label": "twllt r3, r4 (TO=2)",
|
||||
"raw": "0x7C432008",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "tw",
|
||||
"operands": "2, r3, r4",
|
||||
"ext_mnemonic": "twllt",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "twlgt r3, r4 (TO=1)",
|
||||
"raw": "0x7C232008",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "tw",
|
||||
"operands": "1, r3, r4",
|
||||
"ext_mnemonic": "twlgt",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "tdlge r3, r4 (TO=5)",
|
||||
"raw": "0x7CA32088",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "td",
|
||||
"operands": "5, r3, r4",
|
||||
"ext_mnemonic": "tdlge",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "twlle r3, r4 (TO=6)",
|
||||
"raw": "0x7CC32008",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "tw",
|
||||
"operands": "6, r3, r4",
|
||||
"ext_mnemonic": "twlle",
|
||||
"ext_operands": "r3, r4"
|
||||
},
|
||||
{
|
||||
"label": "twllti r3, 16",
|
||||
"raw": "0x0C430010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "twi",
|
||||
"operands": "2, r3, 16",
|
||||
"ext_mnemonic": "twllti",
|
||||
"ext_operands": "r3, 16"
|
||||
},
|
||||
{
|
||||
"label": "tdlgei r3, 16",
|
||||
"raw": "0x08A30010",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "tdi",
|
||||
"operands": "5, r3, 16",
|
||||
"ext_mnemonic": "tdlgei",
|
||||
"ext_operands": "r3, 16"
|
||||
}
|
||||
]
|
||||
}
|
||||
137
crates/xenia-cpu/tests/golden/vmx128_registers.json
Normal file
137
crates/xenia-cpu/tests/golden/vmx128_registers.json
Normal file
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"rows": [
|
||||
{
|
||||
"label": "vaddubm v3, v4, v5",
|
||||
"raw": "0x10642800",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vaddubm",
|
||||
"operands": "v3, v4, v5"
|
||||
},
|
||||
{
|
||||
"label": "vaddfp v3, v4, v5",
|
||||
"raw": "0x1064280A",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vaddfp",
|
||||
"operands": "v3, v4, v5"
|
||||
},
|
||||
{
|
||||
"label": "vand v3, v4, v5",
|
||||
"raw": "0x10642C04",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vand",
|
||||
"operands": "v3, v4, v5"
|
||||
},
|
||||
{
|
||||
"label": "vor v3, v4, v5",
|
||||
"raw": "0x10642C84",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vor",
|
||||
"operands": "v3, v4, v5"
|
||||
},
|
||||
{
|
||||
"label": "vxor v3, v4, v5",
|
||||
"raw": "0x10642CC4",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vxor",
|
||||
"operands": "v3, v4, v5"
|
||||
},
|
||||
{
|
||||
"label": "vsel v3,v4,v5,v6",
|
||||
"raw": "0x106429AA",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vsel",
|
||||
"operands": "v3, v4, v5, v6"
|
||||
},
|
||||
{
|
||||
"label": "vperm v3,v4,v5,v6",
|
||||
"raw": "0x106429AB",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vperm",
|
||||
"operands": "v3, v4, v5, v6"
|
||||
},
|
||||
{
|
||||
"label": "vmaddfp v3, v4, v6, v5 (swap)",
|
||||
"raw": "0x106429AE",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vmaddfp",
|
||||
"operands": "v3, v4, v6, v5"
|
||||
},
|
||||
{
|
||||
"label": "mfvscr v3",
|
||||
"raw": "0x10600604",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mfvscr",
|
||||
"operands": "v3"
|
||||
},
|
||||
{
|
||||
"label": "mtvscr v5",
|
||||
"raw": "0x10002E44",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "mtvscr",
|
||||
"operands": "v5"
|
||||
},
|
||||
{
|
||||
"label": "vaddfp128 (encoded sloppily)",
|
||||
"raw": "0x14642801",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vperm128",
|
||||
"operands": "v3, v3, v5, 0"
|
||||
},
|
||||
{
|
||||
"label": "encoding vd_hi=00: actually vsrw128",
|
||||
"raw": "0x180461D0",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vsrw128",
|
||||
"operands": "v0, v0, v12"
|
||||
},
|
||||
{
|
||||
"label": "encoding vd_hi=10: actually vsrw128 v32",
|
||||
"raw": "0x180465D0",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vsrw128",
|
||||
"operands": "v32, v0, v12"
|
||||
},
|
||||
{
|
||||
"label": "encoding vd_hi=01: actually vpermwi128",
|
||||
"raw": "0x180463D0",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vpermwi128",
|
||||
"operands": "v64, v12, 0xE4"
|
||||
},
|
||||
{
|
||||
"label": "vrlimi128 v96, v12, 4, 3 (real)",
|
||||
"raw": "0x180467D0",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vrlimi128",
|
||||
"operands": "v96, v12, 4, 3"
|
||||
},
|
||||
{
|
||||
"label": "vrlimi128 v127, v127, 4, 3 (real)",
|
||||
"raw": "0x1BE4FFD3",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vrlimi128",
|
||||
"operands": "v127, v95, 4, 3"
|
||||
},
|
||||
{
|
||||
"label": "vmaddfp128 v3, v35, v5, v3",
|
||||
"raw": "0x146028D4",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vmaddfp128",
|
||||
"operands": "v3, v35, v5, v3"
|
||||
},
|
||||
{
|
||||
"label": "vmaddcfp128 v3, v35, v3, v5",
|
||||
"raw": "0x14602914",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vmaddcfp128",
|
||||
"operands": "v3, v35, v3, v5"
|
||||
},
|
||||
{
|
||||
"label": "vnmsubfp128 v3, v35, v3, v5",
|
||||
"raw": "0x14602954",
|
||||
"addr": "0x82000000",
|
||||
"mnemonic": "vnmsubfp128",
|
||||
"operands": "v3, v35, v3, v5"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user