Files
Sylpheed/docs/reference/ppc-instructions.md
MechaCat02 3b90f1c29d
All checks were successful
CI / Native — linux (pull_request) Successful in 45m43s
CI / WASM — Web (pull_request) Successful in 35m47s
CI / Formatting (pull_request) Successful in 1m19s
docs(reference): adopt the four homeless reference files, and a LICENSE
CONSOLIDATION.md Phase 2. Each of these existed only in a repository about to
be retired, or as an untracked file on one disk -- which, for anything that
has to survive a machine, is the same as not existing.

  xex2-format.md            39 KB   the XEX2 container format
  xbox360-exports.{json,md} 1.1 MB  2,913 exports: xboxkrnl, xam, xbdm
  ppc-instructions.{json,md} 340 KB the PowerPC instruction reference
  LICENSE                            MIT -- this repo had none

The first two are byte-identical to xex2tractor's copies, verified with cmp,
and byte-identical again to the loose untracked copies in the project root:
three copies, zero of them tracked.

docs/reference/ is deliberately its own directory with a README that says
what it is NOT: nothing here is a finding, and no docs/re/ page should cite it
as evidence. Reference material filed beside measurements is how a borrowed
table starts getting read as a result.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 19:20:30 +02:00

548 lines
34 KiB
Markdown

# Xenia Canary — PowerPC Instruction Reference
Complete catalog of all **455 PowerPC instructions** implemented in the Xenia (canary)
Xbox 360 emulator. These instructions are defined in `tools/ppc-instructions.xml` and
code-generated into the emitter/decoder/disassembler pipeline.
## Architecture Overview
```
PPC Binary → Decoder (ppc_opcode_lookup_gen.cc)
→ Frontend Emit (ppc_emit_*.cc) → HIR (intermediate representation)
→ Backend Sequences (x64_seq_*.cc / a64_seq_*.cc) → Host Machine Code
```
### Source Files
| File | Role |
|------|------|
| `tools/ppc-instructions.xml` | Master instruction definitions (source of truth) |
| `tools/ppc-table-gen.py` | Code generator |
| `src/xenia/cpu/ppc/ppc_opcode.h` | Generated enum (`PPCOpcode`) |
| `src/xenia/cpu/ppc/ppc_opcode_table_gen.cc` | Generated opcode info table |
| `src/xenia/cpu/ppc/ppc_opcode_lookup_gen.cc` | Generated instruction decoder |
| `src/xenia/cpu/ppc/ppc_opcode_disasm_gen.cc` | Generated disassembler |
| `src/xenia/cpu/ppc/ppc_emit_alu.cc` | Integer/ALU emission (~68 handlers) |
| `src/xenia/cpu/ppc/ppc_emit_control.cc` | Branch/control emission (~28 handlers) |
| `src/xenia/cpu/ppc/ppc_emit_memory.cc` | Load/store emission (~80 handlers) |
| `src/xenia/cpu/ppc/ppc_emit_fpu.cc` | Floating-point emission (~40 handlers) |
| `src/xenia/cpu/ppc/ppc_emit_altivec.cc` | Vector/VMX emission (~306 handlers) |
### Backend Targets
| Backend | Directory |
|---------|-----------|
| x86-64 | `src/xenia/cpu/backend/x64/` |
| ARM64 | `src/xenia/cpu/backend/a64/` |
### Instruction Encoding Formats
**27 formats:** `A`, `B`, `D`, `DCBZ`, `DS`, `I`, `M`, `MD`, `MDS`, `SC`, `VA`, `VC`, `VX`, `VX128`, `VX128_1`, `VX128_2`, `VX128_3`, `VX128_4`, `VX128_5`, `VX128_P`, `VX128_R`, `X`, `XFL`, `XFX`, `XL`, `XO`, `XS`
---
## Instruction Catalog
### Summary
| Category | Count |
|----------|------:|
| Integer / ALU | 70 |
| Branch / System | 9 |
| Condition Register / SPR | 26 |
| Floating-Point | 33 |
| Memory (Load/Store/Cache) | 112 |
| Vector / VMX (AltiVec) | 205 |
| **Total** | **455** |
---
### Integer / ALU (70 instructions)
| # | Mnemonic | Description | Form | Opcode |
|--:|----------|-------------|------|--------|
| 1 | `addx` | Add | XO | `7c000214` |
| 2 | `addcx` | Add Carrying | XO | `7c000014` |
| 3 | `addex` | Add Extended | XO | `7c000114` |
| 4 | `addi` | Add Immediate | D | `38000000` |
| 5 | `addic` | Add Immediate Carrying | D | `30000000` |
| 6 | `addic.` | Add Immediate Carrying and Record | D | `34000000` |
| 7 | `addis` | Add Immediate Shifted | D | `3c000000` |
| 8 | `addmex` | Add to Minus One Extended | XO | `7c0001d4` |
| 9 | `addzex` | Add to Zero Extended | XO | `7c000194` |
| 10 | `andx` | AND | X | `7c000038` |
| 11 | `andcx` | AND with Complement | X | `7c000078` |
| 12 | `andi.` | AND Immediate | D | `70000000` |
| 13 | `andis.` | AND Immediate Shifted | D | `74000000` |
| 14 | `cmp` | Compare | X | `7c000000` |
| 15 | `cmpi` | Compare Immediate | D | `2c000000` |
| 16 | `cmpl` | Compare Logical | X | `7c000040` |
| 17 | `cmpli` | Compare Logical Immediate | D | `28000000` |
| 18 | `cntlzdx` | Count Leading Zeros Doubleword | X | `7c000074` |
| 19 | `cntlzwx` | Count Leading Zeros Word | X | `7c000034` |
| 20 | `divdx` | Divide Doubleword | XO | `7c0003d2` |
| 21 | `divdux` | Divide Doubleword Unsigned | XO | `7c000392` |
| 22 | `divwx` | Divide Word | XO | `7c0003d6` |
| 23 | `divwux` | Divide Word Unsigned | XO | `7c000396` |
| 24 | `eieio` | Enforce In-Order Execution of I/O | X | `7c0006ac` |
| 25 | `eqvx` | Equivalent | X | `7c000238` |
| 26 | `extsbx` | Extend Sign Byte | X | `7c000774` |
| 27 | `extshx` | Extend Sign Half Word | X | `7c000734` |
| 28 | `extswx` | Extend Sign Word | X | `7c0007B4` |
| 29 | `isync` | Instruction Synchronize | XL | `4c00012c` |
| 30 | `mulhdx` | Multiply High Doubleword | XO | `7c000092` |
| 31 | `mulhdux` | Multiply High Doubleword Unsigned | XO | `7c000012` |
| 32 | `mulhwx` | Multiply High Word | XO | `7c000096` |
| 33 | `mulhwux` | Multiply High Word Unsigned | XO | `7c000016` |
| 34 | `mulldx` | Multiply Low Doubleword | XO | `7c0001d2` |
| 35 | `mulli` | Multiply Low Immediate | D | `1c000000` |
| 36 | `mullwx` | Multiply Low Word | XO | `7c0001d6` |
| 37 | `nandx` | NAND | X | `7c0003b8` |
| 38 | `negx` | Negate | XO | `7c0000d0` |
| 39 | `norx` | NOR | X | `7c0000f8` |
| 40 | `orx` | OR | X | `7c000378` |
| 41 | `orcx` | OR with Complement | X | `7c000338` |
| 42 | `ori` | OR Immediate | D | `60000000` |
| 43 | `oris` | OR Immediate Shifted | D | `64000000` |
| 44 | `rldclx` | Rotate Left Doubleword then Clear Left | MDS | `78000010` |
| 45 | `rldcrx` | Rotate Left Doubleword then Clear Right | MDS | `78000012` |
| 46 | `rldicx` | Rotate Left Doubleword Immediate then Clear | MD | `78000008` |
| 47 | `rldiclx` | Rotate Left Doubleword Immediate then Clear Left | MD | `78000000` |
| 48 | `rldicrx` | Rotate Left Doubleword Immediate then Clear Right | MD | `78000004` |
| 49 | `rldimix` | Rotate Left Doubleword Immediate then Mask Insert | MD | `7800000C` |
| 50 | `rlwimix` | Rotate Left Word Immediate then Mask Insert | M | `50000000` |
| 51 | `rlwinmx` | Rotate Left Word Immediate then AND with Mask | M | `54000000` |
| 52 | `rlwnmx` | Rotate Left Word then AND with Mask | M | `5c000000` |
| 53 | `sldx` | Shift Left Doubleword | X | `7c000036` |
| 54 | `slwx` | Shift Left Word | X | `7c000030` |
| 55 | `sradx` | Shift Right Algebraic Doubleword | X | `7c000634` |
| 56 | `sradix` | Shift Right Algebraic Doubleword Immediate | XS | `7c000674` |
| 57 | `srawx` | Shift Right Algebraic Word | X | `7c000630` |
| 58 | `srawix` | Shift Right Algebraic Word Immediate | X | `7c000670` |
| 59 | `srdx` | Shift Right Doubleword | X | `7c000436` |
| 60 | `srwx` | Shift Right Word | X | `7c000430` |
| 61 | `subfx` | Subtract From | XO | `7c000050` |
| 62 | `subfcx` | Subtract From Carrying | XO | `7c000010` |
| 63 | `subfex` | Subtract From Extended | XO | `7c000110` |
| 64 | `subficx` | Subtract From Immediate Carrying | D | `20000000` |
| 65 | `subfmex` | Subtract From Minus One Extended | XO | `7c0001d0` |
| 66 | `subfzex` | Subtract From Zero Extended | XO | `7c000190` |
| 67 | `sync` | Synchronize | X | `7c0004ac` |
| 68 | `xorx` | XOR | X | `7c000278` |
| 69 | `xori` | XOR Immediate | D | `68000000` |
| 70 | `xoris` | XOR Immediate Shifted | D | `6c000000` |
### Branch / System (9 instructions)
| # | Mnemonic | Description | Form | Opcode |
|--:|----------|-------------|------|--------|
| 1 | `bx` | Branch | I | `48000000` |
| 2 | `bcx` | Branch Conditional | B | `40000000` |
| 3 | `bcctrx` | Branch Conditional to Count Register | XL | `4c000420` |
| 4 | `bclrx` | Branch Conditional to Link Register | XL | `4c000020` |
| 5 | `sc` | System Call | SC | `44000002` |
| 6 | `td` | Trap Doubleword | X | `7c000088` |
| 7 | `tdi` | Trap Doubleword Immediate | D | `08000000` |
| 8 | `tw` | Trap Word | X | `7c000008` |
| 9 | `twi` | Trap Word Immediate | D | `0c000000` |
### Condition Register / SPR (26 instructions)
| # | Mnemonic | Description | Form | Opcode |
|--:|----------|-------------|------|--------|
| 1 | `crand` | Condition Register AND | XL | `4c000202` |
| 2 | `crandc` | Condition Register AND with Complement | XL | `4c000102` |
| 3 | `creqv` | Condition Register Equivalent | XL | `4c000242` |
| 4 | `crnand` | Condition Register NAND | XL | `4c0001c2` |
| 5 | `crnor` | Condition Register NOR | XL | `4c000042` |
| 6 | `cror` | Condition Register OR | XL | `4c000382` |
| 7 | `crorc` | Condition Register OR with Complement | XL | `4c000342` |
| 8 | `crxor` | Condition Register XOR | XL | `4c000182` |
| 9 | `mcrf` | Move Condition Register Field | XL | `4c000000` |
| 10 | `mcrfs` | Move to Condition Register from FPSCR | X | `fc000080` |
| 11 | `mcrxr` | Move to Condition Register from XER | X | `7c000400` |
| 12 | `mfcr` | Move from Condition Register | X | `7c000026` |
| 13 | `mffsx` | Move from FPSCR | X | `fc00048e` |
| 14 | `mfmsr` | Move from Machine State Register | X | `7c0000a6` |
| 15 | `mfspr` | Move from Special-Purpose Register | XFX | `7c0002a6` |
| 16 | `mftb` | Move from Time Base | XFX | `7c0002e6` |
| 17 | `mtcrf` | Move to Condition Register Fields | XFX | `7c000120` |
| 18 | `mtfsb0x` | Move to FPSCR Bit 0 | X | `fc00008c` |
| 19 | `mtfsb1x` | Move to FPSCR Bit 1 | X | `fc00004c` |
| 20 | `mtfsfx` | Move to FPSCR Fields | XFL | `fc00058e` |
| 21 | `mtfsfix` | Move to FPSCR Field Immediate | X | `fc00010c` |
| 22 | `mtmsr` | Move to Machine State Register | X | `7c000124` |
| 23 | `mtmsrd` | Move to Machine State Register Doubleword | X | `7c000164` |
| 24 | `mtspr` | Move to Special-Purpose Register | XFX | `7c0003a6` |
| 25 | `mfvscr` | Move from VSCR | VX | `10000604` |
| 26 | `mtvscr` | Move to VSCR | VX | `10000644` |
### Floating-Point (33 instructions)
| # | Mnemonic | Description | Form | Opcode |
|--:|----------|-------------|------|--------|
| 1 | `fabsx` | Floating Absolute Value | X | `fc000210` |
| 2 | `faddx` | Floating Add | A | `fc00002a` |
| 3 | `faddsx` | Floating Add Single | A | `ec00002a` |
| 4 | `fcfidx` | Floating Convert From Integer Doubleword | X | `FC00069C` |
| 5 | `fcmpo` | Floating Compare Ordered | X | `fc000040` |
| 6 | `fcmpu` | Floating Compare Unordered | X | `fc000000` |
| 7 | `fctidx` | Floating Convert to Integer Doubleword | X | `fc00065c` |
| 8 | `fctidzx` | Floating Convert to Integer Doubleword with Round Toward Zero | X | `fc00065e` |
| 9 | `fctiwx` | Floating Convert to Integer Word | X | `fc00001c` |
| 10 | `fctiwzx` | Floating Convert to Integer Word with Round Toward Zero | X | `fc00001e` |
| 11 | `fdivx` | Floating Divide | A | `fc000024` |
| 12 | `fdivsx` | Floating Divide Single | A | `ec000024` |
| 13 | `fmaddx` | Floating Multiply-Add | A | `fc00003a` |
| 14 | `fmaddsx` | Floating Multiply-Add Single | A | `ec00003a` |
| 15 | `fmrx` | Floating Move Register | X | `fc000090` |
| 16 | `fmsubx` | Floating Multiply-Subtract | A | `fc000038` |
| 17 | `fmsubsx` | Floating Multiply-Subtract Single | A | `ec000038` |
| 18 | `fmulx` | Floating Multiply | A | `fc000032` |
| 19 | `fmulsx` | Floating Multiply Single | A | `ec000032` |
| 20 | `fnabsx` | Floating Negative Absolute Value | X | `fc000110` |
| 21 | `fnegx` | Floating Negate | X | `fc000050` |
| 22 | `fnmaddx` | Floating Negative Multiply-Add | A | `fc00003e` |
| 23 | `fnmaddsx` | Floating Negative Multiply-Add Single | A | `ec00003e` |
| 24 | `fnmsubx` | Floating Negative Multiply-Subtract | A | `fc00003c` |
| 25 | `fnmsubsx` | Floating Negative Multiply-Subtract Single | A | `ec00003c` |
| 26 | `fresx` | Floating Reciprocal Estimate Single | A | `ec000030` |
| 27 | `frspx` | Floating Round to Single | X | `fc000018` |
| 28 | `frsqrtex` | Floating Reciprocal Square Root Estimate | A | `fc000034` |
| 29 | `fselx` | Floating Select | A | `fc00002e` |
| 30 | `fsqrtx` | Floating Square Root | A | `fc00002c` |
| 31 | `fsqrtsx` | Floating Square Root Single | A | `ec00002c` |
| 32 | `fsubx` | Floating Subtract | A | `fc000028` |
| 33 | `fsubsx` | Floating Subtract Single | A | `ec000028` |
### Memory (Load/Store/Cache) (112 instructions)
| # | Mnemonic | Description | Form | Opcode |
|--:|----------|-------------|------|--------|
| 1 | `dcbf` | Data Cache Block Flush | X | `7c0000ac` |
| 2 | `dcbi` | Data Cache Block Invalidate | X | `7c0003ac` |
| 3 | `dcbst` | Data Cache Block Store | X | `7c00006c` |
| 4 | `dcbt` | Data Cache Block Touch | X | `7c00022c` |
| 5 | `dcbtst` | Data Cache Block Touch for Store | X | `7c0001ec` |
| 6 | `dcbz` | Data Cache Block Clear to Zero | DCBZ | `7c0007ec` |
| 7 | `dcbz128` | Data Cache Block Clear to Zero 128 | DCBZ | `7c2007ec` |
| 8 | `icbi` | Instruction Cache Block Invalidate | X | `7c0007ac` |
| 9 | `lbz` | Load Byte and Zero | D | `88000000` |
| 10 | `lbzu` | Load Byte and Zero with Update | D | `8c000000` |
| 11 | `lbzux` | Load Byte and Zero with Update Indexed | X | `7c0000ee` |
| 12 | `lbzx` | Load Byte and Zero Indexed | X | `7c0000ae` |
| 13 | `ld` | Load Doubleword | DS | `E8000000` |
| 14 | `ldarx` | Load Doubleword and Reserve Indexed | X | `7C0000A8` |
| 15 | `ldbrx` | Load Doubleword Byte-Reverse Indexed | X | `7C000428` |
| 16 | `ldu` | Load Doubleword with Update | DS | `E8000001` |
| 17 | `ldux` | Load Doubleword with Update Indexed | X | `7c00006a` |
| 18 | `ldx` | Load Doubleword Indexed | X | `7c00002a` |
| 19 | `lfd` | Load Floating-Point Double | D | `c8000000` |
| 20 | `lfdu` | Load Floating-Point Double with Update | D | `cc000000` |
| 21 | `lfdux` | Load Floating-Point Double with Update Indexed | X | `7c0004ee` |
| 22 | `lfdx` | Load Floating-Point Double Indexed | X | `7c0004ae` |
| 23 | `lfs` | Load Floating-Point Single | D | `c0000000` |
| 24 | `lfsu` | Load Floating-Point Single with Update | D | `c4000000` |
| 25 | `lfsux` | Load Floating-Point Single with Update Indexed | X | `7c00046e` |
| 26 | `lfsx` | Load Floating-Point Single Indexed | X | `7c00042e` |
| 27 | `lha` | Load Half Word Algebraic | D | `a8000000` |
| 28 | `lhau` | Load Half Word Algebraic with Update | D | `ac000000` |
| 29 | `lhaux` | Load Half Word Algebraic with Update Indexed | X | `7c0002ee` |
| 30 | `lhax` | Load Half Word Algebraic Indexed | X | `7c0002ae` |
| 31 | `lhbrx` | Load Half Word Byte-Reverse Indexed | X | `7c00062c` |
| 32 | `lhz` | Load Half Word and Zero | D | `a0000000` |
| 33 | `lhzu` | Load Half Word and Zero with Update | D | `a4000000` |
| 34 | `lhzux` | Load Half Word and Zero with Update Indexed | X | `7c00026e` |
| 35 | `lhzx` | Load Half Word and Zero Indexed | X | `7c00022e` |
| 36 | `lmw` | Load Multiple Word | D | `b8000000` |
| 37 | `lswi` | Load String Word Immediate | X | `7c0004aa` |
| 38 | `lswx` | Load String Word Indexed | X | `7c00042a` |
| 39 | `lwa` | Load Word Algebraic | DS | `e8000002` |
| 40 | `lwarx` | Load Word and Reserve Indexed | X | `7c000028` |
| 41 | `lwaux` | Load Word Algebraic with Update Indexed | X | `7c0002ea` |
| 42 | `lwax` | Load Word Algebraic Indexed | X | `7c0002aa` |
| 43 | `lwbrx` | Load Word Byte-Reverse Indexed | X | `7c00042c` |
| 44 | `lwz` | Load Word and Zero | D | `80000000` |
| 45 | `lwzu` | Load Word and Zero with Update | D | `84000000` |
| 46 | `lwzux` | Load Word and Zero with Update Indexed | X | `7c00006e` |
| 47 | `lwzx` | Load Word and Zero Indexed | X | `7c00002e` |
| 48 | `stb` | Store Byte | D | `98000000` |
| 49 | `stbu` | Store Byte with Update | D | `9c000000` |
| 50 | `stbux` | Store Byte with Update Indexed | X | `7c0001ee` |
| 51 | `stbx` | Store Byte Indexed | X | `7c0001ae` |
| 52 | `std` | Store Doubleword | DS | `f8000000` |
| 53 | `stdbrx` | Store Doubleword Byte-Reverse Indexed | X | `7c000528` |
| 54 | `stdcx` | Store Doubleword Conditional Indexed | X | `7c0001ad` |
| 55 | `stdu` | Store Doubleword with Update | DS | `f8000001` |
| 56 | `stdux` | Store Doubleword with Update Indexed | X | `7c00016a` |
| 57 | `stdx` | Store Doubleword Indexed | X | `7c00012a` |
| 58 | `stfd` | Store Floating-Point Double | D | `d8000000` |
| 59 | `stfdu` | Store Floating-Point Double with Update | D | `dc000000` |
| 60 | `stfdux` | Store Floating-Point Double with Update Indexed | X | `7c0005ee` |
| 61 | `stfdx` | Store Floating-Point Double Indexed | X | `7c0005ae` |
| 62 | `stfiwx` | Store Floating-Point as Integer Word Indexed | X | `7c0007ae` |
| 63 | `stfs` | Store Floating-Point Single | D | `d0000000` |
| 64 | `stfsu` | Store Floating-Point Single with Update | D | `d4000000` |
| 65 | `stfsux` | Store Floating-Point Single with Update Indexed | X | `7c00056e` |
| 66 | `stfsx` | Store Floating-Point Single Indexed | X | `7c00052e` |
| 67 | `sth` | Store Half Word | D | `b0000000` |
| 68 | `sthbrx` | Store Half Word Byte-Reverse Indexed | X | `7c00072c` |
| 69 | `sthu` | Store Half Word with Update | D | `b4000000` |
| 70 | `sthux` | Store Half Word with Update Indexed | X | `7c00036e` |
| 71 | `sthx` | Store Half Word Indexed | X | `7c00032e` |
| 72 | `stmw` | Store Multiple Word | D | `bc000000` |
| 73 | `stswi` | Store String Word Immediate | X | `7c0005aa` |
| 74 | `stswx` | Store String Word Indexed | X | `7c00052a` |
| 75 | `stw` | Store Word | D | `90000000` |
| 76 | `stwbrx` | Store Word Byte-Reverse Indexed | X | `7c00052c` |
| 77 | `stwcx` | Store Word Conditional Indexed | X | `7c00012d` |
| 78 | `stwu` | Store Word with Update | D | `94000000` |
| 79 | `stwux` | Store Word with Update Indexed | X | `7c00016e` |
| 80 | `stwx` | Store Word Indexed | X | `7c00012e` |
| 81 | `lvebx` | Load Vector Element Byte Indexed | X | `7c00000e` |
| 82 | `lvehx` | Load Vector Element Half Word Indexed | X | `7c00004e` |
| 83 | `lvewx` | Load Vector Element Word Indexed | X | `7c00008e` |
| 84 | `lvewx128` | Load Vector Element Word Indexed 128 | VX128_1 | `10000083` |
| 85 | `lvx` | Load Vector Indexed | X | `7c0000ce` |
| 86 | `lvx128` | Load Vector Indexed 128 | VX128_1 | `100000C3` |
| 87 | `lvxl` | Load Vector Indexed LRU | X | `7c0002ce` |
| 88 | `lvxl128` | Load Vector Indexed LRU 128 | VX128_1 | `100002C3` |
| 89 | `lvlx` | Load Vector Left Indexed | X | `7C00040E` |
| 90 | `lvlx128` | Load Vector Left Indexed 128 | VX128_1 | `10000403` |
| 91 | `lvlxl` | Load Vector Left Indexed LRU | X | `7C00060E` |
| 92 | `lvlxl128` | Load Vector Left Indexed LRU 128 | VX128_1 | `10000603` |
| 93 | `lvrx` | Load Vector Right Indexed | X | `7C00044E` |
| 94 | `lvrx128` | Load Vector Right Indexed 128 | VX128_1 | `10000443` |
| 95 | `lvrxl` | Load Vector Right Indexed LRU | X | `7C00064E` |
| 96 | `lvrxl128` | Load Vector Right Indexed LRU 128 | VX128_1 | `10000643` |
| 97 | `stvebx` | Store Vector Element Byte Indexed | X | `7c00010e` |
| 98 | `stvehx` | Store Vector Element Half Word Indexed | X | `7c00014e` |
| 99 | `stvewx` | Store Vector Element Word Indexed | X | `7c00018e` |
| 100 | `stvewx128` | Store Vector Element Word Indexed 128 | VX128_1 | `10000183` |
| 101 | `stvx` | Store Vector Indexed | X | `7c0001ce` |
| 102 | `stvx128` | Store Vector Indexed 128 | VX128_1 | `100001c3` |
| 103 | `stvxl` | Store Vector Indexed LRU | X | `7c0003ce` |
| 104 | `stvxl128` | Store Vector Indexed LRU 128 | VX128_1 | `100003c3` |
| 105 | `stvlx` | Store Vector Left Indexed | X | `7c00050e` |
| 106 | `stvlx128` | Store Vector Left Indexed 128 | VX128_1 | `10000503` |
| 107 | `stvlxl` | Store Vector Left Indexed LRU | X | `7c00070e` |
| 108 | `stvlxl128` | Store Vector Left Indexed LRU 128 | VX128_1 | `10000703` |
| 109 | `stvrx` | Store Vector Right Indexed | X | `7c00054e` |
| 110 | `stvrx128` | Store Vector Right Indexed 128 | VX128_1 | `10000543` |
| 111 | `stvrxl` | Store Vector Right Indexed LRU | X | `7c00074e` |
| 112 | `stvrxl128` | Store Vector Right Indexed LRU 128 | VX128_1 | `10000743` |
### Vector / VMX (AltiVec) (205 instructions)
| # | Mnemonic | Description | Form | Opcode |
|--:|----------|-------------|------|--------|
| 1 | `lvsl` | Load Vector for Shift Left Indexed | X | `7c00000c` |
| 2 | `lvsl128` | Load Vector for Shift Left Indexed 128 | VX128_1 | `10000003` |
| 3 | `lvsr` | Load Vector for Shift Right Indexed | X | `7c00004c` |
| 4 | `lvsr128` | Load Vector for Shift Right Indexed 128 | VX128_1 | `10000043` |
| 5 | `vaddcuw` | Vector Add Carryout Unsigned Word | VX | `10000180` |
| 6 | `vaddfp` | Vector Add Floating Point | VX | `1000000A` |
| 7 | `vaddfp128` | Vector128 Add Floating Point | VX128 | `14000010` |
| 8 | `vaddsbs` | Vector Add Signed Byte Saturate | VX | `10000300` |
| 9 | `vaddshs` | Vector Add Signed Half Word Saturate | VX | `10000340` |
| 10 | `vaddsws` | Vector Add Signed Word Saturate | VX | `10000380` |
| 11 | `vaddubm` | Vector Add Unsigned Byte Modulo | VX | `10000000` |
| 12 | `vaddubs` | Vector Add Unsigned Byte Saturate | VX | `10000200` |
| 13 | `vadduhm` | Vector Add Unsigned Half Word Modulo | VX | `10000040` |
| 14 | `vadduhs` | Vector Add Unsigned Half Word Saturate | VX | `10000240` |
| 15 | `vadduwm` | Vector Add Unsigned Word Modulo | VX | `10000080` |
| 16 | `vadduws` | Vector Add Unsigned Word Saturate | VX | `10000280` |
| 17 | `vand` | Vector Logical AND | VX | `10000404` |
| 18 | `vand128` | Vector128 Logical AND | VX128 | `14000210` |
| 19 | `vandc` | Vector Logical AND with Complement | VX | `10000444` |
| 20 | `vandc128` | Vector128 Logical AND with Complement | VX128 | `14000250` |
| 21 | `vavgsb` | Vector Average Signed Byte | VX | `10000502` |
| 22 | `vavgsh` | Vector Average Signed Half Word | VX | `10000542` |
| 23 | `vavgsw` | Vector Average Signed Word | VX | `10000582` |
| 24 | `vavgub` | Vector Average Unsigned Byte | VX | `10000402` |
| 25 | `vavguh` | Vector Average Unsigned Half Word | VX | `10000442` |
| 26 | `vavguw` | Vector Average Unsigned Word | VX | `10000482` |
| 27 | `vcfsx` | Vector Convert from Signed Fixed-Point Word | VX | `1000034A` |
| 28 | `vcfux` | Vector Convert from Unsigned Fixed-Point Word | VX | `1000030A` |
| 29 | `vcmpbfp` | Vector Compare Bounds Floating Point | VC | `100003C6` |
| 30 | `vcmpbfp128` | Vector128 Compare Bounds Floating Point | VX128_R | `18000180` |
| 31 | `vcmpeqfp` | Vector Compare Equal-to Floating Point | VC | `100000C6` |
| 32 | `vcmpeqfp128` | Vector128 Compare Equal-to Floating Point | VX128_R | `18000000` |
| 33 | `vcmpequb` | Vector Compare Equal-to Unsigned Byte | VC | `10000006` |
| 34 | `vcmpequh` | Vector Compare Equal-to Unsigned Half Word | VC | `10000046` |
| 35 | `vcmpequw` | Vector Compare Equal-to Unsigned Word | VC | `10000086` |
| 36 | `vcmpequw128` | Vector128 Compare Equal-to Unsigned Word | VX128_R | `18000200` |
| 37 | `vcmpgefp` | Vector Compare Greater-Than-or-Equal-to Floating Point | VC | `100001C6` |
| 38 | `vcmpgefp128` | Vector128 Compare Greater-Than-or-Equal-to Floating Point | VX128_R | `18000080` |
| 39 | `vcmpgtfp` | Vector Compare Greater-Than Floating Point | VC | `100002C6` |
| 40 | `vcmpgtfp128` | Vector128 Compare Greater-Than Floating-Point | VX128_R | `18000100` |
| 41 | `vcmpgtsb` | Vector Compare Greater-Than Signed Byte | VC | `10000306` |
| 42 | `vcmpgtsh` | Vector Compare Greater-Than Signed Half Word | VC | `10000346` |
| 43 | `vcmpgtsw` | Vector Compare Greater-Than Signed Word | VC | `10000386` |
| 44 | `vcmpgtub` | Vector Compare Greater-Than Unsigned Byte | VC | `10000206` |
| 45 | `vcmpgtuh` | Vector Compare Greater-Than Unsigned Half Word | VC | `10000246` |
| 46 | `vcmpgtuw` | Vector Compare Greater-Than Unsigned Word | VC | `10000286` |
| 47 | `vctsxs` | Vector Convert to Signed Fixed-Point Word Saturate | VX | `100003CA` |
| 48 | `vctuxs` | Vector Convert to Unsigned Fixed-Point Word Saturate | VX | `1000038A` |
| 49 | `vexptefp` | Vector 2 Raised to the Exponent Estimate Floating Point | VX | `1000018A` |
| 50 | `vexptefp128` | Vector128 Log2 Estimate Floating Point | VX128_3 | `180006B0` |
| 51 | `vlogefp` | Vector Log2 Estimate Floating Point | VX | `100001CA` |
| 52 | `vlogefp128` | Vector128 Log2 Estimate Floating Point | VX128_3 | `180006F0` |
| 53 | `vmaddfp` | Vector Multiply-Add Floating Point | VA | `1000002E` |
| 54 | `vmaddfp128` | Vector128 Multiply Add Floating Point | VX128 | `140000D0` |
| 55 | `vmaxfp` | Vector Maximum Floating Point | VX | `1000040A` |
| 56 | `vmaxfp128` | Vector128 Maximum Floating Point | VX128 | `18000280` |
| 57 | `vmaxsb` | Vector Maximum Signed Byte | VX | `10000102` |
| 58 | `vmaxsh` | Vector Maximum Signed Half Word | VX | `10000142` |
| 59 | `vmaxsw` | Vector Maximum Signed Word | VX | `10000182` |
| 60 | `vmaxub` | Vector Maximum Unsigned Byte | VX | `10000002` |
| 61 | `vmaxuh` | Vector Maximum Unsigned Half Word | VX | `10000042` |
| 62 | `vmaxuw` | Vector Maximum Unsigned Word | VX | `10000082` |
| 63 | `vmhaddshs` | Vector Multiply-High and Add Signed Signed Half Word Saturate | VA | `10000020` |
| 64 | `vmhraddshs` | Vector Multiply-High Round and Add Signed Signed Half Word Saturate | VA | `10000021` |
| 65 | `vminfp` | Vector Minimum Floating Point | VX | `1000044A` |
| 66 | `vminfp128` | Vector128 Minimum Floating Point | VX128 | `180002C0` |
| 67 | `vminsb` | Vector Minimum Signed Byte | VX | `10000302` |
| 68 | `vminsh` | Vector Minimum Signed Half Word | VX | `10000342` |
| 69 | `vminsw` | Vector Minimum Signed Word | VX | `10000382` |
| 70 | `vminub` | Vector Minimum Unsigned Byte | VX | `10000202` |
| 71 | `vminuh` | Vector Minimum Unsigned Half Word | VX | `10000242` |
| 72 | `vminuw` | Vector Minimum Unsigned Word | VX | `10000282` |
| 73 | `vmladduhm` | Vector Multiply-Low and Add Unsigned Half Word Modulo | VA | `10000022` |
| 74 | `vmrghb` | Vector Merge High Byte | VX | `1000000C` |
| 75 | `vmrghh` | Vector Merge High Half Word | VX | `1000004C` |
| 76 | `vmrghw` | Vector Merge High Word | VX | `1000008C` |
| 77 | `vmrghw128` | Vector128 Merge High Word | VX128 | `18000300` |
| 78 | `vmrglb` | Vector Merge Low Byte | VX | `1000010C` |
| 79 | `vmrglh` | Vector Merge Low Half Word | VX | `1000014C` |
| 80 | `vmrglw` | Vector Merge Low Word | VX | `1000018C` |
| 81 | `vmrglw128` | Vector128 Merge Low Word | VX128 | `18000340` |
| 82 | `vmsummbm` | Vector Multiply-Sum Mixed-Sign Byte Modulo | VA | `10000025` |
| 83 | `vmsumshm` | Vector Multiply-Sum Signed Half Word Modulo | VA | `10000028` |
| 84 | `vmsumshs` | Vector Multiply-Sum Signed Half Word Saturate | VA | `10000029` |
| 85 | `vmsumubm` | Vector Multiply-Sum Unsigned Byte Modulo | VA | `10000024` |
| 86 | `vmsumuhm` | Vector Multiply-Sum Unsigned Half Word Modulo | VA | `10000026` |
| 87 | `vmsumuhs` | Vector Multiply-Sum Unsigned Half Word Saturate | VA | `10000027` |
| 88 | `vmulesb` | Vector Multiply Even Signed Byte | VX | `10000308` |
| 89 | `vmulesh` | Vector Multiply Even Signed Half Word | VX | `10000348` |
| 90 | `vmuleub` | Vector Multiply Even Unsigned Byte | VX | `10000208` |
| 91 | `vmuleuh` | Vector Multiply Even Unsigned Half Word | VX | `10000248` |
| 92 | `vmulosb` | Vector Multiply Odd Signed Byte | VX | `10000108` |
| 93 | `vmulosh` | Vector Multiply Odd Signed Half Word | VX | `10000148` |
| 94 | `vmuloub` | Vector Multiply Odd Unsigned Byte | VX | `10000008` |
| 95 | `vmulouh` | Vector Multiply Odd Unsigned Half Word | VX | `10000048` |
| 96 | `vnmsubfp` | Vector Negative Multiply-Subtract Floating Point | VA | `1000002F` |
| 97 | `vnmsubfp128` | Vector128 Negative Multiply-Subtract Floating Point | VX128 | `14000150` |
| 98 | `vnor` | Vector Logical NOR | VX | `10000504` |
| 99 | `vnor128` | Vector128 Logical NOR | VX128 | `14000290` |
| 100 | `vor` | Vector Logical OR | VX | `10000484` |
| 101 | `vor128` | Vector128 Logical OR | VX128 | `140002D0` |
| 102 | `vperm` | Vector Permute | VA | `1000002B` |
| 103 | `vperm128` | Vector128 Permute | VX128_2 | `14000000` |
| 104 | `vpkpx` | Vector Pack Pixel | VX | `1000030E` |
| 105 | `vpkshss` | Vector Pack Signed Half Word Signed Saturate | VX | `1000018E` |
| 106 | `vpkshss128` | Vector128 Pack Signed Half Word Signed Saturate | VX128 | `14000200` |
| 107 | `vpkshus` | Vector Pack Signed Half Word Unsigned Saturate | VX | `1000010E` |
| 108 | `vpkshus128` | Vector128 Pack Signed Half Word Unsigned Saturate | VX128 | `14000240` |
| 109 | `vpkswss` | Vector Pack Signed Word Signed Saturate | VX | `100001CE` |
| 110 | `vpkswss128` | Vector128 Pack Signed Word Signed Saturate | VX128 | `14000280` |
| 111 | `vpkswus` | Vector Pack Signed Word Unsigned Saturate | VX | `1000014E` |
| 112 | `vpkswus128` | Vector128 Pack Signed Word Unsigned Saturate | VX128 | `140002C0` |
| 113 | `vpkuhum` | Vector Pack Unsigned Half Word Unsigned Modulo | VX | `1000000E` |
| 114 | `vpkuhum128` | Vector128 Pack Unsigned Half Word Unsigned Modulo | VX128 | `14000300` |
| 115 | `vpkuhus` | Vector Pack Unsigned Half Word Unsigned Saturate | VX | `1000008E` |
| 116 | `vpkuhus128` | Vector128 Pack Unsigned Half Word Unsigned Saturate | VX128 | `14000340` |
| 117 | `vpkuwum` | Vector Pack Unsigned Word Unsigned Modulo | VX | `1000004E` |
| 118 | `vpkuwum128` | Vector128 Pack Unsigned Word Unsigned Modulo | VX128 | `14000380` |
| 119 | `vpkuwus` | Vector Pack Unsigned Word Unsigned Saturate | VX | `100000CE` |
| 120 | `vpkuwus128` | Vector128 Pack Unsigned Word Unsigned Saturate | VX128 | `140003C0` |
| 121 | `vrefp` | Vector Reciprocal Estimate Floating Point | VX | `1000010A` |
| 122 | `vrefp128` | Vector128 Reciprocal Estimate Floating Point | VX128_3 | `18000630` |
| 123 | `vrfim` | Vector Round to Floating-Point Integer toward -Infinity | VX | `100002CA` |
| 124 | `vrfim128` | Vector128 Round to Floating-Point Integer toward -Infinity | VX128_3 | `18000330` |
| 125 | `vrfin` | Vector Round to Floating-Point Integer Nearest | VX | `1000020A` |
| 126 | `vrfin128` | Vector128 Round to Floating-Point Integer Nearest | VX128_3 | `18000370` |
| 127 | `vrfip` | Vector Round to Floating-Point Integer toward +Infinity | VX | `1000028A` |
| 128 | `vrfip128` | Vector128 Round to Floating-Point Integer toward +Infinity | VX128_3 | `180003B0` |
| 129 | `vrfiz` | Vector Round to Floating-Point Integer toward Zero | VX | `1000024A` |
| 130 | `vrfiz128` | Vector128 Round to Floating-Point Integer toward Zero | VX128_3 | `180003F0` |
| 131 | `vrlb` | Vector Rotate Left Integer Byte | VX | `10000004` |
| 132 | `vrlh` | Vector Rotate Left Integer Half Word | VX | `10000044` |
| 133 | `vrlw` | Vector Rotate Left Integer Word | VX | `10000084` |
| 134 | `vrlw128` | Vector128 Rotate Left Word | VX128 | `18000050` |
| 135 | `vrsqrtefp` | Vector Reciprocal Square Root Estimate Floating Point | VX | `1000014A` |
| 136 | `vrsqrtefp128` | Vector128 Reciprocal Square Root Estimate Floating Point | VX128_3 | `18000670` |
| 137 | `vsel` | Vector Conditional Select | VA | `1000002A` |
| 138 | `vsel128` | Vector128 Conditional Select | VX128 | `14000350` |
| 139 | `vsl` | Vector Shift Left | VX | `100001C4` |
| 140 | `vslb` | Vector Shift Left Integer Byte | VX | `10000104` |
| 141 | `vsldoi` | Vector Shift Left Double by Octet Immediate | VA | `1000002C` |
| 142 | `vsldoi128` | Vector128 Shift Left Double by Octet Immediate | VX128_5 | `10000010` |
| 143 | `vslh` | Vector Shift Left Integer Half Word | VX | `10000144` |
| 144 | `vslo` | Vector Shift Left by Octet | VX | `1000040C` |
| 145 | `vslo128` | Vector128 Shift Left Octet | VX128 | `14000390` |
| 146 | `vslw` | Vector Shift Left Integer Word | VX | `10000184` |
| 147 | `vslw128` | Vector128 Shift Left Integer Word | VX128 | `180000D0` |
| 148 | `vspltb` | Vector Splat Byte | VX | `1000020C` |
| 149 | `vsplth` | Vector Splat Half Word | VX | `1000024C` |
| 150 | `vspltisb` | Vector Splat Immediate Signed Byte | VX | `1000030C` |
| 151 | `vspltish` | Vector Splat Immediate Signed Half Word | VX | `1000034C` |
| 152 | `vspltisw` | Vector Splat Immediate Signed Word | VX | `1000038C` |
| 153 | `vspltisw128` | Vector128 Splat Immediate Signed Word | VX128_3 | `18000770` |
| 154 | `vspltw` | Vector Splat Word | VX | `1000028C` |
| 155 | `vspltw128` | Vector128 Splat Word | VX128_3 | `18000730` |
| 156 | `vsr` | Vector Shift Right | VX | `100002C4` |
| 157 | `vsrab` | Vector Shift Right Algebraic Byte | VX | `10000304` |
| 158 | `vsrah` | Vector Shift Right Algebraic Half Word | VX | `10000344` |
| 159 | `vsraw` | Vector Shift Right Algebraic Word | VX | `10000384` |
| 160 | `vsraw128` | Vector128 Shift Right Arithmetic Word | VX128 | `18000150` |
| 161 | `vsrb` | Vector Shift Right Byte | VX | `10000204` |
| 162 | `vsrh` | Vector Shift Right Half Word | VX | `10000244` |
| 163 | `vsro` | Vector Shift Right Octet | VX | `1000044C` |
| 164 | `vsro128` | Vector128 Shift Right Octet | VX128 | `140003D0` |
| 165 | `vsrw` | Vector Shift Right Word | VX | `10000284` |
| 166 | `vsrw128` | Vector128 Shift Right Word | VX128 | `180001D0` |
| 167 | `vsubcuw` | Vector Subtract Carryout Unsigned Word | VX | `10000580` |
| 168 | `vsubfp` | Vector Subtract Floating Point | VX | `1000004A` |
| 169 | `vsubfp128` | Vector128 Subtract Floating Point | VX128 | `14000050` |
| 170 | `vsubsbs` | Vector Subtract Signed Byte Saturate | VX | `10000700` |
| 171 | `vsubshs` | Vector Subtract Signed Half Word Saturate | VX | `10000740` |
| 172 | `vsubsws` | Vector Subtract Signed Word Saturate | VX | `10000780` |
| 173 | `vsububm` | Vector Subtract Unsigned Byte Modulo | VX | `10000400` |
| 174 | `vsububs` | Vector Subtract Unsigned Byte Saturate | VX | `10000600` |
| 175 | `vsubuhm` | Vector Subtract Unsigned Half Word Modulo | VX | `10000440` |
| 176 | `vsubuhs` | Vector Subtract Unsigned Half Word Saturate | VX | `10000640` |
| 177 | `vsubuwm` | Vector Subtract Unsigned Word Modulo | VX | `10000480` |
| 178 | `vsubuws` | Vector Subtract Unsigned Word Saturate | VX | `10000680` |
| 179 | `vsumsws` | Vector Sum Across Signed Word Saturate | VX | `10000788` |
| 180 | `vsum2sws` | Vector Sum Across Partial (1/2) Signed Word Saturate | VX | `10000688` |
| 181 | `vsum4sbs` | Vector Sum Across Partial (1/4) Signed Byte Saturate | VX | `10000708` |
| 182 | `vsum4shs` | Vector Sum Across Partial (1/4) Signed Half Word Saturate | VX | `10000648` |
| 183 | `vsum4ubs` | Vector Sum Across Partial (1/4) Unsigned Byte Saturate | VX | `10000608` |
| 184 | `vupkhpx` | Vector Unpack High Pixel | VX | `1000034E` |
| 185 | `vupkhsb` | Vector Unpack High Signed Byte | VX | `1000020E` |
| 186 | `vupkhsb128` | Vector128 Unpack High Signed Byte | VX128 | `18000380` |
| 187 | `vupkhsh` | Vector Unpack High Signed Half Word | VX | `1000024E` |
| 188 | `vupklpx` | Vector Unpack Low Pixel | VX | `100003CE` |
| 189 | `vupklsb` | Vector Unpack Low Signed Byte | VX | `1000028E` |
| 190 | `vupklsb128` | Vector128 Unpack Low Signed Byte | VX128 | `180003C0` |
| 191 | `vupklsh` | Vector Unpack Low Signed Half Word | VX | `100002CE` |
| 192 | `vxor` | Vector Logical XOR | VX | `100004C4` |
| 193 | `vxor128` | Vector128 Logical XOR | VX128 | `14000310` |
| 194 | `vmulfp128` | Vector128 Multiply Floating-Point | VX128 | `14000090` |
| 195 | `vmaddcfp128` | Vector128 Multiply Add Floating Point | VX128 | `14000110` |
| 196 | `vmsum3fp128` | Vector128 Multiply Sum 3-way Floating Point | VX128 | `14000190` |
| 197 | `vmsum4fp128` | Vector128 Multiply Sum 4-way Floating-Point | VX128 | `140001D0` |
| 198 | `vpermwi128` | Vector128 Permutate Word Immediate | VX128_P | `18000210` |
| 199 | `vcfpsxws128` | Vector128 Convert From Floating-Point to Signed Fixed-Point Word Saturate | VX128_3 | `18000230` |
| 200 | `vcfpuxws128` | Vector128 Convert From Floating-Point to Unsigned Fixed-Point Word Saturate | VX128_3 | `18000270` |
| 201 | `vcsxwfp128` | Vector128 Convert From Signed Fixed-Point Word to Floating-Point | VX128_3 | `180002B0` |
| 202 | `vcuxwfp128` | Vector128 Convert From Unsigned Fixed-Point Word to Floating-Point | VX128_3 | `180002F0` |
| 203 | `vpkd3d128` | Vector128 Pack D3Dtype, Rotate Left Immediate and Mask Insert | VX128_4 | `18000610` |
| 204 | `vrlimi128` | Vector128 Rotate Left Immediate and Mask Insert | VX128_4 | `18000710` |
| 205 | `vupkd3d128` | Vector128 Unpack D3Dtype | VX128_3 | `180007F0` |
---
*Generated from `tools/ppc-instructions.xml` — 455 instructions across 6 categories.*