|
native 0.0.1
Vectors, masks and wide register packs for C++26
|
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]. | |
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]).