Skip to main content

PTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION

PTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION

ASL pseudocode

The complete ASL owner is shown directly below.

// PTO-UNIT: {"id":"PTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION","surface":"block","classification":["model","operands","local-generation"],"depends_on":["PTO-BLOCK-MODEL-OPERANDS-RANGE-MODIFIERS","PTO-BLOCK-MODEL-OPERANDS-TILE-BINDINGS"]}
// NDF-BEGIN: PTO-B-ASSEMBLE-LOCAL-GENERATION-001// ndf: kind=contract level=L1 layer=block status=accepted// A Local B.ASSEMBLE generation is keyed by selected PE mask and// architectural destination hand/name. INIT captures one normalized parent// descriptor; later writers must match that identity and use a distinct// instruction instance unless they are an exact replay. Coverage and// readiness are checked before LAST publication, and a fault aborts the// pending working version while preserving the committed version, mapping,// payload, definedness, and sources.// NDF-END: PTO-B-ASSEMBLE-LOCAL-GENERATION-001
pure func BundleLocalGenerationSlot(hand: integer {0..3},                                    participant_mask: bits(4))    => integer {0..63}begin    return (hand + UInt(participant_mask) * 4) as integer {0..63};end;
readonly func BundleLocalGenerationOpenForDifferentMask(    hand: integer {0..3}, participant_mask: bits(4)) => booleanbegin    for mask_value = 1 to 15 do        let candidate_mask = Zeros{4} + mask_value;        if candidate_mask != participant_mask &&           _LocalGenerations[[BundleLocalGenerationSlot(               hand, candidate_mask)]].open then            return TRUE;        end;    end;    return FALSE;end;
readonly func BundleLocalGenerationOpenForHand(    hand: integer {0..3}) => booleanbegin    for mask_value = 1 to 15 do        let candidate_mask = Zeros{4} + mask_value;        if _LocalGenerations[[BundleLocalGenerationSlot(               hand, candidate_mask)]].open then            return TRUE;        end;    end;    return FALSE;end;
func ClearBundleLocalGenerationState(slot: integer {0..63})begin    _LocalGenerations[[slot]].open = FALSE;    _LocalGenerations[[slot]].closed = FALSE;    _LocalGenerations[[slot]].published = FALSE;    _LocalGenerations[[slot]].destination_hand = 0;    _LocalGenerations[[slot]].participant_mask = Zeros{4};    _LocalGenerations[[slot]].generation_instance = Zeros{PTO_XLEN};    _LocalGenerations[[slot]].init_tpc = Zeros{PTO_XLEN};    _LocalGenerations[[slot]].init_tpc_valid = FALSE;    _LocalGenerations[[slot]].parent_size_code = 0;    _LocalGenerations[[slot]].parent_cell_count = 0;    _LocalGenerations[[slot]].parent_descriptor.valid = FALSE;    _LocalGenerations[[slot]].parent_descriptor.object_name = 0;    _LocalGenerations[[slot]].parent_descriptor.object_kind = TileStorage_Numeric;    _LocalGenerations[[slot]].parent_descriptor.participant_mask = Zeros{4};    _LocalGenerations[[slot]].parent_descriptor.capacity_bytes = 0;    _LocalGenerations[[slot]].parent_descriptor.rows = 0;    _LocalGenerations[[slot]].parent_descriptor.columns = 0;    _LocalGenerations[[slot]].parent_descriptor.valid_rows = 0;    _LocalGenerations[[slot]].parent_descriptor.valid_columns = 0;    _LocalGenerations[[slot]].parent_descriptor.data_type = TileDataType_FP64;    _LocalGenerations[[slot]].parent_descriptor.layout = TileLayout_RowMajor;    _LocalGenerations[[slot]].parent_descriptor.location = TileLocation_Any;    _LocalGenerations[[slot]].parent_descriptor.cube_k_repeat = 0;    _LocalGenerations[[slot]].parent_descriptor.cube_n_repeat = 0;    _LocalGenerations[[slot]].parent_descriptor.cube_cell_count = 0;    _LocalGenerations[[slot]].parent_descriptor.cube_storage_bytes = 0;    _LocalGenerations[[slot]].covered_cells = Zeros{2048};    _LocalGenerations[[slot]].ready_cells = Zeros{2048};    _LocalGenerations[[slot]].writer_count = 0;    _LocalGenerations[[slot]].consumer_count = 0;    _LocalGenerations[[slot]].last_seen = FALSE;    _LocalGenerations[[slot]].working_destination = 0;    _LocalGenerations[[slot]].published_destination = 0;    _LocalGenerations[[slot]].committed_destination = 0;    _LocalGenerations[[slot]].committed_valid = FALSE;end;func AbortBundleLocalGeneration(hand: integer {0..3},                                participant_mask: bits(4))begin    let slot = BundleLocalGenerationSlot(hand, participant_mask);    let committed_destination =        _LocalGenerations[[slot]].committed_destination;    let committed_valid = _LocalGenerations[[slot]].committed_valid;    // A closed/published record is the committed version and must survive a    // later writer-after-LAST fault. Only an open working version is    // speculative and therefore eligible for abort.    if _LocalGenerations[[slot]].open ||       _LocalGenerations[[slot]].init_tpc_valid then        let destination = _LocalGenerations[[slot]].working_destination;        if _Tiles[[destination]].allocated &&           (!committed_valid || destination != committed_destination) then            ReleaseTile(destination);        end;        ClearBundleLocalGenerationState(slot);        _LocalGenerations[[slot]].committed_destination =            committed_destination;        _LocalGenerations[[slot]].committed_valid = committed_valid;        _LocalGenerations[[slot]].published_destination =            committed_destination;        _LocalGenerations[[slot]].published = committed_valid;        _LocalGenerations[[slot]].closed = committed_valid;    end;end;
func AbortBundleLocalGenerationsForBundle()begin    for binding = 0 to PTO_BUNDLE_TILE_BINDING_COUNT - 1 do        if _BundleTileBindings[[binding]].valid &&           _BundleTileBindings[[binding]].destination_assemble.valid then            let hand = UInt(_BundleTileBindings[[binding]].destination_hand)                as integer {0..3};            AbortBundleLocalGeneration(hand,                _BundleTileBindings[[binding]].pe_mask);        end;    end;end;func SetBundleLocalGenerationFault(hand: integer {0..3},                                   participant_mask: bits(4),                                   fault: FaultCode)begin    let slot = BundleLocalGenerationSlot(hand, participant_mask);    let restart_tpc = _LocalGenerations[[slot]].init_tpc;    let restart_valid = _LocalGenerations[[slot]].init_tpc_valid;    // Abort before SetFault snapshots the trap context, so recovery cannot    // resurrect speculative coverage, readiness, or the working object.    AbortBundleLocalGeneration(hand, participant_mask);    SetFault(fault, ReadTPC());    let ring = CurrentACR();    if restart_valid && _TrapContexts[[ring]].valid then        _TrapContexts[[ring]].tpc = restart_tpc;    end;end;pure func BundleLocalGenerationCellCount(size_code: integer {1..12})    => integer {1..2048}begin    return (TileSizeCodeBytes(size_code) DIVRM PTO_TILE_CELL_BYTES)        as integer {1..2048};end;
readonly func BundleLocalDestinationAllocationBytes(    binding: BundleTileBindingIndex)    => integer {0,128,256,512,1024,2048,4096,8192,16384,32768,65536,                131072,262144}begin    let assemble = _BundleTileBindings[[binding]].destination_assemble;    if assemble.valid && assemble.init then        assert assemble.size_code >= 1 && assemble.size_code <= 12;        return TileSizeCodeBytes(            assemble.size_code as integer {1..12});    end;    return BundleTileDestinationSizeBytes(binding);end;
pure func BundleLocalGenerationRangeOverlaps(    left_offset: integer {0..2047}, left_count: integer {1..2048},    right_offset: integer {0..2047}, right_count: integer {1..2048}) => booleanbegin    return left_offset < right_offset + right_count &&           right_offset < left_offset + left_count;end;
readonly func BundleLocalGenerationCoverageComplete(    slot: integer {0..63}, offset: Word, writer_size: integer {1..12},    init: boolean, parent_size: integer {0..12}) => booleanbegin    let raw_offset = UInt(offset);    if raw_offset > 2047 then return FALSE; end;    let offset_cells = raw_offset as integer {0..2047};    let writer_cells = BundleLocalGenerationCellCount(writer_size);    let required_cells = if init then        BundleLocalGenerationCellCount(parent_size as integer {1..12})        else _LocalGenerations[[slot]].parent_cell_count;    var covered: bits(2048) = if init then Zeros{2048}        else _LocalGenerations[[slot]].covered_cells;    for cell = 0 to 2047 do        if cell < writer_cells then covered[offset_cells + cell] = '1'; end;    end;    for required = 0 to 2047 do        if required < required_cells && covered[required] == '0' then return FALSE; end;    end;    return TRUE;end;
readonly func BundleLocalGenerationReadinessComplete(    slot: integer {0..63}, offset: Word, writer_size: integer {1..12},    init: boolean, parent_size: integer {0..12}) => booleanbegin    let raw_offset = UInt(offset);    if raw_offset > 2047 then return FALSE; end;    let offset_cells = raw_offset as integer {0..2047};    let writer_cells = BundleLocalGenerationCellCount(writer_size);    let required_cells = if init then        BundleLocalGenerationCellCount(parent_size as integer {1..12})        else _LocalGenerations[[slot]].parent_cell_count;    var ready: bits(2048) = if init then Zeros{2048}        else _LocalGenerations[[slot]].ready_cells;    for cell = 0 to 2047 do        if cell < writer_cells then ready[offset_cells + cell] = '1'; end;    end;    for required = 0 to 2047 do        if required < required_cells && ready[required] == '0' then return FALSE; end;    end;    return TRUE;end;
readonly func BundleLocalGenerationDescriptorMatches(    slot: integer {0..63}, destination: TileIndex,    participant_mask: bits(4)) => booleanbegin    let expected = _LocalGenerations[[slot]].parent_descriptor;    let actual = _Tiles[[destination]];    return expected.valid && actual.allocated &&           expected.object_name == destination &&           expected.object_kind == actual.storage_kind &&           expected.participant_mask == participant_mask &&           actual.capacity_bytes == expected.capacity_bytes &&           actual.rows == expected.rows && actual.columns == expected.columns &&           actual.valid_rows == expected.valid_rows &&           actual.valid_columns == expected.valid_columns &&           actual.data_type == expected.data_type &&           actual.layout == expected.layout &&           actual.location == expected.location &&           actual.cube_k_repeat == expected.cube_k_repeat &&           actual.cube_n_repeat == expected.cube_n_repeat &&           actual.cube_cell_count == expected.cube_cell_count &&           actual.cube_storage_bytes == expected.cube_storage_bytes &&           _TileAllocationMasks[[destination]] == participant_mask;end;
func ValidateBundleLocalGeneration() => booleanbegin    // An open generation owns the architectural hand until LAST. A later    // operation that omits B.ASSEMBLE must not replace, release, or rebind    // that hand through the ordinary destination path.    for binding = 0 to PTO_BUNDLE_TILE_BINDING_COUNT - 1 do        if _BundleTileBindings[[binding]].valid &&           _BundleTileBindings[[binding]].destination_valid &&           !_BundleTileBindings[[binding]].destination_assemble.valid then            let hand = UInt(_BundleTileBindings[[binding]].destination_hand)                as integer {0..3};            if BundleLocalGenerationOpenForHand(hand) then                SetFault(Fault_BundleControl, ReadTPC());                return FALSE;            end;        end;    end;    for binding = 0 to PTO_BUNDLE_TILE_BINDING_COUNT - 1 do        if _BundleTileBindings[[binding]].valid &&           _BundleTileBindings[[binding]].destination_assemble.valid then            let assemble = _BundleTileBindings[[binding]].destination_assemble;            let hand = UInt(_BundleTileBindings[[binding]].destination_hand)                as integer {0..3};            let participant_mask = _BundleTileBindings[[binding]].pe_mask;            let slot = BundleLocalGenerationSlot(hand, participant_mask);            let writer_raw = _BundleTileBindings[[binding]].destination_size;            if assemble.init && !_LocalGenerations[[slot]].open then                // Capture the architectural INIT restart point before any                // legality or allocation check can fault.                _LocalGenerations[[slot]].init_tpc = ReadBPC();                _LocalGenerations[[slot]].init_tpc_valid = TRUE;            end;            if !_BundleTileBindings[[binding]].destination_valid then                SetBundleLocalGenerationFault(hand, participant_mask,                    Fault_BundleControl); return FALSE;            end;            if writer_raw < 1 || writer_raw > 12 then                SetBundleLocalGenerationFault(hand, participant_mask,                    Fault_TileLegality); return FALSE;            end;            let writer_size = writer_raw as integer {1..12};            if assemble.init && _LocalGenerations[[slot]].open then                SetBundleLocalGenerationFault(hand, participant_mask,                    Fault_BundleControl); return FALSE;            end;            if !assemble.init && (!_LocalGenerations[[slot]].open ||                                  _LocalGenerations[[slot]].closed) then                if BundleLocalGenerationOpenForDifferentMask(                       hand, participant_mask) then                    SetFault(Fault_TileLegality, ReadTPC());                    return FALSE;                end;                SetBundleLocalGenerationFault(hand, participant_mask,                    Fault_BundleControl); return FALSE;            end;            let raw_offset = UInt(assemble.offset);            if raw_offset > 2047 then                SetBundleLocalGenerationFault(hand, participant_mask,                    Fault_TileLegality); return FALSE;            end;            let offset_cells = raw_offset as integer {0..2047};            let writer_cells = BundleLocalGenerationCellCount(writer_size)                as integer {1..2048};            if assemble.init && (assemble.size_code < 1 ||                                 assemble.size_code > 12) then                SetBundleLocalGenerationFault(hand, participant_mask,                    Fault_TileLegality); return FALSE;            end;            let parent_cells = if assemble.init then                BundleLocalGenerationCellCount(assemble.size_code as integer {1..12})                else _LocalGenerations[[slot]].parent_cell_count;            if offset_cells + writer_cells > parent_cells then                SetBundleLocalGenerationFault(hand, participant_mask,                    Fault_TileLegality); return FALSE;            end;            let replay = BundleLocalGenerationReplay(                slot, offset_cells, writer_cells, ReadBPC(),                _BundleExecutionDomainToken);            for prior = 0 to _LocalGenerations[[slot]].writer_count - 1                looplimit 16 do                if _LocalGenerations[[slot]].writers[[prior]].valid &&                   BundleLocalGenerationRangeOverlaps(offset_cells, writer_cells,                       _LocalGenerations[[slot]].writers[[prior]].offset_cells,                       _LocalGenerations[[slot]].writers[[prior]].cell_count                           as integer {1..2048}) && !replay then                    SetBundleLocalGenerationFault(hand, participant_mask,                        Fault_TileLegality); return FALSE;                end;            end;            if assemble.last &&               !BundleLocalGenerationCoverageComplete(                    slot, assemble.offset, writer_size, assemble.init,                    assemble.size_code) then                SetBundleLocalGenerationFault(hand, participant_mask,                    Fault_TileLegality); return FALSE;            end;        end;    end;    return TRUE;end;
func CommitBundleLocalGeneration()begin    for binding = 0 to PTO_BUNDLE_TILE_BINDING_COUNT - 1 do        if _BundleTileBindings[[binding]].valid &&           _BundleTileBindings[[binding]].destination_assemble.valid then            let assemble = _BundleTileBindings[[binding]].destination_assemble;            let hand = UInt(_BundleTileBindings[[binding]].destination_hand)                as integer {0..3};            let participant_mask = _BundleTileBindings[[binding]].pe_mask;            let slot = BundleLocalGenerationSlot(hand, participant_mask);            let writer_size = _BundleTileBindings[[binding]].destination_size                as integer {1..12};            let offset_cells = UInt(assemble.offset) as integer {0..2047};            let writer_cells = BundleLocalGenerationCellCount(writer_size)                as integer {1..2048};            if assemble.init then                let prior_committed_destination =                    _LocalGenerations[[slot]].committed_destination;                let prior_committed_valid =                    _LocalGenerations[[slot]].committed_valid;                _LocalGenerations[[slot]].open = TRUE;                _LocalGenerations[[slot]].closed = FALSE;                _LocalGenerations[[slot]].published = FALSE;                _LocalGenerations[[slot]].destination_hand = hand;                _LocalGenerations[[slot]].participant_mask = participant_mask;                _LocalGenerations[[slot]].generation_instance = ReadBPC();                _LocalGenerations[[slot]].init_tpc = ReadBPC();                _LocalGenerations[[slot]].init_tpc_valid = TRUE;                _LocalGenerations[[slot]].working_destination =                    _BundleTileBindings[[binding]].destination;                _LocalGenerations[[slot]].committed_destination =                    prior_committed_destination;                _LocalGenerations[[slot]].committed_valid =                    prior_committed_valid;                _LocalGenerations[[slot]].published_destination =                    prior_committed_destination;                let destination = _BundleTileBindings[[binding]].destination;                _LocalGenerations[[slot]].parent_descriptor.valid = TRUE;                _LocalGenerations[[slot]].parent_descriptor.object_name = destination;                _LocalGenerations[[slot]].parent_descriptor.object_kind =                    _Tiles[[destination]].storage_kind;                _LocalGenerations[[slot]].parent_descriptor.participant_mask = participant_mask;                _LocalGenerations[[slot]].parent_descriptor.capacity_bytes = _Tiles[[destination]].capacity_bytes;                _LocalGenerations[[slot]].parent_descriptor.rows = _Tiles[[destination]].rows;                _LocalGenerations[[slot]].parent_descriptor.columns = _Tiles[[destination]].columns;                _LocalGenerations[[slot]].parent_descriptor.valid_rows = _Tiles[[destination]].valid_rows;                _LocalGenerations[[slot]].parent_descriptor.valid_columns = _Tiles[[destination]].valid_columns;                _LocalGenerations[[slot]].parent_descriptor.data_type = _Tiles[[destination]].data_type;                _LocalGenerations[[slot]].parent_descriptor.layout = _Tiles[[destination]].layout;                _LocalGenerations[[slot]].parent_descriptor.location = _Tiles[[destination]].location;                _LocalGenerations[[slot]].parent_descriptor.cube_k_repeat = _Tiles[[destination]].cube_k_repeat;                _LocalGenerations[[slot]].parent_descriptor.cube_n_repeat = _Tiles[[destination]].cube_n_repeat;                _LocalGenerations[[slot]].parent_descriptor.cube_cell_count = _Tiles[[destination]].cube_cell_count;                _LocalGenerations[[slot]].parent_descriptor.cube_storage_bytes = _Tiles[[destination]].cube_storage_bytes;                _LocalGenerations[[slot]].parent_size_code = assemble.size_code;                _LocalGenerations[[slot]].parent_cell_count = BundleLocalGenerationCellCount(assemble.size_code as integer {1..12});                _LocalGenerations[[slot]].covered_cells = Zeros{2048};                _LocalGenerations[[slot]].ready_cells = Zeros{2048};                _LocalGenerations[[slot]].writer_count = 0;                _LocalGenerations[[slot]].consumer_count = 0;            end;            var covered_cells: bits(2048) =                _LocalGenerations[[slot]].covered_cells;            var ready_cells: bits(2048) = _LocalGenerations[[slot]].ready_cells;            let replay = BundleLocalGenerationReplay(                slot, offset_cells, writer_cells, ReadBPC(),                _BundleExecutionDomainToken);            if !replay then                // The fixed record array is a verification bound, not an ISA                // writer-count limit.  Architecturally legal executions are                // modeled only while the bounded witness has a free record.                assert _LocalGenerations[[slot]].writer_count < 16;                let ordinal = _LocalGenerations[[slot]].writer_count;                _LocalGenerations[[slot]].writers[[ordinal]].valid = TRUE;                _LocalGenerations[[slot]].writers[[ordinal]].offset_cells = offset_cells;                _LocalGenerations[[slot]].writers[[ordinal]].cell_count = writer_cells;                _LocalGenerations[[slot]].writers[[ordinal]].destination = _BundleTileBindings[[binding]].destination;                // Registration contributes coverage only.  Completion is a                // separate architecture event so OoO readiness cannot be                // confused with writer-set closure.                _LocalGenerations[[slot]].writers[[ordinal]].ready = FALSE;                _LocalGenerations[[slot]].writers[[ordinal]].identity                    .instruction_instance = ReadBPC();                _LocalGenerations[[slot]].writers[[ordinal]].identity                    .execution_domain_token = _BundleExecutionDomainToken;                _LocalGenerations[[slot]].writer_count = (ordinal + 1) as integer {0..16};                for cell = 0 to 2047 do                    if cell < writer_cells then                        let covered_index = (offset_cells + cell)                            as integer {0..2047};                        covered_cells[covered_index] = '1';                    end;                end;            end;            _LocalGenerations[[slot]].covered_cells = covered_cells;            _LocalGenerations[[slot]].ready_cells = ready_cells;            if assemble.last then                _LocalGenerations[[slot]].last_seen = TRUE;                _LocalGenerations[[slot]].closed = TRUE;                if BundleLocalGenerationPublicationEligible(slot) then                    _LocalGenerations[[slot]].open = FALSE;                    _LocalGenerations[[slot]].published = TRUE;                    _LocalGenerations[[slot]].published_destination =                        _BundleTileBindings[[binding]].destination;                    _LocalGenerations[[slot]].committed_destination =                        _BundleTileBindings[[binding]].destination;                    _LocalGenerations[[slot]].committed_valid = TRUE;                else                    // LAST closes the writer set, but an incomplete ready set                    // remains pending. No mapping or payload is exposed until                    // the portable publication predicate becomes true.                    _LocalGenerations[[slot]].open = FALSE;                    _LocalGenerations[[slot]].published = FALSE;                end;            end;        end;    end;end;
func ReuseBundleLocalGenerationDestination() => booleanbegin    for binding = 0 to PTO_BUNDLE_TILE_BINDING_COUNT - 1 do        if _BundleTileBindings[[binding]].valid &&           _BundleTileBindings[[binding]].destination_assemble.valid then            let assemble = _BundleTileBindings[[binding]].destination_assemble;            let hand = UInt(_BundleTileBindings[[binding]].destination_hand)                as integer {0..3};            let participant_mask = _BundleTileBindings[[binding]].pe_mask;            let slot = BundleLocalGenerationSlot(hand, participant_mask);            if !assemble.init then                if !_LocalGenerations[[slot]].open then                    SetBundleLocalGenerationFault(hand, participant_mask,                        Fault_BundleControl); return FALSE;                end;                let destination = _LocalGenerations[[slot]].working_destination;                if !_Tiles[[destination]].allocated ||                   !BundleLocalGenerationDescriptorMatches(                       slot, destination, participant_mask) then                    SetBundleLocalGenerationFault(hand, participant_mask,                        Fault_TileLegality); return FALSE;                end;                _BundleTileBindings[[binding]].destination = destination;                _BundleTileBindings[[binding]].destination_allocated_by_bundle = TRUE;                _BundleTileBindings[[binding]].destination_reused_by_generation = TRUE;            end;        end;    end;    return TRUE;end;

Architecture behavior

This internal model unit is documented through its normative ASL/NDF owners and validation evidence; it has no reader-guide migration target.

NDF clauses

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

    1. surfaceBLOCK
    2. ownerPTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION
    3. categoryB-ASSEMBLE-LOCAL-GENERATION
    4. case001

    Normative contract

    contract · L1 · accepted

    A Local B.ASSEMBLE generation is keyed by selected PE mask and architectural destination hand/name. INIT captures one normalized parent descriptor; later writers must match that identity and use a distinct instruction instance unless they are an exact replay. Coverage and readiness are checked before LAST publication, and a fault aborts the pending working version while preserving the committed version, mapping, payload, definedness, and sources.

    Sources and references
    Complete stable ID
    PTO-B-ASSEMBLE-LOCAL-GENERATION-001
    Source path
    asl/block/model/operands/local-generation.asl
    Affected units
    PTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION
    Source SHA-256
    33ba780de82c3cf87a0a249cd330c2be518d396cd2673c04ddf2bb938346c7c3
    Clause SHA-256
    8db49df045cf7ba55b6ac98b6352e7c8181b93be494d52ea81a68b846d3e574b
    Open exact canonical source ↗

Evidence index

13 matching entries

Executable evidence6
  • Decoded aliased assembly preserves the committed old mapping and payload across a failed replacement generation.
    1. surfaceBLOCK
    2. ownerPTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION
    3. categoryEXECUTION
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-BLOCK-ASSEMBLE-ALIAS-CONSUMER-001
    Path
    tests/asl/block/model/operands/local-generation/block-exec-assemble-alias-consumer-001.asl
    Kind / role
    execution
    Requirements
    PTO-B-ASSEMBLE-LOCAL-GENERATION-001, PTO-B-SUBVIEW-DESCRIPTOR-001, PTO-INST-BLOCK-B-IOT
    Pass condition
    The decoded source/destination alias publishes a new working object only at LAST, retains the bound old parent/subview value, and a subsequent decoded incomplete replacement aborts without losing the committed old destination/name/definedness; no pending-consumer carrier is claimed.
    SHA-256
    89bb4d1bcf05798ae3073a89cb5e96a3b3cfa110b5b4a4e3d093cb1bca08944b
    Open exact source ↗ for PTO-AVS-BLOCK-ASSEMBLE-ALIAS-CONSUMER-001
  • Decoded Local generation faults reject replacement, identity, coverage, allocation, and replay violations without partial publication.
    1. surfaceBLOCK
    2. ownerPTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION
    3. categoryFAULT
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-BLOCK-ASSEMBLE-LOCAL-FAULTS-001
    Path
    tests/asl/block/model/operands/local-generation/block-fault-assemble-local-faults-001.asl
    Kind / role
    fault
    Requirements
    PTO-B-ASSEMBLE-LOCAL-GENERATION-001, PTO-INST-BLOCK-B-ASSEMBLE, PTO-INST-BLOCK-B-IOT
    Pass condition
    Missing or duplicate INIT, second-open, equal-range distinct-instance overlap, out-of-bounds, participant-mask, normalized-descriptor/object-name, no-modifier open-key, incomplete LAST, allocation failure, and writer-after-LAST cases report exact BundleControl/TileLegality/TileAllocation results; speculative state aborts while sources remain allocated and defined.
    SHA-256
    22cb556792488b42e40ec17571d961519e0cd66911c03434306e6920f170a61e
    Open exact source ↗ for PTO-AVS-BLOCK-ASSEMBLE-LOCAL-FAULTS-001
  • Decoded Local B.ASSEMBLE keeps one open generation across disjoint writers and publishes only at LAST.
    1. surfaceBLOCK
    2. ownerPTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION
    3. categoryEXECUTION
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-BLOCK-ASSEMBLE-LOCAL-LIFECYCLE-001
    Path
    tests/asl/block/model/operands/local-generation/block-exec-assemble-local-lifecycle-001.asl
    Kind / role
    execution
    Requirements
    PTO-B-ASSEMBLE-LOCAL-GENERATION-001, PTO-INST-BLOCK-B-ASSEMBLE, PTO-INST-BLOCK-B-IOT
    Pass condition
    INIT opens one generation, an exact same-instance replay is idempotent, distinct MIDDLE writers reuse one destination without allocating another object, readiness and coverage accumulate out of order, and LAST closes and publishes atomically.
    SHA-256
    6127226a74cc6b1982898a62a35bd3e2145b9485bbe1cc858bd939d67132f511
    Open exact source ↗ for PTO-AVS-BLOCK-ASSEMBLE-LOCAL-LIFECYCLE-001
  • Decoded multi-output Local assembly preflights every writer before publication.
    1. surfaceBLOCK
    2. ownerPTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION
    3. categoryATOMICITY
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-BLOCK-ASSEMBLE-MULTIOUTPUT-001
    Path
    tests/asl/block/model/operands/local-generation/block-atomic-assemble-multioutput-001.asl
    Kind / role
    atomicity
    Requirements
    PTO-B-ASSEMBLE-LOCAL-GENERATION-001, PTO-INST-BLOCK-B-IOT, PTO-INST-BLOCK-B-ASSEMBLE
    Pass condition
    Two independently bound output hands commit together with disjoint generation domains; when one output has incomplete coverage, neither destination allocates or advances.
    SHA-256
    0a936b30a2b754ac42dd93cd893a8377bb847f8d4c43cf26c785754e9f357b2a
    Open exact source ↗ for PTO-AVS-BLOCK-ASSEMBLE-MULTIOUTPUT-001
  • Decoded INIT, MIDDLE, and LAST Local generation faults retain the original operation address, restart at INIT, and abort speculative state.
    1. surfaceBLOCK
    2. ownerPTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION
    3. categoryFAULT
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-BLOCK-ASSEMBLE-RESTART-001
    Path
    tests/asl/block/model/operands/local-generation/block-fault-assemble-restart-001.asl
    Kind / role
    fault
    Requirements
    PTO-B-ASSEMBLE-LOCAL-GENERATION-001, PTO-INST-BLOCK-B-ASSEMBLE, PTO-INST-BLOCK-B-IOT
    Pass condition
    Each decoded INIT, MIDDLE, and LAST fault reports the original operation address, restores the earliest INIT TPC, and leaves no open generation, partial coverage, readiness, or publication.
    SHA-256
    2811b86d9c533058a60ad7fb19f135755ca0e622e3951560429a9fa9d6bfbb54
    Open exact source ↗ for PTO-AVS-BLOCK-ASSEMBLE-RESTART-001
  • PTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION compiles as an independent normative unit
    1. surfaceBLOCK
    2. ownerPTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION
    3. categorySTATIC-INVARIANT
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION-STATIC-001
    Path
    tests/asl/block/model/operands/local-generation/block-static-local-generation-contract-001.asl
    Kind / role
    static-invariant
    Requirements
    PTO-B-ASSEMBLE-LOCAL-GENERATION-001
    Pass condition
    the complete model and this unit's static invariant compile
    SHA-256
    9b3723da323d9c181afb4f392f98507fa38909655c18c8ab861bcd180ce427c8
    Open exact source ↗ for PTO-AVS-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION-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
  • B.SUBVIEW and B.ASSEMBLE range-modifier association · accepted
    1. decision recordADR
    2. case0098

    Decision record

    Loading ADR-0098…

    Sources and references
    Complete stable ID
    ADR-0098
    Path
    docs/status/decisions/0098-b-range-modifiers.md
    Affected units
    PTO-ARCH-PROFILE-RESET, PTO-BLOCK-B-IOT, PTO-BLOCK-B-IOS, PTO-BLOCK-B-SUBVIEW, PTO-BLOCK-B-ASSEMBLE, PTO-BLOCK-MODEL-DISPATCH-COMMANDS, PTO-BLOCK-MODEL-OPERANDS-RANGE-MODIFIERS, PTO-BLOCK-MODEL-OPERANDS-SHARED-BINDINGS, PTO-BLOCK-MODEL-OPERANDS-TILE-BINDINGS, PTO-BLOCK-MODEL-STATE-CONTROL-STATE, PTO-BLOCK-MODEL-STATE-DESCRIPTOR-STATE, PTO-BLOCK-MODEL-STATE-TYPES, PTO-ARCH-DATA-TYPES-TRAP-CONTEXT, PTO-ARCH-PROFILE-REFERENCE-PROFILE, PTO-ARCH-PROFILE-TRAP-CONTEXT-RECOVERY, PTO-ARCH-STATE-TRAP-CONTEXT, PTO-BLOCK-MODEL-DISPATCH-TILE-EXECUTION, PTO-BLOCK-MODEL-DISPATCH-TILE-SCHEMA, PTO-BLOCK-MODEL-FAULTS-ROLLBACK, PTO-BLOCK-MODEL-LIFECYCLE-RESET, PTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION, PTO-BLOCK-MODEL-OPERANDS-SHARED-GENERATION, PTO-BLOCK-MODEL-OPERANDS-PORTABLE-CARRIERS, PTO-BLOCK-MODEL-OPERANDS-SUBVIEW-DESCRIPTOR, PTO-BLOCK-MODEL-STATE-SHARED-GENERATION, PTO-TILE-MODEL-LEGALITY-MATRIX-POSTPROCESS
    Affected NDF
    PTO-B-IOT-STREAM-001, PTO-B-IOS-SHARED-STATE-001, PTO-B-SUBVIEW-RANGE-001, PTO-B-ASSEMBLE-RANGE-001, PTO-B-SUBVIEW-DESCRIPTOR-001, PTO-BLOCK-TILE-OPERATION-APPLICABILITY-001, PTO-B-ASSEMBLE-LOCAL-GENERATION-001, PTO-B-ASSEMBLE-SHARED-GENERATION-001, PTO-B-ASSEMBLE-SHARED-STANDALONE-001, PTO-B-ASSEMBLE-CONSUMER-READINESS-001, PTO-B-ASSEMBLE-SPECULATION-001, PTO-B-ASSEMBLE-PRODUCER-EFFECT-ELIGIBILITY-001
    SHA-256
    e194ccc6b6922fd4b65066b533f5e4b0eba094e099970059bca8e25b4e466fba
    Open exact decision source ↗ for ADR-0098
  • Cooperative Group-M Distribution and Inactive PE Semantics · accepted
    1. decision recordADR
    2. case0100

    Decision record

    Loading ADR-0100…

    Sources and references
    Complete stable ID
    ADR-0100
    Path
    docs/status/decisions/0100-cooperative-group-m-distribution.md
    Affected units
    PTO-BLOCK-MODEL-DISPATCH-CUBE-DESTINATION, PTO-BLOCK-MODEL-DISPATCH-CUBE-TMATMUL, PTO-BLOCK-MODEL-DISPATCH-SHARED-CUBE-MATRIX, PTO-BLOCK-MODEL-DISPATCH-TILE-EXECUTION, PTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION, PTO-BLOCK-MODEL-OPERANDS-PORTABLE-CARRIERS, PTO-BLOCK-MODEL-OPERANDS-SUBVIEW-DESCRIPTOR, PTO-TILE-MODEL-LEGALITY-MATRIX-OPERANDS, PTO-TILE-MODEL-LEGALITY-MATRIX-SHAPE
    Affected NDF
    PTO-CUBE-GROUP-M-DISTRIBUTION-001, PTO-B-ASSEMBLE-CONSUMER-READINESS-001
    SHA-256
    adcfcca401a69fb4e7635fbe4d65d33b36fb2744b3fbedf6d7862cadbc8e7232
    Open exact decision source ↗ for ADR-0100

Unit metadata

Open 4 generated metadata fields
id
PTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION
surface
block
classification
[
  "model",
  "operands",
  "local-generation"
]
depends_on
[
  "PTO-BLOCK-MODEL-OPERANDS-RANGE-MODIFIERS",
  "PTO-BLOCK-MODEL-OPERANDS-TILE-BINDINGS"
]
Open generated traceability record
{
  "classification": [
    "model",
    "operands",
    "local-generation"
  ],
  "documentation": "docs/block/model/operands/local-generation.md",
  "id": "PTO-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION",
  "mnemonic": null,
  "readiness_subjects": [
    "ADR-0098",
    "ADR-0100"
  ],
  "semantic_tests": [
    "PTO-AVS-BLOCK-ASSEMBLE-ALIAS-CONSUMER-001",
    "PTO-AVS-BLOCK-ASSEMBLE-LOCAL-FAULTS-001",
    "PTO-AVS-BLOCK-ASSEMBLE-LOCAL-LIFECYCLE-001",
    "PTO-AVS-BLOCK-ASSEMBLE-MULTIOUTPUT-001",
    "PTO-AVS-BLOCK-ASSEMBLE-RESTART-001"
  ],
  "source": "asl/block/model/operands/local-generation.asl",
  "surface": "block",
  "tests": [
    "PTO-AVS-BLOCK-ASSEMBLE-ALIAS-CONSUMER-001",
    "PTO-AVS-BLOCK-ASSEMBLE-LOCAL-FAULTS-001",
    "PTO-AVS-BLOCK-ASSEMBLE-LOCAL-LIFECYCLE-001",
    "PTO-AVS-BLOCK-ASSEMBLE-MULTIOUTPUT-001",
    "PTO-AVS-BLOCK-ASSEMBLE-RESTART-001",
    "PTO-AVS-BLOCK-MODEL-OPERANDS-LOCAL-GENERATION-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
33ba780de82c3cf87a0a249cd330c2be518d396cd2673c04ddf2bb938346c7c3
Generated documentation
docs/block/model/operands/local-generation.md · embedded in this page
Documentation SHA-256
fc208bb6e71f9a581475f25520bff0d9f5f6be9ef85ac55bee0bd0d732f94d44

Exact owners