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

Functions

template<isa< arm > Arch = NATIVE_BASELINE>
requires (Arch.has(arm_feature::pmull))
constexpr simd< std::uint64_t, 2, Arch > native::pmull (std::uint64_t a, std::uint64_t b) noexcept
template<isa< arm > Arch>
requires (Arch.has(arm_feature::pmull))
constexpr simd< std::uint64_t, 2, Arch > native::pmull2 (simd< std::uint64_t, 2, Arch > a, simd< std::uint64_t, 2, Arch > b) noexcept
 Multiply the high 64-bit polynomial lane of each operand; lower lanes are ignored.
template<isa< arm > Arch>
requires (Arch.has(arm_feature::neon))
constexpr simd< std::uint16_t, 8, Arch > native::pmull (simd< std::uint8_t, 8, Arch > a, simd< std::uint8_t, 8, Arch > b) noexcept
 Multiply eight pairs of byte polynomials into 16-bit products; requires only NEON.
template<isa< arm > Arch>
requires (Arch.has(arm_feature::neon))
constexpr simd< std::uint16_t, 8, Arch > native::pmull2 (simd< std::uint8_t, 16, Arch > a, simd< std::uint8_t, 16, Arch > b) noexcept
 Multiply the high eight byte polynomials into 16-bit products; requires only NEON.
template<isa< arm > Arch = NATIVE_BASELINE, class... T>
void native::pmull (T...)=delete
 Reject unsupported argument shapes or unavailable instruction features.
template<isa< arm > Arch, class... T>
void native::pmull2 (T...)=delete
 Reject unsupported argument shapes or unavailable instruction features.

Detailed Description

Bit i is the coefficient of x^i. Products use XOR, without carry or reduction by a modulus. Byte products need NEON; runtime 64-bit products need FEAT_PMULL. The latter use the compiler "aes" target, whose full target_features<arm>("aes") set must be admitted before entering the leaf. These integer operations do not read or modify FPCR, FPSR or NZCV. Constant evaluation computes the same integer values. Feature-absent calls are immediate-only and still require complete SIMD storage for their Arch.

Function Documentation

◆ pmull()

template<isa< arm > Arch = NATIVE_BASELINE>
requires (Arch.has(arm_feature::pmull))
simd< std::uint64_t, 2, Arch > native::pmull ( std::uint64_t a,
std::uint64_t b )
inlineconstexprexportnoexcept

Multiply two degree-at-most-63 polynomials over GF(2), returning all 128 coefficients. Arch defaults to the owning module's baseline, and is preserved in the result. Constant evaluation performs polynomial arithmetic; runtime evaluation uses PMULL.

Definition at line 39 of file native.arm.pmull.ccm.

Here is the caller graph for this function: