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

Exported Modules

module  native.arm.features
module  native.simd

Functions

template<isa< arm > Arch>
requires (Arch.has(arm_feature::dotprod))
constexpr simd< std::int32_t, 2, Arch > native::sdot (simd< std::int32_t, 2, Arch > accumulator, simd< std::int8_t, 8, Arch > lhs, simd< std::int8_t, 8, Arch > rhs) noexcept
 SDOT: four byte products per accumulator lane, modulo 2^32.
template<isa< arm > Arch>
requires (!Arch.has(arm_feature::dotprod) && requires { sizeof(simd<std::int32_t, 2, Arch>); sizeof(simd<std::int8_t, 8, Arch>); })
consteval simd< std::int32_t, 2, Arch > native::sdot (simd< std::int32_t, 2, Arch > accumulator, simd< std::int8_t, 8, Arch > lhs, simd< std::int8_t, 8, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch, int Lane>
requires (Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 2)
constexpr simd< std::int32_t, 2, Arch > native::sdot_lane (simd< std::int32_t, 2, Arch > accumulator, simd< std::int8_t, 8, Arch > lhs, simd< std::int8_t, 8, Arch > rhs) noexcept
 SDOT by element: broadcast rhs byte group Lane to every accumulator lane.
template<isa< arm > Arch, int Lane>
requires (!Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 2 && requires { sizeof(simd<std::int32_t, 2, Arch>); sizeof(simd
<std::int8_t, 8, Arch>); })
consteval simd< std::int32_t, 2, Arch > native::sdot_lane (simd< std::int32_t, 2, Arch > accumulator, simd< std::int8_t, 8, Arch > lhs, simd< std::int8_t, 8, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch, int Lane>
requires (Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 4)
constexpr simd< std::int32_t, 2, Arch > native::sdot_lane (simd< std::int32_t, 2, Arch > accumulator, simd< std::int8_t, 8, Arch > lhs, simd< std::int8_t, 16, Arch > rhs) noexcept
 SDOT by element: broadcast rhs byte group Lane to every accumulator lane.
template<isa< arm > Arch, int Lane>
requires (!Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 4 && requires { sizeof(simd<std::int32_t, 2, Arch>); sizeof(simd
<std::int8_t, 8, Arch>); sizeof(simd<std::int8_t, 16, Arch>); })
consteval simd< std::int32_t, 2, Arch > native::sdot_lane (simd< std::int32_t, 2, Arch > accumulator, simd< std::int8_t, 8, Arch > lhs, simd< std::int8_t, 16, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch>
requires (Arch.has(arm_feature::dotprod))
constexpr simd< std::int32_t, 4, Arch > native::sdot (simd< std::int32_t, 4, Arch > accumulator, simd< std::int8_t, 16, Arch > lhs, simd< std::int8_t, 16, Arch > rhs) noexcept
 SDOT: four byte products per accumulator lane, modulo 2^32.
template<isa< arm > Arch>
requires (!Arch.has(arm_feature::dotprod) && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd<std::int8_t, 16, Arch>); })
consteval simd< std::int32_t, 4, Arch > native::sdot (simd< std::int32_t, 4, Arch > accumulator, simd< std::int8_t, 16, Arch > lhs, simd< std::int8_t, 16, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch, int Lane>
requires (Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 2)
constexpr simd< std::int32_t, 4, Arch > native::sdot_lane (simd< std::int32_t, 4, Arch > accumulator, simd< std::int8_t, 16, Arch > lhs, simd< std::int8_t, 8, Arch > rhs) noexcept
 SDOT by element: broadcast rhs byte group Lane to every accumulator lane.
template<isa< arm > Arch, int Lane>
requires (!Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 2 && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd
<std::int8_t, 16, Arch>); sizeof(simd<std::int8_t, 8, Arch>); })
consteval simd< std::int32_t, 4, Arch > native::sdot_lane (simd< std::int32_t, 4, Arch > accumulator, simd< std::int8_t, 16, Arch > lhs, simd< std::int8_t, 8, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch, int Lane>
requires (Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 4)
constexpr simd< std::int32_t, 4, Arch > native::sdot_lane (simd< std::int32_t, 4, Arch > accumulator, simd< std::int8_t, 16, Arch > lhs, simd< std::int8_t, 16, Arch > rhs) noexcept
 SDOT by element: broadcast rhs byte group Lane to every accumulator lane.
template<isa< arm > Arch, int Lane>
requires (!Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 4 && requires { sizeof(simd<std::int32_t, 4, Arch>); sizeof(simd
<std::int8_t, 16, Arch>); })
consteval simd< std::int32_t, 4, Arch > native::sdot_lane (simd< std::int32_t, 4, Arch > accumulator, simd< std::int8_t, 16, Arch > lhs, simd< std::int8_t, 16, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch>
requires (Arch.has(arm_feature::dotprod))
constexpr simd< std::uint32_t, 2, Arch > native::udot (simd< std::uint32_t, 2, Arch > accumulator, simd< std::uint8_t, 8, Arch > lhs, simd< std::uint8_t, 8, Arch > rhs) noexcept
 UDOT: four byte products per accumulator lane, modulo 2^32.
template<isa< arm > Arch>
requires (!Arch.has(arm_feature::dotprod) && requires { sizeof(simd<std::uint32_t, 2, Arch>); sizeof(simd<std::uint8_t, 8, Arch>); })
consteval simd< std::uint32_t, 2, Arch > native::udot (simd< std::uint32_t, 2, Arch > accumulator, simd< std::uint8_t, 8, Arch > lhs, simd< std::uint8_t, 8, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch, int Lane>
requires (Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 2)
constexpr simd< std::uint32_t, 2, Arch > native::udot_lane (simd< std::uint32_t, 2, Arch > accumulator, simd< std::uint8_t, 8, Arch > lhs, simd< std::uint8_t, 8, Arch > rhs) noexcept
 UDOT by element: broadcast rhs byte group Lane to every accumulator lane.
template<isa< arm > Arch, int Lane>
requires (!Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 2 && requires { sizeof(simd<std::uint32_t, 2, Arch>); sizeof(simd
<std::uint8_t, 8, Arch>); })
consteval simd< std::uint32_t, 2, Arch > native::udot_lane (simd< std::uint32_t, 2, Arch > accumulator, simd< std::uint8_t, 8, Arch > lhs, simd< std::uint8_t, 8, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch, int Lane>
requires (Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 4)
constexpr simd< std::uint32_t, 2, Arch > native::udot_lane (simd< std::uint32_t, 2, Arch > accumulator, simd< std::uint8_t, 8, Arch > lhs, simd< std::uint8_t, 16, Arch > rhs) noexcept
 UDOT by element: broadcast rhs byte group Lane to every accumulator lane.
template<isa< arm > Arch, int Lane>
requires (!Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 4 && requires { sizeof(simd<std::uint32_t, 2, Arch>); sizeof(simd
<std::uint8_t, 8, Arch>); sizeof(simd<std::uint8_t, 16, Arch>); })
consteval simd< std::uint32_t, 2, Arch > native::udot_lane (simd< std::uint32_t, 2, Arch > accumulator, simd< std::uint8_t, 8, Arch > lhs, simd< std::uint8_t, 16, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch>
requires (Arch.has(arm_feature::dotprod))
constexpr simd< std::uint32_t, 4, Arch > native::udot (simd< std::uint32_t, 4, Arch > accumulator, simd< std::uint8_t, 16, Arch > lhs, simd< std::uint8_t, 16, Arch > rhs) noexcept
 UDOT: four byte products per accumulator lane, modulo 2^32.
template<isa< arm > Arch>
requires (!Arch.has(arm_feature::dotprod) && requires { sizeof(simd<std::uint32_t, 4, Arch>); sizeof(simd<std::uint8_t, 16, Arch>); })
consteval simd< std::uint32_t, 4, Arch > native::udot (simd< std::uint32_t, 4, Arch > accumulator, simd< std::uint8_t, 16, Arch > lhs, simd< std::uint8_t, 16, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch, int Lane>
requires (Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 2)
constexpr simd< std::uint32_t, 4, Arch > native::udot_lane (simd< std::uint32_t, 4, Arch > accumulator, simd< std::uint8_t, 16, Arch > lhs, simd< std::uint8_t, 8, Arch > rhs) noexcept
 UDOT by element: broadcast rhs byte group Lane to every accumulator lane.
template<isa< arm > Arch, int Lane>
requires (!Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 2 && requires { sizeof(simd<std::uint32_t, 4, Arch>); sizeof(simd
<std::uint8_t, 16, Arch>); sizeof(simd<std::uint8_t, 8, Arch>); })
consteval simd< std::uint32_t, 4, Arch > native::udot_lane (simd< std::uint32_t, 4, Arch > accumulator, simd< std::uint8_t, 16, Arch > lhs, simd< std::uint8_t, 8, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.
template<isa< arm > Arch, int Lane>
requires (Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 4)
constexpr simd< std::uint32_t, 4, Arch > native::udot_lane (simd< std::uint32_t, 4, Arch > accumulator, simd< std::uint8_t, 16, Arch > lhs, simd< std::uint8_t, 16, Arch > rhs) noexcept
 UDOT by element: broadcast rhs byte group Lane to every accumulator lane.
template<isa< arm > Arch, int Lane>
requires (!Arch.has(arm_feature::dotprod) && Lane >= 0 && Lane < 4 && requires { sizeof(simd<std::uint32_t, 4, Arch>); sizeof(simd
<std::uint8_t, 16, Arch>); })
consteval simd< std::uint32_t, 4, Arch > native::udot_lane (simd< std::uint32_t, 4, Arch > accumulator, simd< std::uint8_t, 16, Arch > lhs, simd< std::uint8_t, 16, Arch > rhs) noexcept
 Evaluate constant operands without the instruction feature.

Files

file  src/native.arm.dotprod.ccm