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

Functions

template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 90 || Rotation == 270))
constexpr simd< float, 2, Arch > native::fcadd (simd< float, 2, Arch > a, simd< float, 2, Arch > b) noexcept
 FCADD on 1 binary32 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 0 || Rotation == 90 || Rotation == 180 || Rotation == 270))
constexpr simd< float, 2, Arch > native::fcmla (simd< float, 2, Arch > acc, simd< float, 2, Arch > a, simd< float, 2, Arch > b) noexcept
 FCMLA on 1 binary32 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation, unsigned Lane>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 0 || Rotation == 90 || Rotation == 180 || Rotation == 270) && Lane < 1)
constexpr simd< float, 2, Arch > native::fcmla_lane (simd< float, 2, Arch > acc, simd< float, 2, Arch > a, simd< float, 2, Arch > b) noexcept
 FCMLA using complex pair Lane of b (the lane indexes pairs, not scalars).
template<isa< arm > Arch, unsigned Rotation, unsigned Lane>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 0 || Rotation == 90 || Rotation == 180 || Rotation == 270) && Lane < 2)
constexpr simd< float, 2, Arch > native::fcmla_lane (simd< float, 2, Arch > acc, simd< float, 2, Arch > a, simd< float, 4, Arch > b) noexcept
 FCMLA using complex pair Lane of b (the lane indexes pairs, not scalars).
template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 90 || Rotation == 270))
constexpr simd< float, 4, Arch > native::fcadd (simd< float, 4, Arch > a, simd< float, 4, Arch > b) noexcept
 FCADD on 2 binary32 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 0 || Rotation == 90 || Rotation == 180 || Rotation == 270))
constexpr simd< float, 4, Arch > native::fcmla (simd< float, 4, Arch > acc, simd< float, 4, Arch > a, simd< float, 4, Arch > b) noexcept
 FCMLA on 2 binary32 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation, unsigned Lane>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 0 || Rotation == 90 || Rotation == 180 || Rotation == 270) && Lane < 1)
constexpr simd< float, 4, Arch > native::fcmla_lane (simd< float, 4, Arch > acc, simd< float, 4, Arch > a, simd< float, 2, Arch > b) noexcept
 FCMLA using complex pair Lane of b (the lane indexes pairs, not scalars).
template<isa< arm > Arch, unsigned Rotation, unsigned Lane>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 0 || Rotation == 90 || Rotation == 180 || Rotation == 270) && Lane < 2)
constexpr simd< float, 4, Arch > native::fcmla_lane (simd< float, 4, Arch > acc, simd< float, 4, Arch > a, simd< float, 4, Arch > b) noexcept
 FCMLA using complex pair Lane of b (the lane indexes pairs, not scalars).
template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 90 || Rotation == 270))
constexpr simd< double, 2, Arch > native::fcadd (simd< double, 2, Arch > a, simd< double, 2, Arch > b) noexcept
 FCADD on 1 binary64 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && (Rotation == 0 || Rotation == 90 || Rotation == 180 || Rotation == 270))
constexpr simd< double, 2, Arch > native::fcmla (simd< double, 2, Arch > acc, simd< double, 2, Arch > a, simd< double, 2, Arch > b) noexcept
 FCMLA on 1 binary64 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && Arch.has(arm_feature::neon_fp16) && (Rotation == 90 || Rotation == 270))
constexpr simd< fp16, 4, Arch > native::fcadd (simd< fp16, 4, Arch > a, simd< fp16, 4, Arch > b) noexcept
 FCADD on 2 binary16 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && Arch.has(arm_feature::neon_fp16) && (Rotation == 0 || Rotation == 90 || Rotation == 180 ||
Rotation == 270))
constexpr simd< fp16, 4, Arch > native::fcmla (simd< fp16, 4, Arch > acc, simd< fp16, 4, Arch > a, simd< fp16, 4, Arch > b) noexcept
 FCMLA on 2 binary16 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation, unsigned Lane>
requires (Arch.has(arm_feature::complxnum) && Arch.has(arm_feature::neon_fp16) && (Rotation == 0 || Rotation == 90 || Rotation == 180 ||
Rotation == 270) && Lane < 2)
constexpr simd< fp16, 4, Arch > native::fcmla_lane (simd< fp16, 4, Arch > acc, simd< fp16, 4, Arch > a, simd< fp16, 4, Arch > b) noexcept
 FCMLA using complex pair Lane of b (the lane indexes pairs, not scalars).
template<isa< arm > Arch, unsigned Rotation, unsigned Lane>
requires (Arch.has(arm_feature::complxnum) && Arch.has(arm_feature::neon_fp16) && (Rotation == 0 || Rotation == 90 || Rotation == 180 ||
Rotation == 270) && Lane < 4)
constexpr simd< fp16, 4, Arch > native::fcmla_lane (simd< fp16, 4, Arch > acc, simd< fp16, 4, Arch > a, simd< fp16, 8, Arch > b) noexcept
 FCMLA using complex pair Lane of b (the lane indexes pairs, not scalars).
template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && Arch.has(arm_feature::neon_fp16) && (Rotation == 90 || Rotation == 270))
constexpr simd< fp16, 8, Arch > native::fcadd (simd< fp16, 8, Arch > a, simd< fp16, 8, Arch > b) noexcept
 FCADD on 4 binary16 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation>
requires (Arch.has(arm_feature::complxnum) && Arch.has(arm_feature::neon_fp16) && (Rotation == 0 || Rotation == 90 || Rotation == 180 ||
Rotation == 270))
constexpr simd< fp16, 8, Arch > native::fcmla (simd< fp16, 8, Arch > acc, simd< fp16, 8, Arch > a, simd< fp16, 8, Arch > b) noexcept
 FCMLA on 4 binary16 complex pair(s), rotation in degrees.
template<isa< arm > Arch, unsigned Rotation, unsigned Lane>
requires (Arch.has(arm_feature::complxnum) && Arch.has(arm_feature::neon_fp16) && (Rotation == 0 || Rotation == 90 || Rotation == 180 ||
Rotation == 270) && Lane < 2)
constexpr simd< fp16, 8, Arch > native::fcmla_lane (simd< fp16, 8, Arch > acc, simd< fp16, 8, Arch > a, simd< fp16, 4, Arch > b) noexcept
 FCMLA using complex pair Lane of b (the lane indexes pairs, not scalars).
template<isa< arm > Arch, unsigned Rotation, unsigned Lane>
requires (Arch.has(arm_feature::complxnum) && Arch.has(arm_feature::neon_fp16) && (Rotation == 0 || Rotation == 90 || Rotation == 180 ||
Rotation == 270) && Lane < 4)
constexpr simd< fp16, 8, Arch > native::fcmla_lane (simd< fp16, 8, Arch > acc, simd< fp16, 8, Arch > a, simd< fp16, 8, Arch > b) noexcept
 FCMLA using complex pair Lane of b (the lane indexes pairs, not scalars).

Detailed Description

Interleaved real/imaginary pairs; requires arm_feature::complxnum (FEAT_FCMA). Half arithmetic additionally requires arm_feature::neon_fp16. FCMLA is one partial complex product per call, not a full complex multiply. FPCR/FPSR are observed/affected as specified by the instruction, never reset. Volatile assembly preserves status effects even when the result is unused; the compiler barrier keeps surrounding floating-environment accesses ordered. Constant evaluation uses RNE, gradual inputs/results, DN=AH=AHP=FZ=FZ16=FIZ=EBF=0, with masked exceptions and no status effects; fixed instruction rules still apply. Missing-feature overloads are consteval-only and require complete storage types.