Skip to main content

TPERMUTE

Permute raw bytes from two Local CUBE sources by a Local U8 index Tile.

PTO-TILE-TPERMUTE

Assembly syntax

1. High Level Assembly

TPERMUTE <LB0, LB1, LB2, DataType, Layout> SrcTile0, SrcTile1, SrcTile2 -> DstTile
Show High Level Assembly operands mapped to the owning ASL
Source bindings for High Level Assembly operands
GroupOperandRoleASL source
ParameterLB0dimensionB.DIM LB0 (optional)
ParameterLB1dimensionB.DIM LB0/LB1/LB2 (optional)
ParameterLB2dimensionB.DIM LB0/LB1/LB2 (optional)
ParameterDataTypedata typeBSTART.SFU TPERMUTE, DataType
ParameterLayoutlayoutB.DATR Layout (optional)
InputSrcTile0source0contract.operands[1].source0
InputSrcTile1source1contract.operands[2].source1
InputSrcTile2indicescontract.operands[3].source2
OutputDstTiledestinationcontract.operands[0].destination0

2. Complete Bundle Assembly

Exact owner metadata

BSTART.SFU TPERMUTE, DataType

  1. 1BSTART.SFU TPERMUTE, DataTypeRequired
  2. 2B.DATR Layout (optional)Optional
  3. 3B.DIM LB0 (optional)Optional
  4. 4B.IOT source0, source1RequiredRepeatable
  5. 5B.IOT indices, ->destinationRequiredRepeatable
  6. 6BSTOPRequired
Minimum source-declared bundle
BSTART.SFU TPERMUTE, DataTypeB.IOT source0, source1B.IOT indices, ->destinationBSTOP
Show bundle rules, relationships, and examples
  • BSTART.SFU TPERMUTE, DataType
  • B.DATR Layout (optional)
  • B.DIM LB0/LB1/LB2 (optional)
  • B.IOT source0, source1
  • B.IOT indices, ->destination
  • BSTOP
BSTART.SFU TPERMUTE, U32; B.DATR Layout; B.IOT source0, source1; B.IOT indices, ->destination; BSTOP

Assembler symbols

Assembly fields and architectural roles
FieldBitsSignednessArchitectural roleEncoded zero
DataType5encoding-defined——
Mode2encoding-defined——
Function5encoding-defined——
destination0——destination—
source0——source0—
source1——source1—
source2——indices—

Encoding

Loading WaveDrom diagram… The encoding table and WaveJSON remain available below.

Encoding fields as an accessible table
Generated encoding fields for BSTART.TEPL Mode, Function, DataType
Decoded itemBit rangeValue
DataType31:27variable
Mode26:25variable
Function24:20variable
Constant19:020'b00011001000110000001
WaveJSON source
{
  "reg": [
    {
      "bits": 20,
      "name": "20'b00011001000110000001"
    },
    {
      "bits": 5,
      "name": "Function"
    },
    {
      "bits": 2,
      "name": "Mode"
    },
    {
      "bits": 5,
      "name": "DataType"
    }
  ],
  "config": {
    "bits": 32,
    "fontsize": 13,
    "hspace": 900,
    "lanes": 1,
    "offset": 0
  }
}

BSTART.TEPL Mode, Function, DataType

Instruction contract

Operands and parameters

destination0
destination
source0
source0
source1
source1
source2
indices

Constraints, checks, and faults

  • TPERMUTE accepts only Local CUBE_M16 or CUBE_M32 data Tiles with matching dtype and geometry.
  • indices is Local U8 with the same CUBE layout and supplies one byte index for every valid destination byte.
  • The destination is fresh; source0 and source1 may alias, while indices is distinct from both sources.
  • Raw bytes are rearranged without numerical conversion.
  • Illegal raw indices reject before any destination effect with Fault_TileLegality.
  • CompleteBundleAtWithAcceptedApplicabilityRules supplies restart and completion behavior.

State reads, writes, and result

  • Perform per-row two-source raw-byte table lookup and publish only the destination valid region.
  • none
  • All index legality and source reads precede destination publication.

ASL pseudocode

This Operation comes directly from the instruction owner; the page does not rewrite its behavior.

Decode source binding

readonly func InstructionContractOperation_TPERMUTE() => TileOperationbegin    return TileOperation_TPERMUTE;end;

Operation source binding

readonly func InstructionContractHandler_TPERMUTE() => TileSemanticHandlerbegin    return TileHandler_TPERMUTE;end;
pure func InstructionContractDataTypeLegal_TPERMUTE(    data_type: TileDataType) => booleanbegin    return TileCubeDataTypeSupported(data_type) &&           TileElementBits(data_type) != 64;end;
readonly func InstructionContractOperandsLegal_TPERMUTE(    destination: TileIndex, source0: TileIndex,    source1: TileIndex, indices: TileIndex) => booleanbegin    return TileOperandsLegal_TPERMUTE(destination, source0, source1, indices);end;
func InstructionContractExecute_TPERMUTE(    destination: TileIndex, source0: TileIndex,    source1: TileIndex, indices: TileIndex)begin    assert InstructionContractOperandsLegal_TPERMUTE(        destination, source0, source1, indices);    TPERMUTE(destination, source0, source1, indices);end;
View the complete ASL owner
// PTO-INSTRUCTION: {"assembly":["TPERMUTE <bundle operands>"],"block":["BSTART.SFU TPERMUTE, DataType","B.DATR Layout (optional)","B.DIM LB0 (optional)","B.IOT source0, source1","B.IOT indices, ->destination","BSTOP"],"catalog_indices":[103],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"}],"command_mnemonic":"BSTART.TEPL","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["Layout"],"pad_union":"must-zero"},"disposition":"accepted-direct-operation","effect_contract":"TPERMUTE","family":"TEPL","fault_contract":"ExecuteTileInstruction","function":21,"legality_handler":"TileOperandsLegal_TPERMUTE","mode":3,"name":"TPERMUTE","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"source0"},{"field":"source1","role":"source1"},{"field":"source2","role":"indices"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","selector":"0x075","semantic_handler":"TPERMUTE","state_effects":["operand:destination0:destination","operand:source0:source0","operand:source1:source1","operand:source2:indices"]}],"classification":["layout-and-rearrangement","layout"],"contract":{"block_composition":["BSTART.SFU TPERMUTE, DataType","B.DATR Layout (optional)","B.DIM LB0/LB1/LB2 (optional)","B.IOT source0, source1","B.IOT indices, ->destination","BSTOP"],"canonical_assembly":["TPERMUTE <bundle operands>"],"defaults":["B.DATR has no effect other than selecting CUBE_M16 or CUBE_M32; padding and numeric fields remain zero.","A nonzero PE mask requires two ordered B.IOT bindings and no B.IOR."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.SFU TPERMUTE, U32; B.DATR Layout; B.IOT source0, source1; B.IOT indices, ->destination; BSTOP"],"exceptions":["Illegal raw indices reject before any destination effect with Fault_TileLegality.","CompleteBundleAtWithAcceptedApplicabilityRules supplies restart and completion behavior."],"field_contracts":{},"field_zero_meanings":{},"legality":["TPERMUTE accepts only Local CUBE_M16 or CUBE_M32 data Tiles with matching dtype and geometry.","indices is Local U8 with the same CUBE layout and supplies one byte index for every valid destination byte.","The destination is fresh; source0 and source1 may alias, while indices is distinct from both sources.","Raw bytes are rearranged without numerical conversion."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"source0"},{"field":"source1","role":"source1"},{"field":"source2","role":"indices"}],"ordering":["All index legality and source reads precede destination publication."],"standalone_opcode":false,"state_effects":["Perform per-row two-source raw-byte table lookup and publish only the destination valid region."]},"depends_on":["PTO-TILE-MODEL-EXECUTION-REARRANGEMENT","PTO-TILE-MODEL-LEGALITY-LAYOUT-REARRANGEMENT"],"engine":"SFU","id":"PTO-TILE-TPERMUTE","mnemonic":"TPERMUTE","summary":"Permute raw bytes from two Local CUBE sources by a Local U8 index Tile.","surface":"tile"}// PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]}// NDF-BEGIN: PTO-TPERMUTE-CONTRACT-001// ndf: kind=contract level=L1 layer=tile status=accepted// TPERMUTE performs a two-source per-row raw-byte lookup over Local CUBE_M16// or CUBE_M32 Cells. Every valid destination byte and its index are checked// before the fresh destination is published; invalid indices reject atomically.// NDF-END: PTO-TPERMUTE-CONTRACT-001// DOC-BEGIN: decodereadonly func InstructionContractOperation_TPERMUTE() => TileOperationbegin    return TileOperation_TPERMUTE;end;// DOC-END: decode// DOC-BEGIN: operationreadonly func InstructionContractHandler_TPERMUTE() => TileSemanticHandlerbegin    return TileHandler_TPERMUTE;end;
pure func InstructionContractDataTypeLegal_TPERMUTE(    data_type: TileDataType) => booleanbegin    return TileCubeDataTypeSupported(data_type) &&           TileElementBits(data_type) != 64;end;
readonly func InstructionContractOperandsLegal_TPERMUTE(    destination: TileIndex, source0: TileIndex,    source1: TileIndex, indices: TileIndex) => booleanbegin    return TileOperandsLegal_TPERMUTE(destination, source0, source1, indices);end;
func InstructionContractExecute_TPERMUTE(    destination: TileIndex, source0: TileIndex,    source1: TileIndex, indices: TileIndex)begin    assert InstructionContractOperandsLegal_TPERMUTE(        destination, source0, source1, indices);    TPERMUTE(destination, source0, source1, indices);end;// DOC-END: operation

Behavior

purpose

Why use it. TPERMUTE provides a two-source byte table within each CUBE CELL so every valid destination byte can be chosen independently without interpreting the payload numerically.

mechanism

How it works. The lookup resets at every CUBE CELL: its per-source table width is 4 bytes for CUBE_M32 and 8 bytes for CUBE_M16; indices below that width select the same CELL in source0, and the following equal-sized range selects the same CELL in source1.

inputs outputs

Inputs and result. The two Local data sources have the same supported non-64-bit dtype, CUBE layout, and geometry, while the matching Local U8 index Tile supplies one index for every valid destination byte and the destination is fresh.

effects

Effects. All indices and selected source bytes are validated and read before the complete valid destination region is published; the sources and index Tile persist, padding is Null, and there is no memory effect.

constraints

What is rejected. Each index must be below the combined per-CELL bound—8 for CUBE_M32 or 16 for CUBE_M16; an out-of-range index, an undefined selected byte, mismatched layout, dtype, or geometry, aliasing between the index Tile and either source, or destination aliasing rejects before any destination effect.

example

Concrete example. For one CUBE_M32 row with source words 0x04030201 and 0x08070605, byte indices [0, 4, 1, 5] produce destination word 0x06020501.

NDF clauses

Bodies come from owning ASL. Dragging or buttons change only this page-session view order.

    1. surfaceTILE
    2. ownerTPERMUTE
    3. categoryCONTRACT
    4. case001

    Normative contract

    contract · L1 · accepted

    TPERMUTE performs a two-source per-row raw-byte lookup over Local CUBE_M16 or CUBE_M32 Cells. Every valid destination byte and its index are checked before the fresh destination is published; invalid indices reject atomically.

    Sources and references
    Complete stable ID
    PTO-TPERMUTE-CONTRACT-001
    Source path
    asl/tile/layout-and-rearrangement/layout/TPERMUTE.asl
    Affected units
    PTO-TILE-TPERMUTE
    Source SHA-256
    455ba580be500adcba1b4597a270d7bb5f583eb7da95462288c5e2e60d18b19b
    Clause SHA-256
    b75b5e2eac189981637fcedc448a7ebf3a111de1e8a50a902eaf1af5ea181e9e
    Open exact canonical source ↗

Evidence index

10 matching entries

Executable evidence3
  • Decoded cell-rearrangement bundles exercise normal control, mandatory and surplus B.IOR, raw control faults, zero-mask no-op, and removed selectors.
    1. surfaceBLOCK
    2. ownerPTO-BLOCK-MODEL-DISPATCH-CELL-REARRANGEMENT-SCHEMA
    3. categoryEXECUTION
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-BLOCK-CELL-REARRANGE-DECODED-001
    Path
    tests/asl/block/model/dispatch/cell-rearrangement-schema/block-exec-cell-rearrangement-decoded-001.asl
    Kind / role
    execution
    Requirements
    PTO-INST-TILE-TPERMUTE, PTO-INST-TILE-TSHUF
    Pass condition
    The selected bundle either publishes the decoded result or reports the specified architectural fault before effects.
    SHA-256
    4991c63e3d0381992b52d28493920d050c24584b2ab3c3dd1c4cfced9032ff1f
    Open exact source ↗ for PTO-AVS-BLOCK-CELL-REARRANGE-DECODED-001
  • TPERMUTE selects valid M32 output bytes from two source rows.
    1. surfaceTILE
    2. ownerTPERMUTE
    3. categoryEXECUTION
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-TILE-TPERMUTE-BYTE-TABLE-001
    Path
    tests/asl/tile/layout-and-rearrangement/layout/TPERMUTE/tile-exec-tpermute-byte-table-001.asl
    Kind / role
    execution
    Requirements
    PTO-TPERMUTE-CONTRACT-001, PTO-INST-TILE-TPERMUTE
    Pass condition
    Each valid destination byte follows its independent U8 table index.
    SHA-256
    310c6441f9c7354a8a040e9577437ff333506e4ca555591e970d78d628a75d9a
    Open exact source ↗ for PTO-AVS-TILE-TPERMUTE-BYTE-TABLE-001
  • canonical TPERMUTE catalog and ASL contract remain aligned
    1. surfaceTILE
    2. ownerTPERMUTE
    3. categorySTATIC-INVARIANT
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-TILE-TPERMUTE-STATIC-001
    Path
    tests/asl/tile/layout-and-rearrangement/layout/TPERMUTE/tile-static-tpermute-contract-001.asl
    Kind / role
    static-invariant
    Requirements
    PTO-INST-TILE-TPERMUTE
    Pass condition
    all canonical decode and contract assertions hold
    SHA-256
    99c2f9d9e8381fb57c475452dde327338bd73ba82d1e71e12fa627e5d1daf0c4
    Open exact source ↗ for PTO-AVS-TILE-TPERMUTE-STATIC-001
Commit-scoped evidence5
  • spec/evidence/release-traceability-readiness.json · closedPTO-EVIDENCE-RELEASE-TRACEABILITY
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-TRACEABILITY
    Path
    spec/evidence/release-traceability-readiness.json
    Kind / role
    ASL/NDF/documentation/AVS traceability
    SHA-256
    c7327021d39dc67ac5564bc55073b3870a397d79ac8d9648284d56e33bc14a3e
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-TRACEABILITY
  • spec/evidence/instruction-contract-closure.json · closedPTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
    Path
    spec/evidence/instruction-contract-closure.json
    Kind / role
    mnemonic and encoding contract closure
    SHA-256
    3ef2bb62421c79dff8fa77a1c7983923b523244b8090812883ef81286ca8106a
    Open exact source ↗ for PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
  • spec/evidence/architecture-readiness.json · openPTO-EVIDENCE-ARCHITECTURE-READINESS
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-ARCHITECTURE-READINESS
    Path
    spec/evidence/architecture-readiness.json
    Kind / role
    architecture maturity and blockers
    SHA-256
    4b0b85199101251bea744e0f3591cc31906909dc80d5ab651c417a936036a004
    Open exact source ↗ for PTO-EVIDENCE-ARCHITECTURE-READINESS
  • spec/evidence/release-gate-readiness.json · ready-for-exact-head-verificationPTO-EVIDENCE-RELEASE-GATE-READINESS
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-GATE-READINESS
    Path
    spec/evidence/release-gate-readiness.json
    Kind / role
    exact-head gate readiness
    SHA-256
    a0f4d2b6920c08981ea55fd8ef820708a40d4feb5402c5150e8e9ab532d84ce0
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-GATE-READINESS
  • spec/release-manifest.json · draftPTO-EVIDENCE-RELEASE-MANIFEST
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-MANIFEST
    Path
    spec/release-manifest.json
    Kind / role
    release content and encoding fingerprints
    SHA-256
    1a64c109ed7a90351c41e2a418b3c0ebaf8ad975838986d2101385186b85c0d8
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-MANIFEST
Decision history2
  • Private CUBE vector execution and CELL rearrangement · accepted
    1. decision recordADR
    2. case0103

    Decision record

    Loading ADR-0103…

    Sources and references
    Complete stable ID
    ADR-0103
    Path
    docs/status/decisions/0103-private-cube-vector-and-cell-rearrangement.md
    Affected units
    PTO-TILE-TPACK, PTO-TILE-TPERMUTE, PTO-TILE-TSHUF, PTO-TILE-TUNPACK
    Affected NDF
    PTO-TPACK-CONTRACT-001, PTO-TPERMUTE-CONTRACT-001, PTO-TSHUF-CONTRACT-001, PTO-TUNPACK-CONTRACT-001
    SHA-256
    3b3d67683fb0987dc85ba20c2d2effef9e7e1b170d3950cb505cc1f3ab6109d7
    Open exact decision source ↗ for ADR-0103
  • PTO ISA 0.58.4.1 to 0.58.5 compatibility boundary · accepted
    1. decision recordADR
    2. case0108

    Decision record

    Loading ADR-0108…

    Sources and references
    Complete stable ID
    ADR-0108
    Path
    docs/status/decisions/0108-0584-1-to-0585-compatibility.md
    Affected units
    PTO-ARCH-FEATURES-TILE-ALLOCATION, PTO-ARCH-MEMORY-MODEL-GLOBAL-MEMORY-ACCESS, PTO-ARCH-OVERVIEW-ENCODING-OWNERSHIP, PTO-BLOCK-B-IOS, PTO-BLOCK-B-IOT, PTO-BLOCK-BSTART-TLOAD, PTO-BLOCK-BSTART-TMATMUL, PTO-BLOCK-BSTART-TMATMUL-ACC, PTO-BLOCK-BSTART-TMATMUL-BIAS, PTO-BLOCK-BSTART-TMATMULMX, PTO-BLOCK-BSTART-TMATMULMX-ACC, PTO-BLOCK-BSTART-TMATMULMX-BIAS, PTO-BLOCK-BSTART-TMOV, PTO-BLOCK-BSTART-TSTORE, PTO-BLOCK-MODEL-DISPATCH-CELL-REARRANGEMENT-SCHEMA, PTO-BLOCK-MODEL-DISPATCH-COMMANDS, PTO-BLOCK-MODEL-DISPATCH-CUBE-TMATMUL, PTO-BLOCK-MODEL-DISPATCH-DESCRIPTOR-LEGALITY, PTO-BLOCK-MODEL-DISPATCH-DESTINATION-SHAPE, PTO-BLOCK-MODEL-DISPATCH-PARTIAL-SCHEMA, PTO-BLOCK-MODEL-DISPATCH-SHARED-CUBE-MATRIX, PTO-BLOCK-MODEL-DISPATCH-SHARED-TLSU, PTO-BLOCK-MODEL-DISPATCH-TILE-EXECUTION, PTO-BLOCK-MODEL-DISPATCH-TILE-SCALAR-SCHEMA, PTO-BLOCK-MODEL-DISPATCH-TILE-SCHEMA, PTO-BLOCK-MODEL-DISPATCH-TLSU-LAYOUT-CONVERSION, PTO-BLOCK-MODEL-OPERANDS-PORTABLE-CARRIERS, PTO-BLOCK-MODEL-OPERANDS-SHARED-GENERATION, PTO-TILE-GMOV, PTO-TILE-MGATHER, PTO-TILE-MGATHER-CAS, PTO-TILE-MGATHER-MASK, PTO-TILE-MSCATTER, PTO-TILE-MSCATTER-MASK, PTO-TILE-TCI, PTO-TILE-TCONCAT, PTO-TILE-TDEQUANT, PTO-TILE-TEXTRACT, PTO-TILE-TFILLPAD, PTO-TILE-TGATHER, PTO-TILE-TGEMV, PTO-TILE-TGEMV-ACC, PTO-TILE-TGEMV-BIAS, PTO-TILE-TGEMV-MX, PTO-TILE-TGEMV-MX-ACC, PTO-TILE-TGEMV-MX-BIAS, PTO-TILE-THISTOGRAM, PTO-TILE-TINSERT, PTO-TILE-TLOAD, PTO-TILE-TMATMUL, PTO-TILE-TMATMUL-ACC, PTO-TILE-TMATMUL-BIAS, PTO-TILE-TMATMUL-MX, PTO-TILE-TMATMUL-MX-ACC, PTO-TILE-TMATMUL-MX-BIAS, PTO-TILE-TMOV, PTO-TILE-TMRGSORT, PTO-TILE-TPACK, PTO-TILE-TPARTADD, PTO-TILE-TPARTMAX, PTO-TILE-TPARTMIN, PTO-TILE-TPARTMUL, PTO-TILE-TPERMUTE, PTO-TILE-TPREFETCH, PTO-TILE-TQUANT, PTO-TILE-TSCATTER, PTO-TILE-TSHUF, PTO-TILE-TSORT, PTO-TILE-TSTORE, PTO-TILE-TTRANS, PTO-TILE-TTRI, PTO-TILE-TUNPACK, PTO-TILE-MODEL-DISPATCH-IRREGULAR-AND-COMPLEX, PTO-TILE-MODEL-DISPATCH-LAYOUT-AND-REARRANGEMENT, PTO-TILE-MODEL-EXECUTION-COMPLEX, PTO-TILE-MODEL-EXECUTION-GENERATION, PTO-TILE-MODEL-EXECUTION-REARRANGEMENT, PTO-TILE-MODEL-LEGALITY-ALLOCATION-CAPACITY, PTO-TILE-MODEL-LEGALITY-DTYPE-LAYOUT, PTO-TILE-MODEL-LEGALITY-INDEXED-LAYOUT, PTO-TILE-MODEL-LEGALITY-LAYOUT-REARRANGEMENT, PTO-TILE-MODEL-LEGALITY-OPERAND-SCHEMA, PTO-TILE-MODEL-MEMORY-SHARED-MOVEMENT, PTO-TILE-MODEL-STATE-DESCRIPTORS, PTO-TILE-MODEL-STATE-SHARED-REGISTERS, PTO-TILE-MODEL-STATE-TYPES
    Affected NDF
    PTO-ARCH-GM-ACCESS-001, PTO-B-IOS-SHARED-STATE-001, PTO-B-IOT-STREAM-001, PTO-B-SHARED-WHOLE-PARENT-READY-001, PTO-B-SUBVIEW-SHARED-PER-PE-001, PTO-BSTART-TLOAD-MEMORY-001, PTO-BSTART-TMOV-SHARED-001, PTO-BSTART-TSTORE-MEMORY-001, PTO-INST-BLOCK-B-IOS, PTO-INST-BLOCK-B-IOT, PTO-INST-BLOCK-BSTART-TLOAD, PTO-INST-BLOCK-BSTART-TMATMUL, PTO-INST-BLOCK-BSTART-TMATMUL-ACC, PTO-INST-BLOCK-BSTART-TMATMUL-BIAS, PTO-INST-BLOCK-BSTART-TMATMULMX, PTO-INST-BLOCK-BSTART-TMATMULMX-ACC, PTO-INST-BLOCK-BSTART-TMATMULMX-BIAS, PTO-INST-BLOCK-BSTART-TMOV, PTO-INST-BLOCK-BSTART-TSTORE, PTO-INST-TILE-GMOV, PTO-INST-TILE-MGATHER, PTO-INST-TILE-MGATHER-CAS, PTO-INST-TILE-MGATHER-MASK, PTO-INST-TILE-MSCATTER, PTO-INST-TILE-MSCATTER-MASK, PTO-INST-TILE-TCI, PTO-INST-TILE-TCONCAT, PTO-INST-TILE-TDEQUANT, PTO-INST-TILE-TEXTRACT, PTO-INST-TILE-TFILLPAD, PTO-INST-TILE-TGATHER, PTO-INST-TILE-TGEMV, PTO-INST-TILE-TGEMV-ACC, PTO-INST-TILE-TGEMV-BIAS, PTO-INST-TILE-TGEMV-MX, PTO-INST-TILE-TGEMV-MX-ACC, PTO-INST-TILE-TGEMV-MX-BIAS, PTO-INST-TILE-THISTOGRAM, PTO-INST-TILE-TINSERT, PTO-INST-TILE-TLOAD, PTO-INST-TILE-TMATMUL, PTO-INST-TILE-TMATMUL-ACC, PTO-INST-TILE-TMATMUL-BIAS, PTO-INST-TILE-TMATMUL-MX, PTO-INST-TILE-TMATMUL-MX-ACC, PTO-INST-TILE-TMATMUL-MX-BIAS, PTO-INST-TILE-TMOV, PTO-INST-TILE-TMRGSORT, PTO-INST-TILE-TPACK, PTO-INST-TILE-TPARTADD, PTO-INST-TILE-TPARTMAX, PTO-INST-TILE-TPARTMIN, PTO-INST-TILE-TPARTMUL, PTO-INST-TILE-TPERMUTE, PTO-INST-TILE-TPREFETCH, PTO-INST-TILE-TQUANT, PTO-INST-TILE-TSCATTER, PTO-INST-TILE-TSHUF, PTO-INST-TILE-TSORT, PTO-INST-TILE-TSTORE, PTO-INST-TILE-TTRANS, PTO-INST-TILE-TTRI, PTO-INST-TILE-TUNPACK, PTO-ISA-LEGACY-SHARED-MOVEMENT-001, PTO-TFILLPAD-CONTRACT-001, PTO-TLOAD-MEMORY-001, PTO-TMATMUL-ACC-CONTRACT-001, PTO-TMATMUL-BIAS-CONTRACT-001, PTO-TMATMUL-CONTRACT-001, PTO-TMATMUL-MX-ACC-CONTRACT-001, PTO-TMATMUL-MX-BIAS-CONTRACT-001, PTO-TMATMUL-MX-CONTRACT-001, PTO-TPACK-CONTRACT-001, PTO-TPARTADD-CONTRACT-001, PTO-TPARTMAX-CONTRACT-001, PTO-TPARTMIN-CONTRACT-001, PTO-TPARTMUL-CONTRACT-001, PTO-TPERMUTE-CONTRACT-001, PTO-TSHUF-CONTRACT-001, PTO-TSTORE-MEMORY-001, PTO-TTRANS-CONTRACT-001, PTO-TUNPACK-CONTRACT-001
    SHA-256
    5689fa78a7291b6ae88d55197205e4cf79e9719ee5ba18ebf186f5c6871c350d
    Open exact decision source ↗ for ADR-0108

Unit metadata

Open 12 generated metadata fields
assembly
[
  "TPERMUTE <bundle operands>"
]
block
[
  "BSTART.SFU TPERMUTE, DataType",
  "B.DATR Layout (optional)",
  "B.DIM LB0 (optional)",
  "B.IOT source0, source1",
  "B.IOT indices, ->destination",
  "BSTOP"
]
catalog_indices
[
  103
]
catalog_records
[
  {
    "arguments": [
      {
        "operand": "destination0"
      },
      {
        "operand": "source0"
      },
      {
        "operand": "source1"
      },
      {
        "operand": "source2"
      }
    ],
    "command_mnemonic": "BSTART.TEPL",
    "contract_status": "reviewed-complete",
    "datr_contract": {
      "allowed_nonzero_fields": [
        "Layout"
      ],
      "pad_union": "must-zero"
    },
    "disposition": "accepted-direct-operation",
    "effect_contract": "TPERMUTE",
    "family": "TEPL",
    "fault_contract": "ExecuteTileInstruction",
    "function": 21,
    "legality_handler": "TileOperandsLegal_TPERMUTE",
    "mode": 3,
    "name": "TPERMUTE",
    "operands": [
      {
        "field": "destination0",
        "role": "destination"
      },
      {
        "field": "source0",
        "role": "source0"
      },
      {
        "field": "source1",
        "role": "source1"
      },
      {
        "field": "source2",
        "role": "indices"
      }
    ],
    "restart_contract": "CompleteBundleAtWithAcceptedApplicabilityRules",
    "selector": "0x075",
    "semantic_handler": "TPERMUTE",
    "state_effects": [
      "operand:destination0:destination",
      "operand:source0:source0",
      "operand:source1:source1",
      "operand:source2:indices"
    ]
  }
]
classification
[
  "layout-and-rearrangement",
  "layout"
]
contract
{
  "block_composition": [
    "BSTART.SFU TPERMUTE, DataType",
    "B.DATR Layout (optional)",
    "B.DIM LB0/LB1/LB2 (optional)",
    "B.IOT source0, source1",
    "B.IOT indices, ->destination",
    "BSTOP"
  ],
  "canonical_assembly": [
    "TPERMUTE <bundle operands>"
  ],
  "defaults": [
    "B.DATR has no effect other than selecting CUBE_M16 or CUBE_M32; padding and numeric fields remain zero.",
    "A nonzero PE mask requires two ordered B.IOT bindings and no B.IOR."
  ],
  "encoding_class": "selector-encoded-block-operation",
  "examples": [
    "BSTART.SFU TPERMUTE, U32; B.DATR Layout; B.IOT source0, source1; B.IOT indices, ->destination; BSTOP"
  ],
  "exceptions": [
    "Illegal raw indices reject before any destination effect with Fault_TileLegality.",
    "CompleteBundleAtWithAcceptedApplicabilityRules supplies restart and completion behavior."
  ],
  "field_contracts": {},
  "field_zero_meanings": {},
  "legality": [
    "TPERMUTE accepts only Local CUBE_M16 or CUBE_M32 data Tiles with matching dtype and geometry.",
    "indices is Local U8 with the same CUBE layout and supplies one byte index for every valid destination byte.",
    "The destination is fresh; source0 and source1 may alias, while indices is distinct from both sources.",
    "Raw bytes are rearranged without numerical conversion."
  ],
  "memory_effects": [
    "none"
  ],
  "operands": [
    {
      "field": "destination0",
      "role": "destination"
    },
    {
      "field": "source0",
      "role": "source0"
    },
    {
      "field": "source1",
      "role": "source1"
    },
    {
      "field": "source2",
      "role": "indices"
    }
  ],
  "ordering": [
    "All index legality and source reads precede destination publication."
  ],
  "standalone_opcode": false,
  "state_effects": [
    "Perform per-row two-source raw-byte table lookup and publish only the destination valid region."
  ]
}
depends_on
[
  "PTO-TILE-MODEL-EXECUTION-REARRANGEMENT",
  "PTO-TILE-MODEL-LEGALITY-LAYOUT-REARRANGEMENT"
]
engine
SFU
id
PTO-TILE-TPERMUTE
mnemonic
TPERMUTE
summary
Permute raw bytes from two Local CUBE sources by a Local U8 index Tile.
surface
tile
Open generated traceability record
{
  "classification": [
    "layout-and-rearrangement",
    "layout"
  ],
  "documentation": "docs/tile/layout-and-rearrangement/layout/TPERMUTE.md",
  "id": "PTO-TILE-TPERMUTE",
  "instruction_contract": {
    "artifact": "spec/evidence/instruction-contract-closure.json",
    "mnemonic": "TPERMUTE",
    "ndf_clause": "PTO-INST-TILE-TPERMUTE"
  },
  "mnemonic": "TPERMUTE",
  "readiness_subjects": [
    "ADR-0103",
    "ADR-0108"
  ],
  "semantic_tests": [
    "PTO-AVS-TILE-TPERMUTE-BYTE-TABLE-001"
  ],
  "source": "asl/tile/layout-and-rearrangement/layout/TPERMUTE.asl",
  "surface": "tile",
  "tests": [
    "PTO-AVS-TILE-TPERMUTE-BYTE-TABLE-001",
    "PTO-AVS-TILE-TPERMUTE-STATIC-001"
  ]
}

Sources and release identity

Show commit, paths, hashes, version, and canonical owners
Release
0.58.5 · Release candidate
Commit
7dc8b7e5b121d2b2499a2273bebff29e2cd86812
ASL SHA-256
455ba580be500adcba1b4597a270d7bb5f583eb7da95462288c5e2e60d18b19b
Generated documentation
docs/tile/layout-and-rearrangement/layout/TPERMUTE.md · embedded in this page
Documentation SHA-256
7a0f646fdbbf4a67b40097e733050d1d0d85e187e93f98ac6d09870204c73a31

Exact owners