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