native 0.0.1
Vectors, masks and wide register packs for C++26
Loading...
Searching...
No Matches
I8MM
Collaboration diagram for I8MM:

Functions

template<isa< arm > Arch>
requires (Arch.has(arm_feature::i8mm))
constexpr simd< std::int32_t, 4, Arch > native::smmla (simd< std::int32_t, 4, Arch > acc, simd< std::int8_t, 16, Arch > a, simd< std::int8_t, 16, Arch > b) noexcept
 Signed 2x8 times 8x2 matrix multiply-accumulate.
template<isa< arm > Arch>
requires (Arch.has(arm_feature::i8mm))
constexpr simd< std::uint32_t, 4, Arch > native::ummla (simd< std::uint32_t, 4, Arch > acc, simd< std::uint8_t, 16, Arch > a, simd< std::uint8_t, 16, Arch > b) noexcept
 Unsigned 2x8 times 8x2 matrix multiply-accumulate.
template<isa< arm > Arch>
requires (Arch.has(arm_feature::i8mm))
constexpr simd< std::int32_t, 4, Arch > native::usmmla (simd< std::int32_t, 4, Arch > acc, simd< std::uint8_t, 16, Arch > a, simd< std::int8_t, 16, Arch > b) noexcept
 Unsigned left matrix times signed right matrix, with signed accumulator.
template<isa< arm > Arch>
requires (Arch.has(arm_feature::i8mm))
constexpr simd< std::int32_t, 2, Arch > native::usdot (simd< std::int32_t, 2, Arch > acc, simd< std::uint8_t, 8, Arch > a, simd< std::int8_t, 8, Arch > b) noexcept
 Accumulate each corresponding group of four unsigned a bytes times signed b bytes.
template<isa< arm > Arch, unsigned Lane>
requires (Arch.has(arm_feature::i8mm) && Lane < 2)
constexpr simd< std::int32_t, 2, Arch > native::usdot_lane (simd< std::int32_t, 2, Arch > acc, simd< std::uint8_t, 8, Arch > a, simd< std::int8_t, 8, Arch > b) noexcept
 Accumulate each four-byte group of a times b[4*Lane..4*Lane+3].
template<isa< arm > Arch, unsigned Lane>
requires (Arch.has(arm_feature::i8mm) && Lane < 2)
constexpr simd< std::int32_t, 2, Arch > native::sudot_lane (simd< std::int32_t, 2, Arch > acc, simd< std::int8_t, 8, Arch > a, simd< std::uint8_t, 8, Arch > b) noexcept
 Accumulate each four-byte group of a times b[4*Lane..4*Lane+3].
template<isa< arm > Arch, unsigned Lane>
requires (Arch.has(arm_feature::i8mm) && Lane < 4)
constexpr simd< std::int32_t, 2, Arch > native::usdot_lane (simd< std::int32_t, 2, Arch > acc, simd< std::uint8_t, 8, Arch > a, simd< std::int8_t, 16, Arch > b) noexcept
 Accumulate each four-byte group of a times b[4*Lane..4*Lane+3].
template<isa< arm > Arch, unsigned Lane>
requires (Arch.has(arm_feature::i8mm) && Lane < 4)
constexpr simd< std::int32_t, 2, Arch > native::sudot_lane (simd< std::int32_t, 2, Arch > acc, simd< std::int8_t, 8, Arch > a, simd< std::uint8_t, 16, Arch > b) noexcept
 Accumulate each four-byte group of a times b[4*Lane..4*Lane+3].
template<isa< arm > Arch>
requires (Arch.has(arm_feature::i8mm))
constexpr simd< std::int32_t, 4, Arch > native::usdot (simd< std::int32_t, 4, Arch > acc, simd< std::uint8_t, 16, Arch > a, simd< std::int8_t, 16, Arch > b) noexcept
 Accumulate each corresponding group of four unsigned a bytes times signed b bytes.
template<isa< arm > Arch, unsigned Lane>
requires (Arch.has(arm_feature::i8mm) && Lane < 2)
constexpr simd< std::int32_t, 4, Arch > native::usdot_lane (simd< std::int32_t, 4, Arch > acc, simd< std::uint8_t, 16, Arch > a, simd< std::int8_t, 8, Arch > b) noexcept
 Accumulate each four-byte group of a times b[4*Lane..4*Lane+3].
template<isa< arm > Arch, unsigned Lane>
requires (Arch.has(arm_feature::i8mm) && Lane < 2)
constexpr simd< std::int32_t, 4, Arch > native::sudot_lane (simd< std::int32_t, 4, Arch > acc, simd< std::int8_t, 16, Arch > a, simd< std::uint8_t, 8, Arch > b) noexcept
 Accumulate each four-byte group of a times b[4*Lane..4*Lane+3].
template<isa< arm > Arch, unsigned Lane>
requires (Arch.has(arm_feature::i8mm) && Lane < 4)
constexpr simd< std::int32_t, 4, Arch > native::usdot_lane (simd< std::int32_t, 4, Arch > acc, simd< std::uint8_t, 16, Arch > a, simd< std::int8_t, 16, Arch > b) noexcept
 Accumulate each four-byte group of a times b[4*Lane..4*Lane+3].
template<isa< arm > Arch, unsigned Lane>
requires (Arch.has(arm_feature::i8mm) && Lane < 4)
constexpr simd< std::int32_t, 4, Arch > native::sudot_lane (simd< std::int32_t, 4, Arch > acc, simd< std::int8_t, 16, Arch > a, simd< std::uint8_t, 16, Arch > b) noexcept
 Accumulate each four-byte group of a times b[4*Lane..4*Lane+3].

Detailed Description

Advanced SIMD integer matrix and mixed-sign dot products. Runtime calls require I8MM, independently of DotProd, FP16 and BF16. All sums wrap modulo 2^32; signed results interpret the resulting bits as two's complement. Constant evaluation has the same integer semantics. Without I8MM, only immediate calls with available SIMD storage participate; no runtime fallback. Matrix operands hold two rows of eight bytes in a and two columns of eight bytes in b. Result lane 2*r+c accumulates sum(a[8*r+k]*b[8*c+k]).