Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

The Opcode ↔ Kernel ↔ Engine Matrix

This is the master lookup appendix for the GPSIMD (Cadence Tensilica Vision-Q7 Cairo ncore2gp) instruction set: the single consolidated table a reimplementer scans to resolve any opcode to its kernel name, executing engine, operand struct, dtype set, per-generation presence, and the firmware/kernels page that decodes its body. It is the join of three independently-grounded sources, all read from shipped binaries:

  • the Opcode-Catalog Ledger — the authoritative 140-real-opcode roster (172 − 31 PSEUDO − 1 INVALID), every opcode named from the four shipped aws_neuron_isa_tpb_common.h NEURON_ISA_TPB_OPCODE enums and struct-decoded through the firmware;
  • the Cross-Gen kernel_info_table / Opcode Matrix — the image-grounded per-generation presence/engine carve from the embedded Q7 POOL firmware in libnrtucode_internal.so;
  • the POOL Extended-Opcode (0xF0) Dispatch — the byte-13 spec sub-table for the single 0xF0 escape opcode.

This appendix is a terse reference, not a narrative: the per-opcode body lives on its dedicated firmware/kernels page (the Page column links it); the struct field layout lives on the kernel_info_table layout and device-firmware globals pages; the dtype codes live in the Unified Datatype Model. This page never re-derives them — it indexes them.

Scope contract. Where this page and its three sources could diverge, the ledger (#688) is authoritative for opcode → name → engine → presence, the 0xF0 page (#678) is authoritative for the spec sub-table, and the dtype model (#690) is authoritative for dtype codes. Every divergence found this pass is reconciled in-place with a CORRECTION callout and noted for the Part-16 reconcile. This page MUST NOT contradict #688/#775; it does not.

Confidence tags follow the Confidence & Walls Model: OBSERVED = a byte/string read from a shipped image this session; INFERRED = reasoned over OBSERVED facts (usually across a FLIX/literal-pool desync); CARRIED = consolidated from a cited cross-page anchor at its original confidence. The recovered common.h enum lines, firmware log strings, .xt.prop mangled names, and ELF section bytes are binary-derived facts and are cited as such. Generation byte-confidence: SUNDA (v2) / CAYMAN (v3) / MARIANA (v4) / MARIANA_PLUS (v4+) are byte-grounded [HIGH/OBSERVED]; MAVERICK (v5) is header-OBSERVED for its enum names/bytes but device-body MED for several late ops (FLIX-desynced interiors). TONGA (V1) presence is [INFERRED] — it is decoded on the cross-gen opcode diff page, not here; this page carries the v2–v5 columns and flags the TONGA-retired ops.


0. How to read this table

The presence column reads [SU·CA·MA·MV] = [SUNDA v2 · CAYMAN v3 · MARIANA v4 · MAVERICK v5]. MARIANA_PLUS (v4+) is folded into the MARIANA column — its NEURON_ISA_TPB_OPCODE enum is byte-identical to MARIANA (kernel_info_table key sha 9f2ce049), so it adds zero opcode-space delta (the v4+ change is the DGE fast-path, not the roster). Cell values:

GlyphMeaning
Ypresent and maintained in that gen's enum (// Y flag)
npresent but dormant (// n — "not maintained/used")
.present, unflagged (no // Y / // n)
-absent from that gen's enum

Engine column: PE (systolic array) · ACT (activation) · DVE (vector engine) · POOL (Q7 compute core) · NX (SEQ control core) · NX/DMA (descriptor-backed DMA). POOL/DVE = decoded on the Q7 POOL surface but executes on DVE lanes; DVE/POOL = inverse. Struct column families are defined on the per-kernel pages and the struct census; = body not separately decoded.

GOTCHA — three counts that differ by construction. The roster is 140 (the cross-gen enum union); the Q7 POOL kernel_info_table is 17 (one image's compute back-end, five of them the same 0xF0); the SEQ ASCII dispatch hub is 178 slots → 55 real handlers. These are three different surfaces and were never meant to match — see the ledger §3. This page enumerates the 140.


1. The 140 reconciliation (byte-grounded)

Re-derived byte-exact this pass from the four shipped headers under extracted/aws-neuronx-gpsimd-customop-lib_0.21.2.0_amd64/.../custom_op/c10/include/neuron_{sunda,cayman,mariana,maverick}_arch_isa/tpb/aws_neuron_isa_tpb_common.h (rg -c 'NEURON_ISA_TPB_OPCODE_\w+\s*=\s*0x' per header; Python union over the four parsed dicts):

   145 / 150 / 159 / 165   opcode enum lines (SUNDA / CAYMAN / MARIANA / MAVERICK)
   172   distinct opcode VALUES in the union of the four enums   [HIGH/OBSERVED]
 −  31   PSEUDO 0xC1–0xDF (NRT-lowered, never device-decoded)    [HIGH/OBSERVED]
 −   1   INVALID 0xFF sentinel                                   [HIGH/OBSERVED]
 ───────
   140   REAL HW opcodes — the rows of §2/§3 below

[HIGH/OBSERVED — every count re-grounded against the four headers this pass: 145/150/159/165 line counts, 172-union, 31-PSEUDO band, 1-INVALID; matches the ledger §1.4 byte-for-byte.]

NOTE — this matrix's row total IS 140. §2 (PE 10 · ACT 6 · DVE-vector 8 · POOL band 56 · batchnorm 10 · 0x81 1) + §3 (NX/SEQ+DMA 49) sum to 140, the same partition the ledger closes against. Every real HW opcode appears exactly once below.


2. The compute engines (PE · ACT · DVE · POOL · batchnorm)

2.1 PE — systolic array (0x01–0x0A)

[HIGH/OBSERVED — names + bytes re-read from the maverick header this pass.]

OpKernel nameEngStructDtype(s)[SU·CA·MA·MV]Page
0x01LDWEIGHTSPES3_LWweight loadYYYYpe-matmul
0x02MATMULPES3_MMMAC→PSUM (FP32 accum)YYYYpe-matmul
0x03PE_REG_WRITEPEreg writeYYYYpe-matmul
0x04WEIGHT_MASKPEnnnnNONE (dormant; tonga-retired)
0x05WEIGHT_SHIFTPEnnnnNONE (dormant; tonga-retired)
0x06LDTAGSPES3_LTtag load-YYYsparsity-compress-tag
0x07MATMUL_SPARSEPES4D3_MM2/3/4 fmap-YYYpe-matmul
0x08PE_MANAGE_SEEDPEPE seed state--YYpe-matmul
0x09LDWEIGHTS_MXPES3_LW (MX)MX weights--YYpe-matmul
0x0AMATMUL_MXPES3_MM (MX)MX matmul--YYpe-matmul

CORRECTION — 0x02 = MATMUL, 0x05 = WEIGHT_SHIFT (not "Matmul"). The shipped maverick header pins 0x02 = MATMUL // Y and 0x05 = WEIGHT_SHIFT // n, tonga stuff, deprecated (and 0x04 = WEIGHT_MASK // n, tonga stuff, deprecated). The cross-gen matrix (#775 §4h) once labelled 0x05 = Matmul (MultiplyMoving) and omitted a 0x02 row — that is a wrong label conflating the NKI "MultiplyMoving" name with the wrong opcode byte. The ledger (#688 §2.1) already carries this CORRECTION; recorded here authoritatively. Noted for Part-16 reconcile: fix #775 §4h's 0x05/0x02 rows. [HIGH/OBSERVED — header bytes read this pass.]

NOTE — (†) MX-fold on MAVERICK. LDWEIGHTS_MX/MATMUL_MX (0x09/0x0A) persist as opcodes on v5 but their named handlers fold into Matmul via the MXTensorV2 path (still PE); see #775 §4h note. 0x08/0x09/0x0A first ship at MARIANA (CAYMAN = absent). [HIGH/OBSERVED]

2.2 ACT — activation (0x21–0x26)

[HIGH/OBSERVED — all six bytes re-read this pass; 0x26 body MED on v5.]

OpKernel nameEngStructDtype(s)[SU·CA·MA·MV]Page
0x21ACTIVATEACTS3D3_ACPWL / affineYYYYactivate-pwl
0x22ACTIVATE_QUANTIZEACTS3D3_AQrequantizeYYYYactivate-pwl
0x23ACTIVATION_TABLE_LOADACTCTRL_NOLUT DMA stageYYYYactivate-pwl
0x24ACTIVATION_READ_ACCUMULATORACTD1_RDaccumulatorYYYYactivate-pwl
0x25ACTIVATE2ACT2nd activate--YYNONE — maintained gap †MED
0x26ACTIVATE_MULTIPASSACTmultipass---YNONE — MAVERICK + †MED

2.3 DVE — vector engine: Exponential / RNG / sparsity / MX (0x30, 0x76–0x78, 0xE0–0xE3)

[HIGH/OBSERVED — bytes read this pass; 0xE0–0xE3 are MARIANA additions.]

OpKernel nameEngStructDtype(s)[SU·CA·MA·MV]Page
0x30EXPONENTIALDVES3D3_TSfp....exponential
0x76RANDDVEXORWOWnnnnrng-lfsr-dispatch (dormant; covered)
0x77RAND_GET_STATEDVEseed stateYYYYrng-seed-state-ops
0x78RAND_SET_STATEDVEseed stateYYYYrng-seed-state-ops
0xE0SPARSITY_COMPRESSDVES3D3_SCfp8 / bf16 / fp16--YYsparsity-compress-tag
0xE1SPARSITY_COMPRESS_TAGDVES2D2D2_SCu16 tag--YYsparsity-compress-tag
0xE2RAND2DVEXORWOW uniform--YYrand2
0xE3QUANTIZE_MXDVEMXTensorV2MX block quant (E8M0 scale)--YYmx-dequant

QUIRK — 0xE3 QUANTIZE_MX is a DVE opcode, NOT a POOL kernel_info_table row. Re-carving the MAVERICK EXTISA_0 POOL KIT (17 entries) confirmed 0xE3 is absent; it is armed only in the MAVERICK DVE PROF CAM, and its named handler is even dropped from the v5 DVE roster (60→59). POOL's only MX surface is 0x7B TENSOR_DEQUANTIZE (KIT idx16, §2.4). [HIGH/OBSERVED — #775 §4g re-carve.]

NOTE — 0x30 EXPONENTIAL presence .... The header carries it present-but-unflagged in all four gens; its DVE compute body is a MARIANA realization (per #775 §4g). The .... reflects the header roster; the DVE attribution reflects the runtime. [HIGH/OBSERVED]

2.4 POOL — Q7 compute core (the bulk of the kernel lane)

The largest band. Rows in numeric order; the 0x60–0x66 batchnorm sub-cluster is broken out in §2.5 for readability, and the transpose/2 batchnorm variants 0x82/0x8E/0x94 are listed here in their numeric positions. †MED = body in the per-gen device-depth tail (FLIX-desynced interior, out-of-corpus, or header-OBSERVED-only on MAVERICK): named + dispatch-placed HIGH, operand-layout body MED.

OpKernel nameEngStructDtype(s)[SU·CA·MA·MV]Page
0x41TENSOR_TENSOR_ARITH_OPPOOLS3S3D3_TTDTYPE_PAIR arithYYYYtensor-tensor
0x42TENSOR_REDUCE_ARITH_OPPOOLS3D3 reducearithYYYYtensor-reduce
0x43TENSOR_SCALAR_ARITH_OPPOOLS3D3_TSarithYYYYtensor-scalar
0x44TENSOR_SCALAR_PTR_ARITH_OPPOOLS3D3_TSarith (ptr)nnnntensor-scalar (dormant; covered)
0x45POOLPOOLS3D3 poolavg / maxYYYYavg-max-pool
0x46COPYPOOLS3D3 copybit-accurateYYYYcast-copy
0x47CASTPOOLS3D3 castin→FP32→outYYYYcast-copy
0x48RECIPROCALPOOLfpYYYYNONE — maintained gap
0x49MEMSETPOOLS3D3YYYYNONE — maintained gap
0x4AREG_LOADPOOLnnnnNONE (dormant)
0x4BREG_STOREPOOLnnnnNONE (dormant)
0x4CREG_SHUFFLEPOOLnnnnNONE (dormant)
0x4DRNGPOOLXORWOWYYYYrng-lfsr-dispatch
0x4ETENSOR_CUMULATIVE_ARITH_OPPOOLS4D4_TRarithYYYYtensorcumulative
0x4FTENSOR_SCALAR_PTR_MULTI_ARITHPOOLS3D3_TSarithnnnnts-ptrmulti (dormant; covered)
0x51TENSOR_TENSOR_BITVEC_OPPOOLS3S3D3_TTbitvecYYYYtensor-tensor
0x52TENSOR_REDUCE_BITVEC_OPPOOLS3D3 reducebitvecYYYYtensor-reduce
0x53TENSOR_SCALAR_BITVEC_OPPOOLS3D3_TSbitvecYYYYtensor-scalar
0x54TENSOR_SCALAR_PTR_BITVEC_OPPOOLS3D3_TSbitvec (ptr)nnnntensor-scalar (dormant; covered)
0x58MAX_POOL_SELECTPOOLpool-selectYYYYavg-max-pool
0x5ETENSOR_CUMULATIVE_BITVEC_OPPOOLS4D4_TRbitvecYYYYtensorcumulative
0x5FTENSOR_SCALAR_PTR_MULTI_BITVECPOOLS3D3_TSbitvecnnnnts-ptrmulti (dormant; covered)
0x67POOL_BUFFER_LOADPOOLPSEUDOYYYYNONE — maintained gap
0x68GATHERPOOLS4D4_GTidx u8/16/32YYYYindirection-gather
0x69LOAD_MASK_SELECTPOOLYYYYNONE — maintained gap
0x6ASTREAM_SHUFFLEPOOLYYYYNONE — maintained gap
0x6BSTREAM_TRANSPOSEPOOLS4D4_TR32×32 transposeYYYYstream-transpose
0x6CMAX8DVES4D2_BNsearchYYYYsearch-cluster
0x6DMATCH_VALUE_LOADDVES4D2_BNsearchYYYYsearch-cluster
0x6EFIND_INDEX8DVES4D2_BNsearchYYYYsearch-cluster
0x6FMATCH_REPLACE8DVES4D2_BNsearchYYYYsearch-cluster
0x70TENSOR_SCALAR_IMM_LD_ARITHPOOLS3D3_TSarith (imm)nnnnts-immld (dormant; covered)
0x71TENSOR_SCALAR_IMM_LD_BITVECPOOLS3D3_TSbitvec (imm)nnnnts-immld (dormant; covered)
0x72COPY_PREDICATEDPOOLpredicated copyYYYYNONE — maintained gap
0x73ROI_ALIGNPOOLnnnnNONE (dormant)
0x74TENSOR_SCALAR_ADDRPOOLS3D3_TS addrarith (addr)YYYYNONE — maintained gap
0x79EMBEDDING_UPDATEPOOLPSEUDOscatter-reduceYYYYindirection-gather
0x7ALOAD_POOL_ARGUMENTPOOLPSEUDOYYYYNONE — maintained gap
0x7BTENSOR_DEQUANTIZEPOOLS3D3_TENS_DEQUANTMX 4-bit (dequant_fmt)YYYYtensor-dequantize
0x7CCROSS_LANE_REDUCE_ARITHPOOLS3D3 reducearithYYYYcross-lane-reduce
0x7DCROSS_LANE_REDUCE_BITVECPOOLS3D3 reducebitvecYYYYcross-lane-reduce
0x7EIOTAPOOLPSEUDO/iotaINT index rampYYYYiota
0x7FDROPOUTPOOL/DVEmaskYYYYdropout
0x81JPEG_DECODEPOOL-nnnNONE (dormant)
0x82TRANSPOSE_BATCH_NORM_STATS2DVEbn stats (T)YYYYbatchnorm-forward
0x83TRANSPOSE_TENSOR_REDUCE_ARITH_OPPOOLS3D3 reducearithYYYYtensor-reduce
0x84TRANSPOSE_TENSOR_REDUCE_BITVEC_OPPOOLS3D3 reducebitvecYYYYtensor-reduce
0x85CUSTOM_OP_HEADERPOOLmarshallingYYYYNONE — maintained gap
0x86CUSTOM_OP_PAYLOADPOOLmarshallingYYYYNONE — maintained gap
0x87TENSOR_SCALAR_PTR_MULTI_DUAL_ARITHPOOLS3D3_TSarithn---sunda-dual-tensorscalarptr (SUNDA-only, dormant) †MED
0x88TENSOR_SCALAR_PTR_MULTI_DUAL_BITVECPOOLS3D3_TSbitvecn---sunda-dual-tensorscalarptr (SUNDA-only, dormant) †MED
0x8ATENSOR_TENSOR_ADD_BF16POOLbf16Y---NONE — SUNDA-only †MED
0x8BTENSOR_TENSOR_MULT_BF16POOLbf16Y---NONE — SUNDA-only †MED
0x8CTENSOR_REDUCE_ADD_BF16POOLbf16Y---NONE — SUNDA-only †MED
0x8DTENSOR_REDUCE_MAX_BF16POOLbf16Y---NONE — SUNDA-only †MED
0x8EBATCH_NORM_PARAM_LOAD2DVEbn paramYYYYbatchnorm-paramload
0x8FTENSOR_TENSOR_SUB_BF16POOLbf16Y---NONE — SUNDA-only †MED
0x92TENSOR_SCALAR_AFFINE_SELECTPOOLS3D3_TSselectYYYYaffineselect
0x93TRANSPOSE_TENSOR_SCALAR_ARITH_OPPOOLS3D3_TSarithYYYYNONE — maintained gap
0x94BATCH_NORM_GRAD_ACCUMULATE2DVEbn gradYYYYbatchnorm-gradaccum
0x95MODIFY_POOL_CONFIGPOOLconfigYYYYNONE — maintained gap (SEQ-named; body PENDING)
0x96SORTPOOLsortYYYYsort
0x98TENSOR_SCALAR_SELECTPOOLS3D3_TSselectYYYYts-select
0x99CAST_PREDICATEDPOOLpredicated castYYYYcastpredicated
0x9ATENSOR_SCALAR_CACHE_REDUCEPOOLcache-reduceYYYYts-cache-reduce
0x9BDVE_READ_ACCUMULATORPOOL/DVEaccumulatorYYYYdve-read-state
0x9CTENSOR_REDUCE_RANGE_CHECKPOOLnnnnNONE (dormant)
0x9DSCALAR_TENSOR_TENSOR_ARITHPOOLarithYYYYscalar-tensor-tensor
0x9ESCALAR_TENSOR_TENSOR_BITVECPOOLbitvecYYYYscalar-tensor-tensor
0xE4CONV_LUT_LOADPOOLS2_CONVLUTcptc codec (cptc_decode<1-6>)-YYYconvlutload · cptc-codec
0xE5TENSOR_TENSOR_SCAN_ARITHPOOLscanYYYYtensor-tensor-scan
0xE6TENSOR_SCALAR_CACHE_CUMULATIVEPOOLcumulativeYYYYts-cache-cumulative
0xE7INDIRECT_COPYPOOLS4D4_ICindexed copyYYYYindirection-gather
0xE8COPY_PREDICATED_SCALARPOOLS3D3_CP_PRED_SCALARpredicated copyYYYYcopypredicatedscalar
0xE9DVE_READ_INDICESPOOL/DVEindices-YYYdve-read-state
0xEASELECT_REDUCEPOOLselect-reduceYYYYcopypredicatedreduce
0xF0EXTENDED_INSTPOOL(escape)per-spec (see §4)YYYYpool-ext-0xf0
0xF1DMA_GATHER_TRANSPOSEPOOLgather-transpose-YYYNONE — SEQ FLIX-inline; body PENDING †MED
0xF2NONZERO_WITH_COUNTPOOLS3D3_NONZERO_WCfloat / int-YYYnonzero-with-count
0xF3TENSOR_TENSOR_INT_WIDEDVE/POOLwide int---Yintwide-bf16-extremes †MED
0xF4TENSOR_SCALAR_INT_WIDEDVE/POOLwide int---Yintwide-bf16-extremes †MED

CORRECTION — the MAVERICK 0x26/0xF3/0xF4 bytes ARE header-pinned (byte = HIGH; only the device body is MED). The cross-gen matrix (#775 §9) wrote that 0x26/0xF3/0xF4 "are NOT the pinned bytes" and "not asserted", and the ledger flagged INT_WIDE as "not byte-pinned". Re-reading the shipped maverick header this pass refutes the byte uncertainty: it pins ACTIVATE_MULTIPASS = 0x26 // Y, TENSOR_TENSOR_INT_WIDE = 0xf3 // Y, TENSOR_SCALAR_INT_WIDE = 0xf4 // Y directly — the opcode bytes are [HIGH/OBSERVED]. What remains MED is only the device dispatch trampoline / operand body (FLIX-desynced, no clean v5 POOL DEBUG image) — hence the †MED flag stays on the body, but the byte assignment is not inferred. Noted for Part-16 reconcile: #775 §9 + ledger §5 should narrow the MED scope to the device body, not the byte. [HIGH/OBSERVED — maverick header lines read this pass: 0x26, 0xf3, 0xf4all assigned +// Y.]

NOTE — 0x81 JPEG_DECODE is real-but-dormant (-nnn: absent on SUNDA, dormant CAYMAN+). It is a different opcode from the pseudo 0xD7 PSEUDO_JPEG_DECODE (ledger §1.2). Listed once, in its numeric position above. [HIGH/OBSERVED]

2.5 DVE — batchnorm family (0x60–0x66)

[HIGH/OBSERVED — names + flags read this pass.]

OpKernel nameEngStructDtype(s)[SU·CA·MA·MV]Page
0x60BATCH_NORM_STATSDVEbn statsnnnnbatchnorm-forward (dormant; covered)
0x61BATCH_NORM_STATS2DVEbn statsYYYYbatchnorm-forward
0x62BATCH_NORM_AGGREGATEDVEbn aggregateYYYYbatchnorm-forward
0x63BATCH_NORM_GRAD_ACCUMULATEDVEbn gradnnnnbatchnorm-gradaccum (dormant; covered)
0x64BATCH_NORM_PARAM_LOADDVEbn paramnnnnbatchnorm-paramload (dormant; covered)
0x65BATCH_NORM_BACK_PROPDVEbn backpropYYYYbatchnorm-backprop
0x66LOAD_PARAMETER_RAMDVE256-recip RAMYYYYbatchnorm-forward

3. The control engine (NX SEQ + DMA, 0x9F–0xBF)

The NX SEQ control core's spine plus the descriptor-backed DMA opcodes. Most of the CTRL rows are SEQ control-spine handlers named in the dispatch hub with no dedicated decode body.

OpKernel nameEngStructDtype(s)[SU·CA·MA·MV]Page
0x9FENGINE_NOPNXCTRLYYYYSEQ spine (dispatch-hub)
0xA0EVENT_SEMAPHORENXCTRLYYYYSEQ spine (dispatch-hub)
0xA1HALTNXCTRLYYYYSEQ spine (dispatch-hub)
0xA2DRAINNXCTRLYYYYSEQ spine (dispatch-hub)
0xA3INSTRUCTION_FLUSHNXCTRLYYYYSEQ spine (INS_FL, dispatch-hub)
0xA4NOPNXCTRLYYYYSEQ spine (dispatch-hub)
0xA5WRITENXCTRLYYYYSEQ spine (dispatch-hub)
0xA6NOTIFYNXCTRLYYYYSEQ spine (dispatch-hub)
0xA7MOVENXmove (full reg)u32 / i32 / fp32YYYYmove-dtype
0xA8ALU_OPNXscalar ALUYYYYalu-op-matrix
0xA9COMPARE_BRANCHNXbranchYYYYbranch-prefetch
0xAATENSOR_LOADNXloadYYYYtensorload
0xABTENSOR_STORENXstoreYYYYtensorstore
0xB0EVENT_SEMAPHORE_RANGE_CLEARNXCTRLYYYYSEQ spine (dispatch-hub)
0xB1SET_ORDERING_MODENXCTRLYYYYSEQ spine (SET_OM, dispatch-hub)
0xB2MOVE_SHAPENXCTRLYYYYSEQ spine (MoveShape, dispatch-hub)
0xB3POLL_SEMNXCTRLYYYYSEQ spine (dispatch-hub)
0xB4TEST_EVENT_SEMNXCTRL--YYNONE — maintained gap (MARIANA +; no SEQ slot)
0xB5BRANCH_PREFETCH_HINTNXCTRLYYYYSEQ spine (branch-prefetch)
0xB6COMPACT_CONTROL_INSTNXcontrol---YNONE — MAVERICK + †MED
0xB8DMAMEMCPYNX/DMA(DMA)YYYYNONE — DGE-backed; per-opcode pending
0xB9DMA_MEMCPY2NX/DMA(DMA)---YNONE — MAVERICK +; DGE-backed †MED
0xBADMA_IMMEDIATENX/DMA(DMA)imm---YNONE — MAVERICK +; DGE-backed †MED
0xBBDMA_INDIRECTNX/DMADMA_INDIRECT1Dby-indexYYYYindirection-gather
0xBCRANGE_SELECTNX/DMArange-YYYrangeselect
0xBDDMA_TRANSPOSENX/DMAtranspose-YYYdma-transpose-opcode-cluster †MED
0xBEGET_SEQUENCE_BOUNDSPOOLS3D3_SEQ_BOUNDSdtype-keyed-YYYget-sequence-bounds
0xBFSB2SB_COLLECTIVEPOOLcollective-YYYsb2sb-remote-copy

CORRECTION — 0xBE/0xF2 are distinct opcodes (GET_SEQUENCE_BOUNDS / NONZERO_WITH_COUNT), not one. The maverick enum pins GET_SEQUENCE_BOUNDS = 0xbe and NONZERO_WITH_COUNT = 0xf2; the 0xf2 trampoline routes through a shared sequence-bounds/dequant region, hence a historical "0xf2 = GetSequenceBounds" loose conflation. The authoritative split is 0xBE = GetSequenceBounds (POOL, KIT idx14), 0xF2 = NonzeroWithCount (POOL, KIT idx15) — both already correct in the tables above. [HIGH/OBSERVED — #775 §2 CORRECTION, enum-pinned.]

NOTE — 0xBE/0xBF are POOL-engine, not NX. Numerically they sit in the NX 0x9F–0xBF band, but GET_SEQUENCE_BOUNDS and SB2SB_COLLECTIVE execute on the Q7 POOL core (0xBE is kernel_info_table idx14). They are listed in their numeric position here with the correct POOL engine tag. [HIGH/OBSERVED]


4. The 0xF0 EXTENDED_INST spec sub-table

0xF0 EXTENDED_INST is the single escape opcode, POOL-exclusive (absent on the ACT/DVE/PE/SP SEQ tables). There is no in-loop if (opcode==0xF0) branch: the "two-level" dispatch is realized entirely by the kernel_info_table — opcode 0xF0 is registered five times with five distinct spec bytes (the spec is the third byte of the packed key opcode<<24 | spec<<16, i.e. key offset +0x02), plus once more (spec 7) in the cptc sub-image EXTISA_3. One linear key-scan lands a (0xF0, spec) instruction on exactly one row. [HIGH/OBSERVED — #678 §1, re-carved byte-exact.]

Spec (byte+13)KIT idxfuncVA (CAYMAN)Sub-op / handlerResolved kernelImageConf
060x01003370ExtendedInstEngineNopno-op (entry; movi a2,0; retw.n)EXTISA_0HIGH
170x01003380ExtendedInstCopypool_extended_inst_copy()EXTISA_0HIGH [.xt.prop EXACT]
280x01003484ExtendedInstTensorTensorArithdecode_extended_inst_tensor_tensor_arith(bool,uint)0x010034b0EXTISA_0HIGH
490x010037a8Rand/Cptc band (state 0x0200046c)decode_pool@0x01000b90 (PROBABLE RandSetState)EXTISA_0MED
3100x01003a60Rand/Cptc band (state 0x02000470)decode_pool@0x01000b90 (PROBABLE RandGetState)EXTISA_0MED
78 (E3)0x01003b64ExtendedInst spec7 → cptc extended pathcptc decode (dtype-selected cptc_decode_impl<1-6>)EXTISA_3MED

[HIGH for the spec→funcVA rows (specs 0/1/2 EXACT, 4/3/7 routed); the spec3=RandGetState / spec4=RandSetState pairing is PROBABLE at MED — the table stores specs in registration order 0,1,2,4,3 (not sorted), and the PERF trampolines carry no name string. See #678 §6.]

QUIRK — registration order is 0,1,2,4,3, not sorted; spec 4 precedes spec 3. A linear key-scan is order-independent so this is harmless to dispatch, but a reimplementation that binary-searches a (opcode,spec)-sorted table would mis-locate specs 3/4. Scan linearly, or sort first. [HIGH/OBSERVED — #678 §1.]

GOTCHA — the spec 1..6 of cptc_decode_impl<N> is a DTYPE selector, not the POOL spec byte. Do not map POOL spec 0/3/4/7 one-to-one onto cptc_decode_impl<1..6>. The <N> template arg is an (unsigned char) in_dtype/out_dtype selector chosen inside the cptc handler (reached via 0xE4 or 0xF0-spec7), proven by the demangled signature and the "unsupported in_dtype/out_dtype for cptc_decode" error strings. [HIGH/OBSERVED — #678 §5.]

The two miss paths (DEBUG-string-anchored; PERF strips the strings, behavior identical): 0xF0 + an unregistered spec → "P%i: UNKNOWN EXTENDED OPCODE=%d" (decimal spec); any top-level scan miss → "P%i: UNKNOWN OPCODE=0x%x" (hex opcode).


5. The do-not-repeat rows (explicit walls)

These rows are NOT live HW opcodes a reimplementer should decode as such. They are called out so a future author does not re-list them as real kernels.

5.1 The SortMerge PHANTOM — do not document as an opcode

CORRECTION — SortMerge is a PHANTOM; there is no SortMerge HW opcode in any shipped enum. A task plan once named "SortMerge" as a hardware opcode to decode. It survives only as a comment on the 0x98 line of the maverick header, read verbatim this pass: NEURON_ISA_TPB_OPCODE_TENSOR_SCALAR_SELECT = 0x98, // SortMerge wip 0x97 // Y. The byte 0x97 is never assigned to any opcode in any gen (it appears only as the unrelated NEURON_ISA_TPB_UPDATE_MODE_SEM_SUB_REG_COMPLETE = 0x97 in a different enum), and 0x98 is the real TENSOR_SCALAR_SELECT (ts-select). SortMerge is named-but-never-shipped — it is NOT one of the 140. [HIGH/OBSERVED — maverick header 0x98line + the absence of anyOPCODE_* = 0x97 re-verified this pass.]

5.2 The MAVERICK (v5) / Maverick-only adds — flagged on the byte, MED on the body

The six genuine MAVERICK 159→165 enum additions (all // Y in the maverick header):

OpNameEngineByteBody
0x26ACTIVATE_MULTIPASSACT[HIGH/OBSERVED]†MED (no v5 ACT DEBUG image)
0xB6COMPACT_CONTROL_INSTNX/ctrl[HIGH/OBSERVED]†MED
0xB9DMA_MEMCPY2NX/DMA[HIGH/OBSERVED]†MED (DGE-backed)
0xBADMA_IMMEDIATENX/DMA[HIGH/OBSERVED]†MED (DGE-backed)
0xF3TENSOR_TENSOR_INT_WIDEDVE/POOL[HIGH/OBSERVED]†MED (FLIX-desync)
0xF4TENSOR_SCALAR_INT_WIDEDVE/POOL[HIGH/OBSERVED]†MED (FLIX-desync)

NOTE — the INT_WIDE / MULTIPASS bytes are NOT inferred (see §2.4 CORRECTION). Earlier syntheses flagged 0x26/0xF3/0xF4 as ordinal-not-byte-pinned; the maverick header assigns them directly. Only the device dispatch body is INFERRED/MED. [HIGH byte / MED body.]

GOTCHA — the search-cluster ops 0x6C–0x6F are NOT MAVERICK additions. MAX8, MATCH_VALUE_LOAD, FIND_INDEX8, MATCH_REPLACE8 (all YYYY) are pre-existing MARIANA DVE opcodes; at MAVERICK they are merely PROF-armed onto DVE (a profile-table change, not opcode growth). Do not double-count them as v5-new. [HIGH/OBSERVED — #775 §9.]

5.3 The SUNDA-only retired ops — do not carry forward to CAYMAN+

SUNDA (v2) is the only key-set outlier: it ships ops no later gen carries. Re-read from the SUNDA header this pass:

  • The BF16 cluster 0x8A/0x8B/0x8C/0x8D/0x8F (TENSOR_TENSOR_{ADD,MULT,SUB}_BF16, TENSOR_REDUCE_{ADD,MAX}_BF16) — all // Y on SUNDA, absent from CAYMAN/MARIANA/ MAVERICK (Y---). Five ops, not six0x8E is not in the cluster (it is BATCH_NORM_PARAM_LOAD2, DVE, YYYY). Their operand layouts are out-of-corpus (SUNDA EXTISA in neuronx-runtime), so the bodies are †MED/CARRIED.
  • The deprecated dual-ptr pair 0x87/0x88 (TENSOR_SCALAR_PTR_MULTI_DUAL_{ARITH, BITVEC}) — both // n, ucode/kaenadve exists, not maintained/used on SUNDA, absent from CAYMAN+ (n---). See sunda-dual-tensorscalarptr.

QUIRK — do not confuse SUNDA-retired BF16 with the dtype BFLOAT16(0x6). The SUNDA BF16 ops 0x8A–0x8F are dedicated bf16 arithmetic opcodes the later gens dropped in favor of the generic TENSOR_TENSOR/TENSOR_REDUCE ops routing bf16 through the FP32 convert hub. The dtype code BFLOAT16 = 0x6 is present in all gens; only the opcodes were retired. [HIGH/OBSERVED — SUNDA header + dtype model §1.]

5.4 TONGA (V1) — flagged absent, decoded elsewhere

TONGA (V1) predates the v2–v5 band this matrix carries. Its opcode roster is the floor of the superset chain and is decoded on the cross-gen opcode diff page, not here. The 0x04 WEIGHT_MASK / 0x05 WEIGHT_SHIFT ops carry the header comment "tonga stuff, deprecated" — they are the TONGA-origin ops the modern gens retired (nnnn). TONGA arch_id provenance is [INFERRED] (carry wall). [INFERRED — TONGA not re-decoded this page.]


6. Coverage tally (over the 140 real HW opcodes)

Carried from the ledger §6, re-confirmed against §2/§3 above:

BucketCount%
Body-decoded (per-kernel page or dormant; covered)7855.7%
Planned (per-kernel page authored separately)117.9%
NONE (no body decode)5136.4%
Total140100%

The 51 NONE split 43 maintained (// Y) + 8 dormant (// n); the 43 maintained-NONE further split 14 SEQ control-spine (named in the dispatch hub, no dedicated body) + 29 genuine compute/DMA/ACT gap (the true remaining kernel-lane decode debt). The 20 dormant (// n) opcodes: 8 are NONE (0x04, 0x05, 0x4A, 0x4B, 0x4C, 0x73, 0x81, 0x9C) + 12 are dormant; covered (0x44, 0x4F, 0x54, 0x5F, 0x60, 0x63, 0x64, 0x76, 0x87, 0x88 + 0x70, 0x71). [HIGH/OBSERVED — ledger §6.]


7. Carry walls (explicit)

WallStatusScope
SortMerge phantom[HIGH/OBSERVED]NOT an opcode (§5.1); 0x97 never assigned; 0x98 = TENSOR_SCALAR_SELECT
MAVERICK (v5) device bodiesbyte [HIGH/OBSERVED], body [INFERRED/MED]0x26/0xB6/0xB9/0xBA/0xF3/0xF4 — names+bytes pinned, dispatch interiors FLIX-desynced (§5.2)
SUNDA-only retired ops[HIGH/OBSERVED] enum, [CARRIED] bodyBF16 0x8A–0x8F (5 ops) + dual-ptr 0x87/0x88 — out-of-corpus EXTISA bodies (§5.3)
TONGA arch_id / V1 roster[INFERRED]decoded on cross-gen opcode diff, not here (§5.4)
FLIX-desync device interiorsopcode/slot/funcVA [HIGH], interior [MED]0x45 Pool inner reduce, 0xBD/0xF1 DMA-transpose, v5 late ops — corpus-wide MED ceiling, not per-kernel defects

See also