pto.tshrs¶
pto.tshrs is part of the Tile Scalar And Immediate instruction set.
Summary¶
Elementwise shift-right a tile by a scalar.
Mechanism¶
Elementwise shift-right of a tile, shift bits given by scalar. It operates on tile payloads rather than scalar control state, and its legality is constrained by tile shape, layout, valid-region, and target-profile support.
For each element (i, j) in the valid region:
Syntax¶
Textual spelling is defined by the PTO ISA syntax-and-operands pages.
Synchronous form:
%dst = tshrs %src, %scalar : !pto.tile<...>, i32
AS Level 1 (SSA)¶
%dst = pto.tshrs %src, %scalar : (!pto.tile<...>, dtype) -> !pto.tile<...>
AS Level 2 (DPS)¶
pto.tshrs ins(%src, %scalar : !pto.tile_buf<...>, dtype) outs(%dst : !pto.tile_buf<...>)
C++ Intrinsic¶
Declared in include/pto/common/pto_instr.hpp:
template <typename TileDataDst, typename TileDataSrc, typename... WaitEvents>
PTO_INST RecordEvent TSHRS(TileDataDst &dst, TileDataSrc &src, typename TileDataDst::DType scalar, WaitEvents &... events);
Inputs¶
srcis the source tile.scalaris the unsigned integer shift count.dstnames the destination tile.- The operation iterates over
dst's valid region.
Expected Outputs¶
dst carries the result tile or updated tile payload produced by the operation.
Side Effects¶
No architectural side effects beyond producing the destination tile. Does not implicitly fence unrelated traffic.
Constraints¶
Constraints
- Valid region:
- The op uses
dst.GetValidRow()/dst.GetValidCol()as the iteration domain.
- The op uses
Exceptions¶
Exceptions
- Illegal operand tuples, unsupported types, invalid layout combinations, or unsupported target-profile modes are rejected by the verifier or by the selected backend instruction set.
- Programs must not rely on behavior outside the documented legal domain of this operation, even if one backend currently accepts it.
Target-Profile Restrictions¶
Target-Profile Restrictions
-
Implementation checks (A2A3):
- Supported element types are
int32_t,int,int16_t,uint32_t,unsigned int, anduint16_t. dstandsrcmust use the same element type.dstandsrcmust be vector tiles.- Runtime:
src.GetValidRow() == dst.GetValidRow()andsrc.GetValidCol() == dst.GetValidCol(). - Scalar only supports zero and positive values.
- Supported element types are
-
Implementation checks (A5):
- Supported element types are
int32_t,int16_t,int8_t,uint32_t,uint16_t, anduint8_t. dstandsrcmust use the same element type.dstandsrcmust be vector tiles.- Static valid bounds must satisfy
ValidRow <= RowsandValidCol <= Colsfor both tiles. - Runtime:
src.GetValidRow() == dst.GetValidRow()andsrc.GetValidCol() == dst.GetValidCol(). - Scalar only supports zero and positive values.
- Supported element types are
Examples¶
#include <pto/pto-inst.hpp>
using namespace pto;
void example() {
using TileDst = Tile<TileType::Vec, uint16_t, 16, 16>;
using TileSrc = Tile<TileType::Vec, uint16_t, 16, 16>;
TileDst dst;
TileSrc src;
TSHRS(dst, src, 0x2);
}
Auto Mode¶
# Auto mode: compiler/runtime-managed placement and scheduling.
%dst = pto.tshrs %src, %scalar : (!pto.tile<...>, dtype) -> !pto.tile<...>
Manual Mode¶
# Manual mode: bind resources explicitly before issuing the instruction.
# Optional for tile operands:
# pto.tassign %arg0, @tile(0x1000)
# pto.tassign %arg1, @tile(0x2000)
%dst = pto.tshrs %src, %scalar : (!pto.tile<...>, dtype) -> !pto.tile<...>
PTO Assembly Form¶
%dst = tshrs %src, %scalar : !pto.tile<...>, i32
# AS Level 2 (DPS)
pto.tshrs ins(%src, %scalar : !pto.tile_buf<...>, dtype) outs(%dst : !pto.tile_buf<...>)
Related Ops / Instruction Set Links¶
- Instruction set overview: Tile Scalar And Immediate
- Previous op in instruction set: pto.tshls
- Next op in instruction set: pto.txors