Defect
Current linx include/jcore/template_asm.hpp lowers TGATHER and TSCATTER with one source in B.IOT, then passes the index Tile through B.IOR:
B.IOT ValueSrc, mask=1111, last, ->Dst<TSize>
B.IOR [IndexSrc], []
The index constraint is Tr, so this produces a scalar-T operand where the current model correctly attempts a scalar temporary-register read and then aborts when no scalar T value exists.
ASL contract
The current authoritative ASL requires one terminating two-source Local B.IOT for both operations:
B.IOT ValueSrc, IndexSrc, mask=PE_MASK, last, ->Dst<TSize>
B.IOR is explicitly illegal for both schemas. The index selects a row at the current column; it is not a scalar block argument.
References:
- pto-spec@dea0b75e: asl/tile/irregular-and-complex/layout/TGATHER.asl
- pto-spec@dea0b75e: asl/tile/irregular-and-complex/layout/TSCATTER.asl
- current lowerer: include/jcore/template_asm.hpp (TGATHER and TSCATTER bodies)
Required API change
For both compile-time and dynamic valid-shape branches:
- Emit B.IOT src, index, mask=..., last, ->dst.
- Remove B.IOR [index], [].
- Keep dimensions from index/destination geometry as required by the active ASL.
- Add assembly/lowering regressions for a two-source B.IOT and no B.IOR.
Reproducer caveat
The SuperNPUBench guard demo used in LinxISA/SuperScalarModel#569 also calls gfill_idx(idx, MN), which produces values up to MN-1. For an M x N Tile, ASL requires row indexes in [0, M). Its data generator must be corrected separately before treating a run as a semantic golden.
Related triage: LinxISA/SuperScalarModel#569 (gfrun-10).
Defect
Current linx include/jcore/template_asm.hpp lowers TGATHER and TSCATTER with one source in B.IOT, then passes the index Tile through B.IOR:
The index constraint is Tr, so this produces a scalar-T operand where the current model correctly attempts a scalar temporary-register read and then aborts when no scalar T value exists.
ASL contract
The current authoritative ASL requires one terminating two-source Local B.IOT for both operations:
B.IOR is explicitly illegal for both schemas. The index selects a row at the current column; it is not a scalar block argument.
References:
Required API change
For both compile-time and dynamic valid-shape branches:
Reproducer caveat
The SuperNPUBench guard demo used in LinxISA/SuperScalarModel#569 also calls gfill_idx(idx, MN), which produces values up to MN-1. For an M x N Tile, ASL requires row indexes in [0, M). Its data generator must be corrected separately before treating a run as a semantic golden.
Related triage: LinxISA/SuperScalarModel#569 (gfrun-10).