native 0.0.1
Vectors, masks and wide register packs for C++26
Loading...
Searching...
No Matches
native.arm.i8mm Module Reference

Exported Modules

module  native.arm.features
module  native.simd

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) && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd<std::int8_t, 16, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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) && requires { sizeof(simd<std::uint32_t, 4, Arch>); sizeof(simd<std::uint8_t, 16, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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) && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd<std::uint8_t, 16, Arch>
); sizeof(simd<std::int8_t, 16, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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>
requires (!Arch.has(arm_feature::i8mm) && requires { sizeof(simd<std::int32_t, 2, Arch>); sizeof(simd<std::uint8_t, 8, Arch>
); sizeof(simd<std::int8_t, 8, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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 && requires { sizeof(simd<std::int32_t, 2, Arch>); sizeof(simd<std::uint8_t,
8, Arch>); sizeof(simd<std::int8_t, 8, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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 < 2 && requires { sizeof(simd<std::int32_t, 2, Arch>); sizeof(simd<std::int8_t,
8, Arch>); sizeof(simd<std::uint8_t, 8, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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 && requires { sizeof(simd<std::int32_t, 2, Arch>); sizeof(simd<std::uint8_t,
8, Arch>); sizeof(simd<std::int8_t, 16, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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, unsigned Lane>
requires (!Arch.has(arm_feature::i8mm) && Lane < 4 && requires { sizeof(simd<std::int32_t, 2, Arch>); sizeof(simd<std::int8_t,
8, Arch>); sizeof(simd<std::uint8_t, 16, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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>
requires (!Arch.has(arm_feature::i8mm) && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd<std::uint8_t, 16, Arch>
); sizeof(simd<std::int8_t, 16, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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 && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd<std::uint8_t,
16, Arch>); sizeof(simd<std::int8_t, 8, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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 < 2 && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd<std::int8_t,
16, Arch>); sizeof(simd<std::uint8_t, 8, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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 && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd<std::uint8_t,
16, Arch>); sizeof(simd<std::int8_t, 16, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.
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].
template<isa< arm > Arch, unsigned Lane>
requires (!Arch.has(arm_feature::i8mm) && Lane < 4 && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd<std::int8_t,
16, Arch>); sizeof(simd<std::uint8_t, 16, Arch>); })
consteval 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
 Evaluate constant operands without the instruction feature.

Files

file  src/native.arm.i8mm.ccm