Eigen::internal Namespace Reference

Namespace containing low-level routines from the Eigen library. More...

Namespaces

 detail
 
 group_theory
 
 imklfft
 
 lapacke_helpers
 Implementation details and helper functions for the lapacke glue code.
 
 std_fallback
 
 test_detail
 
 tuple_impl
 
 unary_pow
 

Classes

struct  band_solve_triangular_selector
 
struct  band_solve_triangular_selector< Index, Mode, LhsScalar, ConjLhs, RhsScalar, RowMajor >
 
struct  band_solve_triangular_selector< Index, Mode, LhsScalar, ConjLhs, RhsScalar, ColMajor >
 
struct  general_rank1_update
 
struct  general_rank1_update< Scalar, Index, ColMajor, ConjLhs, ConjRhs >
 
struct  general_rank1_update< Scalar, Index, RowMajor, ConjLhs, ConjRhs >
 
struct  functor_traits< scalar_norm1_op >
 
struct  selfadjoint_packed_rank1_update
 
struct  selfadjoint_packed_rank1_update< Scalar, Index, ColMajor, UpLo, ConjLhs, ConjRhs >
 
struct  selfadjoint_packed_rank1_update< Scalar, Index, RowMajor, UpLo, ConjLhs, ConjRhs >
 
struct  packed_triangular_matrix_vector_product
 
struct  packed_triangular_matrix_vector_product< Index, Mode, LhsScalar, ConjLhs, RhsScalar, ConjRhs, ColMajor >
 
struct  packed_triangular_matrix_vector_product< Index, Mode, LhsScalar, ConjLhs, RhsScalar, ConjRhs, RowMajor >
 
struct  packed_triangular_solve_vector
 
struct  packed_triangular_solve_vector< LhsScalar, RhsScalar, Index, OnTheLeft, Mode, Conjugate, RowMajor >
 
struct  packed_triangular_solve_vector< LhsScalar, RhsScalar, Index, OnTheLeft, Mode, Conjugate, ColMajor >
 
struct  packed_triangular_solve_vector< LhsScalar, RhsScalar, Index, OnTheRight, Mode, Conjugate, StorageOrder >
 
struct  rank2_update_selector
 
struct  packed_rank2_update_selector
 
struct  traits< MatrixReplacement >
 
struct  generic_product_impl< MatrixReplacement, Rhs, SparseShape, DenseShape, GemvProduct >
 
struct  AccelFactorizationDeleter
 
struct  SparseTypesTraitBase
 
struct  SparseTypesTrait
 
struct  SparseTypesTrait< double >
 
struct  SparseTypesTrait< float >
 
struct  traits< LDLT< MatrixType_, UpLo_ > >
 
struct  LDLT_Traits
 
struct  ldlt_inplace
 
struct  ldlt_inplace< Lower >
 
struct  ldlt_inplace< Upper >
 
struct  LDLT_Traits< MatrixType, Lower >
 
struct  LDLT_Traits< MatrixType, Upper >
 
struct  traits< LLT< MatrixType_, UpLo_ > >
 
struct  LLT_Traits
 
struct  llt_inplace
 
struct  llt_inplace< Scalar, Lower >
 
struct  llt_inplace< Scalar, Upper >
 
struct  LLT_Traits< MatrixType, Lower >
 
struct  LLT_Traits< MatrixType, Upper >
 
struct  cholmod_configure_matrix
 
struct  cholmod_configure_matrix< double >
 
struct  cholmod_configure_matrix< std::complex< double > >
 
struct  Packet2cf
 
struct  packet_traits< std::complex< float > >
 
struct  unpacket_traits< Packet2cf >
 
struct  quad_traits
 
struct  quad_traits< double >
 
struct  quad_traits< bfloat16 >
 
struct  symm_pack_rhs< std::complex< float >, Index, nr, StorageOrder >
 
struct  symm_pack_lhs< std::complex< float >, Index, Pack1, Pack2_dummy, StorageOrder >
 
struct  symm_pack_rhs< std::complex< double >, Index, nr, StorageOrder >
 
struct  symm_pack_lhs< std::complex< double >, Index, Pack1, Pack2_dummy, StorageOrder >
 
struct  symm_pack_rhs< float, Index, nr, StorageOrder >
 
struct  symm_pack_lhs< float, Index, Pack1, Pack2_dummy, StorageOrder >
 
struct  symm_pack_rhs< double, Index, nr, StorageOrder >
 
struct  symm_pack_lhs< double, Index, Pack1, Pack2_dummy, StorageOrder >
 
struct  dhs_cpack
 
struct  dhs_pack
 
struct  dhs_pack< double, DataMapper, Packet2d, StorageOrder, PanelMode, true >
 
struct  dhs_pack< double, DataMapper, Packet2d, StorageOrder, PanelMode, false >
 
struct  dhs_pack< bfloat16, DataMapper, Packet8bf, StorageOrder, PanelMode, true >
 
struct  dhs_pack< bfloat16, DataMapper, Packet8bf, StorageOrder, PanelMode, false >
 
struct  dhs_cpack< double, DataMapper, Packet, PacketC, StorageOrder, Conjugate, PanelMode, true >
 
struct  dhs_cpack< double, DataMapper, Packet, PacketC, StorageOrder, Conjugate, PanelMode, false >
 
struct  gemm_pack_lhs< double, Index, DataMapper, Pack1, Pack2, Packet, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< double, Index, DataMapper, Pack1, Pack2, Packet, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< double, Index, DataMapper, nr, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< double, Index, DataMapper, nr, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< bfloat16, Index, DataMapper, nr, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< bfloat16, Index, DataMapper, nr, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< bfloat16, Index, DataMapper, Pack1, Pack2, Packet, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< bfloat16, Index, DataMapper, Pack1, Pack2, Packet, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< float, Index, DataMapper, Pack1, Pack2, Packet, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< float, Index, DataMapper, Pack1, Pack2, Packet, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< std::complex< float >, Index, DataMapper, Pack1, Pack2, Packet, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< std::complex< float >, Index, DataMapper, Pack1, Pack2, Packet, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< float, Index, DataMapper, nr, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< float, Index, DataMapper, nr, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< std::complex< float >, Index, DataMapper, nr, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< std::complex< float >, Index, DataMapper, nr, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< std::complex< double >, Index, DataMapper, Pack1, Pack2, Packet, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< std::complex< double >, Index, DataMapper, Pack1, Pack2, Packet, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< std::complex< double >, Index, DataMapper, nr, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< std::complex< double >, Index, DataMapper, nr, RowMajor, Conjugate, PanelMode >
 
struct  gebp_kernel< float, float, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >
 
struct  gebp_kernel< std::complex< float >, std::complex< float >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >
 
struct  gebp_kernel< float, std::complex< float >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >
 
struct  gebp_kernel< std::complex< float >, float, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >
 
struct  gebp_kernel< double, double, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >
 
struct  gebp_kernel< std::complex< double >, std::complex< double >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >
 
struct  gebp_kernel< std::complex< double >, double, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >
 
struct  gebp_kernel< double, std::complex< double >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >
 
struct  gebp_kernel< bfloat16, bfloat16, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >
 
struct  UseMMAStride
 
struct  UseMMAStride< RhsMapper, LhsMapper, std::enable_if_t< std::is_member_function_pointer< decltype(&RhsMapper::stride)>::value > >
 
struct  packet_traits< float >
 
struct  packet_traits< bfloat16 >
 
struct  packet_traits< int >
 
struct  packet_traits< short int >
 
struct  packet_traits< unsigned short int >
 
struct  packet_traits< signed char >
 
struct  packet_traits< unsigned char >
 
struct  unpacket_traits< Packet4f >
 
struct  unpacket_traits< Packet4i >
 
struct  unpacket_traits< Packet8s >
 
struct  unpacket_traits< Packet8us >
 
struct  unpacket_traits< Packet16c >
 
struct  unpacket_traits< Packet16uc >
 
struct  unpacket_traits< Packet8bf >
 
struct  type_casting_traits< float, int >
 
struct  type_casting_traits< int, float >
 
struct  type_casting_traits< bfloat16, unsigned short int >
 
struct  type_casting_traits< unsigned short int, bfloat16 >
 
struct  type_casting_traits< bfloat16, float >
 
struct  type_casting_traits< float, bfloat16 >
 
struct  Packet4cf
 
struct  unpacket_traits< Packet4cf >
 
struct  Packet2cd
 
struct  packet_traits< std::complex< double > >
 
struct  unpacket_traits< Packet2cd >
 
struct  is_arithmetic< __m256 >
 
struct  is_arithmetic< __m256i >
 
struct  is_arithmetic< __m256d >
 
struct  is_arithmetic< Packet8i >
 
struct  is_arithmetic< Packet8ui >
 
struct  is_arithmetic< Packet8h >
 
struct  is_arithmetic< Packet8bf >
 
struct  packet_traits< double >
 
struct  packet_traits< Eigen::half >
 
struct  packet_traits< uint32_t >
 
struct  scalar_div_cost< float, true >
 
struct  scalar_div_cost< double, true >
 
struct  unpacket_traits< Packet8f >
 
struct  unpacket_traits< Packet4d >
 
struct  unpacket_traits< Packet8i >
 
struct  unpacket_traits< Packet8ui >
 
struct  unpacket_traits< Packet8h >
 
struct  type_casting_traits< float, bool >
 
struct  type_casting_traits< bool, float >
 
struct  type_casting_traits< float, double >
 
struct  type_casting_traits< double, float >
 
struct  type_casting_traits< double, int >
 
struct  type_casting_traits< int, double >
 
struct  type_casting_traits< half, float >
 
struct  type_casting_traits< float, half >
 
struct  Packet8cf
 
struct  unpacket_traits< Packet8cf >
 
struct  Packet4cd
 
struct  unpacket_traits< Packet4cd >
 
class  gemm_class
 
class  gebp_traits< float, float, ConjLhs_, ConjRhs_, Architecture::Target, PacketSize_ >
 
class  gebp_traits< double, double, ConjLhs_, ConjRhs_, Architecture::Target, PacketSize_ >
 
struct  gemm_pack_rhs< Scalar, Index, DataMapper, 8, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< Scalar, Index, DataMapper, 8, RowMajor, Conjugate, PanelMode >
 
struct  gebp_kernel< Scalar, Scalar, Index, DataMapper, mr, 8, ConjugateLhs, ConjugateRhs >
 
struct  is_arithmetic< __m512 >
 
struct  is_arithmetic< __m512i >
 
struct  is_arithmetic< __m512d >
 
struct  is_arithmetic< Packet8l >
 
struct  is_arithmetic< Packet16h >
 
struct  packet_traits< half >
 
struct  packet_traits< int64_t >
 
struct  unpacket_traits< Packet16f >
 
struct  unpacket_traits< Packet8d >
 
struct  unpacket_traits< Packet16i >
 
struct  unpacket_traits< Packet8l >
 
struct  unpacket_traits< Packet16h >
 
struct  is_arithmetic< Packet16bf >
 
struct  unpacket_traits< Packet16bf >
 
struct  unpacket_traits< Packet32h >
 
struct  trsmKernelR
 
struct  trsmKernelR< float, Index, Mode, false, TriStorageOrder, 1, true >
 
struct  trsmKernelR< double, Index, Mode, false, TriStorageOrder, 1, true >
 
struct  trsmKernelL
 
struct  trsmKernelL< float, Index, Mode, false, TriStorageOrder, 1, true >
 
struct  trsmKernelL< double, Index, Mode, false, TriStorageOrder, 1, true >
 
struct  type_casting_traits< double, int64_t >
 
struct  type_casting_traits< int64_t, double >
 
struct  is_arithmetic< bfloat16 >
 
struct  random_impl< bfloat16 >
 
struct  conj_if
 
struct  conj_if< true >
 
struct  conj_if< false >
 
struct  conj_helper
 
struct  conj_helper< LhsScalar, RhsScalar, true, true >
 
struct  conj_helper< Packet, Packet, ConjLhs, ConjRhs >
 
struct  conj_helper< Packet, Packet, true, true >
 
struct  make_integer
 
struct  make_integer< float >
 
struct  make_integer< double >
 
struct  make_integer< half >
 
struct  make_integer< bfloat16 >
 
struct  ppolevl
 
struct  ppolevl< Packet, 0 >
 
struct  pchebevl
 
struct  patan_reduced
 
struct  psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >
 
struct  psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&NumTraits< typename unpacket_traits< Packet >::type >::IsSigned &&NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >
 
struct  psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsSigned &&NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >
 
struct  psign_impl< Packet, std::enable_if_t< NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&unpacket_traits< Packet >::vectorizable > >
 
struct  accurate_log2
 
struct  accurate_log2< float >
 
struct  accurate_log2< double >
 
struct  unary_pow_impl
 
struct  unary_pow_impl< Packet, ScalarExponent, false, false, ExponentIsSigned >
 
struct  unary_pow_impl< Packet, ScalarExponent, false, true, ExponentIsSigned >
 
struct  unary_pow_impl< Packet, ScalarExponent, true, true, true >
 
struct  unary_pow_impl< Packet, ScalarExponent, true, true, false >
 
struct  nearest_integer_packetop_impl< Packet, false, false >
 
struct  nearest_integer_packetop_impl< Packet, false, true >
 
struct  is_arithmetic< half >
 
struct  random_impl< half >
 
struct  cast_impl< float, half >
 
struct  cast_impl< int, half >
 
struct  cast_impl< half, float >
 
struct  Packet1cd
 
struct  unpacket_traits< Packet1cd >
 
struct  gebp_traits< float, float, false, false, Architecture::LSX, GEBPPacketFull >
 
struct  gebp_traits< double, double, false, false, Architecture::LSX, GEBPPacketFull >
 
struct  is_arithmetic< __m128 >
 
struct  is_arithmetic< __m128i >
 
struct  is_arithmetic< __m128d >
 
struct  is_arithmetic< Packet16c >
 
struct  is_arithmetic< Packet8s >
 
struct  is_arithmetic< Packet4i >
 
struct  is_arithmetic< Packet2l >
 
struct  is_arithmetic< Packet16uc >
 
struct  is_arithmetic< Packet8us >
 
struct  is_arithmetic< Packet4ui >
 
struct  is_arithmetic< Packet2ul >
 
struct  packet_traits< int8_t >
 
struct  packet_traits< int16_t >
 
struct  packet_traits< int32_t >
 
struct  packet_traits< uint8_t >
 
struct  packet_traits< uint16_t >
 
struct  packet_traits< uint64_t >
 
struct  unpacket_traits< Packet2l >
 
struct  unpacket_traits< Packet4ui >
 
struct  unpacket_traits< Packet2ul >
 
struct  unpacket_traits< Packet2d >
 
struct  Packet1cf
 
struct  unpacket_traits< Packet1cf >
 
struct  unpacket_traits< Packet2f >
 
struct  unpacket_traits< Packet4c >
 
struct  unpacket_traits< Packet8c >
 
struct  unpacket_traits< Packet4uc >
 
struct  unpacket_traits< Packet8uc >
 
struct  unpacket_traits< Packet4s >
 
struct  unpacket_traits< Packet4us >
 
struct  unpacket_traits< Packet2i >
 
struct  unpacket_traits< Packet2ui >
 
struct  is_arithmetic< Packet4bf >
 
struct  unpacket_traits< Packet4bf >
 
struct  type_casting_traits< float, numext::int64_t >
 
struct  type_casting_traits< float, numext::uint64_t >
 
struct  type_casting_traits< float, numext::int32_t >
 
struct  type_casting_traits< float, numext::uint32_t >
 
struct  type_casting_traits< float, numext::int16_t >
 
struct  type_casting_traits< float, numext::uint16_t >
 
struct  type_casting_traits< float, numext::int8_t >
 
struct  type_casting_traits< float, numext::uint8_t >
 
struct  type_casting_traits< numext::int8_t, float >
 
struct  type_casting_traits< numext::int8_t, numext::int64_t >
 
struct  type_casting_traits< numext::int8_t, numext::uint64_t >
 
struct  type_casting_traits< numext::int8_t, numext::int32_t >
 
struct  type_casting_traits< numext::int8_t, numext::uint32_t >
 
struct  type_casting_traits< numext::int8_t, numext::int16_t >
 
struct  type_casting_traits< numext::int8_t, numext::uint16_t >
 
struct  type_casting_traits< numext::uint8_t, float >
 
struct  type_casting_traits< numext::uint8_t, numext::uint64_t >
 
struct  type_casting_traits< numext::uint8_t, numext::int64_t >
 
struct  type_casting_traits< numext::uint8_t, numext::uint32_t >
 
struct  type_casting_traits< numext::uint8_t, numext::int32_t >
 
struct  type_casting_traits< numext::uint8_t, numext::uint16_t >
 
struct  type_casting_traits< numext::uint8_t, numext::int16_t >
 
struct  type_casting_traits< numext::int16_t, float >
 
struct  type_casting_traits< numext::int16_t, numext::int64_t >
 
struct  type_casting_traits< numext::int16_t, numext::uint64_t >
 
struct  type_casting_traits< numext::int16_t, numext::int32_t >
 
struct  type_casting_traits< numext::int16_t, numext::uint32_t >
 
struct  type_casting_traits< numext::int16_t, numext::int8_t >
 
struct  type_casting_traits< numext::int16_t, numext::uint8_t >
 
struct  type_casting_traits< numext::uint16_t, float >
 
struct  type_casting_traits< numext::uint16_t, numext::uint64_t >
 
struct  type_casting_traits< numext::uint16_t, numext::int64_t >
 
struct  type_casting_traits< numext::uint16_t, numext::uint32_t >
 
struct  type_casting_traits< numext::uint16_t, numext::int32_t >
 
struct  type_casting_traits< numext::uint16_t, numext::uint8_t >
 
struct  type_casting_traits< numext::uint16_t, numext::int8_t >
 
struct  type_casting_traits< numext::int32_t, float >
 
struct  type_casting_traits< numext::int32_t, numext::int64_t >
 
struct  type_casting_traits< numext::int32_t, numext::uint64_t >
 
struct  type_casting_traits< numext::int32_t, numext::int16_t >
 
struct  type_casting_traits< numext::int32_t, numext::uint16_t >
 
struct  type_casting_traits< numext::int32_t, numext::int8_t >
 
struct  type_casting_traits< numext::int32_t, numext::uint8_t >
 
struct  type_casting_traits< numext::uint32_t, float >
 
struct  type_casting_traits< numext::uint32_t, numext::uint64_t >
 
struct  type_casting_traits< numext::uint32_t, numext::int64_t >
 
struct  type_casting_traits< numext::uint32_t, numext::uint16_t >
 
struct  type_casting_traits< numext::uint32_t, numext::int16_t >
 
struct  type_casting_traits< numext::uint32_t, numext::uint8_t >
 
struct  type_casting_traits< numext::uint32_t, numext::int8_t >
 
struct  type_casting_traits< numext::int64_t, float >
 
struct  type_casting_traits< numext::int64_t, numext::int32_t >
 
struct  type_casting_traits< numext::int64_t, numext::uint32_t >
 
struct  type_casting_traits< numext::int64_t, numext::int16_t >
 
struct  type_casting_traits< numext::int64_t, numext::uint16_t >
 
struct  type_casting_traits< numext::int64_t, numext::int8_t >
 
struct  type_casting_traits< numext::int64_t, numext::uint8_t >
 
struct  type_casting_traits< numext::uint64_t, float >
 
struct  type_casting_traits< numext::uint64_t, numext::uint32_t >
 
struct  type_casting_traits< numext::uint64_t, numext::int32_t >
 
struct  type_casting_traits< numext::uint64_t, numext::uint16_t >
 
struct  type_casting_traits< numext::uint64_t, numext::int16_t >
 
struct  type_casting_traits< numext::uint64_t, numext::uint8_t >
 
struct  type_casting_traits< numext::uint64_t, numext::int8_t >
 
struct  is_arithmetic< Packet16b >
 
struct  shuffle_mask
 
struct  packet_traits< bool >
 
struct  unpacket_traits< Packet16b >
 
struct  sve_packet_size_selector
 
struct  packet_traits< numext::int32_t >
 
struct  unpacket_traits< PacketXi >
 
struct  unpacket_traits< PacketXf >
 
struct  sycl_packet_traits
 
union  Packet
 
struct  cleanup_seq_incr
 
struct  traits< Array< Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_ > >
 
struct  traits< ArrayWrapper< ExpressionType > >
 
struct  traits< MatrixWrapper< ExpressionType > >
 
class  vml_assign_traits
 
struct  copy_using_evaluator_traits
 
struct  copy_using_evaluator_DefaultTraversal_CompleteUnrolling
 
struct  copy_using_evaluator_DefaultTraversal_CompleteUnrolling< Kernel, Stop, Stop >
 
struct  copy_using_evaluator_DefaultTraversal_InnerUnrolling
 
struct  copy_using_evaluator_DefaultTraversal_InnerUnrolling< Kernel, Stop, Stop >
 
struct  copy_using_evaluator_LinearTraversal_CompleteUnrolling
 
struct  copy_using_evaluator_LinearTraversal_CompleteUnrolling< Kernel, Stop, Stop >
 
struct  copy_using_evaluator_innervec_CompleteUnrolling
 
struct  copy_using_evaluator_innervec_CompleteUnrolling< Kernel, Stop, Stop >
 
struct  copy_using_evaluator_innervec_InnerUnrolling
 
struct  copy_using_evaluator_innervec_InnerUnrolling< Kernel, Stop, Stop, SrcAlignment, DstAlignment >
 
struct  dense_assignment_loop
 
struct  dense_assignment_loop< Kernel, AllAtOnceTraversal, Unrolling >
 
struct  dense_assignment_loop< Kernel, DefaultTraversal, NoUnrolling >
 
struct  dense_assignment_loop< Kernel, DefaultTraversal, CompleteUnrolling >
 
struct  dense_assignment_loop< Kernel, DefaultTraversal, InnerUnrolling >
 
struct  unaligned_dense_assignment_loop
 
struct  unaligned_dense_assignment_loop< false >
 
struct  copy_using_evaluator_linearvec_CompleteUnrolling
 
struct  copy_using_evaluator_linearvec_CompleteUnrolling< Kernel, Stop, Stop >
 
struct  dense_assignment_loop< Kernel, LinearVectorizedTraversal, NoUnrolling >
 
struct  dense_assignment_loop< Kernel, LinearVectorizedTraversal, CompleteUnrolling >
 
struct  dense_assignment_loop< Kernel, InnerVectorizedTraversal, NoUnrolling >
 
struct  dense_assignment_loop< Kernel, InnerVectorizedTraversal, CompleteUnrolling >
 
struct  dense_assignment_loop< Kernel, InnerVectorizedTraversal, InnerUnrolling >
 
struct  dense_assignment_loop< Kernel, LinearTraversal, NoUnrolling >
 
struct  dense_assignment_loop< Kernel, LinearTraversal, CompleteUnrolling >
 
struct  dense_assignment_loop< Kernel, SliceVectorizedTraversal, NoUnrolling >
 
class  generic_dense_assignment_kernel
 
class  restricted_packet_dense_assignment_kernel
 
struct  AssignmentKind
 
struct  Dense2Dense
 
struct  EigenBase2EigenBase
 
struct  AssignmentKind< DenseShape, DenseShape >
 
struct  Assignment
 
struct  Assignment< DstXprType, SrcXprType, Functor, Dense2Dense, Weak >
 
struct  Assignment< DstXprType, CwiseNullaryOp< scalar_constant_op< typename DstXprType::Scalar >, SrcPlainObject >, assign_op< typename DstXprType::Scalar, typename DstXprType::Scalar >, Dense2Dense, Weak >
 
struct  Assignment< DstXprType, CwiseNullaryOp< scalar_zero_op< typename DstXprType::Scalar >, SrcPlainObject >, assign_op< typename DstXprType::Scalar, typename DstXprType::Scalar >, Dense2Dense, Weak >
 
struct  Assignment< DstXprType, SrcXprType, Functor, EigenBase2EigenBase, Weak >
 
class  BandMatrixBase
 
struct  traits< BandMatrix< Scalar_, Rows_, Cols_, Supers_, Subs_, Options_ > >
 
class  BandMatrix
 Represents a rectangular matrix with a banded storage. More...
 
class  BandMatrixWrapper
 
struct  traits< BandMatrixWrapper< CoefficientsType_, Rows_, Cols_, Supers_, Subs_, Options_ > >
 
class  TridiagonalMatrix
 Represents a tridiagonal matrix with a compact banded storage. More...
 
struct  BandShape
 
struct  evaluator_traits< BandMatrix< Scalar_, Rows_, Cols_, Supers_, Subs_, Options_ > >
 
struct  evaluator_traits< BandMatrixWrapper< CoefficientsType_, Rows_, Cols_, Supers_, Subs_, Options_ > >
 
struct  AssignmentKind< DenseShape, BandShape >
 
struct  traits< Block< XprType_, BlockRows, BlockCols, InnerPanel_ > >
 
class  BlockImpl_dense
 
class  BlockImpl_dense< XprType, BlockRows, BlockCols, InnerPanel, true >
 
struct  rcond_compute_sign
 
struct  rcond_compute_sign< Vector, Vector, false >
 
struct  storage_kind_to_evaluator_kind
 
struct  storage_kind_to_shape
 
struct  storage_kind_to_shape< Dense >
 
struct  storage_kind_to_shape< SolverStorage >
 
struct  storage_kind_to_shape< PermutationStorage >
 
struct  storage_kind_to_shape< TranspositionsStorage >
 
struct  ternary_evaluator
 
struct  binary_evaluator
 
struct  unary_evaluator
 
struct  evaluator_traits_base
 
struct  evaluator_traits
 
struct  evaluator_assume_aliasing
 
struct  evaluator
 
struct  evaluator< const T >
 
struct  evaluator_base
 
class  plainobjectbase_evaluator_data
 
class  plainobjectbase_evaluator_data< Scalar, Dynamic >
 
struct  evaluator< PlainObjectBase< Derived > >
 
struct  evaluator< Matrix< Scalar, Rows, Cols, Options, MaxRows, MaxCols > >
 
struct  evaluator< Array< Scalar, Rows, Cols, Options, MaxRows, MaxCols > >
 
struct  unary_evaluator< Transpose< ArgType >, IndexBased >
 
struct  nullary_wrapper
 
struct  nullary_wrapper< Scalar, NullaryOp, true, false, false >
 
struct  nullary_wrapper< Scalar, NullaryOp, false, false, true >
 
struct  nullary_wrapper< Scalar, NullaryOp, false, true, false >
 
struct  nullary_wrapper< Scalar, NullaryOp, false, false, false >
 
struct  evaluator< CwiseNullaryOp< NullaryOp, PlainObjectType > >
 
struct  unary_evaluator< CwiseUnaryOp< UnaryOp, ArgType >, IndexBased >
 
struct  unary_evaluator< CwiseUnaryOp< core_cast_op< SrcType, DstType >, ArgType >, IndexBased >
 
struct  evaluator< CwiseTernaryOp< TernaryOp, Arg1, Arg2, Arg3 > >
 
struct  ternary_evaluator< CwiseTernaryOp< TernaryOp, Arg1, Arg2, Arg3 >, IndexBased, IndexBased >
 
struct  evaluator< CwiseTernaryOp< scalar_boolean_select_op< Scalar, Scalar, bool >, Arg1, Arg2, CwiseBinaryOp< scalar_cmp_op< Scalar, Scalar, cmp, false >, CmpLhsType, CmpRhsType > > >
 
struct  evaluator< CwiseBinaryOp< BinaryOp, Lhs, Rhs > >
 
struct  binary_evaluator< CwiseBinaryOp< BinaryOp, Lhs, Rhs >, IndexBased, IndexBased >
 
struct  unary_evaluator< CwiseUnaryView< UnaryOp, ArgType, StrideType >, IndexBased >
 
struct  mapbase_evaluator
 
struct  evaluator< Map< PlainObjectType, MapOptions, StrideType > >
 
struct  evaluator< Ref< PlainObjectType, RefOptions, StrideType > >
 
struct  block_evaluator
 
struct  evaluator< Block< ArgType, BlockRows, BlockCols, InnerPanel > >
 
struct  block_evaluator< ArgType, BlockRows, BlockCols, InnerPanel, false >
 
struct  unary_evaluator< Block< ArgType, BlockRows, BlockCols, InnerPanel >, IndexBased >
 
struct  block_evaluator< ArgType, BlockRows, BlockCols, InnerPanel, true >
 
struct  evaluator< Select< ConditionMatrixType, ThenMatrixType, ElseMatrixType > >
 
struct  unary_evaluator< Replicate< ArgType, RowFactor, ColFactor > >
 
struct  evaluator_wrapper_base
 
struct  unary_evaluator< MatrixWrapper< TArgType > >
 
struct  unary_evaluator< ArrayWrapper< TArgType > >
 
struct  reverse_packet_cond
 
struct  unary_evaluator< Reverse< ArgType, Direction > >
 
struct  evaluator< Diagonal< ArgType, DiagIndex > >
 
class  EvalToTemp
 
struct  traits< EvalToTemp< ArgType > >
 
struct  evaluator< EvalToTemp< ArgType > >
 
class  inner_iterator_selector
 
class  inner_iterator_selector< XprType, IndexBased >
 
class  inner_iterator_selector< XprType, IteratorBased >
 
struct  traits< CwiseBinaryOp< BinaryOp, Lhs, Rhs > >
 
struct  traits< CwiseNullaryOp< NullaryOp, PlainObjectType > >
 
struct  setIdentity_impl
 
struct  setIdentity_impl< Derived, true >
 
struct  traits< CwiseTernaryOp< TernaryOp, Arg1, Arg2, Arg3 > >
 
struct  traits< CwiseUnaryOp< UnaryOp, XprType > >
 
struct  traits< CwiseUnaryView< ViewOp, MatrixType, StrideType > >
 
class  CwiseUnaryViewImpl
 
class  CwiseUnaryViewImpl< ViewOp, MatrixType, StrideType, Dense, false >
 
class  CwiseUnaryViewImpl< ViewOp, MatrixType, StrideType, Dense, true >
 
struct  add_const_on_value_type_if_arithmetic
 
struct  first_aligned_impl
 
struct  first_aligned_impl< Alignment, Derived, false >
 
struct  inner_stride_at_compile_time
 
struct  inner_stride_at_compile_time< Derived, false >
 
struct  outer_stride_at_compile_time
 
struct  outer_stride_at_compile_time< Derived, false >
 
struct  plain_array
 
struct  plain_array< T, Size, MatrixOrArrayOptions, 0 >
 
struct  plain_array< T, 0, MatrixOrArrayOptions, Alignment >
 
class  DenseStorage_impl
 
class  DenseStorage_impl< T, Size, Dynamic, Cols, Options >
 
class  DenseStorage_impl< T, Size, Rows, Dynamic, Options >
 
class  DenseStorage_impl< T, Size, Dynamic, Dynamic, Options >
 
class  DenseStorage_impl< T, 0, Rows, Cols, Options >
 
class  DenseStorage_impl< T, 0, Dynamic, Cols, Options >
 
class  DenseStorage_impl< T, 0, Rows, Dynamic, Options >
 
class  DenseStorage_impl< T, 0, Dynamic, Dynamic, Options >
 
class  DenseStorage_impl< T, Dynamic, Rows, Cols, Options >
 
class  DenseStorage_impl< T, Dynamic, Dynamic, Cols, Options >
 
class  DenseStorage_impl< T, Dynamic, Rows, Dynamic, Options >
 
class  DenseStorage_impl< T, Dynamic, Dynamic, Dynamic, Options >
 
struct  use_default_move
 
struct  AssignmentWithDevice
 
struct  AssignmentWithDevice< DstXprType, Product< Lhs, Rhs, Options >, Functor, Device, Dense2Dense, Weak >
 
struct  AssignmentWithDevice< DstXprType, SrcXprType, Functor, Device, Dense2Dense, Weak >
 
struct  dense_assignment_loop_with_device
 
struct  traits< Diagonal< MatrixType, DiagIndex > >
 
struct  traits< DiagonalMatrix< Scalar_, SizeAtCompileTime, MaxSizeAtCompileTime > >
 
struct  traits< DiagonalWrapper< DiagonalVectorType_ > >
 
struct  storage_kind_to_shape< DiagonalShape >
 
struct  Diagonal2Dense
 
struct  AssignmentKind< DenseShape, DiagonalShape >
 
struct  Assignment< DstXprType, SrcXprType, Functor, Diagonal2Dense >
 
struct  squared_norm_impl
 
struct  squared_norm_impl< Derived, bool >
 
struct  lpNorm_selector
 
struct  lpNorm_selector< Derived, 1 >
 
struct  lpNorm_selector< Derived, 2 >
 
struct  lpNorm_selector< Derived, Infinity >
 
struct  eigen_fill_helper
 
struct  eigen_fill_helper< Matrix< Scalar, Rows, Cols, Options, MaxRows, MaxCols > >
 
struct  eigen_fill_helper< Array< Scalar, Rows, Cols, Options, MaxRows, MaxCols > >
 
struct  eigen_fill_helper< Block< Xpr, BlockRows, BlockCols, true > >
 
struct  eigen_fill_helper< Block< Xpr, BlockRows, BlockCols, false > >
 
struct  eigen_fill_helper< Map< Xpr, Options, Stride< 0, 0 > > >
 
struct  eigen_fill_helper< Map< Xpr, Options, Stride< OuterStride_, 0 > > >
 
struct  eigen_fill_helper< Map< Xpr, Options, Stride< OuterStride_, 1 > > >
 
struct  eigen_fill_helper< Map< Xpr, Options, InnerStride< InnerStride_ > > >
 
struct  eigen_fill_helper< Map< Xpr, Options, OuterStride< OuterStride_ > > >
 
struct  eigen_fill_impl< Xpr, false >
 
struct  eigen_fill_impl< Xpr, true >
 
struct  eigen_memset_helper
 
struct  eigen_zero_impl< Xpr, false >
 
struct  eigen_zero_impl< Xpr, true >
 
struct  traits< ForceAlignedAccess< ExpressionType > >
 
struct  assign_op
 Template functor for scalar/packet assignment. More...
 
struct  assign_op< DstScalar, void >
 
struct  functor_traits< assign_op< DstScalar, SrcScalar > >
 
struct  add_assign_op
 Template functor for scalar/packet assignment with addition. More...
 
struct  functor_traits< add_assign_op< DstScalar, SrcScalar > >
 
struct  sub_assign_op
 Template functor for scalar/packet assignment with subtraction. More...
 
struct  functor_traits< sub_assign_op< DstScalar, SrcScalar > >
 
struct  mul_assign_op
 Template functor for scalar/packet assignment with multiplication. More...
 
struct  functor_traits< mul_assign_op< DstScalar, SrcScalar > >
 
struct  div_assign_op
 Template functor for scalar/packet assignment with diviving. More...
 
struct  functor_traits< div_assign_op< DstScalar, SrcScalar > >
 
struct  swap_assign_op
 Template functor for scalar/packet assignment with swapping. More...
 
struct  functor_traits< swap_assign_op< Scalar > >
 
struct  binary_op_base
 
struct  scalar_sum_op
 Template functor to compute the sum of two scalars. More...
 
struct  functor_traits< scalar_sum_op< LhsScalar, RhsScalar > >
 
struct  scalar_product_op
 Template functor to compute the product of two scalars. More...
 
struct  functor_traits< scalar_product_op< LhsScalar, RhsScalar > >
 
struct  scalar_conj_product_op
 Template functor to compute the conjugate product of two scalars. More...
 
struct  functor_traits< scalar_conj_product_op< LhsScalar, RhsScalar > >
 
struct  scalar_min_op
 Template functor to compute the min of two scalars. More...
 
struct  functor_traits< scalar_min_op< LhsScalar, RhsScalar, NaNPropagation > >
 
struct  scalar_max_op
 Template functor to compute the max of two scalars. More...
 
struct  functor_traits< scalar_max_op< LhsScalar, RhsScalar, NaNPropagation > >
 
struct  scalar_cmp_op
 Template functors for comparison of two scalars. More...
 
struct  functor_traits< scalar_cmp_op< LhsScalar, RhsScalar, cmp, UseTypedComparators > >
 
struct  typed_cmp_helper
 
struct  scalar_cmp_op< LhsScalar, RhsScalar, cmp_EQ, UseTypedComparators >
 
struct  scalar_cmp_op< LhsScalar, RhsScalar, cmp_LT, UseTypedComparators >
 
struct  scalar_cmp_op< LhsScalar, RhsScalar, cmp_LE, UseTypedComparators >
 
struct  scalar_cmp_op< LhsScalar, RhsScalar, cmp_GT, UseTypedComparators >
 
struct  scalar_cmp_op< LhsScalar, RhsScalar, cmp_GE, UseTypedComparators >
 
struct  scalar_cmp_op< LhsScalar, RhsScalar, cmp_UNORD, UseTypedComparators >
 
struct  scalar_cmp_op< LhsScalar, RhsScalar, cmp_NEQ, UseTypedComparators >
 
struct  scalar_hypot_op< Scalar, Scalar >
 Template functor to compute the hypot of two positive and real scalars. More...
 
struct  functor_traits< scalar_hypot_op< Scalar, Scalar > >
 
struct  scalar_pow_op
 Template functor to compute the pow of two scalars See the specification of pow in https://en.cppreference.com/w/cpp/numeric/math/pow. More...
 
struct  functor_traits< scalar_pow_op< Scalar, Exponent > >
 
struct  scalar_difference_op
 Template functor to compute the difference of two scalars. More...
 
struct  functor_traits< scalar_difference_op< LhsScalar, RhsScalar > >
 
struct  maybe_raise_div_by_zero
 
struct  maybe_raise_div_by_zero< Packet, true >
 
struct  scalar_quotient_op
 Template functor to compute the quotient of two scalars. More...
 
struct  functor_traits< scalar_quotient_op< LhsScalar, RhsScalar > >
 
struct  scalar_boolean_and_op
 Template functor to compute the and of two scalars as if they were booleans. More...
 
struct  functor_traits< scalar_boolean_and_op< Scalar > >
 
struct  scalar_boolean_or_op
 Template functor to compute the or of two scalars as if they were booleans. More...
 
struct  functor_traits< scalar_boolean_or_op< Scalar > >
 
struct  scalar_boolean_xor_op
 Template functor to compute the xor of two scalars as if they were booleans. More...
 
struct  functor_traits< scalar_boolean_xor_op< Scalar > >
 
struct  bitwise_binary_impl
 
struct  bitwise_binary_impl< Scalar, true >
 
struct  scalar_bitwise_and_op
 Template functor to compute the bitwise and of two scalars. More...
 
struct  functor_traits< scalar_bitwise_and_op< Scalar > >
 
struct  scalar_bitwise_or_op
 Template functor to compute the bitwise or of two scalars. More...
 
struct  functor_traits< scalar_bitwise_or_op< Scalar > >
 
struct  scalar_bitwise_xor_op
 Template functor to compute the bitwise xor of two scalars. More...
 
struct  functor_traits< scalar_bitwise_xor_op< Scalar > >
 
struct  scalar_absolute_difference_op
 Template functor to compute the absolute difference of two scalars. More...
 
struct  functor_traits< scalar_absolute_difference_op< LhsScalar, RhsScalar > >
 
struct  scalar_atan2_op
 
struct  functor_traits< scalar_atan2_op< LhsScalar, RhsScalar > >
 
struct  bind1st_op
 
struct  functor_traits< bind1st_op< BinaryOp > >
 
struct  bind2nd_op
 
struct  functor_traits< bind2nd_op< BinaryOp > >
 
struct  scalar_constant_op
 
struct  functor_traits< scalar_constant_op< Scalar > >
 
struct  scalar_zero_op
 
struct  functor_traits< scalar_zero_op< Scalar > >
 
struct  scalar_identity_op
 
struct  functor_traits< scalar_identity_op< Scalar > >
 
struct  linspaced_op_impl
 
struct  linspaced_op_impl< Scalar, false >
 
struct  linspaced_op_impl< Scalar, true >
 
struct  linspaced_op
 
struct  functor_traits< linspaced_op< Scalar > >
 
struct  equalspaced_op
 
struct  functor_traits< equalspaced_op< Scalar > >
 
struct  functor_has_linear_access
 
struct  has_nullary_operator< scalar_constant_op< Scalar >, IndexType >
 
struct  has_unary_operator< scalar_constant_op< Scalar >, IndexType >
 
struct  has_binary_operator< scalar_constant_op< Scalar >, IndexType >
 
struct  has_nullary_operator< scalar_identity_op< Scalar >, IndexType >
 
struct  has_unary_operator< scalar_identity_op< Scalar >, IndexType >
 
struct  has_binary_operator< scalar_identity_op< Scalar >, IndexType >
 
struct  has_nullary_operator< linspaced_op< Scalar >, IndexType >
 
struct  has_unary_operator< linspaced_op< Scalar >, IndexType >
 
struct  has_binary_operator< linspaced_op< Scalar >, IndexType >
 
struct  has_nullary_operator< scalar_random_op< Scalar >, IndexType >
 
struct  has_unary_operator< scalar_random_op< Scalar >, IndexType >
 
struct  has_binary_operator< scalar_random_op< Scalar >, IndexType >
 
struct  functor_traits< std::multiplies< T > >
 
struct  functor_traits< std::divides< T > >
 
struct  functor_traits< std::plus< T > >
 
struct  functor_traits< std::minus< T > >
 
struct  functor_traits< std::negate< T > >
 
struct  functor_traits< std::logical_or< T > >
 
struct  functor_traits< std::logical_and< T > >
 
struct  functor_traits< std::logical_not< T > >
 
struct  functor_traits< std::greater< T > >
 
struct  functor_traits< std::less< T > >
 
struct  functor_traits< std::greater_equal< T > >
 
struct  functor_traits< std::less_equal< T > >
 
struct  functor_traits< std::equal_to< T > >
 
struct  functor_traits< std::not_equal_to< T > >
 
struct  functor_traits< std::unary_negate< T > >
 
struct  functor_traits< std::binary_negate< T > >
 
struct  scalar_boolean_select_op
 
struct  functor_traits< scalar_boolean_select_op< ThenScalar, ElseScalar, ConditionScalar > >
 
struct  scalar_opposite_op
 Template functor to compute the opposite of a scalar. More...
 
struct  functor_traits< scalar_opposite_op< Scalar > >
 
struct  scalar_abs_op
 Template functor to compute the absolute value of a scalar. More...
 
struct  functor_traits< scalar_abs_op< Scalar > >
 
struct  scalar_score_coeff_op
 Template functor to compute the score of a scalar, to chose a pivot. More...
 
struct  functor_traits< scalar_score_coeff_op< Scalar > >
 
struct  abs_knowing_score
 
struct  abs_knowing_score< Scalar, typename scalar_score_coeff_op< Scalar >::Score_is_abs >
 
struct  scalar_abs2_op
 Template functor to compute the squared absolute value of a scalar. More...
 
struct  functor_traits< scalar_abs2_op< Scalar > >
 
struct  squared_norm_functor
 
struct  squared_norm_functor< Scalar, false >
 
struct  functor_traits< squared_norm_functor< Scalar > >
 
struct  scalar_conjugate_op
 Template functor to compute the conjugate of a complex value. More...
 
struct  functor_traits< scalar_conjugate_op< Scalar > >
 
struct  scalar_arg_op
 Template functor to compute the phase angle of a complex. More...
 
struct  functor_traits< scalar_arg_op< Scalar > >
 
struct  scalar_carg_op
 Template functor to compute the complex argument, returned as a complex type. More...
 
struct  functor_traits< scalar_carg_op< Scalar > >
 
struct  scalar_cast_op
 Template functor to cast a scalar to another type. More...
 
struct  functor_traits< scalar_cast_op< Scalar, NewType > >
 
struct  core_cast_op
 
struct  functor_traits< core_cast_op< SrcType, DstType > >
 
struct  scalar_shift_right_op
 Template functor to arithmetically shift a scalar right by a number of bits. More...
 
struct  functor_traits< scalar_shift_right_op< Scalar, N > >
 
struct  scalar_shift_left_op
 Template functor to logically shift a scalar left by a number of bits. More...
 
struct  functor_traits< scalar_shift_left_op< Scalar, N > >
 
struct  scalar_real_op
 Template functor to extract the real part of a complex. More...
 
struct  functor_traits< scalar_real_op< Scalar > >
 
struct  scalar_imag_op
 Template functor to extract the imaginary part of a complex. More...
 
struct  functor_traits< scalar_imag_op< Scalar > >
 
struct  scalar_real_ref_op
 Template functor to extract the real part of a complex as a reference. More...
 
struct  functor_traits< scalar_real_ref_op< Scalar > >
 
struct  scalar_imag_ref_op
 Template functor to extract the imaginary part of a complex as a reference. More...
 
struct  functor_traits< scalar_imag_ref_op< Scalar > >
 
struct  scalar_exp_op
 Template functor to compute the exponential of a scalar. More...
 
struct  functor_traits< scalar_exp_op< Scalar > >
 
struct  scalar_exp2_op
 
struct  functor_traits< scalar_exp2_op< Scalar > >
 
struct  scalar_expm1_op
 Template functor to compute the exponential of a scalar - 1. More...
 
struct  functor_traits< scalar_expm1_op< Scalar > >
 
struct  scalar_log_op
 Template functor to compute the logarithm of a scalar. More...
 
struct  functor_traits< scalar_log_op< Scalar > >
 
struct  scalar_log1p_op
 Template functor to compute the logarithm of 1 plus a scalar value. More...
 
struct  functor_traits< scalar_log1p_op< Scalar > >
 
struct  scalar_log10_op
 Template functor to compute the base-10 logarithm of a scalar. More...
 
struct  functor_traits< scalar_log10_op< Scalar > >
 
struct  scalar_log2_op
 Template functor to compute the base-2 logarithm of a scalar. More...
 
struct  functor_traits< scalar_log2_op< Scalar > >
 
struct  scalar_sqrt_op
 Template functor to compute the square root of a scalar. More...
 
struct  functor_traits< scalar_sqrt_op< Scalar > >
 
struct  scalar_sqrt_op< bool >
 
struct  functor_traits< scalar_sqrt_op< bool > >
 
struct  scalar_cbrt_op
 Template functor to compute the cube root of a scalar. More...
 
struct  functor_traits< scalar_cbrt_op< Scalar > >
 
struct  scalar_rsqrt_op
 Template functor to compute the reciprocal square root of a scalar. More...
 
struct  functor_traits< scalar_rsqrt_op< Scalar > >
 
struct  scalar_cos_op
 Template functor to compute the cosine of a scalar. More...
 
struct  functor_traits< scalar_cos_op< Scalar > >
 
struct  scalar_sin_op
 Template functor to compute the sine of a scalar. More...
 
struct  functor_traits< scalar_sin_op< Scalar > >
 
struct  scalar_tan_op
 Template functor to compute the tan of a scalar. More...
 
struct  functor_traits< scalar_tan_op< Scalar > >
 
struct  scalar_acos_op
 Template functor to compute the arc cosine of a scalar. More...
 
struct  functor_traits< scalar_acos_op< Scalar > >
 
struct  scalar_asin_op
 Template functor to compute the arc sine of a scalar. More...
 
struct  functor_traits< scalar_asin_op< Scalar > >
 
struct  scalar_atan_op
 Template functor to compute the atan of a scalar. More...
 
struct  functor_traits< scalar_atan_op< Scalar > >
 
struct  scalar_tanh_op
 Template functor to compute the tanh of a scalar. More...
 
struct  functor_traits< scalar_tanh_op< Scalar > >
 
struct  scalar_atanh_op
 Template functor to compute the atanh of a scalar. More...
 
struct  functor_traits< scalar_atanh_op< Scalar > >
 
struct  scalar_sinh_op
 Template functor to compute the sinh of a scalar. More...
 
struct  functor_traits< scalar_sinh_op< Scalar > >
 
struct  scalar_asinh_op
 Template functor to compute the asinh of a scalar. More...
 
struct  functor_traits< scalar_asinh_op< Scalar > >
 
struct  scalar_cosh_op
 Template functor to compute the cosh of a scalar. More...
 
struct  functor_traits< scalar_cosh_op< Scalar > >
 
struct  scalar_acosh_op
 Template functor to compute the acosh of a scalar. More...
 
struct  functor_traits< scalar_acosh_op< Scalar > >
 
struct  scalar_inverse_op
 Template functor to compute the inverse of a scalar. More...
 
struct  functor_traits< scalar_inverse_op< Scalar > >
 
struct  scalar_square_op
 Template functor to compute the square of a scalar. More...
 
struct  functor_traits< scalar_square_op< Scalar > >
 
struct  scalar_square_op< bool >
 
struct  functor_traits< scalar_square_op< bool > >
 
struct  scalar_cube_op
 Template functor to compute the cube of a scalar. More...
 
struct  functor_traits< scalar_cube_op< Scalar > >
 
struct  scalar_cube_op< bool >
 
struct  functor_traits< scalar_cube_op< bool > >
 
struct  scalar_round_op
 Template functor to compute the rounded value of a scalar. More...
 
struct  functor_traits< scalar_round_op< Scalar > >
 
struct  scalar_floor_op
 Template functor to compute the floor of a scalar. More...
 
struct  functor_traits< scalar_floor_op< Scalar > >
 
struct  scalar_rint_op
 Template functor to compute the rounded (with current rounding mode) value of a scalar. More...
 
struct  functor_traits< scalar_rint_op< Scalar > >
 
struct  scalar_ceil_op
 Template functor to compute the ceil of a scalar. More...
 
struct  functor_traits< scalar_ceil_op< Scalar > >
 
struct  scalar_trunc_op
 Template functor to compute the truncation of a scalar. More...
 
struct  functor_traits< scalar_trunc_op< Scalar > >
 
struct  scalar_isnan_op
 Template functor to compute whether a scalar is NaN. More...
 
struct  scalar_isnan_op< Scalar, true >
 
struct  functor_traits< scalar_isnan_op< Scalar, UseTypedPredicate > >
 
struct  scalar_isinf_op
 Template functor to check whether a scalar is +/-inf. More...
 
struct  scalar_isinf_op< Scalar, true >
 
struct  functor_traits< scalar_isinf_op< Scalar, UseTypedPredicate > >
 
struct  scalar_isfinite_op
 Template functor to check whether a scalar has a finite value. More...
 
struct  scalar_isfinite_op< Scalar, true >
 
struct  functor_traits< scalar_isfinite_op< Scalar, UseTypedPredicate > >
 
struct  scalar_boolean_not_op
 Template functor to compute the logical not of a scalar as if it were a boolean. More...
 
struct  functor_traits< scalar_boolean_not_op< Scalar > >
 
struct  bitwise_unary_impl
 
struct  bitwise_unary_impl< Scalar, true >
 
struct  scalar_bitwise_not_op
 Template functor to compute the bitwise not of a scalar. More...
 
struct  functor_traits< scalar_bitwise_not_op< Scalar > >
 
struct  scalar_sign_op
 Template functor to compute the signum of a scalar. More...
 
struct  functor_traits< scalar_sign_op< Scalar > >
 
struct  scalar_logistic_op_impl
 
struct  scalar_logistic_op_impl< T, std::enable_if_t< NumTraits< T >::IsComplex > >
 
struct  scalar_logistic_op
 Template functor to compute the logistic function of a scalar. More...
 
struct  scalar_logistic_op< float >
 Template specialization of the logistic function for float. Computes S(x) = exp(x) / (1 + exp(x)), where exp(x) is implemented using an algorithm partly adopted from the implementation of pexp_float. See the individual steps described in the code below. Note that compared to pexp, we use an additional outer multiplicative range reduction step using the identity exp(x) = exp(x/2)^2. This prevert us from having to call ldexp on values that could produce a denormal result, which allows us to call the faster implementation in pldexp_fast_impl<Packet>::run(p, m). The final squaring, however, doubles the error bound on the final approximation. Exhaustive testing shows that we have a worst case error of 4.5 ulps (compared to computing S(x) in double precision), which is acceptable. More...
 
struct  functor_traits< scalar_logistic_op< T > >
 
struct  scalar_unary_pow_op
 
struct  is_floating_exactly_representable
 
struct  scalar_unary_pow_op< Scalar, ExponentScalar, false, false, false, false >
 
struct  scalar_unary_pow_op< Scalar, ExponentScalar, BaseIsInteger, true, false, false >
 
struct  functor_traits< scalar_unary_pow_op< Scalar, ExponentScalar > >
 
struct  isApprox_selector
 
struct  isApprox_selector< Derived, OtherDerived, true >
 
struct  isMuchSmallerThan_object_selector
 
struct  isMuchSmallerThan_object_selector< Derived, OtherDerived, true >
 
struct  isMuchSmallerThan_scalar_selector
 
struct  isMuchSmallerThan_scalar_selector< Derived, true >
 
struct  product_type_selector
 
struct  product_size_category
 
struct  product_type
 
struct  product_type_selector< M, N, 1 >
 
struct  product_type_selector< M, 1, 1 >
 
struct  product_type_selector< 1, N, 1 >
 
struct  product_type_selector< 1, 1, Depth >
 
struct  product_type_selector< 1, 1, 1 >
 
struct  product_type_selector< Small, 1, Small >
 
struct  product_type_selector< 1, Small, Small >
 
struct  product_type_selector< Small, Small, Small >
 
struct  product_type_selector< Small, Small, 1 >
 
struct  product_type_selector< Small, Large, 1 >
 
struct  product_type_selector< Large, Small, 1 >
 
struct  product_type_selector< 1, Large, Small >
 
struct  product_type_selector< 1, Large, Large >
 
struct  product_type_selector< 1, Small, Large >
 
struct  product_type_selector< Large, 1, Small >
 
struct  product_type_selector< Large, 1, Large >
 
struct  product_type_selector< Small, 1, Large >
 
struct  product_type_selector< Small, Small, Large >
 
struct  product_type_selector< Large, Small, Large >
 
struct  product_type_selector< Small, Large, Large >
 
struct  product_type_selector< Large, Large, Large >
 
struct  product_type_selector< Large, Small, Small >
 
struct  product_type_selector< Small, Large, Small >
 
struct  product_type_selector< Large, Large, Small >
 
struct  gemv_dense_selector
 
struct  gemv_static_vector_if
 
struct  gemv_static_vector_if< Scalar, Size, MaxSize, false >
 
struct  gemv_static_vector_if< Scalar, Size, Dynamic, true >
 
struct  gemv_static_vector_if< Scalar, Size, MaxSize, true >
 
struct  gemv_dense_selector< OnTheLeft, StorageOrder, BlasCompatible >
 
struct  gemv_dense_selector< OnTheRight, ColMajor, true >
 
struct  gemv_dense_selector< OnTheRight, RowMajor, true >
 
struct  gemv_dense_selector< OnTheRight, ColMajor, false >
 
struct  gemv_dense_selector< OnTheRight, RowMajor, false >
 
struct  default_packet_traits
 
struct  packet_traits
 
struct  packet_traits< const T >
 
struct  unpacket_traits
 
struct  unpacket_traits< const T >
 
struct  is_scalar
 
struct  is_degenerate_helper
 
struct  is_degenerate_helper< int8_t, uint8_t, true >
 
struct  is_degenerate_helper< int16_t, uint16_t, true >
 
struct  is_degenerate_helper< int32_t, uint32_t, true >
 
struct  is_degenerate_helper< int64_t, uint64_t, true >
 
struct  is_degenerate_helper< SrcPacket, TgtPacket, false >
 
struct  is_degenerate
 
struct  is_half
 
struct  type_casting_traits
 
struct  vectorized_type_casting_traits
 
struct  eigen_packet_wrapper
 
struct  preinterpret_generic
 
struct  preinterpret_generic< Target, Packet, false >
 
struct  preinterpret_generic< Packet, Packet, true >
 
struct  pcast_generic
 
struct  pcast_generic< SrcPacket, TgtPacket, false, false >
 
struct  pcast_generic< Packet, Packet, true, false >
 
struct  pcast_generic< SrcPacket, TgtPacket, true, TgtIsHalf >
 
struct  pcast_generic< SrcPacket, TgtPacket, false, true >
 
struct  ptrue_impl
 
struct  ptrue_impl< bool, void >
 
struct  ptrue_impl< T, std::enable_if_t< is_scalar< T >::value &&NumTraits< T >::RequireInitialization > >
 
struct  pzero_impl
 
struct  pzero_impl< T, std::enable_if_t< is_scalar< T >::value > >
 
struct  bit_and
 
struct  bit_or
 
struct  bit_xor
 
struct  bit_not
 
struct  bit_and< bool >
 
struct  bit_or< bool >
 
struct  bit_xor< bool >
 
struct  bit_not< bool >
 
struct  operator_bitwise_helper
 
struct  bytewise_bitwise_helper
 
struct  bitwise_helper
 
struct  bitwise_helper< T, typename std::enable_if_t< is_scalar< T >::value &&(NumTraits< T >::IsInteger||NumTraits< T >::RequireInitialization)> >
 
struct  pselect_impl
 
struct  pselect_impl< Packet, std::enable_if_t< is_scalar< Packet >::value > >
 
struct  pminmax_impl
 
struct  pminmax_impl< PropagateNaN >
 
struct  pminmax_impl< PropagateNumbers >
 
struct  nearest_integer_packetop_impl
 
struct  psign_impl
 
struct  PacketBlock
 
struct  Selector
 
struct  psignbit_impl
 
struct  psignbit_impl< Packet, true, IsInteger >
 
struct  psignbit_impl< Packet, false, false >
 
struct  psignbit_impl< Packet, false, true >
 
struct  traits< IndexedView< XprType, RowIndices, ColIndices > >
 
class  IndexedViewImpl
 
class  IndexedViewImpl< XprType, RowIndices, ColIndices, StorageKind, true >
 
struct  unary_evaluator< IndexedView< ArgType, RowIndices, ColIndices >, IndexBased >
 
struct  find_inner_product_packet_helper
 
struct  find_inner_product_packet_helper< Scalar, Size, Packet, false >
 
struct  find_inner_product_packet_helper< Scalar, Size, Packet, true >
 
struct  find_inner_product_packet
 
struct  find_inner_product_packet< Scalar, Dynamic >
 
struct  inner_product_assert
 
struct  inner_product_evaluator
 
struct  inner_product_impl
 
struct  inner_product_impl< Evaluator, false >
 
struct  inner_product_impl< Evaluator, true >
 
struct  conditional_conj
 
struct  conditional_conj< Scalar, true >
 
struct  conditional_conj< Scalar, false >
 
struct  scalar_inner_product_op
 
struct  scalar_inner_product_op< Scalar, Scalar, Conj >
 
struct  default_inner_product_impl
 
struct  dot_impl
 
struct  traits< Inverse< XprType > >
 
struct  unary_evaluator< Inverse< ArgType > >
 Default evaluator for Inverse expression. More...
 
struct  significant_decimals_impl
 
struct  traits< Map< PlainObjectType, MapOptions, StrideType > >
 
class  global_math_functions_filtering_base
 
struct  always_void
 
struct  global_math_functions_filtering_base< T, typename always_void< typename T::Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl >::type >
 
struct  real_default_impl
 
struct  real_default_impl< Scalar, true >
 
struct  real_impl
 
struct  real_retval
 
struct  imag_default_impl
 
struct  imag_default_impl< Scalar, true >
 
struct  imag_impl
 
struct  imag_retval
 
struct  real_ref_impl
 
struct  real_ref_retval
 
struct  imag_ref_default_impl
 
struct  imag_ref_default_impl< Scalar, false >
 
struct  imag_ref_impl
 
struct  imag_ref_retval
 
struct  conj_default_impl
 
struct  conj_default_impl< Scalar, true >
 
struct  conj_impl
 
struct  conj_retval
 
struct  abs2_impl_default
 
struct  abs2_impl_default< Scalar, true >
 
struct  abs2_impl
 
struct  abs2_retval
 
struct  sqrt_impl
 
struct  sqrt_impl< std::complex< T > >
 
struct  sqrt_retval
 
struct  rsqrt_impl
 
struct  rsqrt_impl< std::complex< T > >
 
struct  rsqrt_retval
 
struct  norm1_default_impl
 
struct  norm1_default_impl< Scalar, true >
 
struct  norm1_default_impl< Scalar, false >
 
struct  norm1_impl
 
struct  norm1_retval
 
struct  hypot_impl
 
struct  hypot_retval
 
struct  cast_impl
 
struct  cast_impl< OldType, bool >
 
struct  cast_impl< OldType, NewType, typename std::enable_if_t<!NumTraits< OldType >::IsComplex &&NumTraits< NewType >::IsComplex > >
 
struct  arg_default_impl
 
struct  arg_default_impl< Scalar, true >
 
struct  arg_default_impl< Scalar, false >
 
struct  arg_impl
 
struct  arg_retval
 
struct  expm1_impl
 
struct  expm1_retval
 
struct  log_impl
 
struct  log_impl< std::complex< Scalar > >
 
struct  log1p_impl
 
struct  log1p_impl< std::complex< RealScalar > >
 
struct  log1p_retval
 
struct  pow_impl
 
struct  pow_impl< ScalarX, ScalarY, true >
 
struct  meta_floor_log2_selector
 
struct  meta_floor_log2
 
struct  meta_floor_log2< n, lower, upper, meta_floor_log2_move_down >
 
struct  meta_floor_log2< n, lower, upper, meta_floor_log2_move_up >
 
struct  meta_floor_log2< n, lower, upper, meta_floor_log2_terminate >
 
struct  meta_floor_log2< n, lower, upper, meta_floor_log2_bogus >
 
struct  count_bits_impl
 
struct  log_2_impl
 
struct  sign_impl
 
struct  sign_impl< Scalar, false, false >
 
struct  sign_impl< Scalar, true, IsInteger >
 
struct  sign_impl< bool, false, true >
 
struct  sign_retval
 
struct  negate_impl
 
struct  negate_impl< Scalar, true >
 
struct  negate_retval
 
struct  nearest_integer_impl
 
struct  nearest_integer_impl< Scalar, true >
 
struct  scalar_fuzzy_default_impl
 
struct  scalar_fuzzy_default_impl< Scalar, false, false >
 
struct  scalar_fuzzy_default_impl< Scalar, false, true >
 
struct  scalar_fuzzy_default_impl< Scalar, true, false >
 
struct  scalar_fuzzy_impl
 
struct  scalar_fuzzy_impl< bool >
 
struct  expm1_impl< std::complex< RealScalar > >
 
struct  generic_reciprocal_newton_step
 
struct  generic_reciprocal_newton_step< Packet, 0 >
 
struct  generic_rsqrt_newton_step
 
struct  generic_rsqrt_newton_step< Packet, 0 >
 
struct  generic_sqrt_newton_step
 
struct  traits< Matrix< Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_ > >
 
struct  traits< NestByValue< ExpressionType > >
 
struct  evaluator< NestByValue< ArgType > >
 
struct  default_digits_impl
 
struct  default_digits_impl< T, false, false >
 
struct  default_digits_impl< T, false, true >
 
struct  default_digits10_impl
 
struct  default_digits10_impl< T, false, false >
 
struct  default_digits10_impl< T, false, true >
 
struct  default_max_digits10_impl
 
struct  default_max_digits10_impl< T, false, false >
 
struct  default_max_digits10_impl< T, false, true >
 
struct  packetwise_redux_traits
 
struct  packetwise_redux_impl
 
struct  packetwise_redux_impl< Func, Evaluator, CompleteUnrolling >
 
struct  redux_vec_unroller< Func, Evaluator, Start, 0 >
 
struct  packetwise_redux_impl< Func, Evaluator, NoUnrolling >
 
struct  evaluator< PartialReduxExpr< ArgType, MemberOp, Direction > >
 
struct  traits< PermutationMatrix< SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_ > >
 
struct  traits< Map< PermutationMatrix< SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_ >, PacketAccess_ > >
 
struct  traits< PermutationWrapper< IndicesType_ > >
 
struct  AssignmentKind< DenseShape, PermutationShape >
 
struct  check_rows_cols_for_overflow
 
struct  check_rows_cols_for_overflow< Dynamic, MaxRowsAtCompileTime, Dynamic >
 
struct  check_rows_cols_for_overflow< Dynamic, Dynamic, MaxColsAtCompileTime >
 
struct  check_rows_cols_for_overflow< Dynamic, Dynamic, Dynamic >
 
struct  conservative_resize_like_impl
 
struct  matrix_swap_impl
 
struct  conservative_resize_like_impl< Derived, OtherDerived, true >
 
struct  matrix_swap_impl< MatrixTypeA, MatrixTypeB, true >
 
struct  traits< Product< Lhs, Rhs, Option > >
 
struct  TransposeProductEnum
 
struct  TransposeKind
 
struct  TransposeProductKind
 
struct  product_transpose_helper
 
struct  product_transpose_helper< Lhs, Rhs, Option, TransposeProductEnum::MatrixMatrix >
 
struct  product_transpose_helper< Lhs, Rhs, Option, TransposeProductEnum::PermutationMatrix >
 
struct  product_transpose_helper< Lhs, Rhs, Option, TransposeProductEnum::MatrixPermutation >
 
class  dense_product_base
 
class  dense_product_base< Lhs, Rhs, Option, InnerProduct >
 
struct  evaluator< Product< Lhs, Rhs, Options > >
 
struct  evaluator_assume_aliasing< CwiseBinaryOp< internal::scalar_product_op< Scalar1, Scalar2 >, const CwiseNullaryOp< internal::scalar_constant_op< Scalar1 >, Plain1 >, const Product< Lhs, Rhs, DefaultProduct > > >
 
struct  evaluator< CwiseBinaryOp< internal::scalar_product_op< Scalar1, Scalar2 >, const CwiseNullaryOp< internal::scalar_constant_op< Scalar1 >, Plain1 >, const Product< Lhs, Rhs, DefaultProduct > > >
 
struct  evaluator< Diagonal< const Product< Lhs, Rhs, DefaultProduct >, DiagIndex > >
 
struct  generic_product_impl
 
struct  evaluator_assume_aliasing< Product< Lhs, Rhs, DefaultProduct > >
 
struct  product_evaluator< Product< Lhs, Rhs, Options >, ProductTag, LhsShape, RhsShape >
 
struct  Assignment< DstXprType, Product< Lhs, Rhs, Options >, internal::assign_op< Scalar, Scalar >, Dense2Dense, std::enable_if_t<(Options==DefaultProduct||Options==AliasFreeProduct)> >
 
struct  Assignment< DstXprType, Product< Lhs, Rhs, Options >, internal::add_assign_op< Scalar, Scalar >, Dense2Dense, std::enable_if_t<(Options==DefaultProduct||Options==AliasFreeProduct)> >
 
struct  Assignment< DstXprType, Product< Lhs, Rhs, Options >, internal::sub_assign_op< Scalar, Scalar >, Dense2Dense, std::enable_if_t<(Options==DefaultProduct||Options==AliasFreeProduct)> >
 
struct  Assignment< DstXprType, CwiseBinaryOp< internal::scalar_product_op< ScalarBis, Scalar >, const CwiseNullaryOp< internal::scalar_constant_op< ScalarBis >, Plain >, const Product< Lhs, Rhs, DefaultProduct > >, AssignFunc, Dense2Dense >
 
struct  evaluator_assume_aliasing< CwiseBinaryOp< internal::scalar_sum_op< typename OtherXpr::Scalar, typename Product< Lhs, Rhs, DefaultProduct >::Scalar >, const OtherXpr, const Product< Lhs, Rhs, DefaultProduct > >, DenseShape >
 
struct  evaluator_assume_aliasing< CwiseBinaryOp< internal::scalar_difference_op< typename OtherXpr::Scalar, typename Product< Lhs, Rhs, DefaultProduct >::Scalar >, const OtherXpr, const Product< Lhs, Rhs, DefaultProduct > >, DenseShape >
 
struct  assignment_from_xpr_op_product
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, InnerProduct >
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, OuterProduct >
 
struct  generic_product_impl_base
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, GemvProduct >
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, CoeffBasedProductMode >
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, LazyCoeffBasedProductMode >
 
struct  etor_product_coeff_impl
 
struct  etor_product_packet_impl
 
struct  product_evaluator< Product< Lhs, Rhs, LazyProduct >, ProductTag, DenseShape, DenseShape >
 
struct  product_evaluator< Product< Lhs, Rhs, DefaultProduct >, LazyCoeffBasedProductMode, DenseShape, DenseShape >
 
struct  etor_product_packet_impl< RowMajor, UnrollingIndex, Lhs, Rhs, Packet, LoadMode >
 
struct  etor_product_packet_impl< ColMajor, UnrollingIndex, Lhs, Rhs, Packet, LoadMode >
 
struct  etor_product_packet_impl< RowMajor, 1, Lhs, Rhs, Packet, LoadMode >
 
struct  etor_product_packet_impl< ColMajor, 1, Lhs, Rhs, Packet, LoadMode >
 
struct  etor_product_packet_impl< RowMajor, 0, Lhs, Rhs, Packet, LoadMode >
 
struct  etor_product_packet_impl< ColMajor, 0, Lhs, Rhs, Packet, LoadMode >
 
struct  etor_product_packet_impl< RowMajor, Dynamic, Lhs, Rhs, Packet, LoadMode >
 
struct  etor_product_packet_impl< ColMajor, Dynamic, Lhs, Rhs, Packet, LoadMode >
 
struct  triangular_product_impl
 
struct  generic_product_impl< Lhs, Rhs, TriangularShape, DenseShape, ProductTag >
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, TriangularShape, ProductTag >
 
struct  selfadjoint_product_impl
 
struct  generic_product_impl< Lhs, Rhs, SelfAdjointShape, DenseShape, ProductTag >
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, SelfAdjointShape, ProductTag >
 
struct  diagonal_product_evaluator_base
 
struct  product_evaluator< Product< Lhs, Rhs, ProductKind >, ProductTag, DiagonalShape, DenseShape >
 
struct  product_evaluator< Product< Lhs, Rhs, ProductKind >, ProductTag, DenseShape, DiagonalShape >
 
class  permutation_matrix_product
 
struct  permutation_matrix_product< ExpressionType, Side, Transposed, DenseShape >
 
struct  generic_product_impl< Lhs, Rhs, PermutationShape, MatrixShape, ProductTag >
 
struct  generic_product_impl< Lhs, Rhs, MatrixShape, PermutationShape, ProductTag >
 
struct  generic_product_impl< Inverse< Lhs >, Rhs, PermutationShape, MatrixShape, ProductTag >
 
struct  generic_product_impl< Lhs, Inverse< Rhs >, MatrixShape, PermutationShape, ProductTag >
 
class  transposition_matrix_product
 
struct  generic_product_impl< Lhs, Rhs, TranspositionsShape, MatrixShape, ProductTag >
 
struct  generic_product_impl< Lhs, Rhs, MatrixShape, TranspositionsShape, ProductTag >
 
struct  generic_product_impl< Transpose< Lhs >, Rhs, TranspositionsShape, MatrixShape, ProductTag >
 
struct  generic_product_impl< Lhs, Transpose< Rhs >, MatrixShape, TranspositionsShape, ProductTag >
 
struct  generic_product_impl< Lhs, Rhs, SkewSymmetricShape, MatrixShape, ProductTag >
 
struct  generic_product_impl< Lhs, Rhs, MatrixShape, SkewSymmetricShape, ProductTag >
 
struct  generic_product_impl< Lhs, Rhs, SkewSymmetricShape, SkewSymmetricShape, ProductTag >
 
class  gebp_traits
 
struct  CacheSizes
 
struct  RhsPanelHelper
 
struct  QuadPacket
 
struct  packet_conditional
 
struct  packet_conditional< GEBPPacketFull, T1, T2, T3 >
 
struct  packet_conditional< GEBPPacketHalf, T1, T2, T3 >
 
class  gebp_traits< std::complex< RealScalar >, RealScalar, ConjLhs_, false, Arch, PacketSize_ >
 
struct  DoublePacket
 
struct  unpacket_traits< DoublePacket< Packet > >
 
class  gebp_traits< std::complex< RealScalar >, std::complex< RealScalar >, ConjLhs_, ConjRhs_, Arch, PacketSize_ >
 
class  gebp_traits< RealScalar, std::complex< RealScalar >, false, ConjRhs_, Arch, PacketSize_ >
 
struct  gebp_kernel
 
struct  last_row_process_16_packets
 
struct  last_row_process_16_packets< LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs, 16 >
 
struct  lhs_process_one_packet
 
struct  lhs_process_fraction_of_packet
 
struct  gemm_pack_lhs< Scalar, Index, DataMapper, Pack1, Pack2, Packet, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_lhs< Scalar, Index, DataMapper, Pack1, Pack2, Packet, RowMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< Scalar, Index, DataMapper, nr, ColMajor, Conjugate, PanelMode >
 
struct  gemm_pack_rhs< Scalar, Index, DataMapper, nr, RowMajor, Conjugate, PanelMode >
 
class  level3_blocking
 
struct  general_matrix_matrix_product< Index, LhsScalar, LhsStorageOrder, ConjugateLhs, RhsScalar, RhsStorageOrder, ConjugateRhs, RowMajor, ResInnerStride >
 
struct  general_matrix_matrix_product< Index, LhsScalar, LhsStorageOrder, ConjugateLhs, RhsScalar, RhsStorageOrder, ConjugateRhs, ColMajor, ResInnerStride >
 
struct  gemm_functor
 
class  gemm_blocking_space
 
class  gemm_blocking_space< StorageOrder, LhsScalar_, RhsScalar_, MaxRows, MaxCols, MaxDepth, KcFactor, true >
 
class  gemm_blocking_space< StorageOrder, LhsScalar_, RhsScalar_, MaxRows, MaxCols, MaxDepth, KcFactor, false >
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, GemmProduct >
 
struct  tribb_kernel
 
struct  general_matrix_matrix_triangular_product
 
struct  general_matrix_matrix_triangular_product< Index, LhsScalar, LhsStorageOrder, ConjugateLhs, RhsScalar, RhsStorageOrder, ConjugateRhs, RowMajor, ResInnerStride, UpLo, Version >
 
struct  general_matrix_matrix_triangular_product< Index, LhsScalar, LhsStorageOrder, ConjugateLhs, RhsScalar, RhsStorageOrder, ConjugateRhs, ColMajor, ResInnerStride, UpLo, Version >
 
struct  general_matrix_matrix_rankupdate
 
struct  gemv_packet_cond
 
struct  gemv_packet_cond< GEMVPacketFull, T1, T2, T3 >
 
struct  gemv_packet_cond< GEMVPacketHalf, T1, T2, T3 >
 
class  gemv_traits
 
struct  general_matrix_vector_product< Index, LhsScalar, LhsMapper, ColMajor, ConjugateLhs, RhsScalar, RhsMapper, ConjugateRhs, Version >
 
struct  general_matrix_vector_product< Index, LhsScalar, LhsMapper, RowMajor, ConjugateLhs, RhsScalar, RhsMapper, ConjugateRhs, Version >
 
struct  general_matrix_vector_product_gemv
 
struct  GemmParallelInfo
 
struct  symm_pack_lhs
 
struct  symm_pack_rhs
 
struct  product_selfadjoint_matrix
 
struct  product_selfadjoint_matrix< Scalar, Index, LhsStorageOrder, LhsSelfAdjoint, ConjugateLhs, RhsStorageOrder, RhsSelfAdjoint, ConjugateRhs, RowMajor, ResInnerStride >
 
struct  product_selfadjoint_matrix< Scalar, Index, LhsStorageOrder, true, ConjugateLhs, RhsStorageOrder, false, ConjugateRhs, ColMajor, ResInnerStride >
 
struct  product_selfadjoint_matrix< Scalar, Index, LhsStorageOrder, false, ConjugateLhs, RhsStorageOrder, true, ConjugateRhs, ColMajor, ResInnerStride >
 
struct  selfadjoint_product_impl< Lhs, LhsMode, false, Rhs, RhsMode, false >
 
struct  selfadjoint_matrix_vector_product
 
struct  selfadjoint_product_impl< Lhs, LhsMode, false, Rhs, 0, true >
 
struct  selfadjoint_product_impl< Lhs, 0, true, Rhs, RhsMode, false >
 
struct  selfadjoint_matrix_vector_product_symv
 
struct  selfadjoint_rank2_update_selector
 
struct  selfadjoint_rank2_update_selector< Scalar, Index, UType, VType, Lower >
 
struct  selfadjoint_rank2_update_selector< Scalar, Index, UType, VType, Upper >
 
struct  product_triangular_matrix_matrix
 
struct  product_triangular_matrix_matrix< Scalar, Index, Mode, LhsIsTriangular, LhsStorageOrder, ConjugateLhs, RhsStorageOrder, ConjugateRhs, RowMajor, ResInnerStride, Version >
 
struct  product_triangular_matrix_matrix< Scalar, Index, Mode, true, LhsStorageOrder, ConjugateLhs, RhsStorageOrder, ConjugateRhs, ColMajor, ResInnerStride, Version >
 
struct  product_triangular_matrix_matrix< Scalar, Index, Mode, false, LhsStorageOrder, ConjugateLhs, RhsStorageOrder, ConjugateRhs, ColMajor, ResInnerStride, Version >
 
struct  triangular_product_impl< Mode, LhsIsTriangular, Lhs, false, Rhs, false >
 
struct  product_triangular_matrix_matrix_trmm
 
struct  triangular_matrix_vector_product
 
struct  triangular_matrix_vector_product< Index, Mode, LhsScalar, ConjLhs, RhsScalar, ConjRhs, ColMajor, Version >
 
struct  triangular_matrix_vector_product< Index, Mode, LhsScalar, ConjLhs, RhsScalar, ConjRhs, RowMajor, Version >
 
struct  trmv_selector
 
struct  triangular_product_impl< Mode, true, Lhs, false, Rhs, true >
 
struct  triangular_product_impl< Mode, false, Lhs, true, Rhs, false >
 
struct  trmv_selector< Mode, ColMajor >
 
struct  trmv_selector< Mode, RowMajor >
 
struct  triangular_matrix_vector_product_trmv
 
struct  triangular_solve_matrix< Scalar, Index, Side, Mode, Conjugate, TriStorageOrder, RowMajor, OtherInnerStride >
 
struct  triangular_solve_matrix< Scalar, Index, OnTheLeft, Mode, Conjugate, TriStorageOrder, ColMajor, OtherInnerStride >
 
struct  triangular_solve_matrix< Scalar, Index, OnTheRight, Mode, Conjugate, TriStorageOrder, ColMajor, OtherInnerStride >
 
struct  triangular_solve_vector< LhsScalar, RhsScalar, Index, OnTheRight, Mode, Conjugate, StorageOrder >
 
struct  triangular_solve_vector< LhsScalar, RhsScalar, Index, OnTheLeft, Mode, Conjugate, RowMajor >
 
struct  triangular_solve_vector< LhsScalar, RhsScalar, Index, OnTheLeft, Mode, Conjugate, ColMajor >
 
struct  scalar_random_op
 
struct  functor_traits< scalar_random_op< Scalar > >
 
struct  random_default_impl
 
struct  random_impl
 
struct  random_retval
 
struct  eigen_random_device
 
struct  random_bits_impl
 
struct  random_float_impl
 
struct  random_float_impl< Scalar, false >
 
struct  random_longdouble_impl
 
struct  random_longdouble_impl< false >
 
struct  random_float_impl< long double >
 
struct  random_default_impl< Scalar, false, false >
 
struct  random_int_impl
 
struct  random_int_impl< Scalar, false, true >
 
struct  random_int_impl< Scalar, true, true >
 
struct  random_int_impl< Scalar, IsSigned, false >
 
struct  random_default_impl< Scalar, false, true >
 
struct  random_impl< bool >
 
struct  random_default_impl< Scalar, true, false >
 
struct  redux_traits
 
struct  redux_novec_unroller
 
struct  redux_novec_unroller< Func, Evaluator, Start, 1 >
 
struct  redux_novec_unroller< Func, Evaluator, Start, 0 >
 
struct  redux_novec_linear_unroller
 
struct  redux_novec_linear_unroller< Func, Evaluator, Start, 1 >
 
struct  redux_novec_linear_unroller< Func, Evaluator, Start, 0 >
 
struct  redux_vec_unroller
 
struct  redux_vec_unroller< Func, Evaluator, Start, 1 >
 
struct  redux_vec_linear_unroller
 
struct  redux_vec_linear_unroller< Func, Evaluator, Start, 1 >
 
struct  redux_impl
 
struct  redux_impl< Func, Evaluator, DefaultTraversal, NoUnrolling >
 
struct  redux_impl< Func, Evaluator, LinearTraversal, NoUnrolling >
 
struct  redux_impl< Func, Evaluator, DefaultTraversal, CompleteUnrolling >
 
struct  redux_impl< Func, Evaluator, LinearTraversal, CompleteUnrolling >
 
struct  redux_impl< Func, Evaluator, LinearVectorizedTraversal, NoUnrolling >
 
struct  redux_impl< Func, Evaluator, SliceVectorizedTraversal, Unrolling >
 
struct  redux_impl< Func, Evaluator, LinearVectorizedTraversal, CompleteUnrolling >
 
class  redux_evaluator
 
struct  traits< Ref< PlainObjectType_, Options_, StrideType_ > >
 
struct  traits< RefBase< Derived > >
 
struct  traits< Replicate< MatrixType, RowFactor, ColFactor > >
 
struct  traits< Reshaped< XprType, Rows, Cols, Order > >
 
class  ReshapedImpl_dense
 
class  ReshapedImpl_dense< XprType, Rows, Cols, Order, false >
 
class  ReshapedImpl_dense< XprType, Rows, Cols, Order, true >
 
struct  reshaped_evaluator
 
struct  evaluator< Reshaped< ArgType, Rows, Cols, Order > >
 
struct  reshaped_evaluator< ArgType, Rows, Cols, Order, false >
 
struct  reshaped_evaluator< ArgType, Rows, Cols, Order, true >
 
struct  traits< ReturnByValue< Derived > >
 
struct  nested_eval< ReturnByValue< Derived >, n, PlainObject >
 
struct  evaluator< ReturnByValue< Derived > >
 
struct  traits< Reverse< MatrixType, Direction > >
 
struct  reverse_packet_cond< PacketType, false >
 
struct  vectorwise_reverse_inplace_impl
 
struct  vectorwise_reverse_inplace_impl< Vertical >
 
struct  vectorwise_reverse_inplace_impl< Horizontal >
 
struct  traits< Select< ConditionMatrixType, ThenMatrixType, ElseMatrixType > >
 
struct  traits< SelfAdjointView< MatrixType, UpLo > >
 
struct  evaluator_traits< SelfAdjointView< MatrixType, Mode > >
 
class  triangular_dense_assignment_kernel< UpLo, SelfAdjoint, SetOpposite, DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version >
 
struct  traits< SkewSymmetricMatrix3< Scalar_ > >
 
struct  traits< SkewSymmetricWrapper< SkewSymmetricVectorType_ > >
 
struct  storage_kind_to_shape< SkewSymmetricShape >
 
struct  SkewSymmetric2Dense
 
struct  AssignmentKind< DenseShape, SkewSymmetricShape >
 
struct  Assignment< DstXprType, SrcXprType, Functor, SkewSymmetric2Dense >
 
struct  solve_traits
 
struct  solve_traits< Decomposition, RhsType, Dense >
 
struct  traits< Solve< Decomposition, RhsType > >
 
struct  evaluator< Solve< Decomposition, RhsType > >
 
struct  Assignment< DstXprType, Solve< DecType, RhsType >, internal::assign_op< Scalar, Scalar >, Dense2Dense >
 
struct  Assignment< DstXprType, Solve< Transpose< const DecType >, RhsType >, internal::assign_op< Scalar, Scalar >, Dense2Dense >
 
struct  Assignment< DstXprType, Solve< CwiseUnaryOp< internal::scalar_conjugate_op< typename DecType::Scalar >, const Transpose< const DecType > >, RhsType >, internal::assign_op< Scalar, Scalar >, Dense2Dense >
 
struct  solve_assertion
 
struct  solve_assertion< Transpose< Derived > >
 
struct  solve_assertion< CwiseUnaryOp< Eigen::internal::scalar_conjugate_op< Scalar >, const Transpose< Derived > > >
 
struct  generic_xpr_base< Derived, MatrixXpr, SolverStorage >
 
struct  triangular_solve_vector
 
struct  triangular_solve_matrix
 
class  trsolve_traits
 
struct  triangular_solver_selector
 
struct  triangular_solver_selector< Lhs, Rhs, Side, Mode, NoUnrolling, 1 >
 
struct  triangular_solver_selector< Lhs, Rhs, Side, Mode, NoUnrolling, Dynamic >
 
struct  triangular_solver_unroller
 
struct  triangular_solver_unroller< Lhs, Rhs, Mode, LoopIndex, Size, false >
 
struct  triangular_solver_unroller< Lhs, Rhs, Mode, LoopIndex, Size, true >
 
struct  triangular_solver_selector< Lhs, Rhs, OnTheLeft, Mode, CompleteUnrolling, 1 >
 
struct  triangular_solver_selector< Lhs, Rhs, OnTheRight, Mode, CompleteUnrolling, 1 >
 
struct  traits< triangular_solve_retval< Side, TriangularType, Rhs > >
 
struct  triangular_solve_retval
 
struct  indexed_based_stl_iterator_traits
 
class  indexed_based_stl_iterator_base
 
class  indexed_based_stl_reverse_iterator_base
 
class  pointer_based_stl_iterator
 
struct  indexed_based_stl_iterator_traits< generic_randaccess_stl_iterator< XprType_ > >
 
class  generic_randaccess_stl_iterator
 
struct  indexed_based_stl_iterator_traits< subvector_stl_iterator< XprType_, Direction > >
 
class  subvector_stl_iterator
 
struct  indexed_based_stl_iterator_traits< subvector_stl_reverse_iterator< XprType_, Direction > >
 
class  subvector_stl_reverse_iterator
 
class  generic_dense_assignment_kernel< DstEvaluatorTypeT, SrcEvaluatorTypeT, swap_assign_op< typename DstEvaluatorTypeT::Scalar >, Specialized >
 
struct  traits< Transpose< MatrixType > >
 
struct  TransposeImpl_base
 
struct  TransposeImpl_base< MatrixType, false >
 
struct  inplace_transpose_selector
 
struct  inplace_transpose_selector< MatrixType, true, false >
 
struct  inplace_transpose_selector< MatrixType, true, true >
 
struct  inplace_transpose_selector< MatrixType, false, MatchPacketSize >
 
struct  check_transpose_aliasing_compile_time_selector
 
struct  check_transpose_aliasing_compile_time_selector< DestIsTransposed, CwiseBinaryOp< BinOp, DerivedA, DerivedB > >
 
struct  check_transpose_aliasing_run_time_selector
 
struct  check_transpose_aliasing_run_time_selector< Scalar, DestIsTransposed, CwiseBinaryOp< BinOp, DerivedA, DerivedB > >
 
struct  checkTransposeAliasing_impl
 
struct  checkTransposeAliasing_impl< Derived, OtherDerived, false >
 
struct  traits< Transpositions< SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_ > >
 
struct  traits< Map< Transpositions< SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_ >, PacketAccess_ > >
 
struct  traits< TranspositionsWrapper< IndicesType_ > >
 
struct  traits< Transpose< TranspositionsBase< Derived > > >
 
struct  traits< TriangularView< MatrixType, Mode_ > >
 
struct  evaluator_traits< TriangularView< MatrixType, Mode > >
 
struct  unary_evaluator< TriangularView< MatrixType, Mode >, IndexBased >
 
struct  Triangular2Triangular
 
struct  Triangular2Dense
 
struct  Dense2Triangular
 
struct  triangular_assignment_loop
 
class  triangular_dense_assignment_kernel
 
struct  AssignmentKind< TriangularShape, TriangularShape >
 
struct  AssignmentKind< DenseShape, TriangularShape >
 
struct  AssignmentKind< TriangularShape, DenseShape >
 
struct  Assignment< DstXprType, SrcXprType, Functor, Triangular2Triangular >
 
struct  Assignment< DstXprType, SrcXprType, Functor, Triangular2Dense >
 
struct  Assignment< DstXprType, SrcXprType, Functor, Dense2Triangular >
 
struct  triangular_assignment_loop< Kernel, Mode, 0, SetOpposite >
 
struct  triangular_assignment_loop< Kernel, Mode, Dynamic, SetOpposite >
 
struct  Assignment< DstXprType, Product< Lhs, Rhs, DefaultProduct >, internal::assign_op< Scalar, typename Product< Lhs, Rhs, DefaultProduct >::Scalar >, Dense2Triangular >
 
struct  Assignment< DstXprType, Product< Lhs, Rhs, DefaultProduct >, internal::add_assign_op< Scalar, typename Product< Lhs, Rhs, DefaultProduct >::Scalar >, Dense2Triangular >
 
struct  Assignment< DstXprType, Product< Lhs, Rhs, DefaultProduct >, internal::sub_assign_op< Scalar, typename Product< Lhs, Rhs, DefaultProduct >::Scalar >, Dense2Triangular >
 
struct  gemm_pack_rhs
 
struct  gemm_pack_lhs
 
struct  general_matrix_matrix_product
 
struct  general_matrix_vector_product
 
struct  get_factor
 
struct  get_factor< Scalar, typename NumTraits< Scalar >::Real >
 
class  BlasVectorMapper
 
class  BlasLinearMapper
 
class  BlasLinearMapper< Scalar, Index, AlignmentType >
 
class  blas_data_mapper
 
struct  PacketBlockManagement
 
struct  PacketBlockManagement< Index, Scalar, Packet, n, idx, RowMajor >
 
struct  PacketBlockManagement< Index, Scalar, Packet, n, -1, StorageOrder >
 
struct  PacketBlockManagement< Index, Scalar, Packet, n, -1, RowMajor >
 
class  blas_data_mapper< Scalar, Index, StorageOrder, AlignmentType, 1 >
 
class  const_blas_data_mapper
 
struct  blas_traits
 
struct  blas_traits< CwiseUnaryOp< scalar_conjugate_op< Scalar >, NestedXpr > >
 
struct  blas_traits< CwiseBinaryOp< scalar_product_op< Scalar >, const CwiseNullaryOp< scalar_constant_op< Scalar >, Plain >, NestedXpr > >
 
struct  blas_traits< CwiseBinaryOp< scalar_product_op< Scalar >, NestedXpr, const CwiseNullaryOp< scalar_constant_op< Scalar >, Plain > > >
 
struct  blas_traits< CwiseBinaryOp< scalar_product_op< Scalar >, const CwiseNullaryOp< scalar_constant_op< Scalar >, Plain1 >, const CwiseNullaryOp< scalar_constant_op< Scalar >, Plain2 > > >
 
struct  blas_traits< CwiseUnaryOp< scalar_opposite_op< Scalar >, NestedXpr > >
 
struct  blas_traits< Transpose< NestedXpr > >
 
struct  blas_traits< const T >
 
struct  extract_data_selector
 
struct  extract_data_selector< T, false >
 
struct  combine_scalar_factors_impl
 
struct  combine_scalar_factors_impl< bool, Lhs, Rhs >
 
struct  IndexBased
 
struct  IteratorBased
 
struct  traits
 
struct  traits< const T >
 
struct  has_direct_access
 
struct  accessors_level
 
class  kernel_retval_base
 
struct  kernel_retval
 
class  image_retval_base
 
struct  image_retval
 
struct  EnableIf
 
class  product_evaluator
 
struct  scalar_hypot_op
 
struct  scalar_lgamma_op
 Template functor to compute the natural log of the absolute value of Gamma of a scalar. More...
 
struct  scalar_digamma_op
 Template functor to compute psi, the derivative of lgamma of a scalar. More...
 
struct  scalar_erf_op
 Template functor to compute the error function of a scalar. More...
 
struct  scalar_erfc_op
 Template functor to compute the Complementary Error Function of a scalar. More...
 
struct  scalar_ndtri_op
 Template functor to compute the Inverse of the normal distribution function of a scalar. More...
 
struct  scalar_igamma_op
 Template functor to compute the incomplete gamma function igamma(a, x) More...
 
struct  scalar_igammac_op
 Template functor to compute the complementary incomplete gamma function igammac(a, x) More...
 
struct  scalar_zeta_op
 Template functor to compute the Riemann Zeta function of two arguments. More...
 
struct  scalar_betainc_op
 Template functor to compute the incomplete beta integral betainc(a, b, x) More...
 
struct  scalar_bessel_i0_op
 Template functor to compute the modified Bessel function of the first kind of order zero. More...
 
struct  scalar_bessel_i0e_op
 Template functor to compute the exponentially scaled modified Bessel function of the first kind of order zero. More...
 
struct  scalar_bessel_i1_op
 Template functor to compute the modified Bessel function of the first kind of order one. More...
 
struct  scalar_bessel_i1e_op
 Template functor to compute the exponentially scaled modified Bessel function of the first kind of order zero. More...
 
struct  scalar_bessel_j0_op
 Template functor to compute the Bessel function of the second kind of order zero. More...
 
struct  scalar_bessel_y0_op
 Template functor to compute the Bessel function of the second kind of order zero. More...
 
struct  scalar_bessel_j1_op
 Template functor to compute the Bessel function of the first kind of order one. More...
 
struct  scalar_bessel_y1_op
 Template functor to compute the Bessel function of the second kind of order one. More...
 
struct  scalar_bessel_k0_op
 Template functor to compute the modified Bessel function of the second kind of order zero. More...
 
struct  scalar_bessel_k0e_op
 Template functor to compute the exponentially scaled modified Bessel function of the second kind of order zero. More...
 
struct  scalar_bessel_k1_op
 Template functor to compute the modified Bessel function of the second kind of order one. More...
 
struct  scalar_bessel_k1e_op
 Template functor to compute the exponentially scaled modified Bessel function of the second kind of order one. More...
 
struct  inverse_impl
 
struct  cross_impl
 
struct  stem_function
 
struct  eigen_fill_impl
 
struct  eigen_zero_impl
 
struct  symbolic_last_tag
 
struct  all_t
 
struct  SymbolicExpressionEvaluator
 
struct  SymbolicExpressionEvaluator< Expr, SizeAtCompileTime, std::enable_if_t< symbolic::is_symbolic< Expr >::value > >
 
struct  SymbolicExpressionEvaluator< Expr, Dynamic, std::enable_if_t< symbolic::is_symbolic< Expr >::value > >
 
struct  SymbolicExpressionEvaluator< FixedInt< N >, SizeAtCompileTime, void >
 
struct  IndexedViewHelperIndicesWrapper
 
struct  IndexedViewHelper
 
class  ArithmeticSequenceRange
 
struct  IndexedViewHelperIndicesWrapper< ArithmeticSequence< FirstType, SizeType, IncrType >, NestedSizeAtCompileTime, void >
 
struct  IndexedViewHelper< ArithmeticSequenceRange< FirstAtCompileTime_, SizeAtCompileTime_, IncrAtCompileTime_ >, void >
 
class  SingleRange
 
struct  is_single_range
 
struct  is_single_range< SingleRange< ValueAtCompileTime > >
 
struct  IndexedViewHelperIndicesWrapper< SingleIndex, NestedSizeAtCompileTime, std::enable_if_t< std::is_integral< SingleIndex >::value||symbolic::is_symbolic< SingleIndex >::value > >
 
struct  IndexedViewHelperIndicesWrapper< FixedInt< N >, NestedSizeAtCompileTime, void >
 
struct  IndexedViewHelper< SingleRange< ValueAtCompileTime >, void >
 
class  AllRange
 
struct  IndexedViewHelperIndicesWrapper< all_t, NestedSizeAtCompileTime, void >
 
struct  IndexedViewHelper< AllRange< SizeAtCompileTime_ >, void >
 
struct  IndexedViewSelector
 
struct  IndexedViewSelector< Derived, RowIndices, ColIndices, std::enable_if_t< internal::traits< IndexedView< Derived, IvcType< RowIndices, Derived::RowsAtCompileTime >, IvcType< ColIndices, Derived::ColsAtCompileTime > > >::ReturnAsIndexedView > >
 
struct  IndexedViewSelector< Derived, RowIndices, ColIndices, std::enable_if_t< internal::traits< IndexedView< Derived, IvcType< RowIndices, Derived::RowsAtCompileTime >, IvcType< ColIndices, Derived::ColsAtCompileTime > > >::ReturnAsBlock > >
 
struct  IndexedViewSelector< Derived, RowIndices, ColIndices, std::enable_if_t< internal::traits< IndexedView< Derived, IvcType< RowIndices, Derived::RowsAtCompileTime >, IvcType< ColIndices, Derived::ColsAtCompileTime > > >::ReturnAsScalar > >
 
struct  VectorIndexedViewSelector
 
struct  VectorIndexedViewSelector< Derived, Indices, std::enable_if_t<!internal::is_single_range< IvcType< Indices, Derived::SizeAtCompileTime > >::value &&internal::IndexedViewHelper< IvcType< Indices, Derived::SizeAtCompileTime > >::IncrAtCompileTime !=1 > >
 
struct  VectorIndexedViewSelector< Derived, Indices, std::enable_if_t<!internal::is_single_range< IvcType< Indices, Derived::SizeAtCompileTime > >::value &&internal::IndexedViewHelper< IvcType< Indices, Derived::SizeAtCompileTime > >::IncrAtCompileTime==1 > >
 
struct  VectorIndexedViewSelector< Derived, Indices, std::enable_if_t< internal::is_single_range< IvcType< Indices, Derived::SizeAtCompileTime > >::value > >
 
class  FixedInt
 
class  VariableAndFixedInt
 
struct  get_fixed_value
 
struct  get_fixed_value< FixedInt< N >, Default >
 
struct  get_fixed_value< VariableAndFixedInt< N >, Default >
 
struct  get_fixed_value< variable_if_dynamic< T, N >, Default >
 
struct  cleanup_index_type
 
struct  cleanup_index_type< T, DynamicKey, std::enable_if_t< internal::is_integral< T >::value > >
 
struct  cleanup_index_type< VariableAndFixedInt< N >, DynamicKey >
 
struct  cleanup_index_type< VariableAndFixedInt< DynamicKey >, DynamicKey >
 
struct  cleanup_index_type< std::integral_constant< int, N >, DynamicKey >
 
struct  smart_copy_helper
 
struct  smart_copy_helper< T, true >
 
struct  smart_copy_helper< T, false >
 
struct  smart_memmove_helper
 
struct  smart_memmove_helper< T, true >
 
struct  smart_memmove_helper< T, false >
 
class  aligned_stack_memory_handler
 
class  scoped_array
 
struct  true_type
 
struct  false_type
 
struct  bool_constant
 
struct  bool_constant< true >
 
struct  bool_constant< false >
 
struct  remove_all
 
struct  remove_all< const T >
 
struct  remove_all< T const & >
 
struct  remove_all< T & >
 
struct  remove_all< T const * >
 
struct  remove_all< T * >
 
struct  is_arithmetic
 
struct  is_arithmetic< float >
 
struct  is_arithmetic< double >
 
struct  is_arithmetic< long double >
 
struct  is_arithmetic< bool >
 
struct  is_arithmetic< char >
 
struct  is_arithmetic< signed char >
 
struct  is_arithmetic< unsigned char >
 
struct  is_arithmetic< signed short >
 
struct  is_arithmetic< unsigned short >
 
struct  is_arithmetic< signed int >
 
struct  is_arithmetic< unsigned int >
 
struct  is_arithmetic< signed long >
 
struct  is_arithmetic< unsigned long >
 
struct  is_same
 
struct  is_same< T, T >
 
struct  is_void
 
struct  is_arithmetic< signed long long >
 
struct  is_arithmetic< unsigned long long >
 
struct  is_const
 
struct  is_const< T const >
 
struct  add_const_on_value_type
 
struct  add_const_on_value_type< T & >
 
struct  add_const_on_value_type< T * >
 
struct  add_const_on_value_type< T *const >
 
struct  add_const_on_value_type< T const *const >
 
class  noncopyable
 
struct  array_size
 
struct  array_size< T, std::enable_if_t<((T::SizeAtCompileTime &0)==0)> >
 
struct  array_size< const T(&)[N]>
 
struct  array_size< T(&)[N]>
 
struct  array_size< const std::array< T, N > >
 
struct  array_size< std::array< T, N > >
 
struct  result_of
 
struct  invoke_result
 
struct  meta_yes
 
struct  meta_no
 
struct  has_ReturnType
 
struct  has_nullary_operator
 
struct  has_unary_operator
 
struct  has_binary_operator
 
class  meta_sqrt
 
class  meta_sqrt< Y, InfX, SupX, true >
 
struct  meta_least_common_multiple
 
struct  meta_least_common_multiple< A, B, K, Done, false >
 
struct  meta_least_common_multiple< A, B, K, true, true >
 
struct  scalar_product_traits
 
struct  aligned_storage
 
struct  is_identically_zero_impl
 
struct  type_list
 
struct  type_list< t, tt... >
 
struct  numeric_list
 
struct  numeric_list< T, n, nn... >
 
struct  gen_numeric_list
 
struct  gen_numeric_list< T, 0, start, ii... >
 
struct  gen_numeric_list_reversed
 
struct  gen_numeric_list_reversed< T, 0, start, ii... >
 
struct  gen_numeric_list_swapped_pair
 
struct  gen_numeric_list_swapped_pair< T, 0, a, b, start, ii... >
 
struct  gen_numeric_list_repeated
 
struct  gen_numeric_list_repeated< T, 0, V, nn... >
 
struct  concat
 
struct  concat< type_list< as... >, type_list< bs... > >
 
struct  concat< numeric_list< T, as... >, numeric_list< T, bs... > >
 
struct  mconcat
 
struct  mconcat< a >
 
struct  mconcat< a, b >
 
struct  mconcat< a, b, cs... >
 
struct  take
 
struct  take< n, type_list< a, as... > >
 
struct  take< n, type_list<> >
 
struct  take< 0, type_list< a, as... > >
 
struct  take< 0, type_list<> >
 
struct  take< n, numeric_list< T, a, as... > >
 
struct  take< 0, numeric_list< T, a, as... > >
 
struct  take< 0, numeric_list< T > >
 
struct  h_skip_helper_numeric
 
struct  h_skip_helper_numeric< T, n, i, ii... >
 
struct  h_skip_helper_numeric< T, 0, i, ii... >
 
struct  h_skip_helper_numeric< T, n >
 
struct  h_skip_helper_numeric< T, 0 >
 
struct  h_skip_helper_type
 
struct  h_skip_helper_type< n, t, tt... >
 
struct  h_skip_helper_type< 0, t, tt... >
 
struct  h_skip_helper_type< n >
 
struct  h_skip_helper_type< 0 >
 
struct  h_skip
 
struct  skip
 
struct  slice
 
struct  get
 
struct  get< n, type_list< a, as... > >
 
struct  get< 0, type_list< a, as... > >
 
struct  get< n, numeric_list< T, a, as... > >
 
struct  get< 0, numeric_list< T, a, as... > >
 
struct  id_numeric
 
struct  id_type
 
struct  is_same_gf
 
struct  h_apply_op_helper
 
struct  h_apply_op_helper< true, op, additional_param, values... >
 
struct  h_apply_op
 
struct  apply_op_from_left
 
struct  apply_op_from_right
 
struct  contained_in_list
 
struct  contained_in_list< test, check_against, h_list, true >
 
struct  contained_in_list< test, check_against, type_list< a, as... >, false >
 
struct  contained_in_list< test, check_against, type_list< empty... >, false >
 
struct  contained_in_list_gf
 
struct  contained_in_list_gf< test, check_against, h_list, default_flags, true, last_check_flags >
 
struct  contained_in_list_gf< test, check_against, type_list< a, as... >, default_flags, false, last_check_flags >
 
struct  contained_in_list_gf< test, check_against, type_list< empty... >, default_flags, false, last_check_flags >
 
struct  reduce
 
struct  reduce< Reducer >
 
struct  reduce< Reducer, A >
 
struct  reduce< Reducer, A, Ts... >
 
struct  sum_op
 
struct  product_op
 
struct  logical_and_op
 
struct  logical_or_op
 
struct  equal_op
 
struct  not_equal_op
 
struct  lesser_op
 
struct  lesser_equal_op
 
struct  greater_op
 
struct  greater_equal_op
 
struct  not_op
 
struct  negation_op
 
struct  greater_equal_zero_op
 
struct  h_array_reduce
 
struct  h_array_reduce< Reducer, T, N, 0 >
 
struct  h_array_reduce< Reducer, T, 0 >
 
struct  h_repeat
 
struct  h_instantiate_by_c_array
 
struct  h_instantiate_by_c_array< InstType, ArrType, N, false, Ps... >
 
struct  h_instantiate_by_c_array< InstType, ArrType, N, true, Ps... >
 
struct  h_instantiate_by_c_array< InstType, ArrType, 0, false, Ps... >
 
struct  h_instantiate_by_c_array< InstType, ArrType, 0, true, Ps... >
 
struct  get_compiletime_reshape_size
 
struct  get_compiletime_reshape_size< AutoSize_t, OtherSize, TotalSize >
 
struct  serialize_impl
 
struct  serialize_impl< N, T1, Ts... >
 
struct  serialize_impl< 0 >
 
struct  convert_index_impl
 
struct  convert_index_impl< IndexDest, IndexSrc, true, true, true, false >
 
struct  convert_index_impl< IndexDest, IndexSrc, true, false, true, true >
 
struct  is_valid_index_type
 
struct  valid_indexed_view_overload
 
struct  promote_scalar_arg
 
struct  promote_scalar_arg< S, T, true >
 
struct  promote_scalar_arg_unsupported
 
struct  promote_scalar_arg< S, T, false >
 
struct  promote_scalar_arg_unsupported< S, T, PromotedType, true, true >
 
struct  promote_scalar_arg_unsupported< ExprScalar, T, PromotedType, false, true >
 
struct  promote_scalar_arg_unsupported< S, T, PromotedType, ConvertibleToLiteral, false >
 
struct  promote_scalar_arg_unsupported< S, T, S, false, true >
 
class  no_assignment_operator
 
struct  promote_index_type
 
class  variable_if_dynamic
 
class  variable_if_dynamic< T, Dynamic >
 
class  variable_if_dynamicindex
 
class  variable_if_dynamicindex< T, DynamicIndex >
 
struct  functor_traits
 
struct  nested_functor_cost
 
struct  nested_functor_cost< Matrix< Scalar, Rows, Cols, Options, MaxRows, MaxCols > >
 
struct  nested_functor_cost< Array< Scalar, Rows, Cols, Options, MaxRows, MaxCols > >
 
struct  nested_functor_cost< Map< PlainObjectType, MapOptions, StrideType > >
 
struct  nested_functor_cost< CwiseUnaryOp< Func, Xpr > >
 
struct  nested_functor_cost< CwiseNullaryOp< Func, Xpr > >
 
struct  nested_functor_cost< CwiseBinaryOp< Func, LhsXpr, RhsXpr > >
 
struct  nested_functor_cost< CwiseTernaryOp< Func, LhsXpr, MidXpr, RhsXpr > >
 
struct  functor_cost
 
struct  find_best_packet_helper
 
struct  find_best_packet_helper< Size, PacketType, true >
 
struct  find_best_packet_helper< Size, PacketType, false >
 
struct  find_best_packet
 
struct  find_packet_by_size_helper
 
struct  find_packet_by_size_helper< Size, PacketType, true >
 
struct  find_packet_by_size_helper< Size, PacketType, false >
 
struct  find_packet_by_size
 
struct  find_packet_by_size< T, 1 >
 
struct  compute_default_alignment
 
struct  compute_default_alignment< T, Dynamic >
 
class  make_proper_matrix_type
 
struct  size_of_xpr_at_compile_time
 
struct  plain_matrix_type
 
struct  plain_matrix_type_dense
 
struct  plain_matrix_type< T, Dense >
 
struct  plain_matrix_type< T, DiagonalShape >
 
struct  plain_matrix_type< T, SkewSymmetricShape >
 
struct  plain_matrix_type_dense< T, MatrixXpr, Flags >
 
struct  plain_matrix_type_dense< T, ArrayXpr, Flags >
 
struct  eval
 
struct  eval< T, Dense >
 
struct  eval< T, DiagonalShape >
 
struct  eval< T, SkewSymmetricShape >
 
struct  eval< Matrix< Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_ >, Dense >
 
struct  eval< Array< Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_ >, Dense >
 
struct  plain_object_eval
 
struct  plain_object_eval< T, Dense >
 
struct  plain_matrix_type_column_major
 
struct  plain_matrix_type_row_major
 
struct  ref_selector
 
struct  transfer_constness
 
struct  nested_eval
 
struct  dense_xpr_base
 
struct  dense_xpr_base< Derived, MatrixXpr >
 
struct  dense_xpr_base< Derived, ArrayXpr >
 
struct  generic_xpr_base
 
struct  generic_xpr_base< Derived, XprKind, Dense >
 
struct  cast_return_type
 
struct  promote_storage_type
 
struct  promote_storage_type< A, A >
 
struct  promote_storage_type< A, const A >
 
struct  promote_storage_type< const A, A >
 
struct  cwise_promote_storage_type
 
struct  cwise_promote_storage_type< A, A, Functor >
 
struct  cwise_promote_storage_type< Dense, Dense, Functor >
 
struct  cwise_promote_storage_type< A, Dense, Functor >
 
struct  cwise_promote_storage_type< Dense, B, Functor >
 
struct  cwise_promote_storage_type< Sparse, Dense, Functor >
 
struct  cwise_promote_storage_type< Dense, Sparse, Functor >
 
struct  cwise_promote_storage_order
 
struct  cwise_promote_storage_order< LhsKind, Sparse, LhsOrder, RhsOrder >
 
struct  cwise_promote_storage_order< Sparse, RhsKind, LhsOrder, RhsOrder >
 
struct  cwise_promote_storage_order< Sparse, Sparse, Order, Order >
 
struct  product_promote_storage_type
 
struct  product_promote_storage_type< A, A, ProductTag >
 
struct  product_promote_storage_type< Dense, Dense, ProductTag >
 
struct  product_promote_storage_type< A, Dense, ProductTag >
 
struct  product_promote_storage_type< Dense, B, ProductTag >
 
struct  product_promote_storage_type< A, DiagonalShape, ProductTag >
 
struct  product_promote_storage_type< DiagonalShape, B, ProductTag >
 
struct  product_promote_storage_type< Dense, DiagonalShape, ProductTag >
 
struct  product_promote_storage_type< DiagonalShape, Dense, ProductTag >
 
struct  product_promote_storage_type< A, SkewSymmetricShape, ProductTag >
 
struct  product_promote_storage_type< SkewSymmetricShape, B, ProductTag >
 
struct  product_promote_storage_type< Dense, SkewSymmetricShape, ProductTag >
 
struct  product_promote_storage_type< SkewSymmetricShape, Dense, ProductTag >
 
struct  product_promote_storage_type< SkewSymmetricShape, SkewSymmetricShape, ProductTag >
 
struct  product_promote_storage_type< A, PermutationStorage, ProductTag >
 
struct  product_promote_storage_type< PermutationStorage, B, ProductTag >
 
struct  product_promote_storage_type< Dense, PermutationStorage, ProductTag >
 
struct  product_promote_storage_type< PermutationStorage, Dense, ProductTag >
 
struct  plain_row_type
 
struct  plain_col_type
 
struct  plain_diag_type
 
struct  plain_constant_type
 
struct  is_lvalue
 
struct  is_diagonal
 
struct  is_diagonal< DiagonalBase< T > >
 
struct  is_diagonal< DiagonalWrapper< T > >
 
struct  is_diagonal< DiagonalMatrix< T, S > >
 
struct  is_identity
 
struct  is_identity< CwiseNullaryOp< internal::scalar_identity_op< typename T::Scalar >, T > >
 
struct  glue_shapes
 
struct  glue_shapes< DenseShape, TriangularShape >
 
struct  possibly_same_dense
 
struct  scalar_div_cost
 
struct  scalar_div_cost< std::complex< T >, Vectorized >
 
struct  scalar_div_cost< signed long, Vectorized, std::conditional_t< sizeof(long)==8, void, false_type > >
 
struct  scalar_div_cost< unsigned long, Vectorized, std::conditional_t< sizeof(long)==8, void, false_type > >
 
struct  is_block_xpr
 
struct  is_block_xpr< Block< XprType, BlockRows, BlockCols, InnerPanel > >
 
struct  is_block_xpr< const Block< XprType, BlockRows, BlockCols, InnerPanel > >
 
struct  block_xpr_helper
 
struct  block_xpr_helper< Block< XprType, BlockRows, BlockCols, InnerPanel > >
 
struct  block_xpr_helper< const Block< XprType, BlockRows, BlockCols, InnerPanel > >
 
struct  is_matrix_base_xpr
 
struct  is_permutation_base_xpr
 
struct  traits< VectorBlock< VectorType, Size > >
 
struct  traits< PartialReduxExpr< MatrixType, MemberOp, Direction > >
 
struct  member_lpnorm
 
struct  member_redux
 
struct  visitor_impl
 
struct  short_circuit_eval_impl
 
struct  short_circuit_eval_impl< Visitor, true >
 
struct  visitor_impl< Visitor, Derived, UnrollCount, Vectorize, false, ShortCircuitEvaluation >
 
struct  visitor_impl< Visitor, Derived, UnrollCount, Vectorize, true, ShortCircuitEvaluation >
 
struct  visitor_impl< Visitor, Derived, Dynamic, false, false, ShortCircuitEvaluation >
 
struct  visitor_impl< Visitor, Derived, Dynamic, true, false, ShortCircuitEvaluation >
 
struct  visitor_impl< Visitor, Derived, Dynamic, false, true, ShortCircuitEvaluation >
 
struct  visitor_impl< Visitor, Derived, Dynamic, true, true, ShortCircuitEvaluation >
 
class  visitor_evaluator
 
struct  visit_impl
 
struct  coeff_visitor
 Base class to implement min and max visitors. More...
 
struct  minmax_compare
 
struct  minmax_compare< Scalar, NaNPropagation, false >
 
struct  minmax_coeff_visitor
 
struct  minmax_coeff_visitor< Derived, is_min, PropagateNumbers, false >
 
struct  minmax_coeff_visitor< Derived, is_min, NaNPropagation, false >
 
struct  functor_traits< minmax_coeff_visitor< Derived, is_min, NaNPropagation > >
 
struct  all_visitor
 
struct  functor_traits< all_visitor< Scalar > >
 
struct  any_visitor
 
struct  functor_traits< any_visitor< Scalar > >
 
struct  count_visitor
 
struct  functor_traits< count_visitor< Scalar > >
 
struct  complex_schur_reduce_to_hessenberg
 
struct  complex_schur_reduce_to_hessenberg< MatrixType, false >
 
struct  HessenbergDecompositionMatrixHReturnType
 Expression type for return value of HessenbergDecomposition::matrixH() More...
 
struct  traits< HessenbergDecompositionMatrixHReturnType< MatrixType > >
 
struct  eigenvalues_selector
 
struct  eigenvalues_selector< Derived, false >
 
struct  direct_selfadjoint_eigenvalues
 
struct  direct_selfadjoint_eigenvalues< SolverType, 3, false >
 
struct  direct_selfadjoint_eigenvalues< SolverType, 2, false >
 
struct  TridiagonalizationMatrixTReturnType
 Expression type for return value of Tridiagonalization::matrixT() More...
 
struct  traits< TridiagonalizationMatrixTReturnType< MatrixType > >
 
struct  tridiagonalization_inplace_selector
 
struct  tridiagonalization_inplace_selector< MatrixType, 3, false >
 
struct  tridiagonalization_inplace_selector< MatrixType, 1, IsComplex >
 
struct  traits< AngleAxis< Scalar_ > >
 
struct  quat_product< Architecture::Target, Derived, OtherDerived, float >
 
struct  quat_conj< Architecture::Target, Derived, float >
 
struct  cross3_impl< Architecture::Target, VectorLhs, VectorRhs, float, true >
 
struct  traits< Homogeneous< MatrixType, Direction > >
 
struct  homogeneous_left_product_impl
 
struct  homogeneous_right_product_impl
 
struct  take_matrix_for_product
 
struct  take_matrix_for_product< Transform< Scalar, Dim, Mode, Options > >
 
struct  take_matrix_for_product< Transform< Scalar, Dim, Projective, Options > >
 
struct  traits< homogeneous_left_product_impl< Homogeneous< MatrixType, Vertical >, Lhs > >
 
struct  homogeneous_left_product_impl< Homogeneous< MatrixType, Vertical >, Lhs >
 
struct  traits< homogeneous_right_product_impl< Homogeneous< MatrixType, Horizontal >, Rhs > >
 
struct  homogeneous_right_product_impl< Homogeneous< MatrixType, Horizontal >, Rhs >
 
struct  evaluator_traits< Homogeneous< ArgType, Direction > >
 
struct  AssignmentKind< DenseShape, HomogeneousShape >
 
struct  unary_evaluator< Homogeneous< ArgType, Direction >, IndexBased >
 
struct  Assignment< DstXprType, Homogeneous< ArgType, Vertical >, internal::assign_op< Scalar, typename ArgType::Scalar >, Dense2Dense >
 
struct  Assignment< DstXprType, Homogeneous< ArgType, Horizontal >, internal::assign_op< Scalar, typename ArgType::Scalar >, Dense2Dense >
 
struct  generic_product_impl< Homogeneous< LhsArg, Horizontal >, Rhs, HomogeneousShape, DenseShape, ProductTag >
 
struct  homogeneous_right_product_refactoring_helper
 
struct  product_evaluator< Product< Lhs, Rhs, LazyProduct >, ProductTag, HomogeneousShape, DenseShape >
 
struct  generic_product_impl< Lhs, Homogeneous< RhsArg, Vertical >, DenseShape, HomogeneousShape, ProductTag >
 
struct  generic_product_impl< Lhs, Homogeneous< RhsArg, Vertical >, TriangularShape, HomogeneousShape, ProductTag >
 
struct  homogeneous_left_product_refactoring_helper
 
struct  product_evaluator< Product< Lhs, Rhs, LazyProduct >, ProductTag, DenseShape, HomogeneousShape >
 
struct  generic_product_impl< Transform< Scalar, Dim, Mode, Options >, Homogeneous< RhsArg, Vertical >, DenseShape, HomogeneousShape, ProductTag >
 
struct  permutation_matrix_product< ExpressionType, Side, Transposed, HomogeneousShape >
 
struct  cross_impl< Derived, OtherDerived, 2 >
 
struct  cross3_impl
 
struct  unitOrthogonal_selector
 
struct  unitOrthogonal_selector< Derived, 3 >
 
struct  unitOrthogonal_selector< Derived, 2 >
 
struct  quaternionbase_assign_impl
 
struct  traits< Quaternion< Scalar_, Options_ > >
 
struct  traits< Map< Quaternion< Scalar_ >, Options_ > >
 
struct  traits< Map< const Quaternion< Scalar_ >, Options_ > >
 
struct  quat_product
 
struct  quat_conj
 
struct  quaternionbase_assign_impl< Other, 3, 3 >
 
struct  quaternionbase_assign_impl< Other, 4, 1 >
 
struct  traits< Rotation2D< Scalar_ > >
 
struct  rotation_base_generic_product_selector
 
struct  rotation_base_generic_product_selector< RotationDerived, MatrixType, false >
 
struct  rotation_base_generic_product_selector< RotationDerived, DiagonalMatrix< Scalar, Dim, MaxDim >, false >
 
struct  rotation_base_generic_product_selector< RotationDerived, OtherVectorType, true >
 
struct  uniformscaling_times_affine_returntype
 
struct  transform_traits
 
struct  transform_right_product_impl
 
struct  transform_left_product_impl
 
struct  transform_transform_product_impl
 
struct  transform_construct_from_matrix
 
struct  transform_take_affine_part
 
struct  traits< Transform< Scalar_, Dim_, Mode_, Options_ > >
 
struct  transform_make_affine
 
struct  transform_rotation_impl
 
struct  transform_rotation_impl< Isometry >
 
struct  transform_make_affine< AffineCompact >
 
struct  projective_transform_inverse
 
struct  projective_transform_inverse< TransformType, Projective >
 
struct  transform_take_affine_part< Transform< Scalar, Dim, AffineCompact, Options > >
 
struct  transform_construct_from_matrix< Other, Mode, Options, Dim, HDim, Dim, Dim >
 
struct  transform_construct_from_matrix< Other, Mode, Options, Dim, HDim, Dim, HDim >
 
struct  transform_construct_from_matrix< Other, Mode, Options, Dim, HDim, HDim, HDim >
 
struct  transform_construct_from_matrix< Other, AffineCompact, Options, Dim, HDim, HDim, HDim >
 
struct  transform_product_result
 
struct  transform_right_product_impl< TransformType, MatrixType, 0, RhsCols >
 
struct  transform_right_product_impl< TransformType, MatrixType, 1, RhsCols >
 
struct  transform_right_product_impl< TransformType, MatrixType, 2, RhsCols >
 
struct  transform_right_product_impl< TransformType, MatrixType, 2, 1 >
 
struct  transform_left_product_impl< Other, Mode, Options, Dim, HDim, HDim, HDim >
 
struct  transform_left_product_impl< Other, AffineCompact, Options, Dim, HDim, HDim, HDim >
 
struct  transform_left_product_impl< Other, Mode, Options, Dim, HDim, Dim, HDim >
 
struct  transform_left_product_impl< Other, AffineCompact, Options, Dim, HDim, Dim, HDim >
 
struct  transform_left_product_impl< Other, Mode, Options, Dim, HDim, Dim, Dim >
 
struct  transform_transform_product_impl< Transform< Scalar, Dim, LhsMode, LhsOptions >, Transform< Scalar, Dim, RhsMode, RhsOptions >, false >
 
struct  transform_transform_product_impl< Transform< Scalar, Dim, LhsMode, LhsOptions >, Transform< Scalar, Dim, RhsMode, RhsOptions >, true >
 
struct  transform_transform_product_impl< Transform< Scalar, Dim, AffineCompact, LhsOptions >, Transform< Scalar, Dim, Projective, RhsOptions >, true >
 
struct  transform_transform_product_impl< Transform< Scalar, Dim, Projective, LhsOptions >, Transform< Scalar, Dim, AffineCompact, RhsOptions >, true >
 
struct  umeyama_transform_matrix_type
 
struct  decrement_size
 
struct  traits< HouseholderSequence< VectorsType, CoeffsType, Side > >
 
struct  HouseholderSequenceShape
 
struct  evaluator_traits< HouseholderSequence< VectorsType, CoeffsType, Side > >
 
struct  hseq_side_dependent_impl
 
struct  hseq_side_dependent_impl< VectorsType, CoeffsType, OnTheRight >
 
struct  matrix_type_times_scalar_type
 
struct  traits< BiCGSTAB< MatrixType_, Preconditioner_ > >
 
struct  traits< ConjugateGradient< MatrixType_, UpLo_, Preconditioner_ > >
 
struct  is_ref_compatible_impl
 
struct  is_ref_compatible
 
class  generic_matrix_wrapper
 
class  generic_matrix_wrapper< MatrixType, false >
 
class  generic_matrix_wrapper< MatrixType, true >
 
struct  traits< LeastSquaresConjugateGradient< MatrixType_, Preconditioner_ > >
 
struct  traits< SolveWithGuess< Decomposition, RhsType, GuessType > >
 
struct  evaluator< SolveWithGuess< Decomposition, RhsType, GuessType > >
 
struct  Assignment< DstXprType, SolveWithGuess< DecType, RhsType, GuessType >, internal::assign_op< Scalar, Scalar >, Dense2Dense >
 
struct  apply_rotation_in_the_plane_selector
 
struct  apply_rotation_in_the_plane_selector< Scalar, OtherScalar, SizeAtCompileTime, MinAlignment, true >
 
struct  compute_inverse_size4< Architecture::Target, float, MatrixType, ResultType >
 
struct  compute_inverse_size4< Architecture::Target, double, MatrixType, ResultType >
 
struct  determinant_impl
 
struct  determinant_impl< Derived, 1 >
 
struct  determinant_impl< Derived, 2 >
 
struct  determinant_impl< Derived, 3 >
 
struct  determinant_impl< Derived, 4 >
 
struct  traits< FullPivLU< MatrixType_, PermutationIndex_ > >
 
struct  kernel_retval< FullPivLU< MatrixType_, PermutationIndex_ > >
 
struct  image_retval< FullPivLU< MatrixType_, PermutationIndex_ > >
 
struct  Assignment< DstXprType, Inverse< FullPivLU< MatrixType, PermutationIndex > >, internal::assign_op< typename DstXprType::Scalar, typename FullPivLU< MatrixType, PermutationIndex >::Scalar >, Dense2Dense >
 
struct  compute_inverse
 
struct  compute_inverse_and_det_with_check
 
struct  compute_inverse< MatrixType, ResultType, 1 >
 
struct  compute_inverse_and_det_with_check< MatrixType, ResultType, 1 >
 
struct  compute_inverse< MatrixType, ResultType, 2 >
 
struct  compute_inverse_and_det_with_check< MatrixType, ResultType, 2 >
 
struct  compute_inverse< MatrixType, ResultType, 3 >
 
struct  compute_inverse_and_det_with_check< MatrixType, ResultType, 3 >
 
struct  compute_inverse_size4
 
struct  compute_inverse< MatrixType, ResultType, 4 >
 
struct  compute_inverse_and_det_with_check< MatrixType, ResultType, 4 >
 
struct  Assignment< DstXprType, Inverse< XprType >, internal::assign_op< typename DstXprType::Scalar, typename XprType::Scalar >, Dense2Dense >
 
struct  traits< PartialPivLU< MatrixType_, PermutationIndex_ > >
 
struct  enable_if_ref
 
struct  enable_if_ref< Ref< T >, Derived >
 
struct  partial_lu_impl
 
struct  Assignment< DstXprType, Inverse< PartialPivLU< MatrixType, PermutationIndex > >, internal::assign_op< typename DstXprType::Scalar, typename PartialPivLU< MatrixType, PermutationIndex >::Scalar >, Dense2Dense >
 
struct  traits< image_retval_base< DecompositionType > >
 
struct  traits< kernel_retval_base< DecompositionType > >
 
struct  pardiso_run_selector
 
struct  pardiso_run_selector< long long int >
 
struct  pardiso_traits
 
struct  pardiso_traits< PardisoLU< MatrixType_ > >
 
struct  pardiso_traits< PardisoLLT< MatrixType_, Options > >
 
struct  pardiso_traits< PardisoLDLT< MatrixType_, Options > >
 
struct  pastix_traits
 
struct  pastix_traits< PastixLU< MatrixType_ > >
 
struct  pastix_traits< PastixLLT< MatrixType_, Options > >
 
struct  pastix_traits< PastixLDLT< MatrixType_, Options > >
 
struct  traits< ColPivHouseholderQR< MatrixType_, PermutationIndex_ > >
 
struct  Assignment< DstXprType, Inverse< ColPivHouseholderQR< MatrixType, PermutationIndex > >, internal::assign_op< typename DstXprType::Scalar, typename ColPivHouseholderQR< MatrixType, PermutationIndex >::Scalar >, Dense2Dense >
 
struct  traits< CompleteOrthogonalDecomposition< MatrixType_, PermutationIndex_ > >
 
struct  traits< Inverse< CompleteOrthogonalDecomposition< MatrixType, PermutationIndex > > >
 
struct  Assignment< DstXprType, Inverse< CompleteOrthogonalDecomposition< MatrixType, PermutationIndex > >, internal::assign_op< typename DstXprType::Scalar, typename CompleteOrthogonalDecomposition< MatrixType, PermutationIndex >::Scalar >, Dense2Dense >
 
struct  traits< FullPivHouseholderQR< MatrixType_, PermutationIndex_ > >
 
struct  FullPivHouseholderQRMatrixQReturnType
 Expression type for return value of FullPivHouseholderQR::matrixQ() More...
 
struct  traits< FullPivHouseholderQRMatrixQReturnType< MatrixType, PermutationIndex > >
 
struct  Assignment< DstXprType, Inverse< FullPivHouseholderQR< MatrixType, PermutationIndex > >, internal::assign_op< typename DstXprType::Scalar, typename FullPivHouseholderQR< MatrixType, PermutationIndex >::Scalar >, Dense2Dense >
 
struct  traits< HouseholderQR< MatrixType_ > >
 
struct  householder_determinant
 
struct  householder_determinant< HCoeffs, Scalar, false >
 
struct  householder_qr_inplace_blocked
 
struct  simplicial_cholesky_grab_input
 
struct  simplicial_cholesky_grab_input< MatrixType, MatrixType >
 
struct  traits< SimplicialLLT< MatrixType_, UpLo_, Ordering_ > >
 
struct  traits< SimplicialLDLT< MatrixType_, UpLo_, Ordering_ > >
 
struct  traits< SimplicialNonHermitianLLT< MatrixType_, UpLo_, Ordering_ > >
 
struct  traits< SimplicialNonHermitianLDLT< MatrixType_, UpLo_, Ordering_ > >
 
struct  traits< SimplicialCholesky< MatrixType_, UpLo_, Ordering_ > >
 
struct  simpl_chol_helper
 
class  AmbiVector
 
class  CompressedStorage
 
struct  conservative_sparse_sparse_product_selector
 
struct  conservative_sparse_sparse_product_selector< Lhs, Rhs, ResultType, ColMajor, ColMajor, ColMajor >
 
struct  conservative_sparse_sparse_product_selector< Lhs, Rhs, ResultType, RowMajor, ColMajor, ColMajor >
 
struct  conservative_sparse_sparse_product_selector< Lhs, Rhs, ResultType, ColMajor, RowMajor, ColMajor >
 
struct  conservative_sparse_sparse_product_selector< Lhs, Rhs, ResultType, RowMajor, RowMajor, ColMajor >
 
struct  conservative_sparse_sparse_product_selector< Lhs, Rhs, ResultType, ColMajor, ColMajor, RowMajor >
 
struct  conservative_sparse_sparse_product_selector< Lhs, Rhs, ResultType, RowMajor, ColMajor, RowMajor >
 
struct  conservative_sparse_sparse_product_selector< Lhs, Rhs, ResultType, ColMajor, RowMajor, RowMajor >
 
struct  conservative_sparse_sparse_product_selector< Lhs, Rhs, ResultType, RowMajor, RowMajor, RowMajor >
 
struct  sparse_sparse_to_dense_product_selector
 
struct  sparse_sparse_to_dense_product_selector< Lhs, Rhs, ResultType, ColMajor, ColMajor >
 
struct  sparse_sparse_to_dense_product_selector< Lhs, Rhs, ResultType, RowMajor, ColMajor >
 
struct  sparse_sparse_to_dense_product_selector< Lhs, Rhs, ResultType, ColMajor, RowMajor >
 
struct  sparse_sparse_to_dense_product_selector< Lhs, Rhs, ResultType, RowMajor, RowMajor >
 
struct  storage_kind_to_evaluator_kind< Sparse >
 
struct  storage_kind_to_shape< Sparse >
 
struct  Sparse2Sparse
 
struct  Sparse2Dense
 
struct  AssignmentKind< SparseShape, SparseShape >
 
struct  AssignmentKind< SparseShape, SparseTriangularShape >
 
struct  AssignmentKind< DenseShape, SparseShape >
 
struct  AssignmentKind< DenseShape, SparseTriangularShape >
 
struct  Assignment< DstXprType, SrcXprType, Functor, Sparse2Sparse >
 
struct  Assignment< DstXprType, SrcXprType, Functor, Sparse2Dense, Weak >
 
struct  assignment_from_dense_op_sparse
 
struct  Assignment< DstXprType, Solve< DecType, RhsType >, internal::assign_op< Scalar, Scalar >, Sparse2Sparse >
 
struct  Diagonal2Sparse
 
struct  AssignmentKind< SparseShape, DiagonalShape >
 
struct  Assignment< DstXprType, SrcXprType, Functor, Diagonal2Sparse >
 
class  sparse_matrix_block_impl
 
struct  unary_evaluator< Block< ArgType, BlockRows, BlockCols, InnerPanel >, IteratorBased >
 
struct  unary_evaluator< Block< SparseMatrix< Scalar_, Options_, StorageIndex_ >, BlockRows, BlockCols, true >, IteratorBased >
 
struct  unary_evaluator< Block< const SparseMatrix< Scalar_, Options_, StorageIndex_ >, BlockRows, BlockCols, true >, IteratorBased >
 
struct  traits< SparseCompressedBase< Derived > >
 
struct  inner_sort_impl
 
class  StorageVal
 
class  StorageRef
 
class  CompressedStorageIterator
 
struct  inner_sort_impl< Derived, Comp, true >
 
struct  evaluator< SparseCompressedBase< Derived > >
 
struct  binary_sparse_evaluator
 
struct  binary_evaluator< CwiseBinaryOp< BinaryOp, Lhs, Rhs >, IteratorBased, IteratorBased >
 
struct  binary_evaluator< CwiseBinaryOp< BinaryOp, Lhs, Rhs >, IndexBased, IteratorBased >
 
struct  binary_evaluator< CwiseBinaryOp< BinaryOp, Lhs, Rhs >, IteratorBased, IndexBased >
 
struct  sparse_conjunction_evaluator
 
struct  binary_evaluator< CwiseBinaryOp< scalar_product_op< T1, T2 >, Lhs, Rhs >, IteratorBased, IteratorBased >
 
struct  binary_evaluator< CwiseBinaryOp< scalar_product_op< T1, T2 >, Lhs, Rhs >, IndexBased, IteratorBased >
 
struct  binary_evaluator< CwiseBinaryOp< scalar_product_op< T1, T2 >, Lhs, Rhs >, IteratorBased, IndexBased >
 
struct  binary_evaluator< CwiseBinaryOp< scalar_quotient_op< T1, T2 >, Lhs, Rhs >, IteratorBased, IndexBased >
 
struct  binary_evaluator< CwiseBinaryOp< scalar_boolean_and_op< bool >, Lhs, Rhs >, IteratorBased, IteratorBased >
 
struct  binary_evaluator< CwiseBinaryOp< scalar_boolean_and_op< bool >, Lhs, Rhs >, IndexBased, IteratorBased >
 
struct  binary_evaluator< CwiseBinaryOp< scalar_boolean_and_op< bool >, Lhs, Rhs >, IteratorBased, IndexBased >
 
struct  sparse_conjunction_evaluator< XprType, IteratorBased, IteratorBased >
 
struct  sparse_conjunction_evaluator< XprType, IndexBased, IteratorBased >
 
struct  sparse_conjunction_evaluator< XprType, IteratorBased, IndexBased >
 
struct  sparse_disjunction_evaluator
 
struct  sparse_disjunction_evaluator< XprType, IteratorBased, IteratorBased >
 
struct  sparse_disjunction_evaluator< XprType, IndexBased, IteratorBased >
 
struct  sparse_disjunction_evaluator< XprType, IteratorBased, IndexBased >
 
struct  binary_evaluator< CwiseBinaryOp< scalar_disjunction_op< DupFunc, T1, T2 >, Lhs, Rhs >, IteratorBased, IteratorBased >
 
struct  unary_evaluator< CwiseUnaryOp< UnaryOp, ArgType >, IteratorBased >
 
struct  unary_evaluator< CwiseUnaryView< ViewOp, ArgType >, IteratorBased >
 
struct  product_promote_storage_type< Sparse, Dense, OuterProduct >
 
struct  product_promote_storage_type< Dense, Sparse, OuterProduct >
 
struct  sparse_time_dense_product_impl
 
struct  sparse_time_dense_product_impl< SparseLhsType, DenseRhsType, DenseResType, typename DenseResType::Scalar, RowMajor, true >
 
struct  sparse_time_dense_product_impl< SparseLhsType, DenseRhsType, DenseResType, AlphaType, ColMajor, true >
 
struct  sparse_time_dense_product_impl< SparseLhsType, DenseRhsType, DenseResType, typename DenseResType::Scalar, RowMajor, false >
 
struct  sparse_time_dense_product_impl< SparseLhsType, DenseRhsType, DenseResType, typename DenseResType::Scalar, ColMajor, false >
 
struct  generic_product_impl< Lhs, Rhs, SparseShape, DenseShape, ProductType >
 
struct  generic_product_impl< Lhs, Rhs, SparseTriangularShape, DenseShape, ProductType >
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, SparseShape, ProductType >
 
struct  generic_product_impl< Lhs, Rhs, DenseShape, SparseTriangularShape, ProductType >
 
struct  sparse_dense_outer_product_evaluator
 
struct  product_evaluator< Product< Lhs, Rhs, DefaultProduct >, OuterProduct, SparseShape, DenseShape >
 
struct  product_evaluator< Product< Lhs, Rhs, DefaultProduct >, OuterProduct, DenseShape, SparseShape >
 
struct  sparse_diagonal_product_evaluator
 
struct  product_evaluator< Product< Lhs, Rhs, DefaultProduct >, ProductTag, DiagonalShape, SparseShape >
 
struct  product_evaluator< Product< Lhs, Rhs, DefaultProduct >, ProductTag, SparseShape, DiagonalShape >
 
struct  sparse_diagonal_product_evaluator< SparseXprType, DiagonalCoeffType, SDP_AsScalarProduct >
 
struct  sparse_diagonal_product_evaluator< SparseXprType, DiagCoeffType, SDP_AsCwiseProduct >
 
struct  traits< Map< SparseMatrix< MatScalar, MatOptions, MatIndex >, Options, StrideType > >
 
struct  traits< Map< const SparseMatrix< MatScalar, MatOptions, MatIndex >, Options, StrideType > >
 
struct  evaluator< Map< SparseMatrix< MatScalar, MatOptions, MatIndex >, Options, StrideType > >
 
struct  evaluator< Map< const SparseMatrix< MatScalar, MatOptions, MatIndex >, Options, StrideType > >
 
struct  traits< SparseMatrix< Scalar_, Options_, StorageIndex_ > >
 
struct  traits< Diagonal< SparseMatrix< Scalar_, Options_, StorageIndex_ >, DiagIndex > >
 
struct  traits< Diagonal< const SparseMatrix< Scalar_, Options_, StorageIndex_ >, DiagIndex > >
 
struct  sparse_reserve_op
 
struct  functor_traits< sparse_reserve_op< Scalar > >
 
struct  scalar_disjunction_op
 
struct  functor_traits< scalar_disjunction_op< DupFunctor, LhsScalar, RhsScalar > >
 
struct  evaluator< SparseMatrix< Scalar_, Options_, StorageIndex_ > >
 
struct  XprHelper
 
struct  XprHelper< ExpressionType, PlainObjectType, false >
 
struct  PermHelper
 
struct  PermHelper< PermDerived, false >
 
struct  permutation_matrix_product< ExpressionType, Side, Transposed, SparseShape >
 
struct  product_promote_storage_type< Sparse, PermutationStorage, ProductTag >
 
struct  product_promote_storage_type< PermutationStorage, Sparse, ProductTag >
 
struct  product_evaluator< Product< Lhs, Rhs, AliasFreeProduct >, ProductTag, PermutationShape, SparseShape >
 
struct  product_evaluator< Product< Lhs, Rhs, AliasFreeProduct >, ProductTag, SparseShape, PermutationShape >
 
struct  generic_product_impl< Lhs, Rhs, SparseShape, SparseShape, ProductType >
 
struct  generic_product_impl< Lhs, Rhs, SparseShape, SparseTriangularShape, ProductType >
 
struct  generic_product_impl< Lhs, Rhs, SparseTriangularShape, SparseShape, ProductType >
 
struct  Assignment< DstXprType, Product< Lhs, Rhs, AliasFreeProduct >, internal::assign_op< typename DstXprType::Scalar, typename Product< Lhs, Rhs, AliasFreeProduct >::Scalar >, Sparse2Dense >
 
struct  Assignment< DstXprType, Product< Lhs, Rhs, AliasFreeProduct >, internal::add_assign_op< typename DstXprType::Scalar, typename Product< Lhs, Rhs, AliasFreeProduct >::Scalar >, Sparse2Dense >
 
struct  Assignment< DstXprType, Product< Lhs, Rhs, AliasFreeProduct >, internal::sub_assign_op< typename DstXprType::Scalar, typename Product< Lhs, Rhs, AliasFreeProduct >::Scalar >, Sparse2Dense >
 
struct  unary_evaluator< SparseView< Product< Lhs, Rhs, Options > >, IteratorBased >
 
class  SparseRefBase
 
struct  traits< Ref< SparseMatrix< MatScalar, MatOptions, MatIndex >, Options_, StrideType_ > >
 
struct  traits< Ref< const SparseMatrix< MatScalar, MatOptions, MatIndex >, Options_, StrideType_ > >
 
struct  traits< Ref< SparseVector< MatScalar, MatOptions, MatIndex >, Options_, StrideType_ > >
 
struct  traits< Ref< const SparseVector< MatScalar, MatOptions, MatIndex >, Options_, StrideType_ > >
 
struct  traits< SparseRefBase< Derived > >
 
struct  evaluator< Ref< SparseMatrix< MatScalar, MatOptions, MatIndex >, Options, StrideType > >
 
struct  evaluator< Ref< const SparseMatrix< MatScalar, MatOptions, MatIndex >, Options, StrideType > >
 
struct  evaluator< Ref< SparseVector< MatScalar, MatOptions, MatIndex >, Options, StrideType > >
 
struct  evaluator< Ref< const SparseVector< MatScalar, MatOptions, MatIndex >, Options, StrideType > >
 
struct  traits< SparseSelfAdjointView< MatrixType, Mode > >
 
struct  evaluator_traits< SparseSelfAdjointView< MatrixType, Mode > >
 
struct  SparseSelfAdjoint2Sparse
 
struct  AssignmentKind< SparseShape, SparseSelfAdjointShape >
 
struct  AssignmentKind< SparseSelfAdjointShape, SparseShape >
 
struct  Assignment< DstXprType, SrcXprType, Functor, SparseSelfAdjoint2Sparse >
 
struct  generic_product_impl< LhsView, Rhs, SparseSelfAdjointShape, DenseShape, ProductType >
 
struct  generic_product_impl< Lhs, RhsView, DenseShape, SparseSelfAdjointShape, ProductType >
 
struct  product_evaluator< Product< LhsView, Rhs, DefaultProduct >, ProductTag, SparseSelfAdjointShape, SparseShape >
 
struct  product_evaluator< Product< Lhs, RhsView, DefaultProduct >, ProductTag, SparseShape, SparseSelfAdjointShape >
 
struct  traits< SparseSymmetricPermutationProduct< MatrixType, Mode > >
 
struct  Assignment< DstXprType, SparseSymmetricPermutationProduct< MatrixType, Mode >, internal::assign_op< Scalar, typename MatrixType::Scalar >, Sparse2Sparse >
 
struct  sparse_sparse_product_with_pruning_selector
 
struct  sparse_sparse_product_with_pruning_selector< Lhs, Rhs, ResultType, ColMajor, ColMajor, ColMajor >
 
struct  sparse_sparse_product_with_pruning_selector< Lhs, Rhs, ResultType, ColMajor, ColMajor, RowMajor >
 
struct  sparse_sparse_product_with_pruning_selector< Lhs, Rhs, ResultType, RowMajor, RowMajor, RowMajor >
 
struct  sparse_sparse_product_with_pruning_selector< Lhs, Rhs, ResultType, RowMajor, RowMajor, ColMajor >
 
struct  sparse_sparse_product_with_pruning_selector< Lhs, Rhs, ResultType, ColMajor, RowMajor, RowMajor >
 
struct  sparse_sparse_product_with_pruning_selector< Lhs, Rhs, ResultType, RowMajor, ColMajor, RowMajor >
 
struct  sparse_sparse_product_with_pruning_selector< Lhs, Rhs, ResultType, ColMajor, RowMajor, ColMajor >
 
struct  sparse_sparse_product_with_pruning_selector< Lhs, Rhs, ResultType, RowMajor, ColMajor, ColMajor >
 
class  SparseTransposeImpl
 
class  SparseTransposeImpl< MatrixType, CompressedAccessBit >
 
struct  unary_evaluator< Transpose< ArgType >, IteratorBased >
 
struct  unary_evaluator< TriangularView< ArgType, Mode >, IteratorBased >
 
struct  sparse_eval
 
struct  eval< T, Sparse >
 
struct  sparse_eval< T, 1, Cols, Flags >
 
struct  sparse_eval< T, Rows, 1, Flags >
 
struct  sparse_eval< T, 1, 1, Flags >
 
struct  plain_matrix_type< T, Sparse >
 
struct  plain_object_eval< T, Sparse >
 
struct  solve_traits< Decomposition, RhsType, Sparse >
 
struct  generic_xpr_base< Derived, MatrixXpr, Sparse >
 
struct  SparseTriangularShape
 
struct  SparseSelfAdjointShape
 
struct  glue_shapes< SparseShape, SelfAdjointShape >
 
struct  glue_shapes< SparseShape, TriangularShape >
 
struct  LowerBoundIndex
 
struct  traits< SparseVector< Scalar_, Options_, StorageIndex_ > >
 
struct  sparse_vector_assign_selector
 
struct  evaluator< SparseVector< Scalar_, Options_, Index_ > >
 
struct  sparse_vector_assign_selector< Dest, Src, SVA_Inner >
 
struct  sparse_vector_assign_selector< Dest, Src, SVA_Outer >
 
struct  sparse_vector_assign_selector< Dest, Src, SVA_RuntimeSwitch >
 
struct  traits< SparseView< MatrixType > >
 
struct  unary_evaluator< SparseView< ArgType >, IteratorBased >
 
struct  unary_evaluator< SparseView< ArgType >, IndexBased >
 
struct  sparse_solve_triangular_selector
 
struct  sparse_solve_triangular_selector< Lhs, Rhs, Mode, Lower, RowMajor >
 
struct  sparse_solve_triangular_selector< Lhs, Rhs, Mode, Upper, RowMajor >
 
struct  sparse_solve_triangular_selector< Lhs, Rhs, Mode, Lower, ColMajor >
 
struct  sparse_solve_triangular_selector< Lhs, Rhs, Mode, Upper, ColMajor >
 
struct  sparse_solve_triangular_sparse_selector
 
struct  sparse_solve_triangular_sparse_selector< Lhs, Rhs, Mode, UpLo, ColMajor >
 
struct  column_dfs_traits
 
struct  LU_kernel_bmod
 
struct  LU_kernel_bmod< 1 >
 
struct  panel_dfs_traits
 
struct  LU_GlobalLU_t
 
struct  perfvalues
 
class  MappedSuperNodalMatrix
 a class to manipulate the L supernodal factor from the SparseLU factorization More...
 
class  SparseLUImpl
 
struct  traits< SparseQRMatrixQReturnType< SparseQRType > >
 
struct  traits< SparseQRMatrixQTransposeReturnType< SparseQRType > >
 
struct  traits< SparseQR_QProduct< SparseQRType, Derived > >
 
struct  evaluator_traits< SparseQRMatrixQReturnType< SparseQRType > >
 
struct  Assignment< DstXprType, SparseQRMatrixQReturnType< SparseQRType >, internal::assign_op< typename DstXprType::Scalar, typename DstXprType::Scalar >, Sparse2Sparse >
 
struct  Assignment< DstXprType, SparseQRMatrixQReturnType< SparseQRType >, internal::assign_op< typename DstXprType::Scalar, typename DstXprType::Scalar >, Sparse2Dense >
 
struct  traits< SPQRMatrixQReturnType< SPQRType > >
 
struct  traits< SPQRMatrixQTransposeReturnType< SPQRType > >
 
struct  traits< SPQR_QProduct< SPQRType, Derived > >
 
struct  traits< BDCSVD< MatrixType_, Options > >
 
struct  svd_precondition_2x2_block_to_be_real
 
struct  qr_preconditioner_should_do_anything
 
struct  qr_preconditioner_impl
 
class  qr_preconditioner_impl< MatrixType, Options, QRPreconditioner, Case, false >
 
class  qr_preconditioner_impl< MatrixType, Options, FullPivHouseholderQRPreconditioner, PreconditionIfMoreRowsThanCols, true >
 
class  qr_preconditioner_impl< MatrixType, Options, FullPivHouseholderQRPreconditioner, PreconditionIfMoreColsThanRows, true >
 
class  qr_preconditioner_impl< MatrixType, Options, ColPivHouseholderQRPreconditioner, PreconditionIfMoreRowsThanCols, true >
 
class  qr_preconditioner_impl< MatrixType, Options, ColPivHouseholderQRPreconditioner, PreconditionIfMoreColsThanRows, true >
 
class  qr_preconditioner_impl< MatrixType, Options, HouseholderQRPreconditioner, PreconditionIfMoreRowsThanCols, true >
 
class  qr_preconditioner_impl< MatrixType, Options, HouseholderQRPreconditioner, PreconditionIfMoreColsThanRows, true >
 
struct  svd_precondition_2x2_block_to_be_real< MatrixType, Options, false >
 
struct  svd_precondition_2x2_block_to_be_real< MatrixType, Options, true >
 
struct  traits< JacobiSVD< MatrixType_, Options > >
 
struct  traits< SVDBase< Derived > >
 
struct  svd_traits
 
class  UpperBidiagonalization
 
struct  cost_helper
 
struct  dense_assignment_loop_with_device< Kernel, CoreThreadPoolDevice, DefaultTraversal, NoUnrolling >
 
struct  dense_assignment_loop_with_device< Kernel, CoreThreadPoolDevice, DefaultTraversal, InnerUnrolling >
 
struct  dense_assignment_loop_with_device< Kernel, CoreThreadPoolDevice, InnerVectorizedTraversal, NoUnrolling >
 
struct  dense_assignment_loop_with_device< Kernel, CoreThreadPoolDevice, InnerVectorizedTraversal, InnerUnrolling >
 
struct  dense_assignment_loop_with_device< Kernel, CoreThreadPoolDevice, SliceVectorizedTraversal, NoUnrolling >
 
struct  dense_assignment_loop_with_device< Kernel, CoreThreadPoolDevice, LinearTraversal, NoUnrolling >
 
struct  dense_assignment_loop_with_device< Kernel, CoreThreadPoolDevice, LinearVectorizedTraversal, NoUnrolling >
 
struct  ThreadLocalNoOpInitialize
 
struct  ThreadLocalNoOpRelease
 
struct  test_signbit_op
 
struct  functor_traits< test_signbit_op< Scalar > >
 
struct  functor_traits< logical_left_shift_op< N, Scalar > >
 
struct  functor_traits< logical_right_shift_op< N, Scalar > >
 
struct  functor_traits< arithmetic_right_shift_op< N, Scalar > >
 
struct  scalar_dummy_op
 
struct  functor_traits< scalar_dummy_op< Scalar, Vectorize > >
 
struct  cast_impl< Real, NewType >
 
struct  cast_impl< Real, std::complex< Real > >
 
struct  extract_output_indices_helper
 
struct  extract_output_indices_helper< N, Idx, std::index_sequence< OutputIndices... >, T1, Ts... >
 
struct  extract_output_indices_helper< 0, Idx, std::index_sequence< OutputIndices... > >
 
struct  void_helper
 
struct  random_without_cast_overflow
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t< NumTraits< SrcScalar >::IsInteger &&NumTraits< SrcScalar >::IsSigned &&NumTraits< TgtScalar >::IsInteger &&!NumTraits< TgtScalar >::IsSigned &&(std::numeric_limits< SrcScalar >::digits< std::numeric_limits< TgtScalar >::digits||(std::numeric_limits< SrcScalar >::digits==std::numeric_limits< TgtScalar >::digits &&NumTraits< SrcScalar >::IsSigned))> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t< NumTraits< SrcScalar >::IsInteger &&!NumTraits< SrcScalar >::IsSigned &&NumTraits< TgtScalar >::IsInteger &&!NumTraits< TgtScalar >::IsSigned &&(std::numeric_limits< SrcScalar >::digits< std::numeric_limits< TgtScalar >::digits||(std::numeric_limits< SrcScalar >::digits==std::numeric_limits< TgtScalar >::digits &&NumTraits< SrcScalar >::IsSigned))> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t< NumTraits< SrcScalar >::IsInteger &&NumTraits< TgtScalar >::IsInteger &&NumTraits< TgtScalar >::IsSigned &&!NumTraits< SrcScalar >::IsSigned &&(std::numeric_limits< SrcScalar >::digits > std::numeric_limits< TgtScalar >::digits)> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t< NumTraits< SrcScalar >::IsInteger &&NumTraits< TgtScalar >::IsInteger &&!NumTraits< TgtScalar >::IsSigned &&!NumTraits< SrcScalar >::IsSigned &&(std::numeric_limits< SrcScalar >::digits > std::numeric_limits< TgtScalar >::digits)> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t< NumTraits< SrcScalar >::IsInteger &&NumTraits< TgtScalar >::IsInteger &&NumTraits< SrcScalar >::IsSigned &&(std::numeric_limits< SrcScalar >::digits > std::numeric_limits< TgtScalar >::digits)> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t< NumTraits< SrcScalar >::IsInteger &&NumTraits< TgtScalar >::IsInteger &&!NumTraits< SrcScalar >::IsSigned &&NumTraits< TgtScalar >::IsSigned &&(std::numeric_limits< SrcScalar >::digits==std::numeric_limits< TgtScalar >::digits)> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t<!NumTraits< SrcScalar >::IsInteger &&!NumTraits< SrcScalar >::IsComplex &&NumTraits< TgtScalar >::IsInteger &&(std::numeric_limits< TgtScalar >::digits<=std::numeric_limits< SrcScalar >::digits)> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t<!NumTraits< SrcScalar >::IsInteger &&!NumTraits< SrcScalar >::IsComplex &&NumTraits< TgtScalar >::IsInteger &&NumTraits< TgtScalar >::IsSigned &&(std::numeric_limits< TgtScalar >::digits > std::numeric_limits< SrcScalar >::digits)> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t<!NumTraits< SrcScalar >::IsInteger &&!NumTraits< SrcScalar >::IsComplex &&NumTraits< TgtScalar >::IsInteger &&!NumTraits< TgtScalar >::IsSigned &&(std::numeric_limits< TgtScalar >::digits > std::numeric_limits< SrcScalar >::digits)> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t< NumTraits< SrcScalar >::IsInteger &&!NumTraits< TgtScalar >::IsInteger &&!NumTraits< TgtScalar >::IsComplex > >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t<!NumTraits< SrcScalar >::IsInteger &&!NumTraits< SrcScalar >::IsComplex &&!NumTraits< TgtScalar >::IsInteger &&!NumTraits< TgtScalar >::IsComplex &&(std::numeric_limits< SrcScalar >::digits > std::numeric_limits< TgtScalar >::digits)> >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t< NumTraits< SrcScalar >::IsComplex &&!NumTraits< TgtScalar >::IsComplex > >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t<!NumTraits< SrcScalar >::IsComplex &&NumTraits< TgtScalar >::IsComplex > >
 
struct  random_without_cast_overflow< SrcScalar, TgtScalar, std::enable_if_t< NumTraits< SrcScalar >::IsComplex &&NumTraits< TgtScalar >::IsComplex > >
 
struct  functor_traits< TrackedVisitor< T, Vectorizable > >
 
struct  traits< TensorIndexPairOp< XprType > >
 
struct  eval< TensorIndexPairOp< XprType >, Eigen::Dense >
 
struct  nested< TensorIndexPairOp< XprType >, 1, typename eval< TensorIndexPairOp< XprType > >::type >
 
struct  traits< TensorPairReducerOp< ReduceOp, Dims, XprType > >
 
struct  eval< TensorPairReducerOp< ReduceOp, Dims, XprType >, Eigen::Dense >
 
struct  nested< TensorPairReducerOp< ReduceOp, Dims, XprType >, 1, typename eval< TensorPairReducerOp< ReduceOp, Dims, XprType > >::type >
 
struct  traits< TensorAssignOp< LhsXprType, RhsXprType > >
 
struct  eval< TensorAssignOp< LhsXprType, RhsXprType >, Eigen::Dense >
 
struct  nested< TensorAssignOp< LhsXprType, RhsXprType >, 1, typename eval< TensorAssignOp< LhsXprType, RhsXprType > >::type >
 
class  TensorBlockIO
 
struct  TensorBlockResourceRequirements
 
class  TensorBlockDescriptor
 
class  TensorBlockMapper
 
class  TensorBlockScratchAllocator
 
class  TensorBlockNotImplemented
 
struct  XprScalar
 
struct  XprScalar< void >
 
class  TensorMaterializedBlock
 
class  TensorCwiseUnaryBlock
 
class  TensorCwiseBinaryBlock
 
class  TensorUnaryExprBlock
 
class  TensorTernaryExprBlock
 
class  StridedLinearBufferCopy
 
class  TensorBlockAssignment
 
struct  traits< TensorBroadcastingOp< Broadcast, XprType > >
 
struct  eval< TensorBroadcastingOp< Broadcast, XprType >, Eigen::Dense >
 
struct  nested< TensorBroadcastingOp< Broadcast, XprType >, 1, typename eval< TensorBroadcastingOp< Broadcast, XprType > >::type >
 
struct  is_input_scalar
 
struct  is_input_scalar< Sizes<> >
 
struct  is_input_scalar< Sizes< Indices... > >
 
struct  traits< TensorChippingOp< DimId, XprType > >
 
struct  eval< TensorChippingOp< DimId, XprType >, Eigen::Dense >
 
struct  nested< TensorChippingOp< DimId, XprType >, 1, typename eval< TensorChippingOp< DimId, XprType > >::type >
 
struct  DimensionId
 
struct  DimensionId< Dynamic >
 
struct  traits< TensorConcatenationOp< Axis, LhsXprType, RhsXprType > >
 
struct  eval< TensorConcatenationOp< Axis, LhsXprType, RhsXprType >, Eigen::Dense >
 
struct  nested< TensorConcatenationOp< Axis, LhsXprType, RhsXprType >, 1, typename eval< TensorConcatenationOp< Axis, LhsXprType, RhsXprType > >::type >
 
struct  traits< TensorContractionOp< Dimensions, LhsXprType, RhsXprType, OutputKernelType > >
 
struct  eval< TensorContractionOp< Dimensions, LhsXprType, RhsXprType, OutputKernelType >, Eigen::Dense >
 
struct  nested< TensorContractionOp< Dimensions, LhsXprType, RhsXprType, OutputKernelType >, 1, typename eval< TensorContractionOp< Dimensions, LhsXprType, RhsXprType, OutputKernelType > >::type >
 
struct  traits< TensorEvaluator< const TensorContractionOp< Indices_, LeftArgType_, RightArgType_, OutputKernelType_ >, Device_ > >
 
struct  TensorContractionBlockMemAllocator
 
struct  TensorContractionKernel
 
class  TensorContractionBlocking
 
struct  CoeffLoader
 
class  BaseTensorContractionMapper
 
struct  CoeffLoader< Tensor, true, MakePointer_ >
 
class  SimpleTensorContractionMapper
 
class  BaseTensorContractionMapper< Scalar, Index, side, Tensor, nocontract_t, contract_t, 1, inner_dim_contiguous, inner_dim_reordered, Alignment, MakePointer_ >
 
class  TensorContractionSubMapper
 
class  TensorContractionInputMapper
 
struct  TensorContractionInputMapperTrait
 
struct  TensorContractionInputMapperTrait< TensorContractionInputMapper< Scalar_, Index_, side_, Tensor_, nocontract_t_, contract_t_, packet_size_, inner_dim_contiguous_, inner_dim_reordered_, Alignment_, MakePointer_ > >
 
struct  traits< TensorConversionOp< TargetType, XprType > >
 
struct  eval< TensorConversionOp< TargetType, XprType >, Eigen::Dense >
 
struct  nested< TensorConversionOp< TargetType, XprType >, 1, typename eval< TensorConversionOp< TargetType, XprType > >::type >
 
struct  CoeffConv
 
struct  CoeffConv< SrcType, TargetType, true >
 
struct  PacketConv
 
struct  PacketConv< SrcPacket, TargetPacket, LoadMode, true, IsSameT >
 
struct  PacketConv< SrcPacket, TargetPacket, LoadMode, false, true >
 
struct  PacketConv< SrcPacket, TargetPacket, LoadMode, true, true >
 
class  IndexMapper
 
struct  traits< TensorConvolutionOp< Dimensions, InputXprType, KernelXprType > >
 
struct  eval< TensorConvolutionOp< Dimensions, InputXprType, KernelXprType >, Eigen::Dense >
 
struct  nested< TensorConvolutionOp< Dimensions, InputXprType, KernelXprType >, 1, typename eval< TensorConvolutionOp< Dimensions, InputXprType, KernelXprType > >::type >
 
struct  traits< TensorCustomUnaryOp< CustomUnaryFunc, XprType > >
 
struct  eval< TensorCustomUnaryOp< CustomUnaryFunc, XprType >, Eigen::Dense >
 
struct  nested< TensorCustomUnaryOp< CustomUnaryFunc, XprType > >
 
struct  traits< TensorCustomBinaryOp< CustomBinaryFunc, LhsXprType, RhsXprType > >
 
struct  eval< TensorCustomBinaryOp< CustomBinaryFunc, LhsXprType, RhsXprType >, Eigen::Dense >
 
struct  nested< TensorCustomBinaryOp< CustomBinaryFunc, LhsXprType, RhsXprType > >
 
struct  array_size< DimensionList< Index, Rank > >
 
struct  array_size< const DimensionList< Index, Rank > >
 
struct  index_known_statically_impl< DimensionList< Index, Rank > >
 
struct  index_known_statically_impl< const DimensionList< Index, Rank > >
 
struct  all_indices_known_statically_impl< DimensionList< Index, Rank > >
 
struct  all_indices_known_statically_impl< const DimensionList< Index, Rank > >
 
struct  indices_statically_known_to_increase_impl< DimensionList< Index, Rank > >
 
struct  indices_statically_known_to_increase_impl< const DimensionList< Index, Rank > >
 
struct  index_statically_eq_impl< DimensionList< Index, Rank > >
 
struct  index_statically_eq_impl< const DimensionList< Index, Rank > >
 
struct  index_statically_ne_impl< DimensionList< Index, Rank > >
 
struct  index_statically_ne_impl< const DimensionList< Index, Rank > >
 
struct  index_statically_gt_impl< DimensionList< Index, Rank > >
 
struct  index_statically_gt_impl< const DimensionList< Index, Rank > >
 
struct  index_statically_lt_impl< DimensionList< Index, Rank > >
 
struct  index_statically_lt_impl< const DimensionList< Index, Rank > >
 
struct  dget
 
struct  fixed_size_tensor_index_linearization_helper
 
struct  fixed_size_tensor_index_linearization_helper< Index, NumIndices, 0, RowMajor >
 
struct  fixed_size_tensor_index_extraction_helper
 
struct  fixed_size_tensor_index_extraction_helper< Index, 0 >
 
struct  tensor_index_linearization_helper
 
struct  tensor_index_linearization_helper< Index, NumIndices, 0, RowMajor >
 
struct  tensor_vsize_index_linearization_helper
 
struct  tensor_vsize_index_linearization_helper< Index, NumIndices, 0, RowMajor >
 
struct  array_size< const DSizes< DenseIndex, NumDims > >
 
struct  array_size< DSizes< DenseIndex, NumDims > >
 
struct  array_size< const Sizes< Indices... > >
 
struct  array_size< Sizes< Indices... > >
 
struct  sizes_match_below_dim
 
struct  sizes_match_below_dim< Dims1, Dims2, n, n >
 
struct  sizes_match_below_dim< Dims1, Dims2, 0, 0 >
 
struct  traits< TensorEvalToOp< XprType, MakePointer_ > >
 
struct  eval< TensorEvalToOp< XprType, MakePointer_ >, Eigen::Dense >
 
struct  nested< TensorEvalToOp< XprType, MakePointer_ >, 1, typename eval< TensorEvalToOp< XprType, MakePointer_ > >::type >
 
struct  ExpressionHasTensorBroadcastingOp
 
struct  ExpressionHasTensorBroadcastingOp< const TensorAssignOp< LhsXprType, RhsXprType > >
 
struct  ExpressionHasTensorBroadcastingOp< const TensorCwiseUnaryOp< UnaryOp, XprType > >
 
struct  ExpressionHasTensorBroadcastingOp< const TensorCwiseBinaryOp< BinaryOp, LhsXprType, RhsXprType > >
 
struct  ExpressionHasTensorBroadcastingOp< const TensorBroadcastingOp< Broadcast, XprType > >
 
class  TensorExecutor
 
class  TensorAsyncExecutor
 
class  TensorExecutor< Expression, DefaultDevice, true, TiledEvaluation::Off >
 
class  TensorExecutor< Expression, DefaultDevice, Vectorizable, TiledEvaluation::On >
 
struct  traits< TensorCwiseNullaryOp< NullaryOp, XprType > >
 
struct  traits< TensorCwiseUnaryOp< UnaryOp, XprType > >
 
struct  eval< TensorCwiseUnaryOp< UnaryOp, XprType >, Eigen::Dense >
 
struct  nested< TensorCwiseUnaryOp< UnaryOp, XprType >, 1, typename eval< TensorCwiseUnaryOp< UnaryOp, XprType > >::type >
 
struct  traits< TensorCwiseBinaryOp< BinaryOp, LhsXprType, RhsXprType > >
 
struct  eval< TensorCwiseBinaryOp< BinaryOp, LhsXprType, RhsXprType >, Eigen::Dense >
 
struct  nested< TensorCwiseBinaryOp< BinaryOp, LhsXprType, RhsXprType >, 1, typename eval< TensorCwiseBinaryOp< BinaryOp, LhsXprType, RhsXprType > >::type >
 
struct  traits< TensorCwiseTernaryOp< TernaryOp, Arg1XprType, Arg2XprType, Arg3XprType > >
 
struct  eval< TensorCwiseTernaryOp< TernaryOp, Arg1XprType, Arg2XprType, Arg3XprType >, Eigen::Dense >
 
struct  nested< TensorCwiseTernaryOp< TernaryOp, Arg1XprType, Arg2XprType, Arg3XprType >, 1, typename eval< TensorCwiseTernaryOp< TernaryOp, Arg1XprType, Arg2XprType, Arg3XprType > >::type >
 
struct  traits< TensorSelectOp< IfXprType, ThenXprType, ElseXprType > >
 
struct  eval< TensorSelectOp< IfXprType, ThenXprType, ElseXprType >, Eigen::Dense >
 
struct  nested< TensorSelectOp< IfXprType, ThenXprType, ElseXprType >, 1, typename eval< TensorSelectOp< IfXprType, ThenXprType, ElseXprType > >::type >
 
struct  traits< TensorFFTOp< FFT, XprType, FFTResultType, FFTDir > >
 
struct  eval< TensorFFTOp< FFT, XprType, FFTResultType, FFTDirection >, Eigen::Dense >
 
struct  nested< TensorFFTOp< FFT, XprType, FFTResultType, FFTDirection >, 1, typename eval< TensorFFTOp< FFT, XprType, FFTResultType, FFTDirection > >::type >
 
struct  traits< TensorForcedEvalOp< XprType > >
 
struct  eval< TensorForcedEvalOp< XprType >, Eigen::Dense >
 
struct  nested< TensorForcedEvalOp< XprType >, 1, typename eval< TensorForcedEvalOp< XprType > >::type >
 
struct  non_integral_type_placement_new
 
struct  non_integral_type_placement_new< Eigen::SyclDevice, CoeffReturnType >
 
struct  Pointer_type_promotion
 
struct  Pointer_type_promotion< A, A >
 
struct  TypeConversion
 
struct  IsVectorizable
 
struct  IsVectorizable< GpuDevice, Expression >
 
struct  IsTileable
 
struct  scalar_mod_op
 Template functor to compute the modulo between an array and a scalar. More...
 
struct  functor_traits< scalar_mod_op< Scalar > >
 
struct  scalar_mod2_op
 Template functor to compute the modulo between 2 arrays. More...
 
struct  functor_traits< scalar_mod2_op< Scalar > >
 
struct  scalar_fmod_op
 
struct  functor_traits< scalar_fmod_op< Scalar > >
 
struct  reducer_traits
 
struct  SumReducer
 
struct  reducer_traits< SumReducer< T >, Device >
 
struct  MeanReducer
 
struct  reducer_traits< MeanReducer< T >, Device >
 
struct  MinMaxBottomValue
 
struct  MinMaxBottomValue< T, true, false >
 
struct  MinMaxBottomValue< T, false, true >
 
struct  MinMaxBottomValue< T, false, false >
 
struct  MaxReducer
 
struct  reducer_traits< MaxReducer< T, NaNPropagation >, Device >
 
struct  MinReducer
 
struct  reducer_traits< MinReducer< T, NaNPropagation >, Device >
 
struct  ProdReducer
 
struct  reducer_traits< ProdReducer< T >, Device >
 
struct  AndReducer
 
struct  reducer_traits< AndReducer, Device >
 
struct  OrReducer
 
struct  reducer_traits< OrReducer, Device >
 
struct  ArgMaxPairReducer
 
struct  reducer_traits< ArgMaxPairReducer< T >, Device >
 
struct  ArgMinPairReducer
 
struct  reducer_traits< ArgMinPairReducer< T >, Device >
 
class  GaussianGenerator
 
struct  functor_traits< GaussianGenerator< T, Index, NumDims > >
 
struct  scalar_clamp_op
 
struct  functor_traits< scalar_clamp_op< Scalar > >
 
struct  traits< TensorGeneratorOp< Generator, XprType > >
 
struct  eval< TensorGeneratorOp< Generator, XprType >, Eigen::Dense >
 
struct  nested< TensorGeneratorOp< Generator, XprType >, 1, typename eval< TensorGeneratorOp< Generator, XprType > >::type >
 
struct  traits< TensorImagePatchOp< Rows, Cols, XprType > >
 
struct  eval< TensorImagePatchOp< Rows, Cols, XprType >, Eigen::Dense >
 
struct  nested< TensorImagePatchOp< Rows, Cols, XprType >, 1, typename eval< TensorImagePatchOp< Rows, Cols, XprType > >::type >
 
struct  ImagePatchCopyOp
 
struct  ImagePatchCopyOp< Self, true >
 
struct  ImagePatchPaddingOp
 
struct  is_compile_time_constant
 
struct  is_compile_time_constant< type2index< idx > >
 
struct  is_compile_time_constant< const type2index< idx > >
 
struct  is_compile_time_constant< type2index< idx > & >
 
struct  is_compile_time_constant< const type2index< idx > & >
 
struct  is_compile_time_constant< type2indexpair< f, s > >
 
struct  is_compile_time_constant< const type2indexpair< f, s > >
 
struct  is_compile_time_constant< type2indexpair< f, s > & >
 
struct  is_compile_time_constant< const type2indexpair< f, s > & >
 
struct  IndexTuple
 
struct  IndexTuple< T, O... >
 
struct  IndexTuple< T >
 
struct  IndexTupleExtractor
 
struct  IndexTupleExtractor< N, T, O... >
 
struct  IndexTupleExtractor< 0, T, O... >
 
struct  array_size< IndexTuple< T, O... > >
 
struct  array_size< const IndexTuple< T, O... > >
 
struct  tuple_coeff
 
struct  tuple_coeff< 0, ValueT >
 
struct  array_size< IndexList< FirstType, OtherTypes... > >
 
struct  array_size< const IndexList< FirstType, OtherTypes... > >
 
struct  array_size< IndexPairList< FirstType, OtherTypes... > >
 
struct  array_size< const IndexPairList< FirstType, OtherTypes... > >
 
struct  index_known_statically_impl
 
struct  index_known_statically_impl< IndexList< FirstType, OtherTypes... > >
 
struct  index_known_statically_impl< const IndexList< FirstType, OtherTypes... > >
 
struct  all_indices_known_statically_impl
 
struct  all_indices_known_statically_impl< IndexList< FirstType, OtherTypes... > >
 
struct  all_indices_known_statically_impl< const IndexList< FirstType, OtherTypes... > >
 
struct  indices_statically_known_to_increase_impl
 
struct  indices_statically_known_to_increase_impl< IndexList< FirstType, OtherTypes... > >
 
struct  indices_statically_known_to_increase_impl< const IndexList< FirstType, OtherTypes... > >
 
struct  index_statically_eq_impl
 
struct  index_statically_eq_impl< IndexList< FirstType, OtherTypes... > >
 
struct  index_statically_eq_impl< const IndexList< FirstType, OtherTypes... > >
 
struct  index_statically_ne_impl
 
struct  index_statically_ne_impl< IndexList< FirstType, OtherTypes... > >
 
struct  index_statically_ne_impl< const IndexList< FirstType, OtherTypes... > >
 
struct  index_statically_gt_impl
 
struct  index_statically_gt_impl< IndexList< FirstType, OtherTypes... > >
 
struct  index_statically_gt_impl< const IndexList< FirstType, OtherTypes... > >
 
struct  index_statically_lt_impl
 
struct  index_statically_lt_impl< IndexList< FirstType, OtherTypes... > >
 
struct  index_statically_lt_impl< const IndexList< FirstType, OtherTypes... > >
 
struct  index_pair_first_statically_eq_impl
 
struct  index_pair_first_statically_eq_impl< IndexPairList< FirstType, OtherTypes... > >
 
struct  index_pair_first_statically_eq_impl< const IndexPairList< FirstType, OtherTypes... > >
 
struct  index_pair_second_statically_eq_impl
 
struct  index_pair_second_statically_eq_impl< IndexPairList< FirstType, OtherTypes... > >
 
struct  index_pair_second_statically_eq_impl< const IndexPairList< FirstType, OtherTypes... > >
 
struct  traits< TensorInflationOp< Strides, XprType > >
 
struct  eval< TensorInflationOp< Strides, XprType >, Eigen::Dense >
 
struct  nested< TensorInflationOp< Strides, XprType >, 1, typename eval< TensorInflationOp< Strides, XprType > >::type >
 
struct  Initializer
 
struct  Initializer< Derived, 1 >
 
struct  Initializer< Derived, 0 >
 
struct  UnsignedTraits
 
struct  DividerTraits
 
struct  DividerHelper
 
struct  DividerHelper< 64, T >
 
struct  TensorIntDivisor
 
class  TensorIntDivisor< int32_t, true >
 
struct  TensorPrinter
 
struct  ScalarPrinter
 
struct  ScalarPrinter< Scalar, TensorIOFormatNumpy, std::enable_if_t< NumTraits< Scalar >::IsComplex > >
 
struct  ScalarPrinter< Scalar, TensorIOFormatNative, std::enable_if_t< NumTraits< Scalar >::IsComplex > >
 
struct  TensorPrinter< Tensor, rank, TensorIOFormatLegacy, std::enable_if_t< rank !=0 > >
 
struct  TensorPrinter< Tensor, 0, Format >
 
struct  traits< TensorLayoutSwapOp< XprType > >
 
struct  eval< TensorLayoutSwapOp< XprType >, Eigen::Dense >
 
struct  nested< TensorLayoutSwapOp< XprType >, 1, typename eval< TensorLayoutSwapOp< XprType > >::type >
 
struct  is_base_of
 
struct  traits< TensorReshapingOp< NewDimensions, XprType > >
 
struct  eval< TensorReshapingOp< NewDimensions, XprType >, Eigen::Dense >
 
struct  nested< TensorReshapingOp< NewDimensions, XprType >, 1, typename eval< TensorReshapingOp< NewDimensions, XprType > >::type >
 
struct  traits< TensorSlicingOp< StartIndices, Sizes, XprType > >
 
struct  eval< TensorSlicingOp< StartIndices, Sizes, XprType >, Eigen::Dense >
 
struct  nested< TensorSlicingOp< StartIndices, Sizes, XprType >, 1, typename eval< TensorSlicingOp< StartIndices, Sizes, XprType > >::type >
 
struct  MemcpyTriggerForSlicing
 
struct  traits< TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType > >
 
struct  eval< TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType >, Eigen::Dense >
 
struct  nested< TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType >, 1, typename eval< TensorStridingSlicingOp< StartIndices, StopIndices, Strides, XprType > >::type >
 
struct  traits< TensorPaddingOp< PaddingDimensions, XprType > >
 
struct  eval< TensorPaddingOp< PaddingDimensions, XprType >, Eigen::Dense >
 
struct  nested< TensorPaddingOp< PaddingDimensions, XprType >, 1, typename eval< TensorPaddingOp< PaddingDimensions, XprType > >::type >
 
struct  traits< TensorPatchOp< PatchDim, XprType > >
 
struct  eval< TensorPatchOp< PatchDim, XprType >, Eigen::Dense >
 
struct  nested< TensorPatchOp< PatchDim, XprType >, 1, typename eval< TensorPatchOp< PatchDim, XprType > >::type >
 
class  UniformRandomGenerator
 
struct  functor_traits< UniformRandomGenerator< Scalar > >
 
class  NormalRandomGenerator
 
struct  functor_traits< NormalRandomGenerator< Scalar > >
 
struct  traits< TensorReductionOp< Op, Dims, XprType, MakePointer_ > >
 
struct  eval< TensorReductionOp< Op, Dims, XprType, MakePointer_ >, Eigen::Dense >
 
struct  nested< TensorReductionOp< Op, Dims, XprType, MakePointer_ >, 1, typename eval< TensorReductionOp< Op, Dims, XprType, MakePointer_ > >::type >
 
struct  DimInitializer
 
struct  DimInitializer< Sizes<> >
 
struct  are_inner_most_dims
 
struct  preserve_inner_most_dims
 
struct  are_inner_most_dims< ReducedDims, NumTensorDims, ColMajor >
 
struct  are_inner_most_dims< ReducedDims, NumTensorDims, RowMajor >
 
struct  preserve_inner_most_dims< ReducedDims, NumTensorDims, ColMajor >
 
struct  preserve_inner_most_dims< ReducedDims, NumTensorDims, RowMajor >
 
struct  GenericDimReducer
 
struct  GenericDimReducer< 0, Self, Op >
 
struct  GenericDimReducer<-1, Self, Op >
 
struct  InnerMostDimReducer
 
struct  InnerMostDimReducer< Self, Op, true, false >
 
struct  InnerMostDimReducer< Self, Op, false, true >
 
struct  InnerMostDimReducer< Self, Op, true, true >
 
struct  InnerMostDimPreserver
 
struct  InnerMostDimPreserver< DimIndex, Self, Op, true >
 
struct  InnerMostDimPreserver< 0, Self, Op, true >
 
struct  InnerMostDimPreserver<-1, Self, Op, true >
 
struct  FullReducer
 
struct  InnerReducer
 
struct  OuterReducer
 
struct  ReductionReturnType
 
struct  FullReducer< Self, Op, Eigen::SyclDevice, Vectorizable >
 
struct  OuterReducer< Self, Op, Eigen::SyclDevice >
 
struct  InnerReducer< Self, Op, Eigen::SyclDevice >
 
struct  GenericReducer< Self, Op, Eigen::SyclDevice >
 
class  TensorLazyBaseEvaluator
 
class  TensorLazyEvaluatorReadOnly
 
class  TensorLazyEvaluatorWritable
 
class  TensorLazyEvaluator
 
struct  traits< TensorReverseOp< ReverseDimensions, XprType > >
 
struct  eval< TensorReverseOp< ReverseDimensions, XprType >, Eigen::Dense >
 
struct  nested< TensorReverseOp< ReverseDimensions, XprType >, 1, typename eval< TensorReverseOp< ReverseDimensions, XprType > >::type >
 
struct  traits< TensorRollOp< RollDimensions, XprType > >
 
struct  eval< TensorRollOp< RollDimensions, XprType >, Eigen::Dense >
 
struct  nested< TensorRollOp< RollDimensions, XprType >, 1, typename eval< TensorRollOp< RollDimensions, XprType > >::type >
 
struct  traits< TensorScanOp< Op, XprType > >
 
struct  eval< TensorScanOp< Op, XprType >, Eigen::Dense >
 
struct  nested< TensorScanOp< Op, XprType >, 1, typename eval< TensorScanOp< Op, XprType > >::type >
 
struct  ReduceBlock
 
struct  ReduceBlock< Self, true, false >
 
struct  ScanLauncher
 
struct  ScanLauncher< Self, Reducer, Eigen::SyclDevice, vectorize >
 
struct  traits< TensorShufflingOp< Shuffle, XprType > >
 
struct  eval< TensorShufflingOp< Shuffle, XprType >, Eigen::Dense >
 
struct  nested< TensorShufflingOp< Shuffle, XprType >, 1, typename eval< TensorShufflingOp< Shuffle, XprType > >::type >
 
struct  traits< TensorStridingOp< Strides, XprType > >
 
struct  eval< TensorStridingOp< Strides, XprType >, Eigen::Dense >
 
struct  nested< TensorStridingOp< Strides, XprType >, 1, typename eval< TensorStridingOp< Strides, XprType > >::type >
 
struct  traits< TensorTraceOp< Dims, XprType > >
 
struct  eval< TensorTraceOp< Dims, XprType >, Eigen::Dense >
 
struct  nested< TensorTraceOp< Dims, XprType >, 1, typename eval< TensorTraceOp< Dims, XprType > >::type >
 
class  compute_tensor_flags
 
struct  traits< Tensor< Scalar_, NumIndices_, Options_, IndexType_ > >
 
struct  traits< TensorFixedSize< Scalar_, Dimensions, Options_, IndexType_ > >
 
struct  traits< TensorMap< PlainObjectType, Options_, MakePointer_ > >
 
struct  traits< TensorRef< PlainObjectType > >
 
struct  eval< Tensor< Scalar_, NumIndices_, Options, IndexType_ >, Eigen::Dense >
 
struct  eval< const Tensor< Scalar_, NumIndices_, Options, IndexType_ >, Eigen::Dense >
 
struct  eval< TensorFixedSize< Scalar_, Dimensions, Options, IndexType_ >, Eigen::Dense >
 
struct  eval< const TensorFixedSize< Scalar_, Dimensions, Options, IndexType_ >, Eigen::Dense >
 
struct  eval< TensorMap< PlainObjectType, Options, MakePointer >, Eigen::Dense >
 
struct  eval< const TensorMap< PlainObjectType, Options, MakePointer >, Eigen::Dense >
 
struct  eval< TensorRef< PlainObjectType >, Eigen::Dense >
 
struct  eval< const TensorRef< PlainObjectType >, Eigen::Dense >
 
struct  nested
 
struct  nested< Tensor< Scalar_, NumIndices_, Options_, IndexType_ > >
 
struct  nested< const Tensor< Scalar_, NumIndices_, Options_, IndexType_ > >
 
struct  nested< TensorFixedSize< Scalar_, Dimensions, Options, IndexType_ > >
 
struct  nested< const TensorFixedSize< Scalar_, Dimensions, Options, IndexType_ > >
 
struct  nested< TensorRef< PlainObjectType > >
 
struct  nested< const TensorRef< PlainObjectType > >
 
struct  static_val
 
struct  TensorUInt128
 
struct  traits< TensorVolumePatchOp< Planes, Rows, Cols, XprType > >
 
struct  eval< TensorVolumePatchOp< Planes, Rows, Cols, XprType >, Eigen::Dense >
 
struct  nested< TensorVolumePatchOp< Planes, Rows, Cols, XprType >, 1, typename eval< TensorVolumePatchOp< Planes, Rows, Cols, XprType > >::type >
 
struct  tensor_static_symgroup_permutate
 
struct  tensor_static_symgroup_permutate< numeric_list< int, nn... > >
 
struct  tensor_static_symgroup_element
 
struct  tensor_static_symgroup_element_ctor
 
struct  tensor_static_symgroup_identity_ctor
 
struct  tensor_static_symgroup_multiply_helper
 
struct  tensor_static_symgroup_multiply
 
struct  tensor_static_symgroup_equality
 
struct  tensor_static_symgroup
 
struct  tensor_static_symgroup_do_apply
 
struct  tensor_static_symgroup_do_apply< internal::type_list< first, next... > >
 
struct  tensor_static_symgroup_do_apply< internal::type_list< EIGEN_TPL_PP_SPEC_HACK_USE(empty)> >
 
class  tensor_symmetry_pre_analysis
 Pre-select whether to use a static or dynamic symmetry group. More...
 
struct  tensor_static_symgroup_if
 
struct  tensor_symmetry_calculate_flags
 
struct  tensor_symmetry_assign_value
 
struct  tensor_symmetry_num_indices
 
struct  tensor_symmetry_num_indices< Symmetry< One_, Two_ >, Sym... >
 
struct  tensor_symmetry_num_indices< AntiSymmetry< One_, Two_ >, Sym... >
 
struct  tensor_symmetry_num_indices< Hermiticity< One_, Two_ >, Sym... >
 
struct  tensor_symmetry_num_indices< AntiHermiticity< One_, Two_ >, Sym... >
 
struct  tensor_symmetry_pre_analysis< NumIndices >
 
struct  tensor_symmetry_pre_analysis< NumIndices, Gen_, Gens_... >
 
struct  tensor_static_symgroup_if< true, NumIndices, Gens... >
 
class  tensor_symmetry_value_setter
 
struct  auto_diff_special_op
 
struct  maybe_coherent_pad_helper
 
struct  maybe_coherent_pad_helper< DerivativeType, OtherDerivativeType, std::enable_if_t< enum_ge_not_dynamic(DerivativeType::SizeAtCompileTime, OtherDerivativeType::SizeAtCompileTime)> >
 
struct  auto_diff_special_op< DerivativeType, true >
 
struct  auto_diff_special_op< DerivativeType, false >
 
struct  is_identically_zero_impl< AutoDiffScalar< DerivativeType > >
 
struct  CoherentPadOp
 
struct  traits< CoherentPadOp< XprType, SizeAtCompileTime_ > >
 
struct  unary_evaluator< CoherentPadOp< ArgType, SizeAtCompileTime > >
 
struct  intersector_helper1
 
struct  intersector_helper2
 
struct  minimizer_helper1
 
struct  minimizer_helper2
 
struct  vector_int_pair
 
struct  get_boxes_helper
 
struct  get_boxes_helper< ObjectList, VolumeList, int >
 
struct  arpack_wrapper
 
struct  OP
 
struct  arpack_wrapper< float, float >
 
struct  arpack_wrapper< double, double >
 
struct  OP< MatrixSolver, MatrixType, Scalar, true >
 
struct  OP< MatrixSolver, MatrixType, Scalar, false >
 
struct  traits< EulerAngles< Scalar_, _System > >
 
struct  eulerangles_assign_impl< System, Other, 3, 3 >
 
struct  eulerangles_assign_impl< System, Other, 3, 1 >
 
struct  Abs
 
struct  Abs< Num, false >
 
struct  IsValidAxis
 
struct  eulerangles_assign_impl
 
struct  fftw_plan
 
struct  fftw_plan< float >
 
struct  fftw_plan< double >
 
struct  fftw_plan< long double >
 
struct  fftw_impl
 
struct  kiss_cpx_fft
 
struct  kissfft_impl
 
struct  pocketfft_impl
 
struct  traits< Eigen::BiCGSTABL< MatrixType_, Preconditioner_ > >
 
struct  traits< DGMRES< MatrixType_, Preconditioner_ > >
 
struct  traits< GMRES< MatrixType_, Preconditioner_ > >
 
struct  traits< Eigen::IDRS< MatrixType_, Preconditioner_ > >
 
struct  traits< IDRSTABL< MatrixType_, Preconditioner_ > >
 
struct  traits< MINRES< MatrixType_, UpLo_, Preconditioner_ > >
 
struct  traits< KroneckerProduct< Lhs_, Rhs_ > >
 
struct  traits< KroneckerProductSparse< Lhs_, Rhs_ > >
 
struct  MatrixExponentialScalingOp
 Scaling operator. More...
 
struct  matrix_exp_computeUV
 Compute the (17,17)-Padé approximant to the exponential. More...
 
struct  matrix_exp_computeUV< MatrixType, float >
 
struct  matrix_exp_computeUV< MatrixType, double >
 
struct  matrix_exp_computeUV< MatrixType, long double >
 
struct  is_exp_known_type
 
struct  is_exp_known_type< float >
 
struct  is_exp_known_type< double >
 
struct  is_exp_known_type< long double >
 
struct  traits< MatrixExponentialReturnValue< Derived > >
 
class  MatrixFunctionAtomic
 Helper class for computing matrix functions of atomic matrices. More...
 
struct  matrix_function_compute
 Class for computing matrix functions. More...
 
struct  matrix_function_compute< MatrixType, 0 >
 Partial specialization of MatrixFunction for real matrices. More...
 
struct  matrix_function_compute< MatrixType, 1 >
 Partial specialization of MatrixFunction for complex matrices. More...
 
struct  traits< MatrixFunctionReturnValue< Derived > >
 
struct  matrix_log_min_pade_degree
 
struct  matrix_log_max_pade_degree
 
class  MatrixLogarithmAtomic
 Helper class for computing matrix logarithm of atomic matrices. More...
 
struct  traits< MatrixLogarithmReturnValue< Derived > >
 
struct  traits< MatrixPowerParenthesesReturnValue< MatrixPowerType > >
 
struct  traits< MatrixPowerReturnValue< Derived > >
 
struct  traits< MatrixComplexPowerReturnValue< Derived > >
 
struct  matrix_sqrt_compute
 Helper struct for computing matrix square roots of general matrices. More...
 
struct  matrix_sqrt_compute< MatrixType, 0 >
 
struct  matrix_sqrt_compute< MatrixType, 1 >
 
struct  traits< MatrixSquareRootReturnValue< Derived > >
 
struct  decrement_if_fixed_size
 
class  companion
 
struct  traits< BlockSparseMatrix< Scalar_, _BlockAtCompileTime, Options_, Index_ > >
 
struct  traits< BlockSparseMatrixView< BlockSparseMatrixT > >
 
struct  TripletComp
 
struct  traits< BlockSparseTimeDenseProduct< BlockSparseMatrixT, VecType > >
 
struct  functor_traits< scalar_bessel_i0_op< Scalar > >
 
struct  functor_traits< scalar_bessel_i0e_op< Scalar > >
 
struct  functor_traits< scalar_bessel_i1_op< Scalar > >
 
struct  functor_traits< scalar_bessel_i1e_op< Scalar > >
 
struct  functor_traits< scalar_bessel_j0_op< Scalar > >
 
struct  functor_traits< scalar_bessel_y0_op< Scalar > >
 
struct  functor_traits< scalar_bessel_j1_op< Scalar > >
 
struct  functor_traits< scalar_bessel_y1_op< Scalar > >
 
struct  functor_traits< scalar_bessel_k0_op< Scalar > >
 
struct  functor_traits< scalar_bessel_k0e_op< Scalar > >
 
struct  functor_traits< scalar_bessel_k1_op< Scalar > >
 
struct  functor_traits< scalar_bessel_k1e_op< Scalar > >
 
struct  bessel_i0e_retval
 
struct  generic_i0e
 
struct  generic_i0e< T, float >
 
struct  generic_i0e< T, double >
 
struct  bessel_i0e_impl
 
struct  bessel_i0_retval
 
struct  generic_i0
 
struct  bessel_i0_impl
 
struct  bessel_i1e_retval
 
struct  generic_i1e
 
struct  generic_i1e< T, float >
 
struct  generic_i1e< T, double >
 
struct  bessel_i1e_impl
 
struct  bessel_i1_retval
 
struct  generic_i1
 
struct  bessel_i1_impl
 
struct  bessel_k0e_retval
 
struct  generic_k0e
 
struct  generic_k0e< T, float >
 
struct  generic_k0e< T, double >
 
struct  bessel_k0e_impl
 
struct  bessel_k0_retval
 
struct  generic_k0
 
struct  generic_k0< T, float >
 
struct  generic_k0< T, double >
 
struct  bessel_k0_impl
 
struct  bessel_k1e_retval
 
struct  generic_k1e
 
struct  generic_k1e< T, float >
 
struct  generic_k1e< T, double >
 
struct  bessel_k1e_impl
 
struct  bessel_k1_retval
 
struct  generic_k1
 
struct  generic_k1< T, float >
 
struct  generic_k1< T, double >
 
struct  bessel_k1_impl
 
struct  bessel_j0_retval
 
struct  generic_j0
 
struct  generic_j0< T, float >
 
struct  generic_j0< T, double >
 
struct  bessel_j0_impl
 
struct  bessel_y0_retval
 
struct  generic_y0
 
struct  generic_y0< T, float >
 
struct  generic_y0< T, double >
 
struct  bessel_y0_impl
 
struct  bessel_j1_retval
 
struct  generic_j1
 
struct  generic_j1< T, float >
 
struct  generic_j1< T, double >
 
struct  bessel_j1_impl
 
struct  bessel_y1_retval
 
struct  generic_y1
 
struct  generic_y1< T, float >
 
struct  generic_y1< T, double >
 
struct  bessel_y1_impl
 
struct  functor_traits< scalar_igamma_op< Scalar > >
 
struct  scalar_igamma_der_a_op
 Template functor to compute the derivative of the incomplete gamma function igamma_der_a(a, x) More...
 
struct  functor_traits< scalar_igamma_der_a_op< Scalar > >
 
struct  scalar_gamma_sample_der_alpha_op
 Template functor to compute the derivative of the sample of a Gamma(alpha, 1) random variable with respect to the parameter alpha gamma_sample_der_alpha(alpha, sample) More...
 
struct  functor_traits< scalar_gamma_sample_der_alpha_op< Scalar > >
 
struct  functor_traits< scalar_igammac_op< Scalar > >
 
struct  functor_traits< scalar_betainc_op< Scalar > >
 
struct  functor_traits< scalar_lgamma_op< Scalar > >
 
struct  functor_traits< scalar_digamma_op< Scalar > >
 
struct  functor_traits< scalar_zeta_op< Scalar > >
 
struct  scalar_polygamma_op
 Template functor to compute the polygamma function. More...
 
struct  functor_traits< scalar_polygamma_op< Scalar > >
 
struct  functor_traits< scalar_erf_op< Scalar > >
 
struct  functor_traits< scalar_erfc_op< Scalar > >
 
struct  functor_traits< scalar_ndtri_op< Scalar > >
 
struct  lgamma_impl
 
struct  lgamma_retval
 
struct  digamma_retval
 
struct  digamma_impl_maybe_poly
 
struct  digamma_impl_maybe_poly< float >
 
struct  digamma_impl_maybe_poly< double >
 
struct  digamma_impl
 
struct  generic_fast_erfc
 
struct  erfc_impl
 
struct  erfc_retval
 
struct  generic_fast_erf
 
struct  erf_impl
 
struct  erf_retval
 
struct  ndtri_retval
 
struct  ndtri_impl
 
struct  igammac_retval
 
struct  cephes_helper
 
struct  cephes_helper< float >
 
struct  cephes_helper< double >
 
struct  igammac_cf_impl
 
struct  igamma_series_impl
 
struct  igammac_impl
 
struct  igamma_generic_impl
 
struct  igamma_retval
 
struct  igamma_impl
 
struct  igamma_der_a_retval
 
struct  igamma_der_a_impl
 
struct  gamma_sample_der_alpha_retval
 
struct  gamma_sample_der_alpha_impl
 
struct  zeta_retval
 
struct  zeta_impl_series
 
struct  zeta_impl_series< float >
 
struct  zeta_impl_series< double >
 
struct  zeta_impl
 
struct  polygamma_retval
 
struct  polygamma_impl
 
struct  betainc_retval
 
struct  betainc_impl
 
struct  increment_if_fixed_size
 

Typedefs

typedef __vector float Packet4f
 
typedef __vector int Packet4i
 
typedef __vector unsigned int Packet4ui
 
typedef __vector __bool int Packet4bi
 
typedef __vector short int Packet8s
 
typedef __vector unsigned short int Packet8us
 
typedef __vector __bool short Packet8bi
 
typedef __vector signed char Packet16c
 
typedef __vector unsigned char Packet16uc
 
typedef eigen_packet_wrapper< __vector unsigned short int, 0 > Packet8bf
 
typedef __m256 Packet8f
 
typedef eigen_packet_wrapper< __m256i, 0 > Packet8i
 
typedef __m256d Packet4d
 
typedef eigen_packet_wrapper< __m128i, 2 > Packet8h
 
typedef eigen_packet_wrapper< __m256i, 4 > Packet8ui
 
typedef __m512 Packet16f
 
typedef __m512i Packet16i
 
typedef __m512d Packet8d
 
typedef eigen_packet_wrapper< __m512i, 1 > Packet8l
 
typedef eigen_packet_wrapper< __m256i, 1 > Packet16h
 
typedef eigen_packet_wrapper< __m256i, 2 > Packet16bf
 
typedef __m512h Packet32h
 
typedef Packet16f vecFullFloat
 
typedef Packet8d vecFullDouble
 
typedef Packet8f vecHalfFloat
 
typedef Packet4d vecHalfDouble
 
typedef __m128d Packet2d
 
typedef eigen_packet_wrapper< __m128i, 3 > Packet2l
 
typedef eigen_packet_wrapper< __m128i, 7 > Packet2ul
 
typedef float32x2_t Packet2f
 
typedef eigen_packet_wrapper< int32_t, 2 > Packet4c
 
typedef int8x8_t Packet8c
 
typedef eigen_packet_wrapper< uint32_t, 5 > Packet4uc
 
typedef uint8x8_t Packet8uc
 
typedef int16x4_t Packet4s
 
typedef uint16x4_t Packet4us
 
typedef int32x2_t Packet2i
 
typedef uint32x2_t Packet2ui
 
typedef eigen_packet_wrapper< uint16x4_t, 19 > Packet4bf
 
typedef eigen_packet_wrapper< __m128i, 1 > Packet16b
 
typedef const charSsePrefetchPtrType
 
typedef svint32_t PacketXi __attribute__((arm_sve_vector_bits(EIGEN_ARM64_SVE_VL)))
 
template<typename LhsScalar , typename RhsScalar , bool UseTypedComparators>
using cmp_return_t = typename typed_cmp_helper< LhsScalar, RhsScalar, UseTypedComparators >::type
 
template<bool Cond, typename T >
using conj_expr_if = std::conditional<!Cond, const T &, CwiseUnaryOp< scalar_conjugate_op< typename traits< T >::Scalar >, T > >
 
template<typename Indices , int SizeAtCompileTime>
using IvcType = typename internal::IndexedViewHelperIndicesWrapper< Indices, SizeAtCompileTime >::type
 
template<typename T >
using remove_all_t = typename remove_all< T >::type
 
template<typename... >
using void_t = void
 
template<typename T >
using add_const_on_value_type_t = typename add_const_on_value_type< T >::type
 
template<bool... values>
using reduce_all = std::is_same< std::integer_sequence< bool, values..., true >, std::integer_sequence< bool, true, values... > >
 
template<bool... values>
using reduce_any = std::integral_constant< bool, !std::is_same< std::integer_sequence< bool, values..., false >, std::integer_sequence< bool, false, values... > >::value >
 
template<class Source , int Order>
using WithStorageOrder = SparseMatrix< typename Source::Scalar, Order, typename Source::StorageIndex >
 
template<typename... Types>
using extract_output_indices = typename extract_output_indices_helper< sizeof...(Types), 0, std::index_sequence<>, Types... >::type
 

Enumerations

enum  SignMatrix { PositiveSemiDef , NegativeSemiDef , ZeroSign , Indefinite }
 
enum  { meta_floor_log2_terminate , meta_floor_log2_move_up , meta_floor_log2_move_down , meta_floor_log2_bogus }
 
enum  PermPermProduct_t { PermPermProduct }
 
enum  GEBPPacketSizeType { GEBPPacketFull = 0 , GEBPPacketHalf , GEBPPacketQuarter }
 
enum  GEMVPacketSizeType { GEMVPacketFull = 0 , GEMVPacketHalf , GEMVPacketQuarter }
 
enum  ComparisonName : unsigned int {
  cmp_EQ = 0 , cmp_LT = 1 , cmp_LE = 2 , cmp_UNORD = 3 ,
  cmp_NEQ = 4 , cmp_GT = 5 , cmp_GE = 6
}
 
enum  { SDP_AsScalarProduct , SDP_AsCwiseProduct }
 
enum  { SVA_RuntimeSwitch , SVA_Inner , SVA_Outer }
 
enum  { LUNoMarker = 3 }
 
enum  { emptyIdxLU = -1 }
 
enum  MemType {
  LUSUP , UCOL , LSUB , USUB ,
  LLVL , ULVL
}
 
enum  { PreconditionIfMoreColsThanRows , PreconditionIfMoreRowsThanCols }
 
enum  OptionsMasks { QRPreconditionerBits , ComputationOptionsBits = ComputeThinU | ComputeFullU | ComputeThinV | ComputeFullV }
 
enum class  TensorBlockShapeType { kUniformAllDims , kSkewedInnerDims }
 
enum  TensorBlockKind { kExpr , kView , kMaterializedInScratch , kMaterializedInOutput }
 
enum  { ShardByRow = 0 , ShardByCol = 1 }
 
enum  { Rhs = 0 , Lhs = 1 }
 
enum  TiledEvaluation { Off = 0 , On = 1 }
 
enum  IgammaComputationMode { VALUE , DERIVATIVE , SAMPLE_DERIVATIVE }
 

Functions

template<typename MatrixType , typename VectorType >
static Index llt_rank_update_lower (MatrixType &mat, const VectorType &vec, const typename MatrixType::RealScalar &sigma)
 
template<typename StorageIndex_ >
cholmod_dense * cm_solve (int sys, cholmod_factor &L, cholmod_dense &B, cholmod_common &Common)
 
template<>
cholmod_dense * cm_solve< SuiteSparse_long > (int sys, cholmod_factor &L, cholmod_dense &B, cholmod_common &Common)
 
template<typename StorageIndex_ >
cholmod_sparse * cm_spsolve (int sys, cholmod_factor &L, cholmod_sparse &B, cholmod_common &Common)
 
template<>
cholmod_sparse * cm_spsolve< SuiteSparse_long > (int sys, cholmod_factor &L, cholmod_sparse &B, cholmod_common &Common)
 
template<typename StorageIndex_ >
int cm_factorize_p (cholmod_sparse *A, double beta[2], StorageIndex_ *fset, std::size_t fsize, cholmod_factor *L, cholmod_common &Common)
 
template<>
int cm_factorize_p< SuiteSparse_long > (cholmod_sparse *A, double beta[2], SuiteSparse_long *fset, std::size_t fsize, cholmod_factor *L, cholmod_common &Common)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pset1< Packet2cf > (const std::complex< float > &from)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pload< Packet2cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE Packet2cf ploadu< Packet2cf > (const std::complex< float > *from)
 
template<>
EIGEN_ALWAYS_INLINE Packet2cf pload_partial< Packet2cf > (const std::complex< float > *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet2cf ploadu_partial< Packet2cf > (const std::complex< float > *from, const Index n, const Index offset)
 
template<>
EIGEN_STRONG_INLINE Packet2cf ploaddup< Packet2cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< std::complex< float > > (std::complex< float > *to, const Packet2cf &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< std::complex< float > > (std::complex< float > *to, const Packet2cf &from)
 
template<>
EIGEN_ALWAYS_INLINE void pstore_partial< std::complex< float > > (std::complex< float > *to, const Packet2cf &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstoreu_partial< std::complex< float > > (std::complex< float > *to, const Packet2cf &from, const Index n, const Index offset)
 
EIGEN_STRONG_INLINE Packet2cf pload2 (const std::complex< float > &from0, const std::complex< float > &from1)
 
template<>
EIGEN_ALWAYS_INLINE Packet2cf pload_ignore< Packet2cf > (const std::complex< float > *from)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet pgather_complex_size2 (const Scalar *from, Index stride, const Index n=2)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet2cf pgather< std::complex< float >, Packet2cf > (const std::complex< float > *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet2cf pgather_partial< std::complex< float >, Packet2cf > (const std::complex< float > *from, Index stride, const Index n)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_complex_size2 (Scalar *to, const Packet &from, Index stride, const Index n=2)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter< std::complex< float >, Packet2cf > (std::complex< float > *to, const Packet2cf &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial< std::complex< float >, Packet2cf > (std::complex< float > *to, const Packet2cf &from, Index stride, const Index n)
 
template<>
EIGEN_STRONG_INLINE Packet2cf padd< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf psub< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pnegate (const Packet2cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pconj (const Packet2cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pand< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf por< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pxor< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pandnot< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE void prefetch< std::complex< float > > (const std::complex< float > *addr)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > pfirst< Packet2cf > (const Packet2cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cf preverse (const Packet2cf &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > predux< Packet2cf > (const Packet2cf &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > predux_mul< Packet2cf > (const Packet2cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pdiv< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pcplxflip< Packet2cf > (const Packet2cf &x)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet2cf, 2 > &kernel)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pcmp_eq (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf psqrt< Packet2cf > (const Packet2cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cf plog< Packet2cf > (const Packet2cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pexp< Packet2cf > (const Packet2cf &a)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet4f psqrt< Packet4f > (const Packet4f &x)
 
template<typename Scalar , int StorageOrder>
EIGEN_ALWAYS_INLINE std::complex< ScalargetAdjointVal (Index i, Index j, const_blas_data_mapper< std::complex< Scalar >, Index, StorageOrder > &dt)
 
template<typename Scalar , int StorageOrder, int N>
EIGEN_STRONG_INLINE void symm_pack_complex_rhs_helper (std::complex< Scalar > *blockB, const std::complex< Scalar > *_rhs, Index rhsStride, Index rows, Index cols, Index k2)
 
template<typename Scalar , int StorageOrder>
EIGEN_STRONG_INLINE void symm_pack_complex_lhs_helper (std::complex< Scalar > *blockA, const std::complex< Scalar > *_lhs, Index lhsStride, Index cols, Index rows)
 
template<typename Scalar , int StorageOrder, int N>
EIGEN_STRONG_INLINE void symm_pack_rhs_helper (Scalar *blockB, const Scalar *_rhs, Index rhsStride, Index rows, Index cols, Index k2)
 
template<typename Scalar , int StorageOrder>
EIGEN_STRONG_INLINE void symm_pack_lhs_helper (Scalar *blockA, const Scalar *_lhs, Index lhsStride, Index cols, Index rows)
 
template<typename Scalar , typename Packet , int N>
EIGEN_ALWAYS_INLINE void storeBlock (Scalar *to, PacketBlock< Packet, N > &block)
 
template<typename Packet , bool NegativeAccumulate, int N>
EIGEN_ALWAYS_INLINE void pger_common (PacketBlock< Packet, N > *acc, const Packet &lhsV, const Packet *rhsV)
 
template<int N, typename Scalar , typename Packet , bool NegativeAccumulate>
EIGEN_ALWAYS_INLINE void pger (PacketBlock< Packet, N > *acc, const Scalar *lhs, const Packet *rhsV)
 
template<int N, typename Packet , bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void pgerc_common (PacketBlock< Packet, N > *accReal, PacketBlock< Packet, N > *accImag, const Packet &lhsV, Packet &lhsVi, const Packet *rhsV, const Packet *rhsVi)
 
template<int N, typename Scalar , typename Packet , bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void pgerc (PacketBlock< Packet, N > *accReal, PacketBlock< Packet, N > *accImag, const Scalar *lhs_ptr, const Scalar *lhs_ptr_imag, const Packet *rhsV, const Packet *rhsVi)
 
template<typename Packet >
EIGEN_ALWAYS_INLINE Packet ploadLhs (const __UNPACK_TYPE__(Packet) *lhs)
 
template<typename Packet , int N>
EIGEN_ALWAYS_INLINE void bsetzero (PacketBlock< Packet, N > &acc)
 
template<typename Packet , int N>
EIGEN_ALWAYS_INLINE void bscalec_common (PacketBlock< Packet, N > &acc, PacketBlock< Packet, N > &accZ, const Packet &pAlpha)
 
template<typename Packet , int N>
EIGEN_ALWAYS_INLINE void band (PacketBlock< Packet, N > &acc, const Packet &pMask)
 
template<typename Packet , int N, bool mask>
EIGEN_ALWAYS_INLINE void bscalec (PacketBlock< Packet, N > &aReal, PacketBlock< Packet, N > &aImag, const Packet &bReal, const Packet &bImag, PacketBlock< Packet, N > &cReal, PacketBlock< Packet, N > &cImag, const Packet &pMask)
 
template<typename DataMapper , typename Packet , const Index accCols, int StorageOrder, bool Complex, int N, bool full>
EIGEN_ALWAYS_INLINE void bload (PacketBlock< Packet, N *(Complex ? 2 :1)> &acc, const DataMapper &res, Index row, Index col)
 
template<typename DataMapper , typename Packet , int N>
EIGEN_ALWAYS_INLINE void bstore (PacketBlock< Packet, N > &acc, const DataMapper &res, Index row)
 
template<typename Packet >
EIGEN_ALWAYS_INLINE Packet bmask (const Index remaining_rows)
 
template<>
EIGEN_ALWAYS_INLINE Packet2d bmask< Packet2d > (const Index remaining_rows)
 
template<typename Packet , int N>
EIGEN_ALWAYS_INLINE void bscale (PacketBlock< Packet, N > &acc, PacketBlock< Packet, N > &accZ, const Packet &pAlpha)
 
template<typename Packet , int N, bool mask>
EIGEN_ALWAYS_INLINE void bscale (PacketBlock< Packet, N > &acc, PacketBlock< Packet, N > &accZ, const Packet &pAlpha, const Packet &pMask)
 
template<typename Packet , int N, bool real>
EIGEN_ALWAYS_INLINE void pbroadcastN (const __UNPACK_TYPE__(Packet) *ap0, const __UNPACK_TYPE__(Packet) *ap1, const __UNPACK_TYPE__(Packet) *ap2, Packet &a0, Packet &a1, Packet &a2, Packet &a3)
 
template<>
EIGEN_ALWAYS_INLINE void pbroadcastN< Packet4f, 4, true > (const float *ap0, const float *, const float *, Packet4f &a0, Packet4f &a1, Packet4f &a2, Packet4f &a3)
 
template<>
EIGEN_ALWAYS_INLINE void pbroadcastN< Packet4f, 4, false > (const float *ap0, const float *ap1, const float *ap2, Packet4f &a0, Packet4f &a1, Packet4f &a2, Packet4f &a3)
 
template<>
EIGEN_ALWAYS_INLINE void pbroadcastN< Packet2d, 4, false > (const double *ap0, const double *, const double *, Packet2d &a0, Packet2d &a1, Packet2d &a2, Packet2d &a3)
 
template<typename Packet , typename Packetc , int N, bool full>
EIGEN_ALWAYS_INLINE void bcouple_common (PacketBlock< Packet, N > &taccReal, PacketBlock< Packet, N > &taccImag, PacketBlock< Packetc, N > &acc1, PacketBlock< Packetc, N > &acc2)
 
template<typename Packet , typename Packetc , int N, bool full>
EIGEN_ALWAYS_INLINE void bcouple (PacketBlock< Packet, N > &taccReal, PacketBlock< Packet, N > &taccImag, PacketBlock< Packetc, N *2 > &tRes, PacketBlock< Packetc, N > &acc1, PacketBlock< Packetc, N > &acc2)
 
template<typename Scalar , typename Packet , const Index accRows, const Index remaining_rows>
EIGEN_ALWAYS_INLINE void MICRO_EXTRA_ROW (const Scalar *&lhs_ptr, const Scalar *&rhs_ptr0, const Scalar *&rhs_ptr1, const Scalar *&rhs_ptr2, PacketBlock< Packet, accRows > &accZero)
 
template<typename Scalar , typename Packet , typename DataMapper , const Index accRows, const Index accCols, const Index remaining_rows>
EIGEN_ALWAYS_INLINE void gemm_unrolled_row_iteration (const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index row, Index rows, const Packet &pAlpha, const Packet &pMask)
 
template<typename Scalar , typename Packet , typename DataMapper , const Index accRows, const Index accCols>
EIGEN_ALWAYS_INLINE void gemm_extra_row (const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index row, Index rows, Index remaining_rows, const Packet &pAlpha, const Packet &pMask)
 
template<int unroll_factor, typename Scalar , typename Packet , typename DataMapper , const Index accRows, const Index accCols, const Index accCols2>
EIGEN_ALWAYS_INLINE void gemm_unrolled_iteration (const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index &row, const Packet &pAlpha, const Packet &pMask)
 
template<typename Scalar , typename Packet , typename DataMapper , const Index accRows, const Index accCols>
EIGEN_ALWAYS_INLINE void gemm_cols (const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index depth, Index strideA, Index offsetA, Index strideB, Index offsetB, Index col, Index rows, Index remaining_rows, const Packet &pAlpha, const Packet &pMask)
 
template<typename Scalar , typename Packet , typename DataMapper , const Index accCols>
EIGEN_ALWAYS_INLINE void gemm_extra_cols (const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index depth, Index strideA, Index offsetA, Index strideB, Index offsetB, Index col, Index rows, Index cols, Index remaining_rows, const Packet &pAlpha, const Packet &pMask)
 
template<typename Scalar , typename Packet , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols>
EIGEN_STRONG_INLINE void gemm (const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index rows, Index depth, Index cols, Scalar alpha, Index strideA, Index strideB, Index offsetA, Index offsetB)
 
template<typename Scalar , typename Packet , const Index accRows, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal, const Index remaining_rows>
EIGEN_ALWAYS_INLINE void MICRO_COMPLEX_EXTRA_ROW (const Scalar *&lhs_ptr_real, const Scalar *&lhs_ptr_imag, const Scalar *&rhs_ptr_real0, const Scalar *&rhs_ptr_real1, const Scalar *&rhs_ptr_real2, const Scalar *&rhs_ptr_imag0, const Scalar *&rhs_ptr_imag1, const Scalar *&rhs_ptr_imag2, PacketBlock< Packet, accRows > &accReal, PacketBlock< Packet, accRows > &accImag)
 
template<typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal, const Index remaining_rows>
EIGEN_ALWAYS_INLINE void gemm_unrolled_complex_row_iteration (const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index row, Index rows, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
 
template<typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void gemm_complex_extra_row (const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index row, Index rows, Index remaining_rows, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
 
template<int unroll_factor, typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accRows, const Index accCols, const Index accCols2, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void gemm_complex_unrolled_iteration (const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index &row, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
 
template<typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void gemm_complex_cols (const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index depth, Index strideA, Index offsetA, Index strideB, Index offsetB, Index col, Index rows, Index remaining_rows, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
 
template<typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void gemm_complex_extra_cols (const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index depth, Index strideA, Index offsetA, Index strideB, Index offsetB, Index col, Index rows, Index cols, Index remaining_rows, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
 
template<typename LhsScalar , typename RhsScalar , typename Scalarc , typename Scalar , typename Packet , typename Packetc , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_STRONG_INLINE void gemm_complex (const DataMapper &res, const LhsScalar *blockAc, const RhsScalar *blockBc, Index rows, Index depth, Index cols, Scalarc alpha, Index strideA, Index strideB, Index offsetA, Index offsetB)
 
EIGEN_ALWAYS_INLINE bool supportsMMA ()
 
EIGEN_ALWAYS_INLINE Packet4f loadAndMultiplyF32 (Packet4f acc, const Packet4f pAlpha, float *result)
 
template<bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void storeF32 (float *&result, Packet4f result_block, Index rows, Index extra_rows)
 
template<bool rhsExtraCols, bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void storeResults (Packet4f(&acc)[4], Index rows, const Packet4f pAlpha, float *result, Index extra_cols, Index extra_rows)
 
EIGEN_ALWAYS_INLINE Packet4f oneConvertBF16Hi (Packet8us data)
 
EIGEN_ALWAYS_INLINE Packet4f oneConvertBF16Lo (Packet8us data)
 
template<Index N, Index M>
EIGEN_ALWAYS_INLINE void storeConvertTwoBF16 (float *to, PacketBlock< Packet8bf,(N+7)/8 > &block, Index extra=0)
 
template<Index N>
EIGEN_ALWAYS_INLINE void storeConvertBlockBF16 (float *to, PacketBlock< Packet8bf,(N+7)/8 > &block, Index extra)
 
template<bool non_unit_stride, Index delta>
EIGEN_ALWAYS_INLINE Packet8bf loadBF16fromResult (bfloat16 *src, Index resInc)
 
EIGEN_ALWAYS_INLINE Packet4f oneConvertBF16Perm (Packet8us data, Packet16uc mask)
 
template<bool lhsExtraRows, bool odd, Index size>
EIGEN_ALWAYS_INLINE void convertArrayPointerBF16toF32DupOne (float *result, Index rows, const bfloat16 *src, Index extra_rows)
 
template<bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void convertArrayPointerBF16toF32Dup (float *result, Index cols, Index rows, const bfloat16 *src, Index delta, Index extra_rows)
 
template<const Index size, bool non_unit_stride>
EIGEN_ALWAYS_INLINE void convertPointerBF16toF32 (Index &i, float *result, Index rows, bfloat16 *&src, Index resInc)
 
template<bool non_unit_stride>
EIGEN_ALWAYS_INLINE void convertArrayPointerBF16toF32 (float *result, Index cols, Index rows, bfloat16 *src, Index resInc)
 
template<Index num_acc, Index size = 4>
EIGEN_ALWAYS_INLINE void zeroAccumulators (Packet4f(&acc)[num_acc][size])
 
template<Index num_acc>
EIGEN_ALWAYS_INLINE void tranposeResults (Packet4f(&acc)[num_acc][4])
 
template<Index num_acc>
EIGEN_ALWAYS_INLINE void addResults (Packet4f(&acc)[num_acc][4])
 
template<Index num_acc, bool rhsExtraCols, bool lhsExtraRows, Index num_rhs>
EIGEN_ALWAYS_INLINE void outputResultsVSX (Packet4f(&acc)[num_acc][4], Index rows, const Packet4f pAlpha, float *result, const Index extra_cols, Index extra_rows)
 
template<bool zero>
EIGEN_ALWAYS_INLINE void loadTwoRhsFloat32 (const float *block, Index strideB, Index i, Packet4f &dhs0, Packet4f &dhs1)
 
template<Index num_acc, bool zero, bool rhsExtraCols, Index num_rhs>
EIGEN_ALWAYS_INLINE void KLoop (const float *indexA, const float *indexB, Packet4f(&acc)[num_acc][4], Index strideB, Index k, Index offsetB, Index extra_cols)
 
template<const Index num_acc, bool rhsExtraCols, bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void colVSXLoopBodyIter (Index depth, Index rows, const Packet4f pAlpha, const float *indexA, const float *indexB, Index strideB, Index offsetB, float *result, const Index extra_cols, const Index extra_rows)
 
template<const Index num_acc, bool rhsExtraCols, bool lhsExtraRows>
void colVSXLoopBody (Index &col, Index depth, Index cols, Index rows, const Packet4f pAlpha, const float *indexA, const float *indexB, Index strideB, Index offsetB, float *result)
 
template<const Index num_acc, bool rhsExtraCols, bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void colVSXLoopBodyExtraN (Index col, Index depth, Index cols, Index rows, const Packet4f pAlpha, const float *indexA, const float *blockB, Index strideB, Index offsetB, float *result)
 
template<bool rhsExtraCols, bool lhsExtraRows>
void colVSXLoopBodyExtra (Index col, Index depth, Index cols, Index rows, const Packet4f pAlpha, const float *indexA, const float *blockB, Index strideB, Index offsetB, float *result)
 
template<Index size, bool lhsExtraRows = false>
EIGEN_ALWAYS_INLINE void colVSXLoops (Index depth, Index cols, Index rows, const Packet4f pAlpha, const bfloat16 *indexA, const float *indexA2, const float *blockB2, Index strideA, Index strideB, Index offsetB, float *result2)
 
template<Index size>
EIGEN_ALWAYS_INLINE void calcVSXColLoops (const bfloat16 *&indexA, const float *indexA2, Index &row, Index depth, Index cols, Index rows, const Packet4f pAlpha, const float *indexB, Index strideA, Index strideB, Index offsetA, Index offsetB, Index bigSuffix, float *result)
 
template<const Index size, typename DataMapper >
EIGEN_ALWAYS_INLINE void convertBF16toF32 (Index &i, float *result, Index rows, const DataMapper &src)
 
template<typename DataMapper >
EIGEN_ALWAYS_INLINE void convertArrayBF16toF32 (float *result, Index cols, Index rows, const DataMapper &src)
 
EIGEN_ALWAYS_INLINE Packet8bf convertF32toBF16VSX (const float *res)
 
template<typename DataMapper , const Index size>
EIGEN_ALWAYS_INLINE void convertArrayF32toBF16ColVSX (float *result, Index col, Index rows, const DataMapper &res)
 
template<typename DataMapper >
EIGEN_ALWAYS_INLINE void convertArrayF32toBF16VSX (float *result, Index cols, Index rows, const DataMapper &res)
 
template<typename DataMapper >
void gemmbfloat16 (const DataMapper &res, const bfloat16 *indexA, const bfloat16 *indexB, Index rows, Index depth, Index cols, bfloat16 alpha, Index strideA, Index strideB, Index offsetA, Index offsetB)
 
template<const Index size, bool non_unit_stride, Index delta>
EIGEN_ALWAYS_INLINE void storeBF16fromResult (bfloat16 *dst, Packet8bf data, Index resInc, Index extra=0)
 
template<Index num_acc, bool extraRows, Index size = 4>
EIGEN_ALWAYS_INLINE void outputVecColResults (Packet4f(&acc)[num_acc][size], float *result, Packet4f pAlpha, Index extra_rows)
 
template<Index num_acc, Index size = 4>
EIGEN_ALWAYS_INLINE void outputVecResults (Packet4f(&acc)[num_acc][size], float *result, Packet4f pAlpha)
 
template<typename RhsMapper , bool linear>
EIGEN_ALWAYS_INLINE Packet8bf loadColData (RhsMapper &rhs, Index j)
 
EIGEN_ALWAYS_INLINE void bsetzeroMMA (__vector_quad *acc)
 
template<typename DataMapper , typename Packet , bool full>
EIGEN_ALWAYS_INLINE void storeAccumulator (Index i, const DataMapper &data, const Packet &alpha, const Index elements, __vector_quad *acc)
 
template<typename DataMapper , typename Packet , typename Packetc , const Index accCols, const Index accCols2>
EIGEN_ALWAYS_INLINE void storeComplexAccumulator (Index i, const DataMapper &data, const Packet &alphaReal, const Packet &alphaImag, const Packet &pMask, __vector_quad *accReal, __vector_quad *accImag)
 
template<typename LhsPacket , typename RhsPacket , bool NegativeAccumulate>
EIGEN_ALWAYS_INLINE void pgerMMA (__vector_quad *acc, const RhsPacket &a, const LhsPacket &b)
 
template<typename LhsPacket , typename RhsPacket , bool NegativeAccumulate>
EIGEN_ALWAYS_INLINE void pgerMMA (__vector_quad *acc, const __vector_pair &a, const Packet2d &b)
 
template<typename Packet , typename RhsPacket , bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void pgercMMA (__vector_quad *accReal, __vector_quad *accImag, const Packet &lhsV, Packet &lhsVi, const RhsPacket &rhsV, RhsPacket &rhsVi)
 
template<typename Packet >
EIGEN_ALWAYS_INLINE Packet ploadRhs (const __UNPACK_TYPE__(Packet) *rhs)
 
template<typename Scalar , typename Packet >
EIGEN_ALWAYS_INLINE void ploadRhsMMA (const Scalar *rhs, Packet &rhsV)
 
template<>
EIGEN_ALWAYS_INLINE void ploadRhsMMA (const double *rhs, __vector_pair &rhsV)
 
EIGEN_ALWAYS_INLINE void ploadLhsMMA (const double *lhs, __vector_pair &lhsV)
 
template<int unroll_factor, typename Scalar , typename Packet , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, bool full, const Index accItr>
EIGEN_ALWAYS_INLINE void gemm_unrolled_MMA_iteration (const DataMapper &res0, const DataMapper &res1, const DataMapper &res2, const DataMapper &res3, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index strideB, Index offsetA, Index &row, const Packet &pAlpha, Index accCols2)
 
template<typename Scalar , typename Packet , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, const Index accItr>
EIGEN_ALWAYS_INLINE void gemmMMA_cols (const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index depth, Index strideA, Index offsetA, Index strideB, Index offsetB, Index col, Index rows, Index remaining_rows, const Packet &pAlpha, const Packet &pMask)
 
template<typename Scalar , typename Packet , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols>
void gemmMMA (const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index rows, Index depth, Index cols, Scalar alpha, Index strideA, Index strideB, Index offsetA, Index offsetB)
 
template<int unroll_factor, typename Scalar , typename Packet , typename Packetc , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, const Index accCols2, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal, const Index accItr>
EIGEN_ALWAYS_INLINE void gemm_complex_unrolled_MMA_iteration (const DataMapper &res0, const DataMapper &res1, const DataMapper &res2, const DataMapper &res3, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index &row, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
 
template<typename Scalar , typename Packet , typename Packetc , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal, const Index accItr>
EIGEN_ALWAYS_INLINE void gemmMMA_complex_cols (const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index depth, Index strideA, Index offsetA, Index strideB, Index offsetB, Index col, Index rows, Index remaining_rows, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
 
template<typename LhsScalar , typename RhsScalar , typename Scalarc , typename Scalar , typename Packet , typename Packetc , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
void gemm_complexMMA (const DataMapper &res, const LhsScalar *blockAc, const RhsScalar *blockBc, Index rows, Index depth, Index cols, Scalarc alpha, Index strideA, Index strideB, Index offsetA, Index offsetB)
 
template<bool zero>
EIGEN_ALWAYS_INLINE Packet8bf loadBfloat16 (const bfloat16 *indexA)
 
template<bool zero>
EIGEN_ALWAYS_INLINE Packet8bf loadRhsBfloat16 (const bfloat16 *blockB, Index strideB, Index i)
 
template<Index num_acc, Index num_packets, bool zero, bool rhsExtraCols, bool lhsExtraRows, Index num_rhs, Index num_lhs>
EIGEN_ALWAYS_INLINE void KLoop (const bfloat16 *indexA, const bfloat16 *indexB, __vector_quad(&quad_acc)[num_acc], Index strideB, Index k, Index offsetB, Index extra_cols, Index extra_rows)
 
template<Index num_acc>
EIGEN_ALWAYS_INLINE void zeroAccumulators (__vector_quad(&quad_acc)[num_acc])
 
template<Index num_acc>
EIGEN_ALWAYS_INLINE void disassembleAccumulators (__vector_quad(&quad_acc)[num_acc], Packet4f(&acc)[num_acc][4])
 
template<Index num_acc, bool rhsExtraCols, bool lhsExtraRows, Index num_rhs, Index num_lhs>
EIGEN_ALWAYS_INLINE void outputResults (Packet4f(&acc)[num_acc][4], Index rows, const Packet4f pAlpha, float *result, const Index extra_cols, Index extra_rows)
 
template<const Index num_acc, const Index num_packets, bool rhsExtraCols, bool lhsExtraRows, bool multiIter = false>
EIGEN_ALWAYS_INLINE void colLoopBodyIter (Index depth, Index rows, const Packet4f pAlpha, const bfloat16 *indexA, const bfloat16 *indexB, Index strideB, Index offsetB, float *result, const Index extra_cols, const Index extra_rows)
 
template<const Index num_acc, const Index num_packets, bool rhsExtraCols, bool lhsExtraRows>
void colLoopBody (Index &col, Index depth, Index cols, Index rows, const Packet4f pAlpha, const bfloat16 *indexA, const bfloat16 *indexB, Index strideB, Index offsetB, float *result)
 
template<const Index num_acc, const Index num_packets, bool rhsExtraCols, bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void colLoopBodyExtraN (Index col, Index depth, Index cols, Index rows, const Packet4f pAlpha, const bfloat16 *indexA, const bfloat16 *blockB, Index strideB, Index offsetB, float *result)
 
template<const Index num_packets, bool rhsExtraCols, bool lhsExtraRows>
void colLoopBodyExtra (Index col, Index depth, Index cols, Index rows, const Packet4f pAlpha, const bfloat16 *indexA, const bfloat16 *blockB, Index strideB, Index offsetB, float *result)
 
template<const Index num_packets, bool lhsExtraRows = false>
EIGEN_ALWAYS_INLINE void colLoops (Index depth, Index cols, Index rows, const Packet4f pAlpha, const bfloat16 *indexA, const bfloat16 *blockB, Index strideB, Index offsetB, float *result)
 
EIGEN_ALWAYS_INLINE Packet8bf convertF32toBF16 (const float *res)
 
template<typename DataMapper , const Index size>
EIGEN_ALWAYS_INLINE void convertArrayF32toBF16Col (float *result, Index col, Index rows, const DataMapper &res)
 
template<const Index size, bool non_unit_stride = false>
EIGEN_ALWAYS_INLINE void convertPointerF32toBF16 (Index &i, float *result, Index rows, bfloat16 *&dst, Index resInc=1)
 
template<bool non_unit_stride = false>
EIGEN_ALWAYS_INLINE void convertArrayPointerF32toBF16 (float *result, Index rows, bfloat16 *dst, Index resInc=1)
 
template<typename DataMapper >
EIGEN_ALWAYS_INLINE void convertArrayF32toBF16 (float *result, Index cols, Index rows, const DataMapper &res)
 
template<Index size>
EIGEN_ALWAYS_INLINE void calcColLoops (const bfloat16 *&indexA, Index &row, Index depth, Index cols, Index rows, const Packet4f pAlpha, const bfloat16 *indexB, Index strideB, Index offsetA, Index offsetB, Index bigSuffix, float *result)
 
template<typename DataMapper >
void gemmMMAbfloat16 (const DataMapper &res, const bfloat16 *indexA, const bfloat16 *indexB, Index rows, Index depth, Index cols, bfloat16 alpha, Index strideA, Index strideB, Index offsetA, Index offsetB)
 
template<Index num_acc, typename LhsMapper , bool zero>
EIGEN_ALWAYS_INLINE void loadVecLoop (Index k, LhsMapper &lhs, Packet8bf(&a0)[num_acc], Packet8bf b1)
 
template<Index num_acc>
EIGEN_ALWAYS_INLINE void multVec (__vector_quad(&quad_acc)[num_acc], Packet8bf(&a0)[num_acc], Packet8bf b0)
 
template<Index num_acc, typename LhsMapper , typename RhsMapper , bool zero, bool linear>
EIGEN_ALWAYS_INLINE void vecColLoop (Index j, LhsMapper &lhs, RhsMapper &rhs, __vector_quad(&quad_acc)[num_acc])
 
template<const Index num_acc, typename LhsMapper , typename RhsMapper , bool extraRows, bool linear>
void colVecColLoopBody (Index &row, Index cend, Index rows, LhsMapper &lhs, RhsMapper &rhs, const Packet4f pAlpha, float *result)
 
template<const Index num_acc, typename LhsMapper , typename RhsMapper , bool extraRows, bool linear>
EIGEN_ALWAYS_INLINE void colVecColLoopBodyExtraN (Index &row, Index cend, Index rows, LhsMapper &lhs, RhsMapper &rhs, const Packet4f pAlpha, float *result)
 
template<typename LhsMapper , typename RhsMapper , bool extraRows, bool linear>
EIGEN_ALWAYS_INLINE void colVecColLoopBodyExtra (Index &row, Index cend, Index rows, LhsMapper &lhs, RhsMapper &rhs, const Packet4f pAlpha, float *result)
 
template<typename LhsMapper , typename RhsMapper , bool linear>
EIGEN_ALWAYS_INLINE void calcVecColLoops (Index cend, Index rows, LhsMapper &lhs, RhsMapper &rhs, const Packet4f pAlpha, float *result)
 
template<typename LhsMapper , typename RhsMapper >
void gemvMMA_bfloat16_col (Index rows, Index cols, const LhsMapper &alhs, const RhsMapper &rhs, bfloat16 *res, Index resIncr, bfloat16 alpha)
 
template<Index num_acc>
EIGEN_ALWAYS_INLINE void preduxVecResults2 (Packet4f(&acc)[num_acc][4], Index k)
 
template<Index num_acc>
EIGEN_ALWAYS_INLINE void preduxVecResults (Packet4f(&acc)[num_acc][4])
 
template<Index num_acc, typename LhsMapper , typename RhsMapper , bool extra>
EIGEN_ALWAYS_INLINE void multVecLoop (__vector_quad(&quad_acc)[num_acc], const LhsMapper &lhs, RhsMapper &rhs, Index j, Index extra_cols)
 
template<Index num_acc, typename LhsMapper , typename RhsMapper >
EIGEN_ALWAYS_INLINE void vecLoop (Index cols, const LhsMapper &lhs, RhsMapper &rhs, __vector_quad(&quad_acc)[num_acc], Index extra_cols)
 
template<const Index num_acc, typename LhsMapper , typename RhsMapper >
void colVecLoopBody (Index &row, Index cols, Index rows, LhsMapper &lhs, RhsMapper &rhs, const Packet4f pAlpha, float *result)
 
template<const Index num_acc, typename LhsMapper , typename RhsMapper >
EIGEN_ALWAYS_INLINE void colVecLoopBodyExtraN (Index &row, Index cols, Index rows, LhsMapper &lhs, RhsMapper &rhs, const Packet4f pAlpha, float *result)
 
template<typename LhsMapper , typename RhsMapper >
EIGEN_ALWAYS_INLINE void colVecLoopBodyExtra (Index &row, Index cols, Index rows, LhsMapper &lhs, RhsMapper &rhs, const Packet4f pAlpha, float *result)
 
template<typename LhsMapper , typename RhsMapper >
EIGEN_ALWAYS_INLINE void calcVecLoops (Index cols, Index rows, LhsMapper &lhs, RhsMapper &rhs, const Packet4f pAlpha, float *result)
 
template<typename LhsMapper , typename RhsMapper >
EIGEN_STRONG_INLINE void gemvMMA_bfloat16_row (Index rows, Index cols, const LhsMapper &alhs, const RhsMapper &rhs, bfloat16 *res, Index resIncr, bfloat16 alpha)
 
static EIGEN_DECLARE_CONST_FAST_Packet4f (ZERO, 0)
 
static EIGEN_DECLARE_CONST_FAST_Packet4i (ZERO, 0)
 
static EIGEN_DECLARE_CONST_FAST_Packet4i (ONE, 1)
 
static EIGEN_DECLARE_CONST_FAST_Packet4i (MINUS16, -16)
 
static EIGEN_DECLARE_CONST_FAST_Packet4i (MINUS1, -1)
 
static EIGEN_DECLARE_CONST_FAST_Packet4ui (SIGN, 0x80000000u)
 
static EIGEN_DECLARE_CONST_FAST_Packet4ui (PREV0DOT5, 0x3EFFFFFFu)
 
static EIGEN_DECLARE_CONST_FAST_Packet8us (ONE, 1)
 
std::ostream & operator<< (std::ostream &s, const Packet16c &v)
 
std::ostream & operator<< (std::ostream &s, const Packet16uc &v)
 
std::ostream & operator<< (std::ostream &s, const Packet4f &v)
 
std::ostream & operator<< (std::ostream &s, const Packet4i &v)
 
std::ostream & operator<< (std::ostream &s, const Packet4ui &v)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet pload_common (const __UNPACK_TYPE__(Packet) *from)
 
template<>
EIGEN_STRONG_INLINE Packet4f pload< Packet4f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4i pload< Packet4i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8s pload< Packet8s > (const short int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8us pload< Packet8us > (const unsigned short int *from)
 
template<>
EIGEN_STRONG_INLINE Packet16c pload< Packet16c > (const signed char *from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pload< Packet16uc > (const unsigned char *from)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pload< Packet8bf > (const bfloat16 *from)
 
template<typename Packet >
EIGEN_ALWAYS_INLINE Packet pload_ignore (const __UNPACK_TYPE__(Packet) *from)
 
template<>
EIGEN_ALWAYS_INLINE Packet8bf pload_ignore< Packet8bf > (const bfloat16 *from)
 
template<typename Packet >
EIGEN_ALWAYS_INLINE Packet pload_partial_common (const __UNPACK_TYPE__(Packet) *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet4f pload_partial< Packet4f > (const float *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet4i pload_partial< Packet4i > (const int *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet8s pload_partial< Packet8s > (const short int *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet8us pload_partial< Packet8us > (const unsigned short int *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet8bf pload_partial< Packet8bf > (const bfloat16 *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet16c pload_partial< Packet16c > (const signed char *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet16uc pload_partial< Packet16uc > (const unsigned char *from, const Index n, const Index offset)
 
template<typename Packet >
EIGEN_STRONG_INLINE void pstore_common (__UNPACK_TYPE__(Packet) *to, const Packet &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< float > (float *to, const Packet4f &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int > (int *to, const Packet4i &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< short int > (short int *to, const Packet8s &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< unsigned short int > (unsigned short int *to, const Packet8us &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< bfloat16 > (bfloat16 *to, const Packet8bf &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< signed char > (signed char *to, const Packet16c &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< unsigned char > (unsigned char *to, const Packet16uc &from)
 
template<typename Packet >
EIGEN_ALWAYS_INLINE void pstore_partial_common (__UNPACK_TYPE__(Packet) *to, const Packet &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstore_partial< float > (float *to, const Packet4f &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstore_partial< int > (int *to, const Packet4i &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstore_partial< short int > (short int *to, const Packet8s &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstore_partial< unsigned short int > (unsigned short int *to, const Packet8us &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstore_partial< bfloat16 > (bfloat16 *to, const Packet8bf &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstore_partial< signed char > (signed char *to, const Packet16c &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstore_partial< unsigned char > (unsigned char *to, const Packet16uc &from, const Index n, const Index offset)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet pset1_size4 (const __UNPACK_TYPE__(Packet) &from)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet pset1_size8 (const __UNPACK_TYPE__(Packet) &from)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet pset1_size16 (const __UNPACK_TYPE__(Packet) &from)
 
template<>
EIGEN_STRONG_INLINE Packet4f pset1< Packet4f > (const float &from)
 
template<>
EIGEN_STRONG_INLINE Packet4i pset1< Packet4i > (const int &from)
 
template<>
EIGEN_STRONG_INLINE Packet8s pset1< Packet8s > (const short int &from)
 
template<>
EIGEN_STRONG_INLINE Packet8us pset1< Packet8us > (const unsigned short int &from)
 
template<>
EIGEN_STRONG_INLINE Packet16c pset1< Packet16c > (const signed char &from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pset1< Packet16uc > (const unsigned char &from)
 
template<>
EIGEN_STRONG_INLINE Packet4f pset1frombits< Packet4f > (unsigned int from)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pset1< Packet8bf > (const bfloat16 &from)
 
template<typename Packet >
EIGEN_STRONG_INLINE void pbroadcast4_common (const __UNPACK_TYPE__(Packet) *a, Packet &a0, Packet &a1, Packet &a2, Packet &a3)
 
template<>
EIGEN_STRONG_INLINE void pbroadcast4< Packet4f > (const float *a, Packet4f &a0, Packet4f &a1, Packet4f &a2, Packet4f &a3)
 
template<>
EIGEN_STRONG_INLINE void pbroadcast4< Packet4i > (const int *a, Packet4i &a0, Packet4i &a1, Packet4i &a2, Packet4i &a3)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet pgather_common (const __UNPACK_TYPE__(Packet) *from, Index stride, const Index n=unpacket_traits< Packet >::size)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet4f pgather< float, Packet4f > (const float *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet4i pgather< int, Packet4i > (const int *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8s pgather< short int, Packet8s > (const short int *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8us pgather< unsigned short int, Packet8us > (const unsigned short int *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8bf pgather< bfloat16, Packet8bf > (const bfloat16 *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet16c pgather< signed char, Packet16c > (const signed char *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet16uc pgather< unsigned char, Packet16uc > (const unsigned char *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet4f pgather_partial< float, Packet4f > (const float *from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet4i pgather_partial< int, Packet4i > (const int *from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8s pgather_partial< short int, Packet8s > (const short int *from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8us pgather_partial< unsigned short int, Packet8us > (const unsigned short int *from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8bf pgather_partial< bfloat16, Packet8bf > (const bfloat16 *from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet16c pgather_partial< signed char, Packet16c > (const signed char *from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet16uc pgather_partial< unsigned char, Packet16uc > (const unsigned char *from, Index stride, const Index n)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_common (__UNPACK_TYPE__(Packet) *to, const Packet &from, Index stride, const Index n=unpacket_traits< Packet >::size)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter< float, Packet4f > (float *to, const Packet4f &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter< int, Packet4i > (int *to, const Packet4i &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter< short int, Packet8s > (short int *to, const Packet8s &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter< unsigned short int, Packet8us > (unsigned short int *to, const Packet8us &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter< bfloat16, Packet8bf > (bfloat16 *to, const Packet8bf &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter< signed char, Packet16c > (signed char *to, const Packet16c &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter< unsigned char, Packet16uc > (unsigned char *to, const Packet16uc &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial< float, Packet4f > (float *to, const Packet4f &from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial< int, Packet4i > (int *to, const Packet4i &from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial< short int, Packet8s > (short int *to, const Packet8s &from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial< unsigned short int, Packet8us > (unsigned short int *to, const Packet8us &from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial< bfloat16, Packet8bf > (bfloat16 *to, const Packet8bf &from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial< signed char, Packet16c > (signed char *to, const Packet16c &from, Index stride, const Index n)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial< unsigned char, Packet16uc > (unsigned char *to, const Packet16uc &from, Index stride, const Index n)
 
template<>
EIGEN_STRONG_INLINE Packet4f plset< Packet4f > (const float &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i plset< Packet4i > (const int &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s plset< Packet8s > (const short int &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us plset< Packet8us > (const unsigned short int &a)
 
template<>
EIGEN_STRONG_INLINE Packet16c plset< Packet16c > (const signed char &a)
 
template<>
EIGEN_STRONG_INLINE Packet16uc plset< Packet16uc > (const unsigned char &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f padd< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i padd< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui padd< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s padd< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us padd< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c padd< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc padd< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f psub< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i psub< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s psub< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us psub< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c psub< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc psub< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pnegate (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet16c pnegate (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s pnegate (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pnegate (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pconj (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pconj (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pmul< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pmul< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pmul< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pmul< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pmul< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pmul< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pdiv< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pdiv< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pmadd (const Packet4f &a, const Packet4f &b, const Packet4f &c)
 
template<>
EIGEN_STRONG_INLINE Packet4i pmadd (const Packet4i &a, const Packet4i &b, const Packet4i &c)
 
template<>
EIGEN_STRONG_INLINE Packet8s pmadd (const Packet8s &a, const Packet8s &b, const Packet8s &c)
 
template<>
EIGEN_STRONG_INLINE Packet8us pmadd (const Packet8us &a, const Packet8us &b, const Packet8us &c)
 
template<>
EIGEN_STRONG_INLINE Packet4f pmin< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pmin< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pmin< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pmin< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pmin< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pmin< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pmax< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pmax< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pmax< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pmax< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pmax< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pmax< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcmp_le (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcmp_eq (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcmp_lt_or_nan (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcmp_lt (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcmp_eq (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcmp_lt (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcmp_eq (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcmp_lt (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcmp_eq (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcmp_lt (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcmp_eq (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcmp_lt (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcmp_eq (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pand< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pand< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pand< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pand< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pand< Packet8bf > (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f por< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i por< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s por< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us por< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf por< Packet8bf > (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pxor< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pxor< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pxor< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pxor< Packet8bf > (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pandnot< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pandnot< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pselect (const Packet4f &mask, const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pround< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pceil< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pfloor< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f ptrunc< Packet4f > (const Packet4f &a)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet ploadu_common (const __UNPACK_TYPE__(Packet) *from)
 
template<>
EIGEN_STRONG_INLINE Packet4f ploadu< Packet4f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4i ploadu< Packet4i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8s ploadu< Packet8s > (const short int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8us ploadu< Packet8us > (const unsigned short int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8bf ploadu< Packet8bf > (const bfloat16 *from)
 
template<>
EIGEN_STRONG_INLINE Packet16c ploadu< Packet16c > (const signed char *from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc ploadu< Packet16uc > (const unsigned char *from)
 
template<typename Packet >
EIGEN_ALWAYS_INLINE Packet ploadu_partial_common (const __UNPACK_TYPE__(Packet) *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet4f ploadu_partial< Packet4f > (const float *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet4i ploadu_partial< Packet4i > (const int *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet8s ploadu_partial< Packet8s > (const short int *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet8us ploadu_partial< Packet8us > (const unsigned short int *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet8bf ploadu_partial< Packet8bf > (const bfloat16 *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet16c ploadu_partial< Packet16c > (const signed char *from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE Packet16uc ploadu_partial< Packet16uc > (const unsigned char *from, const Index n, const Index offset)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet ploaddup_common (const __UNPACK_TYPE__(Packet) *from)
 
template<>
EIGEN_STRONG_INLINE Packet4f ploaddup< Packet4f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4i ploaddup< Packet4i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8s ploaddup< Packet8s > (const short int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8us ploaddup< Packet8us > (const unsigned short int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8s ploadquad< Packet8s > (const short int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8us ploadquad< Packet8us > (const unsigned short int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8bf ploadquad< Packet8bf > (const bfloat16 *from)
 
template<>
EIGEN_STRONG_INLINE Packet16c ploaddup< Packet16c > (const signed char *from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc ploaddup< Packet16uc > (const unsigned char *from)
 
template<>
EIGEN_STRONG_INLINE Packet16c ploadquad< Packet16c > (const signed char *from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc ploadquad< Packet16uc > (const unsigned char *from)
 
template<typename Packet >
EIGEN_STRONG_INLINE void pstoreu_common (__UNPACK_TYPE__(Packet) *to, const Packet &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< float > (float *to, const Packet4f &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int > (int *to, const Packet4i &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< short int > (short int *to, const Packet8s &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< unsigned short int > (unsigned short int *to, const Packet8us &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< bfloat16 > (bfloat16 *to, const Packet8bf &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< signed char > (signed char *to, const Packet16c &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< unsigned char > (unsigned char *to, const Packet16uc &from)
 
template<typename Packet >
EIGEN_ALWAYS_INLINE void pstoreu_partial_common (__UNPACK_TYPE__(Packet) *to, const Packet &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstoreu_partial< float > (float *to, const Packet4f &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstoreu_partial< int > (int *to, const Packet4i &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstoreu_partial< short int > (short int *to, const Packet8s &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstoreu_partial< unsigned short int > (unsigned short int *to, const Packet8us &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstoreu_partial< bfloat16 > (bfloat16 *to, const Packet8bf &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstoreu_partial< signed char > (signed char *to, const Packet16c &from, const Index n, const Index offset)
 
template<>
EIGEN_ALWAYS_INLINE void pstoreu_partial< unsigned char > (unsigned char *to, const Packet16uc &from, const Index n, const Index offset)
 
template<>
EIGEN_STRONG_INLINE void prefetch< float > (const float *addr)
 
template<>
EIGEN_STRONG_INLINE void prefetch< int > (const int *addr)
 
template<>
EIGEN_STRONG_INLINE float pfirst< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE int pfirst< Packet4i > (const Packet4i &a)
 
template<typename Packet >
EIGEN_STRONG_INLINE __UNPACK_TYPE__ (Packet) pfirst_common(const Packet &a)
 
template<>
EIGEN_STRONG_INLINE short int pfirst< Packet8s > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE unsigned short int pfirst< Packet8us > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE signed char pfirst< Packet16c > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE unsigned char pfirst< Packet16uc > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f preverse (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i preverse (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s preverse (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us preverse (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet16c preverse (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet16uc preverse (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf preverse (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pabs (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pabs (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s pabs (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us pabs (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet16c pabs (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pabs (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pabs (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf psignbit (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f psignbit (const Packet4f &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4i parithmetic_shift_right (const Packet4i &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4i plogical_shift_right (const Packet4i &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4i plogical_shift_left (const Packet4i &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4f plogical_shift_left (const Packet4f &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4f plogical_shift_right (const Packet4f &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4ui plogical_shift_right (const Packet4ui &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4ui plogical_shift_left (const Packet4ui &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8us plogical_shift_left (const Packet8us &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8us plogical_shift_right (const Packet8us &a)
 
EIGEN_STRONG_INLINE Packet4f Bf16ToF32Even (const Packet8bf &bf)
 
EIGEN_STRONG_INLINE Packet4f Bf16ToF32Odd (const Packet8bf &bf)
 
EIGEN_ALWAYS_INLINE Packet8us pmerge (Packet4ui even, Packet4ui odd)
 
EIGEN_STRONG_INLINE Packet8bf F32ToBf16Bool (Packet4f even, Packet4f odd)
 
EIGEN_STRONG_INLINE Packet8bf F32ToBf16 (Packet4f p4f)
 
template<bool lohi>
EIGEN_ALWAYS_INLINE Packet8bf Bf16PackLow (Packet4f hi, Packet4f lo)
 
template<bool lohi>
EIGEN_ALWAYS_INLINE Packet8bf Bf16PackHigh (Packet4f hi, Packet4f lo)
 
template<bool lohi = true>
EIGEN_ALWAYS_INLINE Packet8bf F32ToBf16Two (Packet4f lo, Packet4f hi)
 
EIGEN_STRONG_INLINE Packet8bf F32ToBf16Both (Packet4f lo, Packet4f hi)
 
EIGEN_STRONG_INLINE Packet8bf F32ToBf16 (Packet4f even, Packet4f odd)
 
template<>
EIGEN_STRONG_INLINE Packet8bf padd< Packet8bf > (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pmul< Packet8bf > (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pdiv< Packet8bf > (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pnegate< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf psub< Packet8bf > (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pexp< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pexp2< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pldexp< Packet4f > (const Packet4f &a, const Packet4f &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pldexp< Packet8bf > (const Packet8bf &a, const Packet8bf &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet4f pfrexp< Packet4f > (const Packet4f &a, Packet4f &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pfrexp< Packet8bf > (const Packet8bf &a, Packet8bf &e)
 
template<>
EIGEN_STRONG_INLINE Packet8bf psin< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pcos< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf plog< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pfloor< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pceil< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pround< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf ptrunc< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pmadd (const Packet8bf &a, const Packet8bf &b, const Packet8bf &c)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pmin< Packet8bf > (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pmax< Packet8bf > (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pcmp_lt (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pcmp_lt_or_nan (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pcmp_le (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pcmp_eq (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE bfloat16 pfirst (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf ploaddup< Packet8bf > (const bfloat16 *from)
 
template<>
EIGEN_STRONG_INLINE Packet8bf plset< Packet8bf > (const bfloat16 &a)
 
template<>
EIGEN_STRONG_INLINE float predux< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE int predux< Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE short int predux< Packet8s > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE unsigned short int predux< Packet8us > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE signed char predux< Packet16c > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE unsigned char predux< Packet16uc > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE float predux_mul< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE int predux_mul< Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE short int predux_mul< Packet8s > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE unsigned short int predux_mul< Packet8us > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux_mul< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE signed char predux_mul< Packet16c > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE unsigned char predux_mul< Packet16uc > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE float predux_min< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE int predux_min< Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux_min< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE short int predux_min< Packet8s > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE unsigned short int predux_min< Packet8us > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE signed char predux_min< Packet16c > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE unsigned char predux_min< Packet16uc > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE float predux_max< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE int predux_max< Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux_max< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE short int predux_max< Packet8s > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE unsigned short int predux_max< Packet8us > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE signed char predux_max< Packet16c > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE unsigned char predux_max< Packet16uc > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet4f &x)
 
template<typename T >
EIGEN_DEVICE_FUNC void ptranpose_common (PacketBlock< T, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet4f, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet4i, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8s, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8us, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8bf, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet16c, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet16uc, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8s, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8us, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8bf, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet16c, 16 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet16uc, 16 > &kernel)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet pblend4 (const Selector< 4 > &ifPacket, const Packet &thenPacket, const Packet &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet4i pblend (const Selector< 4 > &ifPacket, const Packet4i &thenPacket, const Packet4i &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet4f pblend (const Selector< 4 > &ifPacket, const Packet4f &thenPacket, const Packet4f &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet8s pblend (const Selector< 8 > &ifPacket, const Packet8s &thenPacket, const Packet8s &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet8us pblend (const Selector< 8 > &ifPacket, const Packet8us &thenPacket, const Packet8us &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pblend (const Selector< 8 > &ifPacket, const Packet8bf &thenPacket, const Packet8bf &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet16c pblend (const Selector< 16 > &ifPacket, const Packet16c &thenPacket, const Packet16c &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pblend (const Selector< 16 > &ifPacket, const Packet16uc &thenPacket, const Packet16uc &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet4f, Packet4i > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet4f, Packet4ui > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet4i, Packet4f > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet4ui, Packet4f > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet8bf, Packet8us > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pcast< Packet8us, Packet8bf > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet8bf, Packet4f > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pcast< Packet4f, Packet8bf > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i preinterpret< Packet4i, Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f preinterpret< Packet4f, Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf padd< Packet4cf > (const Packet4cf &a, const Packet4cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cf psub< Packet4cf > (const Packet4cf &a, const Packet4cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pnegate (const Packet4cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pconj (const Packet4cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pmul (const Packet4cf &a, const Packet4cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pcmp_eq (const Packet4cf &a, const Packet4cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cf ptrue< Packet4cf > (const Packet4cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pand< Packet4cf > (const Packet4cf &a, const Packet4cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cf por< Packet4cf > (const Packet4cf &a, const Packet4cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pxor< Packet4cf > (const Packet4cf &a, const Packet4cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pandnot< Packet4cf > (const Packet4cf &a, const Packet4cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pload< Packet4cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE Packet4cf ploadu< Packet4cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pset1< Packet4cf > (const std::complex< float > &from)
 
template<>
EIGEN_STRONG_INLINE Packet4cf ploaddup< Packet4cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< std::complex< float > > (std::complex< float > *to, const Packet4cf &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< std::complex< float > > (std::complex< float > *to, const Packet4cf &from)
 
template<>
EIGEN_DEVICE_FUNC Packet4cf pgather< std::complex< float >, Packet4cf > (const std::complex< float > *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< std::complex< float >, Packet4cf > (std::complex< float > *to, const Packet4cf &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > pfirst< Packet4cf > (const Packet4cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf preverse (const Packet4cf &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > predux< Packet4cf > (const Packet4cf &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > predux_mul< Packet4cf > (const Packet4cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pdiv< Packet4cf > (const Packet4cf &a, const Packet4cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pcplxflip< Packet4cf > (const Packet4cf &x)
 
template<>
EIGEN_STRONG_INLINE Packet2cd padd< Packet2cd > (const Packet2cd &a, const Packet2cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cd psub< Packet2cd > (const Packet2cd &a, const Packet2cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pnegate (const Packet2cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pconj (const Packet2cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pmul (const Packet2cd &a, const Packet2cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pcmp_eq (const Packet2cd &a, const Packet2cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cd ptrue< Packet2cd > (const Packet2cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pand< Packet2cd > (const Packet2cd &a, const Packet2cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cd por< Packet2cd > (const Packet2cd &a, const Packet2cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pxor< Packet2cd > (const Packet2cd &a, const Packet2cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pandnot< Packet2cd > (const Packet2cd &a, const Packet2cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pload< Packet2cd > (const std::complex< double > *from)
 
template<>
EIGEN_STRONG_INLINE Packet2cd ploadu< Packet2cd > (const std::complex< double > *from)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pset1< Packet2cd > (const std::complex< double > &from)
 
template<>
EIGEN_STRONG_INLINE Packet2cd ploaddup< Packet2cd > (const std::complex< double > *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< std::complex< double > > (std::complex< double > *to, const Packet2cd &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< std::complex< double > > (std::complex< double > *to, const Packet2cd &from)
 
template<>
EIGEN_DEVICE_FUNC Packet2cd pgather< std::complex< double >, Packet2cd > (const std::complex< double > *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< std::complex< double >, Packet2cd > (std::complex< double > *to, const Packet2cd &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE std::complex< doublepfirst< Packet2cd > (const Packet2cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cd preverse (const Packet2cd &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< doublepredux< Packet2cd > (const Packet2cd &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< doublepredux_mul< Packet2cd > (const Packet2cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pdiv< Packet2cd > (const Packet2cd &a, const Packet2cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cd pcplxflip< Packet2cd > (const Packet2cd &x)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet4cf, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet2cd, 2 > &kernel)
 
template<>
EIGEN_STRONG_INLINE Packet2cd psqrt< Packet2cd > (const Packet2cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf psqrt< Packet4cf > (const Packet4cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cd plog< Packet2cd > (const Packet2cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf plog< Packet4cf > (const Packet4cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf pexp< Packet4cf > (const Packet4cf &a)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet8f psqrt< Packet8f > (const Packet8f &_x)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet4d psqrt< Packet4d > (const Packet4d &_x)
 
template<>
EIGEN_STRONG_INLINE Packet8h pfrexp (const Packet8h &a, Packet8h &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet8h pldexp (const Packet8h &a, const Packet8h &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pfrexp (const Packet8bf &a, Packet8bf &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pldexp (const Packet8bf &a, const Packet8bf &exponent)
 
EIGEN_STRONG_INLINE __m128i Pack16To8 (Packet8f rf)
 
template<>
EIGEN_STRONG_INLINE Packet8f pset1< Packet8f > (const float &from)
 
template<>
EIGEN_STRONG_INLINE Packet4d pset1< Packet4d > (const double &from)
 
template<>
EIGEN_STRONG_INLINE Packet8i pset1< Packet8i > (const int &from)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pset1< Packet8ui > (const uint32_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet8f pset1frombits< Packet8f > (unsigned int from)
 
template<>
EIGEN_STRONG_INLINE Packet4d pset1frombits< Packet4d > (uint64_t from)
 
template<>
EIGEN_STRONG_INLINE Packet8f pzero (const Packet8f &)
 
template<>
EIGEN_STRONG_INLINE Packet4d pzero (const Packet4d &)
 
template<>
EIGEN_STRONG_INLINE Packet8i pzero (const Packet8i &)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pzero (const Packet8ui &)
 
template<>
EIGEN_STRONG_INLINE Packet8f peven_mask (const Packet8f &)
 
template<>
EIGEN_STRONG_INLINE Packet8i peven_mask (const Packet8i &)
 
template<>
EIGEN_STRONG_INLINE Packet8ui peven_mask (const Packet8ui &)
 
template<>
EIGEN_STRONG_INLINE Packet4d peven_mask (const Packet4d &)
 
template<>
EIGEN_STRONG_INLINE Packet8f pload1< Packet8f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4d pload1< Packet4d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet8f padd< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d padd< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i padd< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui padd< Packet8ui > (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f plset< Packet8f > (const float &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d plset< Packet4d > (const double &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i plset< Packet8i > (const int &a)
 
template<>
EIGEN_STRONG_INLINE Packet8ui plset< Packet8ui > (const uint32_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f psub< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d psub< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i psub< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui psub< Packet8ui > (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pnegate (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pnegate (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i pnegate (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pconj (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pconj (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i pconj (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pmul< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pmul< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pmul< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pmul< Packet8ui > (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pdiv< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pdiv< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pdiv< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcmp_le (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcmp_lt (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcmp_lt_or_nan (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcmp_eq (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pisnan (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pcmp_le (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pcmp_lt (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pcmp_lt_or_nan (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pcmp_eq (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pcmp_le (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pcmp_lt (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pcmp_eq (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pcmp_eq (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pmin< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pmin< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pmin< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pmin< Packet8ui > (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pmax< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pmax< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pmax< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pmax< Packet8ui > (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pmin< PropagateNumbers, Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pmin< PropagateNumbers, Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pmax< PropagateNumbers, Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pmax< PropagateNumbers, Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pmin< PropagateNaN, Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pmin< PropagateNaN, Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pmax< PropagateNaN, Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pmax< PropagateNaN, Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f print< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d print< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pceil< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pceil< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pfloor< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pfloor< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f ptrunc< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d ptrunc< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i ptrue< Packet8i > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f ptrue< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d ptrue< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pand< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pand< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pand< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pand< Packet8ui > (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f por< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d por< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i por< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui por< Packet8ui > (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pxor< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pxor< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pxor< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pxor< Packet8ui > (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pandnot< Packet8f > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pandnot< Packet4d > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pandnot< Packet8i > (const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pandnot< Packet8ui > (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pcmp_lt (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pcmp_le (const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pround< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pround< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pselect< Packet8f > (const Packet8f &mask, const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pselect< Packet8i > (const Packet8i &mask, const Packet8i &a, const Packet8i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pselect< Packet8ui > (const Packet8ui &mask, const Packet8ui &a, const Packet8ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet4d pselect< Packet4d > (const Packet4d &mask, const Packet4d &a, const Packet4d &b)
 
template<int N>
EIGEN_STRONG_INLINE Packet8i parithmetic_shift_right (Packet8i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8i plogical_shift_right (Packet8i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8i plogical_shift_left (Packet8i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8ui parithmetic_shift_right (Packet8ui a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8ui plogical_shift_right (Packet8ui a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8ui plogical_shift_left (Packet8ui a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pload< Packet8f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4d pload< Packet4d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet8i pload< Packet8i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pload< Packet8ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8f ploadu< Packet8f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4d ploadu< Packet4d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet8i ploadu< Packet8i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8ui ploadu< Packet8ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8f ploadu< Packet8f > (const float *from, uint8_t umask)
 
template<>
EIGEN_STRONG_INLINE Packet8f ploaddup< Packet8f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4d ploaddup< Packet4d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet8i ploaddup< Packet8i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8ui ploaddup< Packet8ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8f ploadquad< Packet8f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet8i ploadquad< Packet8i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8ui ploadquad< Packet8ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< float > (float *to, const Packet8f &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< double > (double *to, const Packet4d &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int > (int *to, const Packet8i &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< uint32_t > (uint32_t *to, const Packet8ui &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< float > (float *to, const Packet8f &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< double > (double *to, const Packet4d &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int > (int *to, const Packet8i &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< uint32_t > (uint32_t *to, const Packet8ui &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< float > (float *to, const Packet8f &from, uint8_t umask)
 
template<>
EIGEN_DEVICE_FUNC Packet8f pgather< float, Packet8f > (const float *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC Packet4d pgather< double, Packet4d > (const double *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC Packet8i pgather< int, Packet8i > (const int *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC Packet8ui pgather< uint32_t, Packet8ui > (const uint32_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< float, Packet8f > (float *to, const Packet8f &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< double, Packet4d > (double *to, const Packet4d &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< int, Packet8i > (int *to, const Packet8i &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< uint32_t, Packet8ui > (uint32_t *to, const Packet8ui &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE void pstore1< Packet8f > (float *to, const float &a)
 
template<>
EIGEN_STRONG_INLINE void pstore1< Packet4d > (double *to, const double &a)
 
template<>
EIGEN_STRONG_INLINE void pstore1< Packet8i > (int *to, const int &a)
 
template<>
EIGEN_STRONG_INLINE void prefetch< double > (const double *addr)
 
template<>
EIGEN_STRONG_INLINE void prefetch< uint32_t > (const uint32_t *addr)
 
template<>
EIGEN_STRONG_INLINE float pfirst< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE double pfirst< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE int pfirst< Packet8i > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t pfirst< Packet8ui > (const Packet8ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f preverse (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d preverse (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i preverse (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8ui preverse (const Packet8ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pabs (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pabs (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i pabs (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8ui pabs (const Packet8ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h psignbit (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f psignbit (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8ui psignbit (const Packet8ui &)
 
template<>
EIGEN_STRONG_INLINE Packet8f pfrexp< Packet8f > (const Packet8f &a, Packet8f &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet4d pfrexp_generic_get_biased_exponent (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pfrexp< Packet4d > (const Packet4d &a, Packet4d &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet8f pldexp< Packet8f > (const Packet8f &a, const Packet8f &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet4d pldexp< Packet4d > (const Packet4d &a, const Packet4d &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet4d pldexp_fast< Packet4d > (const Packet4d &a, const Packet4d &exponent)
 
template<>
EIGEN_STRONG_INLINE float predux< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE double predux< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE int predux< Packet8i > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t predux< Packet8ui > (const Packet8ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f predux_half_dowto4< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i predux_half_dowto4< Packet8i > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui predux_half_dowto4< Packet8ui > (const Packet8ui &a)
 
template<>
EIGEN_STRONG_INLINE float predux_mul< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE double predux_mul< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE float predux_min< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE double predux_min< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE float predux_max< Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE double predux_max< Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet8f &x)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet4d &x)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet8i &x)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet8ui &x)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet8h &x)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet8bf &x)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8f, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8f, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8i, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8ui, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8i, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8ui, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet4d, 4 > &kernel)
 
EIGEN_STRONG_INLINE __m256i avx_blend_mask (const Selector< 4 > &ifPacket)
 
EIGEN_STRONG_INLINE __m256i avx_blend_mask (const Selector< 8 > &ifPacket)
 
template<>
EIGEN_STRONG_INLINE Packet8f pblend (const Selector< 8 > &ifPacket, const Packet8f &thenPacket, const Packet8f &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet4d pblend (const Selector< 4 > &ifPacket, const Packet4d &thenPacket, const Packet4d &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet8h pset1< Packet8h > (const Eigen::half &from)
 
template<>
EIGEN_STRONG_INLINE Eigen::half pfirst< Packet8h > (const Packet8h &from)
 
template<>
EIGEN_STRONG_INLINE Packet8h pload< Packet8h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE Packet8h ploadu< Packet8h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< Eigen::half > (Eigen::half *to, const Packet8h &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< Eigen::half > (Eigen::half *to, const Packet8h &from)
 
template<>
EIGEN_STRONG_INLINE Packet8h ploaddup< Packet8h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE Packet8h ploadquad< Packet8h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE Packet8h ptrue (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h pabs (const Packet8h &a)
 
EIGEN_STRONG_INLINE Packet8f half2float (const Packet8h &a)
 
EIGEN_STRONG_INLINE Packet8h float2half (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h pmin< Packet8h > (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pmax< Packet8h > (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h plset< Packet8h > (const half &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h por (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pxor (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pand (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pandnot (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pselect (const Packet8h &mask, const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pround< Packet8h > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h print< Packet8h > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h pceil< Packet8h > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h pfloor< Packet8h > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h ptrunc< Packet8h > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h pcmp_eq (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pcmp_le (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pcmp_lt (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pcmp_lt_or_nan (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pconj (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h pnegate (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h padd< Packet8h > (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h psub< Packet8h > (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pmul< Packet8h > (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pdiv< Packet8h > (const Packet8h &a, const Packet8h &b)
 
template<>
EIGEN_STRONG_INLINE Packet8h pgather< Eigen::half, Packet8h > (const Eigen::half *from, Index stride)
 
template<>
EIGEN_STRONG_INLINE void pscatter< Eigen::half, Packet8h > (Eigen::half *to, const Packet8h &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE Eigen::half predux< Packet8h > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Eigen::half predux_max< Packet8h > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Eigen::half predux_min< Packet8h > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Eigen::half predux_mul< Packet8h > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h preverse (const Packet8h &a)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet8h, 8 > &kernel)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet8h, 4 > &kernel)
 
EIGEN_STRONG_INLINE Packet8f Bf16ToF32 (const Packet8bf &a)
 
EIGEN_STRONG_INLINE Packet8bf F32ToBf16 (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE bfloat16 pfirst< Packet8bf > (const Packet8bf &from)
 
template<>
EIGEN_STRONG_INLINE Packet8bf ptrue (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf por (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pxor (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pand (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pandnot (const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pselect (const Packet8bf &mask, const Packet8bf &a, const Packet8bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8bf print< Packet8bf > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pconj (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pnegate (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16b pcast< Packet8f, Packet16b > (const Packet8f &a, const Packet8f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcast< Packet16b, Packet8f > (const Packet16b &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i pcast< Packet8f, Packet8i > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i pcast< Packet4d, Packet8i > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet4d, Packet4i > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcast< Packet8i, Packet8f > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcast< Packet4d, Packet8f > (const Packet4d &a, const Packet4d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet4d, Packet4f > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pcast< Packet8i, Packet4d > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pcast< Packet4i, Packet4d > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pcast< Packet8f, Packet4d > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d pcast< Packet4f, Packet4d > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i preinterpret< Packet8i, Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f preinterpret< Packet8f, Packet8i > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8ui preinterpret< Packet8ui, Packet8i > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i preinterpret< Packet8i, Packet8ui > (const Packet8ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f preinterpret< Packet4f, Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d preinterpret< Packet2d, Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i preinterpret< Packet4i, Packet8i > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui preinterpret< Packet4ui, Packet8ui > (const Packet8ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcast< Packet8h, Packet8f > (const Packet8h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcast< Packet8bf, Packet8f > (const Packet8bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h pcast< Packet8f, Packet8h > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf pcast< Packet8f, Packet8bf > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8cf ptrue< Packet8cf > (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8cf padd< Packet8cf > (const Packet8cf &a, const Packet8cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8cf psub< Packet8cf > (const Packet8cf &a, const Packet8cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pnegate (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pconj (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pmul< Packet8cf > (const Packet8cf &a, const Packet8cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pand< Packet8cf > (const Packet8cf &a, const Packet8cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8cf por< Packet8cf > (const Packet8cf &a, const Packet8cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pxor< Packet8cf > (const Packet8cf &a, const Packet8cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pandnot< Packet8cf > (const Packet8cf &a, const Packet8cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pcmp_eq (const Packet8cf &a, const Packet8cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pload< Packet8cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE Packet8cf ploadu< Packet8cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pset1< Packet8cf > (const std::complex< float > &from)
 
template<>
EIGEN_STRONG_INLINE Packet8cf ploaddup< Packet8cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE Packet8cf ploadquad< Packet8cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< std::complex< float > > (std::complex< float > *to, const Packet8cf &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< std::complex< float > > (std::complex< float > *to, const Packet8cf &from)
 
template<>
EIGEN_DEVICE_FUNC Packet8cf pgather< std::complex< float >, Packet8cf > (const std::complex< float > *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< std::complex< float >, Packet8cf > (std::complex< float > *to, const Packet8cf &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > pfirst< Packet8cf > (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8cf preverse (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > predux< Packet8cf > (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > predux_mul< Packet8cf > (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cf predux_half_dowto4< Packet8cf > (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pdiv< Packet8cf > (const Packet8cf &a, const Packet8cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pcplxflip< Packet8cf > (const Packet8cf &x)
 
template<>
EIGEN_STRONG_INLINE Packet4cd padd< Packet4cd > (const Packet4cd &a, const Packet4cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cd psub< Packet4cd > (const Packet4cd &a, const Packet4cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pnegate (const Packet4cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pconj (const Packet4cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pmul< Packet4cd > (const Packet4cd &a, const Packet4cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cd ptrue< Packet4cd > (const Packet4cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pand< Packet4cd > (const Packet4cd &a, const Packet4cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cd por< Packet4cd > (const Packet4cd &a, const Packet4cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pxor< Packet4cd > (const Packet4cd &a, const Packet4cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pandnot< Packet4cd > (const Packet4cd &a, const Packet4cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pcmp_eq (const Packet4cd &a, const Packet4cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pload< Packet4cd > (const std::complex< double > *from)
 
template<>
EIGEN_STRONG_INLINE Packet4cd ploadu< Packet4cd > (const std::complex< double > *from)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pset1< Packet4cd > (const std::complex< double > &from)
 
template<>
EIGEN_STRONG_INLINE Packet4cd ploaddup< Packet4cd > (const std::complex< double > *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< std::complex< double > > (std::complex< double > *to, const Packet4cd &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< std::complex< double > > (std::complex< double > *to, const Packet4cd &from)
 
template<>
EIGEN_DEVICE_FUNC Packet4cd pgather< std::complex< double >, Packet4cd > (const std::complex< double > *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< std::complex< double >, Packet4cd > (std::complex< double > *to, const Packet4cd &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE std::complex< doublepfirst< Packet4cd > (const Packet4cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cd preverse (const Packet4cd &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< doublepredux< Packet4cd > (const Packet4cd &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< doublepredux_mul< Packet4cd > (const Packet4cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pdiv< Packet4cd > (const Packet4cd &a, const Packet4cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet4cd pcplxflip< Packet4cd > (const Packet4cd &x)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8cf, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8cf, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet4cd, 4 > &kernel)
 
template<>
EIGEN_STRONG_INLINE Packet4cd psqrt< Packet4cd > (const Packet4cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet8cf psqrt< Packet8cf > (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4cd plog< Packet4cd > (const Packet4cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet8cf plog< Packet8cf > (const Packet8cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8cf pexp< Packet8cf > (const Packet8cf &a)
 
template<typename Scalar , int max_a_unroll, int max_b_unroll, bool is_alpha1, bool is_beta0, bool is_unit_inc>
EIGEN_DONT_INLINE void gemm_kern_avx512 (Index m, Index n, Index k, Scalar *alpha, const Scalar *a, const Scalar *b, Scalar *c, Index ldc, Index inc=1, Index a_stride=-1, Index b_stride=-1, Index a_off=0, Index b_off=0)
 
template<>
EIGEN_STRONG_INLINE Packet16h pfrexp (const Packet16h &a, Packet16h &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet16h pldexp (const Packet16h &a, const Packet16h &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pfrexp (const Packet16bf &a, Packet16bf &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pldexp (const Packet16bf &a, const Packet16bf &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet16f psqrt< Packet16f > (const Packet16f &x)
 
template<>
EIGEN_STRONG_INLINE Packet8d psqrt< Packet8d > (const Packet8d &x)
 
template<>
EIGEN_STRONG_INLINE Packet16f pset1< Packet16f > (const float &from)
 
template<>
EIGEN_STRONG_INLINE Packet8d pset1< Packet8d > (const double &from)
 
template<>
EIGEN_STRONG_INLINE Packet16i pset1< Packet16i > (const int &from)
 
template<>
EIGEN_STRONG_INLINE Packet8l pset1< Packet8l > (const int64_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet16f pset1frombits< Packet16f > (unsigned int from)
 
template<>
EIGEN_STRONG_INLINE Packet8d pset1frombits< Packet8d > (const numext::uint64_t from)
 
template<>
EIGEN_STRONG_INLINE Packet16f pzero (const Packet16f &)
 
template<>
EIGEN_STRONG_INLINE Packet8d pzero (const Packet8d &)
 
template<>
EIGEN_STRONG_INLINE Packet16i pzero (const Packet16i &)
 
template<>
EIGEN_STRONG_INLINE Packet8l pzero (const Packet8l &)
 
template<>
EIGEN_STRONG_INLINE Packet16f peven_mask (const Packet16f &)
 
template<>
EIGEN_STRONG_INLINE Packet16i peven_mask (const Packet16i &)
 
template<>
EIGEN_STRONG_INLINE Packet8d peven_mask (const Packet8d &)
 
template<>
EIGEN_STRONG_INLINE Packet8l peven_mask (const Packet8l &)
 
template<>
EIGEN_STRONG_INLINE Packet16f pload1< Packet16f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet8d pload1< Packet8d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet16f plset< Packet16f > (const float &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d plset< Packet8d > (const double &a)
 
template<>
EIGEN_STRONG_INLINE Packet16i plset< Packet16i > (const int &a)
 
template<>
EIGEN_STRONG_INLINE Packet8l plset< Packet8l > (const int64_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f padd< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d padd< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i padd< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l padd< Packet8l > (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f padd< Packet16f > (const Packet16f &a, const Packet16f &b, uint16_t umask)
 
template<>
EIGEN_STRONG_INLINE Packet8d padd< Packet8d > (const Packet8d &a, const Packet8d &b, uint8_t umask)
 
template<>
EIGEN_STRONG_INLINE Packet16f psub< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d psub< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i psub< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l psub< Packet8l > (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pnegate (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pnegate (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16i pnegate (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8l pnegate (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pconj (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pconj (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16i pconj (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8l pconj (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pmul< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pmul< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pmul< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l pmul< Packet8l > (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pdiv< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pdiv< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pdiv< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_DEVICE_FUNC Packet16f pselect (const Packet16f &mask, const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_DEVICE_FUNC Packet16i pselect (const Packet16i &mask, const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_DEVICE_FUNC Packet8l pselect (const Packet8l &mask, const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_DEVICE_FUNC Packet8d pselect (const Packet8d &mask, const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pmin< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pmin< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pmin< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l pmin< Packet8l > (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pmax< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pmax< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pmax< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l pmax< Packet8l > (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pmin< PropagateNumbers, Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pmin< PropagateNumbers, Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pmax< PropagateNumbers, Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pmax< PropagateNumbers, Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pmin< PropagateNaN, Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pmin< PropagateNaN, Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pmax< PropagateNaN, Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pmax< PropagateNaN, Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<int I_>
EIGEN_STRONG_INLINE Packet8f extract256 (Packet16f x)
 
template<int I_>
EIGEN_STRONG_INLINE Packet2d extract128 (Packet8d x)
 
EIGEN_STRONG_INLINE Packet16f cat256 (Packet8f a, Packet8f b)
 
EIGEN_STRONG_INLINE Packet16i cat256i (Packet8i a, Packet8i b)
 
EIGEN_STRONG_INLINE __m256i Pack32To16 (Packet16f rf)
 
template<>
EIGEN_STRONG_INLINE Packet16f pisnan (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pcmp_eq (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pcmp_le (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pcmp_lt (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pcmp_lt_or_nan (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pcmp_eq (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pcmp_le (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pcmp_lt (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l pcmp_eq (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l pcmp_le (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l pcmp_lt (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pcmp_eq (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pcmp_le (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pcmp_lt (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pcmp_lt_or_nan (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f print< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d print< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pceil< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pceil< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pfloor< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pfloor< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f ptrunc< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d ptrunc< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16i ptrue< Packet16i > (const Packet16i &)
 
template<>
EIGEN_STRONG_INLINE Packet8l ptrue< Packet8l > (const Packet8l &)
 
template<>
EIGEN_STRONG_INLINE Packet16f ptrue< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d ptrue< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16i pand< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l pand< Packet8l > (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pand< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pand< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i por< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l por< Packet8l > (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f por< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d por< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pxor< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l pxor< Packet8l > (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pxor< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pxor< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pandnot< Packet16i > (const Packet16i &a, const Packet16i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8l pandnot< Packet8l > (const Packet8l &a, const Packet8l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pandnot< Packet16f > (const Packet16f &a, const Packet16f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8d pandnot< Packet8d > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16f pround< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pround< Packet8d > (const Packet8d &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16i parithmetic_shift_right (Packet16i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16i plogical_shift_right (Packet16i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16i plogical_shift_left (Packet16i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8l parithmetic_shift_right (Packet8l a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8l plogical_shift_right (Packet8l a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8l plogical_shift_left (Packet8l a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pload< Packet16f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet8d pload< Packet8d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet16i pload< Packet16i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8l pload< Packet8l > (const int64_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet16f ploadu< Packet16f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet8d ploadu< Packet8d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet16i ploadu< Packet16i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet8l ploadu< Packet8l > (const int64_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet16f ploadu< Packet16f > (const float *from, uint16_t umask)
 
template<>
EIGEN_STRONG_INLINE Packet8d ploadu< Packet8d > (const double *from, uint8_t umask)
 
template<>
EIGEN_STRONG_INLINE Packet16f ploaddup< Packet16f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet8d ploaddup< Packet8d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet8l ploaddup< Packet8l > (const int64_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet16i ploaddup< Packet16i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE Packet16f ploadquad< Packet16f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet8d ploadquad< Packet8d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet8l ploadquad< Packet8l > (const int64_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet16i ploadquad< Packet16i > (const int *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< float > (float *to, const Packet16f &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< double > (double *to, const Packet8d &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int > (int *to, const Packet16i &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int64_t > (int64_t *to, const Packet8l &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< float > (float *to, const Packet16f &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< double > (double *to, const Packet8d &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int > (int *to, const Packet16i &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int64_t > (int64_t *to, const Packet8l &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< float > (float *to, const Packet16f &from, uint16_t umask)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< double > (double *to, const Packet8d &from, uint8_t umask)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC Packet pgather (const Packet &src, const Scalar *from, Index stride, typename unpacket_traits< Packet >::mask_t umask)
 
template<>
EIGEN_DEVICE_FUNC Packet16f pgather< float, Packet16f > (const Packet16f &src, const float *from, Index stride, uint16_t umask)
 
template<>
EIGEN_DEVICE_FUNC Packet8d pgather< double, Packet8d > (const Packet8d &src, const double *from, Index stride, uint8_t umask)
 
template<>
EIGEN_DEVICE_FUNC Packet16f pgather< float, Packet16f > (const float *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC Packet8d pgather< double, Packet8d > (const double *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC Packet8l pgather< int64_t, Packet8l > (const int64_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC Packet16i pgather< int, Packet16i > (const int *from, Index stride)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void pscatter (Scalar *to, const Packet &from, Index stride, typename unpacket_traits< Packet >::mask_t umask)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< float, Packet16f > (float *to, const Packet16f &from, Index stride, uint16_t umask)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< double, Packet8d > (double *to, const Packet8d &from, Index stride, uint8_t umask)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< float, Packet16f > (float *to, const Packet16f &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< double, Packet8d > (double *to, const Packet8d &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< int64_t, Packet8l > (int64_t *to, const Packet8l &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< int, Packet16i > (int *to, const Packet16i &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE void pstore1< Packet16f > (float *to, const float &a)
 
template<>
EIGEN_STRONG_INLINE void pstore1< Packet8d > (double *to, const double &a)
 
template<>
EIGEN_STRONG_INLINE void pstore1< Packet16i > (int *to, const int &a)
 
template<>
EIGEN_STRONG_INLINE void pstore1< Packet8l > (int64_t *to, const int64_t &a)
 
template<>
EIGEN_STRONG_INLINE float pfirst< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE double pfirst< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE int64_t pfirst< Packet8l > (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE int pfirst< Packet16i > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f preverse (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d preverse (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16i preverse (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8l preverse (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pabs (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pabs (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16i pabs (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8l pabs (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h psignbit (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf psignbit (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f psignbit (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d psignbit (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pfrexp< Packet16f > (const Packet16f &a, Packet16f &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet8d pfrexp_generic_get_biased_exponent (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pfrexp< Packet8d > (const Packet8d &a, Packet8d &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet16f pldexp< Packet16f > (const Packet16f &a, const Packet16f &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet8d pldexp< Packet8d > (const Packet8d &a, const Packet8d &exponent)
 
template<>
EIGEN_STRONG_INLINE float predux< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE double predux< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE int64_t predux< Packet8l > (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE int predux< Packet16i > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f predux_half_dowto4< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d predux_half_dowto4< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i predux_half_dowto4< Packet16i > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4l predux_half_dowto4< Packet8l > (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE float predux_mul< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE double predux_mul< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE int predux_mul< Packet16i > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE int64_t predux_mul< Packet8l > (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE float predux_min< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE double predux_min< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE int predux_min< Packet16i > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE int64_t predux_min< Packet8l > (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE float predux_max< Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE double predux_max< Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE int predux_max< Packet16i > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE int64_t predux_max< Packet8l > (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet8l &a)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet16f, 16 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet16f, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet16f, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8d, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8d, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8l, 4 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet8l, 8 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet16i, 16 > &kernel)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet16i, 4 > &kernel)
 
template<size_t N>
EIGEN_STRONG_INLINE int avx512_blend_mask (const Selector< N > &ifPacket)
 
template<>
EIGEN_STRONG_INLINE Packet16f pblend (const Selector< 16 > &ifPacket, const Packet16f &thenPacket, const Packet16f &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet8d pblend (const Selector< 8 > &ifPacket, const Packet8d &thenPacket, const Packet8d &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet16h pset1< Packet16h > (const Eigen::half &from)
 
template<>
EIGEN_STRONG_INLINE Eigen::half pfirst< Packet16h > (const Packet16h &from)
 
template<>
EIGEN_STRONG_INLINE Packet16h pload< Packet16h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE Packet16h ploadu< Packet16h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< half > (Eigen::half *to, const Packet16h &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< half > (Eigen::half *to, const Packet16h &from)
 
template<>
EIGEN_STRONG_INLINE Packet16h ploaddup< Packet16h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE Packet16h ploadquad (const Eigen::half *from)
 
EIGEN_STRONG_INLINE Packet16f half2float (const Packet16h &a)
 
EIGEN_STRONG_INLINE Packet16h float2half (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h ptrue (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h pabs (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h pmin< Packet16h > (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pmax< Packet16h > (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h plset< Packet16h > (const half &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h por (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pxor (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pand (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pandnot (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pselect (const Packet16h &mask, const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pround< Packet16h > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h print< Packet16h > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h pceil< Packet16h > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h pfloor< Packet16h > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h ptrunc< Packet16h > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h pcmp_eq (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pcmp_le (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pcmp_lt (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pcmp_lt_or_nan (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pconj (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h pnegate (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h padd< Packet16h > (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h psub< Packet16h > (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pmul< Packet16h > (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet16h pdiv< Packet16h > (const Packet16h &a, const Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE half predux< Packet16h > (const Packet16h &from)
 
template<>
EIGEN_STRONG_INLINE Packet8h predux_half_dowto4< Packet16h > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Eigen::half predux_max< Packet16h > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Eigen::half predux_min< Packet16h > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE half predux_mul< Packet16h > (const Packet16h &from)
 
template<>
EIGEN_STRONG_INLINE Packet16h preverse (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h pgather< Eigen::half, Packet16h > (const Eigen::half *from, Index stride)
 
template<>
EIGEN_STRONG_INLINE void pscatter< half, Packet16h > (half *to, const Packet16h &from, Index stride)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet16h, 16 > &kernel)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet16h, 8 > &kernel)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet16h, 4 > &kernel)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pset1< Packet16bf > (const bfloat16 &from)
 
template<>
EIGEN_STRONG_INLINE bfloat16 pfirst< Packet16bf > (const Packet16bf &from)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pload< Packet16bf > (const bfloat16 *from)
 
template<>
EIGEN_STRONG_INLINE Packet16bf ploadu< Packet16bf > (const bfloat16 *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< bfloat16 > (bfloat16 *to, const Packet16bf &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< bfloat16 > (bfloat16 *to, const Packet16bf &from)
 
template<>
EIGEN_STRONG_INLINE Packet16bf ploaddup< Packet16bf > (const bfloat16 *from)
 
template<>
EIGEN_STRONG_INLINE Packet16bf ploadquad (const bfloat16 *from)
 
EIGEN_STRONG_INLINE Packet16f Bf16ToF32 (const Packet16bf &a)
 
EIGEN_STRONG_INLINE Packet16bf F32ToBf16 (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf ptrue (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf por (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pxor (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pand (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pandnot (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pselect (const Packet16bf &mask, const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pround< Packet16bf > (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf print< Packet16bf > (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pceil< Packet16bf > (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pfloor< Packet16bf > (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf ptrunc< Packet16bf > (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pcmp_eq (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pcmp_le (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pcmp_lt (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pcmp_lt_or_nan (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pnegate (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pconj (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pabs (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf padd< Packet16bf > (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf psub< Packet16bf > (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pmul< Packet16bf > (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pdiv< Packet16bf > (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pmin< Packet16bf > (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pmax< Packet16bf > (const Packet16bf &a, const Packet16bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet16bf plset< Packet16bf > (const bfloat16 &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf predux_half_dowto4< Packet16bf > (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux< Packet16bf > (const Packet16bf &p)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux_mul< Packet16bf > (const Packet16bf &from)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux_min< Packet16bf > (const Packet16bf &from)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux_max< Packet16bf > (const Packet16bf &from)
 
template<>
EIGEN_STRONG_INLINE Packet16bf preverse (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pgather< bfloat16, Packet16bf > (const bfloat16 *from, Index stride)
 
template<>
EIGEN_STRONG_INLINE void pscatter< bfloat16, Packet16bf > (bfloat16 *to, const Packet16bf &from, Index stride)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet16bf, 16 > &kernel)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet16bf, 4 > &kernel)
 
template<>
EIGEN_STRONG_INLINE Packet32h pset1< Packet32h > (const Eigen::half &from)
 
template<>
EIGEN_STRONG_INLINE Packet32h pzero (const Packet32h &)
 
template<>
EIGEN_STRONG_INLINE Packet32h pset1frombits< Packet32h > (unsigned short from)
 
template<>
EIGEN_STRONG_INLINE Eigen::half pfirst< Packet32h > (const Packet32h &from)
 
template<>
EIGEN_STRONG_INLINE Packet32h pload< Packet32h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE Packet32h ploadu< Packet32h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< half > (Eigen::half *to, const Packet32h &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< half > (Eigen::half *to, const Packet32h &from)
 
template<>
EIGEN_STRONG_INLINE Packet32h ploaddup< Packet32h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE Packet32h ploadquad< Packet32h > (const Eigen::half *from)
 
template<>
EIGEN_STRONG_INLINE Packet32h pabs< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h psignbit< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h pmin< Packet32h > (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pmax< Packet32h > (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h plset< Packet32h > (const half &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h por (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pxor (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pand (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pandnot (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_DEVICE_FUNC Packet32h pselect (const Packet32h &mask, const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pcmp_eq (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pcmp_le (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pcmp_lt (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pcmp_lt_or_nan (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h padd< Packet32h > (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h psub< Packet32h > (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pmul< Packet32h > (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pdiv< Packet32h > (const Packet32h &a, const Packet32h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h pround< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h print< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h pceil< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h pfloor< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h ptrunc< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE half predux< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h predux_half_dowto4< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h pnegate< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h pconj< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h psqrt< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h prsqrt< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h preciprocal< Packet32h > (const Packet32h &a)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet32h, 32 > &a)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet32h, 4 > &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h preverse (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE void pscatter< half, Packet32h > (half *to, const Packet32h &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE Packet32h pgather< Eigen::half, Packet32h > (const Eigen::half *from, Index stride)
 
template<>
EIGEN_STRONG_INLINE Packet16h pcos< Packet16h > (const Packet16h &)
 
template<>
EIGEN_STRONG_INLINE Packet16h psin< Packet16h > (const Packet16h &)
 
template<>
EIGEN_STRONG_INLINE Packet16h plog< Packet16h > (const Packet16h &)
 
template<>
EIGEN_STRONG_INLINE Packet16h plog2< Packet16h > (const Packet16h &)
 
template<>
EIGEN_STRONG_INLINE Packet16h plog1p< Packet16h > (const Packet16h &)
 
template<>
EIGEN_STRONG_INLINE Packet16h pexp< Packet16h > (const Packet16h &)
 
template<>
EIGEN_STRONG_INLINE Packet16h pexpm1< Packet16h > (const Packet16h &)
 
template<>
EIGEN_STRONG_INLINE Packet16h ptanh< Packet16h > (const Packet16h &)
 
template<>
EIGEN_STRONG_INLINE Packet16h pfrexp< Packet16h > (const Packet16h &, Packet16h &)
 
template<>
EIGEN_STRONG_INLINE Packet16h pldexp< Packet16h > (const Packet16h &, const Packet16h &)
 
EIGEN_STRONG_INLINE Packet32h combine2Packet16h (const Packet16h &a, const Packet16h &b)
 
EIGEN_STRONG_INLINE void extract2Packet16h (const Packet32h &x, Packet16h &a, Packet16h &b)
 
template<>
EIGEN_STRONG_INLINE Packet32h psin< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h pcos< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h plog< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h plog2< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h plog1p< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h pexp< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h pexpm1< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h ptanh< Packet32h > (const Packet32h &a)
 
template<>
EIGEN_STRONG_INLINE Packet32h pfrexp< Packet32h > (const Packet32h &a, Packet32h &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet32h pldexp< Packet32h > (const Packet32h &a, const Packet32h &exponent)
 
template<typename Scalar , typename vec , int64_t unrollM, int64_t unrollN, bool remM, bool remN>
EIGEN_ALWAYS_INLINE void transStoreC (PacketBlock< vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS > &zmm, Scalar *C_arr, int64_t LDC, int64_t remM_=0, int64_t remN_=0)
 
template<typename Scalar , bool isARowMajor, bool isCRowMajor, bool isAdd, bool handleKRem>
void gemmKernel (Scalar *A_arr, Scalar *B_arr, Scalar *C_arr, int64_t M, int64_t N, int64_t K, int64_t LDA, int64_t LDB, int64_t LDC)
 
template<typename Scalar , typename vec , int64_t unrollM, bool isARowMajor, bool isFWDSolve, bool isUnitDiag>
EIGEN_ALWAYS_INLINE void triSolveKernel (Scalar *A_arr, Scalar *B_arr, int64_t K, int64_t LDA, int64_t LDB)
 
template<typename Scalar , bool isARowMajor, bool isFWDSolve, bool isUnitDiag>
void triSolveKernelLxK (Scalar *A_arr, Scalar *B_arr, int64_t M, int64_t K, int64_t LDA, int64_t LDB)
 
template<typename Scalar , bool toTemp = true, bool remM = false>
EIGEN_ALWAYS_INLINE void copyBToRowMajor (Scalar *B_arr, int64_t LDB, int64_t K, Scalar *B_temp, int64_t LDB_, int64_t remM_=0)
 
template<typename Scalar , bool isARowMajor = true, bool isBRowMajor = true, bool isFWDSolve = true, bool isUnitDiag = false>
void triSolve (Scalar *A_arr, Scalar *B_arr, int64_t M, int64_t numRHS, int64_t LDA, int64_t LDB)
 
template<>
EIGEN_STRONG_INLINE Packet16b pcast< Packet16f, Packet16b > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pcast< Packet16b, Packet16f > (const Packet16b &a)
 
template<>
EIGEN_STRONG_INLINE Packet16i pcast< Packet16f, Packet16i > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pcast< Packet16f, Packet8d > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pcast< Packet8f, Packet8d > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8l pcast< Packet8d, Packet8l > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pcast< Packet16i, Packet16f > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pcast< Packet16i, Packet8d > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pcast< Packet8i, Packet8d > (const Packet8i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d pcast< Packet8l, Packet8d > (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pcast< Packet8d, Packet16f > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16i pcast< Packet8d, Packet16i > (const Packet8d &a, const Packet8d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8i pcast< Packet8d, Packet8i > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f pcast< Packet8d, Packet8f > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16i preinterpret< Packet16i, Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f preinterpret< Packet16f, Packet16i > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d preinterpret< Packet8d, Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d preinterpret< Packet8d, Packet8l > (const Packet8l &a)
 
template<>
EIGEN_STRONG_INLINE Packet8l preinterpret< Packet8l, Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f preinterpret< Packet16f, Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8f preinterpret< Packet8f, Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f preinterpret< Packet4f, Packet16f > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4d preinterpret< Packet4d, Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d preinterpret< Packet2d, Packet8d > (const Packet8d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f preinterpret< Packet16f, Packet8f > (const Packet8f &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f preinterpret< Packet16f, Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d preinterpret< Packet8d, Packet4d > (const Packet4d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8d preinterpret< Packet8d, Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet8i preinterpret< Packet8i, Packet16i > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i preinterpret< Packet4i, Packet16i > (const Packet16i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8h preinterpret< Packet8h, Packet16h > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet8bf preinterpret< Packet8bf, Packet16bf > (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pcast< Packet16h, Packet16f > (const Packet16h &a)
 
template<>
EIGEN_STRONG_INLINE Packet16h pcast< Packet16f, Packet16h > (const Packet16f &a)
 
template<>
EIGEN_STRONG_INLINE Packet16f pcast< Packet16bf, Packet16f > (const Packet16bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet16bf pcast< Packet16f, Packet16bf > (const Packet16f &a)
 
template<typename Packet >
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pfrexp_generic_get_biased_exponent (const Packet &a)
 
template<typename Packet >
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pfrexp_generic (const Packet &a, Packet &exponent)
 
template<typename Packet >
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pldexp_generic (const Packet &a, const Packet &exponent)
 
template<typename Packet >
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pldexp_fast (const Packet &a, const Packet &exponent)
 
template<typename Packet , bool base2>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_impl_float (const Packet _x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_float (const Packet _x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2_float (const Packet _x)
 
template<typename Packet , bool base2>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_impl_double (const Packet _x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_double (const Packet _x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2_double (const Packet _x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_log1p (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_expm1 (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_float (const Packet _x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_double (const Packet _x)
 
float trig_reduce_huge (float xf, Eigen::numext::int32_t *quadrant)
 
template<bool ComputeSine, typename Packet , bool ComputeBoth = false>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psincos_float (const Packet &_x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin_float (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos_float (const Packet &x)
 
template<typename Packet >
Packet trig_reduce_small_double (const Packet &x, const Packet &q)
 
template<typename Packet >
Packet trig_reduce_medium_double (const Packet &x, const Packet &q_high, const Packet &q_low)
 
template<bool ComputeSine, typename Packet , bool ComputeBoth = false>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psincos_double (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin_double (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos_double (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pacos_float (const Packet &x_in)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pasin_float (const Packet &x_in)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_atan (const Packet &x_in)
 
template<typename T >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS T ptanh_float (const T &a_x)
 
template<typename T >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS T ptanh_double (const T &a_x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patanh_float (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patanh_double (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pdiv_complex (const Packet &x, const Packet &y)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_complex (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_complex (const Packet &a)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psqrt_complex (const Packet &a)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet phypot_complex (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void absolute_split (const Packet &x, Packet &n, Packet &r)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void fast_twosum (const Packet &x, const Packet &y, Packet &s_hi, Packet &s_lo)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void veltkamp_splitting (const Packet &x, Packet &x_hi, Packet &x_lo)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void twoprod (const Packet &x, const Packet &y, Packet &p_hi, Packet &p_lo)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet twoprod_low (const Packet &x, const Packet &y, const Packet &xy)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void twosum (const Packet &x_hi, const Packet &x_lo, const Packet &y_hi, const Packet &y_lo, Packet &s_hi, Packet &s_lo)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void fast_twosum (const Packet &x_hi, const Packet &x_lo, const Packet &y_hi, const Packet &y_lo, Packet &s_hi, Packet &s_lo)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void fast_twosum (const Packet &x, const Packet &y_hi, const Packet &y_lo, Packet &s_hi, Packet &s_lo)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void twoprod (const Packet &x_hi, const Packet &x_lo, const Packet &y, Packet &p_hi, Packet &p_lo)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void twoprod (const Packet &x_hi, const Packet &x_lo, const Packet &y_hi, const Packet &y_lo, Packet &p_hi, Packet &p_lo)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void doubleword_div_fp (const Packet &x_hi, const Packet &x_lo, const Packet &y, Packet &z_hi, Packet &z_lo)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_pow_impl (const Packet &x, const Packet &y)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_pow (const Packet &x, const Packet &y)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_exp2 (const Packet &_x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_rint (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_floor (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_ceil (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_trunc (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_round (const Packet &a)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptanh_float (const Packet &x)
 
template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptanh_double (const Packet &x)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pmul< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf ptrue< Packet2cf > (const Packet2cf &a)
 
EIGEN_STRONG_INLINE Packet2cf pcplxflip (const Packet2cf &x)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pzero (const Packet2cf &)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pmadd< Packet2cf > (const Packet2cf &a, const Packet2cf &b, const Packet2cf &c)
 
template<>
EIGEN_STRONG_INLINE Packet1cd padd< Packet1cd > (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cd psub< Packet1cd > (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pnegate (const Packet1cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pconj (const Packet1cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pmul< Packet1cd > (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cd ptrue< Packet1cd > (const Packet1cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pand< Packet1cd > (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cd por< Packet1cd > (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pxor< Packet1cd > (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pandnot< Packet1cd > (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pload< Packet1cd > (const std::complex< double > *from)
 
template<>
EIGEN_STRONG_INLINE Packet1cd ploadu< Packet1cd > (const std::complex< double > *from)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pset1< Packet1cd > (const std::complex< double > &from)
 
template<>
EIGEN_STRONG_INLINE Packet1cd ploaddup< Packet1cd > (const std::complex< double > *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< std::complex< double > > (std::complex< double > *to, const Packet1cd &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< std::complex< double > > (std::complex< double > *to, const Packet1cd &from)
 
template<>
EIGEN_STRONG_INLINE void prefetch< std::complex< double > > (const std::complex< double > *addr)
 
template<>
EIGEN_STRONG_INLINE std::complex< doublepfirst< Packet1cd > (const Packet1cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cd preverse (const Packet1cd &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< doublepredux< Packet1cd > (const Packet1cd &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< doublepredux_mul< Packet1cd > (const Packet1cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pdiv< Packet1cd > (const Packet1cd &a, const Packet1cd &b)
 
EIGEN_STRONG_INLINE Packet1cd pcplxflip (const Packet1cd &x)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pcmp_eq (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_DEVICE_FUNC Packet2cf pselect (const Packet2cf &mask, const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cd psqrt< Packet1cd > (const Packet1cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cd plog< Packet1cd > (const Packet1cd &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pzero< Packet1cd > (const Packet1cd &)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pmadd< Packet1cd > (const Packet1cd &a, const Packet1cd &b, const Packet1cd &c)
 
template<>
EIGEN_DEVICE_FUNC Packet1cd pgather< std::complex< double >, Packet1cd > (const std::complex< double > *from, Index)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< std::complex< double >, Packet1cd > (std::complex< double > *to, const Packet1cd &from, Index)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet1cd, 2 > &kernel)
 
EIGEN_ALWAYS_INLINE Packet4f make_packet4f (float a, float b, float c, float d)
 
EIGEN_STRONG_INLINE Packet4f shuffle1 (const Packet4f &m, int mask)
 
template<bool interleave>
EIGEN_STRONG_INLINE Packet4f shuffle2 (const Packet4f &m, const Packet4f &n, int mask)
 
template<>
EIGEN_STRONG_INLINE Packet4f shuffle2< true > (const Packet4f &m, const Packet4f &n, int mask)
 
static EIGEN_STRONG_INLINE int eigen_lsx_shuffle_mask (int p, int q, int r, int s)
 
EIGEN_STRONG_INLINE Packet4f vec4f_swizzle1 (const Packet4f &a, int p, int q, int r, int s)
 
EIGEN_STRONG_INLINE Packet4f vec4f_swizzle2 (const Packet4f &a, const Packet4f &b, int p, int q, int r, int s)
 
EIGEN_STRONG_INLINE Packet4f vec4f_movelh (const Packet4f &a, const Packet4f &b)
 
EIGEN_STRONG_INLINE Packet4f vec4f_movehl (const Packet4f &a, const Packet4f &b)
 
EIGEN_STRONG_INLINE Packet4f vec4f_unpacklo (const Packet4f &a, const Packet4f &b)
 
EIGEN_STRONG_INLINE Packet4f vec4f_unpackhi (const Packet4f &a, const Packet4f &b)
 
EIGEN_ALWAYS_INLINE Packet2d make_packet2d (double a, double b)
 
EIGEN_STRONG_INLINE Packet2d shuffle (const Packet2d &m, const Packet2d &n, int mask)
 
EIGEN_STRONG_INLINE Packet2d vec2d_swizzle2 (const Packet2d &a, const Packet2d &b, int mask)
 
EIGEN_STRONG_INLINE Packet2d vec2d_unpacklo (const Packet2d &a, const Packet2d &b)
 
EIGEN_STRONG_INLINE Packet2d vec2d_unpackhi (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pset1< Packet16c > (const int8_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet8s pset1< Packet8s > (const int16_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet4i pset1< Packet4i > (const int32_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet2l pset1< Packet2l > (const int64_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pset1< Packet16uc > (const uint8_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet8us pset1< Packet8us > (const uint16_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pset1< Packet4ui > (const uint32_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pset1< Packet2ul > (const uint64_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet2d pset1< Packet2d > (const double &from)
 
template<>
EIGEN_STRONG_INLINE Packet4f pset1frombits< Packet4f > (uint32_t from)
 
template<>
EIGEN_STRONG_INLINE Packet2d pset1frombits< Packet2d > (uint64_t from)
 
template<>
EIGEN_STRONG_INLINE Packet16c plset< Packet16c > (const int8_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s plset< Packet8s > (const int16_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i plset< Packet4i > (const int32_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l plset< Packet2l > (const int64_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet16uc plset< Packet16uc > (const uint8_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us plset< Packet8us > (const uint16_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui plset< Packet4ui > (const uint32_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul plset< Packet2ul > (const uint64_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d plset< Packet2d > (const double &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l padd< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul padd< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d padd< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l psub< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui psub< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul psub< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d psub< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f paddsub< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pxor< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d paddsub< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pnegate (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pnegate (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pconj (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16c pconj (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s pconj (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pconj (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pconj (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us pconj (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pconj (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pconj (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pmul< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pmul< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pmul< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pmul< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pdiv< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pdiv< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pdiv< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pdiv< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pdiv< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pdiv< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pmadd (const Packet2d &a, const Packet2d &b, const Packet2d &c)
 
template<>
EIGEN_STRONG_INLINE Packet4f pmsub (const Packet4f &a, const Packet4f &b, const Packet4f &c)
 
template<>
EIGEN_STRONG_INLINE Packet2d pmsub (const Packet2d &a, const Packet2d &b, const Packet2d &c)
 
template<>
EIGEN_STRONG_INLINE Packet4f pnmadd (const Packet4f &a, const Packet4f &b, const Packet4f &c)
 
template<>
EIGEN_STRONG_INLINE Packet2d pnmadd (const Packet2d &a, const Packet2d &b, const Packet2d &c)
 
template<>
EIGEN_STRONG_INLINE Packet4f pnmsub (const Packet4f &a, const Packet4f &b, const Packet4f &c)
 
template<>
EIGEN_STRONG_INLINE Packet2d pnmsub (const Packet2d &a, const Packet2d &b, const Packet2d &c)
 
template<>
EIGEN_STRONG_INLINE Packet16c pmadd (const Packet16c &a, const Packet16c &b, const Packet16c &c)
 
template<>
EIGEN_STRONG_INLINE Packet2l pmadd (const Packet2l &a, const Packet2l &b, const Packet2l &c)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pmadd (const Packet16uc &a, const Packet16uc &b, const Packet16uc &c)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pmadd (const Packet4ui &a, const Packet4ui &b, const Packet4ui &c)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pmadd (const Packet2ul &a, const Packet2ul &b, const Packet2ul &c)
 
template<>
EIGEN_STRONG_INLINE Packet2d pand< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pand< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pand< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pand< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pand< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pand< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d por< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c por< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l por< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc por< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui por< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul por< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pxor< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pxor< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pxor< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pxor< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pxor< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pxor< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pandnot< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pandnot< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pandnot< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pandnot< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pandnot< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pandnot< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pandnot< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pandnot< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcmp_le< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcmp_le< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcmp_le< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcmp_le< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcmp_le< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcmp_le< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcmp_le< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcmp_le< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcmp_le< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcmp_le< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcmp_lt< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcmp_lt< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcmp_lt< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcmp_lt< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcmp_lt< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcmp_lt< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcmp_lt< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcmp_lt< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcmp_lt< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcmp_lt< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcmp_lt_or_nan< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcmp_lt_or_nan< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcmp_eq< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcmp_eq< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcmp_eq< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcmp_eq< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcmp_eq< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcmp_eq< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcmp_eq< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcmp_eq< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcmp_eq< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcmp_eq< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pmin< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pmin< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pmin< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pmax< Packet2l > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pmax< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pmax< Packet2ul > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pmin< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pmax< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<int N>
EIGEN_STRONG_INLINE Packet16c parithmetic_shift_right (const Packet16c &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8s parithmetic_shift_right (const Packet8s &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2l parithmetic_shift_right (const Packet2l &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16uc parithmetic_shift_right (const Packet16uc &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8us parithmetic_shift_right (const Packet8us &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4ui parithmetic_shift_right (const Packet4ui &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2ul parithmetic_shift_right (const Packet2ul &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16c plogical_shift_right (const Packet16c &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8s plogical_shift_right (const Packet8s &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2l plogical_shift_right (const Packet2l &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16uc plogical_shift_right (const Packet16uc &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2ul plogical_shift_right (const Packet2ul &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16c plogical_shift_left (const Packet16c &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8s plogical_shift_left (const Packet8s &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2l plogical_shift_left (const Packet2l &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16uc plogical_shift_left (const Packet16uc &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2ul plogical_shift_left (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pabs (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pabs (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pabs (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pabs (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pload< Packet2d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet16c pload< Packet16c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8s pload< Packet8s > (const int16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4i pload< Packet4i > (const int32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2l pload< Packet2l > (const int64_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pload< Packet16uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8us pload< Packet8us > (const uint16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pload< Packet4ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pload< Packet2ul > (const uint64_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2d ploadu< Packet2d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet16c ploadu< Packet16c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8s ploadu< Packet8s > (const int16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4i ploadu< Packet4i > (const int32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2l ploadu< Packet2l > (const int64_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc ploadu< Packet16uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8us ploadu< Packet8us > (const uint16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4ui ploadu< Packet4ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2ul ploadu< Packet2ul > (const uint64_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2d ploaddup< Packet2d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet16c ploaddup< Packet16c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8s ploaddup< Packet8s > (const int16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4i ploaddup< Packet4i > (const int32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2l ploaddup< Packet2l > (const int64_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc ploaddup< Packet16uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8us ploaddup< Packet8us > (const uint16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4ui ploaddup< Packet4ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2ul ploaddup< Packet2ul > (const uint64_t *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< double > (double *to, const Packet2d &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int8_t > (int8_t *to, const Packet16c &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int16_t > (int16_t *to, const Packet8s &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int32_t > (int32_t *to, const Packet4i &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int64_t > (int64_t *to, const Packet2l &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< uint8_t > (uint8_t *to, const Packet16uc &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< uint16_t > (uint16_t *to, const Packet8us &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< uint32_t > (uint32_t *to, const Packet4ui &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< uint64_t > (uint64_t *to, const Packet2ul &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< double > (double *to, const Packet2d &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int8_t > (int8_t *to, const Packet16c &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int16_t > (int16_t *to, const Packet8s &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int32_t > (int32_t *to, const Packet4i &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int64_t > (int64_t *to, const Packet2l &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< uint8_t > (uint8_t *to, const Packet16uc &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< uint16_t > (uint16_t *to, const Packet8us &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< uint32_t > (uint32_t *to, const Packet4ui &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< uint64_t > (uint64_t *to, const Packet2ul &from)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2d pgather< double, Packet2d > (const double *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet16c pgather< int8_t, Packet16c > (const int8_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8s pgather< int16_t, Packet8s > (const int16_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4i pgather< int32_t, Packet4i > (const int32_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2l pgather< int64_t, Packet2l > (const int64_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet16uc pgather< uint8_t, Packet16uc > (const uint8_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8us pgather< uint16_t, Packet8us > (const uint16_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4ui pgather< uint32_t, Packet4ui > (const uint32_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2ul pgather< uint64_t, Packet2ul > (const uint64_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< double, Packet2d > (double *to, const Packet2d &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< int8_t, Packet16c > (int8_t *to, const Packet16c &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< int16_t, Packet8s > (int16_t *to, const Packet8s &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< int32_t, Packet4i > (int32_t *to, const Packet4i &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< int64_t, Packet2l > (int64_t *to, const Packet2l &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< uint8_t, Packet16uc > (uint8_t *to, const Packet16uc &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< uint16_t, Packet8us > (uint16_t *to, const Packet8us &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< uint32_t, Packet4ui > (uint32_t *to, const Packet4ui &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< uint64_t, Packet2ul > (uint64_t *to, const Packet2ul &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE void prefetch< int8_t > (const int8_t *addr)
 
template<>
EIGEN_STRONG_INLINE void prefetch< int16_t > (const int16_t *addr)
 
template<>
EIGEN_STRONG_INLINE void prefetch< int32_t > (const int32_t *addr)
 
template<>
EIGEN_STRONG_INLINE void prefetch< int64_t > (const int64_t *addr)
 
template<>
EIGEN_STRONG_INLINE void prefetch< uint8_t > (const uint8_t *addr)
 
template<>
EIGEN_STRONG_INLINE void prefetch< uint16_t > (const uint16_t *addr)
 
template<>
EIGEN_STRONG_INLINE void prefetch< uint64_t > (const uint64_t *addr)
 
template<>
EIGEN_STRONG_INLINE double pfirst< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE int64_t pfirst< Packet2l > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t pfirst< Packet4ui > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE uint64_t pfirst< Packet2ul > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d preverse (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l preverse (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui preverse (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul preverse (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE double predux< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE int64_t predux< Packet2l > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t predux< Packet4ui > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE uint64_t predux< Packet2ul > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE double predux_mul< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE int64_t predux_mul< Packet2l > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t predux_mul< Packet4ui > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE uint64_t predux_mul< Packet2ul > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE double predux_min< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE int64_t predux_min< Packet2l > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t predux_min< Packet4ui > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE uint64_t predux_min< Packet2ul > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE double predux_max< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE int64_t predux_max< Packet2l > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t predux_max< Packet4ui > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE uint64_t predux_max< Packet2ul > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f psqrt (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d psqrt (const Packet2d &a)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet2d, 2 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet16c, 8 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet2l, 2 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet16uc, 8 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet4ui, 4 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet2ul, 2 > &kernel)
 
template<>
EIGEN_STRONG_INLINE Packet4f prsqrt (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d prsqrt (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pfloor (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pfloor (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pceil (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pceil (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pround (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pround (const Packet2d &a)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet16c pselect (const Packet16c &mask, const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c ploadquad< Packet16c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet16uc ploadquad< Packet16uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8s ploadquad< Packet8s > (const int16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8us ploadquad< Packet8us > (const uint16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4i ploadquad< Packet4i > (const int32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4ui ploadquad< Packet4ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet16c pnmsub (const Packet16c &a, const Packet16c &b, const Packet16c &c)
 
template<>
EIGEN_STRONG_INLINE Packet8s pnmsub (const Packet8s &a, const Packet8s &b, const Packet8s &c)
 
template<>
EIGEN_STRONG_INLINE Packet4i pnmsub (const Packet4i &a, const Packet4i &b, const Packet4i &c)
 
template<>
EIGEN_STRONG_INLINE Packet2l pnmsub (const Packet2l &a, const Packet2l &b, const Packet2l &c)
 
template<>
EIGEN_STRONG_INLINE Packet16c pmsub (const Packet16c &a, const Packet16c &b, const Packet16c &c)
 
template<>
EIGEN_STRONG_INLINE Packet8s pmsub (const Packet8s &a, const Packet8s &b, const Packet8s &c)
 
template<>
EIGEN_STRONG_INLINE Packet4i pmsub (const Packet4i &a, const Packet4i &b, const Packet4i &c)
 
template<>
EIGEN_STRONG_INLINE Packet2l pmsub (const Packet2l &a, const Packet2l &b, const Packet2l &c)
 
template<>
EIGEN_STRONG_INLINE Packet16c pnmadd (const Packet16c &a, const Packet16c &b, const Packet16c &c)
 
template<>
EIGEN_STRONG_INLINE Packet8s pnmadd (const Packet8s &a, const Packet8s &b, const Packet8s &c)
 
template<>
EIGEN_STRONG_INLINE Packet4i pnmadd (const Packet4i &a, const Packet4i &b, const Packet4i &c)
 
template<>
EIGEN_STRONG_INLINE Packet2l pnmadd (const Packet2l &a, const Packet2l &b, const Packet2l &c)
 
template<>
EIGEN_STRONG_INLINE Packet4f pexp (const Packet4f &_x)
 
template<>
EIGEN_STRONG_INLINE Packet2d pexp (const Packet2d &_x)
 
template<>
EIGEN_STRONG_INLINE Packet2d pfrexp< Packet2d > (const Packet2d &a, Packet2d &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet4f pzero (const Packet4f &)
 
template<>
EIGEN_STRONG_INLINE Packet4f pabsdiff< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pmin< PropagateNaN, Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pmax< PropagateNaN, Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f ploadquad< Packet4f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4f print< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f preciprocal< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pzero (const Packet2d &)
 
template<>
EIGEN_STRONG_INLINE Packet2d pmin< PropagateNaN, Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pmax< PropagateNaN, Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d psignbit (const Packet2d &a)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2d pselect (const Packet2d &mask, const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d print< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d ptrunc< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pldexp< Packet2d > (const Packet2d &a, const Packet2d &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet16c pabsdiff< Packet16c > (const Packet16c &a, const Packet16c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pabsdiff< Packet8s > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8s pselect (const Packet8s &mask, const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pabsdiff< Packet4i > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4i pselect (const Packet4i &mask, const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2l pselect (const Packet2l &mask, const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pdiv< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pabsdiff< Packet16uc > (const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet16uc pselect (const Packet16uc &mask, const Packet16uc &a, const Packet16uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc psqrt (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us pabsdiff< Packet8us > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8us pselect (const Packet8us &mask, const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us psqrt (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pabsdiff< Packet4ui > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4ui pselect (const Packet4ui &mask, const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui psqrt (const Packet4ui &a)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2ul pselect (const Packet2ul &mask, const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f preinterpret< Packet4f, Packet4ui > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d preinterpret< Packet2d, Packet2l > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d preinterpret< Packet2d, Packet2ul > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d preinterpret< Packet2d, Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet16c preinterpret< Packet16c, Packet16uc > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s preinterpret< Packet8s, Packet8us > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i preinterpret< Packet4i, Packet4ui > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i preinterpret< Packet4i, Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l preinterpret< Packet2l, Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16uc preinterpret< Packet16uc, Packet16c > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us preinterpret< Packet8us, Packet8s > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui preinterpret< Packet4ui, Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui preinterpret< Packet4ui, Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul preinterpret< Packet2ul, Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul preinterpret< Packet2ul, Packet2l > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet4f, Packet2l > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet4f, Packet2ul > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet4f, Packet8s > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet4f, Packet8us > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcast< Packet4f, Packet16c > (const Packet4f &a, const Packet4f &b, const Packet4f &c, const Packet4f &d)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcast< Packet4f, Packet16uc > (const Packet4f &a, const Packet4f &b, const Packet4f &c, const Packet4f &d)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet16c, Packet4f > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet16c, Packet2l > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet16c, Packet2ul > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet16c, Packet4i > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet16c, Packet4ui > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet16c, Packet8s > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet16c, Packet8us > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet16uc, Packet4f > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet16uc, Packet2ul > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet16uc, Packet2l > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet16uc, Packet4ui > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet16uc, Packet4i > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet16uc, Packet8us > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet16uc, Packet8s > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet8s, Packet4f > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet8s, Packet2l > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet8s, Packet2ul > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet8s, Packet4i > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet8s, Packet4ui > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcast< Packet8s, Packet16c > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcast< Packet8s, Packet16uc > (const Packet8s &a, const Packet8s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet8us, Packet4f > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet8us, Packet2ul > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet8us, Packet2l > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet8us, Packet4ui > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet8us, Packet4i > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcast< Packet8us, Packet16uc > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcast< Packet8us, Packet16c > (const Packet8us &a, const Packet8us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet4i, Packet2l > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet4i, Packet2ul > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet4i, Packet8s > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet4i, Packet8us > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcast< Packet4i, Packet16c > (const Packet4i &a, const Packet4i &b, const Packet4i &c, const Packet4i &d)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcast< Packet4i, Packet16uc > (const Packet4i &a, const Packet4i &b, const Packet4i &c, const Packet4i &d)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet4ui, Packet2ul > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet4ui, Packet2l > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet4ui, Packet8us > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet4ui, Packet8s > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcast< Packet4ui, Packet16uc > (const Packet4ui &a, const Packet4ui &b, const Packet4ui &c, const Packet4ui &d)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcast< Packet4ui, Packet16c > (const Packet4ui &a, const Packet4ui &b, const Packet4ui &c, const Packet4ui &d)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet2l, Packet4f > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet2l, Packet4i > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet2l, Packet4ui > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet2l, Packet8s > (const Packet2l &a, const Packet2l &b, const Packet2l &c, const Packet2l &d)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet2l, Packet8us > (const Packet2l &a, const Packet2l &b, const Packet2l &c, const Packet2l &d)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcast< Packet2l, Packet16c > (const Packet2l &a, const Packet2l &b, const Packet2l &c, const Packet2l &d, const Packet2l &e, const Packet2l &f, const Packet2l &g, const Packet2l &h)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcast< Packet2l, Packet16uc > (const Packet2l &a, const Packet2l &b, const Packet2l &c, const Packet2l &d, const Packet2l &e, const Packet2l &f, const Packet2l &g, const Packet2l &h)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet2ul, Packet4f > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet2ul, Packet4ui > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet2ul, Packet4i > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet2ul, Packet8us > (const Packet2ul &a, const Packet2ul &b, const Packet2ul &c, const Packet2ul &d)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet2ul, Packet8s > (const Packet2ul &a, const Packet2ul &b, const Packet2ul &c, const Packet2ul &d)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcast< Packet2ul, Packet16uc > (const Packet2ul &a, const Packet2ul &b, const Packet2ul &c, const Packet2ul &d, const Packet2ul &e, const Packet2ul &f, const Packet2ul &g, const Packet2ul &h)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcast< Packet2ul, Packet16c > (const Packet2ul &a, const Packet2ul &b, const Packet2ul &c, const Packet2ul &d, const Packet2ul &e, const Packet2ul &f, const Packet2ul &g, const Packet2ul &h)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet2d, Packet4f > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet2d, Packet2l > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet2d, Packet2ul > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet2d, Packet4i > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet2d, Packet4ui > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet2d, Packet8s > (const Packet2d &a, const Packet2d &b, const Packet2d &c, const Packet2d &d)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet2d, Packet8us > (const Packet2d &a, const Packet2d &b, const Packet2d &c, const Packet2d &d)
 
template<>
EIGEN_STRONG_INLINE Packet16c pcast< Packet2d, Packet16c > (const Packet2d &a, const Packet2d &b, const Packet2d &c, const Packet2d &d, const Packet2d &e, const Packet2d &f, const Packet2d &g, const Packet2d &h)
 
template<>
EIGEN_STRONG_INLINE Packet16uc pcast< Packet2d, Packet16uc > (const Packet2d &a, const Packet2d &b, const Packet2d &c, const Packet2d &d, const Packet2d &e, const Packet2d &f, const Packet2d &g, const Packet2d &h)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcast< Packet4f, Packet2d > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcast< Packet16c, Packet2d > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcast< Packet16uc, Packet2d > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcast< Packet8s, Packet2d > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcast< Packet8us, Packet2d > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcast< Packet4i, Packet2d > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcast< Packet4ui, Packet2d > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcast< Packet2l, Packet2d > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcast< Packet2ul, Packet2d > (const Packet2ul &a)
 
std::ostream & operator<< (std::ostream &os, const Packet2cf &value)
 
std::ostream & operator<< (std::ostream &os, const PacketBlock< Packet2cf, 2 > &value)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pblend (const Selector< 2 > &ifPacket, const Packet2cf &thenPacket, const Packet2cf &elsePacket)
 
std::ostream & operator<< (std::ostream &os, const Packet1cd &value)
 
template<>
EIGEN_DEVICE_FUNC Packet1cd pgather< std::complex< double >, Packet1cd > (const std::complex< double > *from, Index stride __attribute__((unused)))
 
template<>
EIGEN_DEVICE_FUNC void pscatter< std::complex< double >, Packet1cd > (std::complex< double > *to, const Packet1cd &from, Index stride __attribute__((unused)))
 
std::ostream & operator<< (std::ostream &os, const PacketBlock< Packet1cd, 2 > &value)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet4f plog< Packet4f > (const Packet4f &_x)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet4f pexp< Packet4f > (const Packet4f &_x)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet4f ptanh< Packet4f > (const Packet4f &_x)
 
template<bool sine>
Packet4f psincos_inner_msa_float (const Packet4f &_x)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet4f psin< Packet4f > (const Packet4f &x)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet4f pcos< Packet4f > (const Packet4f &x)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet2d pexp< Packet2d > (const Packet2d &_x)
 
template<>
EIGEN_STRONG_INLINE Packet4f pload1< Packet4f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4i pload1< Packet4i > (const int32_t *from)
 
std::ostream & operator<< (std::ostream &os, const PacketBlock< Packet4f, 4 > &value)
 
std::ostream & operator<< (std::ostream &os, const PacketBlock< Packet4i, 4 > &value)
 
std::ostream & operator<< (std::ostream &os, const Packet2d &value)
 
std::ostream & operator<< (std::ostream &os, const Packet2l &value)
 
std::ostream & operator<< (std::ostream &os, const Packet2ul &value)
 
std::ostream & operator<< (std::ostream &os, const PacketBlock< Packet2d, 2 > &value)
 
template<>
EIGEN_STRONG_INLINE Packet2d pfloor< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pceil< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pround< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pblend (const Selector< 2 > &ifPacket, const Packet2d &thenPacket, const Packet2d &elsePacket)
 
uint32x2_t p2ui_CONJ_XOR ()
 
template<>
EIGEN_STRONG_INLINE Packet1cf pcast< float, Packet1cf > (const float &a)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pcast< Packet2f, Packet2cf > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pzero (const Packet1cf &)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pset1< Packet1cf > (const std::complex< float > &from)
 
template<>
EIGEN_STRONG_INLINE Packet1cf padd< Packet1cf > (const Packet1cf &a, const Packet1cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cf psub< Packet1cf > (const Packet1cf &a, const Packet1cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pnegate (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pconj (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pmul< Packet1cf > (const Packet1cf &a, const Packet1cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pcmp_eq (const Packet1cf &a, const Packet1cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pand< Packet1cf > (const Packet1cf &a, const Packet1cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cf por< Packet1cf > (const Packet1cf &a, const Packet1cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pxor< Packet1cf > (const Packet1cf &a, const Packet1cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pandnot< Packet1cf > (const Packet1cf &a, const Packet1cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pload< Packet1cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE Packet1cf ploadu< Packet1cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE Packet1cf ploaddup< Packet1cf > (const std::complex< float > *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< std::complex< float > > (std::complex< float > *to, const Packet1cf &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< std::complex< float > > (std::complex< float > *to, const Packet1cf &from)
 
template<>
EIGEN_DEVICE_FUNC Packet1cf pgather< std::complex< float >, Packet1cf > (const std::complex< float > *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< std::complex< float >, Packet1cf > (std::complex< float > *to, const Packet1cf &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > pfirst< Packet1cf > (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cf preverse (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pcplxflip< Packet1cf > (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > predux< Packet1cf > (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE std::complex< float > predux_mul< Packet1cf > (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pdiv< Packet1cf > (const Packet1cf &a, const Packet1cf &b)
 
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet1cf, 1 > &)
 
template<>
EIGEN_STRONG_INLINE Packet1cf psqrt< Packet1cf > (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cf plog< Packet1cf > (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet1cf pexp< Packet1cf > (const Packet1cf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pfrexp (const Packet4bf &a, Packet4bf &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pldexp (const Packet4bf &a, const Packet4bf &exponent)
 
EIGEN_ALWAYS_INLINE Packet2f make_packet2f (float a, float b)
 
static EIGEN_STRONG_INLINE int eigen_neon_shuffle_mask (int p, int q, int r, int s)
 
template<>
EIGEN_STRONG_INLINE Packet2f pzero (const Packet2f &)
 
template<>
EIGEN_STRONG_INLINE Packet2f pset1< Packet2f > (const float &from)
 
template<>
EIGEN_STRONG_INLINE Packet4c pset1< Packet4c > (const int8_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet8c pset1< Packet8c > (const int8_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pset1< Packet4uc > (const uint8_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pset1< Packet8uc > (const uint8_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet4s pset1< Packet4s > (const int16_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet4us pset1< Packet4us > (const uint16_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet2i pset1< Packet2i > (const int32_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pset1< Packet2ui > (const uint32_t &from)
 
template<>
EIGEN_STRONG_INLINE Packet2f pset1frombits< Packet2f > (uint32_t from)
 
template<>
EIGEN_STRONG_INLINE Packet2f plset< Packet2f > (const float &a)
 
template<>
EIGEN_STRONG_INLINE Packet4c plset< Packet4c > (const int8_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c plset< Packet8c > (const int8_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet4uc plset< Packet4uc > (const uint8_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc plset< Packet8uc > (const uint8_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s plset< Packet4s > (const int16_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us plset< Packet4us > (const uint16_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i plset< Packet2i > (const int32_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui plset< Packet2ui > (const uint32_t &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f padd< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c padd< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c padd< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc padd< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc padd< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s padd< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us padd< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i padd< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui padd< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f psub< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c psub< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c psub< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc psub< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc psub< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s psub< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us psub< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i psub< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui psub< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pxor< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f paddsub< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pnegate (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4c pnegate (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c pnegate (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pnegate (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pnegate (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pconj (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4c pconj (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c pconj (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pconj (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pconj (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pconj (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us pconj (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pconj (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pconj (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pmul< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pmul< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pmul< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pmul< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pmul< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pmul< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pmul< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pmul< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pmul< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pdiv< Packet4c > (const Packet4c &, const Packet4c &)
 
template<>
EIGEN_STRONG_INLINE Packet8c pdiv< Packet8c > (const Packet8c &, const Packet8c &)
 
template<>
EIGEN_STRONG_INLINE Packet16c pdiv< Packet16c > (const Packet16c &, const Packet16c &)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pdiv< Packet4uc > (const Packet4uc &, const Packet4uc &)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pdiv< Packet8uc > (const Packet8uc &, const Packet8uc &)
 
template<>
EIGEN_STRONG_INLINE Packet4s pdiv< Packet4s > (const Packet4s &, const Packet4s &)
 
template<>
EIGEN_STRONG_INLINE Packet4us pdiv< Packet4us > (const Packet4us &, const Packet4us &)
 
template<>
EIGEN_STRONG_INLINE Packet2i pdiv< Packet2i > (const Packet2i &, const Packet2i &)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pdiv< Packet2ui > (const Packet2ui &, const Packet2ui &)
 
template<>
EIGEN_STRONG_INLINE Packet2f pmadd (const Packet2f &a, const Packet2f &b, const Packet2f &c)
 
template<>
EIGEN_STRONG_INLINE Packet4c pmadd (const Packet4c &a, const Packet4c &b, const Packet4c &c)
 
template<>
EIGEN_STRONG_INLINE Packet8c pmadd (const Packet8c &a, const Packet8c &b, const Packet8c &c)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pmadd (const Packet4uc &a, const Packet4uc &b, const Packet4uc &c)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pmadd (const Packet8uc &a, const Packet8uc &b, const Packet8uc &c)
 
template<>
EIGEN_STRONG_INLINE Packet4s pmadd (const Packet4s &a, const Packet4s &b, const Packet4s &c)
 
template<>
EIGEN_STRONG_INLINE Packet4us pmadd (const Packet4us &a, const Packet4us &b, const Packet4us &c)
 
template<>
EIGEN_STRONG_INLINE Packet2i pmadd (const Packet2i &a, const Packet2i &b, const Packet2i &c)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pmadd (const Packet2ui &a, const Packet2ui &b, const Packet2ui &c)
 
template<>
EIGEN_STRONG_INLINE Packet2f pabsdiff< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pabsdiff< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pabsdiff< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pabsdiff< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pabsdiff< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pabsdiff< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pabsdiff< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pabsdiff< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pabsdiff< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pmin< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pmin< PropagateNaN, Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pmin< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pmin< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pmin< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pmin< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pmin< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pmin< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pmin< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pmin< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pmax< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pmax< PropagateNaN, Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pmax< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pmax< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pmax< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pmax< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pmax< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pmax< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pmax< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pmax< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcmp_le< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcmp_le< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcmp_le< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcmp_le< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcmp_le< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcmp_le< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcmp_le< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcmp_le< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcmp_le< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcmp_lt< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcmp_lt< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcmp_lt< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcmp_lt< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcmp_lt< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcmp_lt< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcmp_lt< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcmp_lt< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcmp_lt< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcmp_eq< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcmp_eq< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcmp_eq< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcmp_eq< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcmp_eq< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcmp_eq< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcmp_eq< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcmp_eq< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcmp_eq< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcmp_lt_or_nan< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pand< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pand< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pand< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pand< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pand< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pand< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pand< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pand< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pand< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f por< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c por< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c por< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc por< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc por< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s por< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us por< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i por< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui por< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pxor< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pxor< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pxor< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pxor< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pxor< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pxor< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pxor< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pxor< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pandnot< Packet2f > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pandnot< Packet4c > (const Packet4c &a, const Packet4c &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pandnot< Packet8c > (const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pandnot< Packet4uc > (const Packet4uc &a, const Packet4uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pandnot< Packet8uc > (const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pandnot< Packet4s > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pandnot< Packet4us > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet2i pandnot< Packet2i > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pandnot< Packet2ui > (const Packet2ui &a, const Packet2ui &b)
 
template<int N>
EIGEN_STRONG_INLINE Packet4c parithmetic_shift_right (Packet4c &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8c parithmetic_shift_right (Packet8c a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16c parithmetic_shift_right (Packet16c a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4uc parithmetic_shift_right (Packet4uc &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8uc parithmetic_shift_right (Packet8uc a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16uc parithmetic_shift_right (Packet16uc a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4s parithmetic_shift_right (Packet4s a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8s parithmetic_shift_right (Packet8s a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4us parithmetic_shift_right (Packet4us a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8us parithmetic_shift_right (Packet8us a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2i parithmetic_shift_right (Packet2i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4i parithmetic_shift_right (Packet4i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2ui parithmetic_shift_right (Packet2ui a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4ui parithmetic_shift_right (Packet4ui a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2l parithmetic_shift_right (Packet2l a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2ul parithmetic_shift_right (Packet2ul a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4c plogical_shift_right (Packet4c &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8c plogical_shift_right (Packet8c a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16c plogical_shift_right (Packet16c a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4uc plogical_shift_right (Packet4uc &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8uc plogical_shift_right (Packet8uc a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16uc plogical_shift_right (Packet16uc a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4s plogical_shift_right (Packet4s a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8s plogical_shift_right (Packet8s a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4us plogical_shift_right (Packet4us a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8us plogical_shift_right (Packet8us a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2i plogical_shift_right (Packet2i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4i plogical_shift_right (Packet4i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2ui plogical_shift_right (Packet2ui a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4ui plogical_shift_right (Packet4ui a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2l plogical_shift_right (Packet2l a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2ul plogical_shift_right (Packet2ul a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4c plogical_shift_left (Packet4c &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8c plogical_shift_left (Packet8c a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16c plogical_shift_left (Packet16c a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4uc plogical_shift_left (Packet4uc &a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8uc plogical_shift_left (Packet8uc a)
 
template<int N>
EIGEN_STRONG_INLINE Packet16uc plogical_shift_left (Packet16uc a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4s plogical_shift_left (Packet4s a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8s plogical_shift_left (Packet8s a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4us plogical_shift_left (Packet4us a)
 
template<int N>
EIGEN_STRONG_INLINE Packet8us plogical_shift_left (Packet8us a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2i plogical_shift_left (Packet2i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4i plogical_shift_left (Packet4i a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2ui plogical_shift_left (Packet2ui a)
 
template<int N>
EIGEN_STRONG_INLINE Packet4ui plogical_shift_left (Packet4ui a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2l plogical_shift_left (Packet2l a)
 
template<int N>
EIGEN_STRONG_INLINE Packet2ul plogical_shift_left (Packet2ul a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pload< Packet2f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4c pload< Packet4c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8c pload< Packet8c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pload< Packet4uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pload< Packet8uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4s pload< Packet4s > (const int16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4us pload< Packet4us > (const uint16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2i pload< Packet2i > (const int32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pload< Packet2ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2f ploadu< Packet2f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4c ploadu< Packet4c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8c ploadu< Packet8c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4uc ploadu< Packet4uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8uc ploadu< Packet8uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4s ploadu< Packet4s > (const int16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4us ploadu< Packet4us > (const uint16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2i ploadu< Packet2i > (const int32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2ui ploadu< Packet2ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2f ploaddup< Packet2f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet4c ploaddup< Packet4c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8c ploaddup< Packet8c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4uc ploaddup< Packet4uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8uc ploaddup< Packet8uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4s ploaddup< Packet4s > (const int16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4us ploaddup< Packet4us > (const uint16_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2i ploaddup< Packet2i > (const int32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet2ui ploaddup< Packet2ui > (const uint32_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4c ploadquad< Packet4c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8c ploadquad< Packet8c > (const int8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet4uc ploadquad< Packet4uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE Packet8uc ploadquad< Packet8uc > (const uint8_t *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< float > (float *to, const Packet2f &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int8_t > (int8_t *to, const Packet4c &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int8_t > (int8_t *to, const Packet8c &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< uint8_t > (uint8_t *to, const Packet4uc &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< uint8_t > (uint8_t *to, const Packet8uc &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int16_t > (int16_t *to, const Packet4s &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< uint16_t > (uint16_t *to, const Packet4us &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< int32_t > (int32_t *to, const Packet2i &from)
 
template<>
EIGEN_STRONG_INLINE void pstore< uint32_t > (uint32_t *to, const Packet2ui &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< float > (float *to, const Packet2f &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int8_t > (int8_t *to, const Packet4c &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int8_t > (int8_t *to, const Packet8c &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< uint8_t > (uint8_t *to, const Packet4uc &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< uint8_t > (uint8_t *to, const Packet8uc &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int16_t > (int16_t *to, const Packet4s &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< uint16_t > (uint16_t *to, const Packet4us &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< int32_t > (int32_t *to, const Packet2i &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< uint32_t > (uint32_t *to, const Packet2ui &from)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2f pgather< float, Packet2f > (const float *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4c pgather< int8_t, Packet4c > (const int8_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8c pgather< int8_t, Packet8c > (const int8_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4uc pgather< uint8_t, Packet4uc > (const uint8_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8uc pgather< uint8_t, Packet8uc > (const uint8_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4s pgather< int16_t, Packet4s > (const int16_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4us pgather< uint16_t, Packet4us > (const uint16_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2i pgather< int32_t, Packet2i > (const int32_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2ui pgather< uint32_t, Packet2ui > (const uint32_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< float, Packet2f > (float *to, const Packet2f &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< int8_t, Packet4c > (int8_t *to, const Packet4c &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< int8_t, Packet8c > (int8_t *to, const Packet8c &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< uint8_t, Packet4uc > (uint8_t *to, const Packet4uc &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< uint8_t, Packet8uc > (uint8_t *to, const Packet8uc &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< int16_t, Packet4s > (int16_t *to, const Packet4s &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< uint16_t, Packet4us > (uint16_t *to, const Packet4us &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< int32_t, Packet2i > (int32_t *to, const Packet2i &from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< uint32_t, Packet2ui > (uint32_t *to, const Packet2ui &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE float pfirst< Packet2f > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE int8_t pfirst< Packet4c > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE int8_t pfirst< Packet8c > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t pfirst< Packet4uc > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t pfirst< Packet8uc > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE int16_t pfirst< Packet4s > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE uint16_t pfirst< Packet4us > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE int32_t pfirst< Packet2i > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t pfirst< Packet2ui > (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f preverse (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4c preverse (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c preverse (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4uc preverse (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc preverse (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s preverse (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us preverse (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i preverse (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui preverse (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pabs (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4c pabs< Packet4c > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c pabs (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pabs (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pabs (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pabs (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us pabs (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pabs (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pabs (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f psignbit (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pfrexp< Packet2f > (const Packet2f &a, Packet2f &exponent)
 
template<>
EIGEN_STRONG_INLINE Packet2f pldexp< Packet2f > (const Packet2f &a, const Packet2f &exponent)
 
template<>
EIGEN_STRONG_INLINE float predux< Packet2f > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE int8_t predux< Packet4c > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE int8_t predux< Packet8c > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t predux< Packet4uc > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t predux< Packet8uc > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE int16_t predux< Packet4s > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE uint16_t predux< Packet4us > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE int32_t predux< Packet2i > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t predux< Packet2ui > (const Packet2ui &a)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4c predux_half_dowto4 (const Packet8c &a)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8c predux_half_dowto4 (const Packet16c &a)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4uc predux_half_dowto4 (const Packet8uc &a)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8uc predux_half_dowto4 (const Packet16uc &a)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4s predux_half_dowto4 (const Packet8s &a)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4us predux_half_dowto4 (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE float predux_mul< Packet2f > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE int8_t predux_mul< Packet4c > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE int8_t predux_mul< Packet8c > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t predux_mul< Packet4uc > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t predux_mul< Packet8uc > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE int16_t predux_mul< Packet4s > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE uint16_t predux_mul< Packet4us > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE int32_t predux_mul< Packet2i > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t predux_mul< Packet2ui > (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE float predux_min< Packet2f > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE int8_t predux_min< Packet4c > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE int8_t predux_min< Packet8c > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t predux_min< Packet4uc > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t predux_min< Packet8uc > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE int16_t predux_min< Packet4s > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE uint16_t predux_min< Packet4us > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE int32_t predux_min< Packet2i > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t predux_min< Packet2ui > (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE float predux_max< Packet2f > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE int8_t predux_max< Packet4c > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE int8_t predux_max< Packet8c > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t predux_max< Packet4uc > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE uint8_t predux_max< Packet8uc > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE int16_t predux_max< Packet4s > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE uint16_t predux_max< Packet4us > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE int32_t predux_max< Packet2i > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE uint32_t predux_max< Packet2ui > (const Packet2ui &a)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet2f, 2 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet4c, 4 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet8c, 8 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet8c, 4 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet4uc, 4 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet8uc, 8 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet8uc, 4 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet4s, 4 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet4us, 4 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet2i, 2 > &kernel)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet2ui, 2 > &kernel)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2f pselect (const Packet2f &mask, const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8c pselect (const Packet8c &mask, const Packet8c &a, const Packet8c &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8uc pselect (const Packet8uc &mask, const Packet8uc &a, const Packet8uc &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4s pselect (const Packet4s &mask, const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4us pselect (const Packet4us &mask, const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2i pselect (const Packet2i &mask, const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2ui pselect (const Packet2ui &mask, const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc psqrt (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc psqrt (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us psqrt (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui psqrt (const Packet2ui &a)
 
EIGEN_STRONG_INLINE Packet4f prsqrt_float_unsafe (const Packet4f &a)
 
EIGEN_STRONG_INLINE Packet2f prsqrt_float_unsafe (const Packet2f &a)
 
template<typename Packet >
Packet prsqrt_float_common (const Packet &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f prsqrt (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f preciprocal< Packet2f > (const Packet2f &a)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet psqrt_float_common (const Packet &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f psqrt (const Packet2f &a)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet pdiv_float_common (const Packet &a, const Packet &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pdiv< Packet2f > (const Packet2f &a, const Packet2f &b)
 
EIGEN_STRONG_INLINE Packet4bf F32ToBf16 (const Packet4f &p)
 
EIGEN_STRONG_INLINE Packet4f Bf16ToF32 (const Packet4bf &p)
 
EIGEN_STRONG_INLINE Packet4bf F32MaskToBf16Mask (const Packet4f &p)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pset1< Packet4bf > (const bfloat16 &from)
 
template<>
EIGEN_STRONG_INLINE bfloat16 pfirst< Packet4bf > (const Packet4bf &from)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pload< Packet4bf > (const bfloat16 *from)
 
template<>
EIGEN_STRONG_INLINE Packet4bf ploadu< Packet4bf > (const bfloat16 *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< bfloat16 > (bfloat16 *to, const Packet4bf &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< bfloat16 > (bfloat16 *to, const Packet4bf &from)
 
template<>
EIGEN_STRONG_INLINE Packet4bf ploaddup< Packet4bf > (const bfloat16 *from)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pabs (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pmin< PropagateNumbers, Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pmin< PropagateNaN, Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pmin< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pmax< PropagateNumbers, Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pmax< PropagateNaN, Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pmax< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf plset< Packet4bf > (const bfloat16 &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf por (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pxor (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pand (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pandnot (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4bf pselect (const Packet4bf &mask, const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf print< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pfloor< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pceil< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pround< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf ptrunc< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pconj (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf padd< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf psub< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pmul< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pdiv< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pgather< bfloat16, Packet4bf > (const bfloat16 *from, Index stride)
 
template<>
EIGEN_STRONG_INLINE void pscatter< bfloat16, Packet4bf > (bfloat16 *to, const Packet4bf &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux_max< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux_min< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE bfloat16 predux_mul< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet4bf preverse< Packet4bf > (const Packet4bf &a)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet4bf, 4 > &kernel)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pabsdiff< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pcmp_eq< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pcmp_lt< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pcmp_lt_or_nan< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pcmp_le< Packet4bf > (const Packet4bf &a, const Packet4bf &b)
 
template<>
EIGEN_STRONG_INLINE Packet4bf pnegate< Packet4bf > (const Packet4bf &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c preinterpret< Packet8c, Packet16c > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4c preinterpret< Packet4c, Packet8c > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4c preinterpret< Packet4c, Packet16c > (const Packet16c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc preinterpret< Packet8uc, Packet16uc > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4uc preinterpret< Packet4uc, Packet8uc > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4uc preinterpret< Packet4uc, Packet16uc > (const Packet16uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s preinterpret< Packet4s, Packet8s > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us preinterpret< Packet4us, Packet8us > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i preinterpret< Packet2i, Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui preinterpret< Packet2ui, Packet4ui > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f preinterpret< Packet2f, Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f preinterpret< Packet2f, Packet2i > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f preinterpret< Packet2f, Packet2ui > (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet4c preinterpret< Packet4c, Packet4uc > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c preinterpret< Packet8c, Packet8uc > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4uc preinterpret< Packet4uc, Packet4c > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc preinterpret< Packet8uc, Packet8c > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s preinterpret< Packet4s, Packet4us > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us preinterpret< Packet4us, Packet4s > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i preinterpret< Packet2i, Packet2f > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i preinterpret< Packet2i, Packet2ui > (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui preinterpret< Packet2ui, Packet2f > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui preinterpret< Packet2ui, Packet2i > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l preinterpret< Packet2l, Packet2ul > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet2f, Packet2l > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet2f, Packet2ul > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcast< Packet2f, Packet2i > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcast< Packet2f, Packet2ui > (const Packet2f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet4f, Packet4s > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet2f, Packet4s > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet4f, Packet4us > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet2f, Packet4us > (const Packet2f &a, const Packet2f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet4f, Packet8c > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet2f, Packet8c > (const Packet2f &a, const Packet2f &b, const Packet2f &c, const Packet2f &d)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcast< Packet4f, Packet4c > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet4f, Packet8uc > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet2f, Packet8uc > (const Packet2f &a, const Packet2f &b, const Packet2f &c, const Packet2f &d)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcast< Packet4f, Packet4uc > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet4c, Packet4f > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcast< Packet8c, Packet2f > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet8c, Packet4i > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet4c, Packet4i > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcast< Packet8c, Packet2i > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcast< Packet8c, Packet2ui > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet4c, Packet4ui > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet8c, Packet8s > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet8c, Packet4s > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet4c, Packet4s > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet8c, Packet8us > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet8c, Packet4us > (const Packet8c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet4c, Packet4us > (const Packet4c &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet4uc, Packet4f > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcast< Packet8uc, Packet2f > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet8uc, Packet4ui > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcast< Packet8uc, Packet2ui > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet4uc, Packet4ui > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcast< Packet8uc, Packet2i > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet4uc, Packet4i > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8us pcast< Packet8uc, Packet8us > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet4uc, Packet4us > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet8s pcast< Packet8uc, Packet8s > (const Packet8uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet4uc, Packet4s > (const Packet4uc &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet4s, Packet4f > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcast< Packet4s, Packet2f > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet4s, Packet4i > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcast< Packet4s, Packet2i > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet4s, Packet4ui > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcast< Packet4s, Packet2ui > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet8s, Packet8c > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet4s, Packet8c > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcast< Packet4s, Packet4c > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet8s, Packet8uc > (const Packet8s &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet4s, Packet8uc > (const Packet4s &a, const Packet4s &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcast< Packet4s, Packet4uc > (const Packet4s &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet4us, Packet4f > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcast< Packet4us, Packet2f > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcast< Packet4us, Packet4ui > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcast< Packet4us, Packet2ui > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcast< Packet4us, Packet4i > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcast< Packet4us, Packet2i > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet8us, Packet8uc > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet4us, Packet8uc > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcast< Packet4us, Packet4uc > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet8us, Packet8c > (const Packet8us &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet4us, Packet8c > (const Packet4us &a, const Packet4us &b)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcast< Packet4us, Packet4c > (const Packet4us &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcast< Packet2i, Packet2f > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet2i, Packet2l > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet2i, Packet2ul > (const Packet2i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet4i, Packet4s > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet2i, Packet4s > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet4i, Packet4us > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet2i, Packet4us > (const Packet2i &a, const Packet2i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet4i, Packet8c > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet2i, Packet8c > (const Packet2i &a, const Packet2i &b, const Packet2i &c, const Packet2i &d)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcast< Packet4i, Packet4c > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet4i, Packet8uc > (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet2i, Packet8uc > (const Packet2i &a, const Packet2i &b, const Packet2i &c, const Packet2i &d)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcast< Packet4i, Packet4uc > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcast< Packet2ui, Packet2f > (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ul pcast< Packet2ui, Packet2ul > (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcast< Packet2ui, Packet2l > (const Packet2ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet2ui, Packet4us > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet4ui, Packet4us > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet2ui, Packet4s > (const Packet2ui &a, const Packet2ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet4ui, Packet4s > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet4ui, Packet8uc > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet2ui, Packet8uc > (const Packet2ui &a, const Packet2ui &b, const Packet2ui &c, const Packet2ui &d)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcast< Packet4ui, Packet4uc > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet4ui, Packet8c > (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet2ui, Packet8c > (const Packet2ui &a, const Packet2ui &b, const Packet2ui &c, const Packet2ui &d)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcast< Packet4ui, Packet4c > (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcast< Packet2l, Packet2f > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcast< Packet2l, Packet2i > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcast< Packet2l, Packet2ui > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet2l, Packet4s > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet2l, Packet4us > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet2l, Packet8c > (const Packet2l &a, const Packet2l &b, const Packet2l &c, const Packet2l &d)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcast< Packet2l, Packet4c > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet2l, Packet8uc > (const Packet2l &a, const Packet2l &b, const Packet2l &c, const Packet2l &d)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcast< Packet2l, Packet4uc > (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet2f pcast< Packet2ul, Packet2f > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet2ui pcast< Packet2ul, Packet2ui > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet2i pcast< Packet2ul, Packet2i > (const Packet2ul &a)
 
template<>
EIGEN_STRONG_INLINE Packet4us pcast< Packet2ul, Packet4us > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet4s pcast< Packet2ul, Packet4s > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet8uc pcast< Packet2ul, Packet8uc > (const Packet2ul &a, const Packet2ul &b, const Packet2ul &c, const Packet2ul &d)
 
template<>
EIGEN_STRONG_INLINE Packet4uc pcast< Packet2ul, Packet4uc > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet8c pcast< Packet2ul, Packet8c > (const Packet2ul &a, const Packet2ul &b, const Packet2ul &c, const Packet2ul &d)
 
template<>
EIGEN_STRONG_INLINE Packet4c pcast< Packet2ul, Packet4c > (const Packet2ul &a, const Packet2ul &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pmul (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet1cd pmul (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet2d psqrt< Packet2d > (const Packet2d &x)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet16b psqrt< Packet16b > (const Packet16b &x)
 
EIGEN_ALWAYS_INLINE int64_t _mm_extract_epi64_0 (const __m128i &a)
 
EIGEN_ALWAYS_INLINE int64_t _mm_extract_epi64_1 (const __m128i &a)
 
template<>
EIGEN_STRONG_INLINE Packet16b pset1< Packet16b > (const bool &from)
 
template<>
EIGEN_STRONG_INLINE Packet4f peven_mask (const Packet4f &)
 
template<>
EIGEN_STRONG_INLINE Packet2l peven_mask (const Packet2l &)
 
template<>
EIGEN_STRONG_INLINE Packet4i peven_mask (const Packet4i &)
 
template<>
EIGEN_STRONG_INLINE Packet4ui peven_mask (const Packet4ui &)
 
template<>
EIGEN_STRONG_INLINE Packet2d peven_mask (const Packet2d &)
 
template<>
EIGEN_STRONG_INLINE Packet2l pzero (const Packet2l &)
 
template<>
EIGEN_STRONG_INLINE Packet4i pzero (const Packet4i &)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pzero (const Packet4ui &)
 
template<>
EIGEN_STRONG_INLINE Packet16b padd< Packet16b > (const Packet16b &a, const Packet16b &b)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet padds (const Packet &a, const Packet &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f padds< Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d padds< Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet16b psub< Packet16b > (const Packet16b &a, const Packet16b &b)
 
template<>
EIGEN_STRONG_INLINE Packet16b pmul< Packet16b > (const Packet16b &a, const Packet16b &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l ptrue< Packet2l > (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet4i ptrue< Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet16b ptrue< Packet16b > (const Packet16b &)
 
template<>
EIGEN_STRONG_INLINE Packet4f ptrue< Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d ptrue< Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet16b pand< Packet16b > (const Packet16b &a, const Packet16b &b)
 
template<>
EIGEN_STRONG_INLINE Packet16b por< Packet16b > (const Packet16b &a, const Packet16b &b)
 
template<>
EIGEN_STRONG_INLINE Packet16b pxor< Packet16b > (const Packet16b &a, const Packet16b &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcmp_lt (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcmp_le (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcmp_lt (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcmp_lt_or_nan (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pcmp_eq (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i pcmp_le (const Packet4i &a, const Packet4i &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcmp_lt (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcmp_eq (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet2l pcmp_le (const Packet2l &a, const Packet2l &b)
 
template<>
EIGEN_STRONG_INLINE Packet16b pcmp_eq (const Packet16b &a, const Packet16b &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcmp_eq (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcmp_lt (const Packet4ui &a, const Packet4ui &b)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pcmp_le (const Packet4ui &a, const Packet4ui &b)
 
template<typename Packet , typename Op >
EIGEN_STRONG_INLINE Packet pminmax_propagate_numbers (const Packet &a, const Packet &b, Op op)
 
template<typename Packet , typename Op >
EIGEN_STRONG_INLINE Packet pminmax_propagate_nan (const Packet &a, const Packet &b, Op op)
 
template<>
EIGEN_STRONG_INLINE Packet4f pmin< PropagateNumbers, Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pmin< PropagateNumbers, Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4f pmax< PropagateNumbers, Packet4f > (const Packet4f &a, const Packet4f &b)
 
template<>
EIGEN_STRONG_INLINE Packet2d pmax< PropagateNumbers, Packet2d > (const Packet2d &a, const Packet2d &b)
 
template<>
EIGEN_STRONG_INLINE Packet4i psignbit (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet4ui psignbit (const Packet4ui &a)
 
template<>
EIGEN_STRONG_INLINE Packet2l psignbit (const Packet2l &a)
 
template<>
EIGEN_STRONG_INLINE Packet16b pload< Packet16b > (const bool *from)
 
template<>
EIGEN_STRONG_INLINE Packet16b ploadu< Packet16b > (const bool *from)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet ploadl (const typename unpacket_traits< Packet >::type *from)
 
template<>
EIGEN_STRONG_INLINE Packet4f ploadl< Packet4f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet2d ploadl< Packet2d > (const double *from)
 
template<typename Packet >
EIGEN_STRONG_INLINE Packet ploads (const typename unpacket_traits< Packet >::type *from)
 
template<>
EIGEN_STRONG_INLINE Packet4f ploads< Packet4f > (const float *from)
 
template<>
EIGEN_STRONG_INLINE Packet2d ploads< Packet2d > (const double *from)
 
template<>
EIGEN_STRONG_INLINE Packet16b ploaddup< Packet16b > (const bool *from)
 
template<>
EIGEN_STRONG_INLINE Packet16b ploadquad< Packet16b > (const bool *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< bool > (bool *to, const Packet16b &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< bool > (bool *to, const Packet16b &from)
 
template<typename Scalar , typename Packet >
EIGEN_STRONG_INLINE void pstorel (Scalar *to, const Packet &from)
 
template<>
EIGEN_STRONG_INLINE void pstorel (float *to, const Packet4f &from)
 
template<>
EIGEN_STRONG_INLINE void pstorel (double *to, const Packet2d &from)
 
template<typename Scalar , typename Packet >
EIGEN_STRONG_INLINE void pstores (Scalar *to, const Packet &from)
 
template<>
EIGEN_STRONG_INLINE void pstores (float *to, const Packet4f &from)
 
template<>
EIGEN_STRONG_INLINE void pstores (double *to, const Packet2d &from)
 
template<>
EIGEN_STRONG_INLINE Packet16b preverse (const Packet16b &a)
 
template<>
EIGEN_STRONG_INLINE bool pfirst< Packet16b > (const Packet16b &a)
 
template<>
EIGEN_STRONG_INLINE Packet16b pgather< bool, Packet16b > (const bool *from, Index stride)
 
template<>
EIGEN_STRONG_INLINE void pscatter< bool, Packet16b > (bool *to, const Packet16b &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE void pstore1< Packet4f > (float *to, const float &a)
 
template<>
EIGEN_STRONG_INLINE void pstore1< Packet2d > (double *to, const double &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pfrexp_generic_get_biased_exponent (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pldexp_fast< Packet2d > (const Packet2d &a, const Packet2d &exponent)
 
template<>
EIGEN_STRONG_INLINE void pbroadcast4< Packet2d > (const double *a, Packet2d &a0, Packet2d &a1, Packet2d &a2, Packet2d &a3)
 
EIGEN_STRONG_INLINE void punpackp (Packet4f *vecs)
 
template<>
EIGEN_STRONG_INLINE bool predux< Packet16b > (const Packet16b &a)
 
template<>
EIGEN_STRONG_INLINE bool predux_mul< Packet16b > (const Packet16b &a)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet2d &x)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet2l &x)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet4i &x)
 
template<>
EIGEN_STRONG_INLINE bool predux_any (const Packet4ui &x)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet16b, 4 > &kernel)
 
EIGEN_STRONG_INLINE void ptranspose (PacketBlock< Packet16b, 16 > &kernel)
 
EIGEN_STRONG_INLINE __m128i sse_blend_mask (const Selector< 2 > &ifPacket)
 
EIGEN_STRONG_INLINE __m128i sse_blend_mask (const Selector< 4 > &ifPacket)
 
template<>
EIGEN_STRONG_INLINE Packet2l pblend (const Selector< 2 > &ifPacket, const Packet2l &thenPacket, const Packet2l &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet4ui pblend (const Selector< 4 > &ifPacket, const Packet4ui &thenPacket, const Packet4ui &elsePacket)
 
template<>
EIGEN_STRONG_INLINE Packet16b pcast< Packet4f, Packet16b > (const Packet4f &a, const Packet4f &b, const Packet4f &c, const Packet4f &d)
 
template<>
EIGEN_STRONG_INLINE Packet4f pcast< Packet16b, Packet4f > (const Packet16b &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d preinterpret< Packet2d, Packet4f > (const Packet4f &a)
 
template<>
EIGEN_STRONG_INLINE Packet4f preinterpret< Packet4f, Packet2d > (const Packet2d &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf pexp< PacketXf > (const PacketXf &x)
 
template<>
EIGEN_STRONG_INLINE PacketXf plog< PacketXf > (const PacketXf &x)
 
template<>
EIGEN_STRONG_INLINE PacketXf psin< PacketXf > (const PacketXf &x)
 
template<>
EIGEN_STRONG_INLINE PacketXf pcos< PacketXf > (const PacketXf &x)
 
template<>
EIGEN_STRONG_INLINE PacketXf ptanh< PacketXf > (const PacketXf &x)
 
template<>
EIGEN_STRONG_INLINE void prefetch< numext::int32_t > (const numext::int32_t *addr)
 
template<>
EIGEN_STRONG_INLINE PacketXi pset1< PacketXi > (const numext::int32_t &from)
 
template<>
EIGEN_STRONG_INLINE PacketXi plset< PacketXi > (const numext::int32_t &a)
 
template<>
EIGEN_STRONG_INLINE PacketXi padd< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi psub< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi pnegate (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE PacketXi pconj (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE PacketXi pmul< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi pdiv< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi pmadd (const PacketXi &a, const PacketXi &b, const PacketXi &c)
 
template<>
EIGEN_STRONG_INLINE PacketXi pmin< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi pmax< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi pcmp_le< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi pcmp_lt< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi pcmp_eq< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi ptrue< PacketXi > (const PacketXi &)
 
template<>
EIGEN_STRONG_INLINE PacketXi pzero< PacketXi > (const PacketXi &)
 
template<>
EIGEN_STRONG_INLINE PacketXi pand< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi por< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi pxor< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<>
EIGEN_STRONG_INLINE PacketXi pandnot< PacketXi > (const PacketXi &a, const PacketXi &b)
 
template<int N>
EIGEN_STRONG_INLINE PacketXi parithmetic_shift_right (PacketXi a)
 
template<int N>
EIGEN_STRONG_INLINE PacketXi plogical_shift_right (PacketXi a)
 
template<int N>
EIGEN_STRONG_INLINE PacketXi plogical_shift_left (PacketXi a)
 
template<>
EIGEN_STRONG_INLINE PacketXi pload< PacketXi > (const numext::int32_t *from)
 
template<>
EIGEN_STRONG_INLINE PacketXi ploadu< PacketXi > (const numext::int32_t *from)
 
template<>
EIGEN_STRONG_INLINE PacketXi ploaddup< PacketXi > (const numext::int32_t *from)
 
template<>
EIGEN_STRONG_INLINE PacketXi ploadquad< PacketXi > (const numext::int32_t *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< numext::int32_t > (numext::int32_t *to, const PacketXi &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< numext::int32_t > (numext::int32_t *to, const PacketXi &from)
 
template<>
EIGEN_DEVICE_FUNC PacketXi pgather< numext::int32_t, PacketXi > (const numext::int32_t *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< numext::int32_t, PacketXi > (numext::int32_t *to, const PacketXi &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE numext::int32_t pfirst< PacketXi > (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE PacketXi preverse (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE PacketXi pabs (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE numext::int32_t predux< PacketXi > (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE numext::int32_t predux_mul< PacketXi > (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE numext::int32_t predux_min< PacketXi > (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE numext::int32_t predux_max< PacketXi > (const PacketXi &a)
 
template<int N>
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< PacketXi, N > &kernel)
 
template<>
EIGEN_STRONG_INLINE PacketXf pset1< PacketXf > (const float &from)
 
template<>
EIGEN_STRONG_INLINE PacketXf pset1frombits< PacketXf > (numext::uint32_t from)
 
template<>
EIGEN_STRONG_INLINE PacketXf plset< PacketXf > (const float &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf padd< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf psub< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pnegate (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf pconj (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf pmul< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pdiv< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pmadd (const PacketXf &a, const PacketXf &b, const PacketXf &c)
 
template<>
EIGEN_STRONG_INLINE PacketXf pmin< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pmin< PropagateNaN, PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pmin< PropagateNumbers, PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pmax< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pmax< PropagateNaN, PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pmax< PropagateNumbers, PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pcmp_le< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pcmp_lt< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pcmp_eq< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pcmp_lt_or_nan< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pfloor< PacketXf > (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf ptrue< PacketXf > (const PacketXf &)
 
template<>
EIGEN_STRONG_INLINE PacketXf pand< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf por< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pxor< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pandnot< PacketXf > (const PacketXf &a, const PacketXf &b)
 
template<>
EIGEN_STRONG_INLINE PacketXf pload< PacketXf > (const float *from)
 
template<>
EIGEN_STRONG_INLINE PacketXf ploadu< PacketXf > (const float *from)
 
template<>
EIGEN_STRONG_INLINE PacketXf ploaddup< PacketXf > (const float *from)
 
template<>
EIGEN_STRONG_INLINE PacketXf ploadquad< PacketXf > (const float *from)
 
template<>
EIGEN_STRONG_INLINE void pstore< float > (float *to, const PacketXf &from)
 
template<>
EIGEN_STRONG_INLINE void pstoreu< float > (float *to, const PacketXf &from)
 
template<>
EIGEN_DEVICE_FUNC PacketXf pgather< float, PacketXf > (const float *from, Index stride)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< float, PacketXf > (float *to, const PacketXf &from, Index stride)
 
template<>
EIGEN_STRONG_INLINE float pfirst< PacketXf > (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf preverse (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf pabs (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf pfrexp< PacketXf > (const PacketXf &a, PacketXf &exponent)
 
template<>
EIGEN_STRONG_INLINE float predux< PacketXf > (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE float predux_mul< PacketXf > (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE float predux_min< PacketXf > (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE float predux_max< PacketXf > (const PacketXf &a)
 
template<int N>
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< PacketXf, N > &kernel)
 
template<>
EIGEN_STRONG_INLINE PacketXf pldexp< PacketXf > (const PacketXf &a, const PacketXf &exponent)
 
template<>
EIGEN_STRONG_INLINE PacketXf psqrt< PacketXf > (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf pcast< PacketXi, PacketXf > (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE PacketXi pcast< PacketXf, PacketXi > (const PacketXf &a)
 
template<>
EIGEN_STRONG_INLINE PacketXf preinterpret< PacketXf, PacketXi > (const PacketXi &a)
 
template<>
EIGEN_STRONG_INLINE PacketXi preinterpret< PacketXi, PacketXf > (const PacketXf &a)
 
template<>
EIGEN_DEVICE_FUNC Packet1cd pgather< std::complex< double >, Packet1cd > (const std::complex< double > *from, Index stride EIGEN_UNUSED)
 
template<>
EIGEN_DEVICE_FUNC void pscatter< std::complex< double >, Packet1cd > (std::complex< double > *to, const Packet1cd &from, Index stride EIGEN_UNUSED)
 
template<>
EIGEN_STRONG_INLINE Packet1cd plog< Packet1cd > (const Packet1cd &a, const Packet1cd &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf plog< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
template<>
EIGEN_STRONG_INLINE Packet2cf pexp< Packet2cf > (const Packet2cf &a, const Packet2cf &b)
 
static EIGEN_DECLARE_CONST_Packet4f (1, 1.0f)
 
static EIGEN_DECLARE_CONST_Packet4f (half, 0.5f)
 
static EIGEN_DECLARE_CONST_Packet4i (0x7f, 0x7f)
 
static EIGEN_DECLARE_CONST_Packet4i (23, 23)
 
static EIGEN_DECLARE_CONST_Packet4f_FROM_INT (inv_mant_mask, ~0x7f800000)
 
static EIGEN_DECLARE_CONST_Packet4f_FROM_INT (min_norm_pos, 0x00800000)
 
static EIGEN_DECLARE_CONST_Packet4f_FROM_INT (minus_inf, 0xff800000)
 
static EIGEN_DECLARE_CONST_Packet4f_FROM_INT (minus_nan, 0xffffffff)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_SQRTHF, 0.707106781186547524f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_p0, 7.0376836292E-2f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_p1, -1.1514610310E-1f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_p2, 1.1676998740E-1f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_p3, -1.2420140846E-1f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_p4,+1.4249322787E-1f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_p5, -1.6668057665E-1f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_p6,+2.0000714765E-1f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_p7, -2.4999993993E-1f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_p8,+3.3333331174E-1f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_q1, -2.12194440e-4f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_log_q2, 0.693359375f)
 
static EIGEN_DECLARE_CONST_Packet4f (exp_hi, 88.3762626647950f)
 
static EIGEN_DECLARE_CONST_Packet4f (exp_lo, -88.3762626647949f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_LOG2EF, 1.44269504088896341f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_exp_C1, 0.693359375f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_exp_C2, -2.12194440e-4f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_exp_p0, 1.9875691500E-4f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_exp_p1, 1.3981999507E-3f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_exp_p2, 8.3334519073E-3f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_exp_p3, 4.1665795894E-2f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_exp_p4, 1.6666665459E-1f)
 
static EIGEN_DECLARE_CONST_Packet4f (cephes_exp_p5, 5.0000001201E-1f)
 
static EIGEN_DECLARE_CONST_Packet2d (1, 1.0)
 
static EIGEN_DECLARE_CONST_Packet2d (2, 2.0)
 
static EIGEN_DECLARE_CONST_Packet2d (half, 0.5)
 
static EIGEN_DECLARE_CONST_Packet2d (exp_hi, 709.437)
 
static EIGEN_DECLARE_CONST_Packet2d (exp_lo, -709.436139303)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_LOG2EF, 1.4426950408889634073599)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_exp_p0, 1.26177193074810590878e-4)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_exp_p1, 3.02994407707441961300e-2)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_exp_p2, 9.99999999999999999910e-1)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_exp_q0, 3.00198505138664455042e-6)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_exp_q1, 2.52448340349684104192e-3)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_exp_q2, 2.27265548208155028766e-1)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_exp_q3, 2.00000000000000000009e0)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_exp_C1, 0.693145751953125)
 
static EIGEN_DECLARE_CONST_Packet2d (cephes_exp_C2, 1.42860682030941723212e-6)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet2d prsqrt< Packet2d > (const Packet2d &x)
 
template<>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet4f prsqrt< Packet4f > (const Packet4f &x)
 
static EIGEN_DECLARE_CONST_FAST_Packet4i (ZERO, 0)
 
static EIGEN_DECLARE_CONST_FAST_Packet4i (ONE, 1)
 
static EIGEN_DECLARE_CONST_FAST_Packet2d (ZERO, 0)
 
static EIGEN_DECLARE_CONST_FAST_Packet2l (ZERO, 0)
 
static EIGEN_DECLARE_CONST_FAST_Packet2l (ONE, 1)
 
static EIGEN_DECLARE_CONST_FAST_Packet4f (ZERO, 0)
 
static EIGEN_DECLARE_CONST_FAST_Packet4i (MINUS1, -1)
 
template<>
EIGEN_STRONG_INLINE Packet4i pabs< Packet4i > (const Packet4i &a)
 
template<>
EIGEN_STRONG_INLINE Packet2d pabs< Packet2d > (const Packet2d &a)
 
template<int element>
EIGEN_STRONG_INLINE Packet4f vec_splat_packet4f (const Packet4f &from)
 
template<>
EIGEN_STRONG_INLINE Packet4f pabs< Packet4f > (const Packet4f &a)
 
template<typename DstXprType , typename SrcXprType , typename Functor >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize_if_allowed (DstXprType &dst, const SrcXprType &src, const Functor &)
 
template<typename DstXprType , typename SrcXprType , typename T1 , typename T2 >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize_if_allowed (DstXprType &dst, const SrcXprType &src, const internal::assign_op< T1, T2 > &)
 
template<typename DstXprType , typename SrcXprType , typename Functor >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_dense_assignment_loop (DstXprType &dst, const SrcXprType &src, const Functor &func)
 
template<typename DstXprType , typename SrcXprType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_dense_assignment_loop (DstXprType &dst, const SrcXprType &src)
 
template<typename Dst , typename Src >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_assignment (Dst &dst, const Src &src)
 
template<typename Dst , typename Src >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_assignment (const Dst &dst, const Src &src)
 
template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment (Dst &dst, const Src &src, const Func &func, std::enable_if_t< evaluator_assume_aliasing< Src >::value, void * >=0)
 
template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_assignment (Dst &dst, const Src &src, const Func &func, std::enable_if_t<!evaluator_assume_aliasing< Src >::value, void * >=0)
 
template<typename Dst , template< typename > class StorageBase, typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment (NoAlias< Dst, StorageBase > &dst, const Src &src, const Func &func)
 
template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias (Dst &dst, const Src &src, const Func &func)
 
template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_restricted_packet_assignment_no_alias (Dst &dst, const Src &src, const Func &func)
 
template<typename Dst , typename Src >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias (Dst &dst, const Src &src)
 
template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias_no_transpose (Dst &dst, const Src &src, const Func &func)
 
template<typename Dst , typename Src >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias_no_transpose (Dst &dst, const Src &src)
 
template<typename Dst , typename Src >
EIGEN_DEVICE_FUNC void check_for_aliasing (const Dst &dst, const Src &src)
 
template<typename Decomposition >
Decomposition::RealScalar rcond_invmatrix_L1_norm_estimate (const Decomposition &dec)
 
template<typename Decomposition >
Decomposition::RealScalar rcond_estimate_helper (typename Decomposition::RealScalar matrix_norm, const Decomposition &dec)
 Reciprocal condition number estimator. More...
 
template<int Alignment, typename Derived >
static Index first_aligned (const DenseBase< Derived > &m)
 
template<typename Derived >
static Index first_default_aligned (const DenseBase< Derived > &m)
 
template<typename T , int Size, int Options, int Alignment>
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE void swap_plain_array (plain_array< T, Size, Options, Alignment > &a, plain_array< T, Size, Options, Alignment > &b, Index a_size, Index b_size)
 
template<typename Dst , typename Src , typename Func , typename Device >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias (DeviceWrapper< Dst, Device > dst, const Src &src, const Func &func)
 
template<typename DstXprType , typename SrcXprType , typename Functor , typename Device >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_dense_assignment_loop (DstXprType &dst, const SrcXprType &src, const Functor &func, Device &device)
 
template<typename T >
constexpr int exponent_digits ()
 
template<typename Target , typename Packet >
EIGEN_DEVICE_FUNC Target preinterpret (const Packet &a)
 
template<typename SrcPacket , typename TgtPacket >
EIGEN_DEVICE_FUNC TgtPacket pcast (const SrcPacket &a)
 
template<typename SrcPacket , typename TgtPacket >
EIGEN_DEVICE_FUNC TgtPacket pcast (const SrcPacket &a, const SrcPacket &b)
 
template<typename SrcPacket , typename TgtPacket >
EIGEN_DEVICE_FUNC TgtPacket pcast (const SrcPacket &a, const SrcPacket &b, const SrcPacket &c, const SrcPacket &d)
 
template<typename SrcPacket , typename TgtPacket >
EIGEN_DEVICE_FUNC TgtPacket pcast (const SrcPacket &a, const SrcPacket &b, const SrcPacket &c, const SrcPacket &d, const SrcPacket &e, const SrcPacket &f, const SrcPacket &g, const SrcPacket &h)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet padd (const Packet &a, const Packet &b)
 
template<>
EIGEN_DEVICE_FUNC bool padd (const bool &a, const bool &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC std::enable_if_t< unpacket_traits< Packet >::masked_fpops_available, Packetpadd (const Packet &a, const Packet &b, typename unpacket_traits< Packet >::mask_t umask)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet psub (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pnegate (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pconj (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pmul (const Packet &a, const Packet &b)
 
template<>
EIGEN_DEVICE_FUNC bool pmul (const bool &a, const bool &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pdiv (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet ptrue (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pzero (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pcmp_le (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pcmp_lt (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pcmp_eq (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pcmp_lt_or_nan (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pand (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet por (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pxor (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pnot (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pandnot (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pselect (const Packet &mask, const Packet &a, const Packet &b)
 
template<>
EIGEN_DEVICE_FUNC bool pselect< bool > (const bool &cond, const bool &a, const bool &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pmin (const Packet &a, const Packet &b)
 
template<int NaNPropagation, typename Packet >
EIGEN_DEVICE_FUNC Packet pmin (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pmax (const Packet &a, const Packet &b)
 
template<int NaNPropagation, typename Packet >
EIGEN_DEVICE_FUNC Packet pmax (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pabs (const Packet &a)
 
template<>
EIGEN_DEVICE_FUNC unsigned int pabs (const unsigned int &a)
 
template<>
EIGEN_DEVICE_FUNC unsigned long pabs (const unsigned long &a)
 
template<>
EIGEN_DEVICE_FUNC unsigned long long pabs (const unsigned long long &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet paddsub (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet parg (const Packet &a)
 
template<int N, typename T >
EIGEN_DEVICE_FUNC T parithmetic_shift_right (const T &a)
 
template<int N, typename T >
EIGEN_DEVICE_FUNC T plogical_shift_right (const T &a)
 
template<int N, typename T >
EIGEN_DEVICE_FUNC T plogical_shift_left (const T &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pfrexp (const Packet &a, Packet &exponent)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pldexp (const Packet &a, const Packet &exponent)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pabsdiff (const Packet &a, const Packet &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pload (const typename unpacket_traits< Packet >::type *from)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pload_partial (const typename unpacket_traits< Packet >::type *from, const Index n, const Index offset=0)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet ploadu (const typename unpacket_traits< Packet >::type *from)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet ploadu_partial (const typename unpacket_traits< Packet >::type *from, const Index n, const Index offset=0)
 
template<typename Packet >
EIGEN_DEVICE_FUNC std::enable_if_t< unpacket_traits< Packet >::masked_load_available, Packetploadu (const typename unpacket_traits< Packet >::type *from, typename unpacket_traits< Packet >::mask_t umask)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pset1 (const typename unpacket_traits< Packet >::type &a)
 
template<typename Packet , typename BitsType >
EIGEN_DEVICE_FUNC Packet pset1frombits (BitsType a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pload1 (const typename unpacket_traits< Packet >::type *a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet ploaddup (const typename unpacket_traits< Packet >::type *from)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet ploadquad (const typename unpacket_traits< Packet >::type *from)
 
template<typename Packet >
EIGEN_DEVICE_FUNC void pbroadcast4 (const typename unpacket_traits< Packet >::type *a, Packet &a0, Packet &a1, Packet &a2, Packet &a3)
 
template<typename Packet >
EIGEN_DEVICE_FUNC void pbroadcast2 (const typename unpacket_traits< Packet >::type *a, Packet &a0, Packet &a1)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet plset (const typename unpacket_traits< Packet >::type &a)
 Returns a packet with coefficients (a,a+1,...,a+packet_size-1). More...
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet peven_mask (const Packet &)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void pstore (Scalar *to, const Packet &from)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void pstore_partial (Scalar *to, const Packet &from, const Index n, const Index offset=0)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void pstoreu (Scalar *to, const Packet &from)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void pstoreu_partial (Scalar *to, const Packet &from, const Index n, const Index offset=0)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC std::enable_if_t< unpacket_traits< Packet >::masked_store_available, void > pstoreu (Scalar *to, const Packet &from, typename unpacket_traits< Packet >::mask_t umask)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC Packet pgather (const Scalar *from, Index)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC Packet pgather_partial (const Scalar *from, Index stride, const Index n)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void pscatter (Scalar *to, const Packet &from, Index)
 
template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void pscatter_partial (Scalar *to, const Packet &from, Index stride, const Index n)
 
template<typename Scalar >
EIGEN_DEVICE_FUNC void prefetch (const Scalar *addr)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet preverse (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pcplxflip (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pisnan (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pisinf (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptan (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pasin (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pacos (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psinh (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcosh (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patan (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptanh (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patanh (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp2 (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexpm1 (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog1p (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog10 (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2 (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psqrt (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcbrt (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pround (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pfloor (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet print (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pceil (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet ptrunc (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet psign (const Packet &a)
 
template<>
EIGEN_DEVICE_FUNC bool psign (const bool &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type pfirst (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC std::conditional_t<(unpacket_traits< Packet >::size % 8)==0, typename unpacket_traits< Packet >::half, Packetpredux_half_dowto4 (const Packet &a)
 
template<typename Packet , typename Op >
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_helper (const Packet &a, Op op)
 
template<typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_mul (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_min (const Packet &a)
 
template<int NaNPropagation, typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_min (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_max (const Packet &a)
 
template<int NaNPropagation, typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_max (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC bool predux_any (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pmadd (const Packet &a, const Packet &b, const Packet &c)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pmsub (const Packet &a, const Packet &b, const Packet &c)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pnmadd (const Packet &a, const Packet &b, const Packet &c)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pnmsub (const Packet &a, const Packet &b, const Packet &c)
 
template<typename Packet >
void pstore1 (typename unpacket_traits< Packet >::type *to, const typename unpacket_traits< Packet >::type &a)
 
template<typename Packet , int Alignment>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet ploadt (const typename unpacket_traits< Packet >::type *from)
 
template<typename Packet , int Alignment>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet ploadt_partial (const typename unpacket_traits< Packet >::type *from, const Index n, const Index offset=0)
 
template<typename Scalar , typename Packet , int Alignment>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pstoret (Scalar *to, const Packet &from)
 
template<typename Scalar , typename Packet , int Alignment>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pstoret_partial (Scalar *to, const Packet &from, const Index n, const Index offset=0)
 
template<typename Packet , int LoadMode>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet ploadt_ro (const typename unpacket_traits< Packet >::type *from)
 
template<>
std::complex< float > pmul (const std::complex< float > &a, const std::complex< float > &b)
 
template<>
std::complex< doublepmul (const std::complex< double > &a, const std::complex< double > &b)
 
template<typename Packet >
EIGEN_DEVICE_FUNC void ptranspose (PacketBlock< Packet, 1 > &)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet pblend (const Selector< unpacket_traits< Packet >::size > &ifPacket, const Packet &thenPacket, const Packet &elsePacket)
 
template<typename Packet >
EIGEN_DEVICE_FUNC Packet preciprocal (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet prsqrt (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC constexpr EIGEN_ALWAYS_INLINE Packet psignbit (const Packet &a)
 
template<typename Packet , std::enable_if_t< is_scalar< Packet >::value, int > = 0>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet patan2 (const Packet &y, const Packet &x)
 
template<typename Packet , std::enable_if_t< is_scalar< Packet >::value, int > = 0>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet pcarg (const Packet &a)
 
template<typename Derived >
std::ostream & print_matrix (std::ostream &s, const Derived &_m, const IOFormat &fmt)
 
template<typename T >
EIGEN_DEVICE_FUNC std::complex< Tcomplex_sqrt (const std::complex< T > &a_x)
 
template<typename T >
EIGEN_DEVICE_FUNC std::complex< Tcomplex_rsqrt (const std::complex< T > &a_x)
 
template<typename OldType , typename NewType >
EIGEN_DEVICE_FUNC NewType cast (const OldType &x)
 
template<typename T >
EIGEN_DEVICE_FUNC std::complex< Tcomplex_log (const std::complex< T > &z)
 
template<typename BitsType >
EIGEN_DEVICE_FUNC int clz (BitsType bits)
 
template<typename BitsType >
EIGEN_DEVICE_FUNC int ctz (BitsType bits)
 
template<typename BitsType >
int log2_ceil (const BitsType &x)
 
template<typename BitsType >
int log2_floor (const BitsType &x)
 
template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<!(std::numeric_limits< T >::has_infinity||std::numeric_limits< T >::has_quiet_NaN||std::numeric_limits< T >::has_signaling_NaN), boolisfinite_impl (const T &)
 
template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<(std::numeric_limits< T >::has_infinity||std::numeric_limits< T >::has_quiet_NaN||std::numeric_limits< T >::has_signaling_NaN) &&(!NumTraits< T >::IsComplex), boolisfinite_impl (const T &x)
 
template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<!std::numeric_limits< T >::has_infinity, boolisinf_impl (const T &)
 
template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<(std::numeric_limits< T >::has_infinity &&!NumTraits< T >::IsComplex), boolisinf_impl (const T &x)
 
template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<!(std::numeric_limits< T >::has_quiet_NaN||std::numeric_limits< T >::has_signaling_NaN), boolisnan_impl (const T &)
 
template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<(std::numeric_limits< T >::has_quiet_NaN||std::numeric_limits< T >::has_signaling_NaN) &&(!NumTraits< T >::IsComplex), boolisnan_impl (const T &x)
 
template<typename T >
EIGEN_DEVICE_FUNC bool isfinite_impl (const std::complex< T > &x)
 
template<typename T >
EIGEN_DEVICE_FUNC bool isnan_impl (const std::complex< T > &x)
 
template<typename T >
EIGEN_DEVICE_FUNC bool isinf_impl (const std::complex< T > &x)
 
template<typename Scalar , typename OtherScalar >
EIGEN_DEVICE_FUNC bool isMuchSmallerThan (const Scalar &x, const OtherScalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
 
template<typename Scalar >
EIGEN_DEVICE_FUNC bool isApprox (const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
 
template<typename Scalar >
EIGEN_DEVICE_FUNC bool isApproxOrLessThan (const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
 
template<typename RealScalar >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE RealScalar positive_real_hypot (const RealScalar &x, const RealScalar &y)
 
template<typename PacketType , typename Func >
EIGEN_DEVICE_FUNC PacketType packetwise_redux_empty_value (const Func &)
 
template<typename PacketType , typename Scalar >
EIGEN_DEVICE_FUNC PacketType packetwise_redux_empty_value (const scalar_product_op< Scalar, Scalar > &)
 
 EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT (assign_op, scalar_sum_op, add_assign_op)
 
 EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT (add_assign_op, scalar_sum_op, add_assign_op)
 
 EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT (sub_assign_op, scalar_sum_op, sub_assign_op)
 
 EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT (assign_op, scalar_difference_op, sub_assign_op)
 
 EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT (add_assign_op, scalar_difference_op, sub_assign_op)
 
 EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT (sub_assign_op, scalar_difference_op, add_assign_op)
 
template<typename Dst , typename Lhs , typename Rhs , typename Func >
void EIGEN_DEVICE_FUNC outer_product_selector_run (Dst &dst, const Lhs &lhs, const Rhs &rhs, const Func &func, const false_type &)
 
template<typename Dst , typename Lhs , typename Rhs , typename Func >
void EIGEN_DEVICE_FUNC outer_product_selector_run (Dst &dst, const Lhs &lhs, const Rhs &rhs, const Func &func, const true_type &)
 
std::ptrdiff_t manage_caching_sizes_helper (std::ptrdiff_t a, std::ptrdiff_t b)
 
void manage_caching_sizes (Action action, std::ptrdiff_t *l1, std::ptrdiff_t *l2, std::ptrdiff_t *l3)
 
template<typename LhsScalar , typename RhsScalar , int KcFactor, typename Index >
void evaluateProductBlockingSizesHeuristic (Index &k, Index &m, Index &n, Index num_threads=1)
 
template<typename Index >
bool useSpecificBlockingSizes (Index &k, Index &m, Index &n)
 
template<typename LhsScalar , typename RhsScalar , int KcFactor, typename Index >
void computeProductBlockingSizes (Index &k, Index &m, Index &n, Index num_threads=1)
 Computes the blocking parameters for a m x k times k x n matrix product. More...
 
template<typename LhsScalar , typename RhsScalar , typename Index >
void computeProductBlockingSizes (Index &k, Index &m, Index &n, Index num_threads=1)
 
template<typename Packet >
DoublePacket< Packetpadd (const DoublePacket< Packet > &a, const DoublePacket< Packet > &b)
 
template<typename Packet >
const DoublePacket< Packet > & predux_half_dowto4 (const DoublePacket< Packet > &a, std::enable_if_t< unpacket_traits< Packet >::size<=8 > *=0)
 
template<typename Packet >
DoublePacket< typename unpacket_traits< Packet >::halfpredux_half_dowto4 (const DoublePacket< Packet > &a, std::enable_if_t< unpacket_traits< Packet >::size==16 > *=0)
 
template<typename Scalar , typename RealPacket >
void loadQuadToDoublePacket (const Scalar *b, DoublePacket< RealPacket > &dest, std::enable_if_t< unpacket_traits< RealPacket >::size<=8 > *=0)
 
template<typename Scalar , typename RealPacket >
void loadQuadToDoublePacket (const Scalar *b, DoublePacket< RealPacket > &dest, std::enable_if_t< unpacket_traits< RealPacket >::size==16 > *=0)
 
void manage_multi_threading (Action action, int *v)
 
template<bool Condition, typename Functor , typename Index >
EIGEN_STRONG_INLINE void parallelize_gemm (const Functor &func, Index rows, Index cols, Index, bool)
 
template<typename Scalar >
 EIGEN_MATHFUNC_RETVAL (random, Scalar) random(const Scalar &x
 
template<typename Scalar >
 EIGEN_MATHFUNC_RETVAL (random, Scalar) random()
 
template<typename BitsType >
EIGEN_DEVICE_FUNC BitsType getRandomBits (int numRandomBits)
 
template<typename ExpressionType , typename Scalar >
void stable_norm_kernel (const ExpressionType &bl, Scalar &ssq, Scalar &scale, Scalar &invScale)
 
template<typename VectorType , typename RealScalar >
void stable_norm_impl_inner_step (const VectorType &vec, RealScalar &ssq, RealScalar &scale, RealScalar &invScale)
 
template<typename VectorType >
VectorType::RealScalar stable_norm_impl (const VectorType &vec, std::enable_if_t< VectorType::IsVectorAtCompileTime > *=0)
 
template<typename MatrixType >
MatrixType::RealScalar stable_norm_impl (const MatrixType &mat, std::enable_if_t<!MatrixType::IsVectorAtCompileTime > *=0)
 
template<typename Derived >
NumTraits< typename traits< Derived >::Scalar >::Real blueNorm_impl (const EigenBase< Derived > &_vec)
 
template<typename MatrixType , Index Alignment>
void BlockedInPlaceTranspose (MatrixType &m)
 
template<int Mode, bool SetOpposite, typename DstXprType , typename SrcXprType , typename Functor >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_triangular_assignment_loop (DstXprType &dst, const SrcXprType &src, const Functor &func)
 
template<int Mode, bool SetOpposite, typename DstXprType , typename SrcXprType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_triangular_assignment_loop (DstXprType &dst, const SrcXprType &src)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const T::Scalarextract_data (const T &m)
 
template<typename ResScalar , typename Lhs , typename Rhs >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors (const ResScalar &alpha, const Lhs &lhs, const Rhs &rhs)
 
template<typename ResScalar , typename Lhs , typename Rhs >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors (const Lhs &lhs, const Rhs &rhs)
 
template<std::size_t I_, class T , std::size_t N>
constexpr Tarray_get (std::array< T, N > &a)
 
template<std::size_t I_, class T , std::size_t N>
constexpr T && array_get (std::array< T, N > &&a)
 
template<std::size_t I_, class T , std::size_t N>
constexpr T const & array_get (std::array< T, N > const &a)
 
template<int SizeAtCompileTime, typename Indices >
IvcType< Indices, SizeAtCompileTime > CreateIndexSequence (size_t size, const Indices &indices)
 
template<typename T >
EIGEN_DEVICE_FUNC Index get_runtime_value (const T &x)
 
template<typename T >
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE void ignore_unused_variable (const T &)
 
EIGEN_DEVICE_FUNC bool all ()
 
template<typename T , typename... Ts>
EIGEN_DEVICE_FUNC bool all (T t, Ts... ts)
 
EIGEN_DEVICE_FUNC void check_that_malloc_is_allowed ()
 
EIGEN_DEVICE_FUNC void throw_std_bad_alloc ()
 
EIGEN_DEVICE_FUNC void * handmade_aligned_malloc (std::size_t size, std::size_t alignment=EIGEN_DEFAULT_ALIGN_BYTES)
 
EIGEN_DEVICE_FUNC void handmade_aligned_free (void *ptr)
 
EIGEN_DEVICE_FUNC void * handmade_aligned_realloc (void *ptr, std::size_t new_size, std::size_t old_size, std::size_t alignment=EIGEN_DEFAULT_ALIGN_BYTES)
 Reallocates aligned memory. Since we know that our handmade version is based on std::malloc we can use std::realloc to implement efficient reallocation. More...
 
EIGEN_DEVICE_FUNC void * aligned_malloc (std::size_t size)
 
EIGEN_DEVICE_FUNC void aligned_free (void *ptr)
 
EIGEN_DEVICE_FUNC void * aligned_realloc (void *ptr, std::size_t new_size, std::size_t old_size)
 Reallocates an aligned block of memory. More...
 
template<bool Align>
EIGEN_DEVICE_FUNC void * conditional_aligned_malloc (std::size_t size)
 
template<>
EIGEN_DEVICE_FUNC void * conditional_aligned_malloc< false > (std::size_t size)
 
template<bool Align>
EIGEN_DEVICE_FUNC void conditional_aligned_free (void *ptr)
 
template<>
EIGEN_DEVICE_FUNC void conditional_aligned_free< false > (void *ptr)
 
template<bool Align>
EIGEN_DEVICE_FUNC void * conditional_aligned_realloc (void *ptr, std::size_t new_size, std::size_t old_size)
 
template<>
EIGEN_DEVICE_FUNC void * conditional_aligned_realloc< false > (void *ptr, std::size_t new_size, std::size_t old_size)
 
template<typename T >
EIGEN_DEVICE_FUNC void destruct_elements_of_array (T *ptr, std::size_t size)
 
template<typename T >
EIGEN_DEVICE_FUNC Tdefault_construct_elements_of_array (T *ptr, std::size_t size)
 
template<typename T >
EIGEN_DEVICE_FUNC Tcopy_construct_elements_of_array (T *ptr, const T *src, std::size_t size)
 
template<typename T >
EIGEN_DEVICE_FUNC Tmove_construct_elements_of_array (T *ptr, T *src, std::size_t size)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void check_size_for_overflow (std::size_t size)
 
template<typename T >
EIGEN_DEVICE_FUNC Taligned_new (std::size_t size)
 
template<typename T , bool Align>
EIGEN_DEVICE_FUNC Tconditional_aligned_new (std::size_t size)
 
template<typename T >
EIGEN_DEVICE_FUNC void aligned_delete (T *ptr, std::size_t size)
 
template<typename T , bool Align>
EIGEN_DEVICE_FUNC void conditional_aligned_delete (T *ptr, std::size_t size)
 
template<typename T , bool Align>
EIGEN_DEVICE_FUNC Tconditional_aligned_realloc_new (T *pts, std::size_t new_size, std::size_t old_size)
 
template<typename T , bool Align>
EIGEN_DEVICE_FUNC Tconditional_aligned_new_auto (std::size_t size)
 
template<typename T , bool Align>
EIGEN_DEVICE_FUNC Tconditional_aligned_realloc_new_auto (T *pts, std::size_t new_size, std::size_t old_size)
 
template<typename T , bool Align>
EIGEN_DEVICE_FUNC void conditional_aligned_delete_auto (T *ptr, std::size_t size)
 
template<int Alignment, typename Scalar , typename Index >
EIGEN_DEVICE_FUNC Index first_aligned (const Scalar *array, Index size)
 
template<typename Scalar , typename Index >
EIGEN_DEVICE_FUNC Index first_default_aligned (const Scalar *array, Index size)
 
template<typename Index >
Index first_multiple (Index size, Index base)
 
template<typename T >
EIGEN_DEVICE_FUNC void smart_copy (const T *start, const T *end, T *target)
 
template<typename T >
void smart_memmove (const T *start, const T *end, T *target)
 
template<typename T >
EIGEN_DEVICE_FUNC Tsmart_move (T *start, T *end, T *target)
 
template<typename T >
void swap (scoped_array< T > &a, scoped_array< T > &b)
 
void queryCacheSizes (int &l1, int &l2, int &l3)
 
int queryL1CacheSize ()
 
int queryTopLevelCacheSize ()
 
template<class T , class... Args>
EIGEN_DEVICE_FUNC Tconstruct_at (T *p, Args &&... args)
 
template<class T >
EIGEN_DEVICE_FUNC void destroy_at (T *p)
 
template<typename T >
EIGEN_CONSTEXPR auto index_list_size (const T &x)
 
template<typename T , std::ptrdiff_t N>
EIGEN_CONSTEXPR std::ptrdiff_t index_list_size (const T(&)[N])
 
template<typename T >
const Treturn_ptr ()
 
template<typename Scalar >
EIGEN_STRONG_INLINE bool is_identically_zero (const Scalar &s)
 
template<typename A , typename B >
constexpr void plain_enum_asserts (A, B)
 
template<typename A , typename B >
constexpr int plain_enum_min (A a, B b)
 
template<typename A , typename B >
constexpr int plain_enum_max (A a, B b)
 
template<typename A , typename B >
constexpr int min_size_prefer_dynamic (A a, B b)
 
template<typename A , typename B >
constexpr int min_size_prefer_fixed (A a, B b)
 
template<typename A , typename B >
constexpr int max_size_prefer_dynamic (A a, B b)
 
template<typename A , typename B >
constexpr bool enum_eq_not_dynamic (A a, B b)
 
template<typename A , typename B >
constexpr bool enum_lt_not_dynamic (A a, B b)
 
template<typename A , typename B >
constexpr bool enum_le_not_dynamic (A a, B b)
 
template<typename A , typename B >
constexpr bool enum_gt_not_dynamic (A a, B b)
 
template<typename A , typename B >
constexpr bool enum_ge_not_dynamic (A a, B b)
 
constexpr bool logical_xor (bool a, bool b)
 
constexpr bool check_implication (bool a, bool b)
 
constexpr bool is_constant_evaluated ()
 
template<std::size_t n, typename T , T a, T... as>
constexpr T array_get (const numeric_list< T, a, as... > &)
 
template<typename Array , int... n>
constexpr EIGEN_STRONG_INLINE Array h_array_reverse (Array arr, numeric_list< int, n... >)
 
template<typename T , std::size_t N>
constexpr EIGEN_STRONG_INLINE array< T, Narray_reverse (array< T, N > arr)
 
template<typename Reducer , typename T , std::size_t N>
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto array_reduce (const array< T, N > &arr, T identity) -> decltype(h_array_reduce< Reducer, T, N >::run(arr, identity))
 
template<typename T , std::size_t N>
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto array_sum (const array< T, N > &arr) -> decltype(array_reduce< sum_op, T, N >(arr, static_cast< T >(0)))
 
template<typename T , std::size_t N>
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto array_prod (const array< T, N > &arr) -> decltype(array_reduce< product_op, T, N >(arr, static_cast< T >(1)))
 
template<typename t >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINEarray_prod (const std::vector< t > &a)
 
template<typename Op , typename A , typename B , std::size_t N, int... n>
constexpr EIGEN_STRONG_INLINE array< decltype(Op::run(A(), B())), Nh_array_zip (array< A, N > a, array< B, N > b, numeric_list< int, n... >)
 
template<typename Op , typename A , typename B , std::size_t N>
constexpr EIGEN_STRONG_INLINE array< decltype(Op::run(A(), B())), Narray_zip (array< A, N > a, array< B, N > b)
 
template<typename Reducer , typename Op , typename A , typename B , std::size_t N, int... n>
constexpr EIGEN_STRONG_INLINE auto h_array_zip_and_reduce (array< A, N > a, array< B, N > b, numeric_list< int, n... >) -> decltype(reduce< Reducer, typename id_numeric< int, n, decltype(Op::run(A(), B()))>::type... >::run(Op::run(array_get< n >(a), array_get< n >(b))...))
 
template<typename Reducer , typename Op , typename A , typename B , std::size_t N>
constexpr EIGEN_STRONG_INLINE auto array_zip_and_reduce (array< A, N > a, array< B, N > b) -> decltype(h_array_zip_and_reduce< Reducer, Op, A, B, N >(a, b, typename gen_numeric_list< int, N >::type()))
 
template<typename Op , typename A , std::size_t N, int... n>
constexpr EIGEN_STRONG_INLINE array< decltype(Op::run(A())), Nh_array_apply (array< A, N > a, numeric_list< int, n... >)
 
template<typename Op , typename A , std::size_t N>
constexpr EIGEN_STRONG_INLINE array< decltype(Op::run(A())), Narray_apply (array< A, N > a)
 
template<typename Reducer , typename Op , typename A , std::size_t N, int... n>
constexpr EIGEN_STRONG_INLINE auto h_array_apply_and_reduce (array< A, N > arr, numeric_list< int, n... >) -> decltype(reduce< Reducer, typename id_numeric< int, n, decltype(Op::run(A()))>::type... >::run(Op::run(array_get< n >(arr))...))
 
template<typename Reducer , typename Op , typename A , std::size_t N>
constexpr EIGEN_STRONG_INLINE auto array_apply_and_reduce (array< A, N > a) -> decltype(h_array_apply_and_reduce< Reducer, Op, A, N >(a, typename gen_numeric_list< int, N >::type()))
 
template<int n, typename t >
constexpr array< t, nrepeat (t v)
 
template<class InstType , typename ArrType , std::size_t N, bool Reverse = false>
InstType instantiate_by_c_array (ArrType *arr)
 
template<typename SizeType >
Index get_runtime_reshape_size (SizeType size, Index, Index)
 
Index get_runtime_reshape_size (AutoSize_t, Index other, Index total)
 
constexpr int get_compiletime_reshape_order (int flags, int order)
 
template<typename IndexType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE make_unsigned< IndexType >::type returnUnsignedIndexValue (const IndexType &idx)
 
template<typename IndexDest , typename IndexSrc >
EIGEN_DEVICE_FUNC IndexDest convert_index (const IndexSrc &idx)
 
constexpr int compute_default_alignment_helper (int ArrayBytes, int AlignmentBytes)
 
constexpr unsigned compute_matrix_flags (int Options)
 
constexpr int size_at_compile_time (int rows, int cols)
 
template<typename T >
EIGEN_DEVICE_FUNC Tconst_cast_ptr (const T *ptr)
 
template<typename T1 , typename T2 >
EIGEN_DEVICE_FUNC bool is_same_dense (const T1 &mat1, const T2 &mat2, std::enable_if_t< possibly_same_dense< T1, T2 >::value > *=0)
 
template<typename T1 , typename T2 >
EIGEN_DEVICE_FUNC bool is_same_dense (const T1 &, const T2 &, std::enable_if_t<!possibly_same_dense< T1, T2 >::value > *=0)
 
 EIGEN_MEMBER_FUNCTOR (norm,(Size+5) *NumTraits< Scalar >::MulCost+(Size - 1) *NumTraits< Scalar >::AddCost)
 
 EIGEN_MEMBER_FUNCTOR (stableNorm,(Size+5) *NumTraits< Scalar >::MulCost+(Size - 1) *NumTraits< Scalar >::AddCost)
 
 EIGEN_MEMBER_FUNCTOR (blueNorm,(Size+5) *NumTraits< Scalar >::MulCost+(Size - 1) *NumTraits< Scalar >::AddCost)
 
 EIGEN_MEMBER_FUNCTOR (hypotNorm,(Size - 1) *functor_traits< scalar_hypot_op< Scalar > >::Cost)
 
 EIGEN_MEMBER_FUNCTOR (all,(Size - 1) *NumTraits< Scalar >::AddCost)
 
 EIGEN_MEMBER_FUNCTOR (any,(Size - 1) *NumTraits< Scalar >::AddCost)
 
 EIGEN_MEMBER_FUNCTOR (count,(Size - 1) *NumTraits< Scalar >::AddCost)
 
 EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR (sum,(Size - 1) *NumTraits< Scalar >::AddCost, 1, internal::scalar_sum_op)
 
 EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR (minCoeff,(Size - 1) *NumTraits< Scalar >::AddCost, 1, internal::scalar_min_op)
 
 EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR (maxCoeff,(Size - 1) *NumTraits< Scalar >::AddCost, 1, internal::scalar_max_op)
 
 EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR (prod,(Size - 1) *NumTraits< Scalar >::MulCost, 1, internal::scalar_product_op)
 
template<typename MatrixType , typename DiagType , typename SubDiagType >
EIGEN_DEVICE_FUNC ComputationInfo computeFromTridiagonal_impl (DiagType &diag, SubDiagType &subdiag, const Index maxIterations, bool computeEigenvectors, MatrixType &eivec)
 Compute the eigendecomposition from a tridiagonal matrix. More...
 
template<int StorageOrder, typename RealScalar , typename Scalar , typename Index >
static EIGEN_DEVICE_FUNC void tridiagonal_qr_step (RealScalar *diag, RealScalar *subdiag, Index start, Index end, Scalar *matrixQ, Index n)
 
template<typename MatrixType , typename CoeffVectorType >
EIGEN_DEVICE_FUNC void tridiagonalization_inplace (MatrixType &matA, CoeffVectorType &hCoeffs)
 
template<typename MatrixType , typename DiagonalType , typename SubDiagonalType , typename CoeffVectorType , typename WorkSpaceType >
EIGEN_DEVICE_FUNC void tridiagonalization_inplace (MatrixType &mat, DiagonalType &diag, SubDiagonalType &subdiag, CoeffVectorType &hcoeffs, WorkSpaceType &workspace, bool extractQ)
 Performs a full tridiagonalization in place. More...
 
template<typename Scalar , int Dim>
static EIGEN_DEVICE_FUNC Matrix< Scalar, 2, 2 > toRotationMatrix (const Scalar &s)
 
template<typename Scalar , int Dim, typename OtherDerived >
static EIGEN_DEVICE_FUNC Matrix< Scalar, Dim, Dim > toRotationMatrix (const RotationBase< OtherDerived, Dim > &r)
 
template<typename Scalar , int Dim, typename OtherDerived >
static EIGEN_DEVICE_FUNC const MatrixBase< OtherDerived > & toRotationMatrix (const MatrixBase< OtherDerived > &mat)
 
template<typename TriangularFactorType , typename VectorsType , typename CoeffsType >
void make_block_householder_triangular_factor (TriangularFactorType &triFactor, const VectorsType &vectors, const CoeffsType &hCoeffs)
 
template<typename MatrixType , typename VectorsType , typename CoeffsType >
void apply_block_householder_on_the_left (MatrixType &mat, const VectorsType &vectors, const CoeffsType &hCoeffs, bool forward)
 
template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool bicgstab (const MatrixType &mat, const Rhs &rhs, Dest &x, const Preconditioner &precond, Index &iters, typename Dest::RealScalar &tol_error)
 
template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
EIGEN_DONT_INLINE void conjugate_gradient (const MatrixType &mat, const Rhs &rhs, Dest &x, const Preconditioner &precond, Index &iters, typename Dest::RealScalar &tol_error)
 
template<typename VectorV , typename VectorI >
Index QuickSplit (VectorV &row, VectorI &ind, Index ncut)
 
template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
EIGEN_DONT_INLINE void least_square_conjugate_gradient (const MatrixType &mat, const Rhs &rhs, Dest &x, const Preconditioner &precond, Index &iters, typename Dest::RealScalar &tol_error)
 
template<typename VectorX , typename VectorY , typename OtherScalar >
EIGEN_DEVICE_FUNC void apply_rotation_in_the_plane (DenseBase< VectorX > &xpr_x, DenseBase< VectorY > &xpr_y, const JacobiRotation< OtherScalar > &j)
 
template<typename Derived >
EIGEN_DEVICE_FUNC const Derived::Scalar bruteforce_det3_helper (const MatrixBase< Derived > &matrix, int a, int b, int c)
 
template<typename MatrixType , typename ResultType >
EIGEN_DEVICE_FUNC void compute_inverse_size2_helper (const MatrixType &matrix, const typename ResultType::Scalar &invdet, ResultType &result)
 
template<typename MatrixType , int i, int j>
EIGEN_DEVICE_FUNC MatrixType::Scalar cofactor_3x3 (const MatrixType &m)
 
template<typename MatrixType , typename ResultType >
EIGEN_DEVICE_FUNC void compute_inverse_size3_helper (const MatrixType &matrix, const typename ResultType::Scalar &invdet, const Matrix< typename ResultType::Scalar, 3, 1 > &cofactors_col0, ResultType &result)
 
template<typename Derived >
EIGEN_DEVICE_FUNC const Derived::Scalar general_det3_helper (const MatrixBase< Derived > &matrix, int i1, int i2, int i3, int j1, int j2, int j3)
 
template<typename MatrixType , int i, int j>
EIGEN_DEVICE_FUNC MatrixType::Scalar cofactor_4x4 (const MatrixType &matrix)
 
template<typename MatrixType , typename TranspositionType >
void partial_lu_inplace (MatrixType &lu, TranspositionType &row_transpositions, typename TranspositionType::StorageIndex &nb_transpositions)
 
template<typename MatrixType , typename RealScalar , typename Index >
void real_2x2_jacobi_svd (const MatrixType &matrix, Index p, Index q, JacobiRotation< RealScalar > *j_left, JacobiRotation< RealScalar > *j_right)
 
template<typename T >
T amd_flip (const T &i)
 
template<typename T >
T amd_unflip (const T &i)
 
template<typename T0 , typename T1 >
bool amd_marked (const T0 *w, const T1 &j)
 
template<typename T0 , typename T1 >
void amd_mark (const T0 *w, const T1 &j)
 
template<typename StorageIndex >
static StorageIndex cs_wclear (StorageIndex mark, StorageIndex lemax, StorageIndex *w, StorageIndex n)
 
template<typename StorageIndex >
StorageIndex cs_tdfs (StorageIndex j, StorageIndex k, StorageIndex *head, const StorageIndex *next, StorageIndex *post, StorageIndex *stack)
 
template<typename Scalar , typename StorageIndex >
void minimum_degree_ordering (SparseMatrix< Scalar, ColMajor, StorageIndex > &C, PermutationMatrix< Dynamic, Dynamic, StorageIndex > &perm)
 
template<typename MatrixType >
void ordering_helper_at_plus_a (const MatrixType &A, MatrixType &symmat)
 
void eigen_pastix (pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, float *vals, int *perm, int *invp, float *x, int nbrhs, int *iparm, double *dparm)
 
void eigen_pastix (pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, double *vals, int *perm, int *invp, double *x, int nbrhs, int *iparm, double *dparm)
 
void eigen_pastix (pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, std::complex< float > *vals, int *perm, int *invp, std::complex< float > *x, int nbrhs, int *iparm, double *dparm)
 
void eigen_pastix (pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, std::complex< double > *vals, int *perm, int *invp, std::complex< double > *x, int nbrhs, int *iparm, double *dparm)
 
template<typename MatrixType >
void c_to_fortran_numbering (MatrixType &mat)
 
template<typename MatrixType >
void fortran_to_c_numbering (MatrixType &mat)
 
template<typename MatrixQR , typename HCoeffs >
void householder_qr_inplace_unblocked (MatrixQR &mat, HCoeffs &hCoeffs, typename MatrixQR::Scalar *tempData=0)
 
template<typename MatrixQR , typename HCoeffs , typename VectorQR >
void householder_qr_inplace_update (MatrixQR &mat, HCoeffs &hCoeffs, const VectorQR &newColumn, typename MatrixQR::Index k, typename MatrixQR::Scalar *tempData)
 
template<typename Lhs , typename Rhs , typename ResultType >
static void conservative_sparse_sparse_product_impl (const Lhs &lhs, const Rhs &rhs, ResultType &res, bool sortedInsertion=false)
 
template<typename Lhs , typename Rhs , typename ResultType >
static void sparse_sparse_to_dense_product_impl (const Lhs &lhs, const Rhs &rhs, ResultType &res)
 
template<typename DstXprType , typename SrcXprType >
void assign_sparse_to_sparse (DstXprType &dst, const SrcXprType &src)
 
 EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE (assign_op, scalar_sum_op, add_assign_op)
 
 EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE (add_assign_op, scalar_sum_op, add_assign_op)
 
 EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE (sub_assign_op, scalar_sum_op, sub_assign_op)
 
 EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE (assign_op, scalar_difference_op, sub_assign_op)
 
 EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE (add_assign_op, scalar_difference_op, sub_assign_op)
 
 EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE (sub_assign_op, scalar_difference_op, add_assign_op)
 
template<typename Index , typename IndexVector >
Index etree_find (Index i, IndexVector &pp)
 
template<typename MatrixType , typename IndexVector >
int coletree (const MatrixType &mat, IndexVector &parent, IndexVector &firstRowElt, typename MatrixType::StorageIndex *perm=0)
 
template<typename IndexVector >
void nr_etdfs (typename IndexVector::Scalar n, IndexVector &parent, IndexVector &first_kid, IndexVector &next_kid, IndexVector &post, typename IndexVector::Scalar postnum)
 
template<typename IndexVector >
void treePostorder (typename IndexVector::Scalar n, IndexVector &parent, IndexVector &post)
 Post order a tree. More...
 
template<typename SparseLhsType , typename DenseRhsType , typename DenseResType , typename AlphaType >
void sparse_time_dense_product (const SparseLhsType &lhs, const DenseRhsType &rhs, DenseResType &res, const AlphaType &alpha)
 
template<typename InputIterator , typename SparseMatrixType , typename DupFunctor >
void set_from_triplets (const InputIterator &begin, const InputIterator &end, SparseMatrixType &mat, DupFunctor dup_func)
 
template<typename InputIterator , typename SparseMatrixType , typename DupFunctor >
void set_from_triplets_sorted (const InputIterator &begin, const InputIterator &end, SparseMatrixType &mat, DupFunctor dup_func)
 
template<typename InputIterator , typename SparseMatrixType , typename DupFunctor >
void insert_from_triplets (const InputIterator &begin, const InputIterator &end, SparseMatrixType &mat, DupFunctor dup_func)
 
template<typename InputIterator , typename SparseMatrixType , typename DupFunctor >
void insert_from_triplets_sorted (const InputIterator &begin, const InputIterator &end, SparseMatrixType &mat, DupFunctor dup_func)
 
template<int SrcMode, int DstMode, bool NonHermitian, typename MatrixType , int DestOrder>
void permute_symm_to_symm (const MatrixType &mat, SparseMatrix< typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex > &_dest, const typename MatrixType::StorageIndex *perm=0)
 
template<int Mode, bool NonHermitian, typename MatrixType , int DestOrder>
void permute_symm_to_fullsymm (const MatrixType &mat, SparseMatrix< typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex > &_dest, const typename MatrixType::StorageIndex *perm=0)
 
template<int Mode, typename SparseLhsType , typename DenseRhsType , typename DenseResType , typename AlphaType >
void sparse_selfadjoint_time_dense_product (const SparseLhsType &lhs, const DenseRhsType &rhs, DenseResType &res, const AlphaType &alpha)
 
template<int SrcMode_, int DstMode_, bool NonHermitian, typename MatrixType , int DstOrder>
void permute_symm_to_symm (const MatrixType &mat, SparseMatrix< typename MatrixType::Scalar, DstOrder, typename MatrixType::StorageIndex > &_dest, const typename MatrixType::StorageIndex *perm)
 
template<typename Decomposition , typename Rhs , typename Dest >
std::enable_if_t< Rhs::ColsAtCompileTime !=1 &&Dest::ColsAtCompileTime !=1 > solve_sparse_through_dense_panels (const Decomposition &dec, const Rhs &rhs, Dest &dest)
 
template<typename Decomposition , typename Rhs , typename Dest >
std::enable_if_t< Rhs::ColsAtCompileTime==1||Dest::ColsAtCompileTime==1 > solve_sparse_through_dense_panels (const Decomposition &dec, const Rhs &rhs, Dest &dest)
 
template<typename Lhs , typename Rhs , typename ResultType >
static void sparse_sparse_product_with_pruning_impl (const Lhs &lhs, const Rhs &rhs, ResultType &res, const typename ResultType::RealScalar &tolerance)
 
Index LUnumTempV (Index &m, Index &w, Index &t, Index &b)
 
template<typename Scalar >
Index LUTempSpace (Index &m, Index &w)
 
template<typename MatrixType >
SluMatrix asSluMatrix (MatrixType &mat)
 
template<typename Scalar , int Flags, typename Index >
Map< SparseMatrix< Scalar, Flags, Index > > map_superlu (SluMatrix &sluMat)
 
constexpr int get_qr_preconditioner (int options)
 
constexpr int get_computation_options (int options)
 
constexpr bool should_svd_compute_thin_u (int options)
 
constexpr bool should_svd_compute_full_u (int options)
 
constexpr bool should_svd_compute_thin_v (int options)
 
constexpr bool should_svd_compute_full_v (int options)
 
template<typename MatrixType , int Options>
void check_svd_options_assertions (unsigned int computationOptions, Index rows, Index cols)
 
template<typename MatrixType >
void upperbidiagonalization_inplace_unblocked (MatrixType &mat, typename MatrixType::RealScalar *diagonal, typename MatrixType::RealScalar *upper_diagonal, typename MatrixType::Scalar *tempData=0)
 
template<typename MatrixType >
void upperbidiagonalization_blocked_helper (MatrixType &A, typename MatrixType::RealScalar *diagonal, typename MatrixType::RealScalar *upper_diagonal, Index bs, Ref< Matrix< typename MatrixType::Scalar, Dynamic, Dynamic, traits< MatrixType >::Flags &RowMajorBit > > X, Ref< Matrix< typename MatrixType::Scalar, Dynamic, Dynamic, traits< MatrixType >::Flags &RowMajorBit > > Y)
 
template<typename MatrixType , typename BidiagType >
void upperbidiagonalization_inplace_blocked (MatrixType &A, BidiagType &bidiagonal, Index maxBlockSize=32, typename MatrixType::Scalar *=0)
 
template<>
EIGEN_STRONG_INLINE double cast (const AnnoyingScalar &x)
 
template<typename Dst , template< typename > class StorageBase, typename Src , typename Func >
EIGEN_DEVICE_FUNC void call_assignment (const NoAlias< Dst, StorageBase > &dst, const Src &src, const Func &func)
 
template<typename Dst , template< typename > class StorageBase, typename Src , typename Func >
EIGEN_DEVICE_FUNC void call_restricted_packet_assignment (const NoAlias< Dst, StorageBase > &dst, const Src &src, const Func &func)
 
template<typename Kernel , typename... Args, size_t... Indices, size_t... OutputIndices>
EIGEN_DEVICE_FUNC void run_serialized (std::index_sequence< Indices... >, std::index_sequence< OutputIndices... >, Kernel kernel, uint8_t *buffer, size_t capacity)
 
template<typename Kernel , typename... Args>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run_serialized (Kernel kernel, uint8_t *buffer, size_t capacity)
 
template<int Layout, typename IndexType , int NumDims>
EIGEN_ALWAYS_INLINE DSizes< IndexType, NumDims > strides (const DSizes< IndexType, NumDims > &dimensions)
 
template<int Layout, typename IndexType , size_t NumDims>
EIGEN_ALWAYS_INLINE DSizes< IndexType, NumDims > strides (const Eigen::array< IndexType, NumDims > &dimensions)
 
template<int Layout, std::ptrdiff_t... Indices>
EIGEN_STRONG_INLINE DSizes< std::ptrdiff_t, sizeof...(Indices)> strides (const Sizes< Indices... > &sizes)
 
template<DenseIndex n, typename Index , std::size_t Rank>
const Index array_get (DimensionList< Index, Rank > &)
 
template<DenseIndex n, typename Index , std::size_t Rank>
const Index array_get (const DimensionList< Index, Rank > &)
 
template<typename std::ptrdiff_t... Indices>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_prod (const Sizes< Indices... > &)
 
template<std::ptrdiff_t n, typename std::ptrdiff_t... Indices>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_get (const Sizes< Indices... > &)
 
template<std::ptrdiff_t n>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_get (const Sizes<> &)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T loadConstant (const T *address)
 
template<typename T >
EIGEN_DEVICE_FUNC void update_value (T &val, Index new_val)
 
template<Index n>
EIGEN_DEVICE_FUNC void update_value (type2index< n > &val, Index new_val)
 
template<typename T >
EIGEN_DEVICE_FUNC void update_value (T &val, IndexPair< Index > new_val)
 
template<Index f, Index s>
EIGEN_DEVICE_FUNC void update_value (type2indexpair< f, s > &val, IndexPair< Index > new_val)
 
template<int N, typename T , typename... O>
constexpr EIGEN_DEVICE_FUNC IndexTupleExtractor< N, T, O... >::ValType & array_get (IndexTuple< T, O... > &tuple)
 
template<int N, typename T , typename... O>
constexpr EIGEN_DEVICE_FUNC const IndexTupleExtractor< N, T, O... >::ValType & array_get (const IndexTuple< T, O... > &tuple)
 
template<typename FirstType , typename... OtherTypes>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index array_prod (const IndexList< FirstType, OtherTypes... > &sizes)
 
template<Index N, typename FirstType , typename... OtherTypes>
constexpr EIGEN_DEVICE_FUNC Index array_get (IndexList< FirstType, OtherTypes... > &a)
 
template<Index N, typename FirstType , typename... OtherTypes>
constexpr EIGEN_DEVICE_FUNC Index array_get (const IndexList< FirstType, OtherTypes... > &a)
 
template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool index_known_statically (Index i)
 
template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool all_indices_known_statically ()
 
template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool indices_statically_known_to_increase ()
 
template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool index_statically_eq (Index i, Index value)
 
template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool index_statically_ne (Index i, Index value)
 
template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool index_statically_gt (Index i, Index value)
 
template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool index_statically_lt (Index i, Index value)
 
template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool index_pair_first_statically_eq (Index i, Index value)
 
template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool index_pair_second_statically_eq (Index i, Index value)
 
template<typename Derived , int N>
void initialize_tensor (TensorEvaluator< Derived, DefaultDevice > &tensor, const typename Initializer< Derived, traits< Derived >::NumDimensions >::InitList &vals)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t< sizeof(T)==4, intcount_leading_zeros (const T val)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t< sizeof(T)==8, intcount_leading_zeros (const T val)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE uint32_t muluh (const uint32_t a, const T b)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE uint64_t muluh (const uint64_t a, const T b)
 
template<typename T , bool div_gt_one>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T operator/ (const T &numerator, const TensorIntDivisor< T, div_gt_one > &divisor)
 
template<typename IndexType , typename Index , Index First, Index... Is>
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE array< Index, 1+sizeof...(Is)> customIndices2Array (IndexType &idx, numeric_list< Index, First, Is... >)
 
template<typename IndexType , typename Index >
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE array< Index, 0 > customIndices2Array (IndexType &, numeric_list< Index >)
 
template<typename Index , std::size_t NumIndices, typename IndexType >
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE array< Index, NumIndices > customIndices2Array (IndexType &idx)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE uint64_t get_random_seed ()
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE unsigned PCG_XSH_RS_generator (uint64_t *state, uint64_t stream)
 
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE uint64_t PCG_XSH_RS_state (uint64_t seed)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T RandomToTypeUniform (uint64_t *state, uint64_t stream)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Eigen::half RandomToTypeUniform< Eigen::half > (uint64_t *state, uint64_t stream)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Eigen::bfloat16 RandomToTypeUniform< Eigen::bfloat16 > (uint64_t *state, uint64_t stream)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float RandomToTypeUniform< float > (uint64_t *state, uint64_t stream)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double RandomToTypeUniform< double > (uint64_t *state, uint64_t stream)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::complex< float > RandomToTypeUniform< std::complex< float > > (uint64_t *state, uint64_t stream)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::complex< doubleRandomToTypeUniform< std::complex< double > > (uint64_t *state, uint64_t stream)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T RandomToTypeNormal (uint64_t *state, uint64_t stream)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::complex< float > RandomToTypeNormal< std::complex< float > > (uint64_t *state, uint64_t stream)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::complex< doubleRandomToTypeNormal< std::complex< double > > (uint64_t *state, uint64_t stream)
 
template<typename T >
EIGEN_DEVICE_FUNC Index LeafSize ()
 
template<>
EIGEN_DEVICE_FUNC Index LeafSize< half > ()
 
template<>
EIGEN_DEVICE_FUNC Index LeafSize< bfloat16 > ()
 
template<typename Self >
EIGEN_STRONG_INLINE void ReduceScalar (Self &self, Index offset, typename Self::CoeffReturnType *data)
 
template<typename Self >
EIGEN_STRONG_INLINE void ReducePacket (Self &self, Index offset, typename Self::CoeffReturnType *data)
 
template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool operator== (const TensorUInt128< HL, LL > &lhs, const TensorUInt128< HR, LR > &rhs)
 
template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool operator!= (const TensorUInt128< HL, LL > &lhs, const TensorUInt128< HR, LR > &rhs)
 
template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool operator>= (const TensorUInt128< HL, LL > &lhs, const TensorUInt128< HR, LR > &rhs)
 
template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool operator< (const TensorUInt128< HL, LL > &lhs, const TensorUInt128< HR, LR > &rhs)
 
template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE TensorUInt128< uint64_t, uint64_t > operator+ (const TensorUInt128< HL, LL > &lhs, const TensorUInt128< HR, LR > &rhs)
 
template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE TensorUInt128< uint64_t, uint64_t > operator- (const TensorUInt128< HL, LL > &lhs, const TensorUInt128< HR, LR > &rhs)
 
template<typename HL , typename LL , typename HR , typename LR >
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorUInt128< uint64_t, uint64_t > operator* (const TensorUInt128< HL, LL > &lhs, const TensorUInt128< HR, LR > &rhs)
 
template<typename HL , typename LL , typename HR , typename LR >
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorUInt128< uint64_t, uint64_t > operator/ (const TensorUInt128< HL, LL > &lhs, const TensorUInt128< HR, LR > &rhs)
 
template<typename Index , std::size_t N, int... ii, int... jj>
constexpr static std::array< Index, Ntensor_static_symgroup_index_permute (std::array< Index, N > idx, internal::numeric_list< int, ii... >, internal::numeric_list< int, jj... >)
 
template<typename Index , int... ii>
static std::vector< Indextensor_static_symgroup_index_permute (std::vector< Index > idx, internal::numeric_list< int, ii... >)
 
template<std::size_t I_, class T >
constexpr Tarray_get (std::vector< T > &a)
 
template<std::size_t I_, class T >
constexpr T && array_get (std::vector< T > &&a)
 
template<std::size_t I_, class T >
constexpr T const & array_get (std::vector< T > const &a)
 
template<typename DerivativeType , typename OtherDerivativeType >
maybe_coherent_pad_helper< DerivativeType, OtherDerivativeType >::type MaybeCoherentPad (const DerivativeType &x, const OtherDerivativeType &y)
 
template<typename Op , typename LhsDerivativeType , typename RhsDerivativeType >
auto MakeCoherentCwiseBinaryOp (const LhsDerivativeType &x, const RhsDerivativeType &y, Op op=Op())
 
template<typename BVH , typename Intersector >
bool intersect_helper (const BVH &tree, Intersector &intersector, typename BVH::Index root)
 
template<typename BVH , typename Minimizer >
Minimizer::Scalar minimize_helper (const BVH &tree, Minimizer &minimizer, typename BVH::Index root, typename Minimizer::Scalar minimum)
 
template<typename T >
Tfftw_cast (const T *p)
 
fftw_complex * fftw_cast (const std::complex< double > *p)
 
fftwf_complex * fftw_cast (const std::complex< float > *p)
 
fftwl_complex * fftw_cast (const std::complex< long double > *p)
 
template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool bicgstabl (const MatrixType &mat, const Rhs &rhs, Dest &x, const Preconditioner &precond, Index &iters, typename Dest::RealScalar &tol_error, Index L)
 
template<typename VectorType , typename IndexType >
void sortWithPermutation (VectorType &vec, IndexType &perm, typename IndexType::Scalar &ncut)
 Computes a permutation vector to have a sorted sequence. More...
 
template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool gmres (const MatrixType &mat, const Rhs &rhs, Dest &x, const Preconditioner &precond, Index &iters, const Index &restart, typename Dest::RealScalar &tol_error)
 
template<typename Vector , typename RealScalar >
Vector::Scalar omega (const Vector &t, const Vector &s, RealScalar angle)
 
template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool idrs (const MatrixType &A, const Rhs &b, Dest &x, const Preconditioner &precond, Index &iter, typename Dest::RealScalar &relres, Index S, bool smoothing, typename Dest::RealScalar angle, bool replacement)
 
template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool idrstabl (const MatrixType &mat, const Rhs &rhs, Dest &x, const Preconditioner &precond, Index &iters, typename Dest::RealScalar &tol_error, Index L, Index S)
 
template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
EIGEN_DONT_INLINE void minres (const MatrixType &mat, const Rhs &rhs, Dest &x, const Preconditioner &precond, Index &iters, typename Dest::RealScalar &tol_error)
 
template<typename QRSolver , typename VectorType >
void lmpar2 (const QRSolver &qr, const VectorType &diag, const VectorType &qtb, typename VectorType::Scalar m_delta, typename VectorType::Scalar &par, VectorType &x)
 
template<typename Scalar >
void covar (Matrix< Scalar, Dynamic, Dynamic > &r, const VectorXi &ipvt, Scalar tol=std::sqrt(NumTraits< Scalar >::epsilon()))
 
template<typename Scalar , int Rows, int Cols, typename PermIndex >
void lmqrsolv (Matrix< Scalar, Rows, Cols > &s, const PermutationMatrix< Dynamic, Dynamic, PermIndex > &iPerm, const Matrix< Scalar, Dynamic, 1 > &diag, const Matrix< Scalar, Dynamic, 1 > &qtb, Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &sdiag)
 
template<typename Scalar , int Options_, typename Index >
void lmqrsolv (SparseMatrix< Scalar, Options_, Index > &s, const PermutationMatrix< Dynamic, Dynamic > &iPerm, const Matrix< Scalar, Dynamic, 1 > &diag, const Matrix< Scalar, Dynamic, 1 > &qtb, Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &sdiag)
 
template<typename MatA , typename MatU , typename MatV >
void matrix_exp_pade3 (const MatA &A, MatU &U, MatV &V)
 Compute the (3,3)-Padé approximant to the exponential. More...
 
template<typename MatA , typename MatU , typename MatV >
void matrix_exp_pade5 (const MatA &A, MatU &U, MatV &V)
 Compute the (5,5)-Padé approximant to the exponential. More...
 
template<typename MatA , typename MatU , typename MatV >
void matrix_exp_pade7 (const MatA &A, MatU &U, MatV &V)
 Compute the (7,7)-Padé approximant to the exponential. More...
 
template<typename MatA , typename MatU , typename MatV >
void matrix_exp_pade9 (const MatA &A, MatU &U, MatV &V)
 Compute the (9,9)-Padé approximant to the exponential. More...
 
template<typename MatA , typename MatU , typename MatV >
void matrix_exp_pade13 (const MatA &A, MatU &U, MatV &V)
 Compute the (13,13)-Padé approximant to the exponential. More...
 
template<typename ArgType , typename ResultType >
void matrix_exp_compute (const ArgType &arg, ResultType &result, true_type)
 
template<typename ArgType , typename ResultType >
void matrix_exp_compute (const ArgType &arg, ResultType &result, false_type)
 
template<typename MatrixType >
NumTraits< typename MatrixType::Scalar >::Real matrix_function_compute_mu (const MatrixType &A)
 
template<typename Index , typename ListOfClusters >
ListOfClusters::iterator matrix_function_find_cluster (Index key, ListOfClusters &clusters)
 Find cluster in clusters containing some value. More...
 
template<typename EivalsType , typename Cluster >
void matrix_function_partition_eigenvalues (const EivalsType &eivals, std::list< Cluster > &clusters)
 Partition eigenvalues in clusters of ei'vals close to each other. More...
 
template<typename ListOfClusters , typename Index >
void matrix_function_compute_cluster_size (const ListOfClusters &clusters, Matrix< Index, Dynamic, 1 > &clusterSize)
 Compute size of each cluster given a partitioning. More...
 
template<typename VectorType >
void matrix_function_compute_block_start (const VectorType &clusterSize, VectorType &blockStart)
 Compute start of each block using clusterSize. More...
 
template<typename EivalsType , typename ListOfClusters , typename VectorType >
void matrix_function_compute_map (const EivalsType &eivals, const ListOfClusters &clusters, VectorType &eivalToCluster)
 Compute mapping of eigenvalue indices to cluster indices. More...
 
template<typename DynVectorType , typename VectorType >
void matrix_function_compute_permutation (const DynVectorType &blockStart, const DynVectorType &eivalToCluster, VectorType &permutation)
 Compute permutation which groups ei'vals in same cluster together. More...
 
template<typename VectorType , typename MatrixType >
void matrix_function_permute_schur (VectorType &permutation, MatrixType &U, MatrixType &T)
 Permute Schur decomposition in U and T according to permutation. More...
 
template<typename MatrixType , typename AtomicType , typename VectorType >
void matrix_function_compute_block_atomic (const MatrixType &T, AtomicType &atomic, const VectorType &blockStart, const VectorType &clusterSize, MatrixType &fT)
 Compute block diagonal part of matrix function. More...
 
template<typename MatrixType >
MatrixType matrix_function_solve_triangular_sylvester (const MatrixType &A, const MatrixType &B, const MatrixType &C)
 Solve a triangular Sylvester equation AX + XB = C. More...
 
template<typename MatrixType , typename VectorType >
void matrix_function_compute_above_diagonal (const MatrixType &T, const VectorType &blockStart, const VectorType &clusterSize, MatrixType &fT)
 Compute part of matrix function above block diagonal. More...
 
template<typename MatrixType >
void matrix_log_compute_2x2 (const MatrixType &A, MatrixType &result)
 Compute logarithm of 2x2 triangular matrix. More...
 
int matrix_log_get_pade_degree (float normTminusI)
 
int matrix_log_get_pade_degree (double normTminusI)
 
int matrix_log_get_pade_degree (long double normTminusI)
 
template<typename MatrixType >
void matrix_log_compute_pade (MatrixType &result, const MatrixType &T, int degree)
 
template<typename MatrixType >
void matrix_log_compute_big (const MatrixType &A, MatrixType &result)
 Compute logarithm of triangular matrices with size > 2. More...
 
template<typename MatrixType , typename ResultType >
void matrix_sqrt_quasi_triangular_2x2_diagonal_block (const MatrixType &T, Index i, ResultType &sqrtT)
 
template<typename MatrixType , typename ResultType >
void matrix_sqrt_quasi_triangular_1x1_off_diagonal_block (const MatrixType &T, Index i, Index j, ResultType &sqrtT)
 
template<typename MatrixType , typename ResultType >
void matrix_sqrt_quasi_triangular_1x2_off_diagonal_block (const MatrixType &T, Index i, Index j, ResultType &sqrtT)
 
template<typename MatrixType , typename ResultType >
void matrix_sqrt_quasi_triangular_2x1_off_diagonal_block (const MatrixType &T, Index i, Index j, ResultType &sqrtT)
 
template<typename MatrixType >
void matrix_sqrt_quasi_triangular_solve_auxiliary_equation (MatrixType &X, const MatrixType &A, const MatrixType &B, const MatrixType &C)
 
template<typename MatrixType , typename ResultType >
void matrix_sqrt_quasi_triangular_2x2_off_diagonal_block (const MatrixType &T, Index i, Index j, ResultType &sqrtT)
 
template<typename MatrixType , typename ResultType >
void matrix_sqrt_quasi_triangular_diagonal (const MatrixType &T, ResultType &sqrtT)
 
template<typename MatrixType , typename ResultType >
void matrix_sqrt_quasi_triangular_off_diagonal (const MatrixType &T, ResultType &sqrtT)
 
template<typename Scalar >
Scalar stem_function_exp (Scalar x, int)
 The exponential function (and its derivatives). More...
 
template<typename Scalar >
Scalar stem_function_cos (Scalar x, int n)
 Cosine (and its derivatives). More...
 
template<typename Scalar >
Scalar stem_function_sin (Scalar x, int n)
 Sine (and its derivatives). More...
 
template<typename Scalar >
Scalar stem_function_cosh (Scalar x, int n)
 Hyperbolic cosine (and its derivatives). More...
 
template<typename Scalar >
Scalar stem_function_sinh (Scalar x, int n)
 Hyperbolic sine (and its derivatives). More...
 
template<typename Scalar >
void chkder (const Matrix< Scalar, Dynamic, 1 > &x, const Matrix< Scalar, Dynamic, 1 > &fvec, const Matrix< Scalar, Dynamic, Dynamic > &fjac, Matrix< Scalar, Dynamic, 1 > &xp, const Matrix< Scalar, Dynamic, 1 > &fvecp, int mode, Matrix< Scalar, Dynamic, 1 > &err)
 
template<typename Scalar >
void dogleg (const Matrix< Scalar, Dynamic, Dynamic > &qrfac, const Matrix< Scalar, Dynamic, 1 > &diag, const Matrix< Scalar, Dynamic, 1 > &qtb, Scalar delta, Matrix< Scalar, Dynamic, 1 > &x)
 
template<typename FunctorType , typename Scalar >
DenseIndex fdjac1 (const FunctorType &Functor, Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &fvec, Matrix< Scalar, Dynamic, Dynamic > &fjac, DenseIndex ml, DenseIndex mu, Scalar epsfcn)
 
template<typename Scalar >
void lmpar (Matrix< Scalar, Dynamic, Dynamic > &r, const VectorXi &ipvt, const Matrix< Scalar, Dynamic, 1 > &diag, const Matrix< Scalar, Dynamic, 1 > &qtb, Scalar delta, Scalar &par, Matrix< Scalar, Dynamic, 1 > &x)
 
template<typename Scalar >
void lmpar2 (const ColPivHouseholderQR< Matrix< Scalar, Dynamic, Dynamic > > &qr, const Matrix< Scalar, Dynamic, 1 > &diag, const Matrix< Scalar, Dynamic, 1 > &qtb, Scalar delta, Scalar &par, Matrix< Scalar, Dynamic, 1 > &x)
 
template<typename Scalar >
void qrsolv (Matrix< Scalar, Dynamic, Dynamic > &s, const VectorXi &ipvt, const Matrix< Scalar, Dynamic, 1 > &diag, const Matrix< Scalar, Dynamic, 1 > &qtb, Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &sdiag)
 
template<typename Scalar >
void r1mpyq (DenseIndex m, DenseIndex n, Scalar *a, const std::vector< JacobiRotation< Scalar > > &v_givens, const std::vector< JacobiRotation< Scalar > > &w_givens)
 
template<typename Scalar >
void r1updt (Matrix< Scalar, Dynamic, Dynamic > &s, const Matrix< Scalar, Dynamic, 1 > &u, std::vector< JacobiRotation< Scalar > > &v_givens, std::vector< JacobiRotation< Scalar > > &w_givens, Matrix< Scalar, Dynamic, 1 > &v, Matrix< Scalar, Dynamic, 1 > &w, bool *sing)
 
template<typename Scalar >
void rwupdt (Matrix< Scalar, Dynamic, Dynamic > &r, const Matrix< Scalar, Dynamic, 1 > &w, Matrix< Scalar, Dynamic, 1 > &b, Scalar alpha)
 
template<typename Scalar , typename StorageIndex >
void GetMarketLine (const char *line, StorageIndex &i, StorageIndex &j, Scalar &value)
 
template<>
void GetMarketLine (const char *line, int &i, int &j, float &value)
 
template<>
void GetMarketLine (const char *line, int &i, int &j, double &value)
 
template<>
void GetMarketLine (const char *line, int &i, int &j, std::complex< float > &value)
 
template<>
void GetMarketLine (const char *line, int &i, int &j, std::complex< double > &value)
 
template<typename Scalar , typename StorageIndex >
void GetMarketLine (const char *line, StorageIndex &i, StorageIndex &j, std::complex< Scalar > &value)
 
template<typename RealScalar >
void GetDenseElt (const std::string &line, RealScalar &val)
 
template<typename RealScalar >
void GetDenseElt (const std::string &line, std::complex< RealScalar > &val)
 
template<typename Scalar >
void putMarketHeader (std::string &header, int sym)
 
template<typename Scalar , typename StorageIndex >
void PutMatrixElt (Scalar value, StorageIndex row, StorageIndex col, std::ofstream &out)
 
template<typename Scalar , typename StorageIndex >
void PutMatrixElt (std::complex< Scalar > value, StorageIndex row, StorageIndex col, std::ofstream &out)
 
template<typename Scalar >
void putDenseElt (Scalar value, std::ofstream &out)
 
template<typename Scalar >
void putDenseElt (std::complex< Scalar > value, std::ofstream &out)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_i0 (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_i0e (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_i1 (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_i1e (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_j0 (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_j1 (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_y0 (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_y1 (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_k0 (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_k0e (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_k1 (const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pbessel_k1e (const Packet &x)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T erf_over_x_double_small (const T &x2)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T erfc_double_large (const T &x, const T &x2)
 
template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T flipsign (const T &should_flipsign, const T &x)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double flipsign< double > (const double &should_flipsign, const double &x)
 
template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float flipsign< float > (const float &should_flipsign, const float &x)
 
template<typename T , typename ScalarType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T generic_ndtri_gt_exp_neg_two (const T &b)
 
template<typename T , typename ScalarType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T generic_ndtri_lt_exp_neg_two (const T &b, const T &should_flipsign)
 
template<typename T , typename ScalarType >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T generic_ndtri (const T &a)
 
template<typename Scalar >
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar main_igamma_term (Scalar a, Scalar x)
 
template<typename Scalar , IgammaComputationMode mode>
EIGEN_DEVICE_FUNC int igamma_num_iterations ()
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plgamma (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pdigamma (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pzeta (const Packet &x, const Packet &q)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ppolygamma (const Packet &n, const Packet &x)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet perf (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet perfc (const Packet &a)
 
template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pndtri (const Packet &a)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pigamma (const Packet &a, const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pigamma_der_a (const Packet &a, const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pgamma_sample_der_alpha (const Packet &alpha, const Packet &sample)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pigammac (const Packet &a, const Packet &x)
 
template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet pbetainc (const Packet &a, const Packet &b, const Packet &x)
 

Variables

static Packet4ui p4ui_CONJ_XOR
 
static const Packet16uc p16uc_GETREAL32 = {0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27}
 
static const Packet16uc p16uc_GETIMAG32 = {4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31}
 
static const Packet16uc p16uc_GETREAL32b = {0, 1, 2, 3, 16, 17, 18, 19, 8, 9, 10, 11, 24, 25, 26, 27}
 
static const Packet16uc p16uc_GETIMAG32b = {4, 5, 6, 7, 20, 21, 22, 23, 12, 13, 14, 15, 28, 29, 30, 31}
 
static const Packet4i mask4 [4] = {{0, 0, 0, 0}, {-1, 0, 0, 0}, {-1, -1, 0, 0}, {-1, -1, -1, 0}}
 
static Packet16uc p16uc_MERGE16_32_1 = {0, 1, 16, 17, 2, 3, 18, 19, 0, 1, 16, 17, 2, 3, 18, 19}
 
static Packet16uc p16uc_MERGE16_32_2 = {4, 5, 20, 21, 6, 7, 22, 23, 4, 5, 20, 21, 6, 7, 22, 23}
 
static Packet16uc p16uc_MERGE16_32_3 = {8, 9, 24, 25, 10, 11, 26, 27, 8, 9, 24, 25, 10, 11, 26, 27}
 
static Packet16uc p16uc_MERGE16_32_4 = {12, 13, 28, 29, 14, 15, 30, 31, 12, 13, 28, 29, 14, 15, 30, 31}
 
static Packet16uc p16uc_MERGE16_32_5 = {0, 1, 16, 17, 16, 17, 16, 17, 0, 1, 16, 17, 16, 17, 16, 17}
 
static Packet16uc p16uc_MERGE16_32_6 = {2, 3, 18, 19, 18, 19, 18, 19, 2, 3, 18, 19, 18, 19, 18, 19}
 
static Packet16uc p16uc_MERGE16_32_7 = {4, 5, 20, 21, 20, 21, 20, 21, 4, 5, 20, 21, 20, 21, 20, 21}
 
static Packet16uc p16uc_MERGE16_32_8 = {6, 7, 22, 23, 22, 23, 22, 23, 6, 7, 22, 23, 22, 23, 22, 23}
 
static Packet16uc p16uc_ELEMENT_VEC3
 
static Packet4f p4f_MZERO
 
static Packet4f p4f_ONE = vec_ctf(p4i_ONE, 0)
 
static Packet4f p4f_COUNTDOWN = {0.0, 1.0, 2.0, 3.0}
 
static Packet4i p4i_COUNTDOWN = {0, 1, 2, 3}
 
static Packet8s p8s_COUNTDOWN = {0, 1, 2, 3, 4, 5, 6, 7}
 
static Packet8us p8us_COUNTDOWN = {0, 1, 2, 3, 4, 5, 6, 7}
 
static Packet16c p16c_COUNTDOWN = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
 
static Packet16uc p16uc_COUNTDOWN = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
 
static Packet16uc p16uc_REVERSE32 = {12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3}
 
static Packet16uc p16uc_REVERSE16 = {14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1}
 
static Packet16uc p16uc_REVERSE8 = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
 
static const Packet16uc p16uc_DUPLICATE16_EVEN = {0, 1, 0, 1, 4, 5, 4, 5, 8, 9, 8, 9, 12, 13, 12, 13}
 
static const Packet16uc p16uc_DUPLICATE16_ODD = {2, 3, 2, 3, 6, 7, 6, 7, 10, 11, 10, 11, 14, 15, 14, 15}
 
static Packet16uc p16uc_QUADRUPLICATE16_HI = {0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 2, 3, 2, 3, 2, 3}
 
static Packet16uc p16uc_QUADRUPLICATE16 = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3}
 
static Packet16uc p16uc_MERGEE16 = {0, 1, 16, 17, 4, 5, 20, 21, 8, 9, 24, 25, 12, 13, 28, 29}
 
static Packet16uc p16uc_MERGEO16 = {2, 3, 18, 19, 6, 7, 22, 23, 10, 11, 26, 27, 14, 15, 30, 31}
 
static Packet16uc p16uc_MERGEL16 = {2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31}
 
static Packet16uc p16uc_FORWARD = p16uc_REVERSE32
 
static Packet16uc p16uc_PSET32_WODD
 
static Packet16uc p16uc_PSET32_WEVEN
 
static Packet16uc p16uc_HALF64_0_16
 
static Packet16uc p16uc_PSET64_HI
 
static Packet16uc p16uc_PSET64_LO
 
static Packet16uc p16uc_TRANSPOSE64_HI
 
static Packet16uc p16uc_TRANSPOSE64_LO
 
static Packet16uc p16uc_COMPLEX32_REV
 
static Packet4ui p4ui_CONJ_XOR
 
static Packet2ul p2ul_CONJ_XOR1
 
static Packet2ul p2ul_CONJ_XOR2
 
static Packet2d p2d_ONE = {1.0, 1.0}
 
static Packet2d p2d_ZERO_
 
static Packet4f p4f_MZERO = {0x80000000, 0x80000000, 0x80000000, 0x80000000}
 
static Packet4i p4i_COUNTDOWN = {0, 1, 2, 3}
 
static Packet4f p4f_COUNTDOWN = {0.0, 1.0, 2.0, 3.0}
 
static Packet2d p2d_COUNTDOWN
 
static Packet16uc p16uc_PSET64_HI = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7}
 
static Packet16uc p16uc_DUPLICATE32_HI = {0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7}
 
static Packet16uc p16uc_FORWARD = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
 
static Packet16uc p16uc_REVERSE32 = {12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3}
 
static Packet16uc p16uc_REVERSE64 = {8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7}
 
static Packet16uc p16uc_PSET32_WODD
 
static Packet16uc p16uc_PSET32_WEVEN
 
static Packet16uc p16uc_PSET64_LO
 
static Packet16uc p16uc_TRANSPOSE64_HI = {0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23}
 
static Packet16uc p16uc_TRANSPOSE64_LO = {8, 9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31}
 
static Packet16uc p16uc_COMPLEX32_REV
 
static Packet16uc p16uc_COMPLEX32_REV2
 
const std::ptrdiff_t defaultL1CacheSize = EIGEN_SET_DEFAULT_L1_CACHE_SIZE(16 * 1024)
 
const std::ptrdiff_t defaultL2CacheSize = EIGEN_SET_DEFAULT_L2_CACHE_SIZE(512 * 1024)
 
const std::ptrdiff_t defaultL3CacheSize = EIGEN_SET_DEFAULT_L3_CACHE_SIZE(512 * 1024)
 
const Scalary
 
template<typename A >
constexpr bool is_int_or_enum_v = std::is_enum<A>::value || std::is_integral<A>::value
 
template<typename... Ts>
constexpr EIGEN_DEVICE_FUNCdecltype(reduce< product_op, Ts... >::run((*((Ts *) 0))...)) EIGEN_STRONG_INLIN arg_prod )(Ts... ts)
 
template<typename... Ts>
constexpr decltype(reduce< sum_op, Ts... >::run((*((Ts *) 0))...)) EIGEN_STRONG_INLIN arg_sum )(Ts... ts)
 
static const float matrix_function_separation = 0.1f
 Maximum distance allowed between eigenvalues to be considered "close". More...
 

Detailed Description

Namespace containing low-level routines from the Eigen library.

Typedef Documentation

◆ __attribute__

typedef svfloat32_t PacketXf Eigen::internal::__attribute__((arm_sve_vector_bits(EIGEN_ARM64_SVE_VL)))

◆ add_const_on_value_type_t

template<typename T >
using Eigen::internal::add_const_on_value_type_t = typedef typename add_const_on_value_type<T>::type

◆ cmp_return_t

template<typename LhsScalar , typename RhsScalar , bool UseTypedComparators>
using Eigen::internal::cmp_return_t = typedef typename typed_cmp_helper<LhsScalar, RhsScalar, UseTypedComparators>::type

◆ conj_expr_if

template<bool Cond, typename T >
using Eigen::internal::conj_expr_if = typedef std::conditional<!Cond, const T&, CwiseUnaryOp<scalar_conjugate_op<typename traits<T>::Scalar>, T> >

◆ extract_output_indices

template<typename... Types>
using Eigen::internal::extract_output_indices = typedef typename extract_output_indices_helper<sizeof...(Types), 0, std::index_sequence<>, Types...>::type

◆ IvcType

template<typename Indices , int SizeAtCompileTime>
using Eigen::internal::IvcType = typedef typename internal::IndexedViewHelperIndicesWrapper<Indices, SizeAtCompileTime>::type

◆ Packet16b

◆ Packet16bf

◆ Packet16c

typedef int8x16_t Eigen::internal::Packet16c

◆ Packet16f

◆ Packet16h

◆ Packet16i

typedef __m512i Eigen::internal::Packet16i

◆ Packet16uc

◆ Packet2d

◆ Packet2f

typedef float32x2_t Eigen::internal::Packet2f

◆ Packet2i

typedef int32x2_t Eigen::internal::Packet2i

◆ Packet2l

typedef __vector long long Eigen::internal::Packet2l

◆ Packet2ui

typedef uint32x2_t Eigen::internal::Packet2ui

◆ Packet2ul

typedef __vector unsigned long long Eigen::internal::Packet2ul

◆ Packet32h

typedef __m512h Eigen::internal::Packet32h

◆ Packet4bf

◆ Packet4bi

typedef __vector __bool int Eigen::internal::Packet4bi

◆ Packet4c

◆ Packet4d

typedef __m256d Eigen::internal::Packet4d

◆ Packet4f

typedef __vector float Eigen::internal::Packet4f

◆ Packet4i

typedef __vector int Eigen::internal::Packet4i

◆ Packet4s

typedef int16x4_t Eigen::internal::Packet4s

◆ Packet4uc

◆ Packet4ui

◆ Packet4us

typedef uint16x4_t Eigen::internal::Packet4us

◆ Packet8bf

◆ Packet8bi

typedef __vector __bool short Eigen::internal::Packet8bi

◆ Packet8c

typedef int8x8_t Eigen::internal::Packet8c

◆ Packet8d

typedef __m512d Eigen::internal::Packet8d

◆ Packet8f

typedef __m256 Eigen::internal::Packet8f

◆ Packet8h

◆ Packet8i

typedef __vector short int Eigen::internal::Packet8i

◆ Packet8l

◆ Packet8s

typedef int16x8_t Eigen::internal::Packet8s

◆ Packet8uc

typedef uint8x8_t Eigen::internal::Packet8uc

◆ Packet8ui

◆ Packet8us

typedef uint16x8_t Eigen::internal::Packet8us

◆ reduce_all

template<bool... values>
using Eigen::internal::reduce_all = typedef std::is_same<std::integer_sequence<bool, values..., true>, std::integer_sequence<bool, true, values...> >

◆ reduce_any

template<bool... values>
using Eigen::internal::reduce_any = typedef std::integral_constant<bool, !std::is_same<std::integer_sequence<bool, values..., false>, std::integer_sequence<bool, false, values...> >::value>

◆ remove_all_t

template<typename T >
using Eigen::internal::remove_all_t = typedef typename remove_all<T>::type

◆ SsePrefetchPtrType

◆ vecFullDouble

◆ vecFullFloat

◆ vecHalfDouble

◆ vecHalfFloat

◆ void_t

template<typename... >
using Eigen::internal::void_t = typedef void

Implementation of std::void_t for SFINAE.

Pre C++17: Custom implementation.

Post C++17: Uses std::void_t

◆ WithStorageOrder

template<class Source , int Order>
using Eigen::internal::WithStorageOrder = typedef SparseMatrix<typename Source::Scalar, Order, typename Source::StorageIndex>

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
meta_floor_log2_terminate 
meta_floor_log2_move_up 
meta_floor_log2_move_down 
meta_floor_log2_bogus 
@ meta_floor_log2_terminate
Definition: MathFunctions.h:566
@ meta_floor_log2_move_up
Definition: MathFunctions.h:566
@ meta_floor_log2_move_down
Definition: MathFunctions.h:566
@ meta_floor_log2_bogus
Definition: MathFunctions.h:566

◆ anonymous enum

anonymous enum
Enumerator
SDP_AsScalarProduct 
SDP_AsCwiseProduct 
@ SDP_AsScalarProduct
Definition: SparseDiagonalProduct.h:32
@ SDP_AsCwiseProduct
Definition: SparseDiagonalProduct.h:32

◆ anonymous enum

anonymous enum
Enumerator
SVA_RuntimeSwitch 
SVA_Inner 
SVA_Outer 
@ SVA_Inner
Definition: SparseVector.h:51
@ SVA_Outer
Definition: SparseVector.h:51
@ SVA_RuntimeSwitch
Definition: SparseVector.h:51

◆ anonymous enum

anonymous enum
Enumerator
LUNoMarker 
40 { LUNoMarker = 3 };
@ LUNoMarker
Definition: SparseLU_Memory.h:40

◆ anonymous enum

anonymous enum
Enumerator
emptyIdxLU 
41 { emptyIdxLU = -1 };
@ emptyIdxLU
Definition: SparseLU_Memory.h:41

◆ anonymous enum

anonymous enum
Enumerator
PreconditionIfMoreColsThanRows 
PreconditionIfMoreRowsThanCols 
@ PreconditionIfMoreColsThanRows
Definition: JacobiSVD.h:33
@ PreconditionIfMoreRowsThanCols
Definition: JacobiSVD.h:33

◆ anonymous enum

anonymous enum
Enumerator
ShardByRow 
ShardByCol 
19 { ShardByRow = 0, ShardByCol = 1 };
@ ShardByCol
Definition: TensorContractionBlocking.h:19
@ ShardByRow
Definition: TensorContractionBlocking.h:19

◆ anonymous enum

anonymous enum
Enumerator
Rhs 
Lhs 
20 { Rhs = 0, Lhs = 1 };
@ Lhs
Definition: TensorContractionMapper.h:20
@ Rhs
Definition: TensorContractionMapper.h:20

◆ ComparisonName

Constants for comparison functors

Enumerator
cmp_EQ 
cmp_LT 
cmp_LE 
cmp_UNORD 
cmp_NEQ 
cmp_GT 
cmp_GE 
585  : unsigned int {
586  cmp_EQ = 0,
587  cmp_LT = 1,
588  cmp_LE = 2,
589  cmp_UNORD = 3,
590  cmp_NEQ = 4,
591  cmp_GT = 5,
592  cmp_GE = 6
593 };
@ cmp_NEQ
Definition: Constants.h:590
@ cmp_EQ
Definition: Constants.h:586
@ cmp_GT
Definition: Constants.h:591
@ cmp_LT
Definition: Constants.h:587
@ cmp_GE
Definition: Constants.h:592
@ cmp_LE
Definition: Constants.h:588
@ cmp_UNORD
Definition: Constants.h:589

◆ GEBPPacketSizeType

Enumerator
GEBPPacketFull 
GEBPPacketHalf 
GEBPPacketQuarter 
@ GEBPPacketHalf
Definition: products/GeneralBlockPanelKernel.h:20
@ GEBPPacketQuarter
Definition: products/GeneralBlockPanelKernel.h:20
@ GEBPPacketFull
Definition: products/GeneralBlockPanelKernel.h:20

◆ GEMVPacketSizeType

Enumerator
GEMVPacketFull 
GEMVPacketHalf 
GEMVPacketQuarter 
@ GEMVPacketFull
Definition: GeneralMatrixVector.h:20
@ GEMVPacketHalf
Definition: GeneralMatrixVector.h:20
@ GEMVPacketQuarter
Definition: GeneralMatrixVector.h:20

◆ IgammaComputationMode

Enumerator
VALUE 
DERIVATIVE 
SAMPLE_DERIVATIVE 
@ SAMPLE_DERIVATIVE
Definition: SpecialFunctionsImpl.h:806
@ VALUE
Definition: SpecialFunctionsImpl.h:806
@ DERIVATIVE
Definition: SpecialFunctionsImpl.h:806

◆ MemType

Enumerator
LUSUP 
UCOL 
LSUB 
USUB 
LLVL 
ULVL 
77 { LUSUP, UCOL, LSUB, USUB, LLVL, ULVL };
@ LUSUP
Definition: SparseLU_Structs.h:77
@ LSUB
Definition: SparseLU_Structs.h:77
@ ULVL
Definition: SparseLU_Structs.h:77
@ USUB
Definition: SparseLU_Structs.h:77
@ LLVL
Definition: SparseLU_Structs.h:77
@ UCOL
Definition: SparseLU_Structs.h:77

◆ OptionsMasks

Enumerator
QRPreconditionerBits 
ComputationOptionsBits 
26  {
30 };
@ NoQRPreconditioner
Definition: Constants.h:423
@ HouseholderQRPreconditioner
Definition: Constants.h:425
@ ColPivHouseholderQRPreconditioner
Definition: Constants.h:421
@ FullPivHouseholderQRPreconditioner
Definition: Constants.h:427
@ ComputeFullV
Definition: Constants.h:393
@ ComputeThinV
Definition: Constants.h:395
@ ComputeFullU
Definition: Constants.h:389
@ ComputeThinU
Definition: Constants.h:391
@ QRPreconditionerBits
Definition: SVDBase.h:27
@ ComputationOptionsBits
Definition: SVDBase.h:29

◆ PermPermProduct_t

Enumerator
PermPermProduct 
21 { PermPermProduct };
@ PermPermProduct
Definition: PermutationMatrix.h:21

◆ SignMatrix

Enumerator
PositiveSemiDef 
NegativeSemiDef 
ZeroSign 
Indefinite 
@ PositiveSemiDef
Definition: LDLT.h:34
@ ZeroSign
Definition: LDLT.h:34
@ NegativeSemiDef
Definition: LDLT.h:34
@ Indefinite
Definition: LDLT.h:34

◆ TensorBlockKind

Enumerator
kExpr 
kView 
kMaterializedInScratch 
kMaterializedInOutput 
538  {
539  // Tensor block that is a lazy expression that must be assigned to a
540  // destination using TensorBlockAssign.
541  kExpr,
542 
543  // Tensor block that is a view into a memory buffer owned by an underlying
544  // Tensor expression (e.g. it can be a view into a Tensor buffer).
545  kView,
546 
547  // Tensor block that was materialized in a scratch memory buffer, allocated
548  // with TensorBlockScratchAllocator. This block must be copied to a
549  // destination, similar to a block of `kExpr` type.
551 
552  // Tensor block that was materialized directly into the final output memory
553  // buffer. For example if the left side of an assignment is a Tensor, we can
554  // directly materialize the block in the destination memory.
555  //
556  // If strides in the output buffer do not match tensor block strides, the
557  // Tensor expression will be invalid, and should not be used by
558  // TensorBlockAssign or for constructing another block expression.
560 };
@ kMaterializedInOutput
Definition: TensorBlock.h:559
@ kMaterializedInScratch
Definition: TensorBlock.h:550
@ kView
Definition: TensorBlock.h:545
@ kExpr
Definition: TensorBlock.h:541

◆ TensorBlockShapeType

◆ TiledEvaluation

Enumerator
Off 
On 
186  {
187  Off = 0, // tiled evaluation is not supported
188  On = 1, // still work in progress (see TensorBlock.h)
189 };
@ Off
Definition: TensorForwardDeclarations.h:187
@ On
Definition: TensorForwardDeclarations.h:188

Function Documentation

◆ __UNPACK_TYPE__()

template<typename Packet >
EIGEN_STRONG_INLINE Eigen::internal::__UNPACK_TYPE__ ( Packet  ) const &
1876  {
1878  vec_ste(a, 0, &x);
1879  return x;
1880 }
#define __UNPACK_TYPE__(PACKETNAME)
Definition: AltiVec/PacketMath.h:70
#define EIGEN_ALIGN16
Definition: ConfigureVectorization.h:142
const Scalar * a
Definition: level2_cplx_impl.h:32
list x
Definition: plotDoE.py:28

References a, EIGEN_ALIGN16, and plotDoE::x.

Referenced by bscalec(), bsetzero(), pgather_common(), pload_common(), pload_ignore(), pload_partial_common(), ploadu_common(), ploadu_partial_common(), pscatter_common(), pstore_partial_common(), and pstoreu_partial_common().

◆ _mm_extract_epi64_0()

EIGEN_ALWAYS_INLINE int64_t Eigen::internal::_mm_extract_epi64_0 ( const __m128i &  a)
161  {
162  return numext::bit_cast<int64_t>(_mm_cvtsd_f64(_mm_castsi128_pd(a)));
163 }

References a.

Referenced by pfirst< Packet8l >().

◆ _mm_extract_epi64_1()

EIGEN_ALWAYS_INLINE int64_t Eigen::internal::_mm_extract_epi64_1 ( const __m128i &  a)
164  {
165  return numext::bit_cast<int64_t>(_mm_cvtsd_f64(_mm_shuffle_pd(_mm_castsi128_pd(a), _mm_castsi128_pd(a), 0x1)));
166 }

References a.

◆ absolute_split()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::absolute_split ( const Packet x,
Packet n,
Packet r 
)
1646  {
1647  n = pround(x);
1648  r = psub(x, n);
1649 }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:337
EIGEN_STRONG_INLINE Packet4f pround(const Packet4f &a)
Definition: LSX/PacketMath.h:2555
r
Definition: UniformPSDSelfTest.py:20

References n, pround(), psub(), UniformPSDSelfTest::r, and plotDoE::x.

Referenced by generic_pow_impl().

◆ addResults()

template<Index num_acc>
EIGEN_ALWAYS_INLINE void Eigen::internal::addResults ( Packet4f(&)  acc[num_acc][4])
2853  {
2854  for (Index i = 0, j = 0; j < num_acc; i++, j += 2) {
2855  for (Index x = 0, y = 0; x < 2; x++, y += 2) {
2856  for (Index w = 0, z = 0; w < 2; w++, z += 2) {
2857  acc[i][y + w] = acc[j + x][z + 0] + acc[j + x][z + 1];
2858  }
2859  }
2860  }
2861 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
RowVector3d w
Definition: Matrix_resize_int.cpp:3
Scalar * y
Definition: level1_cplx_impl.h:128
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References i, j, w, plotDoE::x, and y.

◆ aligned_delete()

template<typename T >
EIGEN_DEVICE_FUNC void Eigen::internal::aligned_delete ( T ptr,
std::size_t  size 
)
inline

Deletes objects constructed with aligned_new The size parameters tells on how many objects to call the destructor of T.

430  {
431  destruct_elements_of_array<T>(ptr, size);
432  aligned_free(ptr);
433 }
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
EIGEN_DEVICE_FUNC void aligned_free(void *ptr)
Definition: Memory.h:224

References aligned_free(), and size.

Referenced by check_aligned_new(), dontalign(), EIGEN_DECLARE_TEST(), map_class_matrix(), map_class_vector(), map_static_methods(), and Eigen::internal::gemm_blocking_space< StorageOrder, LhsScalar_, RhsScalar_, MaxRows, MaxCols, MaxDepth, KcFactor, false >::~gemm_blocking_space().

◆ aligned_free()

EIGEN_DEVICE_FUNC void Eigen::internal::aligned_free ( void *  ptr)
inline

Frees memory allocated with aligned_malloc.

224  {
225 #if (EIGEN_DEFAULT_ALIGN_BYTES == 0) || EIGEN_MALLOC_ALREADY_ALIGNED
226 
227  if (ptr != nullptr) {
229  EIGEN_USING_STD(free)
230  free(ptr);
231  }
232 
233 #else
235 #endif
236 }
#define EIGEN_USING_STD(FUNC)
Definition: Macros.h:1090
EIGEN_DEVICE_FUNC void handmade_aligned_free(void *ptr)
Definition: Memory.h:158
EIGEN_DEVICE_FUNC void check_that_malloc_is_allowed()
Definition: Memory.h:107

References check_that_malloc_is_allowed(), EIGEN_USING_STD, and handmade_aligned_free().

Referenced by aligned_delete(), aligned_new(), aligned_realloc(), check_aligned_malloc(), conditional_aligned_free(), Eigen::aligned_allocator< T >::deallocate(), Eigen::DefaultDevice::deallocate(), TestAllocator::deallocate(), and Eigen::internal::aligned_stack_memory_handler< T >::~aligned_stack_memory_handler().

◆ aligned_malloc()

EIGEN_DEVICE_FUNC void* Eigen::internal::aligned_malloc ( std::size_t  size)
inline

Allocates size bytes. The returned pointer is guaranteed to have 16 or 32 bytes alignment depending on the requirements. On allocation error, the returned pointer is null, and std::bad_alloc is thrown.

199  {
200  if (size == 0) return nullptr;
201 
202  void* result;
203 #if (EIGEN_DEFAULT_ALIGN_BYTES == 0) || EIGEN_MALLOC_ALREADY_ALIGNED
204 
206  EIGEN_USING_STD(malloc)
207  result = malloc(size);
208 
209 #if EIGEN_DEFAULT_ALIGN_BYTES == 16
210  eigen_assert((size < 16 || (std::size_t(result) % 16) == 0) &&
211  "System's malloc returned an unaligned pointer. Compile with EIGEN_MALLOC_ALREADY_ALIGNED=0 to fallback "
212  "to handmade aligned memory allocator.");
213 #endif
214 #else
215  result = handmade_aligned_malloc(size);
216 #endif
217 
218  if (!result && size) throw_std_bad_alloc();
219 
220  return result;
221 }
#define eigen_assert(x)
Definition: Macros.h:910
EIGEN_DEVICE_FUNC void throw_std_bad_alloc()
Definition: Memory.h:110
EIGEN_DEVICE_FUNC void * handmade_aligned_malloc(std::size_t size, std::size_t alignment=EIGEN_DEFAULT_ALIGN_BYTES)
Definition: Memory.h:142

References check_that_malloc_is_allowed(), eigen_assert, EIGEN_USING_STD, handmade_aligned_malloc(), size, and throw_std_bad_alloc().

Referenced by aligned_new(), aligned_realloc(), Eigen::DefaultDevice::allocate(), TestAllocator::allocate(), Eigen::aligned_allocator< T >::allocate(), check_aligned_malloc(), conditional_aligned_malloc(), and Eigen::internal::trmv_selector< Mode, RowMajor >::run().

◆ aligned_new()

template<typename T >
EIGEN_DEVICE_FUNC T* Eigen::internal::aligned_new ( std::size_t  size)
inline

Allocates size objects of type T. The returned pointer is guaranteed to have 16 bytes alignment. On allocation error, the returned pointer is undefined, but a std::bad_alloc is thrown. The default constructor of T is called.

403  {
404  check_size_for_overflow<T>(size);
405  T* result = static_cast<T*>(aligned_malloc(sizeof(T) * size));
407  EIGEN_CATCH(...) {
408  aligned_free(result);
409  EIGEN_THROW;
410  }
411  return result;
412 }
#define EIGEN_CATCH(X)
Definition: Macros.h:1264
#define EIGEN_THROW
Definition: Macros.h:1261
#define EIGEN_TRY
Definition: Macros.h:1263
EIGEN_DEVICE_FUNC void * aligned_malloc(std::size_t size)
Definition: Memory.h:199
EIGEN_DEVICE_FUNC T * default_construct_elements_of_array(T *ptr, std::size_t size)
Definition: Memory.h:344

References aligned_free(), aligned_malloc(), default_construct_elements_of_array(), EIGEN_CATCH, EIGEN_THROW, EIGEN_TRY, and size.

◆ aligned_realloc()

EIGEN_DEVICE_FUNC void* Eigen::internal::aligned_realloc ( void *  ptr,
std::size_t  new_size,
std::size_t  old_size 
)
inline

Reallocates an aligned block of memory.

Exceptions
std::bad_allocon allocation failure
243  {
244  if (ptr == nullptr) return aligned_malloc(new_size);
245  if (old_size == new_size) return ptr;
246  if (new_size == 0) {
247  aligned_free(ptr);
248  return nullptr;
249  }
250 
251  void* result;
252 #if (EIGEN_DEFAULT_ALIGN_BYTES == 0) || EIGEN_MALLOC_ALREADY_ALIGNED
253  EIGEN_UNUSED_VARIABLE(old_size)
254 
256  EIGEN_USING_STD(realloc)
257  result = realloc(ptr, new_size);
258 #else
259  result = handmade_aligned_realloc(ptr, new_size, old_size);
260 #endif
261 
262  if (!result && new_size) throw_std_bad_alloc();
263 
264  return result;
265 }
#define EIGEN_UNUSED_VARIABLE(var)
Definition: Macros.h:966
EIGEN_DEVICE_FUNC void * handmade_aligned_realloc(void *ptr, std::size_t new_size, std::size_t old_size, std::size_t alignment=EIGEN_DEFAULT_ALIGN_BYTES)
Reallocates aligned memory. Since we know that our handmade version is based on std::malloc we can us...
Definition: Memory.h:174

References aligned_free(), aligned_malloc(), check_that_malloc_is_allowed(), EIGEN_UNUSED_VARIABLE, EIGEN_USING_STD, handmade_aligned_realloc(), and throw_std_bad_alloc().

Referenced by conditional_aligned_realloc().

◆ all() [1/2]

◆ all() [2/2]

template<typename T , typename... Ts>
EIGEN_DEVICE_FUNC bool Eigen::internal::all ( T  t,
Ts...  ts 
)
1279  { return true; }
1280 
1281 template <typename T, typename... Ts>
Eigen::Triplet< double > T
Definition: EigenUnitTest.cpp:11

◆ all_indices_known_statically()

template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool Eigen::internal::all_indices_known_statically ( )
static
578  {
580 }
void run(const string &dir_name, LinearSolver *linear_solver_pt, const unsigned nel_1d, bool mess_up_order)
Definition: two_d_poisson_compare_solvers.cc:317

References Eigen::internal::all_indices_known_statically_impl< T >::run().

◆ amd_flip()

template<typename T >
T Eigen::internal::amd_flip ( const T i)
inline
32  {
33  return -i - 2;
34 }

References i.

Referenced by amd_mark(), amd_unflip(), and minimum_degree_ordering().

◆ amd_mark()

template<typename T0 , typename T1 >
void Eigen::internal::amd_mark ( const T0 *  w,
const T1 &  j 
)
inline
44  {
45  return w[j] = amd_flip(w[j]);
46 }
T amd_flip(const T &i)
Definition: Amd.h:32

References amd_flip(), j, and w.

◆ amd_marked()

template<typename T0 , typename T1 >
bool Eigen::internal::amd_marked ( const T0 *  w,
const T1 &  j 
)
inline
40  {
41  return w[j] < 0;
42 }

References j, and w.

◆ amd_unflip()

template<typename T >
T Eigen::internal::amd_unflip ( const T i)
inline
36  {
37  return i < 0 ? amd_flip(i) : i;
38 }

References amd_flip(), and i.

◆ apply_block_householder_on_the_left()

template<typename MatrixType , typename VectorsType , typename CoeffsType >
void Eigen::internal::apply_block_householder_on_the_left ( MatrixType mat,
const VectorsType &  vectors,
const CoeffsType &  hCoeffs,
bool  forward 
)

if forward then perform mat = H0 * H1 * H2 * mat otherwise perform mat = H2 * H1 * H0 * mat

87  {
88  enum { TFactorSize = VectorsType::ColsAtCompileTime };
89  Index nbVecs = vectors.cols();
90  Matrix<typename MatrixType::Scalar, TFactorSize, TFactorSize, RowMajor> T(nbVecs, nbVecs);
91 
92  if (forward)
94  else
95  make_block_householder_triangular_factor(T, vectors, hCoeffs.conjugate());
96  const TriangularView<const VectorsType, UnitLower> V(vectors);
97 
98  // A -= V T V^* A
99  Matrix<typename MatrixType::Scalar, VectorsType::ColsAtCompileTime, MatrixType::ColsAtCompileTime,
100  (VectorsType::MaxColsAtCompileTime == 1 && MatrixType::MaxColsAtCompileTime != 1) ? RowMajor : ColMajor,
101  VectorsType::MaxColsAtCompileTime, MatrixType::MaxColsAtCompileTime>
102  tmp = V.adjoint() * mat;
103  // FIXME add .noalias() once the triangular product can work inplace
104  if (forward)
105  tmp = T.template triangularView<Upper>() * tmp;
106  else
107  tmp = T.template triangularView<Upper>().adjoint() * tmp;
108  mat.noalias() -= V * tmp;
109 }
MatrixXcd V
Definition: EigenSolver_EigenSolver_MatrixType.cpp:15
Eigen::SparseMatrix< double > mat
Definition: EigenUnitTest.cpp:10
SCALAR Scalar
Definition: bench_gemm.cpp:45
@ ColMajor
Definition: Constants.h:318
@ RowMajor
Definition: Constants.h:320
Eigen::Matrix< Scalar, Dynamic, Dynamic, ColMajor > tmp
Definition: level3_impl.h:365
void make_block_householder_triangular_factor(TriangularFactorType &triFactor, const VectorsType &vectors, const CoeffsType &hCoeffs)
Definition: BlockHouseholder.h:55

References Eigen::ColMajor, make_block_householder_triangular_factor(), Eigen::RowMajor, tmp, and V.

Referenced by Eigen::HouseholderSequence< VectorsType, CoeffsType, Side >::applyThisOnTheLeft(), and Eigen::internal::householder_qr_inplace_blocked< MatrixQR, HCoeffs, MatrixQRScalar, InnerStrideIsOne >::run().

◆ apply_rotation_in_the_plane()

template<typename VectorX , typename VectorY , typename OtherScalar >
EIGEN_DEVICE_FUNC void Eigen::internal::apply_rotation_in_the_plane ( DenseBase< VectorX > &  xpr_x,
DenseBase< VectorY > &  xpr_y,
const JacobiRotation< OtherScalar > &  j 
)

\jacobi_module Applies the clock wise 2D rotation j to the set of 2D vectors of coordinates x and y: \( \left ( \begin{array}{cc} x \\ y \end{array} \right ) = J \left ( \begin{array}{cc} x \\ y \end{array} \right ) \)

See also
MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
401  {
402  typedef typename VectorX::Scalar Scalar;
403  constexpr bool Vectorizable = (int(evaluator<VectorX>::Flags) & int(evaluator<VectorY>::Flags) & PacketAccessBit) &&
405 
406  eigen_assert(xpr_x.size() == xpr_y.size());
407  Index size = xpr_x.size();
408  Index incrx = xpr_x.derived().innerStride();
409  Index incry = xpr_y.derived().innerStride();
410 
411  Scalar* EIGEN_RESTRICT x = &xpr_x.derived().coeffRef(0);
412  Scalar* EIGEN_RESTRICT y = &xpr_y.derived().coeffRef(0);
413 
414  OtherScalar c = j.c();
415  OtherScalar s = j.s();
417 
418  constexpr int Alignment = (std::min)(int(evaluator<VectorX>::Alignment), int(evaluator<VectorY>::Alignment));
420  x, incrx, y, incry, size, c, s);
421 }
#define EIGEN_RESTRICT
Definition: Macros.h:1067
internal::traits< Derived >::Scalar Scalar
Definition: PlainObjectBase.h:127
#define min(a, b)
Definition: datatypes.h:22
const unsigned int PacketAccessBit
Definition: Constants.h:97
RealScalar s
Definition: level1_cplx_impl.h:130
return int(ret)+1
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool is_exactly_zero(const X &x)
Definition: Meta.h:592
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool is_exactly_one(const X &x)
Definition: Meta.h:601
int c
Definition: calibrate.py:100
@ size
Definition: GenericPacketMath.h:113

References calibrate::c, eigen_assert, EIGEN_RESTRICT, int(), Eigen::numext::is_exactly_one(), Eigen::numext::is_exactly_zero(), j, min, Eigen::PacketAccessBit, Eigen::internal::apply_rotation_in_the_plane_selector< Scalar, OtherScalar, SizeAtCompileTime, MinAlignment, Vectorizable >::run(), s, size, plotDoE::x, and y.

Referenced by Eigen::MatrixBase< Derived >::applyOnTheLeft(), Eigen::MatrixBase< Derived >::applyOnTheRight(), llt_rank_update_lower(), and rot().

◆ array_apply()

template<typename Op , typename A , std::size_t N>
constexpr EIGEN_STRONG_INLINE array<decltype(Op::run(A())), N> Eigen::internal::array_apply ( array< A, N a)
constexpr
549  {
550  return h_array_apply<Op>(a, typename gen_numeric_list<int, N>::type());
551 }
type
Definition: compute_granudrum_aor.py:141

References a.

◆ array_apply_and_reduce()

template<typename Reducer , typename Op , typename A , std::size_t N>
constexpr EIGEN_STRONG_INLINE auto Eigen::internal::array_apply_and_reduce ( array< A, N a) -> decltype(h_array_apply_and_reduce<Reducer, Op, A, N>(a, typename gen_numeric_list<int, N>::type()))
constexpr

◆ array_get() [1/15]

template<DenseIndex n, typename Index , std::size_t Rank>
const Index Eigen::internal::array_get ( const DimensionList< Index, Rank > &  )
49  {
50  return n;
51 }

References n.

◆ array_get() [2/15]

template<Index N, typename FirstType , typename... OtherTypes>
constexpr EIGEN_DEVICE_FUNC Index Eigen::internal::array_get ( const IndexList< FirstType, OtherTypes... > &  a)
constexpr
380  {
381  return IndexTupleExtractor<N, FirstType, OtherTypes...>::get_val(a);
382 }

References a.

◆ array_get() [3/15]

template<int N, typename T , typename... O>
constexpr EIGEN_DEVICE_FUNC const IndexTupleExtractor<N, T, O...>::ValType& Eigen::internal::array_get ( const IndexTuple< T, O... > &  tuple)
constexpr
192  {
193  return IndexTupleExtractor<N, T, O...>::get_val(tuple);
194 }
TupleImpl< sizeof...(Types), Types... > tuple
Definition: Tuple.h:267

◆ array_get() [4/15]

template<std::size_t n, typename T , T a, T... as>
constexpr T Eigen::internal::array_get ( const numeric_list< T, a, as... > &  )
constexpr
219  {
220  return get<(int)n, numeric_list<T, a, as...>>::value;
221 }
squared absolute value
Definition: GlobalFunctions.h:87
Container::iterator get(Container &c, Position position)
Definition: stdlist_overload.cpp:29

References int(), n, and Eigen::value.

◆ array_get() [5/15]

template<std::ptrdiff_t n, typename std::ptrdiff_t... Indices>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t Eigen::internal::array_get ( const Sizes< Indices... > &  )
294  {
295  return get<n, internal::numeric_list<std::ptrdiff_t, Indices...> >::value;
296 }

References n, and Eigen::value.

◆ array_get() [6/15]

template<std::ptrdiff_t n>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t Eigen::internal::array_get ( const Sizes<> &  )
298  {
299  eigen_assert(false && "should never be called");
300  return -1;
301 }

References eigen_assert.

◆ array_get() [7/15]

template<DenseIndex n, typename Index , std::size_t Rank>
const Index Eigen::internal::array_get ( DimensionList< Index, Rank > &  )
45  {
46  return n;
47 }

References n.

◆ array_get() [8/15]

template<Index N, typename FirstType , typename... OtherTypes>
constexpr EIGEN_DEVICE_FUNC Index Eigen::internal::array_get ( IndexList< FirstType, OtherTypes... > &  a)
constexpr
376  {
377  return IndexTupleExtractor<N, FirstType, OtherTypes...>::get_val(a);
378 }

References a.

◆ array_get() [9/15]

template<int N, typename T , typename... O>
constexpr EIGEN_DEVICE_FUNC IndexTupleExtractor<N, T, O...>::ValType& Eigen::internal::array_get ( IndexTuple< T, O... > &  tuple)
constexpr
187  {
188  return IndexTupleExtractor<N, T, O...>::get_val(tuple);
189 }

◆ array_get() [10/15]

template<std::size_t I_, class T , std::size_t N>
constexpr T&& Eigen::internal::array_get ( std::array< T, N > &&  a)
inlineconstexpr
255  {
256  return (T&&)STD_GET_ARR_HACK;
257 }
#define STD_GET_ARR_HACK
Definition: EmulateArray.h:247

References STD_GET_ARR_HACK.

◆ array_get() [11/15]

◆ array_get() [12/15]

template<std::size_t I_, class T , std::size_t N>
constexpr T const& Eigen::internal::array_get ( std::array< T, N > const &  a)
inlineconstexpr
259  {
260  return (T const&)STD_GET_ARR_HACK;
261 }

References STD_GET_ARR_HACK.

◆ array_get() [13/15]

template<std::size_t I_, class T >
constexpr T&& Eigen::internal::array_get ( std::vector< T > &&  a)
inlineconstexpr
43  {
44  return a[I_];
45 }

References a.

◆ array_get() [14/15]

template<std::size_t I_, class T >
constexpr T& Eigen::internal::array_get ( std::vector< T > &  a)
inlineconstexpr
39  {
40  return a[I_];
41 }

References a.

◆ array_get() [15/15]

template<std::size_t I_, class T >
constexpr T const& Eigen::internal::array_get ( std::vector< T > const &  a)
inlineconstexpr
47  {
48  return a[I_];
49 }

References a.

◆ array_prod() [1/4]

template<typename T , std::size_t N>
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto Eigen::internal::array_prod ( const array< T, N > &  arr) -> decltype(array_reduce<product_op, T, N>(arr, static_cast<T>(1)))
constexpr
498  {
499  return array_reduce<product_op, T, N>(arr, static_cast<T>(1));
500 }

Referenced by Eigen::TensorReductionEvaluatorBase< const TensorReductionOp< Op, Dims, ArgType, MakePointer_ >, Device >::costPerCoeff(), Eigen::TensorEvaluator< const TensorSlicingOp< StartIndices, Sizes, ArgType >, Device >::evalSubExprsIfNeeded(), Eigen::TensorEvaluator< const TensorScanOp< Op, ArgType >, Device >::evalSubExprsIfNeeded(), Eigen::TensorEvaluator< const TensorForcedEvalOp< ArgType_ >, Device >::evalSubExprsIfNeeded(), Eigen::TensorReductionEvaluatorBase< const TensorReductionOp< Op, Dims, ArgType, MakePointer_ >, Device >::evalSubExprsIfNeededCommon(), Eigen::internal::TensorBlockMapper< NumDims, Layout, IndexType >::InitializeBlockDimensions(), Eigen::internal::ScanLauncher< Self, Reducer, Eigen::SyclDevice, vectorize >::operator()(), Eigen::internal::ScanLauncher< Self, Reducer, Device, Vectorize >::operator()(), Eigen::TensorEvaluator< const TensorSlicingOp< StartIndices, Sizes, ArgType >, Device >::packet(), Eigen::TensorReductionEvaluatorBase< const TensorReductionOp< Op, Dims, ArgType, MakePointer_ >, Device >::packet(), Eigen::Tensor< Scalar_, NumIndices_, Options_, IndexType_ >::resize(), Eigen::TensorStorage< T, DSizes< IndexType, NumIndices_ >, Options_ >::resize(), Eigen::internal::TensorExecutor< Expression, DefaultDevice, true, TiledEvaluation::Off >::run(), Eigen::internal::TensorExecutor< Expression, Device, Vectorizable, Tiling >::run(), Eigen::internal::FullReducer< Self, Op, Device, Vectorizable >::run(), Eigen::internal::TensorPrinter< Tensor, rank, TensorIOFormatLegacy, std::enable_if_t< rank !=0 > >::run(), Eigen::internal::TensorPrinter< Tensor, rank, Format, EnableIf >::run(), Eigen::TensorEvaluator< const TensorPairReducerOp< ReduceOp, Dims, ArgType >, Device >::TensorEvaluator(), Eigen::TensorEvaluator< const TensorReshapingOp< NewDimensions, ArgType >, Device >::TensorEvaluator(), Eigen::TensorReductionEvaluatorBase< const TensorReductionOp< Op, Dims, ArgType, MakePointer_ >, Device >::TensorReductionEvaluatorBase(), Eigen::TensorStorage< T, DSizes< IndexType, NumIndices_ >, Options_ >::TensorStorage(), test_0d(), test_array_reverse_and_reduce(), test_first_dim_reductions_max_with_offset_sycl(), test_full_reductions_max_with_offset_sycl(), test_full_reductions_mean_with_offset_sycl(), test_full_reductions_min_with_offset_sycl(), test_full_reductions_sum_with_offset_sycl(), test_last_dim_reductions_max_with_offset_sycl(), test_rank_zero(), Eigen::DSizes< DenseIndex, NumDims >::TotalSize(), and Eigen::TensorStorage< T, DSizes< IndexType, NumIndices_ >, Options_ >::~TensorStorage().

◆ array_prod() [2/4]

template<typename FirstType , typename... OtherTypes>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index Eigen::internal::array_prod ( const IndexList< FirstType, OtherTypes... > &  sizes)
348  {
349  Index result = 1;
351  for (size_t i = 0; i < array_size<IndexList<FirstType, OtherTypes...>>::value; ++i) {
352  result *= sizes[i];
353  }
354  return result;
355 }
#define EIGEN_UNROLL_LOOP
Definition: Macros.h:1298
std::vector< Array2i > sizes
Definition: dense_solvers.cpp:12

References EIGEN_UNROLL_LOOP, i, sizes, and Eigen::value.

◆ array_prod() [3/4]

template<typename std::ptrdiff_t... Indices>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t Eigen::internal::array_prod ( const Sizes< Indices... > &  )
130  {
131  return Sizes<Indices...>::total_size;
132 }

◆ array_prod() [4/4]

template<typename t >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE t Eigen::internal::array_prod ( const std::vector< t > &  a)
503  {
504  eigen_assert(a.size() > 0);
505  t prod = 1;
506  for (size_t i = 0; i < a.size(); ++i) {
507  prod *= a[i];
508  }
509  return prod;
510 }
t
Definition: plotPSD.py:36
EIGEN_DONT_INLINE void prod(const Lhs &a, const Rhs &b, Res &c)
Definition: product_threshold.cpp:53

References a, eigen_assert, i, Eigen::prod(), and plotPSD::t.

◆ array_reduce()

template<typename Reducer , typename T , std::size_t N>
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto Eigen::internal::array_reduce ( const array< T, N > &  arr,
T  identity 
) -> decltype(h_array_reduce<Reducer, T, N>::run(arr, identity))
constexpr

◆ array_reverse()

template<typename T , std::size_t N>
constexpr EIGEN_STRONG_INLINE array<T, N> Eigen::internal::array_reverse ( array< T, N arr)
constexpr
453  {
454  return h_array_reverse(arr, typename gen_numeric_list<int, N>::type());
455 }
constexpr EIGEN_STRONG_INLINE Array h_array_reverse(Array arr, numeric_list< int, n... >)
Definition: MoreMeta.h:448

References h_array_reverse().

Referenced by test_array_reverse_and_reduce().

◆ array_sum()

template<typename T , std::size_t N>
constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto Eigen::internal::array_sum ( const array< T, N > &  arr) -> decltype(array_reduce<sum_op, T, N>(arr, static_cast<T>(0)))
constexpr
492  {
493  return array_reduce<sum_op, T, N>(arr, static_cast<T>(0));
494 }

Referenced by test_array_reverse_and_reduce().

◆ array_zip()

template<typename Op , typename A , typename B , std::size_t N>
constexpr EIGEN_STRONG_INLINE array<decltype(Op::run(A(), B())), N> Eigen::internal::array_zip ( array< A, N a,
array< B, N b 
)
constexpr
521  {
522  return h_array_zip<Op>(a, b, typename gen_numeric_list<int, N>::type());
523 }
Scalar * b
Definition: benchVecAdd.cpp:17

References a, and b.

◆ array_zip_and_reduce()

template<typename Reducer , typename Op , typename A , typename B , std::size_t N>
constexpr EIGEN_STRONG_INLINE auto Eigen::internal::array_zip_and_reduce ( array< A, N a,
array< B, N b 
) -> decltype(h_array_zip_and_reduce<Reducer, Op, A, B, N>(a, b, typename gen_numeric_list<int, N>::type()))
constexpr
537  {
538  return h_array_zip_and_reduce<Reducer, Op, A, B, N>(a, b, typename gen_numeric_list<int, N>::type());
539 }

References a, and b.

Referenced by Eigen::TensorFixedSize< Scalar_, Dimensions_, Options_, IndexType >::checkIndexRange(), and Eigen::Tensor< Scalar_, NumIndices_, Options_, IndexType_ >::checkIndexRange().

◆ assign_sparse_to_sparse()

template<typename DstXprType , typename SrcXprType >
void Eigen::internal::assign_sparse_to_sparse ( DstXprType &  dst,
const SrcXprType &  src 
)
81  {
82  typedef typename DstXprType::Scalar Scalar;
83  typedef internal::evaluator<DstXprType> DstEvaluatorType;
84  typedef internal::evaluator<SrcXprType> SrcEvaluatorType;
85 
86  SrcEvaluatorType srcEvaluator(src);
87 
88  constexpr bool transpose = (DstEvaluatorType::Flags & RowMajorBit) != (SrcEvaluatorType::Flags & RowMajorBit);
89  const Index outerEvaluationSize = (SrcEvaluatorType::Flags & RowMajorBit) ? src.rows() : src.cols();
90 
91  Index reserveSize = 0;
92  for (Index j = 0; j < outerEvaluationSize; ++j)
93  for (typename SrcEvaluatorType::InnerIterator it(srcEvaluator, j); it; ++it) reserveSize++;
94 
95  if ((!transpose) && src.isRValue()) {
96  // eval without temporary
97  dst.resize(src.rows(), src.cols());
98  dst.setZero();
99  dst.reserve(reserveSize);
100  for (Index j = 0; j < outerEvaluationSize; ++j) {
101  dst.startVec(j);
102  for (typename SrcEvaluatorType::InnerIterator it(srcEvaluator, j); it; ++it) {
103  Scalar v = it.value();
104  dst.insertBackByOuterInner(j, it.index()) = v;
105  }
106  }
107  dst.finalize();
108  } else {
109  // eval through a temporary
110  eigen_assert((((internal::traits<DstXprType>::SupportedAccessPatterns & OuterRandomAccessPattern) ==
112  (!((DstEvaluatorType::Flags & RowMajorBit) != (SrcEvaluatorType::Flags & RowMajorBit)))) &&
113  "the transpose operation is supposed to be handled in SparseMatrix::operator=");
114 
115  enum { Flip = (DstEvaluatorType::Flags & RowMajorBit) != (SrcEvaluatorType::Flags & RowMajorBit) };
116 
117  DstXprType temp(src.rows(), src.cols());
118 
119  temp.reserve(reserveSize);
120  for (Index j = 0; j < outerEvaluationSize; ++j) {
121  temp.startVec(j);
122  for (typename SrcEvaluatorType::InnerIterator it(srcEvaluator, j); it; ++it) {
123  Scalar v = it.value();
124  temp.insertBackByOuterInner(Flip ? it.index() : j, Flip ? j : it.index()) = v;
125  }
126  }
127  temp.finalize();
128 
129  dst = temp.markAsRValue();
130  }
131 }
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
const unsigned int RowMajorBit
Definition: Constants.h:70
const int OuterRandomAccessPattern
Definition: SparseUtil.h:43
void transpose()
Definition: skew_symmetric_matrix3.cpp:135

References eigen_assert, j, Eigen::OuterRandomAccessPattern, Eigen::RowMajorBit, anonymous_namespace{skew_symmetric_matrix3.cpp}::transpose(), and v.

Referenced by Eigen::internal::Assignment< DstXprType, SrcXprType, Functor, Sparse2Sparse >::run().

◆ asSluMatrix()

template<typename MatrixType >
SluMatrix Eigen::internal::asSluMatrix ( MatrixType mat)
254  {
255  return SluMatrix::Map(mat);
256 }

References Eigen::SluMatrix::Map().

Referenced by Eigen::SuperLUBase< MatrixType_, Derived >::initFactorization().

◆ avx512_blend_mask()

template<size_t N>
EIGEN_STRONG_INLINE int Eigen::internal::avx512_blend_mask ( const Selector< N > &  ifPacket)
2181  {
2182  alignas(__m128i) uint8_t aux[sizeof(__m128i)];
2183  for (size_t i = 0; i < N; i++) aux[i] = static_cast<uint8_t>(ifPacket.select[i]);
2184  __m128i paux = _mm_sub_epi8(_mm_setzero_si128(), _mm_load_si128(reinterpret_cast<const __m128i*>(aux)));
2185  return _mm_movemask_epi8(paux);
2186 }
std::uint8_t uint8_t
Definition: Meta.h:36

References i, and Eigen::internal::Selector< N >::select.

Referenced by pblend().

◆ avx_blend_mask() [1/2]

EIGEN_STRONG_INLINE __m256i Eigen::internal::avx_blend_mask ( const Selector< 4 > &  ifPacket)
2175  {
2176  return _mm256_set_epi64x(0 - ifPacket.select[3], 0 - ifPacket.select[2], 0 - ifPacket.select[1],
2177  0 - ifPacket.select[0]);
2178 }

References Eigen::internal::Selector< N >::select.

Referenced by pblend().

◆ avx_blend_mask() [2/2]

EIGEN_STRONG_INLINE __m256i Eigen::internal::avx_blend_mask ( const Selector< 8 > &  ifPacket)
2180  {
2181  return _mm256_set_epi32(0 - ifPacket.select[7], 0 - ifPacket.select[6], 0 - ifPacket.select[5],
2182  0 - ifPacket.select[4], 0 - ifPacket.select[3], 0 - ifPacket.select[2],
2183  0 - ifPacket.select[1], 0 - ifPacket.select[0]);
2184 }

References Eigen::internal::Selector< N >::select.

◆ band()

template<typename Packet , int N>
EIGEN_ALWAYS_INLINE void Eigen::internal::band ( PacketBlock< Packet, N > &  acc,
const Packet pMask 
)
1566  {
1567  for (int M = 0; M < N; M++) {
1568  acc.packet[M] = pand<Packet>(acc.packet[M], pMask);
1569  }
1570 }
Matrix< RealScalar, Dynamic, Dynamic > M
Definition: bench_gemm.cpp:50
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
@ N
Definition: constructor.cpp:22

References N, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ bcouple()

template<typename Packet , typename Packetc , int N, bool full>
EIGEN_ALWAYS_INLINE void Eigen::internal::bcouple ( PacketBlock< Packet, N > &  taccReal,
PacketBlock< Packet, N > &  taccImag,
PacketBlock< Packetc, N *2 > &  tRes,
PacketBlock< Packetc, N > &  acc1,
PacketBlock< Packetc, N > &  acc2 
)
1775  {
1776  bcouple_common<Packet, Packetc, N, full>(taccReal, taccImag, acc1, acc2);
1777 
1778  for (int M = 0; M < N; M++) {
1779  acc1.packet[M] = padd<Packetc>(tRes.packet[M], acc1.packet[M]);
1780  }
1781 
1782  if (full) {
1783  for (int M = 0; M < N; M++) {
1784  acc2.packet[M] = padd<Packetc>(tRes.packet[M + N], acc2.packet[M]);
1785  }
1786  }
1787 }

References N, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ bcouple_common()

template<typename Packet , typename Packetc , int N, bool full>
EIGEN_ALWAYS_INLINE void Eigen::internal::bcouple_common ( PacketBlock< Packet, N > &  taccReal,
PacketBlock< Packet, N > &  taccImag,
PacketBlock< Packetc, N > &  acc1,
PacketBlock< Packetc, N > &  acc2 
)
1760  {
1761  for (int M = 0; M < N; M++) {
1762  acc1.packet[M].v = vec_mergeh(taccReal.packet[M], taccImag.packet[M]);
1763  }
1764 
1765  if (full) {
1766  for (int M = 0; M < N; M++) {
1767  acc2.packet[M].v = vec_mergel(taccReal.packet[M], taccImag.packet[M]);
1768  }
1769  }
1770 }

References N, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ Bf16PackHigh()

template<bool lohi>
EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::Bf16PackHigh ( Packet4f  hi,
Packet4f  lo 
)
2154  {
2155  if (lohi) {
2156  return vec_perm(reinterpret_cast<Packet8us>(hi), reinterpret_cast<Packet8us>(lo), p16uc_MERGEL16);
2157  } else {
2158  return vec_perm(reinterpret_cast<Packet8us>(hi), reinterpret_cast<Packet8us>(lo), p16uc_MERGEO16);
2159  }
2160 }
static Packet16uc p16uc_MERGEO16
Definition: AltiVec/PacketMath.h:109
__vector unsigned short int Packet8us
Definition: AltiVec/PacketMath.h:38
static Packet16uc p16uc_MERGEL16
Definition: AltiVec/PacketMath.h:113

References p16uc_MERGEL16, and p16uc_MERGEO16.

◆ Bf16PackLow()

template<bool lohi>
EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::Bf16PackLow ( Packet4f  hi,
Packet4f  lo 
)
2145  {
2146  if (lohi) {
2147  return vec_pack(reinterpret_cast<Packet4ui>(hi), reinterpret_cast<Packet4ui>(lo));
2148  } else {
2149  return vec_perm(reinterpret_cast<Packet8us>(hi), reinterpret_cast<Packet8us>(lo), p16uc_MERGEE16);
2150  }
2151 }
static Packet16uc p16uc_MERGEE16
Definition: AltiVec/PacketMath.h:108
__vector unsigned int Packet4ui
Definition: AltiVec/PacketMath.h:35

References p16uc_MERGEE16.

◆ Bf16ToF32() [1/3]

EIGEN_STRONG_INLINE Packet16f Eigen::internal::Bf16ToF32 ( const Packet16bf a)
2747  {
2748  return _mm512_castsi512_ps(_mm512_slli_epi32(_mm512_cvtepu16_epi32(a), 16));
2749 }

References a.

◆ Bf16ToF32() [2/3]

EIGEN_STRONG_INLINE Packet4f Eigen::internal::Bf16ToF32 ( const Packet4bf p)
4818  {
4819  return Packet4f(vreinterpretq_f32_u32(vshlq_n_u32(vmovl_u16(p), 16)));
4820 }
float * p
Definition: Tutorial_Map_using.cpp:9
__vector float Packet4f
Definition: AltiVec/PacketMath.h:33

References p.

◆ Bf16ToF32() [3/3]

EIGEN_STRONG_INLINE Packet8f Eigen::internal::Bf16ToF32 ( const Packet8bf a)
2558  {
2559 #ifdef EIGEN_VECTORIZE_AVX2
2560  __m256i extend = _mm256_cvtepu16_epi32(a);
2561  return _mm256_castsi256_ps(_mm256_slli_epi32(extend, 16));
2562 #else
2563  __m128i lo = _mm_cvtepu16_epi32(a);
2564  __m128i hi = _mm_cvtepu16_epi32(_mm_srli_si128(a, 8));
2565  __m128i lo_shift = _mm_slli_epi32(lo, 16);
2566  __m128i hi_shift = _mm_slli_epi32(hi, 16);
2567  return _mm256_castsi256_ps(_mm256_insertf128_si256(_mm256_castsi128_si256(lo_shift), hi_shift, 1));
2568 #endif
2569 }

References a.

Referenced by pabs(), pabsdiff< Packet4bf >(), padd< Packet16bf >(), padd< Packet4bf >(), pcast< Packet16bf, Packet16f >(), pcast< Packet8bf, Packet8f >(), pceil< Packet16bf >(), pceil< Packet4bf >(), pcmp_eq(), pcmp_eq< Packet4bf >(), pcmp_le(), pcmp_le< Packet4bf >(), pcmp_lt(), pcmp_lt< Packet4bf >(), pcmp_lt_or_nan(), pcmp_lt_or_nan< Packet4bf >(), pdiv< Packet16bf >(), pdiv< Packet4bf >(), pfloor< Packet16bf >(), pfloor< Packet4bf >(), pfrexp(), pldexp(), pmax< Packet16bf >(), pmax< Packet4bf >(), pmax< PropagateNaN, Packet4bf >(), pmax< PropagateNumbers, Packet4bf >(), pmin< Packet16bf >(), pmin< Packet4bf >(), pmin< PropagateNaN, Packet4bf >(), pmin< PropagateNumbers, Packet4bf >(), pmul< Packet16bf >(), pmul< Packet4bf >(), predux< Packet16bf >(), predux< Packet4bf >(), predux_max< Packet16bf >(), predux_max< Packet4bf >(), predux_min< Packet16bf >(), predux_min< Packet4bf >(), predux_mul< Packet16bf >(), predux_mul< Packet4bf >(), print< Packet16bf >(), print< Packet4bf >(), print< Packet8bf >(), pround< Packet16bf >(), pround< Packet4bf >(), psub< Packet16bf >(), psub< Packet4bf >(), ptrunc< Packet16bf >(), and ptrunc< Packet4bf >().

◆ Bf16ToF32Even()

EIGEN_STRONG_INLINE Packet4f Eigen::internal::Bf16ToF32Even ( const Packet8bf bf)

◆ Bf16ToF32Odd()

EIGEN_STRONG_INLINE Packet4f Eigen::internal::Bf16ToF32Odd ( const Packet8bf bf)
2027  {
2028  const EIGEN_DECLARE_CONST_FAST_Packet4ui(high_mask, 0xFFFF0000);
2029  return pand<Packet4f>(reinterpret_cast<Packet4f>(bf.m_val), reinterpret_cast<Packet4f>(p4ui_high_mask));
2030 }
#define EIGEN_DECLARE_CONST_FAST_Packet4ui(NAME, X)
Definition: AltiVec/PacketMath.h:50
EIGEN_STRONG_INLINE Packet4f pand< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1406

References EIGEN_DECLARE_CONST_FAST_Packet4ui(), Eigen::internal::eigen_packet_wrapper< T, unique_id >::m_val, and pand< Packet4f >().

Referenced by pcast< Packet8bf, Packet8us >(), pfrexp< Packet8bf >(), pmadd(), predux< Packet8bf >(), predux_max< Packet8bf >(), predux_min< Packet8bf >(), and predux_mul< Packet8bf >().

◆ bicgstab()

template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool Eigen::internal::bicgstab ( const MatrixType mat,
const Rhs rhs,
Dest &  x,
const Preconditioner &  precond,
Index iters,
typename Dest::RealScalar tol_error 
)

Low-level bi conjugate gradient stabilized algorithm

Parameters
matThe matrix A
rhsThe right hand side vector b
xOn input and initial solution, on output the computed solution.
precondA preconditioner being able to efficiently solve for an approximation of Ax=b (regardless of b)
itersOn input the max number of iteration, on output the number of performed iterations.
tol_errorOn input the tolerance error, on output an estimation of the relative error.
Returns
false in the case of numerical issue, for example a break down of BiCGSTAB.
33  {
34  using std::abs;
35  using std::sqrt;
36  typedef typename Dest::RealScalar RealScalar;
37  typedef typename Dest::Scalar Scalar;
38  typedef Matrix<Scalar, Dynamic, 1> VectorType;
39  RealScalar tol = tol_error;
40  Index maxIters = iters;
41 
42  Index n = mat.cols();
43  VectorType r = rhs - mat * x;
44  VectorType r0 = r;
45 
46  RealScalar r0_sqnorm = r0.squaredNorm();
47  RealScalar rhs_sqnorm = rhs.squaredNorm();
48  if (rhs_sqnorm == 0) {
49  x.setZero();
50  return true;
51  }
52  Scalar rho(1);
53  Scalar alpha(1);
54  Scalar w(1);
55 
57  VectorType y(n), z(n);
58  VectorType kt(n), ks(n);
59 
60  VectorType s(n), t(n);
61 
62  RealScalar tol2 = tol * tol * rhs_sqnorm;
64  Index i = 0;
65  Index restarts = 0;
66 
67  while (r.squaredNorm() > tol2 && i < maxIters) {
68  Scalar rho_old = rho;
69 
70  rho = r0.dot(r);
71  if (abs(rho) < eps2 * r0_sqnorm) {
72  // The new residual vector became too orthogonal to the arbitrarily chosen direction r0
73  // Let's restart with a new r0:
74  r = rhs - mat * x;
75  r0 = r;
76  rho = r0_sqnorm = r.squaredNorm();
77  if (restarts++ == 0) i = 0;
78  }
79  Scalar beta = (rho / rho_old) * (alpha / w);
80  p = r + beta * (p - w * v);
81 
82  y = precond.solve(p);
83 
84  v.noalias() = mat * y;
85 
86  alpha = rho / r0.dot(v);
87  s = r - alpha * v;
88 
89  z = precond.solve(s);
90  t.noalias() = mat * z;
91 
92  RealScalar tmp = t.squaredNorm();
93  if (tmp > RealScalar(0))
94  w = t.dot(s) / tmp;
95  else
96  w = Scalar(0);
97  x += alpha * y + w * z;
98  r = s - w * t;
99  ++i;
100  }
101  tol_error = sqrt(r.squaredNorm() / rhs_sqnorm);
102  iters = i;
103  return true;
104 }
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
Index cols() const
Definition: SparseMatrix.h:161
RealScalar alpha
Definition: level1_cplx_impl.h:151
Scalar beta
Definition: level2_cplx_impl.h:36
double Zero
Definition: pseudosolid_node_update_elements.cc:35
double epsilon
Definition: osc_ring_sarah_asymptotics.h:43
Definition: fft_test_shared.h:66

References abs(), alpha, beta, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), oomph::SarahBL::epsilon, i, n, p, UniformPSDSelfTest::r, s, sqrt(), plotPSD::t, tmp, v, w, plotDoE::x, y, and oomph::PseudoSolidHelper::Zero.

Referenced by Eigen::BiCGSTAB< MatrixType_, Preconditioner_ >::_solve_vector_with_guess_impl().

◆ bicgstabl()

template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool Eigen::internal::bicgstabl ( const MatrixType mat,
const Rhs rhs,
Dest &  x,
const Preconditioner &  precond,
Index iters,
typename Dest::RealScalar tol_error,
Index  L 
)

Low-level bi conjugate gradient stabilized algorithm with L additional residual minimization steps

Parameters
matThe matrix A
rhsThe right hand side vector b
xOn input and initial solution, on output the computed solution.
precondA preconditioner being able to efficiently solve for an approximation of Ax=b (regardless of b)
itersOn input the max number of iteration, on output the number of performed iterations.
tol_errorOn input the tolerance error, on output an estimation of the relative error.
LOn input Number of additional GMRES steps to take. If L is too large (~20) instabilities occur.
Returns
false in the case of numerical issue, for example a break down of BiCGSTABL.
48  {
49  using numext::abs;
50  using numext::sqrt;
51  typedef typename Dest::RealScalar RealScalar;
52  typedef typename Dest::Scalar Scalar;
53  const Index N = rhs.size();
54  L = L < x.rows() ? L : x.rows();
55 
56  Index k = 0;
57 
58  const RealScalar tol = tol_error;
59  const Index maxIters = iters;
60 
61  typedef Matrix<Scalar, Dynamic, 1> VectorType;
62  typedef Matrix<Scalar, Dynamic, Dynamic, ColMajor> DenseMatrixType;
63 
64  DenseMatrixType rHat(N, L + 1);
65  DenseMatrixType uHat(N, L + 1);
66 
67  // We start with an initial guess x_0 and let us set r_0 as (residual
68  // calculated from x_0)
69  VectorType x0 = x;
70  rHat.col(0) = rhs - mat * x0; // r_0
71 
72  x.setZero(); // This will contain the updates to the solution.
73  // rShadow is arbitrary, but must never be orthogonal to any residual.
74  VectorType rShadow = VectorType::Random(N);
75 
76  VectorType x_prime = x;
77 
78  // Redundant: x is already set to 0
79  // x.setZero();
80  VectorType b_prime = rHat.col(0);
81 
82  // Other vectors and scalars initialization
83  Scalar rho0 = 1.0;
84  Scalar alpha = 0.0;
85  Scalar omega = 1.0;
86 
87  uHat.col(0).setZero();
88 
89  bool bicg_convergence = false;
90 
91  const RealScalar normb = rhs.stableNorm();
92  if (internal::isApprox(normb, RealScalar(0))) {
93  x.setZero();
94  iters = 0;
95  return true;
96  }
97  RealScalar normr = rHat.col(0).stableNorm();
98  RealScalar Mx = normr;
99  RealScalar Mr = normr;
100 
101  // Keep track of the solution with the lowest residual
102  RealScalar normr_min = normr;
103  VectorType x_min = x_prime + x;
104 
105  // Criterion for when to apply the group-wise update, conform ref 3.
106  const RealScalar delta = 0.01;
107 
108  bool compute_res = false;
109  bool update_app = false;
110 
111  while (normr > tol * normb && k < maxIters) {
112  rho0 *= -omega;
113 
114  for (Index j = 0; j < L; ++j) {
115  const Scalar rho1 = rShadow.dot(rHat.col(j));
116 
117  if (!(numext::isfinite)(rho1) || rho0 == RealScalar(0.0)) {
118  // We cannot continue computing, return the best solution found.
119  x += x_prime;
120 
121  // Check if x is better than the best stored solution thus far.
122  normr = (rhs - mat * (precond.solve(x) + x0)).stableNorm();
123 
124  if (normr > normr_min || !(numext::isfinite)(normr)) {
125  // x_min is a better solution than x, return x_min
126  x = x_min;
127  normr = normr_min;
128  }
129  tol_error = normr / normb;
130  iters = k;
131  // x contains the updates to x0, add those back to obtain the solution
132  x = precond.solve(x);
133  x += x0;
134  return (normr < tol * normb);
135  }
136 
137  const Scalar beta = alpha * (rho1 / rho0);
138  rho0 = rho1;
139  // Update search directions
140  uHat.leftCols(j + 1) = rHat.leftCols(j + 1) - beta * uHat.leftCols(j + 1);
141  uHat.col(j + 1) = mat * precond.solve(uHat.col(j));
142  const Scalar sigma = rShadow.dot(uHat.col(j + 1));
143  alpha = rho1 / sigma;
144  // Update residuals
145  rHat.leftCols(j + 1) -= alpha * uHat.middleCols(1, j + 1);
146  rHat.col(j + 1) = mat * precond.solve(rHat.col(j));
147  // Complete BiCG iteration by updating x
148  x += alpha * uHat.col(0);
149  normr = rHat.col(0).stableNorm();
150  // Check for early exit
151  if (normr < tol * normb) {
152  /*
153  Convergence was achieved during BiCG step.
154  Without this check BiCGStab(L) fails for trivial matrices, such as
155  when the preconditioner already is the inverse, or the input matrix is
156  identity.
157  */
158  bicg_convergence = true;
159  break;
160  } else if (normr < normr_min) {
161  // We found an x with lower residual, keep this one.
162  x_min = x + x_prime;
163  normr_min = normr;
164  }
165  }
166  if (!bicg_convergence) {
167  /*
168  The polynomial/minimize residual step.
169 
170  QR Householder method for argmin is more stable than (modified)
171  Gram-Schmidt, in the sense that there is less loss of orthogonality. It
172  is more accurate than solving the normal equations, since the normal
173  equations scale with condition number squared.
174  */
175  const VectorType gamma = rHat.rightCols(L).householderQr().solve(rHat.col(0));
176  x += rHat.leftCols(L) * gamma;
177  rHat.col(0) -= rHat.rightCols(L) * gamma;
178  uHat.col(0) -= uHat.rightCols(L) * gamma;
179  normr = rHat.col(0).stableNorm();
180  omega = gamma(L - 1);
181  }
182  if (normr < normr_min) {
183  // We found an x with lower residual, keep this one.
184  x_min = x + x_prime;
185  normr_min = normr;
186  }
187 
188  k++;
189 
190  /*
191  Reliable update part
192 
193  The recursively computed residual can deviate from the actual residual
194  after several iterations. However, computing the residual from the
195  definition costs extra MVs and should not be done at each iteration. The
196  reliable update strategy computes the true residual from the definition:
197  r=b-A*x at strategic intervals. Furthermore a "group wise update" strategy
198  is used to combine updates, which improves accuracy.
199  */
200 
201  // Maximum norm of residuals since last update of x.
202  Mx = numext::maxi(Mx, normr);
203  // Maximum norm of residuals since last computation of the true residual.
204  Mr = numext::maxi(Mr, normr);
205 
206  if (normr < delta * normb && normb <= Mx) {
207  update_app = true;
208  }
209 
210  if (update_app || (normr < delta * Mr && normb <= Mr)) {
211  compute_res = true;
212  }
213 
214  if (bicg_convergence) {
215  update_app = true;
216  compute_res = true;
217  bicg_convergence = false;
218  }
219 
220  if (compute_res) {
221  // Explicitly compute residual from the definition
222 
223  // This is equivalent to the shifted version of rhs - mat *
224  // (precond.solve(x)+x0)
225  rHat.col(0) = b_prime - mat * precond.solve(x);
226  normr = rHat.col(0).stableNorm();
227  Mr = normr;
228 
229  if (update_app) {
230  // After the group wise update, the original problem is translated to a
231  // shifted one.
232  x_prime += x;
233  x.setZero();
234  b_prime = rHat.col(0);
235  Mx = normr;
236  }
237  }
238  if (normr < normr_min) {
239  // We found an x with lower residual, keep this one.
240  x_min = x + x_prime;
241  normr_min = normr;
242  }
243 
244  compute_res = false;
245  update_app = false;
246  }
247 
248  // Convert internal variable to the true solution vector x
249  x += x_prime;
250 
251  normr = (rhs - mat * (precond.solve(x) + x0)).stableNorm();
252  if (normr > normr_min || !(numext::isfinite)(normr)) {
253  // x_min is a better solution than x, return x_min
254  x = x_min;
255  normr = normr_min;
256  }
257  tol_error = normr / normb;
258  iters = k;
259 
260  // x contains the updates to x0, add those back to obtain the solution
261  x = precond.solve(x);
262  x += x0;
263  return true;
264 }
MatrixXd L
Definition: LLT_example.cpp:6
char char char int int * k
Definition: level2_impl.h:374
#define isfinite(X)
Definition: main.h:111
EIGEN_DEVICE_FUNC bool isApprox(const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1923
Vector::Scalar omega(const Vector &t, const Vector &s, RealScalar angle)
Definition: IDRS.h:36
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition: MathFunctions.h:926
Vector< double > x0(2, 0.0)
int delta
Definition: MultiOpt.py:96
double Mr
Definition: two_dim.cc:106
int sigma
Definition: calibrate.py:179
Mdouble gamma(Mdouble gamma_in)
This is the gamma function returns the true value for the half integer value.
Definition: ExtendedMath.cc:116

References Eigen::numext::abs(), alpha, beta, MultiOpt::delta, mathsFunc::gamma(), isApprox(), Eigen::numext::isfinite(), j, k, L, Eigen::numext::maxi(), Problem_Parameter::Mr, N, omega(), calibrate::sigma, Eigen::numext::sqrt(), plotDoE::x, and Global::x0.

Referenced by Eigen::BiCGSTABL< MatrixType_, Preconditioner_ >::_solve_vector_with_guess_impl().

◆ bload()

template<typename DataMapper , typename Packet , const Index accCols, int StorageOrder, bool Complex, int N, bool full>
EIGEN_ALWAYS_INLINE void Eigen::internal::bload ( PacketBlock< Packet, N *(Complex ? 2 :1)> &  acc,
const DataMapper &  res,
Index  row,
Index  col 
)
1597  : 1)>& acc, const DataMapper& res, Index row,
1598  Index col) {
1599  if (StorageOrder == RowMajor) {
1600  for (int M = 0; M < N; M++) {
1601  acc.packet[M] = res.template loadPacket<Packet>(row + M, col);
1602  }
1603  if (Complex) {
1604  for (int M = 0; M < N; M++) {
1605  acc.packet[M + N] = res.template loadPacket<Packet>(row + M, col + accCols);
1606  }
1607  }
1608  } else {
1609  for (int M = 0; M < N; M++) {
1610  acc.packet[M] = res.template loadPacket<Packet>(row, col + M);
1611  }
1612  if (Complex && full) {
1613  for (int M = 0; M < N; M++) {
1614  acc.packet[M + N] = res.template loadPacket<Packet>(row + accCols, col + M);
1615  }
1616  }
1617  }
1618 }
m col(1)
m row(1)
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
std::complex< RealScalar > Complex
Definition: common.h:71

References col(), N, res, row(), and Eigen::RowMajor.

◆ BlockedInPlaceTranspose()

template<typename MatrixType , Index Alignment>
void Eigen::internal::BlockedInPlaceTranspose ( MatrixType m)
239  {
240  typedef typename MatrixType::Scalar Scalar;
242  const Index PacketSize = internal::packet_traits<Scalar>::size;
243  eigen_assert(m.rows() == m.cols());
244  int row_start = 0;
245  for (; row_start + PacketSize <= m.rows(); row_start += PacketSize) {
246  for (int col_start = row_start; col_start + PacketSize <= m.cols(); col_start += PacketSize) {
247  PacketBlock<Packet> A;
248  if (row_start == col_start) {
249  for (Index i = 0; i < PacketSize; ++i)
250  A.packet[i] = m.template packetByOuterInner<Alignment>(row_start + i, col_start);
252  for (Index i = 0; i < PacketSize; ++i)
253  m.template writePacket<Alignment>(m.rowIndexByOuterInner(row_start + i, col_start),
254  m.colIndexByOuterInner(row_start + i, col_start), A.packet[i]);
255  } else {
256  PacketBlock<Packet> B;
257  for (Index i = 0; i < PacketSize; ++i) {
258  A.packet[i] = m.template packetByOuterInner<Alignment>(row_start + i, col_start);
259  B.packet[i] = m.template packetByOuterInner<Alignment>(col_start + i, row_start);
260  }
263  for (Index i = 0; i < PacketSize; ++i) {
264  m.template writePacket<Alignment>(m.rowIndexByOuterInner(row_start + i, col_start),
265  m.colIndexByOuterInner(row_start + i, col_start), B.packet[i]);
266  m.template writePacket<Alignment>(m.rowIndexByOuterInner(col_start + i, row_start),
267  m.colIndexByOuterInner(col_start + i, row_start), A.packet[i]);
268  }
269  }
270  }
271  }
272  for (Index row = row_start; row < m.rows(); ++row) {
273  m.matrix().row(row).head(row).swap(m.matrix().col(row).head(row).transpose());
274  }
275 }
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
Matrix< SCALARB, Dynamic, Dynamic, opt_B > B
Definition: bench_gemm.cpp:48
internal::packet_traits< Scalar >::type Packet
Definition: benchmark-blocking-sizes.cpp:54
Definition: matrices.h:74
int * m
Definition: level2_cplx_impl.h:294
EIGEN_STRONG_INLINE void ptranspose(PacketBlock< Packet2cf, 2 > &kernel)
Definition: AltiVec/Complex.h:339

References eigen_assert, i, m, Eigen::PlainObjectBase< Derived >::packet(), ptranspose(), and row().

◆ blueNorm_impl()

template<typename Derived >
NumTraits<typename traits<Derived>::Scalar>::Real Eigen::internal::blueNorm_impl ( const EigenBase< Derived > &  _vec)
inline
97  {
98  typedef typename Derived::RealScalar RealScalar;
99  using std::abs;
100  using std::pow;
101  using std::sqrt;
102 
103  // This program calculates the machine-dependent constants
104  // bl, b2, slm, s2m, relerr overfl
105  // from the "basic" machine-dependent numbers
106  // nbig, ibeta, it, iemin, iemax, rbig.
107  // The following define the basic machine-dependent constants.
108  // For portability, the PORT subprograms "ilmaeh" and "rlmach"
109  // are used. For any specific computer, each of the assignment
110  // statements can be replaced
111  static const int ibeta = std::numeric_limits<RealScalar>::radix; // base for floating-point numbers
112  static const int it = NumTraits<RealScalar>::digits(); // number of base-beta digits in mantissa
113  static const int iemin = NumTraits<RealScalar>::min_exponent(); // minimum exponent
114  static const int iemax = NumTraits<RealScalar>::max_exponent(); // maximum exponent
115  static const RealScalar rbig = NumTraits<RealScalar>::highest(); // largest floating-point number
116  static const RealScalar b1 =
117  RealScalar(pow(RealScalar(ibeta), RealScalar(-((1 - iemin) / 2)))); // lower boundary of midrange
118  static const RealScalar b2 =
119  RealScalar(pow(RealScalar(ibeta), RealScalar((iemax + 1 - it) / 2))); // upper boundary of midrange
120  static const RealScalar s1m =
121  RealScalar(pow(RealScalar(ibeta), RealScalar((2 - iemin) / 2))); // scaling factor for lower range
122  static const RealScalar s2m =
123  RealScalar(pow(RealScalar(ibeta), RealScalar(-((iemax + it) / 2)))); // scaling factor for upper range
124  static const RealScalar eps = RealScalar(pow(double(ibeta), 1 - it));
125  static const RealScalar relerr = sqrt(eps); // tolerance for neglecting asml
126 
127  const Derived& vec(_vec.derived());
128  Index n = vec.size();
129  RealScalar ab2 = b2 / RealScalar(n);
130  RealScalar asml = RealScalar(0);
131  RealScalar amed = RealScalar(0);
132  RealScalar abig = RealScalar(0);
133 
134  for (Index j = 0; j < vec.outerSize(); ++j) {
135  for (typename Derived::InnerIterator iter(vec, j); iter; ++iter) {
136  RealScalar ax = abs(iter.value());
137  if (ax > ab2)
138  abig += numext::abs2(ax * s2m);
139  else if (ax < b1)
140  asml += numext::abs2(ax * s1m);
141  else
142  amed += numext::abs2(ax);
143  }
144  }
145  if (amed != amed) return amed; // we got a NaN
146  if (abig > RealScalar(0)) {
147  abig = sqrt(abig);
148  if (abig > rbig) // overflow, or *this contains INF values
149  return abig; // return INF
150  if (amed > RealScalar(0)) {
151  abig = abig / s2m;
152  amed = sqrt(amed);
153  } else
154  return abig / s2m;
155  } else if (asml > RealScalar(0)) {
156  if (amed > RealScalar(0)) {
157  abig = sqrt(amed);
158  amed = sqrt(asml) / s1m;
159  } else
160  return sqrt(asml) / s1m;
161  } else
162  return sqrt(amed);
163  asml = numext::mini(abig, amed);
164  abig = numext::maxi(abig, amed);
165  if (asml <= abig * relerr)
166  return abig;
167  else
168  return abig * sqrt(RealScalar(1) + numext::abs2(asml / abig));
169 }
EIGEN_DEVICE_FUNC const GlobalUnaryPowReturnType< Derived, ScalarExponent > pow(const Eigen::ArrayBase< Derived > &x, const ScalarExponent &exponent)
Definition: GlobalFunctions.h:137
Derived::RealScalar relerr(const MatrixBase< Derived > &A, const MatrixBase< OtherDerived > &B)
Definition: matrix_functions.h:54
double eps
Definition: crbond_bessel.cc:24
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
Definition: MathFunctions.h:920
EIGEN_DEVICE_FUNC bool abs2(bool x)
Definition: MathFunctions.h:1102
ax
Definition: plotDoE.py:39

References abs(), Eigen::numext::abs2(), plotDoE::ax, Eigen::EigenBase< Derived >::derived(), CRBond_Bessel::eps, j, Eigen::numext::maxi(), Eigen::numext::mini(), n, Eigen::bfloat16_impl::pow(), relerr(), and sqrt().

Referenced by Eigen::MatrixBase< Derived >::blueNorm(), and Eigen::SparseMatrixBase< Derived >::blueNorm().

◆ bmask()

template<typename Packet >
EIGEN_ALWAYS_INLINE Packet Eigen::internal::bmask ( const Index  remaining_rows)
1660  {
1661 #if USE_P10_AND_PVIPR2_0
1662 #ifdef _BIG_ENDIAN
1663  return Packet(vec_reve(vec_genwm((1 << remaining_rows) - 1)));
1664 #else
1665  return Packet(vec_genwm((1 << remaining_rows) - 1));
1666 #endif
1667 #else
1668  return Packet(mask4[remaining_rows]);
1669 #endif
1670 }
static const Packet4i mask4[4]
Definition: MatrixProduct.h:1656

References mask4.

◆ bmask< Packet2d >()

template<>
EIGEN_ALWAYS_INLINE Packet2d Eigen::internal::bmask< Packet2d > ( const Index  remaining_rows)
1673  {
1674 #if USE_P10_AND_PVIPR2_0
1675  Packet2d mask2 = Packet2d(vec_gendm(remaining_rows));
1676 #ifdef _BIG_ENDIAN
1677  return preverse(mask2);
1678 #else
1679  return mask2;
1680 #endif
1681 #else
1682  Packet2l ret = {-remaining_rows, 0};
1683  return Packet2d(ret);
1684 #endif
1685 }
Eigen::DenseIndex ret
Definition: level1_cplx_impl.h:43
__m128d Packet2d
Definition: LSX/PacketMath.h:36
eigen_packet_wrapper< __m128i, 3 > Packet2l
Definition: LSX/PacketMath.h:41
EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf &a)
Definition: AltiVec/Complex.h:303

References preverse(), and ret.

◆ bruteforce_det3_helper()

template<typename Derived >
EIGEN_DEVICE_FUNC const Derived::Scalar Eigen::internal::bruteforce_det3_helper ( const MatrixBase< Derived > &  matrix,
int  a,
int  b,
int  c 
)
inline
22  {
23  return matrix.coeff(0, a) * (matrix.coeff(1, b) * matrix.coeff(2, c) - matrix.coeff(1, c) * matrix.coeff(2, b));
24 }
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85

References a, b, calibrate::c, and matrix().

Referenced by Eigen::internal::determinant_impl< Derived, 3 >::run().

◆ bscale() [1/2]

template<typename Packet , int N>
EIGEN_ALWAYS_INLINE void Eigen::internal::bscale ( PacketBlock< Packet, N > &  acc,
PacketBlock< Packet, N > &  accZ,
const Packet pAlpha 
)
1688  {
1689  for (int M = 0; M < N; M++) {
1690  acc.packet[M] = pmadd<Packet>(pAlpha, accZ.packet[M], acc.packet[M]);
1691  }
1692 }

References N, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ bscale() [2/2]

template<typename Packet , int N, bool mask>
EIGEN_ALWAYS_INLINE void Eigen::internal::bscale ( PacketBlock< Packet, N > &  acc,
PacketBlock< Packet, N > &  accZ,
const Packet pAlpha,
const Packet pMask 
)
1697  {
1698  if (mask) {
1699  band<Packet, N>(accZ, pMask);
1700  } else {
1701  EIGEN_UNUSED_VARIABLE(pMask);
1702  }
1703 
1704  bscale<Packet, N>(acc, accZ, pAlpha);
1705 }

References EIGEN_UNUSED_VARIABLE.

◆ bscalec()

template<typename Packet , int N, bool mask>
EIGEN_ALWAYS_INLINE void Eigen::internal::bscalec ( PacketBlock< Packet, N > &  aReal,
PacketBlock< Packet, N > &  aImag,
const Packet bReal,
const Packet bImag,
PacketBlock< Packet, N > &  cReal,
PacketBlock< Packet, N > &  cImag,
const Packet pMask 
)
1576  {
1577  if (mask && (sizeof(__UNPACK_TYPE__(Packet)) == sizeof(float))) {
1578  band<Packet, N>(aReal, pMask);
1579  band<Packet, N>(aImag, pMask);
1580  } else {
1581  EIGEN_UNUSED_VARIABLE(pMask);
1582  }
1583 
1584  bscalec_common<Packet, N>(cReal, aReal, bReal);
1585 
1586  bscalec_common<Packet, N>(cImag, aImag, bReal);
1587 
1588  pger_common<Packet, true, N>(&cReal, bImag, aImag.packet);
1589 
1590  pger_common<Packet, false, N>(&cImag, bImag, aReal.packet);
1591 }

References __UNPACK_TYPE__(), EIGEN_UNUSED_VARIABLE, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ bscalec_common()

template<typename Packet , int N>
EIGEN_ALWAYS_INLINE void Eigen::internal::bscalec_common ( PacketBlock< Packet, N > &  acc,
PacketBlock< Packet, N > &  accZ,
const Packet pAlpha 
)
1559  {
1560  for (int M = 0; M < N; M++) {
1561  acc.packet[M] = vec_mul(accZ.packet[M], pAlpha);
1562  }
1563 }

References N, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ bsetzero()

template<typename Packet , int N>
EIGEN_ALWAYS_INLINE void Eigen::internal::bsetzero ( PacketBlock< Packet, N > &  acc)
1551  {
1552  for (int M = 0; M < N; M++) {
1553  acc.packet[M] = pset1<Packet>((__UNPACK_TYPE__(Packet))0);
1554  }
1555 }

References __UNPACK_TYPE__(), N, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ bsetzeroMMA()

EIGEN_ALWAYS_INLINE void Eigen::internal::bsetzeroMMA ( __vector_quad *  acc)
40 { __builtin_mma_xxsetaccz(acc); }

◆ bstore()

template<typename DataMapper , typename Packet , int N>
EIGEN_ALWAYS_INLINE void Eigen::internal::bstore ( PacketBlock< Packet, N > &  acc,
const DataMapper &  res,
Index  row 
)
1621  {
1622  for (int M = 0; M < N; M++) {
1623  res.template storePacket<Packet>(row, M, acc.packet[M]);
1624  }
1625 }
EIGEN_STRONG_INLINE PacketScalar packet(Index rowId, Index colId) const
Definition: PlainObjectBase.h:247

References N, Eigen::internal::PacketBlock< Packet, N >::packet, res, and row().

◆ c_to_fortran_numbering()

template<typename MatrixType >
void Eigen::internal::c_to_fortran_numbering ( MatrixType mat)
132  {
133  if (!(mat.outerIndexPtr()[0])) {
134  int i;
135  for (i = 0; i <= mat.rows(); ++i) ++mat.outerIndexPtr()[i];
136  for (i = 0; i < mat.nonZeros(); ++i) ++mat.innerIndexPtr()[i];
137  }
138 }
Index nonZeros() const
Definition: SparseCompressedBase.h:64
Index rows() const
Definition: SparseMatrix.h:159
const StorageIndex * outerIndexPtr() const
Definition: SparseMatrix.h:189
const StorageIndex * innerIndexPtr() const
Definition: SparseMatrix.h:180

References i, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::innerIndexPtr(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::nonZeros(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::outerIndexPtr(), and Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows().

Referenced by Eigen::PastixLU< MatrixType_, IsStrSym >::grabMatrix(), Eigen::PastixLLT< MatrixType_, UpLo_ >::grabMatrix(), and Eigen::PastixLDLT< MatrixType_, UpLo_ >::grabMatrix().

◆ calcColLoops()

template<Index size>
EIGEN_ALWAYS_INLINE void Eigen::internal::calcColLoops ( const bfloat16 *&  indexA,
Index row,
Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const bfloat16 indexB,
Index  strideB,
Index  offsetA,
Index  offsetB,
Index  bigSuffix,
float *  result 
)
313  {
314  if ((size == 16) || (rows & size)) {
315  indexA += size * offsetA;
316  colLoops<size>(depth, cols, rows, pAlpha, indexA, indexB, strideB, offsetB, result + row);
317  row += size;
318  indexA += bigSuffix * size / 16;
319  }
320 }
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1

References cols, row(), rows, and size.

◆ calcVecColLoops()

template<typename LhsMapper , typename RhsMapper , bool linear>
EIGEN_ALWAYS_INLINE void Eigen::internal::calcVecColLoops ( Index  cend,
Index  rows,
LhsMapper &  lhs,
RhsMapper &  rhs,
const Packet4f  pAlpha,
float *  result 
)
486  {
487  Index row = 0;
488  if (rows >= (MAX_BFLOAT16_VEC_ACC * 4)) {
489  colVecColLoopBody<MAX_BFLOAT16_VEC_ACC, LhsMapper, RhsMapper, false, linear>(row, cend, rows, lhs, rhs, pAlpha,
490  result);
491  result += row;
492  }
493  if (rows & 3) {
494  colVecColLoopBodyExtra<LhsMapper, RhsMapper, true, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
495  } else {
496  colVecColLoopBodyExtra<LhsMapper, RhsMapper, false, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
497  }
498 }
#define MAX_BFLOAT16_VEC_ACC
Definition: MatrixProductMMAbfloat16.h:409

References MAX_BFLOAT16_VEC_ACC, row(), and rows.

◆ calcVecLoops()

template<typename LhsMapper , typename RhsMapper >
EIGEN_ALWAYS_INLINE void Eigen::internal::calcVecLoops ( Index  cols,
Index  rows,
LhsMapper &  lhs,
RhsMapper &  rhs,
const Packet4f  pAlpha,
float *  result 
)
698  {
699  Index row = 0;
700  if (rows >= MAX_BFLOAT16_VEC_ACC) {
701  colVecLoopBody<MAX_BFLOAT16_VEC_ACC, LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
702  result += row;
703  }
704  colVecLoopBodyExtra<LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
705 }

References cols, MAX_BFLOAT16_VEC_ACC, row(), and rows.

◆ calcVSXColLoops()

template<Index size>
EIGEN_ALWAYS_INLINE void Eigen::internal::calcVSXColLoops ( const bfloat16 *&  indexA,
const float *  indexA2,
Index row,
Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const float *  indexB,
Index  strideA,
Index  strideB,
Index  offsetA,
Index  offsetB,
Index  bigSuffix,
float *  result 
)
3024  {
3025  if ((size == 16) || (rows & size)) {
3026  indexA += size * offsetA;
3027  colVSXLoops<size>(depth, cols, rows, pAlpha, indexA, indexA2, indexB, strideA, strideB, offsetB, result + row);
3028  row += size;
3029  indexA += bigSuffix * size / 16;
3030  }
3031 }

References cols, row(), rows, and size.

◆ call_assignment() [1/6]

template<typename Dst , typename Src >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::call_assignment ( const Dst &  dst,
const Src &  src 
)
785  {
786  call_assignment(dst, src, internal::assign_op<typename Dst::Scalar, typename Src::Scalar>());
787 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment(NoAlias< Dst, StorageBase > &dst, const Src &src, const Func &func)
Definition: AssignEvaluator.h:806

References call_assignment().

◆ call_assignment() [2/6]

template<typename Dst , template< typename > class StorageBase, typename Src , typename Func >
EIGEN_DEVICE_FUNC void Eigen::internal::call_assignment ( const NoAlias< Dst, StorageBase > &  dst,
const Src &  src,
const Func &  func 
)
81  {
83 }
EIGEN_DEVICE_FUNC ExpressionType & expression() const
Definition: NoAlias.h:61
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias(Dst &dst, const Src &src, const Func &func)
Definition: AssignEvaluator.h:812
Definition: benchGeometry.cpp:21

References call_assignment_no_alias(), and Eigen::NoAlias< ExpressionType, StorageBase >::expression().

Referenced by Eigen::add_assign_using_evaluator(), Eigen::copy_using_evaluator(), Eigen::divide_assign_using_evaluator(), Eigen::multiply_assign_using_evaluator(), Eigen::subtract_assign_using_evaluator(), and Eigen::swap_using_evaluator().

◆ call_assignment() [3/6]

◆ call_assignment() [4/6]

template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void Eigen::internal::call_assignment ( Dst &  dst,
const Src &  src,
const Func &  func,
std::enable_if_t< evaluator_assume_aliasing< Src >::value, void * >  = 0 
)
792  {
793  typename plain_matrix_type<Src>::type tmp(src);
795 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias(Dst &dst, const Src &src)
Definition: AssignEvaluator.h:852

References call_assignment_no_alias(), and tmp.

◆ call_assignment() [5/6]

template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::call_assignment ( Dst &  dst,
const Src &  src,
const Func &  func,
std::enable_if_t<!evaluator_assume_aliasing< Src >::value, void * >  = 0 
)
799  {
800  call_assignment_no_alias(dst, src, func);
801 }

References call_assignment_no_alias().

◆ call_assignment() [6/6]

template<typename Dst , template< typename > class StorageBase, typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void Eigen::internal::call_assignment ( NoAlias< Dst, StorageBase > &  dst,
const Src &  src,
const Func &  func 
)

◆ call_assignment_no_alias() [1/3]

template<typename Dst , typename Src , typename Func , typename Device >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void Eigen::internal::call_assignment_no_alias ( DeviceWrapper< Dst, Device >  dst,
const Src &  src,
const Func &  func 
)
96  {
97  enum {
98  NeedToTranspose = ((int(Dst::RowsAtCompileTime) == 1 && int(Src::ColsAtCompileTime) == 1) ||
99  (int(Dst::ColsAtCompileTime) == 1 && int(Src::RowsAtCompileTime) == 1)) &&
100  int(Dst::SizeAtCompileTime) != 1
101  };
102 
103  using ActualDstTypeCleaned = std::conditional_t<NeedToTranspose, Transpose<Dst>, Dst>;
104  using ActualDstType = std::conditional_t<NeedToTranspose, Transpose<Dst>, Dst&>;
105  ActualDstType actualDst(dst.derived());
106 
107  // TODO check whether this is the right place to perform these checks:
109  EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(ActualDstTypeCleaned, Src)
111 
112  // this provides a mechanism for specializing simple assignments, matrix products, etc
114 }
#define EIGEN_STATIC_ASSERT_LVALUE(Derived)
Definition: StaticAssert.h:87
#define EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(TYPE0, TYPE1)
Definition: StaticAssert.h:79
#define EIGEN_CHECK_BINARY_COMPATIBILIY(BINOP, LHS, RHS)
Definition: XprHelper.h:1082

References Eigen::DeviceWrapper< Derived, Device >::derived(), EIGEN_STATIC_ASSERT_LVALUE, and int().

◆ call_assignment_no_alias() [2/3]

template<typename Dst , typename Src >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void Eigen::internal::call_assignment_no_alias ( Dst &  dst,
const Src &  src 
)
852  {
853  call_assignment_no_alias(dst, src, internal::assign_op<typename Dst::Scalar, typename Src::Scalar>());
854 }

References call_assignment_no_alias().

◆ call_assignment_no_alias() [3/3]

template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void Eigen::internal::call_assignment_no_alias ( Dst &  dst,
const Src &  src,
const Func &  func 
)
813  {
814  enum {
815  NeedToTranspose = ((int(Dst::RowsAtCompileTime) == 1 && int(Src::ColsAtCompileTime) == 1) ||
816  (int(Dst::ColsAtCompileTime) == 1 && int(Src::RowsAtCompileTime) == 1)) &&
817  int(Dst::SizeAtCompileTime) != 1
818  };
819 
820  typedef std::conditional_t<NeedToTranspose, Transpose<Dst>, Dst> ActualDstTypeCleaned;
821  typedef std::conditional_t<NeedToTranspose, Transpose<Dst>, Dst&> ActualDstType;
822  ActualDstType actualDst(dst);
823 
824  // TODO check whether this is the right place to perform these checks:
826  EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(ActualDstTypeCleaned, Src)
828 
830 }

References EIGEN_CHECK_BINARY_COMPATIBILIY, EIGEN_STATIC_ASSERT_LVALUE, EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE, int(), and run().

Referenced by Eigen::PlainObjectBase< Derived >::_set_noalias(), Eigen::internal::generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, CoeffBasedProductMode >::addTo(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::assignDiagonal(), call_assignment(), call_assignment_no_alias(), Eigen::Ref< const TPlainObjectType, Options, StrideType >::construct(), Eigen::internal::generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, CoeffBasedProductMode >::evalTo(), Eigen::DenseBase< Derived >::lazyAssign(), Eigen::TriangularViewImpl< MatrixType_, Mode_, Dense >::operator+=(), Eigen::SparseMatrixBase< Derived >::operator+=(), Eigen::NoAlias< ExpressionType, StorageBase >::operator+=(), Eigen::TriangularViewImpl< MatrixType_, Mode_, Dense >::operator-=(), Eigen::SparseMatrixBase< Derived >::operator-=(), Eigen::NoAlias< ExpressionType, StorageBase >::operator-=(), Eigen::SparseMatrixBase< Derived >::operator=(), Eigen::NoAlias< ExpressionType, StorageBase >::operator=(), Eigen::internal::Assignment< DstXprType, CwiseBinaryOp< internal::scalar_product_op< ScalarBis, Scalar >, const CwiseNullaryOp< internal::scalar_constant_op< ScalarBis >, Plain >, const Product< Lhs, Rhs, DefaultProduct > >, AssignFunc, Dense2Dense >::run(), Eigen::internal::assignment_from_xpr_op_product< DstXprType, OtherXpr, ProductType, Func1, Func2 >::run(), Eigen::internal::assignment_from_dense_op_sparse< DstXprType, Func1, Func2 >::run(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::SparseMatrix(), Eigen::internal::generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, CoeffBasedProductMode >::subTo(), and Eigen::internal::unary_evaluator< Inverse< ArgType > >::unary_evaluator().

◆ call_assignment_no_alias_no_transpose() [1/2]

template<typename Dst , typename Src >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void Eigen::internal::call_assignment_no_alias_no_transpose ( Dst &  dst,
const Src &  src 
)
869  {
870  call_assignment_no_alias_no_transpose(dst, src, internal::assign_op<typename Dst::Scalar, typename Src::Scalar>());
871 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias_no_transpose(Dst &dst, const Src &src)
Definition: AssignEvaluator.h:868

References call_assignment_no_alias_no_transpose().

◆ call_assignment_no_alias_no_transpose() [2/2]

template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void Eigen::internal::call_assignment_no_alias_no_transpose ( Dst &  dst,
const Src &  src,
const Func &  func 
)

◆ call_dense_assignment_loop() [1/3]

template<typename DstXprType , typename SrcXprType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::call_dense_assignment_loop ( DstXprType &  dst,
const SrcXprType &  src 
)
741  {
742  call_dense_assignment_loop(dst, src, internal::assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>());
743 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_dense_assignment_loop(DstXprType &dst, const SrcXprType &src)
Definition: AssignEvaluator.h:741

References call_dense_assignment_loop().

◆ call_dense_assignment_loop() [2/3]

template<typename DstXprType , typename SrcXprType , typename Functor >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void Eigen::internal::call_dense_assignment_loop ( DstXprType &  dst,
const SrcXprType &  src,
const Functor func 
)
722  {
723  typedef evaluator<DstXprType> DstEvaluatorType;
724  typedef evaluator<SrcXprType> SrcEvaluatorType;
725 
726  SrcEvaluatorType srcEvaluator(src);
727 
728  // NOTE To properly handle A = (A*A.transpose())/s with A rectangular,
729  // we need to resize the destination after the source evaluator has been created.
730  resize_if_allowed(dst, src, func);
731 
732  DstEvaluatorType dstEvaluator(dst);
733 
734  typedef generic_dense_assignment_kernel<DstEvaluatorType, SrcEvaluatorType, Functor> Kernel;
735  Kernel kernel(dstEvaluator, srcEvaluator, func, dst.const_cast_derived());
736 
738 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize_if_allowed(DstXprType &dst, const SrcXprType &src, const internal::assign_op< T1, T2 > &)
Definition: AssignEvaluator.h:711

References resize_if_allowed(), and run().

Referenced by call_dense_assignment_loop(), Eigen::internal::Assignment< DstXprType, SrcXprType, Functor, Dense2Dense, Weak >::run(), Eigen::internal::AssignmentWithDevice< DstXprType, SrcXprType, Functor, Device, Dense2Dense, Weak >::run(), Eigen::internal::eigen_fill_impl< Xpr, false >::run(), and Eigen::internal::eigen_zero_impl< Xpr, false >::run().

◆ call_dense_assignment_loop() [3/3]

template<typename DstXprType , typename SrcXprType , typename Functor , typename Device >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void Eigen::internal::call_dense_assignment_loop ( DstXprType &  dst,
const SrcXprType &  src,
const Functor func,
Device &  device 
)
121  {
122  using DstEvaluatorType = evaluator<DstXprType>;
123  using SrcEvaluatorType = evaluator<SrcXprType>;
124 
125  SrcEvaluatorType srcEvaluator(src);
126 
127  // NOTE To properly handle A = (A*A.transpose())/s with A rectangular,
128  // we need to resize the destination after the source evaluator has been created.
129  resize_if_allowed(dst, src, func);
130 
131  DstEvaluatorType dstEvaluator(dst);
132 
133  using Kernel = generic_dense_assignment_kernel<DstEvaluatorType, SrcEvaluatorType, Functor>;
134 
135  Kernel kernel(dstEvaluator, srcEvaluator, func, dst.const_cast_derived());
136 
138 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize_if_allowed(DstXprType &dst, const SrcXprType &src, const Functor &)
Definition: AssignEvaluator.h:703

References resize_if_allowed(), and Eigen::internal::dense_assignment_loop_with_device< Kernel, Device, Traversal, Unrolling >::run().

◆ call_restricted_packet_assignment()

template<typename Dst , template< typename > class StorageBase, typename Src , typename Func >
EIGEN_DEVICE_FUNC void Eigen::internal::call_restricted_packet_assignment ( const NoAlias< Dst, StorageBase > &  dst,
const Src &  src,
const Func &  func 
)
87  {
89 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_restricted_packet_assignment_no_alias(Dst &dst, const Src &src, const Func &func)
Definition: AssignEvaluator.h:833

References call_restricted_packet_assignment_no_alias(), and Eigen::NoAlias< ExpressionType, StorageBase >::expression().

Referenced by EIGEN_DECLARE_TEST().

◆ call_restricted_packet_assignment_no_alias()

template<typename Dst , typename Src , typename Func >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::call_restricted_packet_assignment_no_alias ( Dst &  dst,
const Src &  src,
const Func &  func 
)
834  {
835  typedef evaluator<Dst> DstEvaluatorType;
836  typedef evaluator<Src> SrcEvaluatorType;
837  typedef restricted_packet_dense_assignment_kernel<DstEvaluatorType, SrcEvaluatorType, Func> Kernel;
838 
840  EIGEN_CHECK_BINARY_COMPATIBILIY(Func, typename Dst::Scalar, typename Src::Scalar);
841 
842  SrcEvaluatorType srcEvaluator(src);
843  resize_if_allowed(dst, src, func);
844 
845  DstEvaluatorType dstEvaluator(dst);
846  Kernel kernel(dstEvaluator, srcEvaluator, func, dst.const_cast_derived());
847 
849 }

References EIGEN_CHECK_BINARY_COMPATIBILIY, EIGEN_STATIC_ASSERT_LVALUE, resize_if_allowed(), and run().

Referenced by call_restricted_packet_assignment(), and Eigen::internal::generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, CoeffBasedProductMode >::eval_dynamic_impl().

◆ call_triangular_assignment_loop() [1/2]

template<int Mode, bool SetOpposite, typename DstXprType , typename SrcXprType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::call_triangular_assignment_loop ( DstXprType &  dst,
const SrcXprType &  src 
)
737  {
738  call_triangular_assignment_loop<Mode, SetOpposite>(
739  dst, src, internal::assign_op<typename DstXprType::Scalar, typename SrcXprType::Scalar>());
740 }

◆ call_triangular_assignment_loop() [2/2]

template<int Mode, bool SetOpposite, typename DstXprType , typename SrcXprType , typename Functor >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::call_triangular_assignment_loop ( DstXprType &  dst,
const SrcXprType &  src,
const Functor func 
)
709  {
710  typedef evaluator<DstXprType> DstEvaluatorType;
711  typedef evaluator<SrcXprType> SrcEvaluatorType;
712 
713  SrcEvaluatorType srcEvaluator(src);
714 
715  Index dstRows = src.rows();
716  Index dstCols = src.cols();
717  if ((dst.rows() != dstRows) || (dst.cols() != dstCols)) dst.resize(dstRows, dstCols);
718  DstEvaluatorType dstEvaluator(dst);
719 
720  typedef triangular_dense_assignment_kernel<Mode&(Lower | Upper), Mode&(UnitDiag | ZeroDiag | SelfAdjoint),
721  SetOpposite, DstEvaluatorType, SrcEvaluatorType, Functor>
722  Kernel;
723  Kernel kernel(dstEvaluator, srcEvaluator, func, dst.const_cast_derived());
724 
725  enum {
726  unroll = DstXprType::SizeAtCompileTime != Dynamic && SrcEvaluatorType::CoeffReadCost < HugeCost &&
727  DstXprType::SizeAtCompileTime *
728  (int(DstEvaluatorType::CoeffReadCost) + int(SrcEvaluatorType::CoeffReadCost)) / 2 <=
730  };
731 
732  triangular_assignment_loop<Kernel, Mode, unroll ? int(DstXprType::SizeAtCompileTime) : Dynamic, SetOpposite>::run(
733  kernel);
734 }
#define EIGEN_UNROLLING_LIMIT
Definition: Settings.h:23
@ UnitDiag
Definition: Constants.h:215
@ ZeroDiag
Definition: Constants.h:217
@ SelfAdjoint
Definition: Constants.h:227
@ Lower
Definition: Constants.h:211
@ Upper
Definition: Constants.h:213
const int HugeCost
Definition: Constants.h:48
const int Dynamic
Definition: Constants.h:25
Definition: NonLinearOptimization.cpp:97

References Eigen::Dynamic, EIGEN_UNROLLING_LIMIT, Eigen::HugeCost, int(), Eigen::Lower, Eigen::run(), Eigen::SelfAdjoint, Eigen::UnitDiag, Eigen::Upper, and Eigen::ZeroDiag.

Referenced by Eigen::TriangularBase< Derived >::evalToLazy().

◆ cast() [1/2]

template<>
EIGEN_STRONG_INLINE float Eigen::internal::cast ( const AnnoyingScalar x)
179  {
180  return double(*x.v);
181 }

References plotDoE::x.

◆ cast() [2/2]

◆ cat256()

EIGEN_STRONG_INLINE Packet16f Eigen::internal::cat256 ( Packet8f  a,
Packet8f  b 
)
642  {
643  return _mm512_castsi512_ps(
644  _mm512_inserti64x4(_mm512_castsi256_si512(_mm256_castps_si256(a)), _mm256_castps_si256(b), 1));
645 }

References a, and b.

Referenced by pcast< Packet8d, Packet16f >().

◆ cat256i()

EIGEN_STRONG_INLINE Packet16i Eigen::internal::cat256i ( Packet8i  a,
Packet8i  b 
)
646  {
647  return _mm512_inserti64x4(_mm512_castsi256_si512(a), b, 1);
648 }

References a, and b.

Referenced by pcast< Packet8d, Packet16i >().

◆ check_for_aliasing()

template<typename Dst , typename Src >
EIGEN_DEVICE_FUNC void Eigen::internal::check_for_aliasing ( const Dst &  dst,
const Src &  src 
)
inline

◆ check_implication()

◆ check_size_for_overflow()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::check_size_for_overflow ( std::size_t  size)
393  {
394  constexpr std::size_t max_elements = (std::numeric_limits<std::ptrdiff_t>::max)() / sizeof(T);
395  if (size > max_elements) throw_std_bad_alloc();
396 }
#define max(a, b)
Definition: datatypes.h:23

References max, size, and throw_std_bad_alloc().

◆ check_svd_options_assertions()

template<typename MatrixType , int Options>
void Eigen::internal::check_svd_options_assertions ( unsigned int  computationOptions,
Index  rows,
Index  cols 
)
42  {
44  "SVDBase: Cannot request U or V using both static and runtime options, even if they match. "
45  "Requesting unitaries at runtime is DEPRECATED: "
46  "Prefer requesting unitaries statically, using the Options template parameter.");
48  !(should_svd_compute_thin_u(computationOptions) && cols < rows && MatrixType::RowsAtCompileTime != Dynamic) &&
49  !(should_svd_compute_thin_v(computationOptions) && rows < cols && MatrixType::ColsAtCompileTime != Dynamic) &&
50  "SVDBase: If thin U is requested at runtime, your matrix must have more rows than columns or a dynamic number of "
51  "rows."
52  "Similarly, if thin V is requested at runtime, you matrix must have more columns than rows or a dynamic number "
53  "of columns.");
54  (void)computationOptions;
55  (void)rows;
56  (void)cols;
57 }
#define EIGEN_STATIC_ASSERT(X, MSG)
Definition: StaticAssert.h:26
constexpr bool should_svd_compute_thin_u(int options)
Definition: SVDBase.h:36
constexpr bool should_svd_compute_thin_v(int options)
Definition: SVDBase.h:38

References cols, ComputationOptionsBits, Eigen::Dynamic, eigen_assert, EIGEN_STATIC_ASSERT, rows, should_svd_compute_thin_u(), and should_svd_compute_thin_v().

◆ check_that_malloc_is_allowed()

◆ chkder()

template<typename Scalar >
void Eigen::internal::chkder ( const Matrix< Scalar, Dynamic, 1 > &  x,
const Matrix< Scalar, Dynamic, 1 > &  fvec,
const Matrix< Scalar, Dynamic, Dynamic > &  fjac,
Matrix< Scalar, Dynamic, 1 > &  xp,
const Matrix< Scalar, Dynamic, 1 > &  fvecp,
int  mode,
Matrix< Scalar, Dynamic, 1 > &  err 
)
14  {
15  using std::abs;
16  using std::log;
17  using std::sqrt;
18 
19  typedef DenseIndex Index;
20 
23  const Scalar epslog = chkder_log10e * log(eps);
24  Scalar temp;
25 
26  const Index m = fvec.size(), n = x.size();
27 
28  if (mode != 2) {
29  /* mode = 1. */
30  xp.resize(n);
31  for (Index j = 0; j < n; ++j) {
32  temp = eps * abs(x[j]);
33  if (temp == 0.) temp = eps;
34  xp[j] = x[j] + temp;
35  }
36  } else {
37  /* mode = 2. */
38  err.setZero(m);
39  for (Index j = 0; j < n; ++j) {
40  temp = abs(x[j]);
41  if (temp == 0.) temp = 1.;
42  err += temp * fjac.col(j);
43  }
44  for (Index i = 0; i < m; ++i) {
45  temp = 1.;
46  if (fvec[i] != 0. && fvecp[i] != 0. && abs(fvecp[i] - fvec[i]) >= epsf * abs(fvec[i]))
47  temp = eps * abs((fvecp[i] - fvec[i]) / eps - err[i]) / (abs(fvec[i]) + abs(fvecp[i]));
48  err[i] = 1.;
49  if (temp > NumTraits<Scalar>::epsilon() && temp < eps) err[i] = (chkder_log10e * log(temp) - epslog) / epslog;
50  if (temp >= eps) err[i] = 0.;
51  }
52  }
53 }
#define chkder_log10e
Definition: chkder.h:1
#define chkder_factor
Definition: chkder.h:2
EIGEN_DEVICE_FUNC Derived & setZero(Index size)
Definition: CwiseNullaryOp.h:569
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
Definition: PlainObjectBase.h:294
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 log(const bfloat16 &a)
Definition: BFloat16.h:618
EIGEN_DEFAULT_DENSE_INDEX_TYPE DenseIndex
Definition: Meta.h:75

References abs(), chkder_factor, chkder_log10e, CRBond_Bessel::eps, oomph::SarahBL::epsilon, i, j, Eigen::bfloat16_impl::log(), m, n, Eigen::PlainObjectBase< Derived >::resize(), Eigen::PlainObjectBase< Derived >::setZero(), sqrt(), and plotDoE::x.

Referenced by testChkder().

◆ clz()

template<typename BitsType >
EIGEN_DEVICE_FUNC int Eigen::internal::clz ( BitsType  bits)
inline
644  {
646 }
EIGEN_DEVICE_FUNC int clz(BitsType bits)
Definition: MathFunctions.h:644
Map< const Array< unsigned char, sizeof(T), 1 > > bits(const T &x)
Definition: packetmath_test_shared.h:36

References Eigen::test::bits(), and Eigen::internal::count_bits_impl< BitsType, EnableIf >::clz().

Referenced by count_leading_zeros(), test_clz_ctz(), and test_clz_ctz_random().

◆ cm_factorize_p()

template<typename StorageIndex_ >
int Eigen::internal::cm_factorize_p ( cholmod_sparse *  A,
double  beta[2],
StorageIndex_ *  fset,
std::size_t  fsize,
cholmod_factor *  L,
cholmod_common &  Common 
)
inline
223  {
224  return cholmod_factorize_p(A, beta, fset, fsize, L, &Common);
225 }

References beta, and L.

◆ cm_factorize_p< SuiteSparse_long >()

template<>
int Eigen::internal::cm_factorize_p< SuiteSparse_long > ( cholmod_sparse *  A,
double  beta[2],
SuiteSparse_long *  fset,
std::size_t  fsize,
cholmod_factor *  L,
cholmod_common &  Common 
)
inline
228  {
229  return cholmod_l_factorize_p(A, beta, fset, fsize, L, &Common);
230 }

References beta, and L.

◆ cm_solve()

template<typename StorageIndex_ >
cholmod_dense* Eigen::internal::cm_solve ( int  sys,
cholmod_factor &  L,
cholmod_dense &  B,
cholmod_common &  Common 
)
inline
203  {
204  return cholmod_solve(sys, &L, &B, &Common);
205 }

References L.

◆ cm_solve< SuiteSparse_long >()

template<>
cholmod_dense* Eigen::internal::cm_solve< SuiteSparse_long > ( int  sys,
cholmod_factor &  L,
cholmod_dense &  B,
cholmod_common &  Common 
)
inline
207  {
208  return cholmod_l_solve(sys, &L, &B, &Common);
209 }

References L.

◆ cm_spsolve()

template<typename StorageIndex_ >
cholmod_sparse* Eigen::internal::cm_spsolve ( int  sys,
cholmod_factor &  L,
cholmod_sparse &  B,
cholmod_common &  Common 
)
inline
212  {
213  return cholmod_spsolve(sys, &L, &B, &Common);
214 }

References L.

◆ cm_spsolve< SuiteSparse_long >()

template<>
cholmod_sparse* Eigen::internal::cm_spsolve< SuiteSparse_long > ( int  sys,
cholmod_factor &  L,
cholmod_sparse &  B,
cholmod_common &  Common 
)
inline
217  {
218  return cholmod_l_spsolve(sys, &L, &B, &Common);
219 }

References L.

◆ cofactor_3x3()

template<typename MatrixType , int i, int j>
EIGEN_DEVICE_FUNC MatrixType::Scalar Eigen::internal::cofactor_3x3 ( const MatrixType m)
inline
107  {
108  enum { i1 = (i + 1) % 3, i2 = (i + 2) % 3, j1 = (j + 1) % 3, j2 = (j + 2) % 3 };
109  return m.coeff(i1, j1) * m.coeff(i2, j2) - m.coeff(i1, j2) * m.coeff(i2, j1);
110 }

References i, j, and m.

◆ cofactor_4x4()

template<typename MatrixType , int i, int j>
EIGEN_DEVICE_FUNC MatrixType::Scalar Eigen::internal::cofactor_4x4 ( const MatrixType matrix)
inline
175  {
176  enum { i1 = (i + 1) % 4, i2 = (i + 2) % 4, i3 = (i + 3) % 4, j1 = (j + 1) % 4, j2 = (j + 2) % 4, j3 = (j + 3) % 4 };
177  return general_det3_helper(matrix, i1, i2, i3, j1, j2, j3) + general_det3_helper(matrix, i2, i3, i1, j1, j2, j3) +
178  general_det3_helper(matrix, i3, i1, i2, j1, j2, j3);
179 }
EIGEN_DEVICE_FUNC const Derived::Scalar general_det3_helper(const MatrixBase< Derived > &matrix, int i1, int i2, int i3, int j1, int j2, int j3)
Definition: InverseImpl.h:168

References general_det3_helper(), i, j, and matrix().

◆ coletree()

template<typename MatrixType , typename IndexVector >
int Eigen::internal::coletree ( const MatrixType mat,
IndexVector &  parent,
IndexVector &  firstRowElt,
typename MatrixType::StorageIndex *  perm = 0 
)

Compute the column elimination tree of a sparse matrix

Parameters
matThe matrix in column-major format.
parentThe elimination tree
firstRowEltThe column index of the first element in each row
permThe permutation to apply to the column of mat
62  {
63  typedef typename MatrixType::StorageIndex StorageIndex;
64  StorageIndex nc = convert_index<StorageIndex>(mat.cols()); // Number of columns
65  StorageIndex m = convert_index<StorageIndex>(mat.rows());
66  StorageIndex diagSize = (std::min)(nc, m);
67  IndexVector root(nc); // root of subtree of etree
68  root.setZero();
69  IndexVector pp(nc); // disjoint sets
70  pp.setZero(); // Initialize disjoint sets
71  parent.resize(mat.cols());
72  // Compute first nonzero column in each row
73  firstRowElt.resize(m);
74  firstRowElt.setConstant(nc);
75  firstRowElt.segment(0, diagSize).setLinSpaced(diagSize, 0, diagSize - 1);
76  bool found_diag;
77  for (StorageIndex col = 0; col < nc; col++) {
78  StorageIndex pcol = col;
79  if (perm) pcol = perm[col];
80  for (typename MatrixType::InnerIterator it(mat, pcol); it; ++it) {
81  Index row = it.row();
82  firstRowElt(row) = (std::min)(firstRowElt(row), col);
83  }
84  }
85  /* Compute etree by Liu's algorithm for symmetric matrices,
86  except use (firstRowElt[r],c) in place of an edge (r,c) of A.
87  Thus each row clique in A'*A is replaced by a star
88  centered at its first vertex, which has the same fill. */
89  StorageIndex rset, cset, rroot;
90  for (StorageIndex col = 0; col < nc; col++) {
91  found_diag = col >= m;
92  pp(col) = col;
93  cset = col;
94  root(cset) = col;
95  parent(col) = nc;
96  /* The diagonal element is treated here even if it does not exist in the matrix
97  * hence the loop is executed once more */
98  StorageIndex pcol = col;
99  if (perm) pcol = perm[col];
100  for (typename MatrixType::InnerIterator it(mat, pcol); it || !found_diag;
101  ++it) { // A sequence of interleaved find and union is performed
102  Index i = col;
103  if (it) i = it.index();
104  if (i == col) found_diag = true;
105 
106  StorageIndex row = firstRowElt(i);
107  if (row >= col) continue;
108  rset = internal::etree_find(row, pp); // Find the name of the set containing row
109  rroot = root(rset);
110  if (rroot != col) {
111  parent(rroot) = col;
112  pp(cset) = rset;
113  cset = rset;
114  root(cset) = col;
115  }
116  }
117  }
118  return 0;
119 }
Index etree_find(Index i, IndexVector &pp)
Definition: SparseColEtree.h:42

References col(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), etree_find(), i, m, min, row(), and Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows().

Referenced by Eigen::SparseQR< MatrixType_, OrderingType_ >::analyzePattern(), Eigen::SparseLU< MatrixType_, OrderingType_ >::analyzePattern(), and Eigen::SparseQR< MatrixType_, OrderingType_ >::factorize().

◆ colLoopBody()

template<const Index num_acc, const Index num_packets, bool rhsExtraCols, bool lhsExtraRows>
void Eigen::internal::colLoopBody ( Index col,
Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const bfloat16 indexA,
const bfloat16 indexB,
Index  strideB,
Index  offsetB,
float *  result 
)
134  {
135  constexpr Index step = (num_acc * 4); // each accumulator has 4 elements
136  const Index extra_cols = (rhsExtraCols) ? (cols & 3) : 0;
137  const Index extra_rows = (lhsExtraRows) ? (rows & 3) : 0;
138  constexpr bool multiIters = !rhsExtraCols && (num_acc == MAX_BFLOAT16_ACC);
139  constexpr bool normIters = multiIters && ((num_acc % (num_packets / 4)) == 0);
140 
141  do {
142  colLoopBodyIter<num_acc, num_packets, rhsExtraCols, lhsExtraRows, normIters>(
143  depth, rows, pAlpha, indexA, indexB, strideB, offsetB, result, extra_cols, extra_rows);
144 
145  indexB += strideB * num_acc;
146  result += rows * step;
147  } while (multiIters && (step <= cols - (col += step)));
148 }
#define MAX_BFLOAT16_ACC
Definition: MatrixProductMMAbfloat16.h:130

References col(), cols, MAX_BFLOAT16_ACC, and rows.

◆ colLoopBodyExtra()

template<const Index num_packets, bool rhsExtraCols, bool lhsExtraRows>
void Eigen::internal::colLoopBodyExtra ( Index  col,
Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const bfloat16 indexA,
const bfloat16 blockB,
Index  strideB,
Index  offsetB,
float *  result 
)
162  {
163  switch ((cols - col) >> 2) {
164  case 7:
165  colLoopBodyExtraN<7, num_packets, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB,
166  strideB, offsetB, result);
167  break;
168  case 6:
169  colLoopBodyExtraN<6, num_packets, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB,
170  strideB, offsetB, result);
171  break;
172  case 5:
173  colLoopBodyExtraN<5, num_packets, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB,
174  strideB, offsetB, result);
175  break;
176  case 4:
177  colLoopBodyExtraN<4, num_packets, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB,
178  strideB, offsetB, result);
179  break;
180  case 3:
181  colLoopBodyExtraN<3, num_packets, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB,
182  strideB, offsetB, result);
183  break;
184  case 2:
185  colLoopBodyExtraN<2, num_packets, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB,
186  strideB, offsetB, result);
187  break;
188  case 1:
189  colLoopBodyExtraN<1, num_packets, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB,
190  strideB, offsetB, result);
191  break;
192  default:
193  if (rhsExtraCols) {
194  colLoopBody<1, num_packets, true, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB, strideB,
195  offsetB, result);
196  }
197  break;
198  }
199 }

References col(), cols, and rows.

◆ colLoopBodyExtraN()

template<const Index num_acc, const Index num_packets, bool rhsExtraCols, bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void Eigen::internal::colLoopBodyExtraN ( Index  col,
Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const bfloat16 indexA,
const bfloat16 blockB,
Index  strideB,
Index  offsetB,
float *  result 
)
153  {
154  if (MAX_BFLOAT16_ACC > num_acc) {
155  colLoopBody<num_acc + (rhsExtraCols ? 1 : 0), num_packets, rhsExtraCols, lhsExtraRows>(
156  col, depth, cols, rows, pAlpha, indexA, blockB, strideB, offsetB, result);
157  }
158 }

References col(), cols, MAX_BFLOAT16_ACC, and rows.

◆ colLoopBodyIter()

template<const Index num_acc, const Index num_packets, bool rhsExtraCols, bool lhsExtraRows, bool multiIter = false>
EIGEN_ALWAYS_INLINE void Eigen::internal::colLoopBodyIter ( Index  depth,
Index  rows,
const Packet4f  pAlpha,
const bfloat16 indexA,
const bfloat16 indexB,
Index  strideB,
Index  offsetB,
float *  result,
const Index  extra_cols,
const Index  extra_rows 
)
102  {
103  constexpr Index num_lhs = multiIter ? (num_packets / 4) : 1;
104  constexpr Index num_rhs = (num_acc + num_lhs - 1) / num_lhs;
105 
106  for (Index offset_row = 0; offset_row < num_packets; offset_row += 4, indexA += (multiIter ? 0 : 8),
107  indexB += (multiIter ? (num_rhs * strideB) : 0), result += (multiIter ? (4 * rows * num_rhs) : 4)) {
108  Packet4f acc[num_acc][4];
109  __vector_quad quad_acc[num_acc];
110 
111  zeroAccumulators<num_acc>(quad_acc);
112 
113  Index k;
114  for (k = 0; k + 2 <= depth; k += 2) {
115  KLoop<num_acc, num_packets, false, rhsExtraCols, lhsExtraRows, num_rhs, num_lhs>(
116  indexA, indexB, quad_acc, strideB, k, offsetB, extra_cols, extra_rows);
117  }
118  if (depth & 1) {
119  KLoop<num_acc, num_packets, true, rhsExtraCols, lhsExtraRows, num_rhs, num_lhs>(
120  indexA - (multiIter ? 0 : offset_row), indexB, quad_acc, strideB, k, offsetB, extra_cols, extra_rows);
121  }
122 
123  disassembleAccumulators<num_acc>(quad_acc, acc);
124 
125  outputResults<num_acc, rhsExtraCols, lhsExtraRows, num_rhs, num_lhs>(acc, rows, pAlpha, result, extra_cols,
126  extra_rows);
127  }
128 }

References k, and rows.

◆ colLoops()

template<const Index num_packets, bool lhsExtraRows = false>
EIGEN_ALWAYS_INLINE void Eigen::internal::colLoops ( Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const bfloat16 indexA,
const bfloat16 blockB,
Index  strideB,
Index  offsetB,
float *  result 
)
203  {
204  Index col = 0;
205  if (cols >= (MAX_BFLOAT16_ACC * 4)) {
206  colLoopBody<MAX_BFLOAT16_ACC, num_packets, false, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB,
207  strideB, 0, result);
208  blockB += (strideB >> 2) * col;
209  result += rows * col;
210  }
211  if (cols & 3) {
212  colLoopBodyExtra<num_packets, true, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB, strideB, offsetB,
213  result);
214  } else {
215  colLoopBodyExtra<num_packets, false, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB, strideB, 0,
216  result);
217  }
218 }

References col(), cols, MAX_BFLOAT16_ACC, and rows.

◆ colVecColLoopBody()

template<const Index num_acc, typename LhsMapper , typename RhsMapper , bool extraRows, bool linear>
void Eigen::internal::colVecColLoopBody ( Index row,
Index  cend,
Index  rows,
LhsMapper &  lhs,
RhsMapper &  rhs,
const Packet4f  pAlpha,
float *  result 
)
413  {
414  constexpr Index step = (num_acc * 4);
415  const Index extra_rows = (extraRows) ? (rows & 3) : 0;
416  constexpr bool multiIters = !extraRows && (num_acc == MAX_BFLOAT16_VEC_ACC);
417 
418  do {
419  Packet4f acc[num_acc][4];
420  __vector_quad quad_acc[num_acc];
421 
422  zeroAccumulators<num_acc>(quad_acc);
423 
424  using LhsSubMapper = typename LhsMapper::SubMapper;
425 
426  LhsSubMapper lhs2 = lhs.getSubMapper(row, 0);
427  for (Index j = 0; j + 2 <= cend; j += 2) {
428  vecColLoop<num_acc, LhsSubMapper, RhsMapper, false, linear>(j, lhs2, rhs, quad_acc);
429  }
430  if (cend & 1) {
431  vecColLoop<num_acc, LhsSubMapper, RhsMapper, true, linear>(cend - 1, lhs2, rhs, quad_acc);
432  }
433 
434  disassembleAccumulators<num_acc>(quad_acc, acc);
435 
436  outputVecColResults<num_acc, extraRows>(acc, result, pAlpha, extra_rows);
437 
438  result += step;
439  } while (multiIters && (step <= rows - (row += step)));
440 }

References j, MAX_BFLOAT16_VEC_ACC, row(), and rows.

◆ colVecColLoopBodyExtra()

template<typename LhsMapper , typename RhsMapper , bool extraRows, bool linear>
EIGEN_ALWAYS_INLINE void Eigen::internal::colVecColLoopBodyExtra ( Index row,
Index  cend,
Index  rows,
LhsMapper &  lhs,
RhsMapper &  rhs,
const Packet4f  pAlpha,
float *  result 
)
453  {
454  switch ((rows - row) >> 2) {
455  case 7:
456  colVecColLoopBodyExtraN<7, LhsMapper, RhsMapper, extraRows, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
457  break;
458  case 6:
459  colVecColLoopBodyExtraN<6, LhsMapper, RhsMapper, extraRows, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
460  break;
461  case 5:
462  colVecColLoopBodyExtraN<5, LhsMapper, RhsMapper, extraRows, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
463  break;
464  case 4:
465  colVecColLoopBodyExtraN<4, LhsMapper, RhsMapper, extraRows, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
466  break;
467  case 3:
468  colVecColLoopBodyExtraN<3, LhsMapper, RhsMapper, extraRows, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
469  break;
470  case 2:
471  colVecColLoopBodyExtraN<2, LhsMapper, RhsMapper, extraRows, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
472  break;
473  case 1:
474  colVecColLoopBodyExtraN<1, LhsMapper, RhsMapper, extraRows, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
475  break;
476  default:
477  if (extraRows) {
478  colVecColLoopBody<1, LhsMapper, RhsMapper, true, linear>(row, cend, rows, lhs, rhs, pAlpha, result);
479  }
480  break;
481  }
482 }

References row(), and rows.

◆ colVecColLoopBodyExtraN()

template<const Index num_acc, typename LhsMapper , typename RhsMapper , bool extraRows, bool linear>
EIGEN_ALWAYS_INLINE void Eigen::internal::colVecColLoopBodyExtraN ( Index row,
Index  cend,
Index  rows,
LhsMapper &  lhs,
RhsMapper &  rhs,
const Packet4f  pAlpha,
float *  result 
)
444  {
445  if (MAX_BFLOAT16_VEC_ACC > num_acc) {
446  colVecColLoopBody<num_acc + (extraRows ? 1 : 0), LhsMapper, RhsMapper, extraRows, linear>(row, cend, rows, lhs, rhs,
447  pAlpha, result);
448  }
449 }

References MAX_BFLOAT16_VEC_ACC, row(), and rows.

◆ colVecLoopBody()

template<const Index num_acc, typename LhsMapper , typename RhsMapper >
void Eigen::internal::colVecLoopBody ( Index row,
Index  cols,
Index  rows,
LhsMapper &  lhs,
RhsMapper &  rhs,
const Packet4f  pAlpha,
float *  result 
)
637  {
638  constexpr bool multiIters = (num_acc == MAX_BFLOAT16_VEC_ACC);
639  const Index extra_cols = (cols & 7);
640 
641  do {
642  Packet4f acc[num_acc][4];
643  __vector_quad quad_acc[num_acc];
644 
645  zeroAccumulators<num_acc>(quad_acc);
646 
647  const LhsMapper lhs2 = lhs.getSubMapper(row, 0);
648  vecLoop<num_acc, LhsMapper, RhsMapper>(cols, lhs2, rhs, quad_acc, extra_cols);
649 
650  disassembleAccumulators<num_acc>(quad_acc, acc);
651 
652  preduxVecResults<num_acc>(acc);
653 
654  outputVecResults<num_acc>(acc, result, pAlpha);
655 
656  result += num_acc;
657  } while (multiIters && (num_acc <= rows - (row += num_acc)));
658 }

References cols, MAX_BFLOAT16_VEC_ACC, row(), and rows.

◆ colVecLoopBodyExtra()

template<typename LhsMapper , typename RhsMapper >
EIGEN_ALWAYS_INLINE void Eigen::internal::colVecLoopBodyExtra ( Index row,
Index  cols,
Index  rows,
LhsMapper &  lhs,
RhsMapper &  rhs,
const Packet4f  pAlpha,
float *  result 
)
670  {
671  switch (rows - row) {
672  case 7:
673  colVecLoopBodyExtraN<7, LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
674  break;
675  case 6:
676  colVecLoopBodyExtraN<6, LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
677  break;
678  case 5:
679  colVecLoopBodyExtraN<5, LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
680  break;
681  case 4:
682  colVecLoopBodyExtraN<4, LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
683  break;
684  case 3:
685  colVecLoopBodyExtraN<3, LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
686  break;
687  case 2:
688  colVecLoopBodyExtraN<2, LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
689  break;
690  case 1:
691  colVecLoopBodyExtraN<1, LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
692  break;
693  }
694 }

References cols, row(), and rows.

◆ colVecLoopBodyExtraN()

template<const Index num_acc, typename LhsMapper , typename RhsMapper >
EIGEN_ALWAYS_INLINE void Eigen::internal::colVecLoopBodyExtraN ( Index row,
Index  cols,
Index  rows,
LhsMapper &  lhs,
RhsMapper &  rhs,
const Packet4f  pAlpha,
float *  result 
)
662  {
663  if (MAX_BFLOAT16_VEC_ACC > num_acc) {
664  colVecLoopBody<num_acc, LhsMapper, RhsMapper>(row, cols, rows, lhs, rhs, pAlpha, result);
665  }
666 }

References cols, MAX_BFLOAT16_VEC_ACC, row(), and rows.

◆ colVSXLoopBody()

template<const Index num_acc, bool rhsExtraCols, bool lhsExtraRows>
void Eigen::internal::colVSXLoopBody ( Index col,
Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const float *  indexA,
const float *  indexB,
Index  strideB,
Index  offsetB,
float *  result 
)
2943  {
2944  constexpr Index step = (num_acc * 4); // each accumulator has 4 elements
2945  const Index extra_cols = (rhsExtraCols) ? (cols & 3) : 0;
2946  const Index extra_rows = (lhsExtraRows) ? (rows & 3) : 0;
2947  constexpr bool multiIters = !rhsExtraCols && (num_acc == MAX_BFLOAT16_ACC_VSX);
2948 
2949  do {
2950  colVSXLoopBodyIter<num_acc * 2, rhsExtraCols, lhsExtraRows>(depth, rows, pAlpha, indexA, indexB, strideB, offsetB,
2951  result, extra_cols, extra_rows);
2952 
2953  indexB += strideB * (num_acc * 2);
2954  result += rows * step;
2955  } while (multiIters && (step <= cols - (col += step)));
2956 }
#define MAX_BFLOAT16_ACC_VSX
Definition: MatrixProduct.h:2939

References col(), cols, MAX_BFLOAT16_ACC_VSX, and rows.

◆ colVSXLoopBodyExtra()

template<bool rhsExtraCols, bool lhsExtraRows>
void Eigen::internal::colVSXLoopBodyExtra ( Index  col,
Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const float *  indexA,
const float *  blockB,
Index  strideB,
Index  offsetB,
float *  result 
)
2970  {
2971  switch ((cols - col) >> 2) {
2972  case 3:
2973  colVSXLoopBodyExtraN<3, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB, strideB,
2974  offsetB, result);
2975  break;
2976  case 2:
2977  colVSXLoopBodyExtraN<2, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB, strideB,
2978  offsetB, result);
2979  break;
2980  case 1:
2981  colVSXLoopBodyExtraN<1, rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB, strideB,
2982  offsetB, result);
2983  break;
2984  default:
2985  if (rhsExtraCols) {
2986  colVSXLoopBody<1, true, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA, blockB, strideB, offsetB, result);
2987  }
2988  break;
2989  }
2990 }

References col(), cols, and rows.

◆ colVSXLoopBodyExtraN()

template<const Index num_acc, bool rhsExtraCols, bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void Eigen::internal::colVSXLoopBodyExtraN ( Index  col,
Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const float *  indexA,
const float *  blockB,
Index  strideB,
Index  offsetB,
float *  result 
)
2961  {
2962  if (MAX_BFLOAT16_ACC_VSX > num_acc) {
2963  colVSXLoopBody<num_acc + (rhsExtraCols ? 1 : 0), rhsExtraCols, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA,
2964  blockB, strideB, offsetB, result);
2965  }
2966 }

References col(), cols, MAX_BFLOAT16_ACC_VSX, and rows.

◆ colVSXLoopBodyIter()

template<const Index num_acc, bool rhsExtraCols, bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void Eigen::internal::colVSXLoopBodyIter ( Index  depth,
Index  rows,
const Packet4f  pAlpha,
const float *  indexA,
const float *  indexB,
Index  strideB,
Index  offsetB,
float *  result,
const Index  extra_cols,
const Index  extra_rows 
)
2920  {
2921  constexpr Index num_rhs = num_acc;
2922 
2923  Packet4f acc[num_acc][4];
2924 
2925  zeroAccumulators<num_acc>(acc);
2926 
2927  Index k;
2928  for (k = 0; k + 2 <= depth; k += 2) {
2929  KLoop<num_acc, false, rhsExtraCols, num_rhs>(indexA, indexB, acc, strideB, k, offsetB, extra_cols);
2930  }
2931  if (depth & 1) {
2932  KLoop<num_acc, true, rhsExtraCols, num_rhs>(indexA, indexB, acc, strideB, k, offsetB, extra_cols);
2933  }
2934 
2935  outputResultsVSX<num_acc, rhsExtraCols, lhsExtraRows, num_rhs>(acc, rows, pAlpha, result, extra_cols, extra_rows);
2936 }

References k, and rows.

◆ colVSXLoops()

template<Index size, bool lhsExtraRows = false>
EIGEN_ALWAYS_INLINE void Eigen::internal::colVSXLoops ( Index  depth,
Index  cols,
Index  rows,
const Packet4f  pAlpha,
const bfloat16 indexA,
const float *  indexA2,
const float *  blockB2,
Index  strideA,
Index  strideB,
Index  offsetB,
float *  result2 
)
2995  {
2996  Index delta_rows = 2 * (lhsExtraRows ? (rows & 3) : size);
2997  for (Index row = 0; row < size; row += 4) {
2998  convertArrayPointerBF16toF32Dup<lhsExtraRows>(const_cast<float*>(indexA2), strideA, delta_rows, indexA, row,
2999  rows & 3);
3000 
3001  const float* blockB = blockB2;
3002  float* result = result2 + row;
3003 
3004  Index col = 0;
3005  if (cols >= (MAX_BFLOAT16_ACC_VSX * 4)) {
3006  colVSXLoopBody<MAX_BFLOAT16_ACC_VSX, false, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA2, blockB,
3007  strideB, 0, result);
3008  blockB += (strideB >> 1) * col;
3009  result += rows * col;
3010  }
3011  if (cols & 3) {
3012  colVSXLoopBodyExtra<true, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA2, blockB, strideB, offsetB,
3013  result);
3014  } else {
3015  colVSXLoopBodyExtra<false, lhsExtraRows>(col, depth, cols, rows, pAlpha, indexA2, blockB, strideB, 0, result);
3016  }
3017  }
3018 }

References col(), cols, MAX_BFLOAT16_ACC_VSX, row(), rows, and size.

◆ combine2Packet16h()

EIGEN_STRONG_INLINE Packet32h Eigen::internal::combine2Packet16h ( const Packet16h a,
const Packet16h b 
)
723  {
724  __m512d result = _mm512_undefined_pd();
725  result = _mm512_insertf64x4(result, _mm256_castsi256_pd(a), 0);
726  result = _mm512_insertf64x4(result, _mm256_castsi256_pd(b), 1);
727  return _mm512_castpd_ph(result);
728 }

References a, and b.

Referenced by pcos< Packet32h >(), pexp< Packet32h >(), pexpm1< Packet32h >(), pfrexp< Packet32h >(), pldexp< Packet32h >(), plog1p< Packet32h >(), plog2< Packet32h >(), plog< Packet32h >(), psin< Packet32h >(), and ptanh< Packet32h >().

◆ combine_scalar_factors() [1/2]

template<typename ResScalar , typename Lhs , typename Rhs >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar Eigen::internal::combine_scalar_factors ( const Lhs lhs,
const Rhs rhs 
)

◆ combine_scalar_factors() [2/2]

◆ complex_log()

template<typename T >
EIGEN_DEVICE_FUNC std::complex< T > Eigen::internal::complex_log ( const std::complex< T > &  z)
250  {
251  // Computes complex log.
252  T a = numext::abs(z);
254  T b = atan2(z.imag(), z.real());
255  return std::complex<T>(numext::log(a), b);
256 }
AnnoyingScalar atan2(const AnnoyingScalar &y, const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:139

References a, Eigen::numext::abs(), Eigen::atan2(), b, EIGEN_USING_STD, and Eigen::numext::log().

Referenced by Eigen::internal::log_impl< std::complex< Scalar > >::run().

◆ complex_rsqrt()

template<typename T >
EIGEN_DEVICE_FUNC std::complex< T > Eigen::internal::complex_rsqrt ( const std::complex< T > &  a_x)
211  {
212  // Computes the principal reciprocal sqrt of the input.
213  //
214  // For a complex reciprocal square root of the number z = x + i*y. We want to
215  // find real numbers u and v such that
216  // (u + i*v)^2 = 1 / (x + i*y) <=>
217  // u^2 - v^2 + i*2*u*v = x/|z|^2 - i*v/|z|^2.
218  // By equating the real and imaginary parts we get:
219  // u^2 - v^2 = x/|z|^2
220  // 2*u*v = y/|z|^2.
221  //
222  // For x >= 0, this has the numerically stable solution
223  // u = sqrt(0.5 * (x + |z|)) / |z|
224  // v = -y / (2 * u * |z|)
225  // and for x < 0,
226  // v = -sign(y) * sqrt(0.5 * (-x + |z|)) / |z|
227  // u = -y / (2 * v * |z|)
228  //
229  // Letting w = sqrt(0.5 * (|x| + |z|)),
230  // if x == 0: u = w / |z|, v = -sign(y) * w / |z|
231  // if x > 0: u = w / |z|, v = -y / (2 * w * |z|)
232  // if x < 0: u = |y| / (2 * w * |z|), v = -sign(y) * w / |z|
233 
234  const T x = numext::real(z);
235  const T y = numext::imag(z);
236  const T zero = T(0);
237 
238  const T abs_z = numext::hypot(x, y);
239  const T w = numext::sqrt(T(0.5) * (numext::abs(x) + abs_z));
240  const T woz = w / abs_z;
241  // Corner cases consistent with 1/sqrt(z) on gcc/clang.
242  return numext::is_exactly_zero(abs_z) ? std::complex<T>(NumTraits<T>::infinity(), NumTraits<T>::quiet_NaN())
243  : ((numext::isinf)(x) || (numext::isinf)(y)) ? std::complex<T>(zero, zero)
244  : numext::is_exactly_zero(x) ? std::complex<T>(woz, y < zero ? woz : -woz)
245  : x > zero ? std::complex<T>(woz, -y / (2 * w * abs_z))
246  : std::complex<T>(numext::abs(y) / (2 * w * abs_z), y < zero ? woz : -woz);
247 }
AnnoyingScalar imag(const AnnoyingScalar &)
Definition: AnnoyingScalar.h:132
float real
Definition: datatypes.h:10
#define isinf(X)
Definition: main.h:110
Definition: datatypes.h:12
EIGEN_DONT_INLINE Scalar zero()
Definition: svd_common.h:232

References Eigen::numext::abs(), imag(), Eigen::numext::is_exactly_zero(), Eigen::numext::isinf(), Eigen::numext::sqrt(), w, plotDoE::x, y, and zero().

◆ complex_sqrt()

template<typename T >
EIGEN_DEVICE_FUNC std::complex< T > Eigen::internal::complex_sqrt ( const std::complex< T > &  a_x)
175  {
176  // Computes the principal sqrt of the input.
177  //
178  // For a complex square root of the number x + i*y. We want to find real
179  // numbers u and v such that
180  // (u + i*v)^2 = x + i*y <=>
181  // u^2 - v^2 + i*2*u*v = x + i*v.
182  // By equating the real and imaginary parts we get:
183  // u^2 - v^2 = x
184  // 2*u*v = y.
185  //
186  // For x >= 0, this has the numerically stable solution
187  // u = sqrt(0.5 * (x + sqrt(x^2 + y^2)))
188  // v = y / (2 * u)
189  // and for x < 0,
190  // v = sign(y) * sqrt(0.5 * (-x + sqrt(x^2 + y^2)))
191  // u = y / (2 * v)
192  //
193  // Letting w = sqrt(0.5 * (|x| + |z|)),
194  // if x == 0: u = w, v = sign(y) * w
195  // if x > 0: u = w, v = y / (2 * w)
196  // if x < 0: u = |y| / (2 * w), v = sign(y) * w
197 
198  const T x = numext::real(z);
199  const T y = numext::imag(z);
200  const T zero = T(0);
201  const T w = numext::sqrt(T(0.5) * (numext::abs(x) + numext::hypot(x, y)));
202 
203  return (numext::isinf)(y) ? std::complex<T>(NumTraits<T>::infinity(), y)
204  : numext::is_exactly_zero(x) ? std::complex<T>(w, y < zero ? -w : w)
205  : x > zero ? std::complex<T>(w, y / (2 * w))
206  : std::complex<T>(numext::abs(y) / (2 * w), y < zero ? -w : w);
207 }

References Eigen::numext::abs(), imag(), Eigen::numext::is_exactly_zero(), Eigen::numext::isinf(), Eigen::numext::sqrt(), w, plotDoE::x, y, and zero().

◆ compute_default_alignment_helper()

constexpr int Eigen::internal::compute_default_alignment_helper ( int  ArrayBytes,
int  AlignmentBytes 
)
inlineconstexpr
330  {
331  EIGEN_UNUSED_VARIABLE(ArrayBytes);
332  EIGEN_UNUSED_VARIABLE(AlignmentBytes);
333  return 0;
334 }

References EIGEN_UNUSED_VARIABLE.

◆ compute_inverse_size2_helper()

template<typename MatrixType , typename ResultType >
EIGEN_DEVICE_FUNC void Eigen::internal::compute_inverse_size2_helper ( const MatrixType matrix,
const typename ResultType::Scalar invdet,
ResultType &  result 
)
inline
69  {
70  typename ResultType::Scalar temp = matrix.coeff(0, 0);
71  result.coeffRef(0, 0) = matrix.coeff(1, 1) * invdet;
72  result.coeffRef(1, 0) = -matrix.coeff(1, 0) * invdet;
73  result.coeffRef(0, 1) = -matrix.coeff(0, 1) * invdet;
74  result.coeffRef(1, 1) = temp * invdet;
75 }

References matrix().

Referenced by Eigen::internal::compute_inverse_and_det_with_check< MatrixType, ResultType, 2 >::run(), and Eigen::internal::compute_inverse< MatrixType, ResultType, 2 >::run().

◆ compute_inverse_size3_helper()

template<typename MatrixType , typename ResultType >
EIGEN_DEVICE_FUNC void Eigen::internal::compute_inverse_size3_helper ( const MatrixType matrix,
const typename ResultType::Scalar invdet,
const Matrix< typename ResultType::Scalar, 3, 1 > &  cofactors_col0,
ResultType &  result 
)
inline
115  {
116  // Compute cofactors in a way that avoids aliasing issues.
117  typedef typename ResultType::Scalar Scalar;
118  const Scalar c01 = cofactor_3x3<MatrixType, 0, 1>(matrix) * invdet;
119  const Scalar c11 = cofactor_3x3<MatrixType, 1, 1>(matrix) * invdet;
120  const Scalar c02 = cofactor_3x3<MatrixType, 0, 2>(matrix) * invdet;
121  result.coeffRef(1, 2) = cofactor_3x3<MatrixType, 2, 1>(matrix) * invdet;
122  result.coeffRef(2, 1) = cofactor_3x3<MatrixType, 1, 2>(matrix) * invdet;
123  result.coeffRef(2, 2) = cofactor_3x3<MatrixType, 2, 2>(matrix) * invdet;
124  result.coeffRef(1, 0) = c01;
125  result.coeffRef(1, 1) = c11;
126  result.coeffRef(2, 0) = c02;
127  result.row(0) = cofactors_col0 * invdet;
128 }

References matrix().

Referenced by Eigen::internal::compute_inverse_and_det_with_check< MatrixType, ResultType, 3 >::run(), and Eigen::internal::compute_inverse< MatrixType, ResultType, 3 >::run().

◆ compute_matrix_flags()

constexpr unsigned Eigen::internal::compute_matrix_flags ( int  Options)
inlineconstexpr
365  {
366  unsigned row_major_bit = Options & RowMajor ? RowMajorBit : 0;
367  // FIXME currently we still have to handle DirectAccessBit at the expression level to handle DenseCoeffsBase<>
368  // and then propagate this information to the evaluator's flags.
369  // However, I (Gael) think that DirectAccessBit should only matter at the evaluation stage.
370  return DirectAccessBit | LvalueBit | NestByRefBit | row_major_bit;
371 }
const unsigned int DirectAccessBit
Definition: Constants.h:159
const unsigned int LvalueBit
Definition: Constants.h:148
const unsigned int NestByRefBit
Definition: Constants.h:173

References Eigen::DirectAccessBit, Eigen::LvalueBit, Eigen::NestByRefBit, Eigen::RowMajor, and Eigen::RowMajorBit.

◆ computeFromTridiagonal_impl()

template<typename MatrixType , typename DiagType , typename SubDiagType >
EIGEN_DEVICE_FUNC ComputationInfo Eigen::internal::computeFromTridiagonal_impl ( DiagType &  diag,
SubDiagType &  subdiag,
const Index  maxIterations,
bool  computeEigenvectors,
MatrixType eivec 
)

Compute the eigendecomposition from a tridiagonal matrix.

Parameters
[in,out]diag: On input, the diagonal of the matrix, on output the eigenvalues
[in,out]subdiag: The subdiagonal part of the matrix (entries are modified during the decomposition)
[in]maxIterations: the maximum number of iterations
[in]computeEigenvectors: whether the eigenvectors have to be computed or not
[out]eivec: The matrix to store the eigenvectors if computeEigenvectors==true. Must be allocated on input.
Returns
Success or NoConvergence
487  {
489  typedef typename MatrixType::Scalar Scalar;
490 
491  Index n = diag.size();
492  Index end = n - 1;
493  Index start = 0;
494  Index iter = 0; // total number of iterations
495 
496  typedef typename DiagType::RealScalar RealScalar;
497  const RealScalar considerAsZero = (std::numeric_limits<RealScalar>::min)();
498  const RealScalar precision_inv = RealScalar(1) / NumTraits<RealScalar>::epsilon();
499  while (end > 0) {
500  for (Index i = start; i < end; ++i) {
501  if (numext::abs(subdiag[i]) < considerAsZero) {
502  subdiag[i] = RealScalar(0);
503  } else {
504  // abs(subdiag[i]) <= epsilon * sqrt(abs(diag[i]) + abs(diag[i+1]))
505  // Scaled to prevent underflows.
506  const RealScalar scaled_subdiag = precision_inv * subdiag[i];
507  if (scaled_subdiag * scaled_subdiag <= (numext::abs(diag[i]) + numext::abs(diag[i + 1]))) {
508  subdiag[i] = RealScalar(0);
509  }
510  }
511  }
512 
513  // find the largest unreduced block at the end of the matrix.
514  while (end > 0 && numext::is_exactly_zero(subdiag[end - 1])) {
515  end--;
516  }
517  if (end <= 0) break;
518 
519  // if we spent too many iterations, we give up
520  iter++;
521  if (iter > maxIterations * n) break;
522 
523  start = end - 1;
524  while (start > 0 && !numext::is_exactly_zero(subdiag[start - 1])) start--;
525 
526  internal::tridiagonal_qr_step<MatrixType::Flags & RowMajorBit ? RowMajor : ColMajor>(
527  diag.data(), subdiag.data(), start, end, computeEigenvectors ? eivec.data() : (Scalar*)0, n);
528  }
529  if (iter <= maxIterations * n)
530  info = Success;
531  else
533 
534  // Sort eigenvalues and corresponding vectors.
535  // TODO make the sort optional ?
536  // TODO use a better sort algorithm !!
537  if (info == Success) {
538  for (Index i = 0; i < n - 1; ++i) {
539  Index k;
540  diag.segment(i, n - i).minCoeff(&k);
541  if (k > 0) {
542  numext::swap(diag[i], diag[k + i]);
543  if (computeEigenvectors) eivec.col(i).swap(eivec.col(k + i));
544  }
545  }
546  }
547  return info;
548 }
static constexpr lastp1_t end
Definition: IndexedViewHelper.h:79
ComputationInfo
Definition: Constants.h:438
@ Success
Definition: Constants.h:440
@ NoConvergence
Definition: Constants.h:444
EIGEN_BLAS_FUNC() swap(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy)
Definition: level1_impl.h:117
int info
Definition: level2_cplx_impl.h:39
const char const char const char * diag
Definition: level2_impl.h:86
void start(const unsigned &i)
(Re-)start i-th timer
Definition: oomph_utilities.cc:243

References Eigen::numext::abs(), diag, Eigen::placeholders::end, oomph::SarahBL::epsilon, i, Eigen::SelfAdjointEigenSolver< MatrixType_ >::info(), Eigen::numext::is_exactly_zero(), k, min, n, Eigen::NoConvergence, oomph::CumulativeTimings::start(), Eigen::Success, and Eigen::numext::swap().

Referenced by Eigen::SelfAdjointEigenSolver< MatrixType_ >::compute(), and Eigen::SelfAdjointEigenSolver< MatrixType_ >::computeFromTridiagonal().

◆ computeProductBlockingSizes() [1/2]

template<typename LhsScalar , typename RhsScalar , int KcFactor, typename Index >
void Eigen::internal::computeProductBlockingSizes ( Index k,
Index m,
Index n,
Index  num_threads = 1 
)

Computes the blocking parameters for a m x k times k x n matrix product.

Parameters
[in,out]kInput: the third dimension of the product. Output: the blocking size along the same dimension.
[in,out]mInput: the number of rows of the left hand side. Output: the blocking size along the same dimension.
[in,out]nInput: the number of columns of the right hand side. Output: the blocking size along the same dimension.

Given a m x k times k x n matrix product of scalar types LhsScalar and RhsScalar, this function computes the blocking size parameters along the respective dimensions for matrix products and related algorithms.

The blocking size parameters may be evaluated:

  • either by a heuristic based on cache sizes;
  • or using fixed prescribed values (for testing purposes).
See also
setCpuCacheSizes
321  {
322  if (!useSpecificBlockingSizes(k, m, n)) {
323  evaluateProductBlockingSizesHeuristic<LhsScalar, RhsScalar, KcFactor, Index>(k, m, n, num_threads);
324  }
325 }
bool useSpecificBlockingSizes(Index &k, Index &m, Index &n)
Definition: products/GeneralBlockPanelKernel.h:287

References k, m, n, and useSpecificBlockingSizes().

◆ computeProductBlockingSizes() [2/2]

template<typename LhsScalar , typename RhsScalar , typename Index >
void Eigen::internal::computeProductBlockingSizes ( Index k,
Index m,
Index n,
Index  num_threads = 1 
)
inline
328  {
329  computeProductBlockingSizes<LhsScalar, RhsScalar, 1, Index>(k, m, n, num_threads);
330 }

References k, m, and n.

◆ conditional_aligned_delete()

template<typename T , bool Align>
EIGEN_DEVICE_FUNC void Eigen::internal::conditional_aligned_delete ( T ptr,
std::size_t  size 
)
inline

Deletes objects constructed with conditional_aligned_new The size parameters tells on how many objects to call the destructor of T.

439  {
440  destruct_elements_of_array<T>(ptr, size);
441  conditional_aligned_free<Align>(ptr);
442 }

References size.

◆ conditional_aligned_delete_auto()

template<typename T , bool Align>
EIGEN_DEVICE_FUNC void Eigen::internal::conditional_aligned_delete_auto ( T ptr,
std::size_t  size 
)
inline
503  {
504  if (NumTraits<T>::RequireInitialization) destruct_elements_of_array<T>(ptr, size);
505  conditional_aligned_free<Align>(ptr);
506 }

References size.

◆ conditional_aligned_free()

template<bool Align>
EIGEN_DEVICE_FUNC void Eigen::internal::conditional_aligned_free ( void *  ptr)
inline

Frees memory allocated with conditional_aligned_malloc

293  {
294  aligned_free(ptr);
295 }

References aligned_free().

◆ conditional_aligned_free< false >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::conditional_aligned_free< false > ( void *  ptr)
inline
298  {
299  if (ptr != nullptr) {
301  EIGEN_USING_STD(free)
302  free(ptr);
303  }
304 }

References check_that_malloc_is_allowed(), and EIGEN_USING_STD.

Referenced by conditional_aligned_realloc< false >().

◆ conditional_aligned_malloc()

template<bool Align>
EIGEN_DEVICE_FUNC void* Eigen::internal::conditional_aligned_malloc ( std::size_t  size)
inline

Allocates size bytes. If Align is true, then the returned ptr is 16-byte-aligned. On allocation error, the returned pointer is null, and a std::bad_alloc is thrown.

275  {
276  return aligned_malloc(size);
277 }

References aligned_malloc(), and size.

◆ conditional_aligned_malloc< false >()

template<>
EIGEN_DEVICE_FUNC void* Eigen::internal::conditional_aligned_malloc< false > ( std::size_t  size)
inline
280  {
281  if (size == 0) return nullptr;
282 
284  EIGEN_USING_STD(malloc)
285  void* result = malloc(size);
286 
287  if (!result && size) throw_std_bad_alloc();
288  return result;
289 }

References check_that_malloc_is_allowed(), EIGEN_USING_STD, size, and throw_std_bad_alloc().

Referenced by conditional_aligned_realloc< false >().

◆ conditional_aligned_new()

template<typename T , bool Align>
EIGEN_DEVICE_FUNC T* Eigen::internal::conditional_aligned_new ( std::size_t  size)
inline
415  {
416  check_size_for_overflow<T>(size);
417  T* result = static_cast<T*>(conditional_aligned_malloc<Align>(sizeof(T) * size));
419  EIGEN_CATCH(...) {
420  conditional_aligned_free<Align>(result);
421  EIGEN_THROW;
422  }
423  return result;
424 }

References default_construct_elements_of_array(), EIGEN_CATCH, EIGEN_THROW, EIGEN_TRY, and size.

◆ conditional_aligned_new_auto()

template<typename T , bool Align>
EIGEN_DEVICE_FUNC T* Eigen::internal::conditional_aligned_new_auto ( std::size_t  size)
inline
476  {
477  if (size == 0) return nullptr; // short-cut. Also fixes Bug 884
478  check_size_for_overflow<T>(size);
479  T* result = static_cast<T*>(conditional_aligned_malloc<Align>(sizeof(T) * size));
480  if (NumTraits<T>::RequireInitialization) {
482  EIGEN_CATCH(...) {
483  conditional_aligned_free<Align>(result);
484  EIGEN_THROW;
485  }
486  }
487  return result;
488 }

References default_construct_elements_of_array(), EIGEN_CATCH, EIGEN_THROW, EIGEN_TRY, and size.

◆ conditional_aligned_realloc()

template<bool Align>
EIGEN_DEVICE_FUNC void* Eigen::internal::conditional_aligned_realloc ( void *  ptr,
std::size_t  new_size,
std::size_t  old_size 
)
inline
307  {
308  return aligned_realloc(ptr, new_size, old_size);
309 }
EIGEN_DEVICE_FUNC void * aligned_realloc(void *ptr, std::size_t new_size, std::size_t old_size)
Reallocates an aligned block of memory.
Definition: Memory.h:243

References aligned_realloc().

◆ conditional_aligned_realloc< false >()

template<>
EIGEN_DEVICE_FUNC void* Eigen::internal::conditional_aligned_realloc< false > ( void *  ptr,
std::size_t  new_size,
std::size_t  old_size 
)
inline
313  {
314  if (ptr == nullptr) return conditional_aligned_malloc<false>(new_size);
315  if (old_size == new_size) return ptr;
316  if (new_size == 0) {
318  return nullptr;
319  }
320 
322  EIGEN_USING_STD(realloc)
323  return realloc(ptr, new_size);
324 }
EIGEN_DEVICE_FUNC void * conditional_aligned_malloc< false >(std::size_t size)
Definition: Memory.h:280
EIGEN_DEVICE_FUNC void conditional_aligned_free< false >(void *ptr)
Definition: Memory.h:298

References check_that_malloc_is_allowed(), conditional_aligned_free< false >(), conditional_aligned_malloc< false >(), and EIGEN_USING_STD.

◆ conditional_aligned_realloc_new()

template<typename T , bool Align>
EIGEN_DEVICE_FUNC T* Eigen::internal::conditional_aligned_realloc_new ( T pts,
std::size_t  new_size,
std::size_t  old_size 
)
inline
445  {
446  check_size_for_overflow<T>(new_size);
447  check_size_for_overflow<T>(old_size);
448 
449  // If elements need to be explicitly initialized, we cannot simply realloc
450  // (or memcpy) the memory block - each element needs to be reconstructed.
451  // Otherwise, objects that contain internal pointers like mpfr or
452  // AnnoyingScalar can be pointing to the wrong thing.
453  T* result = static_cast<T*>(conditional_aligned_malloc<Align>(sizeof(T) * new_size));
454  EIGEN_TRY {
455  // Move-construct initial elements.
456  std::size_t copy_size = (std::min)(old_size, new_size);
457  move_construct_elements_of_array(result, pts, copy_size);
458 
459  // Default-construct remaining elements.
460  if (new_size > old_size) {
461  default_construct_elements_of_array(result + copy_size, new_size - old_size);
462  }
463 
464  // Delete old elements.
465  conditional_aligned_delete<T, Align>(pts, old_size);
466  }
467  EIGEN_CATCH(...) {
468  conditional_aligned_free<Align>(result);
469  EIGEN_THROW;
470  }
471 
472  return result;
473 }
EIGEN_DEVICE_FUNC T * move_construct_elements_of_array(T *ptr, T *src, std::size_t size)
Definition: Memory.h:376

References default_construct_elements_of_array(), EIGEN_CATCH, EIGEN_THROW, EIGEN_TRY, min, and move_construct_elements_of_array().

◆ conditional_aligned_realloc_new_auto()

template<typename T , bool Align>
EIGEN_DEVICE_FUNC T* Eigen::internal::conditional_aligned_realloc_new_auto ( T pts,
std::size_t  new_size,
std::size_t  old_size 
)
inline
491  {
492  if (NumTraits<T>::RequireInitialization) {
493  return conditional_aligned_realloc_new<T, Align>(pts, new_size, old_size);
494  }
495 
496  check_size_for_overflow<T>(new_size);
497  check_size_for_overflow<T>(old_size);
498  return static_cast<T*>(
499  conditional_aligned_realloc<Align>(static_cast<void*>(pts), sizeof(T) * new_size, sizeof(T) * old_size));
500 }

◆ conjugate_gradient()

template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
EIGEN_DONT_INLINE void Eigen::internal::conjugate_gradient ( const MatrixType mat,
const Rhs rhs,
Dest &  x,
const Preconditioner &  precond,
Index iters,
typename Dest::RealScalar tol_error 
)

Low-level conjugate gradient algorithm

Parameters
matThe matrix A
rhsThe right hand side vector b
xOn input and initial solution, on output the computed solution.
precondA preconditioner being able to efficiently solve for an approximation of Ax=b (regardless of b)
itersOn input the max number of iteration, on output the number of performed iterations.
tol_errorOn input the tolerance error, on output an estimation of the relative error.
31  {
32  typedef typename Dest::RealScalar RealScalar;
33  typedef typename Dest::Scalar Scalar;
34  typedef Matrix<Scalar, Dynamic, 1> VectorType;
35 
36  RealScalar tol = tol_error;
37  Index maxIters = iters;
38 
39  Index n = mat.cols();
40 
41  VectorType residual = rhs - mat * x; // initial residual
42 
43  RealScalar rhsNorm2 = rhs.squaredNorm();
44  if (rhsNorm2 == 0) {
45  x.setZero();
46  iters = 0;
47  tol_error = 0;
48  return;
49  }
50  const RealScalar considerAsZero = (std::numeric_limits<RealScalar>::min)();
51  RealScalar threshold = numext::maxi(RealScalar(tol * tol * rhsNorm2), considerAsZero);
52  RealScalar residualNorm2 = residual.squaredNorm();
53  if (residualNorm2 < threshold) {
54  iters = 0;
55  tol_error = numext::sqrt(residualNorm2 / rhsNorm2);
56  return;
57  }
58 
59  VectorType p(n);
60  p = precond.solve(residual); // initial search direction
61 
62  VectorType z(n), tmp(n);
63  RealScalar absNew = numext::real(residual.dot(p)); // the square of the absolute value of r scaled by invM
64  Index i = 0;
65  while (i < maxIters) {
66  tmp.noalias() = mat * p; // the bottleneck of the algorithm
67 
68  Scalar alpha = absNew / p.dot(tmp); // the amount we travel on dir
69  x += alpha * p; // update solution
70  residual -= alpha * tmp; // update residual
71 
72  residualNorm2 = residual.squaredNorm();
73  if (residualNorm2 < threshold) break;
74 
75  z = precond.solve(residual); // approximately solve for "A z = residual"
76 
77  RealScalar absOld = absNew;
78  absNew = numext::real(residual.dot(z)); // update the absolute value of r
79  RealScalar beta = absNew / absOld; // calculate the Gram-Schmidt value used to create the new search direction
80  p = z + beta * p; // update search direction
81  i++;
82  }
83  tol_error = numext::sqrt(residualNorm2 / rhsNorm2);
84  iters = i;
85 }

References alpha, beta, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), i, Eigen::numext::maxi(), min, n, p, Eigen::numext::sqrt(), tmp, and plotDoE::x.

Referenced by Eigen::ConjugateGradient< MatrixType_, UpLo_, Preconditioner_ >::_solve_vector_with_guess_impl().

◆ conservative_sparse_sparse_product_impl()

template<typename Lhs , typename Rhs , typename ResultType >
static void Eigen::internal::conservative_sparse_sparse_product_impl ( const Lhs lhs,
const Rhs rhs,
ResultType &  res,
bool  sortedInsertion = false 
)
static
22  {
23  typedef typename remove_all_t<Lhs>::Scalar LhsScalar;
24  typedef typename remove_all_t<Rhs>::Scalar RhsScalar;
25  typedef typename remove_all_t<ResultType>::Scalar ResScalar;
26 
27  // make sure to call innerSize/outerSize since we fake the storage order.
28  Index rows = lhs.innerSize();
29  Index cols = rhs.outerSize();
30  eigen_assert(lhs.outerSize() == rhs.innerSize());
31 
35 
36  std::memset(mask, 0, sizeof(bool) * rows);
37 
38  evaluator<Lhs> lhsEval(lhs);
39  evaluator<Rhs> rhsEval(rhs);
40 
41  // estimate the number of non zero entries
42  // given a rhs column containing Y non zeros, we assume that the respective Y columns
43  // of the lhs differs in average of one non zeros, thus the number of non zeros for
44  // the product of a rhs column with the lhs is X+Y where X is the average number of non zero
45  // per column of the lhs.
46  // Therefore, we have nnz(lhs*rhs) = nnz(lhs) + nnz(rhs)
47  Index estimated_nnz_prod = lhsEval.nonZerosEstimate() + rhsEval.nonZerosEstimate();
48 
49  res.setZero();
50  res.reserve(Index(estimated_nnz_prod));
51  // we compute each column of the result, one after the other
52  for (Index j = 0; j < cols; ++j) {
53  res.startVec(j);
54  Index nnz = 0;
55  for (typename evaluator<Rhs>::InnerIterator rhsIt(rhsEval, j); rhsIt; ++rhsIt) {
56  RhsScalar y = rhsIt.value();
57  Index k = rhsIt.index();
58  for (typename evaluator<Lhs>::InnerIterator lhsIt(lhsEval, k); lhsIt; ++lhsIt) {
59  Index i = lhsIt.index();
60  LhsScalar x = lhsIt.value();
61  if (!mask[i]) {
62  mask[i] = true;
63  values[i] = x * y;
64  indices[nnz] = i;
65  ++nnz;
66  } else
67  values[i] += x * y;
68  }
69  }
70  if (!sortedInsertion) {
71  // unordered insertion
72  for (Index k = 0; k < nnz; ++k) {
73  Index i = indices[k];
74  res.insertBackByOuterInnerUnordered(j, i) = values[i];
75  mask[i] = false;
76  }
77  } else {
78  // alternative ordered insertion code:
79  const Index t200 = rows / 11; // 11 == (log2(200)*1.39)
80  const Index t = (rows * 100) / 139;
81 
82  // FIXME reserve nnz non zeros
83  // FIXME implement faster sorting algorithms for very small nnz
84  // if the result is sparse enough => use a quick sort
85  // otherwise => loop through the entire vector
86  // In order to avoid to perform an expensive log2 when the
87  // result is clearly very sparse we use a linear bound up to 200.
88  if ((nnz < 200 && nnz < t200) || nnz * numext::log2(int(nnz)) < t) {
89  if (nnz > 1) std::sort(indices, indices + nnz);
90  for (Index k = 0; k < nnz; ++k) {
91  Index i = indices[k];
92  res.insertBackByOuterInner(j, i) = values[i];
93  mask[i] = false;
94  }
95  } else {
96  // dense path
97  for (Index i = 0; i < rows; ++i) {
98  if (mask[i]) {
99  mask[i] = false;
100  res.insertBackByOuterInner(j, i) = values[i];
101  }
102  }
103  }
104  }
105  }
106  res.finalize();
107 }
#define ei_declare_aligned_stack_constructed_variable(TYPE, NAME, SIZE, BUFFER)
Definition: Memory.h:806
Scalar log2(Scalar x)
Definition: packetmath.cpp:754

References cols, ei_declare_aligned_stack_constructed_variable, eigen_assert, i, j, k, Eigen::numext::log2(), res, rows, plotPSD::t, plotDoE::x, and y.

◆ const_cast_ptr()

template<typename T >
EIGEN_DEVICE_FUNC T* Eigen::internal::const_cast_ptr ( const T ptr)
inline
553  {
554  return const_cast<T*>(ptr);
555 }

◆ construct_at()

template<class T , class... Args>
EIGEN_DEVICE_FUNC T* Eigen::internal::construct_at ( T p,
Args &&...  args 
)

This wraps C++20's std::construct_at, using placement new instead if it is not available.

1321  {
1322  return ::new (const_cast<void*>(static_cast<const volatile void*>(p))) T(std::forward<Args>(args)...);
1323 }
args
Definition: compute_granudrum_aor.py:143

References compute_granudrum_aor::args, and p.

Referenced by Eigen::internal::qr_preconditioner_impl< MatrixType, Options, FullPivHouseholderQRPreconditioner, PreconditionIfMoreRowsThanCols, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, FullPivHouseholderQRPreconditioner, PreconditionIfMoreColsThanRows, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, ColPivHouseholderQRPreconditioner, PreconditionIfMoreRowsThanCols, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, ColPivHouseholderQRPreconditioner, PreconditionIfMoreColsThanRows, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, HouseholderQRPreconditioner, PreconditionIfMoreRowsThanCols, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, HouseholderQRPreconditioner, PreconditionIfMoreColsThanRows, true >::allocate(), Eigen::Ref< const SparseVector< MatScalar, MatOptions, MatIndex >, Options, StrideType >::construct(), Eigen::Ref< const SparseMatrix< MatScalar, MatOptions, MatIndex >, Options, StrideType >::construct(), Eigen::RefBase< Derived >::construct(), Eigen::KLU< MatrixType_ >::grab(), Eigen::UmfPackLU< MatrixType_ >::grab(), Eigen::internal::generic_matrix_wrapper< MatrixType, false >::grab(), and Eigen::internal::unary_evaluator< Block< ArgType, BlockRows, BlockCols, InnerPanel >, IteratorBased >::OuterVectorInnerIterator::operator++().

◆ convert_index()

◆ convertArrayBF16toF32()

template<typename DataMapper >
EIGEN_ALWAYS_INLINE void Eigen::internal::convertArrayBF16toF32 ( float *  result,
Index  cols,
Index  rows,
const DataMapper &  src 
)
3053  {
3054  typedef typename DataMapper::LinearMapper LinearMapper;
3055  for (Index j = 0; j < cols; j++, result += rows) {
3056  const LinearMapper src2 = src.getLinearMapper(0, j);
3057  Index i = 0;
3058  convertBF16toF32<32, LinearMapper>(i, result, rows, src2);
3059  convertBF16toF32<16, LinearMapper>(i, result, rows, src2);
3060  convertBF16toF32<8, LinearMapper>(i, result, rows, src2);
3061  convertBF16toF32<4, LinearMapper>(i, result, rows, src2);
3062  convertBF16toF32<1, LinearMapper>(i, result, rows, src2);
3063  }
3064 }

References cols, i, j, and rows.

◆ convertArrayF32toBF16()

template<typename DataMapper >
EIGEN_ALWAYS_INLINE void Eigen::internal::convertArrayF32toBF16 ( float *  result,
Index  cols,
Index  rows,
const DataMapper &  res 
)
291  {
292  Index col;
293  for (col = 0; col + 4 <= cols; col += 4) {
294  convertArrayF32toBF16Col<DataMapper, 4>(result, col, rows, res);
295  }
296  // extra cols
297  switch (cols - col) {
298  case 1:
299  convertArrayF32toBF16Col<DataMapper, 1>(result, col, rows, res);
300  break;
301  case 2:
302  convertArrayF32toBF16Col<DataMapper, 2>(result, col, rows, res);
303  break;
304  case 3:
305  convertArrayF32toBF16Col<DataMapper, 3>(result, col, rows, res);
306  break;
307  }
308 }

References col(), cols, res, and rows.

◆ convertArrayF32toBF16Col()

template<typename DataMapper , const Index size>
EIGEN_ALWAYS_INLINE void Eigen::internal::convertArrayF32toBF16Col ( float *  result,
Index  col,
Index  rows,
const DataMapper &  res 
)
230  {
231  const DataMapper res2 = res.getSubMapper(0, col);
232  Index row;
233  float* result2 = result + col * rows;
234  for (row = 0; row + 8 <= rows; row += 8, result2 += 8) {
235  // get and save block
236  PacketBlock<Packet8bf, size> block;
238  for (Index j = 0; j < size; j++) {
239  block.packet[j] = convertF32toBF16(result2 + j * rows);
240  }
241  res2.template storePacketBlock<Packet8bf, size>(row, 0, block);
242  }
243  // extra rows
244  if (row < rows) {
246  for (Index j = 0; j < size; j++) {
247  Packet8bf fp16 = convertF32toBF16(result2 + j * rows);
248  res2.template storePacketPartial<Packet8bf>(row, j, fp16, rows & 7);
249  }
250  }
251 }
#define BFLOAT16_UNROLL
Definition: MatrixProductMMAbfloat16.h:7
m m block(1, 0, 2, 2)<< 4
eigen_packet_wrapper< __vector unsigned short int, 0 > Packet8bf
Definition: AltiVec/PacketMath.h:42
EIGEN_ALWAYS_INLINE Packet8bf convertF32toBF16(const float *res)
Definition: MatrixProductMMAbfloat16.h:220

References BFLOAT16_UNROLL, block(), col(), convertF32toBF16(), j, res, row(), rows, and size.

◆ convertArrayF32toBF16ColVSX()

template<typename DataMapper , const Index size>
EIGEN_ALWAYS_INLINE void Eigen::internal::convertArrayF32toBF16ColVSX ( float *  result,
Index  col,
Index  rows,
const DataMapper &  res 
)
3071  {
3072  const DataMapper res2 = res.getSubMapper(0, col);
3073  Index row;
3074  float* result2 = result + col * rows;
3075  for (row = 0; row + 8 <= rows; row += 8, result2 += 8) {
3076  // get and save block
3077  PacketBlock<Packet8bf, size> block;
3078  for (Index j = 0; j < size; j++) {
3079  block.packet[j] = convertF32toBF16VSX(result2 + j * rows);
3080  }
3081  res2.template storePacketBlock<Packet8bf, size>(row, 0, block);
3082  }
3083  // extra rows
3084  if (row < rows) {
3085  for (Index j = 0; j < size; j++) {
3086  Packet8bf fp16 = convertF32toBF16VSX(result2 + j * rows);
3087  res2.template storePacketPartial<Packet8bf>(row, j, fp16, rows & 7);
3088  }
3089  }
3090 }
EIGEN_ALWAYS_INLINE Packet8bf convertF32toBF16VSX(const float *res)
Definition: MatrixProduct.h:3066

References block(), col(), convertF32toBF16VSX(), j, res, row(), rows, and size.

◆ convertArrayF32toBF16VSX()

template<typename DataMapper >
EIGEN_ALWAYS_INLINE void Eigen::internal::convertArrayF32toBF16VSX ( float *  result,
Index  cols,
Index  rows,
const DataMapper &  res 
)
3093  {
3094  Index col;
3095  for (col = 0; col + 4 <= cols; col += 4) {
3096  convertArrayF32toBF16ColVSX<DataMapper, 4>(result, col, rows, res);
3097  }
3098  // extra cols
3099  switch (cols - col) {
3100  case 1:
3101  convertArrayF32toBF16ColVSX<DataMapper, 1>(result, col, rows, res);
3102  break;
3103  case 2:
3104  convertArrayF32toBF16ColVSX<DataMapper, 2>(result, col, rows, res);
3105  break;
3106  case 3:
3107  convertArrayF32toBF16ColVSX<DataMapper, 3>(result, col, rows, res);
3108  break;
3109  }
3110 }

References col(), cols, res, and rows.

◆ convertArrayPointerBF16toF32()

template<bool non_unit_stride>
EIGEN_ALWAYS_INLINE void Eigen::internal::convertArrayPointerBF16toF32 ( float *  result,
Index  cols,
Index  rows,
bfloat16 src,
Index  resInc 
)
2814  {
2815  for (Index col = 0; col < cols; col++, src += (rows * resInc), result += rows) {
2816  Index i = 0;
2817  bfloat16* src2 = src;
2818  convertPointerBF16toF32<32, non_unit_stride>(i, result, rows, src2, resInc);
2819  convertPointerBF16toF32<16, non_unit_stride>(i, result, rows, src2, resInc);
2820  convertPointerBF16toF32<8, non_unit_stride>(i, result, rows, src2, resInc);
2821  convertPointerBF16toF32<4, non_unit_stride>(i, result, rows, src2, resInc);
2822  convertPointerBF16toF32<1, non_unit_stride>(i, result, rows, src2, resInc);
2823  }
2824 }

References col(), cols, i, and rows.

Referenced by gemmbfloat16(), gemv_bfloat16_col(), gemv_bfloat16_row(), gemvMMA_bfloat16_col(), and gemvMMA_bfloat16_row().

◆ convertArrayPointerBF16toF32Dup()

template<bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void Eigen::internal::convertArrayPointerBF16toF32Dup ( float *  result,
Index  cols,
Index  rows,
const bfloat16 src,
Index  delta,
Index  extra_rows 
)
2778  {
2779  Index col = 0;
2780  src += delta * 2;
2781  for (; col + 4 * 2 <= cols; col += 4 * 2, result += 4 * 4 * 4, src += 4 * rows) {
2782  convertArrayPointerBF16toF32DupOne<lhsExtraRows, false, 4>(result, rows, src, extra_rows);
2783  }
2784  for (; col + 2 <= cols; col += 2, result += 4 * 4, src += rows) {
2785  convertArrayPointerBF16toF32DupOne<lhsExtraRows, false, 1>(result, rows, src, extra_rows);
2786  }
2787  if (cols & 1) {
2788  convertArrayPointerBF16toF32DupOne<lhsExtraRows, true, 1>(result, rows, src - delta, extra_rows);
2789  }
2790 }

References col(), cols, MultiOpt::delta, and rows.

◆ convertArrayPointerBF16toF32DupOne()

template<bool lhsExtraRows, bool odd, Index size>
EIGEN_ALWAYS_INLINE void Eigen::internal::convertArrayPointerBF16toF32DupOne ( float *  result,
Index  rows,
const bfloat16 src,
Index  extra_rows 
)
2743  {
2744  Packet4f dup[4 * 4];
2745  Packet8bf data[4];
2746 
2747  for (Index i = 0; i < size; i++) {
2748  data[i] = ploadu<Packet8bf>(src + rows * i);
2749  }
2750 
2751  for (Index i = 0, j = 0; i < size; i++, j += 4) {
2752  dup[j + 0] = oneConvertBF16Perm(data[i].m_val, odd ? p16uc_MERGE16_32_5 : p16uc_MERGE16_32_1);
2753  dup[j + 1] = oneConvertBF16Perm(data[i].m_val, odd ? p16uc_MERGE16_32_6 : p16uc_MERGE16_32_2);
2754  dup[j + 2] = oneConvertBF16Perm(data[i].m_val, odd ? p16uc_MERGE16_32_7 : p16uc_MERGE16_32_3);
2755  dup[j + 3] = oneConvertBF16Perm(data[i].m_val, odd ? p16uc_MERGE16_32_8 : p16uc_MERGE16_32_4);
2756  }
2757 
2758  for (Index j = 0; j < 4 * size; j += 4) {
2759  if (lhsExtraRows) {
2760  Packet4f z = pset1<Packet4f>(float(0));
2761  Index i = 0;
2762  do {
2763  pstoreu(result + (j + i) * 4, dup[j + i]);
2764  } while (++i < extra_rows);
2765  do {
2766  pstoreu(result + (j + i) * 4, z);
2767  } while (++i < 4);
2768  } else {
2769  for (Index i = 0; i < 4; i++) {
2770  pstoreu(result + (j + i) * 4, dup[j + i]);
2771  }
2772  }
2773  }
2774 }
int data[]
Definition: Map_placement_new.cpp:1
EIGEN_ALWAYS_INLINE Packet4f oneConvertBF16Perm(Packet8us data, Packet16uc mask)
Definition: MatrixProduct.h:2732
static Packet16uc p16uc_MERGE16_32_8
Definition: MatrixProduct.h:2730
static Packet16uc p16uc_MERGE16_32_2
Definition: MatrixProduct.h:2723
static Packet16uc p16uc_MERGE16_32_3
Definition: MatrixProduct.h:2724
EIGEN_STRONG_INLINE Packet4f pset1< Packet4f >(const float &from)
Definition: AltiVec/PacketMath.h:773
static Packet16uc p16uc_MERGE16_32_4
Definition: MatrixProduct.h:2725
EIGEN_DEVICE_FUNC void pstoreu(Scalar *to, const Packet &from)
Definition: GenericPacketMath.h:911
static Packet16uc p16uc_MERGE16_32_6
Definition: MatrixProduct.h:2728
static Packet16uc p16uc_MERGE16_32_7
Definition: MatrixProduct.h:2729
static Packet16uc p16uc_MERGE16_32_5
Definition: MatrixProduct.h:2727
static Packet16uc p16uc_MERGE16_32_1
Definition: MatrixProduct.h:2722
EIGEN_STRONG_INLINE Packet8bf ploadu< Packet8bf >(const bfloat16 *from)
Definition: AltiVec/PacketMath.h:1549

References data, i, j, oneConvertBF16Perm(), p16uc_MERGE16_32_1, p16uc_MERGE16_32_2, p16uc_MERGE16_32_3, p16uc_MERGE16_32_4, p16uc_MERGE16_32_5, p16uc_MERGE16_32_6, p16uc_MERGE16_32_7, p16uc_MERGE16_32_8, ploadu< Packet8bf >(), pset1< Packet4f >(), pstoreu(), rows, and size.

◆ convertArrayPointerF32toBF16()

template<bool non_unit_stride = false>
EIGEN_ALWAYS_INLINE void Eigen::internal::convertArrayPointerF32toBF16 ( float *  result,
Index  rows,
bfloat16 dst,
Index  resInc = 1 
)
282  {
283  Index i = 0;
284  convertPointerF32toBF16<32, non_unit_stride>(i, result, rows, dst, resInc);
285  convertPointerF32toBF16<16, non_unit_stride>(i, result, rows, dst, resInc);
286  convertPointerF32toBF16<8, non_unit_stride>(i, result, rows, dst, resInc);
287  convertPointerF32toBF16<1, non_unit_stride>(i, result, rows, dst, resInc);
288 }

References i, and rows.

Referenced by gemvMMA_bfloat16_col(), and gemvMMA_bfloat16_row().

◆ convertBF16toF32()

template<const Index size, typename DataMapper >
EIGEN_ALWAYS_INLINE void Eigen::internal::convertBF16toF32 ( Index i,
float *  result,
Index  rows,
const DataMapper &  src 
)
3034  {
3035  constexpr Index extra = ((size < 4) ? 4 : size);
3036  while (i + size <= rows) {
3037  PacketBlock<Packet8bf, (size + 7) / 8> r32;
3038  r32.packet[0] = src.template loadPacket<Packet8bf>(i + 0);
3039  if (size >= 16) {
3040  r32.packet[1] = src.template loadPacket<Packet8bf>(i + 8);
3041  }
3042  if (size >= 32) {
3043  r32.packet[2] = src.template loadPacket<Packet8bf>(i + 16);
3044  r32.packet[3] = src.template loadPacket<Packet8bf>(i + 24);
3045  }
3046  storeConvertBlockBF16<size>(result + i, r32, rows & 3);
3047  i += extra;
3048  if (size != 32) break;
3049  }
3050 }

References i, rows, and size.

◆ convertF32toBF16()

EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::convertF32toBF16 ( const float *  res)
220  {
221  Packet16uc fp16[2];
222  __vector_pair fp16_vp = *reinterpret_cast<__vector_pair*>(const_cast<float*>(res));
223  __builtin_vsx_disassemble_pair(reinterpret_cast<void*>(fp16), &fp16_vp);
224  fp16[0] = __builtin_vsx_xvcvspbf16(fp16[0]);
225  fp16[1] = __builtin_vsx_xvcvspbf16(fp16[1]);
226  return vec_pack(reinterpret_cast<Packet4ui>(fp16[0]), reinterpret_cast<Packet4ui>(fp16[1]));
227 }
__vector unsigned char Packet16uc
Definition: AltiVec/PacketMath.h:41

References res.

Referenced by convertArrayF32toBF16Col(), and convertPointerF32toBF16().

◆ convertF32toBF16VSX()

EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::convertF32toBF16VSX ( const float *  res)
3066  {
3068 }
EIGEN_STRONG_INLINE Packet8bf F32ToBf16Both(Packet4f lo, Packet4f hi)
Definition: AltiVec/PacketMath.h:2237
EIGEN_STRONG_INLINE Packet4f ploadu< Packet4f >(const float *from)
Definition: AltiVec/PacketMath.h:1533

References F32ToBf16Both(), ploadu< Packet4f >(), and res.

Referenced by convertArrayF32toBF16ColVSX(), and convertPointerF32toBF16VSX().

◆ convertPointerBF16toF32()

template<const Index size, bool non_unit_stride>
EIGEN_ALWAYS_INLINE void Eigen::internal::convertPointerBF16toF32 ( Index i,
float *  result,
Index  rows,
bfloat16 *&  src,
Index  resInc 
)
2793  {
2794  constexpr Index extra = ((size < 4) ? 4 : size);
2795  while (i + size <= rows) {
2796  PacketBlock<Packet8bf, (size + 7) / 8> r32;
2797  r32.packet[0] = loadBF16fromResult<non_unit_stride, 0>(src, resInc);
2798  if (size >= 16) {
2799  r32.packet[1] = loadBF16fromResult<non_unit_stride, 8>(src, resInc);
2800  }
2801  if (size >= 32) {
2802  r32.packet[2] = loadBF16fromResult<non_unit_stride, 16>(src, resInc);
2803  r32.packet[3] = loadBF16fromResult<non_unit_stride, 24>(src, resInc);
2804  }
2805  storeConvertBlockBF16<size>(result + i, r32, rows & 3);
2806  i += extra;
2807  src += extra * resInc;
2808  if (size != 32) break;
2809  }
2810 }

References i, rows, and size.

◆ convertPointerF32toBF16()

template<const Index size, bool non_unit_stride = false>
EIGEN_ALWAYS_INLINE void Eigen::internal::convertPointerF32toBF16 ( Index i,
float *  result,
Index  rows,
bfloat16 *&  dst,
Index  resInc = 1 
)
255  {
256  constexpr Index extra = ((size < 8) ? 8 : size);
257  while (i + size <= rows) {
258  PacketBlock<Packet8bf, (size + 7) / 8> r32;
259  r32.packet[0] = convertF32toBF16(result + i + 0);
260  if (size >= 16) {
261  r32.packet[1] = convertF32toBF16(result + i + 8);
262  }
263  if (size >= 32) {
264  r32.packet[2] = convertF32toBF16(result + i + 16);
265  r32.packet[3] = convertF32toBF16(result + i + 24);
266  }
267  storeBF16fromResult<size, non_unit_stride, 0>(dst, r32.packet[0], resInc, rows & 7);
268  if (size >= 16) {
269  storeBF16fromResult<size, non_unit_stride, 8>(dst, r32.packet[1], resInc);
270  }
271  if (size >= 32) {
272  storeBF16fromResult<size, non_unit_stride, 16>(dst, r32.packet[2], resInc);
273  storeBF16fromResult<size, non_unit_stride, 24>(dst, r32.packet[3], resInc);
274  }
275  i += extra;
276  dst += extra * resInc;
277  if (size != 32) break;
278  }
279 }

References convertF32toBF16(), i, rows, and size.

◆ copy_construct_elements_of_array()

template<typename T >
EIGEN_DEVICE_FUNC T* Eigen::internal::copy_construct_elements_of_array ( T ptr,
const T src,
std::size_t  size 
)
inline

Copy-constructs the elements of an array. The size parameter tells on how many objects to copy.

360  {
361  std::size_t i = 0;
362  EIGEN_TRY {
363  for (i = 0; i < size; ++i) ::new (ptr + i) T(*(src + i));
364  }
365  EIGEN_CATCH(...) {
367  EIGEN_THROW;
368  }
369  return ptr;
370 }
EIGEN_DEVICE_FUNC void destruct_elements_of_array(T *ptr, std::size_t size)
Definition: Memory.h:334

References destruct_elements_of_array(), EIGEN_CATCH, EIGEN_THROW, EIGEN_TRY, i, and size.

◆ copyBToRowMajor()

template<typename Scalar , bool toTemp = true, bool remM = false>
EIGEN_ALWAYS_INLINE void Eigen::internal::copyBToRowMajor ( Scalar B_arr,
int64_t  LDB,
int64_t  K,
Scalar B_temp,
int64_t  LDB_,
int64_t  remM_ = 0 
)

This routine is used to copy B to/from a temporary array (row-major) for cases where B is column-major.

toTemp: true => copy to temporary array, false => copy from temporary array remM: true = need to handle remainder values for M (M < EIGEN_AVX_MAX_NUM_ROW)

814  {
815  EIGEN_UNUSED_VARIABLE(remM_);
816  using urolls = unrolls::transB<Scalar>;
818  PacketBlock<vecHalf, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> ymm;
819  constexpr int64_t U3 = urolls::PacketSize * 3;
820  constexpr int64_t U2 = urolls::PacketSize * 2;
821  constexpr int64_t U1 = urolls::PacketSize * 1;
822  int64_t K_ = K / U3 * U3;
823  int64_t k = 0;
824 
825  for (; k < K_; k += U3) {
826  urolls::template transB_kernel<U3, toTemp, remM>(B_arr + k * LDB, LDB, B_temp, LDB_, ymm, remM_);
827  B_temp += U3;
828  }
829  if (K - k >= U2) {
830  urolls::template transB_kernel<U2, toTemp, remM>(B_arr + k * LDB, LDB, B_temp, LDB_, ymm, remM_);
831  B_temp += U2;
832  k += U2;
833  }
834  if (K - k >= U1) {
835  urolls::template transB_kernel<U1, toTemp, remM>(B_arr + k * LDB, LDB, B_temp, LDB_, ymm, remM_);
836  B_temp += U1;
837  k += U1;
838  }
839  EIGEN_IF_CONSTEXPR(U1 > 8) {
840  // Note: without "if constexpr" this section of code will also be
841  // parsed by the compiler so there is an additional check in {load/store}BBlock
842  // to make sure the counter is not non-negative.
843  if (K - k >= 8) {
844  urolls::template transB_kernel<8, toTemp, remM>(B_arr + k * LDB, LDB, B_temp, LDB_, ymm, remM_);
845  B_temp += 8;
846  k += 8;
847  }
848  }
849  EIGEN_IF_CONSTEXPR(U1 > 4) {
850  // Note: without "if constexpr" this section of code will also be
851  // parsed by the compiler so there is an additional check in {load/store}BBlock
852  // to make sure the counter is not non-negative.
853  if (K - k >= 4) {
854  urolls::template transB_kernel<4, toTemp, remM>(B_arr + k * LDB, LDB, B_temp, LDB_, ymm, remM_);
855  B_temp += 4;
856  k += 4;
857  }
858  }
859  if (K - k >= 2) {
860  urolls::template transB_kernel<2, toTemp, remM>(B_arr + k * LDB, LDB, B_temp, LDB_, ymm, remM_);
861  B_temp += 2;
862  k += 2;
863  }
864  if (K - k >= 1) {
865  urolls::template transB_kernel<1, toTemp, remM>(B_arr + k * LDB, LDB, B_temp, LDB_, ymm, remM_);
866  B_temp += 1;
867  k += 1;
868  }
869 }
#define EIGEN_IF_CONSTEXPR(X)
Definition: Macros.h:1306
Packet8f vecHalfFloat
Definition: TrsmKernel.h:54
Packet8d vecFullDouble
Definition: TrsmKernel.h:53
std::int64_t int64_t
Definition: Meta.h:43
double K
Wave number.
Definition: sphere_scattering.cc:115
@ LDB
Definition: octree.h:49

References EIGEN_IF_CONSTEXPR, EIGEN_UNUSED_VARIABLE, k, PlanarWave::K, oomph::OcTreeNames::LDB, compute_granudrum_aor::type, and Eigen::value.

◆ count_leading_zeros() [1/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t<sizeof(T) == 4, int> Eigen::internal::count_leading_zeros ( const T  val)
35  {
36 #ifdef EIGEN_GPU_COMPILE_PHASE
37  return __clz(val);
38 #elif defined(SYCL_DEVICE_ONLY)
39  return cl::sycl::clz(val);
40 #elif EIGEN_COMP_MSVC
41  unsigned long index;
42  _BitScanReverse(&index, val);
43  return 31 - index;
44 #else
45  EIGEN_STATIC_ASSERT(sizeof(unsigned long long) == 8, YOU_MADE_A_PROGRAMMING_MISTAKE);
46  return __builtin_clz(static_cast<uint32_t>(val));
47 #endif
48 }
std::uint32_t uint32_t
Definition: Meta.h:40
val
Definition: calibrate.py:119

References clz(), EIGEN_STATIC_ASSERT, and calibrate::val.

Referenced by Eigen::internal::TensorIntDivisor< T, div_gt_one >::TensorIntDivisor().

◆ count_leading_zeros() [2/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t<sizeof(T) == 8, int> Eigen::internal::count_leading_zeros ( const T  val)
51  {
52 #ifdef EIGEN_GPU_COMPILE_PHASE
53  return __clzll(val);
54 #elif defined(SYCL_DEVICE_ONLY)
55  return static_cast<int>(cl::sycl::clz(val));
56 #elif EIGEN_COMP_MSVC && EIGEN_ARCH_x86_64
57  unsigned long index;
58  _BitScanReverse64(&index, val);
59  return 63 - index;
60 #elif EIGEN_COMP_MSVC
61  // MSVC's _BitScanReverse64 is not available for 32bits builds.
62  unsigned int lo = (unsigned int)(val & 0xffffffff);
63  unsigned int hi = (unsigned int)((val >> 32) & 0xffffffff);
64  int n;
65  if (hi == 0)
66  n = 32 + count_leading_zeros<unsigned int>(lo);
67  else
68  n = count_leading_zeros<unsigned int>(hi);
69  return n;
70 #else
71  EIGEN_STATIC_ASSERT(sizeof(unsigned long long) == 8, YOU_MADE_A_PROGRAMMING_MISTAKE);
72  return __builtin_clzll(static_cast<uint64_t>(val));
73 #endif
74 }
std::uint64_t uint64_t
Definition: Meta.h:42

References clz(), EIGEN_STATIC_ASSERT, int(), n, and calibrate::val.

◆ covar()

template<typename Scalar >
void Eigen::internal::covar ( Matrix< Scalar, Dynamic, Dynamic > &  r,
const VectorXi &  ipvt,
Scalar  tol = std::sqrt(NumTraits<Scalar>::epsilon()) 
)
24  {
25  using std::abs;
26  /* Local variables */
27  Index i, j, k, l, ii, jj;
28  bool sing;
29  Scalar temp;
30 
31  /* Function Body */
32  const Index n = r.cols();
33  const Scalar tolr = tol * abs(r(0, 0));
34  Matrix<Scalar, Dynamic, 1> wa(n);
35  eigen_assert(ipvt.size() == n);
36 
37  /* form the inverse of r in the full upper triangle of r. */
38  l = -1;
39  for (k = 0; k < n; ++k)
40  if (abs(r(k, k)) > tolr) {
41  r(k, k) = 1. / r(k, k);
42  for (j = 0; j <= k - 1; ++j) {
43  temp = r(k, k) * r(j, k);
44  r(j, k) = 0.;
45  r.col(k).head(j + 1) -= r.col(j).head(j + 1) * temp;
46  }
47  l = k;
48  }
49 
50  /* form the full upper triangle of the inverse of (r transpose)*r */
51  /* in the full upper triangle of r. */
52  for (k = 0; k <= l; ++k) {
53  for (j = 0; j <= k - 1; ++j) r.col(j).head(j + 1) += r.col(k).head(j + 1) * r(j, k);
54  r.col(k).head(k + 1) *= r(k, k);
55  }
56 
57  /* form the full lower triangle of the covariance matrix */
58  /* in the strict lower triangle of r and in wa. */
59  for (j = 0; j < n; ++j) {
60  jj = ipvt[j];
61  sing = j > l;
62  for (i = 0; i <= j; ++i) {
63  if (sing) r(i, j) = 0.;
64  ii = ipvt[i];
65  if (ii > jj) r(ii, jj) = r(i, j);
66  if (ii < jj) r(jj, ii) = r(i, j);
67  }
68  wa[jj] = r(j, j);
69  }
70 
71  /* symmetrize the covariance matrix in r. */
72  r.topLeftCorner(n, n).template triangularView<StrictlyUpper>() = r.topLeftCorner(n, n).transpose();
73  r.diagonal() = wa;
74 }

References abs(), eigen_assert, i, j, k, n, and UniformPSDSelfTest::r.

Referenced by testLmder(), and testLmdif().

◆ CreateIndexSequence()

template<int SizeAtCompileTime, typename Indices >
IvcType<Indices, SizeAtCompileTime> Eigen::internal::CreateIndexSequence ( size_t  size,
const Indices &  indices 
)
inline
319  {
321 }
IvcType< Indices, SizeAtCompileTime > CreateIndexSequence(size_t size, const Indices &indices)
Definition: IndexedViewHelper.h:319

References Eigen::internal::IndexedViewHelperIndicesWrapper< Indices, NestedSizeAtCompileTime, EnableIf >::CreateIndexSequence(), and size.

◆ cs_tdfs()

template<typename StorageIndex >
StorageIndex Eigen::internal::cs_tdfs ( StorageIndex  j,
StorageIndex  k,
StorageIndex *  head,
const StorageIndex *  next,
StorageIndex *  post,
StorageIndex *  stack 
)
63  {
64  StorageIndex i, p, top = 0;
65  if (!head || !next || !post || !stack) return (-1); /* check inputs */
66  stack[0] = j; /* place j on the stack */
67  while (top >= 0) /* while (stack is not empty) */
68  {
69  p = stack[top]; /* p = top of stack */
70  i = head[p]; /* i = youngest child of p */
71  if (i == -1) {
72  top--; /* p has no unordered children left */
73  post[k++] = p; /* node p is the kth postordered node */
74  } else {
75  head[p] = next[i]; /* remove i from children of p */
76  stack[++top] = i; /* start dfs on child node i */
77  }
78  }
79  return k;
80 }

References i, j, k, and p.

◆ cs_wclear()

template<typename StorageIndex >
static StorageIndex Eigen::internal::cs_wclear ( StorageIndex  mark,
StorageIndex  lemax,
StorageIndex *  w,
StorageIndex  n 
)
static
50  {
51  StorageIndex k;
52  if (mark < 2 || (mark + lemax < 0)) {
53  for (k = 0; k < n; k++)
54  if (w[k] != 0) w[k] = 1;
55  mark = 2;
56  }
57  return (mark); /* at this point, w[0..n-1] < mark holds */
58 }

References k, n, and w.

◆ ctz()

template<typename BitsType >
EIGEN_DEVICE_FUNC int Eigen::internal::ctz ( BitsType  bits)
inline
650  {
652 }
EIGEN_DEVICE_FUNC int ctz(BitsType bits)
Definition: MathFunctions.h:650

References Eigen::test::bits(), and Eigen::internal::count_bits_impl< BitsType, EnableIf >::ctz().

Referenced by test_clz_ctz(), and test_clz_ctz_random().

◆ customIndices2Array() [1/3]

template<typename IndexType , typename Index >
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE array<Index, 0> Eigen::internal::customIndices2Array ( IndexType &  ,
numeric_list< Index  
)
260  {
261  return array<Index, 0>();
262 }

◆ customIndices2Array() [2/3]

template<typename Index , std::size_t NumIndices, typename IndexType >
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE array<Index, NumIndices> Eigen::internal::customIndices2Array ( IndexType &  idx)

Make an array (for index/dimensions) out of a custom index

266  {
268 }
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE array< Index, NumIndices > customIndices2Array(IndexType &idx)
Definition: TensorMeta.h:266

References customIndices2Array().

◆ customIndices2Array() [3/3]

template<typename IndexType , typename Index , Index First, Index... Is>
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE array<Index, 1 + sizeof...(Is)> Eigen::internal::customIndices2Array ( IndexType &  idx,
numeric_list< Index, First, Is... >   
)
255  {
256  return {static_cast<Index>(idx[First]), static_cast<Index>(idx[Is])...};
257 }

Referenced by customIndices2Array().

◆ default_construct_elements_of_array()

template<typename T >
EIGEN_DEVICE_FUNC T* Eigen::internal::default_construct_elements_of_array ( T ptr,
std::size_t  size 
)
inline

Constructs the elements of an array. The size parameter tells on how many objects to call the constructor of T.

344  {
345  std::size_t i = 0;
346  EIGEN_TRY {
347  for (i = 0; i < size; ++i) ::new (ptr + i) T;
348  }
349  EIGEN_CATCH(...) {
351  EIGEN_THROW;
352  }
353  return ptr;
354 }

References destruct_elements_of_array(), EIGEN_CATCH, EIGEN_THROW, EIGEN_TRY, i, and size.

Referenced by aligned_new(), Eigen::internal::aligned_stack_memory_handler< T >::aligned_stack_memory_handler(), conditional_aligned_new(), conditional_aligned_new_auto(), and conditional_aligned_realloc_new().

◆ destroy_at()

template<class T >
EIGEN_DEVICE_FUNC void Eigen::internal::destroy_at ( T p)

This wraps C++17's std::destroy_at. If it's not available it calls the destructor. The wrapper is not a full replacement for C++20's std::destroy_at as it cannot be applied to std::array.

1335  {
1336  p->~T();
1337 }

References p.

Referenced by Eigen::internal::qr_preconditioner_impl< MatrixType, Options, FullPivHouseholderQRPreconditioner, PreconditionIfMoreRowsThanCols, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, FullPivHouseholderQRPreconditioner, PreconditionIfMoreColsThanRows, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, ColPivHouseholderQRPreconditioner, PreconditionIfMoreRowsThanCols, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, ColPivHouseholderQRPreconditioner, PreconditionIfMoreColsThanRows, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, HouseholderQRPreconditioner, PreconditionIfMoreRowsThanCols, true >::allocate(), Eigen::internal::qr_preconditioner_impl< MatrixType, Options, HouseholderQRPreconditioner, PreconditionIfMoreColsThanRows, true >::allocate(), Eigen::KLU< MatrixType_ >::grab(), Eigen::UmfPackLU< MatrixType_ >::grab(), Eigen::internal::generic_matrix_wrapper< MatrixType, false >::grab(), Eigen::internal::unary_evaluator< Block< ArgType, BlockRows, BlockCols, InnerPanel >, IteratorBased >::OuterVectorInnerIterator::operator++(), Eigen::Ref< const SparseMatrix< MatScalar, MatOptions, MatIndex >, Options, StrideType >::~Ref(), and Eigen::Ref< const SparseVector< MatScalar, MatOptions, MatIndex >, Options, StrideType >::~Ref().

◆ destruct_elements_of_array()

template<typename T >
EIGEN_DEVICE_FUNC void Eigen::internal::destruct_elements_of_array ( T ptr,
std::size_t  size 
)
inline

Destructs the elements of an array. The size parameters tells on how many objects to call the destructor of T.

334  {
335  // always destruct an array starting from the end.
336  if (ptr)
337  while (size) ptr[--size].~T();
338 }

References size.

Referenced by copy_construct_elements_of_array(), default_construct_elements_of_array(), and move_construct_elements_of_array().

◆ disassembleAccumulators()

template<Index num_acc>
EIGEN_ALWAYS_INLINE void Eigen::internal::disassembleAccumulators ( __vector_quad(&)  quad_acc[num_acc],
Packet4f(&)  acc[num_acc][4] 
)
79  {
81  for (Index k = 0; k < num_acc; k++) __builtin_mma_disassemble_acc((void*)acc[k], &(quad_acc[k]));
82 }

References BFLOAT16_UNROLL, and k.

◆ dogleg()

template<typename Scalar >
void Eigen::internal::dogleg ( const Matrix< Scalar, Dynamic, Dynamic > &  qrfac,
const Matrix< Scalar, Dynamic, 1 > &  diag,
const Matrix< Scalar, Dynamic, 1 > &  qtb,
Scalar  delta,
Matrix< Scalar, Dynamic, 1 > &  x 
)
10  {
11  using std::abs;
12  using std::sqrt;
13 
14  typedef DenseIndex Index;
15 
16  /* Local variables */
17  Index i, j;
18  Scalar sum, temp, alpha, bnorm;
19  Scalar gnorm, qnorm;
20  Scalar sgnorm;
21 
22  /* Function Body */
23  const Scalar epsmch = NumTraits<Scalar>::epsilon();
24  const Index n = qrfac.cols();
25  eigen_assert(n == qtb.size());
26  eigen_assert(n == x.size());
27  eigen_assert(n == diag.size());
28  Matrix<Scalar, Dynamic, 1> wa1(n), wa2(n);
29 
30  /* first, calculate the gauss-newton direction. */
31  for (j = n - 1; j >= 0; --j) {
32  temp = qrfac(j, j);
33  if (temp == 0.) {
34  temp = epsmch * qrfac.col(j).head(j + 1).maxCoeff();
35  if (temp == 0.) temp = epsmch;
36  }
37  if (j == n - 1)
38  x[j] = qtb[j] / temp;
39  else
40  x[j] = (qtb[j] - qrfac.row(j).tail(n - j - 1).dot(x.tail(n - j - 1))) / temp;
41  }
42 
43  /* test whether the gauss-newton direction is acceptable. */
44  qnorm = diag.cwiseProduct(x).stableNorm();
45  if (qnorm <= delta) return;
46 
47  // TODO : this path is not tested by Eigen unit tests
48 
49  /* the gauss-newton direction is not acceptable. */
50  /* next, calculate the scaled gradient direction. */
51 
52  wa1.fill(0.);
53  for (j = 0; j < n; ++j) {
54  wa1.tail(n - j) += qrfac.row(j).tail(n - j) * qtb[j];
55  wa1[j] /= diag[j];
56  }
57 
58  /* calculate the norm of the scaled gradient and test for */
59  /* the special case in which the scaled gradient is zero. */
60  gnorm = wa1.stableNorm();
61  sgnorm = 0.;
62  alpha = delta / qnorm;
63  if (gnorm == 0.) goto algo_end;
64 
65  /* calculate the point along the scaled gradient */
66  /* at which the quadratic is minimized. */
67  wa1.array() /= (diag * gnorm).array();
68  // TODO : once unit tests cover this part,:
69  // wa2 = qrfac.template triangularView<Upper>() * wa1;
70  for (j = 0; j < n; ++j) {
71  sum = 0.;
72  for (i = j; i < n; ++i) {
73  sum += qrfac(j, i) * wa1[i];
74  }
75  wa2[j] = sum;
76  }
77  temp = wa2.stableNorm();
78  sgnorm = gnorm / temp / temp;
79 
80  /* test whether the scaled gradient direction is acceptable. */
81  alpha = 0.;
82  if (sgnorm >= delta) goto algo_end;
83 
84  /* the scaled gradient direction is not acceptable. */
85  /* finally, calculate the point along the dogleg */
86  /* at which the quadratic is minimized. */
87  bnorm = qtb.stableNorm();
88  temp = bnorm / gnorm * (bnorm / qnorm) * (sgnorm / delta);
89  temp = temp - delta / qnorm * numext::abs2(sgnorm / delta) +
90  sqrt(numext::abs2(temp - delta / qnorm) +
91  (1. - numext::abs2(delta / qnorm)) * (1. - numext::abs2(sgnorm / delta)));
92  alpha = delta / qnorm * (1. - numext::abs2(sgnorm / delta)) / temp;
93 algo_end:
94 
95  /* form appropriate convex combination of the gauss-newton */
96  /* direction and the scaled gradient direction. */
97  temp = (1. - alpha) * (std::min)(sgnorm, delta);
98  x = temp * wa1 + alpha * x;
99 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: PlainObjectBase.h:192
std::array< T, N > array
Definition: EmulateArray.h:231

References abs(), Eigen::numext::abs2(), alpha, Eigen::PlainObjectBase< Derived >::cols(), MultiOpt::delta, diag, eigen_assert, oomph::SarahBL::epsilon, i, j, min, n, sqrt(), and plotDoE::x.

◆ doubleword_div_fp()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::doubleword_div_fp ( const Packet x_hi,
const Packet x_lo,
const Packet y,
Packet z_hi,
Packet z_lo 
)
1818  {
1819  const Packet t_hi = pdiv(x_hi, y);
1820  Packet pi_hi, pi_lo;
1821  twoprod(t_hi, y, pi_hi, pi_lo);
1822  const Packet delta_hi = psub(x_hi, pi_hi);
1823  const Packet delta_t = psub(delta_hi, pi_lo);
1824  const Packet delta = padd(delta_t, x_lo);
1825  const Packet t_lo = pdiv(delta, y);
1826  fast_twosum(t_hi, t_lo, z_hi, z_lo);
1827 }
EIGEN_ALWAYS_INLINE Packet2cf padd(Packet2cf &a, std::complex< float > &b)
Definition: MatrixVectorProduct.h:1277
EIGEN_DEVICE_FUNC Packet pdiv(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:368
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void fast_twosum(const Packet &x, const Packet &y_hi, const Packet &y_lo, Packet &s_hi, Packet &s_lo)
Definition: GenericPacketMathFunctions.h:1768
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void twoprod(const Packet &x_hi, const Packet &x_lo, const Packet &y_hi, const Packet &y_lo, Packet &p_hi, Packet &p_lo)
Definition: GenericPacketMathFunctions.h:1803

References MultiOpt::delta, fast_twosum(), padd(), pdiv(), psub(), twoprod(), and y.

Referenced by Eigen::internal::accurate_log2< double >::operator()().

◆ EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE() [1/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE ( add_assign_op  ,
scalar_difference_op  ,
sub_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE() [2/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE ( add_assign_op  ,
scalar_sum_op  ,
add_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE() [3/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE ( assign_op  ,
scalar_difference_op  ,
sub_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE() [4/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE ( assign_op  ,
scalar_sum_op  ,
add_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE() [5/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE ( sub_assign_op  ,
scalar_difference_op  ,
add_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE() [6/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE ( sub_assign_op  ,
scalar_sum_op  ,
sub_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT() [1/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT ( add_assign_op  ,
scalar_difference_op  ,
sub_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT() [2/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT ( add_assign_op  ,
scalar_sum_op  ,
add_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT() [3/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT ( assign_op  ,
scalar_difference_op  ,
sub_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT() [4/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT ( assign_op  ,
scalar_sum_op  ,
add_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT() [5/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT ( sub_assign_op  ,
scalar_difference_op  ,
add_assign_op   
)

◆ EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT() [6/6]

Eigen::internal::EIGEN_CATCH_ASSIGN_XPR_OP_PRODUCT ( sub_assign_op  ,
scalar_sum_op  ,
sub_assign_op   
)

◆ EIGEN_DECLARE_CONST_FAST_Packet2d()

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet2d ( ZERO  ,
 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet2l() [1/2]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet2l ( ONE  ,
 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet2l() [2/2]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet2l ( ZERO  ,
 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4f() [1/2]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4f ( ZERO  ,
 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4f() [2/2]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4f ( ZERO  ,
 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4i() [1/7]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4i ( MINUS1  ,
1 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4i() [2/7]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4i ( MINUS1  ,
1 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4i() [3/7]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4i ( MINUS16  ,
16 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4i() [4/7]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4i ( ONE  ,
 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4i() [5/7]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4i ( ONE  ,
 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4i() [6/7]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4i ( ZERO  ,
 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4i() [7/7]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4i ( ZERO  ,
 
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4ui() [1/2]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4ui ( PREV0DOT5  ,
0x3EFFFFFFu   
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet4ui() [2/2]

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet4ui ( SIGN  ,
0x80000000u   
)
static

◆ EIGEN_DECLARE_CONST_FAST_Packet8us()

static Eigen::internal::EIGEN_DECLARE_CONST_FAST_Packet8us ( ONE  ,
 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [1/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( ,
1.  0 
)
static

Referenced by pexp< Packet2d >().

◆ EIGEN_DECLARE_CONST_Packet2d() [2/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( ,
2.  0 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [3/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_exp_C1  ,
0.  693145751953125 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [4/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_exp_C2  ,
1.42860682030941723212e 6 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [5/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_exp_p0  ,
1.26177193074810590878e 4 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [6/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_exp_p1  ,
3.02994407707441961300e-  2 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [7/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_exp_p2  ,
9.99999999999999999910e-  1 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [8/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_exp_q0  ,
3.00198505138664455042e 6 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [9/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_exp_q1  ,
2.52448340349684104192e 3 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [10/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_exp_q2  ,
2.27265548208155028766e 1 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [11/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_exp_q3  ,
2.  00000000000000000009e0 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [12/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( cephes_LOG2EF  ,
1.  4426950408889634073599 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [13/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( exp_hi  ,
709.  437 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [14/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( exp_lo  ,
-709.  436139303 
)
static

◆ EIGEN_DECLARE_CONST_Packet2d() [15/15]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet2d ( half  ,
0.  5 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [1/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( ,
1.  0f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [2/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_exp_C1  ,
0.  693359375f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [3/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_exp_C2  ,
-2.12194440e-  4f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [4/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_exp_p0  ,
1.9875691500E-  4f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [5/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_exp_p1  ,
1.3981999507E-  3f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [6/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_exp_p2  ,
8.3334519073E-  3f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [7/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_exp_p3  ,
4.1665795894E-  2f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [8/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_exp_p4  ,
1.6666665459E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [9/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_exp_p5  ,
5.0000001201E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [10/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_LOG2EF  ,
1.  44269504088896341f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [11/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_p0  ,
7.0376836292E-  2f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [12/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_p1  ,
-1.1514610310E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [13/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_p2  ,
1.1676998740E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [14/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_p3  ,
-1.2420140846E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [15/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_p4  ,
+1.4249322787E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [16/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_p5  ,
-1.6668057665E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [17/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_p6  ,
+2.0000714765E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [18/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_p7  ,
-2.4999993993E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [19/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_p8  ,
+3.3333331174E-  1f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [20/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_q1  ,
-2.12194440e-  4f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [21/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_log_q2  ,
0.  693359375f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [22/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( cephes_SQRTHF  ,
0.  707106781186547524f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [23/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( exp_hi  ,
88.  3762626647950f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [24/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( exp_lo  ,
-88.  3762626647949f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f() [25/25]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f ( half  ,
0.  5f 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f_FROM_INT() [1/4]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f_FROM_INT ( inv_mant_mask  ,
0x7f800000 
)
static

◆ EIGEN_DECLARE_CONST_Packet4f_FROM_INT() [2/4]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f_FROM_INT ( min_norm_pos  ,
0x00800000   
)
static

◆ EIGEN_DECLARE_CONST_Packet4f_FROM_INT() [3/4]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f_FROM_INT ( minus_inf  ,
0xff800000   
)
static

◆ EIGEN_DECLARE_CONST_Packet4f_FROM_INT() [4/4]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4f_FROM_INT ( minus_nan  ,
0xffffffff   
)
static

◆ EIGEN_DECLARE_CONST_Packet4i() [1/2]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4i ( 0x7f  ,
0x7f   
)
static

◆ EIGEN_DECLARE_CONST_Packet4i() [2/2]

static Eigen::internal::EIGEN_DECLARE_CONST_Packet4i ( 23  ,
23   
)
static

◆ eigen_lsx_shuffle_mask()

static EIGEN_STRONG_INLINE int Eigen::internal::eigen_lsx_shuffle_mask ( int  p,
int  q,
int  r,
int  s 
)
static
122  {
123  return ((s) << 6 | (r) << 4 | (q) << 2 | (p));
124 }
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019

References p, Eigen::numext::q, UniformPSDSelfTest::r, and s.

Referenced by vec4f_movehl(), vec4f_movelh(), vec4f_swizzle1(), vec4f_swizzle2(), vec4f_unpackhi(), and vec4f_unpacklo().

◆ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR() [1/4]

Eigen::internal::EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR ( maxCoeff  ,
(Size - 1) *NumTraits< Scalar >::AddCost  ,
,
internal::scalar_max_op   
)

◆ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR() [2/4]

Eigen::internal::EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR ( minCoeff  ,
(Size - 1) *NumTraits< Scalar >::AddCost  ,
,
internal::scalar_min_op   
)

◆ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR() [3/4]

Eigen::internal::EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR ( prod  ,
(Size - 1) *NumTraits< Scalar >::MulCost  ,
,
internal::scalar_product_op   
)

◆ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR() [4/4]

Eigen::internal::EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR ( sum  ,
(Size - 1) *NumTraits< Scalar >::AddCost  ,
,
internal::scalar_sum_op   
)

◆ EIGEN_MATHFUNC_RETVAL() [1/2]

template<typename Scalar >
Eigen::internal::EIGEN_MATHFUNC_RETVAL ( random  ,
Scalar   
)
inline
41  {
42  return EIGEN_MATHFUNC_IMPL(random, Scalar)::run();
43 }
#define EIGEN_MATHFUNC_IMPL(func, scalar)
Definition: MathFunctions.h:64

References EIGEN_MATHFUNC_IMPL, and Eigen::run().

◆ EIGEN_MATHFUNC_RETVAL() [2/2]

template<typename Scalar >
Eigen::internal::EIGEN_MATHFUNC_RETVAL ( random  ,
Scalar   
) const &
inline

◆ EIGEN_MEMBER_FUNCTOR() [1/7]

Eigen::internal::EIGEN_MEMBER_FUNCTOR ( all  ,
(Size - 1) *NumTraits< Scalar >::AddCost   
)

◆ EIGEN_MEMBER_FUNCTOR() [2/7]

Eigen::internal::EIGEN_MEMBER_FUNCTOR ( any  ,
(Size - 1) *NumTraits< Scalar >::AddCost   
)

◆ EIGEN_MEMBER_FUNCTOR() [3/7]

Eigen::internal::EIGEN_MEMBER_FUNCTOR ( blueNorm  ,
(Size+5) *NumTraits< Scalar >::MulCost+(Size - 1) *NumTraits< Scalar >::AddCost   
)

◆ EIGEN_MEMBER_FUNCTOR() [4/7]

Eigen::internal::EIGEN_MEMBER_FUNCTOR ( count  ,
(Size - 1) *NumTraits< Scalar >::AddCost   
)

◆ EIGEN_MEMBER_FUNCTOR() [5/7]

Eigen::internal::EIGEN_MEMBER_FUNCTOR ( hypotNorm  ,
(Size - 1) *functor_traits< scalar_hypot_op< Scalar > >::Cost   
)

◆ EIGEN_MEMBER_FUNCTOR() [6/7]

Eigen::internal::EIGEN_MEMBER_FUNCTOR ( norm  ,
(Size+5) *NumTraits< Scalar >::MulCost+(Size - 1) *NumTraits< Scalar >::AddCost   
)

◆ EIGEN_MEMBER_FUNCTOR() [7/7]

Eigen::internal::EIGEN_MEMBER_FUNCTOR ( stableNorm  ,
(Size+5) *NumTraits< Scalar >::MulCost+(Size - 1) *NumTraits< Scalar >::AddCost   
)

◆ eigen_neon_shuffle_mask()

static EIGEN_STRONG_INLINE int Eigen::internal::eigen_neon_shuffle_mask ( int  p,
int  q,
int  r,
int  s 
)
static
128  {
129  return ((s) << 6 | (r) << 4 | (q) << 2 | (p));
130 }

References p, Eigen::numext::q, UniformPSDSelfTest::r, and s.

◆ eigen_pastix() [1/4]

void Eigen::internal::eigen_pastix ( pastix_data_t **  pastix_data,
int  pastix_comm,
int  n,
int ptr,
int idx,
double vals,
int perm,
int invp,
double x,
int  nbrhs,
int iparm,
double dparm 
)
inline
85  {
86  if (n == 0) {
87  ptr = NULL;
88  idx = NULL;
89  vals = NULL;
90  }
91  if (nbrhs == 0) {
92  x = NULL;
93  nbrhs = 1;
94  }
95  d_pastix(pastix_data, pastix_comm, n, ptr, idx, vals, perm, invp, x, nbrhs, iparm, dparm);
96 }

References n, and plotDoE::x.

◆ eigen_pastix() [2/4]

void Eigen::internal::eigen_pastix ( pastix_data_t **  pastix_data,
int  pastix_comm,
int  n,
int ptr,
int idx,
float *  vals,
int perm,
int invp,
float *  x,
int  nbrhs,
int iparm,
double dparm 
)
inline
71  {
72  if (n == 0) {
73  ptr = NULL;
74  idx = NULL;
75  vals = NULL;
76  }
77  if (nbrhs == 0) {
78  x = NULL;
79  nbrhs = 1;
80  }
81  s_pastix(pastix_data, pastix_comm, n, ptr, idx, vals, perm, invp, x, nbrhs, iparm, dparm);
82 }

References n, and plotDoE::x.

Referenced by Eigen::PastixBase< Derived >::_solve_impl(), Eigen::PastixBase< Derived >::analyzePattern(), Eigen::PastixBase< Derived >::clean(), Eigen::PastixBase< Derived >::factorize(), and Eigen::PastixBase< Derived >::init().

◆ eigen_pastix() [3/4]

void Eigen::internal::eigen_pastix ( pastix_data_t **  pastix_data,
int  pastix_comm,
int  n,
int ptr,
int idx,
std::complex< double > *  vals,
int perm,
int invp,
std::complex< double > *  x,
int  nbrhs,
int iparm,
double dparm 
)
inline
116  {
117  if (n == 0) {
118  ptr = NULL;
119  idx = NULL;
120  vals = NULL;
121  }
122  if (nbrhs == 0) {
123  x = NULL;
124  nbrhs = 1;
125  }
126  z_pastix(pastix_data, pastix_comm, n, ptr, idx, reinterpret_cast<PASTIX_DCOMPLEX *>(vals), perm, invp,
127  reinterpret_cast<PASTIX_DCOMPLEX *>(x), nbrhs, iparm, dparm);
128 }
#define PASTIX_DCOMPLEX
Definition: PaStiXSupport.h:23

References n, PASTIX_DCOMPLEX, and plotDoE::x.

◆ eigen_pastix() [4/4]

void Eigen::internal::eigen_pastix ( pastix_data_t **  pastix_data,
int  pastix_comm,
int  n,
int ptr,
int idx,
std::complex< float > *  vals,
int perm,
int invp,
std::complex< float > *  x,
int  nbrhs,
int iparm,
double dparm 
)
inline
100  {
101  if (n == 0) {
102  ptr = NULL;
103  idx = NULL;
104  vals = NULL;
105  }
106  if (nbrhs == 0) {
107  x = NULL;
108  nbrhs = 1;
109  }
110  c_pastix(pastix_data, pastix_comm, n, ptr, idx, reinterpret_cast<PASTIX_COMPLEX *>(vals), perm, invp,
111  reinterpret_cast<PASTIX_COMPLEX *>(x), nbrhs, iparm, dparm);
112 }
#define PASTIX_COMPLEX
Definition: PaStiXSupport.h:22

References n, PASTIX_COMPLEX, and plotDoE::x.

◆ enum_eq_not_dynamic()

template<typename A , typename B >
constexpr bool Eigen::internal::enum_eq_not_dynamic ( A  a,
B  b 
)
inlineconstexpr
702  {
704  if ((int)a == Dynamic || (int)b == Dynamic) return false;
705  return (int)a == (int)b;
706 }
constexpr void plain_enum_asserts(A, B)
Definition: Meta.h:642

References a, b, Eigen::Dynamic, int(), and plain_enum_asserts().

◆ enum_ge_not_dynamic()

template<typename A , typename B >
constexpr bool Eigen::internal::enum_ge_not_dynamic ( A  a,
B  b 
)
inlineconstexpr
730  {
732  if ((int)a == Dynamic || (int)b == Dynamic) return false;
733  return (int)a >= (int)b;
734 }

References a, b, Eigen::Dynamic, int(), and plain_enum_asserts().

◆ enum_gt_not_dynamic()

template<typename A , typename B >
constexpr bool Eigen::internal::enum_gt_not_dynamic ( A  a,
B  b 
)
inlineconstexpr
723  {
725  if ((int)a == Dynamic || (int)b == Dynamic) return false;
726  return (int)a > (int)b;
727 }

References a, b, Eigen::Dynamic, int(), and plain_enum_asserts().

◆ enum_le_not_dynamic()

template<typename A , typename B >
constexpr bool Eigen::internal::enum_le_not_dynamic ( A  a,
B  b 
)
inlineconstexpr
716  {
718  if ((int)a == Dynamic || (int)b == Dynamic) return false;
719  return (int)a <= (int)b;
720 }

References a, b, Eigen::Dynamic, int(), and plain_enum_asserts().

◆ enum_lt_not_dynamic()

template<typename A , typename B >
constexpr bool Eigen::internal::enum_lt_not_dynamic ( A  a,
B  b 
)
inlineconstexpr
709  {
711  if ((int)a == Dynamic || (int)b == Dynamic) return false;
712  return (int)a < (int)b;
713 }

References a, b, Eigen::Dynamic, int(), and plain_enum_asserts().

◆ erf_over_x_double_small()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T Eigen::internal::erf_over_x_double_small ( const T x2)
336  {
337  // erf(x)/x = S(x^2) / T(x^2), x^2 <= 1.
338  //
339  // Coefficients for S and T generated with Rminimax command:
340  // ./ratapprox --function="erf(x)" --dom='[-1,1]' --type=[9,10]
341  // --num="odd" --numF="[D]" --den="even" --denF="[D]" --log --dispCoeff="dec"
342  constexpr double alpha[] = {1.9493725660006057018823477644531294572516344487667083740234375e-04,
343  1.8272566210022942682217328425053892715368419885635375976562500e-03,
344  4.5303363351690106863856044583371840417385101318359375000000000e-02,
345  1.4215015503619179981775744181504705920815467834472656250000000e-01,
346  1.1283791670955125585606992899556644260883331298828125000000000e+00};
347  constexpr double beta[] = {2.0294484101083099089526257108317963684385176748037338256835938e-05,
348  6.8117805899186819641732970609382391558028757572174072265625000e-04,
349  1.0582026056098614921752165685120417037978768348693847656250000e-02,
350  9.3252603143757495374188692949246615171432495117187500000000000e-02,
351  4.5931062818368939559832142549566924571990966796875000000000000e-01,
352  1.0};
353  const T num_small = ppolevl<T, 4>::run(x2, alpha);
354  const T denom_small = ppolevl<T, 5>::run(x2, beta);
355  return pdiv(num_small, denom_small);
356 }
Vector< double > x2(const Vector< double > &coord)
Cartesian coordinates centered at the point (1.5,1)
Definition: poisson/poisson_with_singularity/two_d_poisson.cc:102

References alpha, beta, pdiv(), Eigen::internal::ppolevl< Packet, N >::run(), and Global_parameters::x2().

Referenced by Eigen::internal::generic_fast_erf< Scalar >::run(), and Eigen::internal::generic_fast_erfc< Scalar >::run().

◆ erfc_double_large()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T Eigen::internal::erfc_double_large ( const T x,
const T x2 
)
366  {
367  constexpr double gamma[] = {1.5252844933226974316088642158462107545346952974796295166015625e-04,
368  1.0909912393738931124520519233556115068495273590087890625000000e-02,
369  1.0628604636755033252537572252549580298364162445068359375000000e-01,
370  3.3492472973137982217295416376146022230386734008789062500000000e-01,
371  4.5065776215933289750026347064704168587923049926757812500000000e-01,
372  2.9433039130294824659017649537418037652969360351562500000000000e-01,
373  9.8792676360600226170838311645638896152377128601074218750000000e-02,
374  1.7095935395503719655962981960328761488199234008789062500000000e-02,
375  1.4249109729504577659398023570247460156679153442382812500000000e-03,
376  4.4567378313647954771875570045835956989321857690811157226562500e-05};
377  constexpr double delta[] = {2.041985103115789845773520028160419315099716186523437500000000e-03,
378  5.316030659946043707142493417450168635696172714233398437500000e-02,
379  3.426242193784684864077405563875799998641014099121093750000000e-01,
380  8.565637124308049799026321124983951449394226074218750000000000e-01,
381  1.000000000000000000000000000000000000000000000000000000000000e+00,
382  5.968805280570776972126623149961233139038085937500000000000000e-01,
383  1.890922854723317836356244470152887515723705291748046875000000e-01,
384  3.152505418656005586885981983868987299501895904541015625000000e-02,
385  2.565085751861882583380047861965067568235099315643310546875000e-03,
386  7.899362131678837697403017248376499992446042597293853759765625e-05};
387  // Compute exp(-x^2).
388  const T x2_lo = twoprod_low(x, x, x2);
389  // Here we use that
390  // exp(-x^2) = exp(-(x2+x2_lo)^2) ~= exp(-x2)*exp(-x2_lo) ~= exp(-x2)*(1-x2_lo)
391  // since x2_lo < kClamp *eps << 1 in the region we care about. This trick reduces the max error
392  // from 258 ulps to below 7 ulps.
393  const T exp2_hi = pexp(pnegate(x2));
394  const T z = pnmadd(exp2_hi, x2_lo, exp2_hi);
395  // Compute r = P / Q.
396  const T q2 = preciprocal(x2);
397  const T num_large = ppolevl<T, 9>::run(q2, gamma);
398  const T denom_large = pmul(x, ppolevl<T, 9>::run(q2, delta));
399  const T r = pdiv(num_large, denom_large);
400  const T maybe_two = pand(pcmp_lt(x, pset1<T>(0.0)), pset1<T>(2.0));
401  return pmadd(z, r, maybe_two);
402 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet twoprod_low(const Packet &x, const Packet &y, const Packet &xy)
Definition: GenericPacketMathFunctions.h:1716
EIGEN_STRONG_INLINE Packet4i pcmp_lt(const Packet4i &a, const Packet4i &b)
Definition: AltiVec/PacketMath.h:1341
EIGEN_STRONG_INLINE Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition: AltiVec/PacketMath.h:1218
EIGEN_STRONG_INLINE Packet4cf pmul(const Packet4cf &a, const Packet4cf &b)
Definition: AVX/Complex.h:88
EIGEN_DEVICE_FUNC Packet preciprocal(const Packet &a)
Definition: GenericPacketMath.h:1433
EIGEN_STRONG_INLINE Packet2cf pnegate(const Packet2cf &a)
Definition: AltiVec/Complex.h:264
EIGEN_STRONG_INLINE Packet8h pand(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2319
EIGEN_STRONG_INLINE Packet4f pnmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition: LSX/PacketMath.h:827
EIGEN_STRONG_INLINE Packet4f pexp(const Packet4f &_x)
Definition: LSX/PacketMath.h:2663
EIGEN_DEVICE_FUNC const Scalar & x
Definition: SpecialFunctionsImpl.h:2024

References MultiOpt::delta, mathsFunc::gamma(), pand(), pcmp_lt(), pdiv(), pexp(), pmadd(), pmul(), pnegate(), pnmadd(), preciprocal(), UniformPSDSelfTest::r, Eigen::internal::ppolevl< Packet, N >::run(), twoprod_low(), Eigen::numext::x, and Global_parameters::x2().

Referenced by Eigen::internal::generic_fast_erf< Scalar >::run(), and Eigen::internal::generic_fast_erfc< Scalar >::run().

◆ etree_find()

template<typename Index , typename IndexVector >
Index Eigen::internal::etree_find ( Index  i,
IndexVector &  pp 
)

Find the root of the tree/set containing the vertex i : Use Path halving

42  {
43  Index p = pp(i); // Parent
44  Index gp = pp(p); // Grand parent
45  while (gp != p) {
46  pp(i) = gp; // Parent pointer on find path is changed to former grand parent
47  i = gp;
48  p = pp(i);
49  gp = pp(p);
50  }
51  return p;
52 }

References i, and p.

Referenced by coletree().

◆ evaluateProductBlockingSizesHeuristic()

template<typename LhsScalar , typename RhsScalar , int KcFactor, typename Index >
void Eigen::internal::evaluateProductBlockingSizesHeuristic ( Index k,
Index m,
Index n,
Index  num_threads = 1 
)
118  {
119  typedef gebp_traits<LhsScalar, RhsScalar> Traits;
120 
121  // Explanations:
122  // Let's recall that the product algorithms form mc x kc vertical panels A' on the lhs and
123  // kc x nc blocks B' on the rhs. B' has to fit into L2/L3 cache. Moreover, A' is processed
124  // per mr x kc horizontal small panels where mr is the blocking size along the m dimension
125  // at the register level. This small horizontal panel has to stay within L1 cache.
126  std::ptrdiff_t l1, l2, l3;
127  manage_caching_sizes(GetAction, &l1, &l2, &l3);
128 #ifdef EIGEN_VECTORIZE_AVX512
129  // We need to find a rationale for that, but without this adjustment,
130  // performance with AVX512 is pretty bad, like -20% slower.
131  // One reason is that with increasing packet-size, the blocking size k
132  // has to become pretty small if we want that 1 lhs panel fit within L1.
133  // For instance, with the 3pX4 kernel and double, the size of the lhs+rhs panels are:
134  // k*(3*64 + 4*8) Bytes, with l1=32kBytes, and k%8=0, we have k=144.
135  // This is quite small for a good reuse of the accumulation registers.
136  l1 *= 4;
137 #endif
138 
139  if (num_threads > 1) {
140  typedef typename Traits::ResScalar ResScalar;
141  enum {
142  kdiv = KcFactor * (Traits::mr * sizeof(LhsScalar) + Traits::nr * sizeof(RhsScalar)),
143  ksub = Traits::mr * (Traits::nr * sizeof(ResScalar)),
144  kr = 8,
145  mr = Traits::mr,
146  nr = Traits::nr
147  };
148  // Increasing k gives us more time to prefetch the content of the "C"
149  // registers. However once the latency is hidden there is no point in
150  // increasing the value of k, so we'll cap it at 320 (value determined
151  // experimentally).
152  // To avoid that k vanishes, we make k_cache at least as big as kr
153  const Index k_cache = numext::maxi<Index>(kr, (numext::mini<Index>)((l1 - ksub) / kdiv, 320));
154  if (k_cache < k) {
155  k = k_cache - (k_cache % kr);
157  }
158 
159  const Index n_cache = (l2 - l1) / (nr * sizeof(RhsScalar) * k);
160  const Index n_per_thread = numext::div_ceil(n, num_threads);
161  if (n_cache <= n_per_thread) {
162  // Don't exceed the capacity of the l2 cache.
163  eigen_internal_assert(n_cache >= static_cast<Index>(nr));
164  n = n_cache - (n_cache % nr);
166  } else {
167  n = (numext::mini<Index>)(n, (n_per_thread + nr - 1) - ((n_per_thread + nr - 1) % nr));
168  }
169 
170  if (l3 > l2) {
171  // l3 is shared between all cores, so we'll give each thread its own chunk of l3.
172  const Index m_cache = (l3 - l2) / (sizeof(LhsScalar) * k * num_threads);
173  const Index m_per_thread = numext::div_ceil(m, num_threads);
174  if (m_cache < m_per_thread && m_cache >= static_cast<Index>(mr)) {
175  m = m_cache - (m_cache % mr);
177  } else {
178  m = (numext::mini<Index>)(m, (m_per_thread + mr - 1) - ((m_per_thread + mr - 1) % mr));
179  }
180  }
181  } else {
182  // In unit tests we do not want to use extra large matrices,
183  // so we reduce the cache size to check the blocking strategy is not flawed
184 #ifdef EIGEN_DEBUG_SMALL_PRODUCT_BLOCKS
185  l1 = 9 * 1024;
186  l2 = 32 * 1024;
187  l3 = 512 * 1024;
188 #endif
189 
190  // Early return for small problems because the computation below are time consuming for small problems.
191  // Perhaps it would make more sense to consider k*n*m??
192  // Note that for very tiny problem, this function should be bypassed anyway
193  // because we use the coefficient-based implementation for them.
194  if ((numext::maxi)(k, (numext::maxi)(m, n)) < 48) return;
195 
196  typedef typename Traits::ResScalar ResScalar;
197  enum {
198  k_peeling = 8,
199  k_div = KcFactor * (Traits::mr * sizeof(LhsScalar) + Traits::nr * sizeof(RhsScalar)),
200  k_sub = Traits::mr * (Traits::nr * sizeof(ResScalar))
201  };
202 
203  // ---- 1st level of blocking on L1, yields kc ----
204 
205  // Blocking on the third dimension (i.e., k) is chosen so that an horizontal panel
206  // of size mr x kc of the lhs plus a vertical panel of kc x nr of the rhs both fits within L1 cache.
207  // We also include a register-level block of the result (mx x nr).
208  // (In an ideal world only the lhs panel would stay in L1)
209  // Moreover, kc has to be a multiple of 8 to be compatible with loop peeling, leading to a maximum blocking size of:
210  const Index max_kc = numext::maxi<Index>(((l1 - k_sub) / k_div) & (~(k_peeling - 1)), 1);
211  const Index old_k = k;
212  if (k > max_kc) {
213  // We are really blocking on the third dimension:
214  // -> reduce blocking size to make sure the last block is as large as possible
215  // while keeping the same number of sweeps over the result.
216  k = (k % max_kc) == 0 ? max_kc
217  : max_kc - k_peeling * ((max_kc - 1 - (k % max_kc)) / (k_peeling * (k / max_kc + 1)));
218 
219  eigen_internal_assert(((old_k / k) == (old_k / max_kc)) && "the number of sweeps has to remain the same");
220  }
221 
222 // ---- 2nd level of blocking on max(L2,L3), yields nc ----
223 
224 // TODO find a reliable way to get the actual amount of cache per core to use for 2nd level blocking, that is:
225 // actual_l2 = max(l2, l3/nb_core_sharing_l3)
226 // The number below is quite conservative: it is better to underestimate the cache size rather than overestimating it)
227 // For instance, it corresponds to 6MB of L3 shared among 4 cores.
228 #ifdef EIGEN_DEBUG_SMALL_PRODUCT_BLOCKS
229  const Index actual_l2 = l3;
230 #else
231  const Index actual_l2 = 1572864; // == 1.5 MB
232 #endif
233 
234  // Here, nc is chosen such that a block of kc x nc of the rhs fit within half of L2.
235  // The second half is implicitly reserved to access the result and lhs coefficients.
236  // When k<max_kc, then nc can arbitrarily growth. In practice, it seems to be fruitful
237  // to limit this growth: we bound nc to growth by a factor x1.5.
238  // However, if the entire lhs block fit within L1, then we are not going to block on the rows at all,
239  // and it becomes fruitful to keep the packed rhs blocks in L1 if there is enough remaining space.
240  Index max_nc;
241  const Index lhs_bytes = m * k * sizeof(LhsScalar);
242  const Index remaining_l1 = l1 - k_sub - lhs_bytes;
243  if (remaining_l1 >= Index(Traits::nr * sizeof(RhsScalar)) * k) {
244  // L1 blocking
245  max_nc = remaining_l1 / (k * sizeof(RhsScalar));
246  } else {
247  // L2 blocking
248  max_nc = (3 * actual_l2) / (2 * 2 * max_kc * sizeof(RhsScalar));
249  }
250  // WARNING Below, we assume that Traits::nr is a power of two.
251  Index nc = numext::mini<Index>(actual_l2 / (2 * k * sizeof(RhsScalar)), max_nc) & (~(Traits::nr - 1));
252  if (n > nc) {
253  // We are really blocking over the columns:
254  // -> reduce blocking size to make sure the last block is as large as possible
255  // while keeping the same number of sweeps over the packed lhs.
256  // Here we allow one more sweep if this gives us a perfect match, thus the commented "-1"
257  n = (n % nc) == 0 ? nc : (nc - Traits::nr * ((nc /*-1*/ - (n % nc)) / (Traits::nr * (n / nc + 1))));
258  } else if (old_k == k) {
259  // So far, no blocking at all, i.e., kc==k, and nc==n.
260  // In this case, let's perform a blocking over the rows such that the packed lhs data is kept in cache L1/L2
261  // TODO: part of this blocking strategy is now implemented within the kernel itself, so the L1-based heuristic
262  // here should be obsolete.
263  Index problem_size = k * n * sizeof(LhsScalar);
264  Index actual_lm = actual_l2;
265  Index max_mc = m;
266  if (problem_size <= 1024) {
267  // problem is small enough to keep in L1
268  // Let's choose m such that lhs's block fit in 1/3 of L1
269  actual_lm = l1;
270  } else if (l3 != 0 && problem_size <= 32768) {
271  // we have both L2 and L3, and problem is small enough to be kept in L2
272  // Let's choose m such that lhs's block fit in 1/3 of L2
273  actual_lm = l2;
274  max_mc = (numext::mini<Index>)(576, max_mc);
275  }
276  Index mc = (numext::mini<Index>)(actual_lm / (3 * k * sizeof(LhsScalar)), max_mc);
277  if (mc > Traits::mr)
278  mc -= mc % Traits::mr;
279  else if (mc == 0)
280  return;
281  m = (m % mc) == 0 ? mc : (mc - Traits::mr * ((mc /*-1*/ - (m % mc)) / (Traits::mr * (m / mc + 1))));
282  }
283  }
284 }
#define eigen_internal_assert(x)
Definition: Macros.h:916
@ GetAction
Definition: Constants.h:516
void manage_caching_sizes(Action action, std::ptrdiff_t *l1, std::ptrdiff_t *l2, std::ptrdiff_t *l3)
Definition: products/GeneralBlockPanelKernel.h:86
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE EIGEN_CONSTEXPR T div_ceil(T a, T b)
Definition: MathFunctions.h:1251

References Eigen::numext::div_ceil(), eigen_internal_assert, Eigen::GetAction, k, m, manage_caching_sizes(), Eigen::numext::maxi(), and n.

◆ exponent_digits()

template<typename T >
constexpr int Eigen::internal::exponent_digits ( )
constexpr
1343  {
1344  return CHAR_BIT * sizeof(T) - NumTraits<T>::digits() - NumTraits<T>::IsSigned;
1345 }

◆ extract128()

template<int I_>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::extract128 ( Packet8d  x)
638  {
639  return _mm_castsi128_pd(_mm512_extracti32x4_epi32(_mm512_castpd_si512(x), I_));
640 }

References plotDoE::x.

◆ extract256()

template<int I_>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::extract256 ( Packet16f  x)
632  {
633  return _mm256_castsi256_ps(_mm512_extracti64x4_epi64(_mm512_castps_si512(x), I_));
634 }

References plotDoE::x.

◆ extract2Packet16h()

EIGEN_STRONG_INLINE void Eigen::internal::extract2Packet16h ( const Packet32h x,
Packet16h a,
Packet16h b 
)
730  {
731  a = _mm256_castpd_si256(_mm512_extractf64x4_pd(_mm512_castph_pd(x), 0));
732  b = _mm256_castpd_si256(_mm512_extractf64x4_pd(_mm512_castph_pd(x), 1));
733 }

References a, b, and plotDoE::x.

Referenced by pcos< Packet32h >(), pexp< Packet32h >(), pexpm1< Packet32h >(), pfrexp< Packet32h >(), pldexp< Packet32h >(), plog1p< Packet32h >(), plog2< Packet32h >(), plog< Packet32h >(), psin< Packet32h >(), and ptanh< Packet32h >().

◆ extract_data()

◆ F32MaskToBf16Mask()

EIGEN_STRONG_INLINE Packet4bf Eigen::internal::F32MaskToBf16Mask ( const Packet4f p)
4822 { return vmovn_u32(vreinterpretq_u32_f32(p)); }

References p.

Referenced by pcmp_eq< Packet4bf >(), pcmp_le< Packet4bf >(), pcmp_lt< Packet4bf >(), and pcmp_lt_or_nan< Packet4bf >().

◆ F32ToBf16() [1/5]

EIGEN_STRONG_INLINE Packet16bf Eigen::internal::F32ToBf16 ( const Packet16f a)
2752  {
2753  Packet16bf r;
2754 
2755 #if defined(EIGEN_VECTORIZE_AVX512BF16) && EIGEN_GNUC_STRICT_AT_LEAST(10, 1, 0)
2756  // Since GCC 10.1 supports avx512bf16 and C style explicit cast
2757  // (C++ static_cast is not supported yet), do conversion via intrinsic
2758  // and register path for performance.
2759  r = (__m256i)(_mm512_cvtneps_pbh(a));
2760 
2761 #else
2762  __m512i t;
2763  __m512i input = _mm512_castps_si512(a);
2764  __m512i nan = _mm512_set1_epi32(0x7fc0);
2765 
2766  // uint32_t lsb = (input >> 16) & 1;
2767  t = _mm512_and_si512(_mm512_srli_epi32(input, 16), _mm512_set1_epi32(1));
2768  // uint32_t rounding_bias = 0x7fff + lsb;
2769  t = _mm512_add_epi32(t, _mm512_set1_epi32(0x7fff));
2770  // input += rounding_bias;
2771  t = _mm512_add_epi32(t, input);
2772  // input = input >> 16;
2773  t = _mm512_srli_epi32(t, 16);
2774 
2775  // Check NaN before converting back to bf16
2776  __mmask16 mask = _mm512_cmp_ps_mask(a, a, _CMP_ORD_Q);
2777 
2778  t = _mm512_mask_blend_epi32(mask, nan, t);
2779  // output.value = static_cast<uint16_t>(input);
2780  r = _mm512_cvtepi32_epi16(t);
2781 #endif // EIGEN_VECTORIZE_AVX512BF16
2782 
2783  return r;
2784 }
eigen_packet_wrapper< __m256i, 2 > Packet16bf
Definition: AVX512/PacketMath.h:41

References a, UniformPSDSelfTest::r, and plotPSD::t.

◆ F32ToBf16() [2/5]

EIGEN_STRONG_INLINE Packet4bf Eigen::internal::F32ToBf16 ( const Packet4f p)
4792  {
4793  // See the scalar implementation in BFloat16.h for a comprehensible explanation
4794  // of this fast rounding algorithm
4795  Packet4ui input = Packet4ui(vreinterpretq_u32_f32(p));
4796 
4797  // lsb = (input >> 16) & 1
4798  Packet4ui lsb = vandq_u32(vshrq_n_u32(input, 16), vdupq_n_u32(1));
4799 
4800  // rounding_bias = 0x7fff + lsb
4801  Packet4ui rounding_bias = vaddq_u32(lsb, vdupq_n_u32(0x7fff));
4802 
4803  // input += rounding_bias
4804  input = vaddq_u32(input, rounding_bias);
4805 
4806  // input = input >> 16
4807  input = vshrq_n_u32(input, 16);
4808 
4809  // Replace float-nans by bfloat16-nans, that is 0x7fc0
4810  const Packet4ui bf16_nan = vdupq_n_u32(0x7fc0);
4811  const Packet4ui mask = vceqq_f32(p, p);
4812  input = vbslq_u32(mask, input, bf16_nan);
4813 
4814  // output = static_cast<uint16_t>(input)
4815  return vmovn_u32(input);
4816 }

References p.

◆ F32ToBf16() [3/5]

EIGEN_STRONG_INLINE Packet8bf Eigen::internal::F32ToBf16 ( const Packet8f a)
2572  {
2573  __m256i input = _mm256_castps_si256(a);
2574 
2575 #ifdef EIGEN_VECTORIZE_AVX2
2576  // uint32_t lsb = (input >> 16);
2577  __m256i t = _mm256_srli_epi32(input, 16);
2578  // uint32_t lsb = lsb & 1;
2579  t = _mm256_and_si256(t, _mm256_set1_epi32(1));
2580  // uint32_t rounding_bias = 0x7fff + lsb;
2581  t = _mm256_add_epi32(t, _mm256_set1_epi32(0x7fff));
2582  // input += rounding_bias;
2583  t = _mm256_add_epi32(t, input);
2584  // input = input >> 16;
2585  t = _mm256_srli_epi32(t, 16);
2586  // Check NaN before converting back to bf16
2587  __m256 mask = _mm256_cmp_ps(a, a, _CMP_ORD_Q);
2588  __m256i nan = _mm256_set1_epi32(0x7fc0);
2589  t = _mm256_blendv_epi8(nan, t, _mm256_castps_si256(mask));
2590  // output = numext::bit_cast<uint16_t>(input);
2591  return _mm_packus_epi32(_mm256_extractf128_si256(t, 0), _mm256_extractf128_si256(t, 1));
2592 #else
2593  // uint32_t lsb = (input >> 16);
2594  __m128i lo = _mm_srli_epi32(_mm256_extractf128_si256(input, 0), 16);
2595  __m128i hi = _mm_srli_epi32(_mm256_extractf128_si256(input, 1), 16);
2596  // uint32_t lsb = lsb & 1;
2597  lo = _mm_and_si128(lo, _mm_set1_epi32(1));
2598  hi = _mm_and_si128(hi, _mm_set1_epi32(1));
2599  // uint32_t rounding_bias = 0x7fff + lsb;
2600  lo = _mm_add_epi32(lo, _mm_set1_epi32(0x7fff));
2601  hi = _mm_add_epi32(hi, _mm_set1_epi32(0x7fff));
2602  // input += rounding_bias;
2603  lo = _mm_add_epi32(lo, _mm256_extractf128_si256(input, 0));
2604  hi = _mm_add_epi32(hi, _mm256_extractf128_si256(input, 1));
2605  // input = input >> 16;
2606  lo = _mm_srli_epi32(lo, 16);
2607  hi = _mm_srli_epi32(hi, 16);
2608  // Check NaN before converting back to bf16
2609  __m256 mask = _mm256_cmp_ps(a, a, _CMP_ORD_Q);
2610  __m128i nan = _mm_set1_epi32(0x7fc0);
2611  lo = _mm_blendv_epi8(nan, lo, _mm_castps_si128(_mm256_castps256_ps128(mask)));
2612  hi = _mm_blendv_epi8(nan, hi, _mm_castps_si128(_mm256_extractf128_ps(mask, 1)));
2613  // output = numext::bit_cast<uint16_t>(input);
2614  return _mm_packus_epi32(lo, hi);
2615 #endif
2616 }

References a, and plotPSD::t.

◆ F32ToBf16() [4/5]

EIGEN_STRONG_INLINE Packet8bf Eigen::internal::F32ToBf16 ( Packet4f  even,
Packet4f  odd 
)

Convert and pack two float Packets into one bfloat16 Packet - odd & even order

2250  {
2251 #ifdef _ARCH_PWR10
2252  return pmerge(reinterpret_cast<Packet4ui>(F32ToBf16(even).m_val), reinterpret_cast<Packet4ui>(F32ToBf16(odd).m_val));
2253 #else
2254  return F32ToBf16Two<false>(even, odd);
2255 #endif
2256 }
EIGEN_ALWAYS_INLINE Packet8us pmerge(Packet4ui even, Packet4ui odd)
Definition: AltiVec/PacketMath.h:2032
EIGEN_STRONG_INLINE Packet8bf F32ToBf16(Packet4f even, Packet4f odd)
Definition: AltiVec/PacketMath.h:2250

References F32ToBf16(), and pmerge().

◆ F32ToBf16() [5/5]

EIGEN_STRONG_INLINE Packet8bf Eigen::internal::F32ToBf16 ( Packet4f  p4f)
2059  {
2060 #ifdef _ARCH_PWR10
2061  return reinterpret_cast<Packet8us>(__builtin_vsx_xvcvspbf16(reinterpret_cast<Packet16uc>(p4f)));
2062 #else
2063  Packet4ui input = reinterpret_cast<Packet4ui>(p4f);
2064  Packet4ui lsb = plogical_shift_right<16>(input);
2065  lsb = pand<Packet4ui>(lsb, reinterpret_cast<Packet4ui>(p4i_ONE));
2066 
2067  EIGEN_DECLARE_CONST_FAST_Packet4ui(BIAS, 0x7FFFu);
2068  Packet4ui rounding_bias = padd<Packet4ui>(lsb, p4ui_BIAS);
2069  input = padd<Packet4ui>(input, rounding_bias);
2070 
2071  const EIGEN_DECLARE_CONST_FAST_Packet4ui(nan, 0x7FC00000);
2072 #ifdef _ARCH_PWR9
2073  Packet4bi nan_selector = vec_test_data_class(p4f, __VEC_CLASS_FP_NAN);
2074  input = vec_sel(input, p4ui_nan, nan_selector);
2075 
2076 #ifdef SUPPORT_BF16_SUBNORMALS
2077  Packet4bi subnormal_selector = vec_test_data_class(p4f, __VEC_CLASS_FP_SUBNORMAL);
2078  input = vec_sel(input, reinterpret_cast<Packet4ui>(p4f), subnormal_selector);
2079 #endif
2080 #else
2081 #ifdef SUPPORT_BF16_SUBNORMALS
2082  // Test NaN and Subnormal
2083  const EIGEN_DECLARE_CONST_FAST_Packet4ui(exp_mask, 0x7F800000);
2084  Packet4ui exp = pand<Packet4ui>(p4ui_exp_mask, reinterpret_cast<Packet4ui>(p4f));
2085 
2086  const EIGEN_DECLARE_CONST_FAST_Packet4ui(mantissa_mask, 0x7FFFFF);
2087  Packet4ui mantissa = pand<Packet4ui>(p4ui_mantissa_mask, reinterpret_cast<Packet4ui>(p4f));
2088 
2089  Packet4bi is_max_exp = vec_cmpeq(exp, p4ui_exp_mask);
2090  Packet4bi is_mant_zero = vec_cmpeq(mantissa, reinterpret_cast<Packet4ui>(p4i_ZERO));
2091 
2092  Packet4ui nan_selector =
2093  pandnot<Packet4ui>(reinterpret_cast<Packet4ui>(is_max_exp), reinterpret_cast<Packet4ui>(is_mant_zero));
2094 
2095  Packet4bi is_zero_exp = vec_cmpeq(exp, reinterpret_cast<Packet4ui>(p4i_ZERO));
2096 
2097  Packet4ui subnormal_selector =
2098  pandnot<Packet4ui>(reinterpret_cast<Packet4ui>(is_zero_exp), reinterpret_cast<Packet4ui>(is_mant_zero));
2099 
2100  input = vec_sel(input, p4ui_nan, nan_selector);
2101  input = vec_sel(input, reinterpret_cast<Packet4ui>(p4f), subnormal_selector);
2102 #else
2103  // Test only NaN
2104  Packet4bi nan_selector = vec_cmpeq(p4f, p4f);
2105 
2106  input = vec_sel(p4ui_nan, input, nan_selector);
2107 #endif
2108 #endif
2109 
2110  input = plogical_shift_right<16>(input);
2111  return reinterpret_cast<Packet8us>(input);
2112 #endif
2113 }
#define __VEC_CLASS_FP_NAN
Definition: AltiVec/PacketMath.h:2049
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 exp(const bfloat16 &a)
Definition: BFloat16.h:615
EIGEN_STRONG_INLINE Packet4ui padd< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Definition: AltiVec/PacketMath.h:1074
EIGEN_STRONG_INLINE Packet4ui pand< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Definition: AltiVec/PacketMath.h:1414
__vector __bool int Packet4bi
Definition: AltiVec/PacketMath.h:36
EIGEN_STRONG_INLINE Packet4ui pandnot< Packet4ui >(const Packet4ui &a, const Packet4ui &b)
Definition: LSX/PacketMath.h:1031

References __VEC_CLASS_FP_NAN, EIGEN_DECLARE_CONST_FAST_Packet4ui(), Eigen::bfloat16_impl::exp(), padd< Packet4ui >(), pand< Packet4ui >(), and pandnot< Packet4ui >().

Referenced by F32ToBf16(), F32ToBf16Both(), pabs(), pabsdiff< Packet4bf >(), padd< Packet16bf >(), padd< Packet4bf >(), pcast< Packet16f, Packet16bf >(), pcast< Packet8f, Packet8bf >(), pcast< Packet8us, Packet8bf >(), pceil< Packet16bf >(), pceil< Packet4bf >(), pdiv< Packet16bf >(), pdiv< Packet4bf >(), pfloor< Packet16bf >(), pfloor< Packet4bf >(), pfrexp(), pfrexp< Packet8bf >(), pldexp(), plset< Packet16bf >(), plset< Packet4bf >(), pmadd(), pmax< Packet16bf >(), pmax< Packet4bf >(), pmax< PropagateNaN, Packet4bf >(), pmax< PropagateNumbers, Packet4bf >(), pmin< Packet16bf >(), pmin< Packet4bf >(), pmin< PropagateNaN, Packet4bf >(), pmin< PropagateNumbers, Packet4bf >(), pmul< Packet16bf >(), pmul< Packet4bf >(), print< Packet16bf >(), print< Packet4bf >(), print< Packet8bf >(), pround< Packet16bf >(), pround< Packet4bf >(), psub< Packet16bf >(), psub< Packet4bf >(), ptrunc< Packet16bf >(), and ptrunc< Packet4bf >().

◆ F32ToBf16Bool()

EIGEN_STRONG_INLINE Packet8bf Eigen::internal::F32ToBf16Bool ( Packet4f  even,
Packet4f  odd 
)
2042  {
2043  return pmerge(reinterpret_cast<Packet4ui>(even), reinterpret_cast<Packet4ui>(odd));
2044 }

References pmerge().

◆ F32ToBf16Both()

EIGEN_STRONG_INLINE Packet8bf Eigen::internal::F32ToBf16Both ( Packet4f  lo,
Packet4f  hi 
)

Convert and pack two float Packets into one bfloat16 Packet - low & high order

2237  {
2238 #ifdef _ARCH_PWR10
2239  Packet8bf fp16_0 = F32ToBf16(lo);
2240  Packet8bf fp16_1 = F32ToBf16(hi);
2241  return vec_pack(reinterpret_cast<Packet4ui>(fp16_0.m_val), reinterpret_cast<Packet4ui>(fp16_1.m_val));
2242 #else
2243  return F32ToBf16Two(lo, hi);
2244 #endif
2245 }
EIGEN_ALWAYS_INLINE Packet8bf F32ToBf16Two(Packet4f lo, Packet4f hi)
Definition: AltiVec/PacketMath.h:2169

References F32ToBf16(), F32ToBf16Two(), and Eigen::internal::eigen_packet_wrapper< T, unique_id >::m_val.

Referenced by convertF32toBF16VSX(), and pcast< Packet4f, Packet8bf >().

◆ F32ToBf16Two()

template<bool lohi = true>
EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::F32ToBf16Two ( Packet4f  lo,
Packet4f  hi 
)

Convert and pack two float Packets into one bfloat16 Packet

Parameters
lohito expect either a low & high OR odd & even order
2169  {
2170  Packet8us p4f = Bf16PackHigh<lohi>(lo, hi);
2171  Packet8us p4f2 = Bf16PackLow<lohi>(lo, hi);
2172 
2173  Packet8us lsb = pand<Packet8us>(p4f, p8us_ONE);
2174  EIGEN_DECLARE_CONST_FAST_Packet8us(BIAS, 0x7FFFu);
2175  lsb = padd<Packet8us>(lsb, p8us_BIAS);
2176  lsb = padd<Packet8us>(lsb, p4f2);
2177 
2178  Packet8bi rounding_bias = vec_cmplt(lsb, p4f2);
2179  Packet8us input = psub<Packet8us>(p4f, reinterpret_cast<Packet8us>(rounding_bias));
2180 
2181 #ifdef _ARCH_PWR9
2182  Packet4bi nan_selector_lo = vec_test_data_class(lo, __VEC_CLASS_FP_NAN);
2183  Packet4bi nan_selector_hi = vec_test_data_class(hi, __VEC_CLASS_FP_NAN);
2184  Packet8us nan_selector =
2185  Bf16PackLow<lohi>(reinterpret_cast<Packet4f>(nan_selector_lo), reinterpret_cast<Packet4f>(nan_selector_hi));
2186 
2187  input = vec_sel(input, p8us_BIAS, nan_selector);
2188 
2189 #ifdef SUPPORT_BF16_SUBNORMALS
2190  Packet4bi subnormal_selector_lo = vec_test_data_class(lo, __VEC_CLASS_FP_SUBNORMAL);
2191  Packet4bi subnormal_selector_hi = vec_test_data_class(hi, __VEC_CLASS_FP_SUBNORMAL);
2192  Packet8us subnormal_selector = Bf16PackLow<lohi>(reinterpret_cast<Packet4f>(subnormal_selector_lo),
2193  reinterpret_cast<Packet4f>(subnormal_selector_hi));
2194 
2195  input = vec_sel(input, reinterpret_cast<Packet8us>(p4f), subnormal_selector);
2196 #endif
2197 #else
2198 #ifdef SUPPORT_BF16_SUBNORMALS
2199  // Test NaN and Subnormal
2200  const EIGEN_DECLARE_CONST_FAST_Packet8us(exp_mask, 0x7F80);
2201  Packet8us exp = pand<Packet8us>(p8us_exp_mask, p4f);
2202 
2203  const EIGEN_DECLARE_CONST_FAST_Packet8us(mantissa_mask, 0x7Fu);
2204  Packet8us mantissa = pand<Packet8us>(p8us_mantissa_mask, p4f);
2205 
2206  Packet8bi is_max_exp = vec_cmpeq(exp, p8us_exp_mask);
2207  Packet8bi is_mant_zero = vec_cmpeq(mantissa, reinterpret_cast<Packet8us>(p4i_ZERO));
2208 
2209  Packet8us nan_selector =
2210  pandnot<Packet8us>(reinterpret_cast<Packet8us>(is_max_exp), reinterpret_cast<Packet8us>(is_mant_zero));
2211 
2212  Packet8bi is_zero_exp = vec_cmpeq(exp, reinterpret_cast<Packet8us>(p4i_ZERO));
2213 
2214  Packet8us subnormal_selector =
2215  pandnot<Packet8us>(reinterpret_cast<Packet8us>(is_zero_exp), reinterpret_cast<Packet8us>(is_mant_zero));
2216 
2217  // Using BIAS as NaN (since any or all of the last 7 bits can be set)
2218  input = vec_sel(input, p8us_BIAS, nan_selector);
2219  input = vec_sel(input, reinterpret_cast<Packet8us>(p4f), subnormal_selector);
2220 #else
2221  // Test only NaN
2222  Packet4bi nan_selector_lo = vec_cmpeq(lo, lo);
2223  Packet4bi nan_selector_hi = vec_cmpeq(hi, hi);
2224  Packet8us nan_selector =
2225  Bf16PackLow<lohi>(reinterpret_cast<Packet4f>(nan_selector_lo), reinterpret_cast<Packet4f>(nan_selector_hi));
2226 
2227  input = vec_sel(p8us_BIAS, input, nan_selector);
2228 #endif
2229 #endif
2230 
2231  return input;
2232 }
#define EIGEN_DECLARE_CONST_FAST_Packet8us(NAME, X)
Definition: AltiVec/PacketMath.h:52
EIGEN_STRONG_INLINE Packet8us pand< Packet8us >(const Packet8us &a, const Packet8us &b)
Definition: AltiVec/PacketMath.h:1418
EIGEN_STRONG_INLINE Packet8us psub< Packet8us >(const Packet8us &a, const Packet8us &b)
Definition: AltiVec/PacketMath.h:1107
__vector __bool short Packet8bi
Definition: AltiVec/PacketMath.h:39
EIGEN_STRONG_INLINE Packet8us pandnot< Packet8us >(const Packet8us &a, const Packet8us &b)
Definition: LSX/PacketMath.h:1027
EIGEN_STRONG_INLINE Packet8us padd< Packet8us >(const Packet8us &a, const Packet8us &b)
Definition: AltiVec/PacketMath.h:1082

References __VEC_CLASS_FP_NAN, EIGEN_DECLARE_CONST_FAST_Packet8us(), Eigen::bfloat16_impl::exp(), padd< Packet8us >(), pand< Packet8us >(), pandnot< Packet8us >(), and psub< Packet8us >().

Referenced by F32ToBf16Both().

◆ fast_twosum() [1/3]

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::fast_twosum ( const Packet x,
const Packet y,
Packet s_hi,
Packet s_lo 
)

◆ fast_twosum() [2/3]

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::fast_twosum ( const Packet x,
const Packet y_hi,
const Packet y_lo,
Packet s_hi,
Packet s_lo 
)
1769  {
1770  Packet r_hi, r_lo;
1771  fast_twosum(x, y_hi, r_hi, r_lo);
1772  const Packet s = padd(y_lo, r_lo);
1773  fast_twosum(r_hi, s, s_hi, s_lo);
1774 }

References fast_twosum(), padd(), s, and plotDoE::x.

◆ fast_twosum() [3/3]

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::fast_twosum ( const Packet x_hi,
const Packet x_lo,
const Packet y_hi,
const Packet y_lo,
Packet s_hi,
Packet s_lo 
)
1757  {
1758  Packet r_hi, r_lo;
1759  fast_twosum(x_hi, y_hi, r_hi, r_lo);
1760  const Packet s = padd(padd(y_lo, r_lo), x_lo);
1761  fast_twosum(r_hi, s, s_hi, s_lo);
1762 }

References fast_twosum(), padd(), and s.

◆ fdjac1()

template<typename FunctorType , typename Scalar >
DenseIndex Eigen::internal::fdjac1 ( const FunctorType &  Functor,
Matrix< Scalar, Dynamic, 1 > &  x,
Matrix< Scalar, Dynamic, 1 > &  fvec,
Matrix< Scalar, Dynamic, Dynamic > &  fjac,
DenseIndex  ml,
DenseIndex  mu,
Scalar  epsfcn 
)
10  {
11  using std::abs;
12  using std::sqrt;
13 
14  typedef DenseIndex Index;
15 
16  /* Local variables */
17  Scalar h;
18  Index j, k;
19  Scalar eps, temp;
20  Index msum;
21  int iflag;
22  Index start, length;
23 
24  /* Function Body */
25  const Scalar epsmch = NumTraits<Scalar>::epsilon();
26  const Index n = x.size();
27  eigen_assert(fvec.size() == n);
28  Matrix<Scalar, Dynamic, 1> wa1(n);
29  Matrix<Scalar, Dynamic, 1> wa2(n);
30 
31  eps = sqrt((std::max)(epsfcn, epsmch));
32  msum = ml + mu + 1;
33  if (msum >= n) {
34  /* computation of dense approximate jacobian. */
35  for (j = 0; j < n; ++j) {
36  temp = x[j];
37  h = eps * abs(temp);
38  if (h == 0.) h = eps;
39  x[j] = temp + h;
40  iflag = Functor(x, wa1);
41  if (iflag < 0) return iflag;
42  x[j] = temp;
43  fjac.col(j) = (wa1 - fvec) / h;
44  }
45 
46  } else {
47  /* computation of banded approximate jacobian. */
48  for (k = 0; k < msum; ++k) {
49  for (j = k; (msum < 0) ? (j > n) : (j < n); j += msum) {
50  wa2[j] = x[j];
51  h = eps * abs(wa2[j]);
52  if (h == 0.) h = eps;
53  x[j] = wa2[j] + h;
54  }
55  iflag = Functor(x, wa1);
56  if (iflag < 0) return iflag;
57  for (j = k; (msum < 0) ? (j > n) : (j < n); j += msum) {
58  x[j] = wa2[j];
59  h = eps * abs(wa2[j]);
60  if (h == 0.) h = eps;
61  fjac.col(j).setZero();
62  start = std::max<Index>(0, j - mu);
63  length = (std::min)(n - 1, j + ml) - start + 1;
64  fjac.col(j).segment(start, length) = (wa1.segment(start, length) - fvec.segment(start, length)) / h;
65  }
66  }
67  }
68  return 0;
69 }
std::complex< double > mu
Definition: time_harmonic_fourier_decomposed_linear_elasticity/cylinder/cylinder.cc:52

References abs(), eigen_assert, CRBond_Bessel::eps, oomph::SarahBL::epsilon, j, k, max, min, Global_Parameters::mu, n, Eigen::PlainObjectBase< Derived >::setZero(), sqrt(), oomph::CumulativeTimings::start(), and plotDoE::x.

Referenced by Eigen::HybridNonLinearSolver< FunctorType, Scalar >::solveNumericalDiffOneStep().

◆ fftw_cast() [1/4]

fftw_complex* Eigen::internal::fftw_cast ( const std::complex< double > *  p)
inline
32  {
33  return const_cast<fftw_complex *>(reinterpret_cast<const fftw_complex *>(p));
34 }

References p.

◆ fftw_cast() [2/4]

fftwf_complex* Eigen::internal::fftw_cast ( const std::complex< float > *  p)
inline
36  {
37  return const_cast<fftwf_complex *>(reinterpret_cast<const fftwf_complex *>(p));
38 }

References p.

◆ fftw_cast() [3/4]

fftwl_complex* Eigen::internal::fftw_cast ( const std::complex< long double > *  p)
inline
40  {
41  return const_cast<fftwl_complex *>(reinterpret_cast<const fftwl_complex *>(p));
42 }

References p.

◆ fftw_cast() [4/4]

template<typename T >
T* Eigen::internal::fftw_cast ( const T p)
inline

◆ first_aligned() [1/2]

template<int Alignment, typename Derived >
static Index Eigen::internal::first_aligned ( const DenseBase< Derived > &  m)
inlinestatic
Returns
the index of the first element of the array stored by m that is properly aligned with respect to Alignment for vectorization.
Template Parameters
Alignmentrequested alignment in Bytes.

There is also the variant first_aligned(const Scalar*, Integer) defined in Memory.h. See it for more documentation.

533  {
534  enum { ReturnZero = (int(evaluator<Derived>::Alignment) >= Alignment) || !(Derived::Flags & DirectAccessBit) };
536 }

References Eigen::DirectAccessBit, int(), m, and Eigen::internal::first_aligned_impl< Alignment, Derived, JustReturnZero >::run().

Referenced by first_default_aligned().

◆ first_aligned() [2/2]

template<int Alignment, typename Scalar , typename Index >
EIGEN_DEVICE_FUNC Index Eigen::internal::first_aligned ( const Scalar array,
Index  size 
)
inline

Returns the index of the first element of the array that is well aligned with respect to the requested Alignment.

Template Parameters
Alignmentrequested alignment in Bytes.
Parameters
arraythe address of the start of the array
sizethe size of the array
Note
If no element of the array is well aligned or the requested alignment is not a multiple of a scalar, the size of the array is returned. For example with SSE, the requested alignment is typically 16-bytes. If packet size for the given scalar type is 1, then everything is considered well-aligned.
Otherwise, if the Alignment is larger that the scalar size, we rely on the assumptions that sizeof(Scalar) is a power of 2. On the other hand, we do not assume that the array address is a multiple of sizeof(Scalar), as that fails for example with Scalar=double on certain 32-bit platforms, see bug #79.

There is also the variant first_aligned(const MatrixBase&) defined in DenseCoeffsBase.h.

See also
first_default_aligned()
529  {
530  const Index ScalarSize = sizeof(Scalar);
531  const Index AlignmentSize = Alignment / ScalarSize;
532  const Index AlignmentMask = AlignmentSize - 1;
533 
534  if (AlignmentSize <= 1) {
535  // Either the requested alignment if smaller than a scalar, or it exactly match a 1 scalar
536  // so that all elements of the array have the same alignment.
537  return 0;
538  } else if ((std::uintptr_t(array) & (sizeof(Scalar) - 1)) || (Alignment % ScalarSize) != 0) {
539  // The array is not aligned to the size of a single scalar, or the requested alignment is not a multiple of the
540  // scalar size. Consequently, no element of the array is well aligned.
541  return size;
542  } else {
543  Index first = (AlignmentSize - (Index((std::uintptr_t(array) / sizeof(Scalar))) & AlignmentMask)) & AlignmentMask;
544  return (first < size) ? first : size;
545  }
546 }

References size.

◆ first_default_aligned() [1/2]

◆ first_default_aligned() [2/2]

template<typename Scalar , typename Index >
EIGEN_DEVICE_FUNC Index Eigen::internal::first_default_aligned ( const Scalar array,
Index  size 
)
inline

Returns the index of the first element of the array that is well aligned with respect the largest packet requirement.

See also
first_aligned(Scalar*,Index) and first_default_aligned(DenseBase<Derived>)
551  {
552  typedef typename packet_traits<Scalar>::type DefaultPacketType;
553  return first_aligned<unpacket_traits<DefaultPacketType>::alignment>(array, size);
554 }

References size.

◆ first_multiple()

template<typename Index >
Index Eigen::internal::first_multiple ( Index  size,
Index  base 
)
inline

Returns the smallest integer multiple of base and greater or equal to size

559  {
560  return ((size + base - 1) / base) * base;
561 }

References size.

Referenced by Eigen::TensorEvaluator< const TensorBroadcastingOp< Broadcast, ArgType >, Device >::BroadcastBlockAlongBcastDim(), and Eigen::internal::LU_kernel_bmod< SegSizeAtCompileTime >::run().

◆ flipsign()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T Eigen::internal::flipsign ( const T should_flipsign,
const T x 
)
615  {
616  typedef typename unpacket_traits<T>::type Scalar;
617  const T sign_mask = pset1<T>(Scalar(-0.0));
618  T sign_bit = pand<T>(should_flipsign, sign_mask);
619  return pxor<T>(sign_bit, x);
620 }

References Eigen::numext::x.

Referenced by generic_ndtri_lt_exp_neg_two().

◆ flipsign< double >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double Eigen::internal::flipsign< double > ( const double should_flipsign,
const double x 
)
623  {
624  return should_flipsign == 0 ? x : -x;
625 }

References Eigen::numext::x.

◆ flipsign< float >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float Eigen::internal::flipsign< float > ( const float &  should_flipsign,
const float &  x 
)
628  {
629  return should_flipsign == 0 ? x : -x;
630 }

References Eigen::numext::x.

◆ float2half() [1/2]

EIGEN_STRONG_INLINE Packet16h Eigen::internal::float2half ( const Packet16f a)
2260  {
2261  return _mm512_cvtps_ph(a, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
2262 }

References a.

◆ float2half() [2/2]

EIGEN_STRONG_INLINE Packet8h Eigen::internal::float2half ( const Packet8f a)
2283  {
2284 #ifdef EIGEN_HAS_FP16_C
2285  return _mm256_cvtps_ph(a, _MM_FROUND_TO_NEAREST_INT);
2286 #else
2287  __m128i lo = float2half(_mm256_extractf128_ps(a, 0));
2288  __m128i hi = float2half(_mm256_extractf128_ps(a, 1));
2289  return _mm_packus_epi32(lo, hi);
2290 #endif
2291 }
EIGEN_STRONG_INLINE Packet8h float2half(const Packet8f &a)
Definition: AVX/PacketMath.h:2283

References a.

Referenced by padd< Packet16h >(), padd< Packet8h >(), pcast< Packet16f, Packet16h >(), pcast< Packet8f, Packet8h >(), pceil< Packet16h >(), pceil< Packet8h >(), pdiv< Packet16h >(), pdiv< Packet8h >(), pfloor< Packet16h >(), pfloor< Packet8h >(), pfrexp(), pldexp(), plset< Packet16h >(), plset< Packet8h >(), pmax< Packet16h >(), pmax< Packet8h >(), pmin< Packet16h >(), pmin< Packet8h >(), pmul< Packet16h >(), pmul< Packet8h >(), print< Packet16h >(), print< Packet8h >(), pround< Packet16h >(), pround< Packet8h >(), psub< Packet16h >(), psub< Packet8h >(), ptrunc< Packet16h >(), and ptrunc< Packet8h >().

◆ fortran_to_c_numbering()

template<typename MatrixType >
void Eigen::internal::fortran_to_c_numbering ( MatrixType mat)

◆ gemm()

template<typename Scalar , typename Packet , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols>
EIGEN_STRONG_INLINE void Eigen::internal::gemm ( const DataMapper &  res,
const Scalar blockA,
const Scalar blockB,
Index  rows,
Index  depth,
Index  cols,
Scalar  alpha,
Index  strideA,
Index  strideB,
Index  offsetA,
Index  offsetB 
)
2192  {
2193  const Index remaining_rows = rows % accCols;
2194 
2195  if (strideA == -1) strideA = depth;
2196  if (strideB == -1) strideB = depth;
2197 
2198  const Packet pAlpha = pset1<Packet>(alpha);
2199  const Packet pMask = bmask<Packet>(remaining_rows);
2200 
2201  Index col = 0;
2202  for (; col + accRows <= cols; col += accRows) {
2203  gemm_cols<Scalar, Packet, DataMapper, accRows, accCols>(res, blockA, blockB, depth, strideA, offsetA, strideB,
2204  offsetB, col, rows, remaining_rows, pAlpha, pMask);
2205  }
2206 
2207  if (col != cols) {
2208  gemm_extra_cols<Scalar, Packet, DataMapper, accCols>(res, blockA, blockB, depth, strideA, offsetA, strideB, offsetB,
2209  col, rows, cols, remaining_rows, pAlpha, pMask);
2210  }
2211 }

References alpha, col(), cols, res, and rows.

◆ gemm_cols()

template<typename Scalar , typename Packet , typename DataMapper , const Index accRows, const Index accCols>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_cols ( const DataMapper &  res,
const Scalar blockA,
const Scalar blockB,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  offsetB,
Index  col,
Index  rows,
Index  remaining_rows,
const Packet pAlpha,
const Packet pMask 
)
2115  {
2116  const DataMapper res3 = res.getSubMapper(0, col);
2117 
2118  const Scalar* rhs_base = blockB + col * strideB + MICRO_NEW_ROWS * offsetB;
2119  const Scalar* lhs_base = blockA + accCols * offsetA;
2120  Index row = 0;
2121 
2122 #define MAX_UNROLL 7
2123  while (row + MAX_UNROLL * accCols <= rows) {
2125  }
2126  switch ((rows - row) / accCols) {
2127 #if MAX_UNROLL > 7
2128  case 7:
2130  break;
2131 #endif
2132 #if MAX_UNROLL > 6
2133  case 6:
2135  break;
2136 #endif
2137 #if MAX_UNROLL > 5
2138  case 5:
2140  break;
2141 #endif
2142 #if MAX_UNROLL > 4
2143  case 4:
2145  break;
2146 #endif
2147 #if MAX_UNROLL > 3
2148  case 3:
2150  break;
2151 #endif
2152 #if MAX_UNROLL > 2
2153  case 2:
2155  break;
2156 #endif
2157 #if MAX_UNROLL > 1
2158  case 1:
2160  break;
2161 #endif
2162  default:
2163  break;
2164  }
2165 #undef MAX_UNROLL
2166 
2167  if (remaining_rows > 0) {
2168  gemm_extra_row<Scalar, Packet, DataMapper, accRows, accCols>(res3, blockA, rhs_base, depth, strideA, offsetA,
2169  strideB, row, rows, remaining_rows, pAlpha, pMask);
2170  }
2171 }
#define MICRO_UNROLL_ITER(func, N)
Definition: MatrixProductCommon.h:139
#define MICRO_NEW_ROWS
Definition: MatrixProduct.h:1797
#define MAX_UNROLL
#define MICRO_UNROLL_ITER2(N, M)
Definition: MatrixProduct.h:2106

References col(), MAX_UNROLL, MICRO_NEW_ROWS, MICRO_UNROLL_ITER, MICRO_UNROLL_ITER2, res, row(), and rows.

◆ gemm_complex()

template<typename LhsScalar , typename RhsScalar , typename Scalarc , typename Scalar , typename Packet , typename Packetc , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_STRONG_INLINE void Eigen::internal::gemm_complex ( const DataMapper &  res,
const LhsScalar *  blockAc,
const RhsScalar *  blockBc,
Index  rows,
Index  depth,
Index  cols,
Scalarc  alpha,
Index  strideA,
Index  strideB,
Index  offsetA,
Index  offsetB 
)
2592  {
2593  const Index remaining_rows = rows % accCols;
2594 
2595  if (strideA == -1) strideA = depth;
2596  if (strideB == -1) strideB = depth;
2597 
2598  const Packet pAlphaReal = pset1<Packet>(alpha.real());
2599  const Packet pAlphaImag = pset1<Packet>(alpha.imag());
2600  const Packet pMask = bmask<Packet>(remaining_rows);
2601 
2602  const Scalar* blockA = (Scalar*)blockAc;
2603  const Scalar* blockB = (Scalar*)blockBc;
2604 
2605  Index col = 0;
2606  for (; col + accRows <= cols; col += accRows) {
2607  gemm_complex_cols<Scalar, Packet, Packetc, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, LhsIsReal,
2608  RhsIsReal>(res, blockA, blockB, depth, strideA, offsetA, strideB, offsetB, col, rows,
2609  remaining_rows, pAlphaReal, pAlphaImag, pMask);
2610  }
2611 
2612  if (col != cols) {
2613  gemm_complex_extra_cols<Scalar, Packet, Packetc, DataMapper, accCols, ConjugateLhs, ConjugateRhs, LhsIsReal,
2614  RhsIsReal>(res, blockA, blockB, depth, strideA, offsetA, strideB, offsetB, col, rows, cols,
2615  remaining_rows, pAlphaReal, pAlphaImag, pMask);
2616  }
2617 }
EIGEN_ALWAYS_INLINE void gemm_complex_extra_cols(const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index depth, Index strideA, Index offsetA, Index strideB, Index offsetB, Index col, Index rows, Index cols, Index remaining_rows, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
Definition: MatrixProduct.h:2579
EIGEN_ALWAYS_INLINE void gemm_complex_cols(const DataMapper &res, const Scalar *blockA, const Scalar *blockB, Index depth, Index strideA, Index offsetA, Index strideB, Index offsetB, Index col, Index rows, Index remaining_rows, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
Definition: MatrixProduct.h:2525

References alpha, col(), cols, gemm_complex_cols(), gemm_complex_extra_cols(), res, and rows.

Referenced by Eigen::internal::gebp_kernel< double, std::complex< double >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< float, std::complex< float >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< std::complex< double >, double, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< std::complex< double >, std::complex< double >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< std::complex< float >, float, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), and Eigen::internal::gebp_kernel< std::complex< float >, std::complex< float >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()().

◆ gemm_complex_cols()

template<typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_complex_cols ( const DataMapper &  res,
const Scalar blockA,
const Scalar blockB,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  offsetB,
Index  col,
Index  rows,
Index  remaining_rows,
const Packet pAlphaReal,
const Packet pAlphaImag,
const Packet pMask 
)
2528  {
2529  const DataMapper res3 = res.getSubMapper(0, col);
2530 
2531  const Scalar* rhs_base = blockB + advanceCols * col * strideB + MICRO_NEW_ROWS * offsetB;
2532  const Scalar* lhs_base = blockA + accCols * offsetA;
2533  Index row = 0;
2534 
2535 #define MAX_COMPLEX_UNROLL 4
2536  while (row + MAX_COMPLEX_UNROLL * accCols <= rows) {
2538  }
2539  switch ((rows - row) / accCols) {
2540 #if MAX_COMPLEX_UNROLL > 4
2541  case 4:
2543  break;
2544 #endif
2545 #if MAX_COMPLEX_UNROLL > 3
2546  case 3:
2548  break;
2549 #endif
2550 #if MAX_COMPLEX_UNROLL > 2
2551  case 2:
2553  break;
2554 #endif
2555 #if MAX_COMPLEX_UNROLL > 1
2556  case 1:
2558  break;
2559 #endif
2560  default:
2561  break;
2562  }
2563 #undef MAX_COMPLEX_UNROLL
2564 
2565  if (remaining_rows > 0) {
2566  gemm_complex_extra_row<Scalar, Packet, Packetc, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, LhsIsReal,
2567  RhsIsReal>(res3, blockA, rhs_base, depth, strideA, offsetA, strideB, row, rows,
2568  remaining_rows, pAlphaReal, pAlphaImag, pMask);
2569  }
2570 }
#define MICRO_COMPLEX_UNROLL_ITER(func, N)
Definition: MatrixProductCommon.h:142
#define advanceCols
Definition: MatrixProduct.h:2215
#define MICRO_COMPLEX_UNROLL_ITER2(N, M)
Definition: MatrixProduct.h:2517
#define MAX_COMPLEX_UNROLL
EIGEN_ALWAYS_INLINE void gemm_complex_extra_row(const DataMapper &res, const Scalar *lhs_base, const Scalar *rhs_base, Index depth, Index strideA, Index offsetA, Index strideB, Index row, Index rows, Index remaining_rows, const Packet &pAlphaReal, const Packet &pAlphaImag, const Packet &pMask)
Definition: MatrixProduct.h:2404

References advanceCols, col(), gemm_complex_extra_row(), MAX_COMPLEX_UNROLL, MICRO_COMPLEX_UNROLL_ITER, MICRO_COMPLEX_UNROLL_ITER2, MICRO_NEW_ROWS, res, row(), and rows.

Referenced by gemm_complex().

◆ gemm_complex_extra_cols()

template<typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_complex_extra_cols ( const DataMapper &  res,
const Scalar blockA,
const Scalar blockB,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  offsetB,
Index  col,
Index  rows,
Index  cols,
Index  remaining_rows,
const Packet pAlphaReal,
const Packet pAlphaImag,
const Packet pMask 
)
2583  {
2585 }
#define MICRO_COMPLEX_EXTRA_COLS(N)
Definition: MatrixProduct.h:2572
#define MICRO_EXTRA(MICRO_EXTRA_UNROLL, value, is_col)
Definition: MatrixProduct.h:1960

References col(), cols, MICRO_COMPLEX_EXTRA_COLS, and MICRO_EXTRA.

Referenced by gemm_complex(), and gemm_complexMMA().

◆ gemm_complex_extra_row()

template<typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_complex_extra_row ( const DataMapper &  res,
const Scalar lhs_base,
const Scalar rhs_base,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  row,
Index  rows,
Index  remaining_rows,
const Packet pAlphaReal,
const Packet pAlphaImag,
const Packet pMask 
)
2407  {
2408  MICRO_EXTRA(MICRO_COMPLEX_EXTRA_ROWS, remaining_rows, false)
2409 }
#define MICRO_COMPLEX_EXTRA_ROWS(N)
Definition: MatrixProduct.h:2397

References MICRO_COMPLEX_EXTRA_ROWS, and MICRO_EXTRA.

Referenced by gemm_complex_cols().

◆ gemm_complex_unrolled_iteration()

template<int unroll_factor, typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accRows, const Index accCols, const Index accCols2, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_complex_unrolled_iteration ( const DataMapper &  res,
const Scalar lhs_base,
const Scalar rhs_base,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index row,
const Packet pAlphaReal,
const Packet pAlphaImag,
const Packet pMask 
)
2486  {
2487  const Scalar *rhs_ptr_real0 = rhs_base, *rhs_ptr_real1 = NULL, *rhs_ptr_real2 = NULL;
2488  const Scalar *rhs_ptr_imag0 = NULL, *rhs_ptr_imag1 = NULL, *rhs_ptr_imag2 = NULL;
2489  const Index imag_delta = accCols * strideA;
2490  const Index imag_delta2 = accCols2 * strideA;
2491  const Scalar *lhs_ptr_real0 = NULL, *lhs_ptr_real1 = NULL;
2492  const Scalar *lhs_ptr_real2 = NULL, *lhs_ptr_real3 = NULL;
2493  PacketBlock<Packet, accRows> accReal0, accImag0, accReal1, accImag1;
2494  PacketBlock<Packet, accRows> accReal2, accImag2, accReal3, accImag3;
2495  PacketBlock<Packet, accRows> taccReal, taccImag;
2496  PacketBlock<Packetc, accRows> acc0, acc1;
2497  PacketBlock<Packetc, accRows * 2> tRes;
2498 
2502 
2503  Index k = 0;
2504  for (; k + PEEL_COMPLEX <= depth; k += PEEL_COMPLEX) {
2505  MICRO_COMPLEX_PREFETCHN(accRows)
2508  }
2509  for (; k < depth; k++) {
2511  }
2513 
2515 }
#define MICRO_COMPLEX_UPDATE
Definition: MatrixProductCommon.h:198
#define MICRO_COMPLEX_DST_PTR
Definition: MatrixProduct.h:2458
#define MICRO_COMPLEX_PREFETCHN(N)
Definition: MatrixProduct.h:1896
#define MICRO_COMPLEX_SRC2_PTR
Definition: MatrixProduct.h:2260
#define MICRO_COMPLEX_ONE_PEEL4
Definition: MatrixProduct.h:2445
#define MICRO_COMPLEX_PREFETCH
Definition: MatrixProduct.h:2462
#define PEEL_COMPLEX
Definition: MatrixProduct.h:2218
#define MICRO_COMPLEX_ONE4
Definition: MatrixProduct.h:2447
#define MICRO_COMPLEX_STORE
Definition: MatrixProduct.h:2477
#define MICRO_COMPLEX_SRC_PTR
Definition: MatrixProduct.h:2460

References k, MICRO_COMPLEX_DST_PTR, MICRO_COMPLEX_ONE4, MICRO_COMPLEX_ONE_PEEL4, MICRO_COMPLEX_PREFETCH, MICRO_COMPLEX_PREFETCHN, MICRO_COMPLEX_SRC2_PTR, MICRO_COMPLEX_SRC_PTR, MICRO_COMPLEX_STORE, MICRO_COMPLEX_UPDATE, and PEEL_COMPLEX.

◆ gemm_complex_unrolled_MMA_iteration()

template<int unroll_factor, typename Scalar , typename Packet , typename Packetc , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, const Index accCols2, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal, const Index accItr>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_complex_unrolled_MMA_iteration ( const DataMapper &  res0,
const DataMapper &  res1,
const DataMapper &  res2,
const DataMapper &  res3,
const Scalar lhs_base,
const Scalar rhs_base,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index row,
const Packet pAlphaReal,
const Packet pAlphaImag,
const Packet pMask 
)
705  {
706  const Scalar *rhs_ptr_real0 = rhs_base, *rhs_ptr_real1 = NULL, *rhs_ptr_real2 = NULL, *rhs_ptr_real3 = NULL;
707  const Scalar *rhs_ptr_imag0 = NULL, *rhs_ptr_imag1 = NULL, *rhs_ptr_imag2 = NULL, *rhs_ptr_imag3 = NULL;
708  const Index imag_delta = accCols * strideA;
709  const Index imag_delta2 = accCols2 * strideA;
710 
711  if (!RhsIsReal) {
712  rhs_ptr_imag0 = rhs_base + accRows * strideB;
713  } else {
714  EIGEN_UNUSED_VARIABLE(rhs_ptr_imag0);
715  }
716  if (accItr > 1) {
717  if (!RhsIsReal) {
718  rhs_ptr_real1 = rhs_base + (2 * accRows * strideB);
719  rhs_ptr_imag1 = rhs_base + (3 * accRows * strideB);
720  } else {
721  rhs_ptr_real1 = rhs_base + accRows * strideB;
722  EIGEN_UNUSED_VARIABLE(rhs_ptr_imag1);
723  }
724  } else {
725  EIGEN_UNUSED_VARIABLE(rhs_ptr_real1);
726  EIGEN_UNUSED_VARIABLE(rhs_ptr_imag1);
727  EIGEN_UNUSED_VARIABLE(res1);
728  }
729  if (accItr > 2) {
730  if (!RhsIsReal) {
731  rhs_ptr_real2 = rhs_base + (4 * accRows * strideB);
732  rhs_ptr_imag2 = rhs_base + (5 * accRows * strideB);
733  rhs_ptr_real3 = rhs_base + (6 * accRows * strideB);
734  rhs_ptr_imag3 = rhs_base + (7 * accRows * strideB);
735  } else {
736  rhs_ptr_real2 = rhs_base + (2 * accRows * strideB);
737  rhs_ptr_real3 = rhs_base + (3 * accRows * strideB);
738  EIGEN_UNUSED_VARIABLE(rhs_ptr_imag2);
739  EIGEN_UNUSED_VARIABLE(rhs_ptr_imag3);
740  }
741  } else {
742  EIGEN_UNUSED_VARIABLE(rhs_ptr_real2);
743  EIGEN_UNUSED_VARIABLE(rhs_ptr_real3);
744  EIGEN_UNUSED_VARIABLE(rhs_ptr_imag2);
745  EIGEN_UNUSED_VARIABLE(rhs_ptr_imag3);
746  EIGEN_UNUSED_VARIABLE(res2);
747  EIGEN_UNUSED_VARIABLE(res3);
748  }
749  const Scalar *lhs_ptr_real0 = NULL, *lhs_ptr_real1 = NULL;
750  const Scalar *lhs_ptr_real2 = NULL, *lhs_ptr_real3 = NULL;
751  __vector_quad accReal0, accImag0, accReal1, accImag1, accReal2, accImag2, accReal3, accImag3;
752 
755 
756  Index k = 0, depth2 = depth - PEEL_COMPLEX_MMA;
757  for (; k <= depth2; k += PEEL_COMPLEX_MMA) {
758  EIGEN_POWER_PREFETCH(rhs_ptr_real);
759  if (!RhsIsReal) {
760  EIGEN_POWER_PREFETCH(rhs_ptr_imag);
761  }
764  }
765  for (; k < depth; k++) {
767  }
769 
771 }
#define EIGEN_POWER_PREFETCH(p)
Definition: MatrixProductCommon.h:5
#define MICRO_COMPLEX_MMA_ONE
Definition: MatrixProductMMA.h:655
#define MICRO_COMPLEX_MMA_DST_PTR
Definition: MatrixProductMMA.h:666
#define MICRO_COMPLEX_MMA_SRC_PTR
Definition: MatrixProductMMA.h:668
#define MICRO_COMPLEX_MMA_STORE
Definition: MatrixProductMMA.h:687
#define MICRO_COMPLEX_MMA_ONE_PEEL
Definition: MatrixProductMMA.h:645
#define PEEL_COMPLEX_MMA
Definition: MatrixProductMMA.h:514
#define MICRO_COMPLEX_MMA_PREFETCH
Definition: MatrixProductMMA.h:670

References EIGEN_POWER_PREFETCH, EIGEN_UNUSED_VARIABLE, k, MICRO_COMPLEX_MMA_DST_PTR, MICRO_COMPLEX_MMA_ONE, MICRO_COMPLEX_MMA_ONE_PEEL, MICRO_COMPLEX_MMA_PREFETCH, MICRO_COMPLEX_MMA_SRC_PTR, MICRO_COMPLEX_MMA_STORE, MICRO_COMPLEX_UPDATE, and PEEL_COMPLEX_MMA.

◆ gemm_complexMMA()

template<typename LhsScalar , typename RhsScalar , typename Scalarc , typename Scalar , typename Packet , typename Packetc , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
void Eigen::internal::gemm_complexMMA ( const DataMapper &  res,
const LhsScalar *  blockAc,
const RhsScalar *  blockBc,
Index  rows,
Index  depth,
Index  cols,
Scalarc  alpha,
Index  strideA,
Index  strideB,
Index  offsetA,
Index  offsetB 
)
860  {
861  const Index remaining_rows = rows % accCols;
862 
863  if (strideA == -1) strideA = depth;
864  if (strideB == -1) strideB = depth;
865 
866  const Packet pAlphaReal = pset1<Packet>(alpha.real());
867  const Packet pAlphaImag = pset1<Packet>(alpha.imag());
868  const Packet pMask = bmask<Packet>(remaining_rows);
869 
870  const Scalar* blockA = (Scalar*)blockAc;
871  const Scalar* blockB = (Scalar*)blockBc;
872 
873  typedef typename std::conditional_t<(sizeof(Scalar) == sizeof(float)), RhsPacket, __vector_pair> RhsPacket2;
874 
875  Index col = 0;
876 #ifdef GEMM_MULTIPLE_COLS
879 #endif
881 
882  if (col != cols) {
883  gemm_complex_extra_cols<Scalar, Packet, Packetc, DataMapper, accCols, ConjugateLhs, ConjugateRhs, LhsIsReal,
884  RhsIsReal>(res, blockA, blockB, depth, strideA, offsetA, strideB, offsetB, col, rows, cols,
885  remaining_rows, pAlphaReal, pAlphaImag, pMask);
886  }
887 }
#define MICRO_COMPLEX_MMA_COLS(n)
Definition: MatrixProductMMA.h:848

References alpha, col(), cols, gemm_complex_extra_cols(), MICRO_COMPLEX_MMA_COLS, res, and rows.

Referenced by Eigen::internal::gebp_kernel< double, std::complex< double >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< float, std::complex< float >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< std::complex< double >, double, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< std::complex< double >, std::complex< double >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< std::complex< float >, float, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), and Eigen::internal::gebp_kernel< std::complex< float >, std::complex< float >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()().

◆ gemm_extra_cols()

template<typename Scalar , typename Packet , typename DataMapper , const Index accCols>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_extra_cols ( const DataMapper &  res,
const Scalar blockA,
const Scalar blockB,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  offsetB,
Index  col,
Index  rows,
Index  cols,
Index  remaining_rows,
const Packet pAlpha,
const Packet pMask 
)
2181  {
2183 }
#define MICRO_EXTRA_COLS(N)
Definition: MatrixProduct.h:2173

References col(), cols, MICRO_EXTRA, and MICRO_EXTRA_COLS.

◆ gemm_extra_row()

template<typename Scalar , typename Packet , typename DataMapper , const Index accRows, const Index accCols>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_extra_row ( const DataMapper &  res,
const Scalar lhs_base,
const Scalar rhs_base,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  row,
Index  rows,
Index  remaining_rows,
const Packet pAlpha,
const Packet pMask 
)
1984  {
1985  MICRO_EXTRA(MICRO_EXTRA_ROWS, remaining_rows, false)
1986 }
#define MICRO_EXTRA_ROWS(N)
Definition: MatrixProduct.h:1977

References MICRO_EXTRA, and MICRO_EXTRA_ROWS.

◆ gemm_kern_avx512()

template<typename Scalar , int max_a_unroll, int max_b_unroll, bool is_alpha1, bool is_beta0, bool is_unit_inc>
EIGEN_DONT_INLINE void Eigen::internal::gemm_kern_avx512 ( Index  m,
Index  n,
Index  k,
Scalar alpha,
const Scalar a,
const Scalar b,
Scalar c,
Index  ldc,
Index  inc = 1,
Index  a_stride = -1,
Index  b_stride = -1,
Index  a_off = 0,
Index  b_off = 0 
)
940  {
941  if (a_stride == -1) a_stride = k;
942  if (b_stride == -1) b_stride = k;
943 
944  gemm_class<Scalar, is_unit_inc> g(m, n, k, ldc, inc, alpha, a, b, c, is_alpha1, is_beta0, a_stride, b_stride, a_off,
945  b_off);
946  g.template compute_kern<max_a_unroll, max_b_unroll>();
947 }
const char const int const RealScalar const RealScalar const int RealScalar const int * ldc
Definition: level2_real_impl.h:71

References a, alpha, b, calibrate::c, k, ldc, m, and n.

◆ gemm_unrolled_complex_row_iteration()

template<typename Scalar , typename Packet , typename Packetc , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal, const Index remaining_rows>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_unrolled_complex_row_iteration ( const DataMapper &  res,
const Scalar lhs_base,
const Scalar rhs_base,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  row,
Index  rows,
const Packet pAlphaReal,
const Packet pAlphaImag,
const Packet pMask 
)
2330  {
2331  const Scalar *rhs_ptr_real0 = rhs_base, *rhs_ptr_real1 = NULL, *rhs_ptr_real2 = NULL;
2332  const Scalar *rhs_ptr_imag0 = NULL, *rhs_ptr_imag1 = NULL, *rhs_ptr_imag2 = NULL;
2333  const Scalar* lhs_ptr_real = lhs_base + advanceRows * row * strideA + remaining_rows * offsetA;
2334  const Scalar* lhs_ptr_imag = NULL;
2335  if (!LhsIsReal)
2336  lhs_ptr_imag = lhs_ptr_real + remaining_rows * strideA;
2337  else
2338  EIGEN_UNUSED_VARIABLE(lhs_ptr_imag);
2339  PacketBlock<Packet, accRows> accReal0, accImag0, accReal1, accImag1, accReal2, accImag2, accReal3, accImag3;
2340  PacketBlock<Packet, accRows> taccReal, taccImag;
2341  PacketBlock<Packetc, accRows> acc0, acc1;
2342  PacketBlock<Packetc, accRows * 2> tRes;
2343 
2345 
2346  bsetzero<Packet, accRows>(accReal0);
2347  bsetzero<Packet, accRows>(accImag0);
2348 
2349  Index remaining_depth = depth & -quad_traits<Scalar>::rows;
2350  Index k = 0;
2351  if (remaining_depth >= PEEL_COMPLEX_ROW) {
2353  do {
2354  MICRO_COMPLEX_PREFETCHN(accRows)
2355  EIGEN_POWER_PREFETCH(lhs_ptr_real);
2356  if (!LhsIsReal) {
2357  EIGEN_POWER_PREFETCH(lhs_ptr_imag);
2358  }
2360  } while ((k += PEEL_COMPLEX_ROW) + PEEL_COMPLEX_ROW <= remaining_depth);
2362  }
2363  for (; k < depth; k++) {
2364  MICRO_COMPLEX_EXTRA_ROW<Scalar, Packet, accRows, ConjugateLhs, ConjugateRhs, LhsIsReal, RhsIsReal, remaining_rows>(
2365  lhs_ptr_real, lhs_ptr_imag, rhs_ptr_real0, rhs_ptr_real1, rhs_ptr_real2, rhs_ptr_imag0, rhs_ptr_imag1,
2366  rhs_ptr_imag2, accReal0, accImag0);
2367  }
2368 
2369  constexpr bool full = (remaining_rows > accColsC);
2370  bload<DataMapper, Packetc, accColsC, ColMajor, true, accRows, full>(tRes, res, row, 0);
2371  if ((accRows == 1) || (rows >= accCols)) {
2372  bscalec<Packet, accRows, true>(accReal0, accImag0, pAlphaReal, pAlphaImag, taccReal, taccImag, pMask);
2373  bcouple<Packet, Packetc, accRows, full>(taccReal, taccImag, tRes, acc0, acc1);
2374  bstore<DataMapper, Packetc, accRows>(acc0, res, row + 0);
2375  if (full) {
2376  bstore<DataMapper, Packetc, accRows>(acc1, res, row + accColsC);
2377  }
2378  } else {
2379  bscalec<Packet, accRows, false>(accReal0, accImag0, pAlphaReal, pAlphaImag, taccReal, taccImag, pMask);
2380  bcouple<Packet, Packetc, accRows, full>(taccReal, taccImag, tRes, acc0, acc1);
2381 
2382  if ((sizeof(Scalar) == sizeof(float)) && (remaining_rows == 1)) {
2383  for (Index j = 0; j < accRows; j++) {
2384  res(row + 0, j) = pfirst<Packetc>(acc0.packet[j]);
2385  }
2386  } else {
2387  bstore<DataMapper, Packetc, accRows>(acc0, res, row + 0);
2388  if (full) {
2389  for (Index j = 0; j < accRows; j++) {
2390  res(row + accColsC, j) = pfirst<Packetc>(acc1.packet[j]);
2391  }
2392  }
2393  }
2394  }
2395 }
#define PEEL_COMPLEX_ROW
Definition: MatrixProduct.h:2219
#define accColsC
Definition: MatrixProduct.h:2213
#define advanceRows
Definition: MatrixProduct.h:2214
#define MICRO_COMPLEX_WORK_PEEL_ROW
Definition: MatrixProduct.h:2291
#define MICRO_COMPLEX_ZERO_PEEL_ROW
Definition: MatrixProduct.h:2271
#define MICRO_COMPLEX_ADD_PEEL_ROW
Definition: MatrixProduct.h:2306

References accColsC, advanceRows, EIGEN_POWER_PREFETCH, EIGEN_UNUSED_VARIABLE, j, k, MICRO_COMPLEX_ADD_PEEL_ROW, MICRO_COMPLEX_PREFETCHN, MICRO_COMPLEX_SRC2_PTR, MICRO_COMPLEX_WORK_PEEL_ROW, MICRO_COMPLEX_ZERO_PEEL_ROW, Eigen::internal::PacketBlock< Packet, N >::packet, PEEL_COMPLEX_ROW, res, row(), and rows.

◆ gemm_unrolled_iteration()

template<int unroll_factor, typename Scalar , typename Packet , typename DataMapper , const Index accRows, const Index accCols, const Index accCols2>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_unrolled_iteration ( const DataMapper &  res,
const Scalar lhs_base,
const Scalar rhs_base,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index row,
const Packet pAlpha,
const Packet pMask 
)
2075  {
2076  const Scalar *rhs_ptr0 = rhs_base, *rhs_ptr1 = NULL, *rhs_ptr2 = NULL;
2077  const Scalar *lhs_ptr0 = NULL, *lhs_ptr1 = NULL, *lhs_ptr2 = NULL, *lhs_ptr3 = NULL, *lhs_ptr4 = NULL,
2078  *lhs_ptr5 = NULL, *lhs_ptr6 = NULL, *lhs_ptr7 = NULL;
2079  PacketBlock<Packet, accRows> accZero0, accZero1, accZero2, accZero3, accZero4, accZero5, accZero6, accZero7;
2080  PacketBlock<Packet, accRows> acc;
2081 
2085 
2086  Index k = 0;
2087  for (; k + PEEL <= depth; k += PEEL) {
2088  MICRO_PREFETCHN(accRows)
2091  }
2092  for (; k < depth; k++) {
2093  MICRO_ONE4
2094  }
2095  MICRO_STORE
2096 
2097  MICRO_UPDATE
2098 }
#define MICRO_UPDATE
Definition: MatrixProductCommon.h:191
#define MICRO_PREFETCHN(N)
Definition: MatrixProduct.h:1894
#define MICRO_ONE_PEEL4
Definition: MatrixProduct.h:2019
#define MICRO_STORE
Definition: MatrixProduct.h:2058
#define MICRO_DST_PTR
Definition: MatrixProduct.h:2030
#define PEEL
Definition: MatrixProduct.h:1790
#define MICRO_SRC2_PTR
Definition: MatrixProduct.h:1855
#define MICRO_PREFETCH
Definition: MatrixProduct.h:2034
#define MICRO_ONE4
Definition: MatrixProduct.h:2021
#define MICRO_SRC_PTR
Definition: MatrixProduct.h:2032

References k, MICRO_DST_PTR, MICRO_ONE4, MICRO_ONE_PEEL4, MICRO_PREFETCH, MICRO_PREFETCHN, MICRO_SRC2_PTR, MICRO_SRC_PTR, MICRO_STORE, MICRO_UPDATE, and PEEL.

◆ gemm_unrolled_MMA_iteration()

template<int unroll_factor, typename Scalar , typename Packet , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, bool full, const Index accItr>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_unrolled_MMA_iteration ( const DataMapper &  res0,
const DataMapper &  res1,
const DataMapper &  res2,
const DataMapper &  res3,
const Scalar lhs_base,
const Scalar rhs_base,
Index  depth,
Index  strideA,
Index  strideB,
Index  offsetA,
Index row,
const Packet pAlpha,
Index  accCols2 
)
338  {
339  const Scalar *rhs_ptr0 = rhs_base, *rhs_ptr1 = NULL, *rhs_ptr2 = NULL, *rhs_ptr3 = NULL;
340  const Scalar *lhs_ptr0 = NULL, *lhs_ptr1 = NULL, *lhs_ptr2 = NULL, *lhs_ptr3 = NULL, *lhs_ptr4 = NULL,
341  *lhs_ptr5 = NULL, *lhs_ptr6 = NULL, *lhs_ptr7 = NULL;
342  __vector_quad accZero0, accZero1, accZero2, accZero3, accZero4, accZero5, accZero6, accZero7;
343 
344  if (accItr > 1) {
345  rhs_ptr1 = rhs_base + (accRows * strideB);
346  } else {
347  EIGEN_UNUSED_VARIABLE(strideB);
348  EIGEN_UNUSED_VARIABLE(rhs_ptr1);
349  EIGEN_UNUSED_VARIABLE(res1);
350  }
351  if (accItr > 2) {
352  rhs_ptr2 = rhs_base + (2 * accRows * strideB);
353  rhs_ptr3 = rhs_base + (3 * accRows * strideB);
354  } else {
355  EIGEN_UNUSED_VARIABLE(rhs_ptr2);
356  EIGEN_UNUSED_VARIABLE(rhs_ptr3);
357  EIGEN_UNUSED_VARIABLE(res2);
358  EIGEN_UNUSED_VARIABLE(res3);
359  }
360 
363 
364  Index k = 0, depth2 = depth - PEEL_MMA;
365  for (; k <= depth2; k += PEEL_MMA) {
366  EIGEN_POWER_PREFETCH(rhs_ptr);
369  }
370  for (; k < depth; k++) {
372  }
374 
376 }
#define MICRO_MMA_DST_PTR
Definition: MatrixProductMMA.h:302
#define MICRO_MMA_STORE
Definition: MatrixProductMMA.h:323
#define MICRO_MMA_PREFETCH
Definition: MatrixProductMMA.h:306
#define MICRO_MMA_ONE
Definition: MatrixProductMMA.h:293
#define MICRO_MMA_SRC_PTR
Definition: MatrixProductMMA.h:304
#define MICRO_MMA_ONE_PEEL
Definition: MatrixProductMMA.h:284
#define PEEL_MMA
Definition: MatrixProductMMA.h:156

References EIGEN_POWER_PREFETCH, EIGEN_UNUSED_VARIABLE, k, MICRO_MMA_DST_PTR, MICRO_MMA_ONE, MICRO_MMA_ONE_PEEL, MICRO_MMA_PREFETCH, MICRO_MMA_SRC_PTR, MICRO_MMA_STORE, MICRO_UPDATE, and PEEL_MMA.

◆ gemm_unrolled_row_iteration()

template<typename Scalar , typename Packet , typename DataMapper , const Index accRows, const Index accCols, const Index remaining_rows>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemm_unrolled_row_iteration ( const DataMapper &  res,
const Scalar lhs_base,
const Scalar rhs_base,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  row,
Index  rows,
const Packet pAlpha,
const Packet pMask 
)
1915  {
1916  const Scalar *rhs_ptr0 = rhs_base, *rhs_ptr1 = NULL, *rhs_ptr2 = NULL;
1917  const Scalar* lhs_ptr = lhs_base + row * strideA + remaining_rows * offsetA;
1918  PacketBlock<Packet, accRows> accZero0, accZero1, accZero2, accZero3, accZero4, accZero5, accZero6, accZero7, acc;
1919 
1921  bsetzero<Packet, accRows>(accZero0);
1922 
1923  Index remaining_depth = depth & -quad_traits<Scalar>::rows;
1924  Index k = 0;
1925  if (remaining_depth >= PEEL_ROW) {
1927  do {
1928  MICRO_PREFETCHN(accRows)
1929  EIGEN_POWER_PREFETCH(lhs_ptr);
1931  } while ((k += PEEL_ROW) + PEEL_ROW <= remaining_depth);
1933  }
1934  for (; k < depth; k++) {
1935  MICRO_EXTRA_ROW<Scalar, Packet, accRows, remaining_rows>(lhs_ptr, rhs_ptr0, rhs_ptr1, rhs_ptr2, accZero0);
1936  }
1937 
1938 #ifdef USE_PARTIAL_PACKETS
1940  EIGEN_UNUSED_VARIABLE(pMask);
1941  bload_partial<DataMapper, Packet, 0, false, accRows>(acc, res, row, remaining_rows);
1942  bscale<Packet, accRows>(acc, accZero0, pAlpha);
1943  bstore_partial<DataMapper, Packet, accRows>(acc, res, row, remaining_rows);
1944 #else
1945  bload<DataMapper, Packet, 0, ColMajor, false, accRows>(acc, res, row, 0);
1946  if ((accRows == 1) || (rows >= accCols)) {
1947  bscale<Packet, accRows, true>(acc, accZero0, pAlpha, pMask);
1948  bstore<DataMapper, Packet, accRows>(acc, res, row);
1949  } else {
1950  bscale<Packet, accRows, false>(acc, accZero0, pAlpha, pMask);
1951  for (Index j = 0; j < accRows; j++) {
1952  for (Index i = 0; i < remaining_rows; i++) {
1953  res(row + i, j) = acc.packet[j][i];
1954  }
1955  }
1956  }
1957 #endif
1958 }
#define PEEL_ROW
Definition: MatrixProduct.h:1791
#define MICRO_WORK_PEEL_ROW
Definition: MatrixProduct.h:1867
#define MICRO_ADD_PEEL_ROW
Definition: MatrixProduct.h:1880
#define MICRO_ZERO_PEEL_ROW
Definition: MatrixProduct.h:1857

References EIGEN_POWER_PREFETCH, EIGEN_UNUSED_VARIABLE, i, j, k, MICRO_ADD_PEEL_ROW, MICRO_PREFETCHN, MICRO_SRC2_PTR, MICRO_WORK_PEEL_ROW, MICRO_ZERO_PEEL_ROW, Eigen::internal::PacketBlock< Packet, N >::packet, PEEL_ROW, res, row(), and rows.

◆ gemmbfloat16()

template<typename DataMapper >
void Eigen::internal::gemmbfloat16 ( const DataMapper &  res,
const bfloat16 indexA,
const bfloat16 indexB,
Index  rows,
Index  depth,
Index  cols,
bfloat16  alpha,
Index  strideA,
Index  strideB,
Index  offsetA,
Index  offsetB 
)
3114  {
3116  const Packet4f pAlpha = pset1<Packet4f>(falpha);
3117 
3118  if (strideA == -1) strideA = depth;
3119  if (strideB == -1) strideB = depth;
3120 
3122  ei_declare_aligned_stack_constructed_variable(float, indexB2, strideB* cols, 0);
3123  ei_declare_aligned_stack_constructed_variable(float, indexA2, ((strideA + 1) & -2) * 4 * 2, 0);
3124 
3125  convertArrayBF16toF32<DataMapper>(result, cols, rows, res);
3126  convertArrayPointerBF16toF32(indexB2, cols, strideB, const_cast<bfloat16*>(indexB));
3127 
3128  Index bigSuffix = 2 * 8 * (strideA - offsetA);
3129  float* indexBF32 = indexB2 + 4 * offsetB;
3130  offsetB *= 3;
3131  strideB *= 2;
3132 
3133  Index row = 0;
3134  // LHS (8x16) block
3135  while (row + 16 <= rows) {
3136  calcVSXColLoops<16>(indexA, indexA2, row, depth, cols, rows, pAlpha, indexBF32, strideA, strideB, offsetA, offsetB,
3137  bigSuffix, result);
3138  }
3139  // LHS (8x8) block
3140  calcVSXColLoops<8>(indexA, indexA2, row, depth, cols, rows, pAlpha, indexBF32, strideA, strideB, offsetA, offsetB,
3141  bigSuffix, result);
3142  // LHS (8x4) block
3143  calcVSXColLoops<4>(indexA, indexA2, row, depth, cols, rows, pAlpha, indexBF32, strideA, strideB, offsetA, offsetB,
3144  bigSuffix, result);
3145  // extra rows
3146  if (rows & 3) {
3147  // This index is the beginning of remaining block.
3148  colVSXLoops<4, true>(depth, cols, rows, pAlpha, indexA, indexA2, indexBF32, strideA, strideB, offsetB,
3149  result + row);
3150  }
3151 
3152  // Convert back to bfloat16
3153  convertArrayF32toBF16VSX<DataMapper>(result, cols, rows, res);
3154 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC float bfloat16_to_float(__bfloat16_raw h)
Definition: BFloat16.h:581
EIGEN_ALWAYS_INLINE void convertArrayPointerBF16toF32(float *result, Index cols, Index rows, bfloat16 *src, Index resInc)
Definition: MatrixProduct.h:2813

References alpha, Eigen::bfloat16_impl::bfloat16_to_float(), cols, convertArrayPointerBF16toF32(), ei_declare_aligned_stack_constructed_variable, pset1< Packet4f >(), res, row(), and rows.

◆ gemmKernel()

template<typename Scalar , bool isARowMajor, bool isCRowMajor, bool isAdd, bool handleKRem>
void Eigen::internal::gemmKernel ( Scalar A_arr,
Scalar B_arr,
Scalar C_arr,
int64_t  M,
int64_t  N,
int64_t  K,
int64_t  LDA,
int64_t  LDB,
int64_t  LDC 
)

GEMM like operation for trsm panel updates. Computes: C -= A*B K must be multiple of 4.

Unrolls used are {1,2,4,8}x{U1,U2,U3}; For good performance we want K to be large with M/N relatively small, but also large enough to use the {8,U3} unroll block.

isARowMajor: is A_arr row-major? isCRowMajor: is C_arr row-major? (B_arr is assumed to be row-major). isAdd: C += A*B or C -= A*B (used by trsm) handleKRem: Handle arbitrary K? This is not needed for trsm.

222  {
223  using urolls = unrolls::gemm<Scalar, isAdd>;
224  constexpr int64_t U3 = urolls::PacketSize * 3;
225  constexpr int64_t U2 = urolls::PacketSize * 2;
226  constexpr int64_t U1 = urolls::PacketSize * 1;
228  int64_t N_ = (N / U3) * U3;
231  int64_t j = 0;
232  for (; j < N_; j += U3) {
233  constexpr int64_t EIGEN_AVX_MAX_B_LOAD = EIGEN_AVX_B_LOAD_SETS * 3;
234  int64_t i = 0;
235  for (; i < M_; i += EIGEN_AVX_MAX_NUM_ROW) {
236  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)], *B_t = &B_arr[0 * LDB + j];
237  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
238  urolls::template setzero<3, EIGEN_AVX_MAX_NUM_ROW>(zmm);
239  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
240  urolls::template microKernel<isARowMajor, 3, EIGEN_AVX_MAX_NUM_ROW, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
241  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
242  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
243  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
244  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
245  }
246  EIGEN_IF_CONSTEXPR(handleKRem) {
247  for (int64_t k = K_; k < K; k++) {
248  urolls::template microKernel<isARowMajor, 3, EIGEN_AVX_MAX_NUM_ROW, 1, EIGEN_AVX_B_LOAD_SETS * 3,
249  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
250  B_t += LDB;
251  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
252  else A_t += LDA;
253  }
254  }
255  EIGEN_IF_CONSTEXPR(isCRowMajor) {
256  urolls::template updateC<3, EIGEN_AVX_MAX_NUM_ROW>(&C_arr[i * LDC + j], LDC, zmm);
257  urolls::template storeC<3, EIGEN_AVX_MAX_NUM_ROW>(&C_arr[i * LDC + j], LDC, zmm);
258  }
259  else {
260  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U3, false, false>(zmm, &C_arr[i + j * LDC], LDC);
261  }
262  }
263  if (M - i >= 4) { // Note: this block assumes EIGEN_AVX_MAX_NUM_ROW = 8. Should be removed otherwise
264  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
265  Scalar *B_t = &B_arr[0 * LDB + j];
266  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
267  urolls::template setzero<3, 4>(zmm);
268  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
269  urolls::template microKernel<isARowMajor, 3, 4, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_B_LOAD_SETS * 3,
270  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
271  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
272  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
273  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
274  }
275  EIGEN_IF_CONSTEXPR(handleKRem) {
276  for (int64_t k = K_; k < K; k++) {
277  urolls::template microKernel<isARowMajor, 3, 4, 1, EIGEN_AVX_B_LOAD_SETS * 3, EIGEN_AVX_MAX_A_BCAST>(
278  B_t, A_t, LDB, LDA, zmm);
279  B_t += LDB;
280  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
281  else A_t += LDA;
282  }
283  }
284  EIGEN_IF_CONSTEXPR(isCRowMajor) {
285  urolls::template updateC<3, 4>(&C_arr[i * LDC + j], LDC, zmm);
286  urolls::template storeC<3, 4>(&C_arr[i * LDC + j], LDC, zmm);
287  }
288  else {
289  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U3, true, false>(zmm, &C_arr[i + j * LDC], LDC, 4);
290  }
291  i += 4;
292  }
293  if (M - i >= 2) {
294  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
295  Scalar *B_t = &B_arr[0 * LDB + j];
296  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
297  urolls::template setzero<3, 2>(zmm);
298  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
299  urolls::template microKernel<isARowMajor, 3, 2, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_B_LOAD_SETS * 3,
300  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
301  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
302  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
303  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
304  }
305  EIGEN_IF_CONSTEXPR(handleKRem) {
306  for (int64_t k = K_; k < K; k++) {
307  urolls::template microKernel<isARowMajor, 3, 2, 1, EIGEN_AVX_B_LOAD_SETS * 3, EIGEN_AVX_MAX_A_BCAST>(
308  B_t, A_t, LDB, LDA, zmm);
309  B_t += LDB;
310  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
311  else A_t += LDA;
312  }
313  }
314  EIGEN_IF_CONSTEXPR(isCRowMajor) {
315  urolls::template updateC<3, 2>(&C_arr[i * LDC + j], LDC, zmm);
316  urolls::template storeC<3, 2>(&C_arr[i * LDC + j], LDC, zmm);
317  }
318  else {
319  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U3, true, false>(zmm, &C_arr[i + j * LDC], LDC, 2);
320  }
321  i += 2;
322  }
323  if (M - i > 0) {
324  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
325  Scalar *B_t = &B_arr[0 * LDB + j];
326  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
327  urolls::template setzero<3, 1>(zmm);
328  {
329  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
330  urolls::template microKernel<isARowMajor, 3, 1, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_B_LOAD_SETS * 3, 1>(
331  B_t, A_t, LDB, LDA, zmm);
332  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
333  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
334  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
335  }
336  EIGEN_IF_CONSTEXPR(handleKRem) {
337  for (int64_t k = K_; k < K; k++) {
338  urolls::template microKernel<isARowMajor, 3, 1, 1, EIGEN_AVX_B_LOAD_SETS * 3, 1>(B_t, A_t, LDB, LDA, zmm);
339  B_t += LDB;
340  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
341  else A_t += LDA;
342  }
343  }
344  EIGEN_IF_CONSTEXPR(isCRowMajor) {
345  urolls::template updateC<3, 1>(&C_arr[i * LDC + j], LDC, zmm);
346  urolls::template storeC<3, 1>(&C_arr[i * LDC + j], LDC, zmm);
347  }
348  else {
349  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U3, true, false>(zmm, &C_arr[i + j * LDC], LDC, 1);
350  }
351  }
352  }
353  }
354  if (N - j >= U2) {
355  constexpr int64_t EIGEN_AVX_MAX_B_LOAD = EIGEN_AVX_B_LOAD_SETS * 2;
356  int64_t i = 0;
357  for (; i < M_; i += EIGEN_AVX_MAX_NUM_ROW) {
358  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)], *B_t = &B_arr[0 * LDB + j];
359  EIGEN_IF_CONSTEXPR(isCRowMajor) B_t = &B_arr[0 * LDB + j];
360  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
361  urolls::template setzero<2, EIGEN_AVX_MAX_NUM_ROW>(zmm);
362  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
363  urolls::template microKernel<isARowMajor, 2, EIGEN_AVX_MAX_NUM_ROW, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
364  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
365  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
366  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
367  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
368  }
369  EIGEN_IF_CONSTEXPR(handleKRem) {
370  for (int64_t k = K_; k < K; k++) {
371  urolls::template microKernel<isARowMajor, 2, EIGEN_AVX_MAX_NUM_ROW, 1, EIGEN_AVX_MAX_B_LOAD,
372  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
373  B_t += LDB;
374  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
375  else A_t += LDA;
376  }
377  }
378  EIGEN_IF_CONSTEXPR(isCRowMajor) {
379  urolls::template updateC<2, EIGEN_AVX_MAX_NUM_ROW>(&C_arr[i * LDC + j], LDC, zmm);
380  urolls::template storeC<2, EIGEN_AVX_MAX_NUM_ROW>(&C_arr[i * LDC + j], LDC, zmm);
381  }
382  else {
383  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U2, false, false>(zmm, &C_arr[i + j * LDC], LDC);
384  }
385  }
386  if (M - i >= 4) { // Note: this block assumes EIGEN_AVX_MAX_NUM_ROW = 8. Should be removed otherwise
387  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
388  Scalar *B_t = &B_arr[0 * LDB + j];
389  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
390  urolls::template setzero<2, 4>(zmm);
391  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
392  urolls::template microKernel<isARowMajor, 2, 4, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
393  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
394  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
395  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
396  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
397  }
398  EIGEN_IF_CONSTEXPR(handleKRem) {
399  for (int64_t k = K_; k < K; k++) {
400  urolls::template microKernel<isARowMajor, 2, 4, 1, EIGEN_AVX_MAX_B_LOAD, EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB,
401  LDA, zmm);
402  B_t += LDB;
403  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
404  else A_t += LDA;
405  }
406  }
407  EIGEN_IF_CONSTEXPR(isCRowMajor) {
408  urolls::template updateC<2, 4>(&C_arr[i * LDC + j], LDC, zmm);
409  urolls::template storeC<2, 4>(&C_arr[i * LDC + j], LDC, zmm);
410  }
411  else {
412  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U2, true, false>(zmm, &C_arr[i + j * LDC], LDC, 4);
413  }
414  i += 4;
415  }
416  if (M - i >= 2) {
417  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
418  Scalar *B_t = &B_arr[0 * LDB + j];
419  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
420  urolls::template setzero<2, 2>(zmm);
421  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
422  urolls::template microKernel<isARowMajor, 2, 2, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
423  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
424  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
425  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
426  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
427  }
428  EIGEN_IF_CONSTEXPR(handleKRem) {
429  for (int64_t k = K_; k < K; k++) {
430  urolls::template microKernel<isARowMajor, 2, 2, 1, EIGEN_AVX_MAX_B_LOAD, EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB,
431  LDA, zmm);
432  B_t += LDB;
433  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
434  else A_t += LDA;
435  }
436  }
437  EIGEN_IF_CONSTEXPR(isCRowMajor) {
438  urolls::template updateC<2, 2>(&C_arr[i * LDC + j], LDC, zmm);
439  urolls::template storeC<2, 2>(&C_arr[i * LDC + j], LDC, zmm);
440  }
441  else {
442  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U2, true, false>(zmm, &C_arr[i + j * LDC], LDC, 2);
443  }
444  i += 2;
445  }
446  if (M - i > 0) {
447  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
448  Scalar *B_t = &B_arr[0 * LDB + j];
449  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
450  urolls::template setzero<2, 1>(zmm);
451  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
452  urolls::template microKernel<isARowMajor, 2, 1, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD, 1>(B_t, A_t, LDB,
453  LDA, zmm);
454  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
455  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
456  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
457  }
458  EIGEN_IF_CONSTEXPR(handleKRem) {
459  for (int64_t k = K_; k < K; k++) {
460  urolls::template microKernel<isARowMajor, 2, 1, 1, EIGEN_AVX_MAX_B_LOAD, 1>(B_t, A_t, LDB, LDA, zmm);
461  B_t += LDB;
462  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
463  else A_t += LDA;
464  }
465  }
466  EIGEN_IF_CONSTEXPR(isCRowMajor) {
467  urolls::template updateC<2, 1>(&C_arr[i * LDC + j], LDC, zmm);
468  urolls::template storeC<2, 1>(&C_arr[i * LDC + j], LDC, zmm);
469  }
470  else {
471  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U2, true, false>(zmm, &C_arr[i + j * LDC], LDC, 1);
472  }
473  }
474  j += U2;
475  }
476  if (N - j >= U1) {
477  constexpr int64_t EIGEN_AVX_MAX_B_LOAD = EIGEN_AVX_B_LOAD_SETS * 1;
478  int64_t i = 0;
479  for (; i < M_; i += EIGEN_AVX_MAX_NUM_ROW) {
480  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)], *B_t = &B_arr[0 * LDB + j];
481  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
482  urolls::template setzero<1, EIGEN_AVX_MAX_NUM_ROW>(zmm);
483  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
484  urolls::template microKernel<isARowMajor, 1, EIGEN_AVX_MAX_NUM_ROW, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
485  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
486  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
487  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
488  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
489  }
490  EIGEN_IF_CONSTEXPR(handleKRem) {
491  for (int64_t k = K_; k < K; k++) {
492  urolls::template microKernel<isARowMajor, 1, EIGEN_AVX_MAX_NUM_ROW, 1, EIGEN_AVX_B_LOAD_SETS * 1,
493  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
494  B_t += LDB;
495  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
496  else A_t += LDA;
497  }
498  }
499  EIGEN_IF_CONSTEXPR(isCRowMajor) {
500  urolls::template updateC<1, EIGEN_AVX_MAX_NUM_ROW>(&C_arr[i * LDC + j], LDC, zmm);
501  urolls::template storeC<1, EIGEN_AVX_MAX_NUM_ROW>(&C_arr[i * LDC + j], LDC, zmm);
502  }
503  else {
504  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U1, false, false>(zmm, &C_arr[i + j * LDC], LDC);
505  }
506  }
507  if (M - i >= 4) { // Note: this block assumes EIGEN_AVX_MAX_NUM_ROW = 8. Should be removed otherwise
508  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
509  Scalar *B_t = &B_arr[0 * LDB + j];
510  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
511  urolls::template setzero<1, 4>(zmm);
512  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
513  urolls::template microKernel<isARowMajor, 1, 4, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
514  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
515  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
516  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
517  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
518  }
519  EIGEN_IF_CONSTEXPR(handleKRem) {
520  for (int64_t k = K_; k < K; k++) {
521  urolls::template microKernel<isARowMajor, 1, 4, 1, EIGEN_AVX_MAX_B_LOAD, EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB,
522  LDA, zmm);
523  B_t += LDB;
524  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
525  else A_t += LDA;
526  }
527  }
528  EIGEN_IF_CONSTEXPR(isCRowMajor) {
529  urolls::template updateC<1, 4>(&C_arr[i * LDC + j], LDC, zmm);
530  urolls::template storeC<1, 4>(&C_arr[i * LDC + j], LDC, zmm);
531  }
532  else {
533  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U1, true, false>(zmm, &C_arr[i + j * LDC], LDC, 4);
534  }
535  i += 4;
536  }
537  if (M - i >= 2) {
538  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
539  Scalar *B_t = &B_arr[0 * LDB + j];
540  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
541  urolls::template setzero<1, 2>(zmm);
542  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
543  urolls::template microKernel<isARowMajor, 1, 2, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
544  EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB, LDA, zmm);
545  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
546  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
547  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
548  }
549  EIGEN_IF_CONSTEXPR(handleKRem) {
550  for (int64_t k = K_; k < K; k++) {
551  urolls::template microKernel<isARowMajor, 1, 2, 1, EIGEN_AVX_MAX_B_LOAD, EIGEN_AVX_MAX_A_BCAST>(B_t, A_t, LDB,
552  LDA, zmm);
553  B_t += LDB;
554  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
555  else A_t += LDA;
556  }
557  }
558  EIGEN_IF_CONSTEXPR(isCRowMajor) {
559  urolls::template updateC<1, 2>(&C_arr[i * LDC + j], LDC, zmm);
560  urolls::template storeC<1, 2>(&C_arr[i * LDC + j], LDC, zmm);
561  }
562  else {
563  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U1, true, false>(zmm, &C_arr[i + j * LDC], LDC, 2);
564  }
565  i += 2;
566  }
567  if (M - i > 0) {
568  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
569  Scalar *B_t = &B_arr[0 * LDB + j];
570  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
571  urolls::template setzero<1, 1>(zmm);
572  {
573  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
574  urolls::template microKernel<isARowMajor, 1, 1, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD, 1>(B_t, A_t, LDB,
575  LDA, zmm);
576  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
577  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
578  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
579  }
580  EIGEN_IF_CONSTEXPR(handleKRem) {
581  for (int64_t k = K_; k < K; k++) {
582  urolls::template microKernel<isARowMajor, 1, 1, 1, EIGEN_AVX_B_LOAD_SETS * 1, 1>(B_t, A_t, LDB, LDA, zmm);
583  B_t += LDB;
584  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
585  else A_t += LDA;
586  }
587  }
588  EIGEN_IF_CONSTEXPR(isCRowMajor) {
589  urolls::template updateC<1, 1>(&C_arr[i * LDC + j], LDC, zmm);
590  urolls::template storeC<1, 1>(&C_arr[i * LDC + j], LDC, zmm);
591  }
592  else {
593  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U1, true, false>(zmm, &C_arr[i + j * LDC], LDC, 1);
594  }
595  }
596  }
597  j += U1;
598  }
599  if (N - j > 0) {
600  constexpr int64_t EIGEN_AVX_MAX_B_LOAD = EIGEN_AVX_B_LOAD_SETS * 1;
601  int64_t i = 0;
602  for (; i < M_; i += EIGEN_AVX_MAX_NUM_ROW) {
603  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
604  Scalar *B_t = &B_arr[0 * LDB + j];
605  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
606  urolls::template setzero<1, EIGEN_AVX_MAX_NUM_ROW>(zmm);
607  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
608  urolls::template microKernel<isARowMajor, 1, EIGEN_AVX_MAX_NUM_ROW, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
609  EIGEN_AVX_MAX_A_BCAST, true>(B_t, A_t, LDB, LDA, zmm, N - j);
610  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
611  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
612  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
613  }
614  EIGEN_IF_CONSTEXPR(handleKRem) {
615  for (int64_t k = K_; k < K; k++) {
616  urolls::template microKernel<isARowMajor, 1, EIGEN_AVX_MAX_NUM_ROW, 1, EIGEN_AVX_MAX_B_LOAD,
617  EIGEN_AVX_MAX_A_BCAST, true>(B_t, A_t, LDB, LDA, zmm, N - j);
618  B_t += LDB;
619  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
620  else A_t += LDA;
621  }
622  }
623  EIGEN_IF_CONSTEXPR(isCRowMajor) {
624  urolls::template updateC<1, EIGEN_AVX_MAX_NUM_ROW, true>(&C_arr[i * LDC + j], LDC, zmm, N - j);
625  urolls::template storeC<1, EIGEN_AVX_MAX_NUM_ROW, true>(&C_arr[i * LDC + j], LDC, zmm, N - j);
626  }
627  else {
628  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U1, false, true>(zmm, &C_arr[i + j * LDC], LDC, 0, N - j);
629  }
630  }
631  if (M - i >= 4) { // Note: this block assumes EIGEN_AVX_MAX_NUM_ROW = 8. Should be removed otherwise
632  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
633  Scalar *B_t = &B_arr[0 * LDB + j];
634  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
635  urolls::template setzero<1, 4>(zmm);
636  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
637  urolls::template microKernel<isARowMajor, 1, 4, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
638  EIGEN_AVX_MAX_A_BCAST, true>(B_t, A_t, LDB, LDA, zmm, N - j);
639  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
640  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
641  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
642  }
643  EIGEN_IF_CONSTEXPR(handleKRem) {
644  for (int64_t k = K_; k < K; k++) {
645  urolls::template microKernel<isARowMajor, 1, 4, 1, EIGEN_AVX_MAX_B_LOAD, EIGEN_AVX_MAX_A_BCAST, true>(
646  B_t, A_t, LDB, LDA, zmm, N - j);
647  B_t += LDB;
648  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
649  else A_t += LDA;
650  }
651  }
652  EIGEN_IF_CONSTEXPR(isCRowMajor) {
653  urolls::template updateC<1, 4, true>(&C_arr[i * LDC + j], LDC, zmm, N - j);
654  urolls::template storeC<1, 4, true>(&C_arr[i * LDC + j], LDC, zmm, N - j);
655  }
656  else {
657  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U1, true, true>(zmm, &C_arr[i + j * LDC], LDC, 4, N - j);
658  }
659  i += 4;
660  }
661  if (M - i >= 2) {
662  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
663  Scalar *B_t = &B_arr[0 * LDB + j];
664  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
665  urolls::template setzero<1, 2>(zmm);
666  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
667  urolls::template microKernel<isARowMajor, 1, 2, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD,
668  EIGEN_AVX_MAX_A_BCAST, true>(B_t, A_t, LDB, LDA, zmm, N - j);
669  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
670  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
671  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
672  }
673  EIGEN_IF_CONSTEXPR(handleKRem) {
674  for (int64_t k = K_; k < K; k++) {
675  urolls::template microKernel<isARowMajor, 1, 2, 1, EIGEN_AVX_MAX_B_LOAD, EIGEN_AVX_MAX_A_BCAST, true>(
676  B_t, A_t, LDB, LDA, zmm, N - j);
677  B_t += LDB;
678  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
679  else A_t += LDA;
680  }
681  }
682  EIGEN_IF_CONSTEXPR(isCRowMajor) {
683  urolls::template updateC<1, 2, true>(&C_arr[i * LDC + j], LDC, zmm, N - j);
684  urolls::template storeC<1, 2, true>(&C_arr[i * LDC + j], LDC, zmm, N - j);
685  }
686  else {
687  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U1, true, true>(zmm, &C_arr[i + j * LDC], LDC, 2, N - j);
688  }
689  i += 2;
690  }
691  if (M - i > 0) {
692  Scalar *A_t = &A_arr[idA<isARowMajor>(i, 0, LDA)];
693  Scalar *B_t = &B_arr[0 * LDB + j];
694  PacketBlock<vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS> zmm;
695  urolls::template setzero<1, 1>(zmm);
696  for (int64_t k = 0; k < K_; k += EIGEN_AVX_MAX_K_UNROL) {
697  urolls::template microKernel<isARowMajor, 1, 1, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_B_LOAD, 1, true>(
698  B_t, A_t, LDB, LDA, zmm, N - j);
699  B_t += EIGEN_AVX_MAX_K_UNROL * LDB;
700  EIGEN_IF_CONSTEXPR(isARowMajor) A_t += EIGEN_AVX_MAX_K_UNROL;
701  else A_t += EIGEN_AVX_MAX_K_UNROL * LDA;
702  }
703  EIGEN_IF_CONSTEXPR(handleKRem) {
704  for (int64_t k = K_; k < K; k++) {
705  urolls::template microKernel<isARowMajor, 1, 1, 1, EIGEN_AVX_MAX_B_LOAD, 1, true>(B_t, A_t, LDB, LDA, zmm,
706  N - j);
707  B_t += LDB;
708  EIGEN_IF_CONSTEXPR(isARowMajor) A_t++;
709  else A_t += LDA;
710  }
711  }
712  EIGEN_IF_CONSTEXPR(isCRowMajor) {
713  urolls::template updateC<1, 1, true>(&C_arr[i * LDC + j], LDC, zmm, N - j);
714  urolls::template storeC<1, 1, true>(&C_arr[i * LDC + j], LDC, zmm, N - j);
715  }
716  else {
717  transStoreC<Scalar, vec, EIGEN_AVX_MAX_NUM_ROW, U1, true, true>(zmm, &C_arr[i + j * LDC], LDC, 1, N - j);
718  }
719  }
720  }
721 }
#define EIGEN_AVX_MAX_K_UNROL
Definition: TrsmKernel.h:49
#define EIGEN_AVX_MAX_NUM_ROW
Definition: TrsmKernel.h:48
#define EIGEN_AVX_B_LOAD_SETS
Definition: TrsmKernel.h:50
#define EIGEN_AVX_MAX_A_BCAST
Definition: TrsmKernel.h:51
Packet16f vecFullFloat
Definition: TrsmKernel.h:52

References EIGEN_AVX_B_LOAD_SETS, EIGEN_AVX_MAX_A_BCAST, EIGEN_AVX_MAX_K_UNROL, EIGEN_AVX_MAX_NUM_ROW, EIGEN_IF_CONSTEXPR, i, j, k, PlanarWave::K, oomph::OcTreeNames::LDB, N, compute_granudrum_aor::type, and Eigen::value.

◆ gemmMMA()

template<typename Scalar , typename Packet , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols>
void Eigen::internal::gemmMMA ( const DataMapper &  res,
const Scalar blockA,
const Scalar blockB,
Index  rows,
Index  depth,
Index  cols,
Scalar  alpha,
Index  strideA,
Index  strideB,
Index  offsetA,
Index  offsetB 
)
485  {
486  const Index remaining_rows = rows % accCols;
487 
488  if (strideA == -1) strideA = depth;
489  if (strideB == -1) strideB = depth;
490 
491  const Packet pAlpha = pset1<Packet>(alpha);
492  const Packet pMask = bmask<Packet>(remaining_rows);
493 
494  typedef typename std::conditional_t<(sizeof(Scalar) == sizeof(float)), RhsPacket, __vector_pair> RhsPacket2;
495 
496  Index col = 0;
497 #ifdef GEMM_MULTIPLE_COLS
498  MICRO_MMA_COLS(4);
499  MICRO_MMA_COLS(2);
500 #endif
501  MICRO_MMA_COLS(1);
502 
503  if (col != cols) {
504  gemm_extra_cols<Scalar, Packet, DataMapper, accCols>(res, blockA, blockB, depth, strideA, offsetA, strideB, offsetB,
505  col, rows, cols, remaining_rows, pAlpha, pMask);
506  }
507 }
#define MICRO_MMA_COLS(n)
Definition: MatrixProductMMA.h:476

References alpha, col(), cols, MICRO_MMA_COLS, res, and rows.

◆ gemmMMA_cols()

template<typename Scalar , typename Packet , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, const Index accItr>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemmMMA_cols ( const DataMapper &  res,
const Scalar blockA,
const Scalar blockB,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  offsetB,
Index  col,
Index  rows,
Index  remaining_rows,
const Packet pAlpha,
const Packet pMask 
)
393  {
394  const DataMapper res30 = res.getSubMapper(0, col);
395  const DataMapper res31 = (accItr > 1) ? res30.getSubMapper(0, accRows * 1) : res30;
396  const DataMapper res32 = (accItr > 2) ? res30.getSubMapper(0, accRows * 2) : res30;
397  const DataMapper res33 = (accItr > 2) ? res30.getSubMapper(0, accRows * 3) : res30;
398 
399  const Scalar* rhs_base = blockB + col * strideB + accRows * offsetB;
400  const Scalar* lhs_base = blockA + accCols * offsetA;
401  Index row = 0;
402 
403 #define MAX_MMA_UNROLL 7
404 
405 #if MAX_MMA_UNROLL < 2
406  if (1) {
407 #elif MAX_MMA_UNROLL < 4
408  if (accItr <= 2) {
409 #else
410  if (accItr == 1) {
411 #endif
413  } else if (accItr == 2) {
414  MICRO_MMA_ROWS(4);
415  } else {
416  MICRO_MMA_ROWS(2);
417  }
418  switch ((rows - row) / accCols) {
419 #if MAX_MMA_UNROLL > 7
420  case 7:
421  if (accItr == 1) {
423  }
424  break;
425 #endif
426 #if MAX_MMA_UNROLL > 6
427  case 6:
428  if (accItr == 1) {
430  }
431  break;
432 #endif
433 #if MAX_MMA_UNROLL > 5
434  case 5:
435  if (accItr == 1) {
437  }
438  break;
439 #endif
440 #if MAX_MMA_UNROLL > 4
441  case 4:
442  if (accItr == 1) {
444  }
445  break;
446 #endif
447 #if MAX_MMA_UNROLL > 3
448  case 3:
449  if (accItr <= 2) {
451  }
452  break;
453 #endif
454 #if MAX_MMA_UNROLL > 2
455  case 2:
456  if (accItr <= 2) {
458  }
459  break;
460 #endif
461 #if MAX_MMA_UNROLL > 1
462  case 1:
464  break;
465 #endif
466  default:
467  break;
468  }
469 #undef MAX_MMA_UNROLL
470 
471  if (remaining_rows > 0) {
473  }
474 }
#define MICRO_MMA_ROWS(n)
Definition: MatrixProductMMA.h:384
#define MAX_MMA_UNROLL
#define MICRO_MMA_UNROLL_ITER2(N, M)
Definition: MatrixProductMMA.h:378
#define MICRO_MMA_UNROLL_ITER(func, val)
Definition: MatrixProductMMA.h:211
#define MICRO_MMA_EXTRA_ROWS1(val, right)
Definition: MatrixProductMMA.h:330

References col(), MAX_MMA_UNROLL, MICRO_MMA_EXTRA_ROWS1, MICRO_MMA_ROWS, MICRO_MMA_UNROLL_ITER, MICRO_MMA_UNROLL_ITER2, MICRO_UNROLL_ITER, res, row(), and rows.

◆ gemmMMA_complex_cols()

template<typename Scalar , typename Packet , typename Packetc , typename RhsPacket , typename DataMapper , const Index accRows, const Index accCols, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal, const Index accItr>
EIGEN_ALWAYS_INLINE void Eigen::internal::gemmMMA_complex_cols ( const DataMapper &  res,
const Scalar blockA,
const Scalar blockB,
Index  depth,
Index  strideA,
Index  offsetA,
Index  strideB,
Index  offsetB,
Index  col,
Index  rows,
Index  remaining_rows,
const Packet pAlphaReal,
const Packet pAlphaImag,
const Packet pMask 
)
791  {
792  const DataMapper res30 = res.getSubMapper(0, col);
793  const DataMapper res31 = (accItr > 1) ? res30.getSubMapper(0, accRows * 1) : res30;
794  const DataMapper res32 = (accItr > 2) ? res30.getSubMapper(0, accRows * 2) : res30;
795  const DataMapper res33 = (accItr > 2) ? res30.getSubMapper(0, accRows * 3) : res30;
796 
797  const Scalar* rhs_base = blockB + advanceCols * col * strideB + accRows * offsetB;
798  const Scalar* lhs_base = blockA + accCols * offsetA;
799  Index row = 0;
800 
801 #define MAX_COMPLEX_MMA_UNROLL 4
802 
803 #if MAX_COMPLEX_MMA_UNROLL < 2
804  if (1) {
805 #elif MAX_COMPLEX_MMA_UNROLL < 4
806  if (accItr <= 2) {
807 #else
808  if (accItr == 1) {
809 #endif
811  } else if (accItr == 2) {
813  } else {
815  }
816  switch ((rows - row) / accCols) {
817 #if MAX_COMPLEX_MMA_UNROLL > 3
818  case 3:
819  if (accItr == 1) {
821  }
822  break;
823 #endif
824 #if MAX_COMPLEX_MMA_UNROLL > 2
825  case 2:
826  if (accItr == 1) {
828  }
829  break;
830 #endif
831 #if MAX_COMPLEX_MMA_UNROLL > 1
832  case 1:
833  if (accItr <= 2) {
835  }
836  break;
837 #endif
838  default:
839  break;
840  }
841 #undef MAX_COMPLEX_MMA_UNROLL
842 
843  if (remaining_rows > 0) {
845  }
846 }
#define advanceCols
Definition: MatrixProductMMA.h:510
#define MICRO_COMPLEX_MMA_EXTRA_ROWS1(val, right)
Definition: MatrixProductMMA.h:695
#define MICRO_COMPLEX_MMA_ROWS(n)
Definition: MatrixProductMMA.h:780
#define MAX_COMPLEX_MMA_UNROLL
#define MICRO_COMPLEX_MMA_UNROLL_ITER2(N, M)
Definition: MatrixProductMMA.h:773

References advanceCols, col(), MAX_COMPLEX_MMA_UNROLL, MICRO_COMPLEX_MMA_EXTRA_ROWS1, MICRO_COMPLEX_MMA_ROWS, MICRO_COMPLEX_MMA_UNROLL_ITER2, MICRO_COMPLEX_UNROLL_ITER, MICRO_MMA_UNROLL_ITER, res, row(), and rows.

◆ gemmMMAbfloat16()

template<typename DataMapper >
void Eigen::internal::gemmMMAbfloat16 ( const DataMapper &  res,
const bfloat16 indexA,
const bfloat16 indexB,
Index  rows,
Index  depth,
Index  cols,
bfloat16  alpha,
Index  strideA,
Index  strideB,
Index  offsetA,
Index  offsetB 
)
324  {
326  const Packet4f pAlpha = pset1<Packet4f>(falpha);
328 
329  convertArrayBF16toF32<DataMapper>(result, cols, rows, res);
330 
331  if (strideA == -1) strideA = depth;
332  if (strideB == -1) strideB = depth;
333  // Packing is done in blocks.
334  // There's 4 possible sizes of blocks
335  // Blocks of 8 columns with 16 elements (8x16)
336  // Blocks of 8 columns with 8 elements (8x8). This happens when there's 16 > rows >= 8
337  // Blocks of 8 columns with 4 elements (8x4). This happens when there's 8 > rows >= 4
338  // Blocks of 8 columns with < 4 elements. This happens when there's less than 4 remaining rows
339 
340  // Loop for LHS standard block (8x16)
341  Index bigSuffix = (2 * 8) * (strideA - offsetA);
342  indexB += 4 * offsetB;
343  strideB *= 4;
344  offsetB *= 3;
345 
346  Index row = 0;
347  while (row + 16 <= rows) {
348  calcColLoops<16>(indexA, row, depth, cols, rows, pAlpha, indexB, strideB, offsetA, offsetB, bigSuffix, result);
349  }
350  // LHS (8x8) block
351  calcColLoops<8>(indexA, row, depth, cols, rows, pAlpha, indexB, strideB, offsetA, offsetB, bigSuffix, result);
352  // LHS (8x4) block
353  calcColLoops<4>(indexA, row, depth, cols, rows, pAlpha, indexB, strideB, offsetA, offsetB, bigSuffix, result);
354  // extra rows
355  if (rows & 3) {
356  // This index is the beginning of remaining block.
357  colLoops<4, true>(depth, cols, rows, pAlpha, indexA, indexB, strideB, offsetB, result + row);
358  }
359 
360  // Convert back to bfloat16
361  convertArrayF32toBF16<DataMapper>(result, cols, rows, res);
362 }

References alpha, Eigen::bfloat16_impl::bfloat16_to_float(), cols, ei_declare_aligned_stack_constructed_variable, pset1< Packet4f >(), res, row(), and rows.

◆ gemvMMA_bfloat16_col()

template<typename LhsMapper , typename RhsMapper >
void Eigen::internal::gemvMMA_bfloat16_col ( Index  rows,
Index  cols,
const LhsMapper &  alhs,
const RhsMapper &  rhs,
bfloat16 res,
Index  resIncr,
bfloat16  alpha 
)
530  {
531  EIGEN_UNUSED_VARIABLE(resIncr);
532  eigen_internal_assert(resIncr == 1);
533 
534  // The following copy tells the compiler that lhs's attributes are not modified outside this function
535  // This helps GCC to generate proper code.
536  LhsMapper lhs(alhs);
537  RhsMapper rhs2(rhs);
538 
539  const Index lhsStride = lhs.stride();
540 
541  // TODO: improve the following heuristic:
542  const Index block_cols = cols < 128 ? cols : (lhsStride * sizeof(bfloat16) < 16000 ? 16 : 8);
544  Packet4f pAlpha = pset1<Packet4f>(falpha);
545 
547 
549 
550  for (Index j2 = 0; j2 < cols; j2 += block_cols) {
551  Index jend = numext::mini(j2 + block_cols, cols);
552 
553  using LhsSubMapper = typename LhsMapper::SubMapper;
554 
555  LhsSubMapper lhs2 = lhs.getSubMapper(0, j2);
556  UseMMAStride<RhsMapper, LhsSubMapper>::run(j2, jend, rows, lhs2, rhs2, pAlpha, result);
557  }
558 
560 }
EIGEN_ALWAYS_INLINE void convertArrayPointerF32toBF16(float *result, Index rows, bfloat16 *dst, Index resInc=1)
Definition: MatrixProductMMAbfloat16.h:282

References alpha, Eigen::bfloat16_impl::bfloat16_to_float(), cols, convertArrayPointerBF16toF32(), convertArrayPointerF32toBF16(), ei_declare_aligned_stack_constructed_variable, eigen_internal_assert, EIGEN_UNUSED_VARIABLE, Eigen::numext::mini(), pset1< Packet4f >(), res, rows, and Eigen::internal::UseMMAStride< RhsMapper, LhsMapper, typename >::run().

◆ gemvMMA_bfloat16_row()

template<typename LhsMapper , typename RhsMapper >
EIGEN_STRONG_INLINE void Eigen::internal::gemvMMA_bfloat16_row ( Index  rows,
Index  cols,
const LhsMapper &  alhs,
const RhsMapper &  rhs,
bfloat16 res,
Index  resIncr,
bfloat16  alpha 
)
709  {
710  typedef typename RhsMapper::LinearMapper LinearMapper;
711 
712  // The following copy tells the compiler that lhs's attributes are not modified outside this function
713  // This helps GCC to generate proper code.
714  LhsMapper lhs(alhs);
715  LinearMapper rhs2 = rhs.getLinearMapper(0, 0);
716 
717  eigen_internal_assert(rhs.stride() == 1);
718 
720  const Packet4f pAlpha = pset1<Packet4f>(falpha);
721 
723  if (resIncr == 1) {
725  } else {
726  convertArrayPointerBF16toF32<true>(result, 1, rows, res, resIncr);
727  }
728  calcVecLoops<LhsMapper, LinearMapper>(cols, rows, lhs, rhs2, pAlpha, result);
729  if (resIncr == 1) {
731  } else {
732  convertArrayPointerF32toBF16<true>(result, rows, res, resIncr);
733  }
734 }

References alpha, Eigen::bfloat16_impl::bfloat16_to_float(), cols, convertArrayPointerBF16toF32(), convertArrayPointerF32toBF16(), ei_declare_aligned_stack_constructed_variable, eigen_internal_assert, pset1< Packet4f >(), res, and rows.

◆ general_det3_helper()

template<typename Derived >
EIGEN_DEVICE_FUNC const Derived::Scalar Eigen::internal::general_det3_helper ( const MatrixBase< Derived > &  matrix,
int  i1,
int  i2,
int  i3,
int  j1,
int  j2,
int  j3 
)
inline
169  {
170  return matrix.coeff(i1, j1) *
171  (matrix.coeff(i2, j2) * matrix.coeff(i3, j3) - matrix.coeff(i2, j3) * matrix.coeff(i3, j2));
172 }

References matrix().

Referenced by cofactor_4x4().

◆ generic_atan()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::generic_atan ( const Packet x)
Returns
atan(x)
1121  {
1122  typedef typename unpacket_traits<Packet>::type Scalar;
1123 
1124  constexpr Scalar kPiOverTwo = static_cast<Scalar>(EIGEN_PI / 2);
1125 
1126  const Packet cst_signmask = pset1<Packet>(-Scalar(0));
1127  const Packet cst_one = pset1<Packet>(Scalar(1));
1128  const Packet cst_pi_over_two = pset1<Packet>(kPiOverTwo);
1129 
1130  // "Large": For |x| > 1, use atan(1/x) = sign(x)*pi/2 - atan(x).
1131  // "Small": For |x| <= 1, approximate atan(x) directly by a polynomial
1132  // calculated using Rminimax.
1133 
1134  const Packet abs_x = pabs(x_in);
1135  const Packet x_signmask = pand(x_in, cst_signmask);
1136  const Packet large_mask = pcmp_lt(cst_one, abs_x);
1137  const Packet x = pselect(large_mask, preciprocal(abs_x), abs_x);
1139  // Apply transformations according to the range reduction masks.
1140  Packet result = pselect(large_mask, psub(cst_pi_over_two, p), p);
1141  // Return correct sign
1142  return pxor(result, x_signmask);
1143 }
#define EIGEN_PI
Definition: MathFunctions.h:16
EIGEN_STRONG_INLINE Packet4f pabs(const Packet4f &a)
Definition: AltiVec/PacketMath.h:1936
EIGEN_STRONG_INLINE Packet8h pxor(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2315
EIGEN_STRONG_INLINE Packet4f pselect(const Packet4f &mask, const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1474

References EIGEN_PI, p, pabs(), pand(), pcmp_lt(), preciprocal(), pselect(), psub(), pxor(), Eigen::internal::patan_reduced< Scalar >::run(), and plotDoE::x.

◆ generic_ceil()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::generic_ceil ( const Packet a)
2431  {
2432  using Scalar = typename unpacket_traits<Packet>::type;
2433  const Packet cst_1 = pset1<Packet>(Scalar(1));
2434  const Packet sign_mask = pset1<Packet>(static_cast<Scalar>(-0.0));
2435  Packet rint_a = generic_rint(a);
2436  // if rint(a) < a, then rint(a) == floor(a)
2437  Packet mask = pcmp_lt(rint_a, a);
2438  Packet offset = pand(cst_1, mask);
2439  Packet result = padd(rint_a, offset);
2440  // Signed zero must remain signed (e.g. ceil(-0.02) == -0).
2441  result = por(result, pand(sign_mask, a));
2442  return result;
2443 }
EIGEN_STRONG_INLINE Packet8h por(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2309
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_rint(const Packet &a)
Definition: GenericPacketMathFunctions.h:2399

References a, generic_rint(), padd(), pand(), pcmp_lt(), and por().

Referenced by Eigen::internal::nearest_integer_packetop_impl< Packet, false, false >::run_ceil().

◆ generic_exp2()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::generic_exp2 ( const Packet x)
Returns
exp2(x)
2384  {
2385  typedef typename unpacket_traits<Packet>::type Scalar;
2386  constexpr int max_exponent = std::numeric_limits<Scalar>::max_exponent;
2387  constexpr int digits = std::numeric_limits<Scalar>::digits;
2388  constexpr Scalar max_cap = Scalar(max_exponent + 1);
2389  constexpr Scalar min_cap = -Scalar(max_exponent + digits - 1);
2390  Packet x = pmax(pmin(_x, pset1<Packet>(max_cap)), pset1<Packet>(min_cap));
2391  Packet p_hi, p_lo;
2392  twoprod(pset1<Packet>(Scalar(EIGEN_LN2)), x, p_hi, p_lo);
2393  Packet exp2_hi = pexp(p_hi);
2394  Packet exp2_lo = padd(pset1<Packet>(Scalar(1)), p_lo);
2395  return pmul(exp2_hi, exp2_lo);
2396 }
#define EIGEN_LN2
Definition: MathFunctions.h:18
EIGEN_DEVICE_FUNC Packet pmax(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:663
EIGEN_DEVICE_FUNC Packet pmin(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:649

References EIGEN_LN2, padd(), pexp(), pmax(), pmin(), pmul(), twoprod(), and plotDoE::x.

Referenced by generic_pow_impl(), and pexp2< Packet8bf >().

◆ generic_expm1()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::generic_expm1 ( const Packet x)
Returns
exp(x)-1 computed using W. Kahan's formula. See: http://www.plunk.org/~hatch/rightway.php
Returns
exp(x)-1
485  {
486  typedef typename unpacket_traits<Packet>::type ScalarType;
487  const Packet one = pset1<Packet>(ScalarType(1));
488  const Packet neg_one = pset1<Packet>(ScalarType(-1));
489  Packet u = pexp(x);
490  Packet one_mask = pcmp_eq(u, one);
491  Packet u_minus_one = psub(u, one);
492  Packet neg_one_mask = pcmp_eq(u_minus_one, neg_one);
493  Packet logu = plog(u);
494  // The following comparison is to catch the case where
495  // exp(x) = +inf. It is written in this way to avoid having
496  // to form the constant +inf, which depends on the packet
497  // type.
498  Packet pos_inf_mask = pcmp_eq(logu, u);
499  Packet expm1 = pmul(u_minus_one, pdiv(x, logu));
500  expm1 = pselect(pos_inf_mask, u, expm1);
501  return pselect(one_mask, x, pselect(neg_one_mask, neg_one, expm1));
502 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 expm1(const bfloat16 &a)
Definition: BFloat16.h:617
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog(const Packet &a)
Definition: GenericPacketMath.h:1103
EIGEN_STRONG_INLINE Packet2cf pcmp_eq(const Packet2cf &a, const Packet2cf &b)
Definition: AltiVec/Complex.h:353

References Eigen::bfloat16_impl::expm1(), pcmp_eq(), pdiv(), pexp(), plog(), pmul(), pselect(), psub(), and plotDoE::x.

◆ generic_floor()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::generic_floor ( const Packet a)
2419  {
2420  using Scalar = typename unpacket_traits<Packet>::type;
2421  const Packet cst_1 = pset1<Packet>(Scalar(1));
2422  Packet rint_a = generic_rint(a);
2423  // if a < rint(a), then rint(a) == ceil(a)
2424  Packet mask = pcmp_lt(a, rint_a);
2425  Packet offset = pand(cst_1, mask);
2426  Packet result = psub(rint_a, offset);
2427  return result;
2428 }

References a, generic_rint(), pand(), pcmp_lt(), and psub().

Referenced by generic_round(), generic_trunc(), and Eigen::internal::nearest_integer_packetop_impl< Packet, false, false >::run_floor().

◆ generic_log1p()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::generic_log1p ( const Packet x)
Returns
log(1 + x) computed using W. Kahan's formula. See: http://www.plunk.org/~hatch/rightway.php
Returns
log(1 + x)
470  {
471  typedef typename unpacket_traits<Packet>::type ScalarType;
472  const Packet one = pset1<Packet>(ScalarType(1));
473  Packet xp1 = padd(x, one);
474  Packet small_mask = pcmp_eq(xp1, one);
475  Packet log1 = plog(xp1);
476  Packet inf_mask = pcmp_eq(xp1, log1);
477  Packet log_large = pmul(x, pdiv(log1, psub(xp1, one)));
478  return pselect(por(small_mask, inf_mask), x, log_large);
479 }

References padd(), pcmp_eq(), pdiv(), plog(), pmul(), por(), pselect(), psub(), and plotDoE::x.

◆ generic_ndtri()

template<typename T , typename ScalarType >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T Eigen::internal::generic_ndtri ( const T a)
711  {
712  const T maxnum = pset1<T>(NumTraits<ScalarType>::infinity());
713  const T neg_maxnum = pset1<T>(-NumTraits<ScalarType>::infinity());
714 
715  const T zero = pset1<T>(ScalarType(0));
716  const T one = pset1<T>(ScalarType(1));
717  // exp(-2)
718  const T exp_neg_two = pset1<T>(ScalarType(0.13533528323661269189));
719  T b, ndtri, should_flipsign;
720 
721  should_flipsign = pcmp_le(a, psub(one, exp_neg_two));
722  b = pselect(should_flipsign, a, psub(one, a));
723 
724  ndtri = pselect(pcmp_lt(exp_neg_two, b), generic_ndtri_gt_exp_neg_two<T, ScalarType>(b),
725  generic_ndtri_lt_exp_neg_two<T, ScalarType>(b, should_flipsign));
726 
727  return pselect(pcmp_eq(a, zero), neg_maxnum, pselect(pcmp_eq(one, a), maxnum, ndtri));
728 }
EIGEN_STRONG_INLINE Packet4f pcmp_le(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1314
EIGEN_DEVICE_FUNC const Scalar & b
Definition: SpecialFunctionsImpl.h:2066

References a, Eigen::numext::b, pcmp_eq(), pcmp_le(), pcmp_lt(), pselect(), psub(), and zero().

Referenced by pndtri().

◆ generic_ndtri_gt_exp_neg_two()

template<typename T , typename ScalarType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T Eigen::internal::generic_ndtri_gt_exp_neg_two ( const T b)
637  {
638  const ScalarType p0[] = {ScalarType(-5.99633501014107895267e1), ScalarType(9.80010754185999661536e1),
639  ScalarType(-5.66762857469070293439e1), ScalarType(1.39312609387279679503e1),
640  ScalarType(-1.23916583867381258016e0)};
641  const ScalarType q0[] = {ScalarType(1.0),
642  ScalarType(1.95448858338141759834e0),
643  ScalarType(4.67627912898881538453e0),
644  ScalarType(8.63602421390890590575e1),
645  ScalarType(-2.25462687854119370527e2),
646  ScalarType(2.00260212380060660359e2),
647  ScalarType(-8.20372256168333339912e1),
648  ScalarType(1.59056225126211695515e1),
649  ScalarType(-1.18331621121330003142e0)};
650  const T sqrt2pi = pset1<T>(ScalarType(2.50662827463100050242e0));
651  const T half = pset1<T>(ScalarType(0.5));
652  T c, c2, ndtri_gt_exp_neg_two;
653 
654  c = psub(b, half);
655  c2 = pmul(c, c);
656  ndtri_gt_exp_neg_two =
658  return pmul(ndtri_gt_exp_neg_two, sqrt2pi);
659 }
Vector3f p0
Definition: MatrixBase_all.cpp:2

References Eigen::numext::b, calibrate::c, p0, pdiv(), pmadd(), pmul(), and psub().

◆ generic_ndtri_lt_exp_neg_two()

template<typename T , typename ScalarType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T Eigen::internal::generic_ndtri_lt_exp_neg_two ( const T b,
const T should_flipsign 
)
662  {
663  /* Approximation for interval z = sqrt(-2 log a ) between 2 and 8
664  * i.e., a between exp(-2) = .135 and exp(-32) = 1.27e-14.
665  */
666  const ScalarType p1[] = {ScalarType(4.05544892305962419923e0), ScalarType(3.15251094599893866154e1),
667  ScalarType(5.71628192246421288162e1), ScalarType(4.40805073893200834700e1),
668  ScalarType(1.46849561928858024014e1), ScalarType(2.18663306850790267539e0),
669  ScalarType(-1.40256079171354495875e-1), ScalarType(-3.50424626827848203418e-2),
670  ScalarType(-8.57456785154685413611e-4)};
671  const ScalarType q1[] = {ScalarType(1.0),
672  ScalarType(1.57799883256466749731e1),
673  ScalarType(4.53907635128879210584e1),
674  ScalarType(4.13172038254672030440e1),
675  ScalarType(1.50425385692907503408e1),
676  ScalarType(2.50464946208309415979e0),
677  ScalarType(-1.42182922854787788574e-1),
678  ScalarType(-3.80806407691578277194e-2),
679  ScalarType(-9.33259480895457427372e-4)};
680  /* Approximation for interval z = sqrt(-2 log a ) between 8 and 64
681  * i.e., a between exp(-32) = 1.27e-14 and exp(-2048) = 3.67e-890.
682  */
683  const ScalarType p2[] = {ScalarType(3.23774891776946035970e0), ScalarType(6.91522889068984211695e0),
684  ScalarType(3.93881025292474443415e0), ScalarType(1.33303460815807542389e0),
685  ScalarType(2.01485389549179081538e-1), ScalarType(1.23716634817820021358e-2),
686  ScalarType(3.01581553508235416007e-4), ScalarType(2.65806974686737550832e-6),
687  ScalarType(6.23974539184983293730e-9)};
688  const ScalarType q2[] = {ScalarType(1.0),
689  ScalarType(6.02427039364742014255e0),
690  ScalarType(3.67983563856160859403e0),
691  ScalarType(1.37702099489081330271e0),
692  ScalarType(2.16236993594496635890e-1),
693  ScalarType(1.34204006088543189037e-2),
694  ScalarType(3.28014464682127739104e-4),
695  ScalarType(2.89247864745380683936e-6),
696  ScalarType(6.79019408009981274425e-9)};
697  const T eight = pset1<T>(ScalarType(8.0));
698  const T neg_two = pset1<T>(ScalarType(-2));
699  T x, x0, x1, z;
700 
701  x = psqrt(pmul(neg_two, plog(b)));
702  x0 = psub(x, pdiv(plog(x), x));
703  z = preciprocal(x);
704  x1 =
707  return flipsign(should_flipsign, psub(x0, x1));
708 }
Vector3f p1
Definition: MatrixBase_all.cpp:2
EIGEN_STRONG_INLINE Packet4f psqrt(const Packet4f &a)
Definition: LSX/PacketMath.h:2176
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T flipsign(const T &should_flipsign, const T &x)
Definition: SpecialFunctionsImpl.h:615
Vector< double > x1(const Vector< double > &coord)
Cartesian coordinates centered at the point (0.5,1)
Definition: poisson/poisson_with_singularity/two_d_poisson.cc:86

References Eigen::numext::b, flipsign(), p1, pcmp_lt(), pdiv(), plog(), pmul(), preciprocal(), pselect(), psqrt(), psub(), Eigen::numext::x, Global::x0, and Global_parameters::x1().

◆ generic_pow()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::generic_pow ( const Packet x,
const Packet y 
)
2043  {
2044  typedef typename unpacket_traits<Packet>::type Scalar;
2045 
2046  const Packet cst_inf = pset1<Packet>(NumTraits<Scalar>::infinity());
2047  const Packet cst_zero = pset1<Packet>(Scalar(0));
2048  const Packet cst_one = pset1<Packet>(Scalar(1));
2049  const Packet cst_nan = pset1<Packet>(NumTraits<Scalar>::quiet_NaN());
2050 
2051  const Packet x_abs = pabs(x);
2052  Packet pow = generic_pow_impl(x_abs, y);
2053 
2054  // In the following we enforce the special case handling prescribed in
2055  // https://en.cppreference.com/w/cpp/numeric/math/pow.
2056 
2057  // Predicates for sign and magnitude of x.
2058  const Packet x_is_negative = pcmp_lt(x, cst_zero);
2059  const Packet x_is_zero = pcmp_eq(x, cst_zero);
2060  const Packet x_is_one = pcmp_eq(x, cst_one);
2061  const Packet x_has_signbit = psignbit(x);
2062  const Packet x_abs_gt_one = pcmp_lt(cst_one, x_abs);
2063  const Packet x_abs_is_inf = pcmp_eq(x_abs, cst_inf);
2064 
2065  // Predicates for sign and magnitude of y.
2066  const Packet y_abs = pabs(y);
2067  const Packet y_abs_is_inf = pcmp_eq(y_abs, cst_inf);
2068  const Packet y_is_negative = pcmp_lt(y, cst_zero);
2069  const Packet y_is_zero = pcmp_eq(y, cst_zero);
2070  const Packet y_is_one = pcmp_eq(y, cst_one);
2071  // Predicates for whether y is integer and odd/even.
2072  const Packet y_is_int = pandnot(pcmp_eq(pfloor(y), y), y_abs_is_inf);
2073  const Packet y_div_2 = pmul(y, pset1<Packet>(Scalar(0.5)));
2074  const Packet y_is_even = pcmp_eq(pround(y_div_2), y_div_2);
2075  const Packet y_is_odd_int = pandnot(y_is_int, y_is_even);
2076  // Smallest exponent for which (1 + epsilon) overflows to infinity.
2077  EIGEN_CONSTEXPR Scalar huge_exponent =
2078  (NumTraits<Scalar>::max_exponent() * Scalar(EIGEN_LN2)) / NumTraits<Scalar>::epsilon();
2079  const Packet y_abs_is_huge = pcmp_le(pset1<Packet>(huge_exponent), y_abs);
2080 
2081  // * pow(base, exp) returns NaN if base is finite and negative
2082  // and exp is finite and non-integer.
2083  pow = pselect(pandnot(x_is_negative, y_is_int), cst_nan, pow);
2084 
2085  // * pow(±0, exp), where exp is negative, finite, and is an even integer or
2086  // a non-integer, returns +∞
2087  // * pow(±0, exp), where exp is positive non-integer or a positive even
2088  // integer, returns +0
2089  // * pow(+0, exp), where exp is a negative odd integer, returns +∞
2090  // * pow(-0, exp), where exp is a negative odd integer, returns -∞
2091  // * pow(+0, exp), where exp is a positive odd integer, returns +0
2092  // * pow(-0, exp), where exp is a positive odd integer, returns -0
2093  // Sign is flipped by the rule below.
2094  pow = pselect(x_is_zero, pselect(y_is_negative, cst_inf, cst_zero), pow);
2095 
2096  // pow(base, exp) returns -pow(abs(base), exp) if base has the sign bit set,
2097  // and exp is an odd integer exponent.
2098  pow = pselect(pand(x_has_signbit, y_is_odd_int), pnegate(pow), pow);
2099 
2100  // * pow(base, -∞) returns +∞ for any |base|<1
2101  // * pow(base, -∞) returns +0 for any |base|>1
2102  // * pow(base, +∞) returns +0 for any |base|<1
2103  // * pow(base, +∞) returns +∞ for any |base|>1
2104  // * pow(±0, -∞) returns +∞
2105  // * pow(-1, +-∞) = 1
2106  Packet inf_y_val = pselect(por(pand(y_is_negative, x_is_zero), pxor(y_is_negative, x_abs_gt_one)), cst_inf, cst_zero);
2107  inf_y_val = pselect(pcmp_eq(x, pset1<Packet>(Scalar(-1.0))), cst_one, inf_y_val);
2108  pow = pselect(y_abs_is_huge, inf_y_val, pow);
2109 
2110  // * pow(+∞, exp) returns +0 for any negative exp
2111  // * pow(+∞, exp) returns +∞ for any positive exp
2112  // * pow(-∞, exp) returns -0 if exp is a negative odd integer.
2113  // * pow(-∞, exp) returns +0 if exp is a negative non-integer or negative
2114  // even integer.
2115  // * pow(-∞, exp) returns -∞ if exp is a positive odd integer.
2116  // * pow(-∞, exp) returns +∞ if exp is a positive non-integer or positive
2117  // even integer.
2118  auto x_pos_inf_value = pselect(y_is_negative, cst_zero, cst_inf);
2119  auto x_neg_inf_value = pselect(y_is_odd_int, pnegate(x_pos_inf_value), x_pos_inf_value);
2120  pow = pselect(x_abs_is_inf, pselect(x_is_negative, x_neg_inf_value, x_pos_inf_value), pow);
2121 
2122  // All cases of NaN inputs return NaN, except the two below.
2123  pow = pselect(por(pisnan(x), pisnan(y)), cst_nan, pow);
2124 
2125  // * pow(base, 1) returns base.
2126  // * pow(base, +/-0) returns 1, regardless of base, even NaN.
2127  // * pow(+1, exp) returns 1, regardless of exponent, even NaN.
2128  pow = pselect(y_is_one, x, pselect(por(x_is_one, y_is_zero), cst_one, pow));
2129 
2130  return pow;
2131 }
#define EIGEN_CONSTEXPR
Definition: Macros.h:758
EIGEN_STRONG_INLINE Packet8f pisnan(const Packet8f &a)
Definition: AVX/PacketMath.h:1034
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_pow_impl(const Packet &x, const Packet &y)
Definition: GenericPacketMathFunctions.h:1987
EIGEN_STRONG_INLINE Packet8h pandnot(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2323
EIGEN_STRONG_INLINE Packet8bf psignbit(const Packet8bf &a)
Definition: AltiVec/PacketMath.h:1966
EIGEN_STRONG_INLINE Packet4f pfloor(const Packet4f &a)
Definition: LSX/PacketMath.h:2537

References EIGEN_CONSTEXPR, EIGEN_LN2, generic_pow_impl(), pabs(), pand(), pandnot(), pcmp_eq(), pcmp_le(), pcmp_lt(), pfloor(), pisnan(), pmul(), pnegate(), por(), Eigen::bfloat16_impl::pow(), pround(), pselect(), psignbit(), pxor(), plotDoE::x, and y.

Referenced by Eigen::internal::scalar_pow_op< Scalar, Exponent >::packetOp(), and Eigen::internal::unary_pow_impl< Packet, ScalarExponent, false, false, ExponentIsSigned >::run().

◆ generic_pow_impl()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::generic_pow_impl ( const Packet x,
const Packet y 
)
1987  {
1988  typedef typename unpacket_traits<Packet>::type Scalar;
1989  // Split x into exponent e_x and mantissa m_x.
1990  Packet e_x;
1991  Packet m_x = pfrexp(x, e_x);
1992 
1993  // Adjust m_x to lie in [1/sqrt(2):sqrt(2)] to minimize absolute error in log2(m_x).
1994  EIGEN_CONSTEXPR Scalar sqrt_half = Scalar(0.70710678118654752440);
1995  const Packet m_x_scale_mask = pcmp_lt(m_x, pset1<Packet>(sqrt_half));
1996  m_x = pselect(m_x_scale_mask, pmul(pset1<Packet>(Scalar(2)), m_x), m_x);
1997  e_x = pselect(m_x_scale_mask, psub(e_x, pset1<Packet>(Scalar(1))), e_x);
1998 
1999  // Compute log2(m_x) with 6 extra bits of accuracy.
2000  Packet rx_hi, rx_lo;
2001  accurate_log2<Scalar>()(m_x, rx_hi, rx_lo);
2002 
2003  // Compute the two terms {y * e_x, y * r_x} in f = y * log2(x) with doubled
2004  // precision using double word arithmetic.
2005  Packet f1_hi, f1_lo, f2_hi, f2_lo;
2006  twoprod(e_x, y, f1_hi, f1_lo);
2007  twoprod(rx_hi, rx_lo, y, f2_hi, f2_lo);
2008  // Sum the two terms in f using double word arithmetic. We know
2009  // that |e_x| > |log2(m_x)|, except for the case where e_x==0.
2010  // This means that we can use fast_twosum(f1,f2).
2011  // In the case e_x == 0, e_x * y = f1 = 0, so we don't lose any
2012  // accuracy by violating the assumption of fast_twosum, because
2013  // it's a no-op.
2014  Packet f_hi, f_lo;
2015  fast_twosum(f1_hi, f1_lo, f2_hi, f2_lo, f_hi, f_lo);
2016 
2017  // Split f into integer and fractional parts.
2018  Packet n_z, r_z;
2019  absolute_split(f_hi, n_z, r_z);
2020  r_z = padd(r_z, f_lo);
2021  Packet n_r;
2022  absolute_split(r_z, n_r, r_z);
2023  n_z = padd(n_z, n_r);
2024 
2025  // We now have an accurate split of f = n_z + r_z and can compute
2026  // x^y = 2**{n_z + r_z) = exp2(r_z) * 2**{n_z}.
2027  // Multiplication by the second factor can be done exactly using pldexp(), since
2028  // it is an integer power of 2.
2029  const Packet e_r = generic_exp2(r_z);
2030 
2031  // Since we know that e_r is in [1/sqrt(2); sqrt(2)], we can use the fast version
2032  // of pldexp to multiply by 2**{n_z} when |n_z| is sufficiently small.
2033  constexpr Scalar kPldExpThresh = std::numeric_limits<Scalar>::max_exponent - 2;
2034  const Packet pldexp_fast_unsafe = pcmp_lt(pset1<Packet>(kPldExpThresh), pabs(n_z));
2035  if (predux_any(pldexp_fast_unsafe)) {
2036  return pldexp(e_r, n_z);
2037  }
2038  return pldexp_fast(e_r, n_z);
2039 }
EIGEN_STRONG_INLINE bool predux_any(const Packet4f &x)
Definition: AltiVec/PacketMath.h:2751
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void absolute_split(const Packet &x, Packet &n, Packet &r)
Definition: GenericPacketMathFunctions.h:1646
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pldexp_fast(const Packet &a, const Packet &exponent)
Definition: GenericPacketMathFunctions.h:277
EIGEN_STRONG_INLINE Packet8h pldexp(const Packet8h &a, const Packet8h &exponent)
Definition: arch/AVX/MathFunctions.h:80
EIGEN_STRONG_INLINE Packet8h pfrexp(const Packet8h &a, Packet8h &exponent)
Definition: arch/AVX/MathFunctions.h:72
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet generic_exp2(const Packet &_x)
Definition: GenericPacketMathFunctions.h:2384

References absolute_split(), EIGEN_CONSTEXPR, fast_twosum(), generic_exp2(), pabs(), padd(), pcmp_lt(), pfrexp(), pldexp(), pldexp_fast(), pmul(), predux_any(), pselect(), psub(), twoprod(), plotDoE::x, and y.

Referenced by Eigen::internal::unary_pow::gen_pow(), and generic_pow().

◆ generic_rint()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::generic_rint ( const Packet a)
2399  {
2400  using Scalar = typename unpacket_traits<Packet>::type;
2401  using IntType = typename numext::get_integer_by_size<sizeof(Scalar)>::signed_type;
2402  // Adds and subtracts signum(a) * 2^kMantissaBits to force rounding.
2403  const IntType kLimit = IntType(1) << (NumTraits<Scalar>::digits() - 1);
2404  const Packet cst_limit = pset1<Packet>(static_cast<Scalar>(kLimit));
2405  Packet abs_a = pabs(a);
2406  Packet sign_a = pandnot(a, abs_a);
2407  Packet rint_a = padd(abs_a, cst_limit);
2408  // Don't compile-away addition and subtraction.
2410  rint_a = psub(rint_a, cst_limit);
2411  rint_a = por(rint_a, sign_a);
2412  // If greater than limit (or NaN), simply return a.
2413  Packet mask = pcmp_lt(abs_a, cst_limit);
2414  Packet result = pselect(mask, rint_a, a);
2415  return result;
2416 }
#define EIGEN_OPTIMIZATION_BARRIER(X)
Definition: Macros.h:1051

References a, EIGEN_OPTIMIZATION_BARRIER, pabs(), padd(), pandnot(), pcmp_lt(), por(), pselect(), and psub().

Referenced by generic_ceil(), generic_floor(), and Eigen::internal::nearest_integer_packetop_impl< Packet, false, false >::run_rint().

◆ generic_round()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::generic_round ( const Packet a)
2455  {
2456  using Scalar = typename unpacket_traits<Packet>::type;
2457  const Packet cst_half = pset1<Packet>(Scalar(0.5));
2458  const Packet cst_1 = pset1<Packet>(Scalar(1));
2459  Packet abs_a = pabs(a);
2460  Packet sign_a = pandnot(a, abs_a);
2461  Packet floor_abs_a = generic_floor(abs_a);
2462  Packet diff = psub(abs_a, floor_abs_a);
2463  Packet mask = pcmp_le(cst_half, diff);
2464  Packet offset = pand(cst_1, mask);
2465  Packet result = padd(floor_abs_a, offset);
2466  result = por(result, sign_a);
2467  return result;
2468 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet generic_floor(const Packet &a)
Definition: GenericPacketMathFunctions.h:2419

References a, generic_floor(), pabs(), padd(), pand(), pandnot(), pcmp_le(), por(), and psub().

Referenced by Eigen::internal::nearest_integer_packetop_impl< Packet, false, false >::run_round().

◆ generic_trunc()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::generic_trunc ( const Packet a)
2446  {
2447  Packet abs_a = pabs(a);
2448  Packet sign_a = pandnot(a, abs_a);
2449  Packet floor_abs_a = generic_floor(abs_a);
2450  Packet result = por(floor_abs_a, sign_a);
2451  return result;
2452 }

References a, generic_floor(), pabs(), pandnot(), and por().

Referenced by Eigen::internal::nearest_integer_packetop_impl< Packet, false, false >::run_trunc().

◆ get_compiletime_reshape_order()

constexpr int Eigen::internal::get_compiletime_reshape_order ( int  flags,
int  order 
)
inlineconstexpr
43  {
44  return order == AutoOrder ? flags & RowMajorBit : order;
45 }
const int AutoOrder
Definition: ReshapedHelper.h:19

References Eigen::AutoOrder, and Eigen::RowMajorBit.

◆ get_computation_options()

constexpr int Eigen::internal::get_computation_options ( int  options)
constexpr

◆ get_qr_preconditioner()

constexpr int Eigen::internal::get_qr_preconditioner ( int  options)
constexpr
32 { return options & QRPreconditionerBits; }

References QRPreconditionerBits.

◆ get_random_seed()

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE uint64_t Eigen::internal::get_random_seed ( )
20  {
21 #if defined(EIGEN_GPU_COMPILE_PHASE)
22  // We don't support 3d kernels since we currently only use 1 and
23  // 2d kernels.
24  gpu_assert(threadIdx.z == 0);
25  return blockIdx.x * blockDim.x + threadIdx.x + gridDim.x * blockDim.x * (blockIdx.y * blockDim.y + threadIdx.y);
26 #else
27  // Rely on Eigen's random implementation.
28  return random<uint64_t>();
29 #endif
30 }
dim3 threadIdx
Definition: gpu_common.h:16
dim3 blockDim
Definition: gpu_common.h:16
dim3 blockIdx
Definition: gpu_common.h:16

References blockDim, blockIdx, and threadIdx.

Referenced by PCG_XSH_RS_state().

◆ get_runtime_reshape_size() [1/2]

Index Eigen::internal::get_runtime_reshape_size ( AutoSize_t  ,
Index  other,
Index  total 
)
inline
41 { return total / other; }

◆ get_runtime_reshape_size() [2/2]

template<typename SizeType >
Index Eigen::internal::get_runtime_reshape_size ( SizeType  size,
Index  ,
Index   
)
29  {
31 }
EIGEN_DEVICE_FUNC Index get_runtime_value(const T &x)
Definition: IntegralConstant.h:175

References get_runtime_value(), and size.

◆ get_runtime_value()

template<typename T >
EIGEN_DEVICE_FUNC Index Eigen::internal::get_runtime_value ( const T x)
175  {
176  return x;
177 }

References plotDoE::x.

Referenced by get_runtime_reshape_size().

◆ getAdjointVal()

template<typename Scalar , int StorageOrder>
EIGEN_ALWAYS_INLINE std::complex<Scalar> Eigen::internal::getAdjointVal ( Index  i,
Index  j,
const_blas_data_mapper< std::complex< Scalar >, Index, StorageOrder > &  dt 
)

Symm packing is related to packing of symmetric adjoint blocks, as expected the packing leaves the diagonal real, whatever is below it is copied from the respective upper diagonal element and conjugated. There's no PanelMode available for symm packing.

Packing in general is supposed to leave the lhs block and the rhs block easy to be read by gemm using its respective rank-update instructions. The float32/64 versions are different because at this moment the size of the accumulator is fixed at 512-bits so you can't have a 4x4 accumulator of 64-bit elements.

As mentioned earlier MatrixProduct breaks complex numbers into a real vector and a complex vector so packing has to take that into account, at the moment, we run pack the real part and then the imaginary part, this is the main reason why packing for complex is broken down into several different parts, also the reason why we endup having a float32/64 and complex float32/64 version.

118  {
119  std::complex<Scalar> v;
120  if (i < j) {
121  v.real(dt(j, i).real());
122  v.imag(-dt(j, i).imag());
123  } else if (i > j) {
124  v.real(dt(i, j).real());
125  v.imag(dt(i, j).imag());
126  } else {
127  v.real(dt(i, j).real());
128  v.imag((Scalar)0.0);
129  }
130  return v;
131 }

References i, Eigen::imag(), j, Eigen::real(), and v.

◆ GetDenseElt() [1/2]

template<typename RealScalar >
void Eigen::internal::GetDenseElt ( const std::string &  line,
RealScalar val 
)
inline
58  {
59  std::istringstream newline(line);
60  newline >> val;
61 }
line
Definition: calibrate.py:103

References calibrate::line, and calibrate::val.

Referenced by Eigen::loadMarketDense().

◆ GetDenseElt() [2/2]

template<typename RealScalar >
void Eigen::internal::GetDenseElt ( const std::string &  line,
std::complex< RealScalar > &  val 
)
inline
64  {
65  RealScalar valR, valI;
66  std::istringstream newline(line);
67  newline >> valR >> valI;
68  val = std::complex<RealScalar>(valR, valI);
69 }

References calibrate::line, and calibrate::val.

◆ GetMarketLine() [1/6]

template<>
void Eigen::internal::GetMarketLine ( const char line,
int i,
int j,
double value 
)
inline
35  {
36  std::sscanf(line, "%d %d %lg", &i, &j, &value);
37 }

References i, j, calibrate::line, and Eigen::value.

◆ GetMarketLine() [2/6]

template<>
void Eigen::internal::GetMarketLine ( const char line,
int i,
int j,
float &  value 
)
inline
30  {
31  std::sscanf(line, "%d %d %g", &i, &j, &value);
32 }

References i, j, calibrate::line, and Eigen::value.

◆ GetMarketLine() [3/6]

template<>
void Eigen::internal::GetMarketLine ( const char line,
int i,
int j,
std::complex< double > &  value 
)
inline
45  {
46  std::sscanf(line, "%d %d %lg %lg", &i, &j, &numext::real_ref(value), &numext::imag_ref(value));
47 }
EIGEN_DEVICE_FUNC internal::add_const_on_value_type_t< EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar)> imag_ref(const Scalar &x)
Definition: MathFunctions.h:1072
EIGEN_DEVICE_FUNC internal::add_const_on_value_type_t< EIGEN_MATHFUNC_RETVAL(real_ref, Scalar)> real_ref(const Scalar &x)
Definition: MathFunctions.h:1051

References i, Eigen::numext::imag_ref(), j, calibrate::line, Eigen::numext::real_ref(), and Eigen::value.

◆ GetMarketLine() [4/6]

template<>
void Eigen::internal::GetMarketLine ( const char line,
int i,
int j,
std::complex< float > &  value 
)
inline
40  {
41  std::sscanf(line, "%d %d %g %g", &i, &j, &numext::real_ref(value), &numext::imag_ref(value));
42 }

References i, Eigen::numext::imag_ref(), j, calibrate::line, Eigen::numext::real_ref(), and Eigen::value.

◆ GetMarketLine() [5/6]

template<typename Scalar , typename StorageIndex >
void Eigen::internal::GetMarketLine ( const char line,
StorageIndex &  i,
StorageIndex &  j,
Scalar value 
)
inline
24  {
25  std::stringstream sline(line);
26  sline >> i >> j >> value;
27 }

References i, j, calibrate::line, and Eigen::value.

Referenced by Eigen::loadMarket().

◆ GetMarketLine() [6/6]

template<typename Scalar , typename StorageIndex >
void Eigen::internal::GetMarketLine ( const char line,
StorageIndex &  i,
StorageIndex &  j,
std::complex< Scalar > &  value 
)
inline
50  {
51  std::stringstream sline(line);
52  Scalar valR, valI;
53  sline >> i >> j >> valR >> valI;
54  value = std::complex<Scalar>(valR, valI);
55 }

References i, j, calibrate::line, and Eigen::value.

◆ getRandomBits()

template<typename BitsType >
EIGEN_DEVICE_FUNC BitsType Eigen::internal::getRandomBits ( int  numRandomBits)
inline
77  {
78  return random_bits_impl<BitsType>::run(numRandomBits);
79 }

References Eigen::internal::random_bits_impl< Scalar >::run().

◆ gmres()

template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool Eigen::internal::gmres ( const MatrixType mat,
const Rhs rhs,
Dest &  x,
const Preconditioner &  precond,
Index iters,
const Index restart,
typename Dest::RealScalar tol_error 
)

Generalized Minimal Residual Algorithm based on the Arnoldi algorithm implemented with Householder reflections.

Parameters:

Parameters
matmatrix of linear system of equations
rhsright hand side vector of linear system of equations
xon input: initial guess, on output: solution
precondpreconditioner used
iterson input: maximum number of iterations to perform on output: number of iterations performed
restartnumber of iterations for a restart
tol_erroron input: relative residual tolerance on output: residuum achieved
See also
IterativeMethods::bicgstab()

For references, please see:

Saad, Y. and Schultz, M. H. GMRES: A Generalized Minimal Residual Algorithm for Solving Nonsymmetric Linear Systems. SIAM J.Sci.Stat.Comp. 7, 1986, pp. 856 - 869.

Saad, Y. Iterative Methods for Sparse Linear Systems. Society for Industrial and Applied Mathematics, Philadelphia, 2003.

Walker, H. F. Implementations of the GMRES method. Comput.Phys.Comm. 53, 1989, pp. 311 - 320.

Walker, H. F. Implementation of the GMRES Method using Householder Transformations. SIAM J.Sci.Stat.Comp. 9, 1988, pp. 152 - 163.

60  {
61  using std::abs;
62  using std::sqrt;
63 
64  typedef typename Dest::RealScalar RealScalar;
65  typedef typename Dest::Scalar Scalar;
66  typedef Matrix<Scalar, Dynamic, 1> VectorType;
67  typedef Matrix<Scalar, Dynamic, Dynamic, ColMajor> FMatrixType;
68 
69  const RealScalar considerAsZero = (std::numeric_limits<RealScalar>::min)();
70 
71  if (rhs.norm() <= considerAsZero) {
72  x.setZero();
73  tol_error = 0;
74  return true;
75  }
76 
77  RealScalar tol = tol_error;
78  const Index maxIters = iters;
79  iters = 0;
80 
81  const Index m = mat.rows();
82 
83  // residual and preconditioned residual
84  VectorType p0 = rhs - mat * x;
85  VectorType r0 = precond.solve(p0);
86 
87  const RealScalar r0Norm = r0.norm();
88 
89  // is initial guess already good enough?
90  if (r0Norm == 0) {
91  tol_error = 0;
92  return true;
93  }
94 
95  // storage for Hessenberg matrix and Householder data
96  FMatrixType H = FMatrixType::Zero(m, restart + 1);
99 
100  // storage for Jacobi rotations
101  std::vector<JacobiRotation<Scalar> > G(restart);
102 
103  // storage for temporaries
104  VectorType t(m), v(m), workspace(m), x_new(m);
105 
106  // generate first Householder vector
107  Ref<VectorType> H0_tail = H.col(0).tail(m - 1);
109  r0.makeHouseholder(H0_tail, tau.coeffRef(0), beta);
110  w(0) = Scalar(beta);
111 
112  for (Index k = 1; k <= restart; ++k) {
113  ++iters;
114 
115  v = VectorType::Unit(m, k - 1);
116 
117  // apply Householder reflections H_{1} ... H_{k-1} to v
118  // TODO: use a HouseholderSequence
119  for (Index i = k - 1; i >= 0; --i) {
120  v.tail(m - i).applyHouseholderOnTheLeft(H.col(i).tail(m - i - 1), tau.coeffRef(i), workspace.data());
121  }
122 
123  // apply matrix M to v: v = mat * v;
124  t.noalias() = mat * v;
125  v = precond.solve(t);
126 
127  // apply Householder reflections H_{k-1} ... H_{1} to v
128  // TODO: use a HouseholderSequence
129  for (Index i = 0; i < k; ++i) {
130  v.tail(m - i).applyHouseholderOnTheLeft(H.col(i).tail(m - i - 1), tau.coeffRef(i), workspace.data());
131  }
132 
133  if (v.tail(m - k).norm() != 0.0) {
134  if (k <= restart) {
135  // generate new Householder vector
136  Ref<VectorType> Hk_tail = H.col(k).tail(m - k - 1);
137  v.tail(m - k).makeHouseholder(Hk_tail, tau.coeffRef(k), beta);
138 
139  // apply Householder reflection H_{k} to v
140  v.tail(m - k).applyHouseholderOnTheLeft(Hk_tail, tau.coeffRef(k), workspace.data());
141  }
142  }
143 
144  if (k > 1) {
145  for (Index i = 0; i < k - 1; ++i) {
146  // apply old Givens rotations to v
147  v.applyOnTheLeft(i, i + 1, G[i].adjoint());
148  }
149  }
150 
151  if (k < m && v(k) != (Scalar)0) {
152  // determine next Givens rotation
153  G[k - 1].makeGivens(v(k - 1), v(k));
154 
155  // apply Givens rotation to v and w
156  v.applyOnTheLeft(k - 1, k, G[k - 1].adjoint());
157  w.applyOnTheLeft(k - 1, k, G[k - 1].adjoint());
158  }
159 
160  // insert coefficients into upper matrix triangle
161  H.col(k - 1).head(k) = v.head(k);
162 
163  tol_error = abs(w(k)) / r0Norm;
164  bool stop = (k == m || tol_error < tol || iters == maxIters);
165 
166  if (stop || k == restart) {
167  // solve upper triangular system
168  Ref<VectorType> y = w.head(k);
169  H.topLeftCorner(k, k).template triangularView<Upper>().solveInPlace(y);
170 
171  // use Horner-like scheme to calculate solution vector
172  x_new.setZero();
173  for (Index i = k - 1; i >= 0; --i) {
174  x_new(i) += y(i);
175  // apply Householder reflection H_{i} to x_new
176  x_new.tail(m - i).applyHouseholderOnTheLeft(H.col(i).tail(m - i - 1), tau.coeffRef(i), workspace.data());
177  }
178 
179  x += x_new;
180 
181  if (stop) {
182  return true;
183  } else {
184  k = 0;
185 
186  // reset data for restart
187  p0.noalias() = rhs - mat * x;
188  r0 = precond.solve(p0);
189 
190  // clear Hessenberg matrix and Householder data
191  H.setZero();
192  w.setZero();
193  tau.setZero();
194 
195  // generate first Householder vector
196  r0.makeHouseholder(H0_tail, tau.coeffRef(0), beta);
197  w(0) = Scalar(beta);
198  }
199  }
200  }
201 
202  return false;
203 }
MatrixXf H
Definition: HessenbergDecomposition_matrixH.cpp:4
JacobiRotation< float > G
Definition: Jacobi_makeGivens.cpp:2
void adjoint(const MatrixType &m)
Definition: adjoint.cpp:85
Definition: restart2.cpp:8

References abs(), adjoint(), beta, G, H, i, k, m, min, p0, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), sqrt(), plotPSD::t, v, w, plotDoE::x, y, and oomph::PseudoSolidHelper::Zero.

Referenced by Eigen::GMRES< MatrixType_, Preconditioner_ >::_solve_vector_with_guess_impl(), and main().

◆ h_array_apply()

template<typename Op , typename A , std::size_t N, int... n>
constexpr EIGEN_STRONG_INLINE array<decltype(Op::run(A())), N> Eigen::internal::h_array_apply ( array< A, N a,
numeric_list< int, n... >   
)
constexpr
544  {
545  return array<decltype(Op::run(A())), N>{{Op::run(array_get<n>(a))...}};
546 }

References a, N, and run().

◆ h_array_apply_and_reduce()

template<typename Reducer , typename Op , typename A , std::size_t N, int... n>
constexpr EIGEN_STRONG_INLINE auto Eigen::internal::h_array_apply_and_reduce ( array< A, N arr,
numeric_list< int, n... >   
) -> decltype(reduce<Reducer, typename id_numeric<int, n, decltype(Op::run(A()))>::type...>::run( Op::run(array_get<n>(arr))...))
constexpr
558  {
559  return reduce<Reducer, typename id_numeric<int, n, decltype(Op::run(A()))>::type...>::run(
560  Op::run(array_get<n>(arr))...);
561 }

References int(), n, run(), Eigen::run(), and Eigen::internal::skip< n, a >::type.

◆ h_array_reverse()

template<typename Array , int... n>
constexpr EIGEN_STRONG_INLINE Array Eigen::internal::h_array_reverse ( Array  arr,
numeric_list< int, n... >   
)
constexpr
448  {
449  return {{array_get<sizeof...(n) - n - 1>(arr)...}};
450 }
constexpr T array_get(const numeric_list< T, a, as... > &)
Definition: MoreMeta.h:219

References array_get(), and n.

Referenced by array_reverse().

◆ h_array_zip()

template<typename Op , typename A , typename B , std::size_t N, int... n>
constexpr EIGEN_STRONG_INLINE array<decltype(Op::run(A(), B())), N> Eigen::internal::h_array_zip ( array< A, N a,
array< B, N b,
numeric_list< int, n... >   
)
constexpr
516  {
517  return array<decltype(Op::run(A(), B())), N>{{Op::run(array_get<n>(a), array_get<n>(b))...}};
518 }

References a, b, N, and run().

◆ h_array_zip_and_reduce()

template<typename Reducer , typename Op , typename A , typename B , std::size_t N, int... n>
constexpr EIGEN_STRONG_INLINE auto Eigen::internal::h_array_zip_and_reduce ( array< A, N a,
array< B, N b,
numeric_list< int, n... >   
) -> decltype(reduce<Reducer, typename id_numeric<int, n, decltype(Op::run(A(), B()))>::type...>::run( Op::run(array_get<n>(a), array_get<n>(b))...))
constexpr
530  {
531  return reduce<Reducer, typename id_numeric<int, n, decltype(Op::run(A(), B()))>::type...>::run(
532  Op::run(array_get<n>(a), array_get<n>(b))...);
533 }

References a, b, int(), n, run(), Eigen::run(), and Eigen::internal::skip< n, a >::type.

◆ half2float() [1/2]

EIGEN_STRONG_INLINE Packet16f Eigen::internal::half2float ( const Packet16h a)
2258 { return _mm512_cvtph_ps(a); }

References a.

◆ half2float() [2/2]

◆ handmade_aligned_free()

EIGEN_DEVICE_FUNC void Eigen::internal::handmade_aligned_free ( void *  ptr)
inline

Frees memory allocated with handmade_aligned_malloc

158  {
159  if (ptr != nullptr) {
160  uint8_t offset = static_cast<uint8_t>(*(static_cast<uint8_t*>(ptr) - 1));
161  void* original = static_cast<void*>(static_cast<uint8_t*>(ptr) - offset);
162 
164  EIGEN_USING_STD(free)
165  free(original);
166  }
167 }

References check_that_malloc_is_allowed(), and EIGEN_USING_STD.

Referenced by aligned_free(), check_handmade_aligned_malloc(), Eigen::MaxSizeVector< T >::MaxSizeVector(), triSolve(), and Eigen::MaxSizeVector< T >::~MaxSizeVector().

◆ handmade_aligned_malloc()

EIGEN_DEVICE_FUNC void* Eigen::internal::handmade_aligned_malloc ( std::size_t  size,
std::size_t  alignment = EIGEN_DEFAULT_ALIGN_BYTES 
)
inline

Like malloc, but the returned pointer is guaranteed to be aligned to alignment. Fast, but wastes alignment additional bytes of memory. Does not throw any exception.

143  {
144  eigen_assert(alignment >= sizeof(void*) && alignment <= 128 && (alignment & (alignment - 1)) == 0 &&
145  "Alignment must be at least sizeof(void*), less than or equal to 128, and a power of 2");
146 
148  EIGEN_USING_STD(malloc)
149  void* original = malloc(size + alignment);
150  if (original == nullptr) return nullptr;
151  uint8_t offset = static_cast<uint8_t>(alignment - (reinterpret_cast<std::size_t>(original) & (alignment - 1)));
152  void* aligned = static_cast<void*>(static_cast<uint8_t*>(original) + offset);
153  *(static_cast<uint8_t*>(aligned) - 1) = offset;
154  return aligned;
155 }

References check_that_malloc_is_allowed(), eigen_assert, EIGEN_USING_STD, and size.

Referenced by aligned_malloc(), check_handmade_aligned_malloc(), handmade_aligned_realloc(), and triSolve().

◆ handmade_aligned_realloc()

EIGEN_DEVICE_FUNC void* Eigen::internal::handmade_aligned_realloc ( void *  ptr,
std::size_t  new_size,
std::size_t  old_size,
std::size_t  alignment = EIGEN_DEFAULT_ALIGN_BYTES 
)
inline

Reallocates aligned memory. Since we know that our handmade version is based on std::malloc we can use std::realloc to implement efficient reallocation.

175  {
176  if (ptr == nullptr) return handmade_aligned_malloc(new_size, alignment);
177  uint8_t old_offset = *(static_cast<uint8_t*>(ptr) - 1);
178  void* old_original = static_cast<uint8_t*>(ptr) - old_offset;
179 
181  EIGEN_USING_STD(realloc)
182  void* original = realloc(old_original, new_size + alignment);
183  if (original == nullptr) return nullptr;
184  if (original == old_original) return ptr;
185  uint8_t offset = static_cast<uint8_t>(alignment - (reinterpret_cast<std::size_t>(original) & (alignment - 1)));
186  void* aligned = static_cast<void*>(static_cast<uint8_t*>(original) + offset);
187  if (offset != old_offset) {
188  const void* src = static_cast<const void*>(static_cast<uint8_t*>(original) + old_offset);
189  std::size_t count = (std::min)(new_size, old_size);
190  std::memmove(aligned, src, count);
191  }
192  *(static_cast<uint8_t*>(aligned) - 1) = offset;
193  return aligned;
194 }

References check_that_malloc_is_allowed(), EIGEN_USING_STD, handmade_aligned_malloc(), and min.

Referenced by aligned_realloc().

◆ householder_qr_inplace_unblocked()

template<typename MatrixQR , typename HCoeffs >
void Eigen::internal::householder_qr_inplace_unblocked ( MatrixQR &  mat,
HCoeffs &  hCoeffs,
typename MatrixQR::Scalar tempData = 0 
)
346  {
347  typedef typename MatrixQR::Scalar Scalar;
348  typedef typename MatrixQR::RealScalar RealScalar;
349  Index rows = mat.rows();
350  Index cols = mat.cols();
351  Index size = (std::min)(rows, cols);
352 
353  eigen_assert(hCoeffs.size() == size);
354 
355  typedef Matrix<Scalar, MatrixQR::ColsAtCompileTime, 1> TempType;
356  TempType tempVector;
357  if (tempData == 0) {
358  tempVector.resize(cols);
359  tempData = tempVector.data();
360  }
361 
362  for (Index k = 0; k < size; ++k) {
363  Index remainingRows = rows - k;
364  Index remainingCols = cols - k - 1;
365 
367  mat.col(k).tail(remainingRows).makeHouseholderInPlace(hCoeffs.coeffRef(k), beta);
368  mat.coeffRef(k, k) = beta;
369 
370  // apply H to remaining part of m_qr from the left
371  mat.bottomRightCorner(remainingRows, remainingCols)
372  .applyHouseholderOnTheLeft(mat.col(k).tail(remainingRows - 1), hCoeffs.coeffRef(k), tempData + k + 1);
373  }
374 }
Scalar & coeffRef(Index row, Index col)
Definition: SparseMatrix.h:275

References Eigen::HouseholderQR< MatrixType_ >::cols(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), eigen_assert, Eigen::HouseholderQR< MatrixType_ >::hCoeffs(), min, Eigen::HouseholderQR< MatrixType_ >::rows(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), and Eigen::EigenBase< Derived >::size().

Referenced by householder_update(), and Eigen::internal::householder_qr_inplace_blocked< MatrixQR, HCoeffs, MatrixQRScalar, InnerStrideIsOne >::run().

◆ householder_qr_inplace_update()

template<typename MatrixQR , typename HCoeffs , typename VectorQR >
void Eigen::internal::householder_qr_inplace_update ( MatrixQR &  mat,
HCoeffs &  hCoeffs,
const VectorQR &  newColumn,
typename MatrixQR::Index  k,
typename MatrixQR::Scalar tempData 
)

Basically a modified copy of Eigen::internal::householder_qr_inplace_unblocked that performs a rank-1 update of the QR matrix in compact storage. This function assumes, that the first k-1 columns of the matrix mat contain the QR decomposition of \(A^N\) up to column k-1. Then the QR decomposition of the k-th column (given by newColumn) is computed by applying the k-1 Householder projectors on it and finally compute the projector \(H_k\) of it. On exit the matrix mat and the vector hCoeffs contain the QR decomposition of the first k columns of \(A^N\). The tempData argument must point to at least mat.cols() scalars.

387  {
388  typedef typename MatrixQR::Index Index;
389  typedef typename MatrixQR::RealScalar RealScalar;
390  Index rows = mat.rows();
391 
392  eigen_assert(k < mat.cols());
393  eigen_assert(k < rows);
394  eigen_assert(hCoeffs.size() == mat.cols());
395  eigen_assert(newColumn.size() == rows);
396  eigen_assert(tempData);
397 
398  // Store new column in mat at column k
399  mat.col(k) = newColumn;
400  // Apply H = H_1...H_{k-1} on newColumn (skip if k=0)
401  for (Index i = 0; i < k; ++i) {
402  Index remainingRows = rows - i;
403  mat.col(k)
404  .tail(remainingRows)
405  .applyHouseholderOnTheLeft(mat.col(i).tail(remainingRows - 1), hCoeffs.coeffRef(i), tempData + i + 1);
406  }
407  // Construct Householder projector in-place in column k
409  mat.col(k).tail(rows - k).makeHouseholderInPlace(hCoeffs.coeffRef(k), beta);
410  mat.coeffRef(k, k) = beta;
411 }

References beta, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::coeffRef(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), eigen_assert, Eigen::HouseholderQR< MatrixType_ >::hCoeffs(), i, k, Eigen::HouseholderQR< MatrixType_ >::rows(), and Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows().

Referenced by householder_update().

◆ idrs()

template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool Eigen::internal::idrs ( const MatrixType A,
const Rhs b,
Dest &  x,
const Preconditioner &  precond,
Index iter,
typename Dest::RealScalar relres,
Index  S,
bool  smoothing,
typename Dest::RealScalar  angle,
bool  replacement 
)
60  {
61  typedef typename Dest::RealScalar RealScalar;
62  typedef typename Dest::Scalar Scalar;
63  typedef Matrix<Scalar, Dynamic, 1> VectorType;
64  typedef Matrix<Scalar, Dynamic, Dynamic, ColMajor> DenseMatrixType;
65  const Index N = b.size();
66  S = S < x.rows() ? S : x.rows();
67  const RealScalar tol = relres;
68  const Index maxit = iter;
69 
70  bool trueres = false;
71 
72  FullPivLU<DenseMatrixType> lu_solver;
73 
74  DenseMatrixType P;
75  {
76  HouseholderQR<DenseMatrixType> qr(DenseMatrixType::Random(N, S));
77  P = (qr.householderQ() * DenseMatrixType::Identity(N, S));
78  }
79 
80  const RealScalar normb = b.stableNorm();
81 
82  if (internal::isApprox(normb, RealScalar(0))) {
83  // Solution is the zero vector
84  x.setZero();
85  iter = 0;
86  relres = 0;
87  return true;
88  }
89  // from http://homepage.tudelft.nl/1w5b5/IDRS/manual.pdf
90  // A peak in the residual is considered dangerously high if‖ri‖/‖b‖> C(tol/epsilon).
91  // With epsilon the relative machine precision. The factor tol/epsilon corresponds
92  // to the size of a finite precision number that is so large that the absolute
93  // round-off error in this number, when propagated through the process, makes it
94  // impossible to achieve the required accuracy. The factor C accounts for the
95  // accumulation of round-off errors. This parameter has been set to 10^{-3}.
96  // mp is epsilon/C 10^3 * eps is very conservative, so normally no residual
97  // replacements will take place. It only happens if things go very wrong. Too many
98  // restarts may ruin the convergence.
100 
101  // Compute initial residual
102  const RealScalar tolb = tol * normb; // Relative tolerance
103  VectorType r = b - A * x;
104 
105  VectorType x_s, r_s;
106 
107  if (smoothing) {
108  x_s = x;
109  r_s = r;
110  }
111 
112  RealScalar normr = r.stableNorm();
113 
114  if (normr <= tolb) {
115  // Initial guess is a good enough solution
116  iter = 0;
117  relres = normr / normb;
118  return true;
119  }
120 
121  DenseMatrixType G = DenseMatrixType::Zero(N, S);
122  DenseMatrixType U = DenseMatrixType::Zero(N, S);
123  DenseMatrixType M = DenseMatrixType::Identity(S, S);
124  VectorType t(N), v(N);
125  Scalar om = 1.;
126 
127  // Main iteration loop, guild G-spaces:
128  iter = 0;
129 
130  while (normr > tolb && iter < maxit) {
131  // New right hand size for small system:
132  VectorType f = (r.adjoint() * P).adjoint();
133 
134  for (Index k = 0; k < S; ++k) {
135  // Solve small system and make v orthogonal to P:
136  // c = M(k:s,k:s)\f(k:s);
137  lu_solver.compute(M.block(k, k, S - k, S - k));
138  VectorType c = lu_solver.solve(f.segment(k, S - k));
139  // v = r - G(:,k:s)*c;
140  v = r - G.rightCols(S - k) * c;
141  // Preconditioning
142  v = precond.solve(v);
143 
144  // Compute new U(:,k) and G(:,k), G(:,k) is in space G_j
145  U.col(k) = U.rightCols(S - k) * c + om * v;
146  G.col(k) = A * U.col(k);
147 
148  // Bi-Orthogonalise the new basis vectors:
149  for (Index i = 0; i < k - 1; ++i) {
150  // alpha = ( P(:,i)'*G(:,k) )/M(i,i);
151  Scalar alpha = P.col(i).dot(G.col(k)) / M(i, i);
152  G.col(k) = G.col(k) - alpha * G.col(i);
153  U.col(k) = U.col(k) - alpha * U.col(i);
154  }
155 
156  // New column of M = P'*G (first k-1 entries are zero)
157  // M(k:s,k) = (G(:,k)'*P(:,k:s))';
158  M.block(k, k, S - k, 1) = (G.col(k).adjoint() * P.rightCols(S - k)).adjoint();
159 
160  if (internal::isApprox(M(k, k), Scalar(0))) {
161  return false;
162  }
163 
164  // Make r orthogonal to q_i, i = 0..k-1
165  Scalar beta = f(k) / M(k, k);
166  r = r - beta * G.col(k);
167  x = x + beta * U.col(k);
168  normr = r.stableNorm();
169 
170  if (replacement && normr > tolb / mp) {
171  trueres = true;
172  }
173 
174  // Smoothing:
175  if (smoothing) {
176  t = r_s - r;
177  // gamma is a Scalar, but the conversion is not allowed
178  Scalar gamma = t.dot(r_s) / t.stableNorm();
179  r_s = r_s - gamma * t;
180  x_s = x_s - gamma * (x_s - x);
181  normr = r_s.stableNorm();
182  }
183 
184  if (normr < tolb || iter == maxit) {
185  break;
186  }
187 
188  // New f = P'*r (first k components are zero)
189  if (k < S - 1) {
190  f.segment(k + 1, S - (k + 1)) = f.segment(k + 1, S - (k + 1)) - beta * M.block(k + 1, k, S - (k + 1), 1);
191  }
192  } // end for
193 
194  if (normr < tolb || iter == maxit) {
195  break;
196  }
197 
198  // Now we have sufficient vectors in G_j to compute residual in G_j+1
199  // Note: r is already perpendicular to P so v = r
200  // Preconditioning
201  v = r;
202  v = precond.solve(v);
203 
204  // Matrix-vector multiplication:
205  t = A * v;
206 
207  // Computation of a new omega
208  om = internal::omega(t, r, angle);
209 
210  if (om == RealScalar(0.0)) {
211  return false;
212  }
213 
214  r = r - om * t;
215  x = x + om * v;
216  normr = r.stableNorm();
217 
218  if (replacement && normr > tolb / mp) {
219  trueres = true;
220  }
221 
222  // Residual replacement?
223  if (trueres && normr < normb) {
224  r = b - A * x;
225  trueres = false;
226  }
227 
228  // Smoothing:
229  if (smoothing) {
230  t = r_s - r;
231  Scalar gamma = t.dot(r_s) / t.stableNorm();
232  r_s = r_s - gamma * t;
233  x_s = x_s - gamma * (x_s - x);
234  normr = r_s.stableNorm();
235  }
236 
237  iter++;
238 
239  } // end while
240 
241  if (smoothing) {
242  x = x_s;
243  }
244  relres = normr / normb;
245  return true;
246 }
HouseholderQR< MatrixXf > qr(A)
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237
double P
Uniform pressure.
Definition: TwenteMeshGluing.cpp:77
double angle(const double &t)
Angular position as a function of time t.
Definition: jeffery_orbit.cc:98
double U
Swimming speed.
Definition: two_d_variable_diff_adapt.cc:53
@ S
Definition: quadtree.h:62

References adjoint(), alpha, Jeffery_Solution::angle(), b, beta, calibrate::c, Eigen::FullPivLU< MatrixType_, PermutationIndex_ >::compute(), oomph::SarahBL::epsilon, f(), G, mathsFunc::gamma(), i, isApprox(), k, N, omega(), Global_Physical_Variables::P, qr(), UniformPSDSelfTest::r, oomph::QuadTreeNames::S, Eigen::SolverBase< Derived >::solve(), plotPSD::t, RachelsAdvectionDiffusion::U, v, plotDoE::x, and oomph::PseudoSolidHelper::Zero.

Referenced by Eigen::IDRS< MatrixType_, Preconditioner_ >::_solve_vector_with_guess_impl().

◆ idrstabl()

template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
bool Eigen::internal::idrstabl ( const MatrixType mat,
const Rhs rhs,
Dest &  x,
const Preconditioner &  precond,
Index iters,
typename Dest::RealScalar tol_error,
Index  L,
Index  S 
)
47  {
48  /*
49  Setup and type definitions.
50  */
51  using numext::abs;
52  using numext::sqrt;
53  typedef typename Dest::Scalar Scalar;
54  typedef typename Dest::RealScalar RealScalar;
55  typedef Matrix<Scalar, Dynamic, 1> VectorType;
56  typedef Matrix<Scalar, Dynamic, Dynamic, ColMajor> DenseMatrixType;
57 
58  const Index N = x.rows();
59 
60  Index k = 0; // Iteration counter
61  const Index maxIters = iters;
62 
63  const RealScalar rhs_norm = rhs.stableNorm();
64  const RealScalar tol = tol_error * rhs_norm;
65 
66  if (rhs_norm == 0) {
67  /*
68  If b==0, then the exact solution is x=0.
69  rhs_norm is needed for other calculations anyways, this exit is a freebie.
70  */
71  x.setZero();
72  tol_error = 0.0;
73  return true;
74  }
75  // Construct decomposition objects beforehand.
76  FullPivLU<DenseMatrixType> lu_solver;
77 
78  if (S >= N || L >= N) {
79  /*
80  The matrix is very small, or the choice of L and S is very poor
81  in that case solving directly will be best.
82  */
83  lu_solver.compute(DenseMatrixType(mat));
84  x = lu_solver.solve(rhs);
85  tol_error = (rhs - mat * x).stableNorm() / rhs_norm;
86  return true;
87  }
88 
89  // Define maximum sizes to prevent any reallocation later on.
90  DenseMatrixType u(N, L + 1);
91  DenseMatrixType r(N, L + 1);
92 
93  DenseMatrixType V(N * (L + 1), S);
94 
97  VectorType update(N);
98 
99  /*
100  Main IDRSTABL algorithm
101  */
102  // Set up the initial residual
103  VectorType x0 = x;
104  r.col(0) = rhs - mat * x;
105  x.setZero(); // The final solution will be x0+x
106 
107  tol_error = r.col(0).stableNorm();
108 
109  // FOM = Full orthogonalisation method
110  DenseMatrixType h_FOM = DenseMatrixType::Zero(S, S - 1);
111 
112  // Construct an initial U matrix of size N x S
113  DenseMatrixType U(N * (L + 1), S);
114  for (Index col_index = 0; col_index < S; ++col_index) {
115  // Arnoldi-like process to generate a set of orthogonal vectors spanning
116  // {u,A*u,A*A*u,...,A^(S-1)*u}. This construction can be combined with the
117  // Full Orthogonalization Method (FOM) from Ref.3 to provide a possible
118  // early exit with no additional MV.
119  if (col_index != 0) {
120  /*
121  Modified Gram-Schmidt strategy:
122  */
123  VectorType w = mat * precond.solve(u.col(0));
124  for (Index i = 0; i < col_index; ++i) {
125  auto v = U.col(i).head(N);
126  h_FOM(i, col_index - 1) = v.dot(w);
127  w -= h_FOM(i, col_index - 1) * v;
128  }
129  u.col(0) = w;
130  h_FOM(col_index, col_index - 1) = u.col(0).stableNorm();
131 
132  if (abs(h_FOM(col_index, col_index - 1)) != RealScalar(0)) {
133  /*
134  This only happens if u is NOT exactly zero. In case it is exactly zero
135  it would imply that that this u has no component in the direction of the
136  current residual.
137 
138  By then setting u to zero it will not contribute any further (as it
139  should). Whereas attempting to normalize results in division by zero.
140 
141  Such cases occur if:
142  1. The basis of dimension <S is sufficient to exactly solve the linear
143  system. I.e. the current residual is in span{r,Ar,...A^{m-1}r}, where
144  (m-1)<=S.
145  2. Two vectors vectors generated from r, Ar,... are (numerically)
146  parallel.
147 
148  In case 1, the exact solution to the system can be obtained from the
149  "Full Orthogonalization Method" (Algorithm 6.4 in the book of Saad),
150  without any additional MV.
151 
152  Contrary to what one would suspect, the comparison with ==0.0 for
153  floating-point types is intended here. Any arbitrary non-zero u is fine
154  to continue, however if u contains either NaN or Inf the algorithm will
155  break down.
156  */
157  u.col(0) /= h_FOM(col_index, col_index - 1);
158  }
159  } else {
160  u.col(0) = r.col(0);
161  u.col(0).normalize();
162  }
163 
164  U.col(col_index).head(N) = u.col(0);
165  }
166 
167  if (S > 1) {
168  // Check for early FOM exit.
169  Scalar beta = r.col(0).stableNorm();
170  VectorType e1 = VectorType::Zero(S - 1);
171  e1(0) = beta;
172  lu_solver.compute(h_FOM.topLeftCorner(S - 1, S - 1));
173  VectorType y = lu_solver.solve(e1);
174  VectorType x2 = x + U.topLeftCorner(N, S - 1) * y;
175 
176  // Using proposition 6.7 in Saad, one MV can be saved to calculate the
177  // residual
178  RealScalar FOM_residual = (h_FOM(S - 1, S - 2) * y(S - 2) * U.col(S - 1).head(N)).stableNorm();
179 
180  if (FOM_residual < tol) {
181  // Exit, the FOM algorithm was already accurate enough
182  iters = k;
183  // Convert back to the unpreconditioned solution
184  x = precond.solve(x2);
185  // x contains the updates to x0, add those back to obtain the solution
186  x += x0;
187  tol_error = FOM_residual / rhs_norm;
188  return true;
189  }
190  }
191 
192  /*
193  Select an initial (N x S) matrix R0.
194  1. Generate random R0, orthonormalize the result.
195  2. This results in R0, however to save memory and compute we only need the
196  adjoint of R0. This is given by the matrix R_T.\ Additionally, the matrix
197  (mat.adjoint()*R_tilde).adjoint()=R_tilde.adjoint()*mat by the
198  anti-distributivity property of the adjoint. This results in AR_T, which is
199  constant if R_T does not have to be regenerated and can be precomputed.
200  Based on reference 4, this has zero probability in exact arithmetic.
201  */
202 
203  // Original IDRSTABL and Kensuke choose S random vectors:
204  const HouseholderQR<DenseMatrixType> qr(DenseMatrixType::Random(N, S));
205  DenseMatrixType R_T = (qr.householderQ() * DenseMatrixType::Identity(N, S)).adjoint();
206  DenseMatrixType AR_T = DenseMatrixType(R_T * mat);
207 
208  // Pre-allocate sigma.
209  DenseMatrixType sigma(S, S);
210 
211  bool reset_while = false; // Should the while loop be reset for some reason?
212 
213  while (k < maxIters) {
214  for (Index j = 1; j <= L; ++j) {
215  /*
216  The IDR Step
217  */
218  // Construction of the sigma-matrix, and the decomposition of sigma.
219  for (Index i = 0; i < S; ++i) {
220  sigma.col(i).noalias() = AR_T * precond.solve(U.block(N * (j - 1), i, N, 1));
221  }
222 
223  lu_solver.compute(sigma);
224  // Obtain the update coefficients alpha
225  if (j == 1) {
226  // alpha=inverse(sigma)*(R_T*r_0);
227  alpha.noalias() = lu_solver.solve(R_T * r.col(0));
228  } else {
229  // alpha=inverse(sigma)*(AR_T*r_{j-2})
230  alpha.noalias() = lu_solver.solve(AR_T * precond.solve(r.col(j - 2)));
231  }
232 
233  // Obtain new solution and residual from this update
234  update.noalias() = U.topRows(N) * alpha;
235  r.col(0) -= mat * precond.solve(update);
236  x += update;
237 
238  for (Index i = 1; i <= j - 2; ++i) {
239  // This only affects the case L>2
240  r.col(i) -= U.block(N * (i + 1), 0, N, S) * alpha;
241  }
242  if (j > 1) {
243  // r=[r;A*r_{j-2}]
244  r.col(j - 1).noalias() = mat * precond.solve(r.col(j - 2));
245  }
246  tol_error = r.col(0).stableNorm();
247 
248  if (tol_error < tol) {
249  // If at this point the algorithm has converged, exit.
250  reset_while = true;
251  break;
252  }
253 
254  bool break_normalization = false;
255  for (Index q = 1; q <= S; ++q) {
256  if (q == 1) {
257  // u = r;
258  u.leftCols(j + 1) = r.leftCols(j + 1);
259  } else {
260  // u=[u_1;u_2;...;u_j]
261  u.leftCols(j) = u.middleCols(1, j);
262  }
263 
264  // Obtain the update coefficients beta implicitly
265  // beta=lu_sigma.solve(AR_T * u.block(N * (j - 1), 0, N, 1)
266  u.reshaped().head(u.rows() * j) -= U.topRows(N * j) * lu_solver.solve(AR_T * precond.solve(u.col(j - 1)));
267 
268  // u=[u;Au_{j-1}]
269  u.col(j).noalias() = mat * precond.solve(u.col(j - 1));
270 
271  // Orthonormalize u_j to the columns of V_j(:,1:q-1)
272  if (q > 1) {
273  /*
274  Modified Gram-Schmidt-like procedure to make u orthogonal to the
275  columns of V from Ref. 1.
276 
277  The vector mu from Ref. 1 is obtained implicitly:
278  mu=V.block(N * j, 0, N, q - 1).adjoint() * u.block(N * j, 0, N, 1).
279  */
280  for (Index i = 0; i <= q - 2; ++i) {
281  auto v = V.col(i).segment(N * j, N);
282  Scalar h = v.squaredNorm();
283  h = v.dot(u.col(j)) / h;
284  u.reshaped().head(u.rows() * (j + 1)) -= h * V.block(0, i, N * (j + 1), 1);
285  }
286  }
287  // Normalize u and assign to a column of V
288  Scalar normalization_constant = u.col(j).stableNorm();
289  // If u is exactly zero, this will lead to a NaN. Small, non-zero u is
290  // fine.
291  if (normalization_constant == RealScalar(0.0)) {
292  break_normalization = true;
293  break;
294  } else {
295  u.leftCols(j + 1) /= normalization_constant;
296  }
297 
298  V.block(0, q - 1, N * (j + 1), 1).noalias() = u.reshaped().head(u.rows() * (j + 1));
299  }
300 
301  if (break_normalization == false) {
302  U = V;
303  }
304  }
305  if (reset_while) {
306  break;
307  }
308 
309  // r=[r;mat*r_{L-1}]
310  r.col(L).noalias() = mat * precond.solve(r.col(L - 1));
311 
312  /*
313  The polynomial step
314  */
315  ColPivHouseholderQR<DenseMatrixType> qr_solver(r.rightCols(L));
316  gamma.noalias() = qr_solver.solve(r.col(0));
317 
318  // Update solution and residual using the "minimized residual coefficients"
319  update.noalias() = r.leftCols(L) * gamma;
320  x += update;
321  r.col(0) -= mat * precond.solve(update);
322 
323  // Update iteration info
324  ++k;
325  tol_error = r.col(0).stableNorm();
326 
327  if (tol_error < tol) {
328  // Slightly early exit by moving the criterion before the update of U,
329  // after the main while loop the result of that calculation would not be
330  // needed.
331  break;
332  }
333 
334  /*
335  U=U0-sum(gamma_j*U_j)
336  Consider the first iteration. Then U only contains U0, so at the start of
337  the while-loop U should be U0. Therefore only the first N rows of U have to
338  be updated.
339  */
340  for (Index i = 1; i <= L; ++i) {
341  U.topRows(N) -= U.block(N * i, 0, N, S) * gamma(i - 1);
342  }
343  }
344 
345  /*
346  Exit after the while loop terminated.
347  */
348  iters = k;
349  // Convert back to the unpreconditioned solution
350  x = precond.solve(x);
351  // x contains the updates to x0, add those back to obtain the solution
352  x += x0;
353  tol_error = tol_error / rhs_norm;
354  return true;
355 }
EIGEN_DONT_INLINE T::Scalar stableNorm(T &v)
Definition: bench_norm.cpp:14

References abs(), Eigen::numext::abs(), adjoint(), alpha, beta, Eigen::FullPivLU< MatrixType_, PermutationIndex_ >::compute(), mathsFunc::gamma(), i, j, k, L, N, Eigen::numext::q, qr(), UniformPSDSelfTest::r, oomph::QuadTreeNames::S, calibrate::sigma, Eigen::SolverBase< Derived >::solve(), Eigen::numext::sqrt(), stableNorm(), RachelsAdvectionDiffusion::U, v, V, w, plotDoE::x, Global::x0, Global_parameters::x2(), y, and oomph::PseudoSolidHelper::Zero.

Referenced by Eigen::IDRSTABL< MatrixType_, Preconditioner_ >::_solve_vector_with_guess_impl().

◆ igamma_num_iterations()

template<typename Scalar , IgammaComputationMode mode>
EIGEN_DEVICE_FUNC int Eigen::internal::igamma_num_iterations ( )
821  {
822  /* Returns the maximum number of internal iterations for igamma computation.
823  */
824  if (mode == VALUE) {
825  return 2000;
826  }
827 
829  return 200;
831  return 500;
832  } else {
833  return 2000;
834  }
835 }

References VALUE.

◆ ignore_unused_variable()

template<typename T >
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE void Eigen::internal::ignore_unused_variable ( const T )
constexpr
963 {}

◆ index_known_statically()

template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool Eigen::internal::index_known_statically ( Index  i)
static

◆ index_list_size() [1/2]

template<typename T >
EIGEN_CONSTEXPR auto Eigen::internal::index_list_size ( const T x)

Analogue of the std::ssize free function. It returns the signed size of the container or view x of type T

It currently supports:

  • any types T defining a member T::size() const
  • plain C arrays as T[N]

For C++20, this function just forwards to std::ssize, or any ADL discoverable ssize function.

344  {
345  using R = std::common_type_t<std::ptrdiff_t, std::make_signed_t<decltype(x.size())>>;
346  return static_cast<R>(x.size());
347 }
@ R
Definition: StatisticsVector.h:21

References R, and plotDoE::x.

Referenced by Eigen::internal::IndexedViewHelper< Indices, EnableIf >::size().

◆ index_list_size() [2/2]

template<typename T , std::ptrdiff_t N>
EIGEN_CONSTEXPR std::ptrdiff_t Eigen::internal::index_list_size ( const   T(&)[N])
350  {
351  return N;
352 }

References N.

◆ index_pair_first_statically_eq()

template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool Eigen::internal::index_pair_first_statically_eq ( Index  i,
Index  value 
)
static

◆ index_pair_second_statically_eq()

template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool Eigen::internal::index_pair_second_statically_eq ( Index  i,
Index  value 
)
static

◆ index_statically_eq()

template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool Eigen::internal::index_statically_eq ( Index  i,
Index  value 
)
static

◆ index_statically_gt()

template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool Eigen::internal::index_statically_gt ( Index  i,
Index  value 
)
static

◆ index_statically_lt()

template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool Eigen::internal::index_statically_lt ( Index  i,
Index  value 
)
static

◆ index_statically_ne()

template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool Eigen::internal::index_statically_ne ( Index  i,
Index  value 
)
static

◆ indices_statically_known_to_increase()

template<typename T >
static EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR bool Eigen::internal::indices_statically_known_to_increase ( )
static

◆ initialize_tensor()

template<typename Derived , int N>
void Eigen::internal::initialize_tensor ( TensorEvaluator< Derived, DefaultDevice > &  tensor,
const typename Initializer< Derived, traits< Derived >::NumDimensions >::InitList &  vals 
)
70  {
71  Eigen::array<typename traits<Derived>::Index, traits<Derived>::NumDimensions> indices;
72  Initializer<Derived, traits<Derived>::NumDimensions>::run(tensor, &indices, vals);
73 }

References Eigen::run().

◆ insert_from_triplets()

template<typename InputIterator , typename SparseMatrixType , typename DupFunctor >
void Eigen::internal::insert_from_triplets ( const InputIterator &  begin,
const InputIterator &  end,
SparseMatrixType &  mat,
DupFunctor  dup_func 
)
1256  {
1257  using Scalar = typename SparseMatrixType::Scalar;
1258  using SrcXprType =
1259  CwiseBinaryOp<scalar_disjunction_op<DupFunctor, Scalar>, const SparseMatrixType, const SparseMatrixType>;
1260 
1261  // set_from_triplets is necessary to sort the inner indices and remove the duplicate entries
1262  SparseMatrixType trips(mat.rows(), mat.cols());
1263  set_from_triplets(begin, end, trips, dup_func);
1264 
1265  SrcXprType src = mat.binaryExpr(trips, scalar_disjunction_op<DupFunctor, Scalar>(dup_func));
1266  // the sparse assignment procedure creates a temporary matrix and swaps the final result
1267  assign_sparse_to_sparse<SparseMatrixType, SrcXprType>(mat, src);
1268 }
void set_from_triplets(const InputIterator &begin, const InputIterator &end, SparseMatrixType &mat, DupFunctor dup_func)
Definition: SparseMatrix.h:1127

References Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), Eigen::placeholders::end, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), and set_from_triplets().

◆ insert_from_triplets_sorted()

template<typename InputIterator , typename SparseMatrixType , typename DupFunctor >
void Eigen::internal::insert_from_triplets_sorted ( const InputIterator &  begin,
const InputIterator &  end,
SparseMatrixType &  mat,
DupFunctor  dup_func 
)
1273  {
1274  using Scalar = typename SparseMatrixType::Scalar;
1275  using SrcXprType =
1276  CwiseBinaryOp<scalar_disjunction_op<DupFunctor, Scalar>, const SparseMatrixType, const SparseMatrixType>;
1277 
1278  // TODO: process triplets without making a copy
1279  SparseMatrixType trips(mat.rows(), mat.cols());
1280  set_from_triplets_sorted(begin, end, trips, dup_func);
1281 
1282  SrcXprType src = mat.binaryExpr(trips, scalar_disjunction_op<DupFunctor, Scalar>(dup_func));
1283  // the sparse assignment procedure creates a temporary matrix and swaps the final result
1284  assign_sparse_to_sparse<SparseMatrixType, SrcXprType>(mat, src);
1285 }
void set_from_triplets_sorted(const InputIterator &begin, const InputIterator &end, SparseMatrixType &mat, DupFunctor dup_func)
Definition: SparseMatrix.h:1179

References Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), Eigen::placeholders::end, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), and set_from_triplets_sorted().

◆ instantiate_by_c_array()

template<class InstType , typename ArrType , std::size_t N, bool Reverse = false>
InstType Eigen::internal::instantiate_by_c_array ( ArrType *  arr)

References run().

◆ intersect_helper()

template<typename BVH , typename Intersector >
bool Eigen::internal::intersect_helper ( const BVH &  tree,
Intersector &  intersector,
typename BVH::Index  root 
)
22  {
23  typedef typename BVH::Index Index;
24  typedef typename BVH::VolumeIterator VolIter;
25  typedef typename BVH::ObjectIterator ObjIter;
26 
27  VolIter vBegin = VolIter(), vEnd = VolIter();
28  ObjIter oBegin = ObjIter(), oEnd = ObjIter();
29 
30  std::vector<Index> todo(1, root);
31 
32  while (!todo.empty()) {
33  tree.getChildren(todo.back(), vBegin, vEnd, oBegin, oEnd);
34  todo.pop_back();
35 
36  for (; vBegin != vEnd; ++vBegin) // go through child volumes
37  if (intersector.intersectVolume(tree.getVolume(*vBegin))) todo.push_back(*vBegin);
38 
39  for (; oBegin != oEnd; ++oBegin) // go through child objects
40  if (intersector.intersectObject(*oBegin)) return true; // intersector said to stop query
41  }
42  return false;
43 }

Referenced by Eigen::BVIntersect().

◆ is_constant_evaluated()

constexpr bool Eigen::internal::is_constant_evaluated ( )
constexpr

Provide fallback for std::is_constant_evaluated for pre-C++20.

746 { return false; }

Referenced by Eigen::internal::block_evaluator< ArgType, BlockRows, BlockCols, InnerPanel, true >::block_evaluator().

◆ is_identically_zero()

◆ is_same_dense() [1/2]

template<typename T1 , typename T2 >
EIGEN_DEVICE_FUNC bool Eigen::internal::is_same_dense ( const T1 &  ,
const T2 &  ,
std::enable_if_t<!possibly_same_dense< T1, T2 >::value > *  = 0 
)
876  {
877  return false;
878 }

◆ is_same_dense() [2/2]

◆ isApprox()

template<typename Scalar >
EIGEN_DEVICE_FUNC bool Eigen::internal::isApprox ( const Scalar x,
const Scalar y,
const typename NumTraits< Scalar >::Real precision = NumTraits<Scalar>::dummy_precision() 
)
inline
1925  {
1926  return scalar_fuzzy_impl<Scalar>::isApprox(x, y, precision);
1927 }
EIGEN_DEVICE_FUNC const Scalar & y
Definition: MathFunctions.h:1131

References plotDoE::x, and y.

Referenced by Eigen::test::areApprox(), aux_evalSolver(), Eigen::internal::companion< Scalar_, Deg_ >::balancedR(), basicStuffComplex(), bicgstabl(), binary_op_test(), check_extremity_accuracy(), cholesky(), contraction_batch(), contraction_both_transposed(), contraction_lhs_transposed(), contraction_rhs_transposed(), EIGEN_DECLARE_TEST(), evalSolverSugarFunction(), float_pow_test_impl(), idrs(), Eigen::AngleAxis< Scalar_ >::isApprox(), Eigen::Rotation2D< Scalar_ >::isApprox(), Eigen::UniformScaling< Scalar_ >::isApprox(), Eigen::internal::scalar_fuzzy_default_impl< Scalar, false, false >::isApproxOrLessThan(), Eigen::MatrixBase< Derived >::isIdentity(), Eigen::MatrixBase< Derived >::isUnitary(), packetmath(), packetmath_notcomplex(), quaternion(), cast_test_impl< SrcType, DstType, RowsAtCompileTime, ColsAtCompileTime >::run(), test3dRotation(), test_accelerate_ldlt(), test_accelerate_llt(), test_accelerate_qr(), test_conj_helper(), test_gaussian_sycl(), test_isApprox(), boost::multiprecision::test_isApprox(), Eigen::test_isApprox(), test_larg_expr1D(), test_larg_expr2D(), test_larg_expr3D(), test_matrix_vector(), test_multithread_contraction(), test_no_out_of_bounds(), test_scalar(), test_sycl_contraction(), test_sycl_cumsum(), test_tensor_vector(), testSingular(), testVectorType(), transformations(), trmv(), and unary_op_test().

◆ isApproxOrLessThan()

template<typename Scalar >
EIGEN_DEVICE_FUNC bool Eigen::internal::isApproxOrLessThan ( const Scalar x,
const Scalar y,
const typename NumTraits< Scalar >::Real precision = NumTraits<Scalar>::dummy_precision() 
)
inline
1932  {
1934 }
EIGEN_DEVICE_FUNC bool isApproxOrLessThan(const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1930

References plotDoE::x, and y.

Referenced by Eigen::test_isApproxOrLessThan(), and boost::multiprecision::test_isApproxOrLessThan().

◆ isfinite_impl() [1/3]

template<typename T >
EIGEN_DEVICE_FUNC bool Eigen::internal::isfinite_impl ( const std::complex< T > &  x)
1848  {
1850 }

References imag(), Eigen::numext::isfinite(), and plotDoE::x.

◆ isfinite_impl() [2/3]

template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<!(std::numeric_limits<T>::has_infinity || std::numeric_limits<T>::has_quiet_NaN || std::numeric_limits<T>::has_signaling_NaN), bool> Eigen::internal::isfinite_impl ( const T )
773  {
774  return true;
775 }

◆ isfinite_impl() [3/3]

template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<(std::numeric_limits<T>::has_infinity || std::numeric_limits<T>::has_quiet_NaN || std::numeric_limits<T>::has_signaling_NaN) && (!NumTraits<T>::IsComplex), bool> Eigen::internal::isfinite_impl ( const T x)
782  {
784  return isfinite EIGEN_NOT_A_MACRO(x);
785 }
#define EIGEN_NOT_A_MACRO
Definition: Macros.h:813

◆ isinf_impl() [1/3]

template<typename T >
EIGEN_DEVICE_FUNC bool Eigen::internal::isinf_impl ( const std::complex< T > &  x)
1858  {
1859  return ((numext::isinf)(numext::real(x)) || (numext::isinf)(numext::imag(x))) && (!(numext::isnan)(x));
1860 }
#define isnan(X)
Definition: main.h:109

References imag(), Eigen::numext::isinf(), Eigen::numext::isnan(), and plotDoE::x.

◆ isinf_impl() [2/3]

template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<!std::numeric_limits<T>::has_infinity, bool> Eigen::internal::isinf_impl ( const T )
788  {
789  return false;
790 }

◆ isinf_impl() [3/3]

template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<(std::numeric_limits<T>::has_infinity && !NumTraits<T>::IsComplex), bool> Eigen::internal::isinf_impl ( const T x)
794  {
796  return isinf EIGEN_NOT_A_MACRO(x);
797 }

◆ isMuchSmallerThan()

template<typename Scalar , typename OtherScalar >
EIGEN_DEVICE_FUNC bool Eigen::internal::isMuchSmallerThan ( const Scalar x,
const OtherScalar &  y,
const typename NumTraits< Scalar >::Real precision = NumTraits<Scalar>::dummy_precision() 
)
inline

◆ isnan_impl() [1/3]

template<typename T >
EIGEN_DEVICE_FUNC bool Eigen::internal::isnan_impl ( const std::complex< T > &  x)
1853  {
1855 }

References imag(), Eigen::numext::isnan(), and plotDoE::x.

◆ isnan_impl() [2/3]

template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t<!(std::numeric_limits<T>::has_quiet_NaN || std::numeric_limits<T>::has_signaling_NaN), bool> Eigen::internal::isnan_impl ( const T )
802  {
803  return false;
804 }

◆ isnan_impl() [3/3]

template<typename T >
EIGEN_DEVICE_FUNC std::enable_if_t< (std::numeric_limits<T>::has_quiet_NaN || std::numeric_limits<T>::has_signaling_NaN) && (!NumTraits<T>::IsComplex), bool> Eigen::internal::isnan_impl ( const T x)
810  {
812  return isnan EIGEN_NOT_A_MACRO(x);
813 }

◆ KLoop() [1/2]

template<Index num_acc, Index num_packets, bool zero, bool rhsExtraCols, bool lhsExtraRows, Index num_rhs, Index num_lhs>
EIGEN_ALWAYS_INLINE void Eigen::internal::KLoop ( const bfloat16 indexA,
const bfloat16 indexB,
__vector_quad(&)  quad_acc[num_acc],
Index  strideB,
Index  k,
Index  offsetB,
Index  extra_cols,
Index  extra_rows 
)
33  {
34  Packet8bf lhs[num_lhs], rhs[num_rhs];
35 
37  for (Index i = 0; i < (num_rhs - (rhsExtraCols ? 1 : 0)); i++) {
38  rhs[i] = loadRhsBfloat16<zero>(indexB + k * 4, strideB, i);
39  }
40  if (rhsExtraCols) {
41  rhs[num_rhs - 1] = loadRhsBfloat16<zero>(indexB + k * extra_cols - offsetB, strideB, num_rhs - 1);
42  }
43 
44  indexA += k * (lhsExtraRows ? extra_rows : num_packets);
45  if (num_lhs == 1) {
46  lhs[0] = loadBfloat16<zero>(indexA);
47  } else {
49  for (Index j = 0; j < num_lhs; j += 2) {
50  Packet8bf lhs1 = ploadu<Packet8bf>(indexA + (j + 0) * (zero ? 4 : 8));
51  if (zero) {
53  lhs[j + 0] = vec_mergeh(lhs1.m_val, lhs2.m_val);
54  lhs[j + 1] = vec_mergel(lhs1.m_val, lhs2.m_val);
55  } else {
56  lhs[j + 0] = lhs1;
57  lhs[j + 1] = ploadu<Packet8bf>(indexA + (j + 1) * 8);
58  }
59  }
60  }
61 
63  for (Index i = 0, x = 0; i < num_rhs; i++) {
65  for (Index j = 0; j < num_lhs; j++, x++) {
66  __builtin_mma_xvbf16ger2pp(&(quad_acc[x]), reinterpret_cast<Packet16uc>(rhs[i].m_val),
67  reinterpret_cast<Packet16uc>(lhs[j].m_val));
68  }
69  }
70 }
EIGEN_STRONG_INLINE Packet8bf pset1< Packet8bf >(const bfloat16 &from)
Definition: AltiVec/PacketMath.h:808
Definition: BFloat16.h:101

References BFLOAT16_UNROLL, i, j, k, Eigen::internal::eigen_packet_wrapper< T, unique_id >::m_val, ploadu< Packet8bf >(), pset1< Packet8bf >(), plotDoE::x, and zero().

◆ KLoop() [2/2]

template<Index num_acc, bool zero, bool rhsExtraCols, Index num_rhs>
EIGEN_ALWAYS_INLINE void Eigen::internal::KLoop ( const float *  indexA,
const float *  indexB,
Packet4f(&)  acc[num_acc][4],
Index  strideB,
Index  k,
Index  offsetB,
Index  extra_cols 
)
2893  {
2894  constexpr Index num_lhs = 4;
2895  Packet4f lhs[num_lhs], rhs[num_rhs];
2896 
2897  constexpr Index real_rhs = (num_rhs - (rhsExtraCols ? 2 : 0));
2898  for (Index i = 0; i < real_rhs; i += 2) {
2899  loadTwoRhsFloat32<zero>(indexB + k * 4, strideB, i, rhs[i + 0], rhs[i + 1]);
2900  }
2901  if (rhsExtraCols) {
2902  loadTwoRhsFloat32<zero>(indexB + k * extra_cols - offsetB, strideB, real_rhs, rhs[real_rhs + 0], rhs[real_rhs + 1]);
2903  }
2904 
2905  indexA += 2 * k * 4;
2906  for (Index j = 0; j < num_lhs; j++) {
2907  lhs[j] = ploadu<Packet4f>(indexA + j * 4);
2908  }
2909 
2910  for (Index j = 0; j < num_rhs; j++) {
2911  for (Index i = 0; i < num_lhs; i++) {
2912  acc[j][i] = pmadd(rhs[j], lhs[i], acc[j][i]);
2913  }
2914  }
2915 }

References i, j, k, ploadu< Packet4f >(), and pmadd().

◆ LeafSize()

template<typename T >
EIGEN_DEVICE_FUNC Index Eigen::internal::LeafSize ( )
inline
232  {
233  return 1024;
234 }

◆ LeafSize< bfloat16 >()

240  {
241  return 128;
242 }

◆ LeafSize< half >()

236  {
237  return 200;
238 }

◆ least_square_conjugate_gradient()

template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
EIGEN_DONT_INLINE void Eigen::internal::least_square_conjugate_gradient ( const MatrixType mat,
const Rhs rhs,
Dest &  x,
const Preconditioner &  precond,
Index iters,
typename Dest::RealScalar tol_error 
)

Low-level conjugate gradient algorithm for least-square problems

Parameters
matThe matrix A
rhsThe right hand side vector b
xOn input and initial solution, on output the computed solution.
precondA preconditioner being able to efficiently solve for an approximation of A'Ax=b (regardless of b)
itersOn input the max number of iteration, on output the number of performed iterations.
tol_errorOn input the tolerance error, on output an estimation of the relative error.
32  {
33  using std::abs;
34  using std::sqrt;
35  typedef typename Dest::RealScalar RealScalar;
36  typedef typename Dest::Scalar Scalar;
37  typedef Matrix<Scalar, Dynamic, 1> VectorType;
38 
39  RealScalar tol = tol_error;
40  Index maxIters = iters;
41 
42  Index m = mat.rows(), n = mat.cols();
43 
44  VectorType residual = rhs - mat * x;
45  VectorType normal_residual = mat.adjoint() * residual;
46 
47  RealScalar rhsNorm2 = (mat.adjoint() * rhs).squaredNorm();
48  if (rhsNorm2 == 0) {
49  x.setZero();
50  iters = 0;
51  tol_error = 0;
52  return;
53  }
54  RealScalar threshold = tol * tol * rhsNorm2;
55  RealScalar residualNorm2 = normal_residual.squaredNorm();
56  if (residualNorm2 < threshold) {
57  iters = 0;
58  tol_error = sqrt(residualNorm2 / rhsNorm2);
59  return;
60  }
61 
62  VectorType p(n);
63  p = precond.solve(normal_residual); // initial search direction
64 
65  VectorType z(n), tmp(m);
66  RealScalar absNew = numext::real(normal_residual.dot(p)); // the square of the absolute value of r scaled by invM
67  Index i = 0;
68  while (i < maxIters) {
69  tmp.noalias() = mat * p;
70 
71  Scalar alpha = absNew / tmp.squaredNorm(); // the amount we travel on dir
72  x += alpha * p; // update solution
73  residual -= alpha * tmp; // update residual
74  normal_residual.noalias() = mat.adjoint() * residual; // update residual of the normal equation
75 
76  residualNorm2 = normal_residual.squaredNorm();
77  if (residualNorm2 < threshold) break;
78 
79  z = precond.solve(normal_residual); // approximately solve for "A'A z = normal_residual"
80 
81  RealScalar absOld = absNew;
82  absNew = numext::real(normal_residual.dot(z)); // update the absolute value of r
83  RealScalar beta = absNew / absOld; // calculate the Gram-Schmidt value used to create the new search direction
84  p = z + beta * p; // update search direction
85  i++;
86  }
87  tol_error = sqrt(residualNorm2 / rhsNorm2);
88  iters = i;
89 }
const AdjointReturnType adjoint() const
Definition: SparseMatrixBase.h:360

References abs(), Eigen::SparseMatrixBase< Derived >::adjoint(), alpha, beta, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), i, m, n, p, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), sqrt(), tmp, and plotDoE::x.

Referenced by Eigen::LeastSquaresConjugateGradient< MatrixType_, Preconditioner_ >::_solve_vector_with_guess_impl().

◆ llt_rank_update_lower()

template<typename MatrixType , typename VectorType >
static Index Eigen::internal::llt_rank_update_lower ( MatrixType mat,
const VectorType vec,
const typename MatrixType::RealScalar sigma 
)
static
221  {
222  using std::sqrt;
223  typedef typename MatrixType::Scalar Scalar;
224  typedef typename MatrixType::RealScalar RealScalar;
225  typedef typename MatrixType::ColXpr ColXpr;
226  typedef internal::remove_all_t<ColXpr> ColXprCleaned;
227  typedef typename ColXprCleaned::SegmentReturnType ColXprSegment;
228  typedef Matrix<Scalar, Dynamic, 1> TempVectorType;
229  typedef typename TempVectorType::SegmentReturnType TempVecSegment;
230 
231  Index n = mat.cols();
232  eigen_assert(mat.rows() == n && vec.size() == n);
233 
234  TempVectorType temp;
235 
236  if (sigma > 0) {
237  // This version is based on Givens rotations.
238  // It is faster than the other one below, but only works for updates,
239  // i.e., for sigma > 0
240  temp = sqrt(sigma) * vec;
241 
242  for (Index i = 0; i < n; ++i) {
243  JacobiRotation<Scalar> g;
244  g.makeGivens(mat(i, i), -temp(i), &mat(i, i));
245 
246  Index rs = n - i - 1;
247  if (rs > 0) {
248  ColXprSegment x(mat.col(i).tail(rs));
249  TempVecSegment y(temp.tail(rs));
251  }
252  }
253  } else {
254  temp = vec;
255  RealScalar beta = 1;
256  for (Index j = 0; j < n; ++j) {
257  RealScalar Ljj = numext::real(mat.coeff(j, j));
258  RealScalar dj = numext::abs2(Ljj);
259  Scalar wj = temp.coeff(j);
260  RealScalar swj2 = sigma * numext::abs2(wj);
261  RealScalar gamma = dj * beta + swj2;
262 
263  RealScalar x = dj + swj2 / beta;
264  if (x <= RealScalar(0)) return j;
265  RealScalar nLjj = sqrt(x);
266  mat.coeffRef(j, j) = nLjj;
267  beta += swj2 / dj;
268 
269  // Update the terms of L
270  Index rs = n - j - 1;
271  if (rs) {
272  temp.tail(rs) -= (wj / Ljj) * mat.col(j).tail(rs);
274  mat.col(j).tail(rs) =
275  (nLjj / Ljj) * mat.col(j).tail(rs) + (nLjj * sigma * numext::conj(wj) / gamma) * temp.tail(rs);
276  }
277  }
278  }
279  return -1;
280 }
AnnoyingScalar conj(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:133
Scalar coeff(Index row, Index col) const
Definition: SparseMatrix.h:211
EIGEN_DEVICE_FUNC void apply_rotation_in_the_plane(DenseBase< VectorX > &xpr_x, DenseBase< VectorY > &xpr_y, const JacobiRotation< OtherScalar > &j)
Definition: Jacobi.h:400

References Eigen::numext::abs2(), apply_rotation_in_the_plane(), beta, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::coeff(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::coeffRef(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), conj(), eigen_assert, mathsFunc::gamma(), i, Eigen::numext::is_exactly_zero(), j, Eigen::JacobiRotation< Scalar >::makeGivens(), n, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), calibrate::sigma, sqrt(), plotDoE::x, and y.

Referenced by Eigen::internal::llt_inplace< Scalar, Lower >::rankUpdate(), Eigen::internal::lapacke_helpers::rank_update< Lower >::run(), and Eigen::internal::lapacke_helpers::rank_update< Upper >::run().

◆ lmpar()

template<typename Scalar >
void Eigen::internal::lmpar ( Matrix< Scalar, Dynamic, Dynamic > &  r,
const VectorXi &  ipvt,
const Matrix< Scalar, Dynamic, 1 > &  diag,
const Matrix< Scalar, Dynamic, 1 > &  qtb,
Scalar  delta,
Scalar par,
Matrix< Scalar, Dynamic, 1 > &  x 
)
10  {
11  using std::abs;
12  using std::sqrt;
13  typedef DenseIndex Index;
14 
15  /* Local variables */
16  Index i, j, l;
17  Scalar fp;
18  Scalar parc, parl;
19  Index iter;
20  Scalar temp, paru;
21  Scalar gnorm;
22  Scalar dxnorm;
23 
24  /* Function Body */
25  const Scalar dwarf = (std::numeric_limits<Scalar>::min)();
26  const Index n = r.cols();
27  eigen_assert(n == diag.size());
28  eigen_assert(n == qtb.size());
29  eigen_assert(n == x.size());
30 
31  Matrix<Scalar, Dynamic, 1> wa1, wa2;
32 
33  /* compute and store in x the gauss-newton direction. if the */
34  /* jacobian is rank-deficient, obtain a least squares solution. */
35  Index nsing = n - 1;
36  wa1 = qtb;
37  for (j = 0; j < n; ++j) {
38  if (r(j, j) == 0. && nsing == n - 1) nsing = j - 1;
39  if (nsing < n - 1) wa1[j] = 0.;
40  }
41  for (j = nsing; j >= 0; --j) {
42  wa1[j] /= r(j, j);
43  temp = wa1[j];
44  for (i = 0; i < j; ++i) wa1[i] -= r(i, j) * temp;
45  }
46 
47  for (j = 0; j < n; ++j) x[ipvt[j]] = wa1[j];
48 
49  /* initialize the iteration counter. */
50  /* evaluate the function at the origin, and test */
51  /* for acceptance of the gauss-newton direction. */
52  iter = 0;
53  wa2 = diag.cwiseProduct(x);
54  dxnorm = wa2.blueNorm();
55  fp = dxnorm - delta;
56  if (fp <= Scalar(0.1) * delta) {
57  par = 0;
58  return;
59  }
60 
61  /* if the jacobian is not rank deficient, the newton */
62  /* step provides a lower bound, parl, for the zero of */
63  /* the function. otherwise set this bound to zero. */
64  parl = 0.;
65  if (nsing >= n - 1) {
66  for (j = 0; j < n; ++j) {
67  l = ipvt[j];
68  wa1[j] = diag[l] * (wa2[l] / dxnorm);
69  }
70  // it's actually a triangularView.solveInplace(), though in a weird
71  // way:
72  for (j = 0; j < n; ++j) {
73  Scalar sum = 0.;
74  for (i = 0; i < j; ++i) sum += r(i, j) * wa1[i];
75  wa1[j] = (wa1[j] - sum) / r(j, j);
76  }
77  temp = wa1.blueNorm();
78  parl = fp / delta / temp / temp;
79  }
80 
81  /* calculate an upper bound, paru, for the zero of the function. */
82  for (j = 0; j < n; ++j) wa1[j] = r.col(j).head(j + 1).dot(qtb.head(j + 1)) / diag[ipvt[j]];
83 
84  gnorm = wa1.stableNorm();
85  paru = gnorm / delta;
86  if (paru == 0.) paru = dwarf / (std::min)(delta, Scalar(0.1));
87 
88  /* if the input par lies outside of the interval (parl,paru), */
89  /* set par to the closer endpoint. */
90  par = (std::max)(par, parl);
91  par = (std::min)(par, paru);
92  if (par == 0.) par = gnorm / dxnorm;
93 
94  /* beginning of an iteration. */
95  while (true) {
96  ++iter;
97 
98  /* evaluate the function at the current value of par. */
99  if (par == 0.) par = (std::max)(dwarf, Scalar(.001) * paru); /* Computing MAX */
100  wa1 = sqrt(par) * diag;
101 
102  Matrix<Scalar, Dynamic, 1> sdiag(n);
103  qrsolv<Scalar>(r, ipvt, wa1, qtb, x, sdiag);
104 
105  wa2 = diag.cwiseProduct(x);
106  dxnorm = wa2.blueNorm();
107  temp = fp;
108  fp = dxnorm - delta;
109 
110  /* if the function is small enough, accept the current value */
111  /* of par. also test for the exceptional cases where parl */
112  /* is zero or the number of iterations has reached 10. */
113  if (abs(fp) <= Scalar(0.1) * delta || (parl == 0. && fp <= temp && temp < 0.) || iter == 10) break;
114 
115  /* compute the newton correction. */
116  for (j = 0; j < n; ++j) {
117  l = ipvt[j];
118  wa1[j] = diag[l] * (wa2[l] / dxnorm);
119  }
120  for (j = 0; j < n; ++j) {
121  wa1[j] /= sdiag[j];
122  temp = wa1[j];
123  for (i = j + 1; i < n; ++i) wa1[i] -= r(i, j) * temp;
124  }
125  temp = wa1.blueNorm();
126  parc = fp / delta / temp / temp;
127 
128  /* depending on the sign of the function, update parl or paru. */
129  if (fp > 0.) parl = (std::max)(parl, par);
130  if (fp < 0.) paru = (std::min)(paru, par);
131 
132  /* compute an improved estimate for par. */
133  /* Computing MAX */
134  par = (std::max)(parl, par + parc);
135 
136  /* end of an iteration. */
137  }
138 
139  /* termination. */
140  if (iter == 0) par = 0.;
141  return;
142 }
string par
Definition: calibrate.py:135

References abs(), MultiOpt::delta, diag, eigen_assert, i, j, max, min, n, calibrate::par, UniformPSDSelfTest::r, sqrt(), and plotDoE::x.

◆ lmpar2() [1/2]

template<typename Scalar >
void Eigen::internal::lmpar2 ( const ColPivHouseholderQR< Matrix< Scalar, Dynamic, Dynamic > > &  qr,
const Matrix< Scalar, Dynamic, 1 > &  diag,
const Matrix< Scalar, Dynamic, 1 > &  qtb,
Scalar  delta,
Scalar par,
Matrix< Scalar, Dynamic, 1 > &  x 
)
148 {
149  using std::abs;
150  using std::sqrt;
151  typedef DenseIndex Index;
152 
153  /* Local variables */
154  Index j;
155  Scalar fp;
156  Scalar parc, parl;
157  Index iter;
158  Scalar temp, paru;
159  Scalar gnorm;
160  Scalar dxnorm;
161 
162  /* Function Body */
163  const Scalar dwarf = (std::numeric_limits<Scalar>::min)();
164  const Index n = qr.matrixQR().cols();
165  eigen_assert(n == diag.size());
166  eigen_assert(n == qtb.size());
167 
168  Matrix<Scalar, Dynamic, 1> wa1, wa2;
169 
170  /* compute and store in x the gauss-newton direction. if the */
171  /* jacobian is rank-deficient, obtain a least squares solution. */
172 
173  // const Index rank = qr.nonzeroPivots(); // exactly double(0.)
174  const Index rank = qr.rank(); // use a threshold
175  wa1 = qtb;
176  wa1.tail(n - rank).setZero();
177  qr.matrixQR().topLeftCorner(rank, rank).template triangularView<Upper>().solveInPlace(wa1.head(rank));
178 
179  x = qr.colsPermutation() * wa1;
180 
181  /* initialize the iteration counter. */
182  /* evaluate the function at the origin, and test */
183  /* for acceptance of the gauss-newton direction. */
184  iter = 0;
185  wa2 = diag.cwiseProduct(x);
186  dxnorm = wa2.blueNorm();
187  fp = dxnorm - delta;
188  if (fp <= Scalar(0.1) * delta) {
189  par = 0;
190  return;
191  }
192 
193  /* if the jacobian is not rank deficient, the newton */
194  /* step provides a lower bound, parl, for the zero of */
195  /* the function. otherwise set this bound to zero. */
196  parl = 0.;
197  if (rank == n) {
198  wa1 = qr.colsPermutation().inverse() * diag.cwiseProduct(wa2) / dxnorm;
199  qr.matrixQR().topLeftCorner(n, n).transpose().template triangularView<Lower>().solveInPlace(wa1);
200  temp = wa1.blueNorm();
201  parl = fp / delta / temp / temp;
202  }
203 
204  /* calculate an upper bound, paru, for the zero of the function. */
205  for (j = 0; j < n; ++j)
206  wa1[j] = qr.matrixQR().col(j).head(j + 1).dot(qtb.head(j + 1)) / diag[qr.colsPermutation().indices()(j)];
207 
208  gnorm = wa1.stableNorm();
209  paru = gnorm / delta;
210  if (paru == 0.) paru = dwarf / (std::min)(delta, Scalar(0.1));
211 
212  /* if the input par lies outside of the interval (parl,paru), */
213  /* set par to the closer endpoint. */
214  par = (std::max)(par, parl);
215  par = (std::min)(par, paru);
216  if (par == 0.) par = gnorm / dxnorm;
217 
218  /* beginning of an iteration. */
219  Matrix<Scalar, Dynamic, Dynamic> s = qr.matrixQR();
220  while (true) {
221  ++iter;
222 
223  /* evaluate the function at the current value of par. */
224  if (par == 0.) par = (std::max)(dwarf, Scalar(.001) * paru); /* Computing MAX */
225  wa1 = sqrt(par) * diag;
226 
227  Matrix<Scalar, Dynamic, 1> sdiag(n);
228  qrsolv<Scalar>(s, qr.colsPermutation().indices(), wa1, qtb, x, sdiag);
229 
230  wa2 = diag.cwiseProduct(x);
231  dxnorm = wa2.blueNorm();
232  temp = fp;
233  fp = dxnorm - delta;
234 
235  /* if the function is small enough, accept the current value */
236  /* of par. also test for the exceptional cases where parl */
237  /* is zero or the number of iterations has reached 10. */
238  if (abs(fp) <= Scalar(0.1) * delta || (parl == 0. && fp <= temp && temp < 0.) || iter == 10) break;
239 
240  /* compute the newton correction. */
241  wa1 = qr.colsPermutation().inverse() * diag.cwiseProduct(wa2 / dxnorm);
242  // we could almost use this here, but the diagonal is outside qr, in sdiag[]
243  // qr.matrixQR().topLeftCorner(n, n).transpose().template triangularView<Lower>().solveInPlace(wa1);
244  for (j = 0; j < n; ++j) {
245  wa1[j] /= sdiag[j];
246  temp = wa1[j];
247  for (Index i = j + 1; i < n; ++i) wa1[i] -= s(i, j) * temp;
248  }
249  temp = wa1.blueNorm();
250  parc = fp / delta / temp / temp;
251 
252  /* depending on the sign of the function, update parl or paru. */
253  if (fp > 0.) parl = (std::max)(parl, par);
254  if (fp < 0.) paru = (std::min)(paru, par);
255 
256  /* compute an improved estimate for par. */
257  par = (std::max)(parl, par + parc);
258  }
259  if (iter == 0) par = 0.;
260  return;
261 }

References abs(), MultiOpt::delta, diag, eigen_assert, i, j, max, min, n, calibrate::par, qr(), s, Eigen::PlainObjectBase< Derived >::setZero(), sqrt(), and plotDoE::x.

◆ lmpar2() [2/2]

template<typename QRSolver , typename VectorType >
void Eigen::internal::lmpar2 ( const QRSolver &  qr,
const VectorType diag,
const VectorType qtb,
typename VectorType::Scalar  m_delta,
typename VectorType::Scalar par,
VectorType x 
)
26 {
27  using std::abs;
28  using std::sqrt;
29  typedef typename QRSolver::MatrixType MatrixType;
30  typedef typename QRSolver::Scalar Scalar;
31  // typedef typename QRSolver::StorageIndex StorageIndex;
32 
33  /* Local variables */
34  Index j;
35  Scalar fp;
36  Scalar parc, parl;
37  Index iter;
38  Scalar temp, paru;
39  Scalar gnorm;
40  Scalar dxnorm;
41 
42  // Make a copy of the triangular factor.
43  // This copy is modified during call the qrsolv
44  MatrixType s;
45  s = qr.matrixR();
46 
47  /* Function Body */
48  const Scalar dwarf = (std::numeric_limits<Scalar>::min)();
49  const Index n = qr.matrixR().cols();
50  eigen_assert(n == diag.size());
51  eigen_assert(n == qtb.size());
52 
53  VectorType wa1, wa2;
54 
55  /* compute and store in x the gauss-newton direction. if the */
56  /* jacobian is rank-deficient, obtain a least squares solution. */
57 
58  // const Index rank = qr.nonzeroPivots(); // exactly double(0.)
59  const Index rank = qr.rank(); // use a threshold
60  wa1 = qtb;
61  wa1.tail(n - rank).setZero();
62  // FIXME There is no solve in place for sparse triangularView
63  wa1.head(rank) = s.topLeftCorner(rank, rank).template triangularView<Upper>().solve(qtb.head(rank));
64 
65  x = qr.colsPermutation() * wa1;
66 
67  /* initialize the iteration counter. */
68  /* evaluate the function at the origin, and test */
69  /* for acceptance of the gauss-newton direction. */
70  iter = 0;
71  wa2 = diag.cwiseProduct(x);
72  dxnorm = wa2.blueNorm();
73  fp = dxnorm - m_delta;
74  if (fp <= Scalar(0.1) * m_delta) {
75  par = 0;
76  return;
77  }
78 
79  /* if the jacobian is not rank deficient, the newton */
80  /* step provides a lower bound, parl, for the zero of */
81  /* the function. otherwise set this bound to zero. */
82  parl = 0.;
83  if (rank == n) {
84  wa1 = qr.colsPermutation().inverse() * diag.cwiseProduct(wa2) / dxnorm;
85  s.topLeftCorner(n, n).transpose().template triangularView<Lower>().solveInPlace(wa1);
86  temp = wa1.blueNorm();
87  parl = fp / m_delta / temp / temp;
88  }
89 
90  /* calculate an upper bound, paru, for the zero of the function. */
91  for (j = 0; j < n; ++j) wa1[j] = s.col(j).head(j + 1).dot(qtb.head(j + 1)) / diag[qr.colsPermutation().indices()(j)];
92 
93  gnorm = wa1.stableNorm();
94  paru = gnorm / m_delta;
95  if (paru == 0.) paru = dwarf / (std::min)(m_delta, Scalar(0.1));
96 
97  /* if the input par lies outside of the interval (parl,paru), */
98  /* set par to the closer endpoint. */
99  par = (std::max)(par, parl);
100  par = (std::min)(par, paru);
101  if (par == 0.) par = gnorm / dxnorm;
102 
103  /* beginning of an iteration. */
104  while (true) {
105  ++iter;
106 
107  /* evaluate the function at the current value of par. */
108  if (par == 0.) par = (std::max)(dwarf, Scalar(.001) * paru); /* Computing MAX */
109  wa1 = sqrt(par) * diag;
110 
111  VectorType sdiag(n);
112  lmqrsolv(s, qr.colsPermutation(), wa1, qtb, x, sdiag);
113 
114  wa2 = diag.cwiseProduct(x);
115  dxnorm = wa2.blueNorm();
116  temp = fp;
117  fp = dxnorm - m_delta;
118 
119  /* if the function is small enough, accept the current value */
120  /* of par. also test for the exceptional cases where parl */
121  /* is zero or the number of iterations has reached 10. */
122  if (abs(fp) <= Scalar(0.1) * m_delta || (parl == 0. && fp <= temp && temp < 0.) || iter == 10) break;
123 
124  /* compute the newton correction. */
125  wa1 = qr.colsPermutation().inverse() * diag.cwiseProduct(wa2 / dxnorm);
126  // we could almost use this here, but the diagonal is outside qr, in sdiag[]
127  for (j = 0; j < n; ++j) {
128  wa1[j] /= sdiag[j];
129  temp = wa1[j];
130  for (Index i = j + 1; i < n; ++i) wa1[i] -= s.coeff(i, j) * temp;
131  }
132  temp = wa1.blueNorm();
133  parc = fp / m_delta / temp / temp;
134 
135  /* depending on the sign of the function, update parl or paru. */
136  if (fp > 0.) parl = (std::max)(parl, par);
137  if (fp < 0.) paru = (std::min)(paru, par);
138 
139  /* compute an improved estimate for par. */
140  par = (std::max)(parl, par + parc);
141  }
142  if (iter == 0) par = 0.;
143  return;
144 }
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
void lmqrsolv(Matrix< Scalar, Rows, Cols > &s, const PermutationMatrix< Dynamic, Dynamic, PermIndex > &iPerm, const Matrix< Scalar, Dynamic, 1 > &diag, const Matrix< Scalar, Dynamic, 1 > &qtb, Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &sdiag)
Definition: LMqrsolv.h:26

References abs(), diag, eigen_assert, i, j, lmqrsolv(), max, min, n, calibrate::par, qr(), s, sqrt(), and plotDoE::x.

Referenced by Eigen::LevenbergMarquardt< FunctorType_ >::minimizeOneStep().

◆ lmqrsolv() [1/2]

template<typename Scalar , int Rows, int Cols, typename PermIndex >
void Eigen::internal::lmqrsolv ( Matrix< Scalar, Rows, Cols > &  s,
const PermutationMatrix< Dynamic, Dynamic, PermIndex > &  iPerm,
const Matrix< Scalar, Dynamic, 1 > &  diag,
const Matrix< Scalar, Dynamic, 1 > &  qtb,
Matrix< Scalar, Dynamic, 1 > &  x,
Matrix< Scalar, Dynamic, 1 > &  sdiag 
)
28  {
29  /* Local variables */
30  Index i, j, k;
31  Scalar temp;
32  Index n = s.cols();
33  Matrix<Scalar, Dynamic, 1> wa(n);
34  JacobiRotation<Scalar> givens;
35 
36  /* Function Body */
37  // the following will only change the lower triangular part of s, including
38  // the diagonal, though the diagonal is restored afterward
39 
40  /* copy r and (q transpose)*b to preserve input and initialize s. */
41  /* in particular, save the diagonal elements of r in x. */
42  x = s.diagonal();
43  wa = qtb;
44 
45  s.topLeftCorner(n, n).template triangularView<StrictlyLower>() = s.topLeftCorner(n, n).transpose();
46  /* eliminate the diagonal matrix d using a givens rotation. */
47  for (j = 0; j < n; ++j) {
48  /* prepare the row of d to be eliminated, locating the */
49  /* diagonal element using p from the qr factorization. */
50  const PermIndex l = iPerm.indices()(j);
51  if (diag[l] == 0.) break;
52  sdiag.tail(n - j).setZero();
53  sdiag[j] = diag[l];
54 
55  /* the transformations to eliminate the row of d */
56  /* modify only a single element of (q transpose)*b */
57  /* beyond the first n, which is initially zero. */
58  Scalar qtbpj = 0.;
59  for (k = j; k < n; ++k) {
60  /* determine a givens rotation which eliminates the */
61  /* appropriate element in the current row of d. */
62  givens.makeGivens(-s(k, k), sdiag[k]);
63 
64  /* compute the modified diagonal element of r and */
65  /* the modified element of ((q transpose)*b,0). */
66  s(k, k) = givens.c() * s(k, k) + givens.s() * sdiag[k];
67  temp = givens.c() * wa[k] + givens.s() * qtbpj;
68  qtbpj = -givens.s() * wa[k] + givens.c() * qtbpj;
69  wa[k] = temp;
70 
71  /* accumulate the transformation in the row of s. */
72  for (i = k + 1; i < n; ++i) {
73  temp = givens.c() * s(i, k) + givens.s() * sdiag[i];
74  sdiag[i] = -givens.s() * s(i, k) + givens.c() * sdiag[i];
75  s(i, k) = temp;
76  }
77  }
78  }
79 
80  /* solve the triangular system for z. if the system is */
81  /* singular, then obtain a least squares solution. */
82  Index nsing;
83  for (nsing = 0; nsing < n && sdiag[nsing] != 0; nsing++) {
84  }
85 
86  wa.tail(n - nsing).setZero();
87  s.topLeftCorner(nsing, nsing).transpose().template triangularView<Upper>().solveInPlace(wa.head(nsing));
88 
89  // restore
90  sdiag = s.diagonal();
91  s.diagonal() = x;
92 
93  /* permute the components of z back to components of x. */
94  x = iPerm * wa;
95 }

References Eigen::JacobiRotation< Scalar >::c(), diag, i, Eigen::PermutationMatrix< SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_ >::indices(), j, k, Eigen::JacobiRotation< Scalar >::makeGivens(), n, s, Eigen::JacobiRotation< Scalar >::s(), Eigen::PlainObjectBase< Derived >::setZero(), and plotDoE::x.

Referenced by lmpar2().

◆ lmqrsolv() [2/2]

template<typename Scalar , int Options_, typename Index >
void Eigen::internal::lmqrsolv ( SparseMatrix< Scalar, Options_, Index > &  s,
const PermutationMatrix< Dynamic, Dynamic > &  iPerm,
const Matrix< Scalar, Dynamic, 1 > &  diag,
const Matrix< Scalar, Dynamic, 1 > &  qtb,
Matrix< Scalar, Dynamic, 1 > &  x,
Matrix< Scalar, Dynamic, 1 > &  sdiag 
)
100  {
101  /* Local variables */
102  typedef SparseMatrix<Scalar, RowMajor, Index> FactorType;
103  Index i, j, k, l;
104  Scalar temp;
105  Index n = s.cols();
106  Matrix<Scalar, Dynamic, 1> wa(n);
107  JacobiRotation<Scalar> givens;
108 
109  /* Function Body */
110  // the following will only change the lower triangular part of s, including
111  // the diagonal, though the diagonal is restored afterward
112 
113  /* copy r and (q transpose)*b to preserve input and initialize R. */
114  wa = qtb;
115  FactorType R(s);
116  // Eliminate the diagonal matrix d using a givens rotation
117  for (j = 0; j < n; ++j) {
118  // Prepare the row of d to be eliminated, locating the
119  // diagonal element using p from the qr factorization
120  l = iPerm.indices()(j);
121  if (diag(l) == Scalar(0)) break;
122  sdiag.tail(n - j).setZero();
123  sdiag[j] = diag[l];
124  // the transformations to eliminate the row of d
125  // modify only a single element of (q transpose)*b
126  // beyond the first n, which is initially zero.
127 
128  Scalar qtbpj = 0;
129  // Browse the nonzero elements of row j of the upper triangular s
130  for (k = j; k < n; ++k) {
131  typename FactorType::InnerIterator itk(R, k);
132  for (; itk; ++itk) {
133  if (itk.index() < k)
134  continue;
135  else
136  break;
137  }
138  // At this point, we have the diagonal element R(k,k)
139  // Determine a givens rotation which eliminates
140  // the appropriate element in the current row of d
141  givens.makeGivens(-itk.value(), sdiag(k));
142 
143  // Compute the modified diagonal element of r and
144  // the modified element of ((q transpose)*b,0).
145  itk.valueRef() = givens.c() * itk.value() + givens.s() * sdiag(k);
146  temp = givens.c() * wa(k) + givens.s() * qtbpj;
147  qtbpj = -givens.s() * wa(k) + givens.c() * qtbpj;
148  wa(k) = temp;
149 
150  // Accumulate the transformation in the remaining k row/column of R
151  for (++itk; itk; ++itk) {
152  i = itk.index();
153  temp = givens.c() * itk.value() + givens.s() * sdiag(i);
154  sdiag(i) = -givens.s() * itk.value() + givens.c() * sdiag(i);
155  itk.valueRef() = temp;
156  }
157  }
158  }
159 
160  // Solve the triangular system for z. If the system is
161  // singular, then obtain a least squares solution
162  Index nsing;
163  for (nsing = 0; nsing < n && sdiag(nsing) != 0; nsing++) {
164  }
165 
166  wa.tail(n - nsing).setZero();
167  // x = wa;
168  wa.head(nsing) = R.topLeftCorner(nsing, nsing).template triangularView<Upper>().solve /*InPlace*/ (wa.head(nsing));
169 
170  sdiag = R.diagonal();
171  // Permute the components of z back to components of x
172  x = iPerm * wa;
173 }
const IndicesType & indices() const
Definition: PermutationMatrix.h:334

References Eigen::JacobiRotation< Scalar >::c(), diag, i, Eigen::PermutationMatrix< SizeAtCompileTime, MaxSizeAtCompileTime, StorageIndex_ >::indices(), j, k, Eigen::JacobiRotation< Scalar >::makeGivens(), n, R, s, Eigen::JacobiRotation< Scalar >::s(), Eigen::PlainObjectBase< Derived >::setZero(), and plotDoE::x.

◆ loadAndMultiplyF32()

EIGEN_ALWAYS_INLINE Packet4f Eigen::internal::loadAndMultiplyF32 ( Packet4f  acc,
const Packet4f  pAlpha,
float *  result 
)
2633  {
2634  Packet4f result_block = ploadu<Packet4f>(result);
2635  return pmadd(acc, pAlpha, result_block);
2636 }

References ploadu< Packet4f >(), and pmadd().

Referenced by storeResults().

◆ loadBF16fromResult()

template<bool non_unit_stride, Index delta>
EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::loadBF16fromResult ( bfloat16 src,
Index  resInc 
)
2714  {
2715  if (non_unit_stride) {
2716  return pgather<bfloat16, Packet8bf>(src + delta * resInc, resInc);
2717  } else {
2718  return ploadu<Packet8bf>(src + delta);
2719  }
2720 }
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8bf pgather< bfloat16, Packet8bf >(const bfloat16 *from, Index stride)
Definition: AltiVec/PacketMath.h:874

References MultiOpt::delta, pgather< bfloat16, Packet8bf >(), and ploadu< Packet8bf >().

◆ loadBfloat16()

template<bool zero>
EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::loadBfloat16 ( const bfloat16 indexA)
15  {
16  Packet8bf lhs1 = ploadu<Packet8bf>(indexA);
17  if (zero) {
19  return vec_mergeh(lhs1.m_val, lhs2.m_val);
20  } else {
21  return lhs1;
22  }
23 }

References Eigen::internal::eigen_packet_wrapper< T, unique_id >::m_val, ploadu< Packet8bf >(), pset1< Packet8bf >(), and zero().

◆ loadColData()

template<typename RhsMapper , bool linear>
EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::loadColData ( RhsMapper &  rhs,
Index  j 
)

◆ loadConstant()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T Eigen::internal::loadConstant ( const T address)

◆ loadQuadToDoublePacket() [1/2]

template<typename Scalar , typename RealPacket >
void Eigen::internal::loadQuadToDoublePacket ( const Scalar b,
DoublePacket< RealPacket > &  dest 
)

◆ loadQuadToDoublePacket() [2/2]

template<typename Scalar , typename RealPacket >
void Eigen::internal::loadQuadToDoublePacket ( const Scalar b,
DoublePacket< RealPacket > &  dest,
std::enable_if_t< unpacket_traits< RealPacket >::size==16 > *  = 0 
)
676  {
677  // yes, that's pretty hackish too :(
678  typedef typename NumTraits<Scalar>::Real RealScalar;
679  RealScalar r[4] = {numext::real(b[0]), numext::real(b[0]), numext::real(b[1]), numext::real(b[1])};
680  RealScalar i[4] = {numext::imag(b[0]), numext::imag(b[0]), numext::imag(b[1]), numext::imag(b[1])};
681  dest.first = ploadquad<RealPacket>(r);
682  dest.second = ploadquad<RealPacket>(i);
683 }
T Real
Definition: NumTraits.h:183

References b, Eigen::internal::DoublePacket< Packet >::first, i, imag(), UniformPSDSelfTest::r, and Eigen::internal::DoublePacket< Packet >::second.

◆ loadRhsBfloat16()

template<bool zero>
EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::loadRhsBfloat16 ( const bfloat16 blockB,
Index  strideB,
Index  i 
)
26  {
27  return loadBfloat16<zero>(blockB + strideB * i);
28 }

References i.

◆ loadTwoRhsFloat32()

template<bool zero>
EIGEN_ALWAYS_INLINE void Eigen::internal::loadTwoRhsFloat32 ( const float *  block,
Index  strideB,
Index  i,
Packet4f dhs0,
Packet4f dhs1 
)
2880  {
2881  dhs0 = ploadu<Packet4f>(block + strideB * i + 0);
2882  if (zero) {
2883  Packet4f dhs2 = pset1<Packet4f>(float(0));
2884  dhs1 = vec_mergel(dhs0, dhs2);
2885  dhs0 = vec_mergeh(dhs0, dhs2);
2886  } else {
2887  dhs1 = ploadu<Packet4f>(block + strideB * i + 4);
2888  }
2889 }

References block(), i, ploadu< Packet4f >(), pset1< Packet4f >(), and zero().

◆ loadVecLoop()

template<Index num_acc, typename LhsMapper , bool zero>
EIGEN_ALWAYS_INLINE void Eigen::internal::loadVecLoop ( Index  k,
LhsMapper &  lhs,
Packet8bf(&)  a0[num_acc],
Packet8bf  b1 
)
368  {
369  a0[k + 0] = lhs.template loadPacket<Packet8bf>(k * 4, 0);
370  if (!zero) {
371  b1 = lhs.template loadPacket<Packet8bf>(k * 4, 1);
372  }
373  if (num_acc > (k + 1)) {
374  a0[k + 1] = vec_mergel(a0[k + 0].m_val, b1.m_val);
375  }
376  a0[k + 0] = vec_mergeh(a0[k + 0].m_val, b1.m_val);
377 }

References k, Eigen::internal::eigen_packet_wrapper< T, unique_id >::m_val, and zero().

◆ log2_ceil()

template<typename BitsType >
int Eigen::internal::log2_ceil ( const BitsType &  x)
758  {
759  return log_2_impl<BitsType>::run_ceil(x);
760 }

Referenced by Eigen::CoreThreadPoolDevice::calculateLevels(), and Eigen::internal::random_int_impl< Scalar, false, true >::run().

◆ log2_floor()

template<typename BitsType >
int Eigen::internal::log2_floor ( const BitsType &  x)
763  {
764  return log_2_impl<BitsType>::run_floor(x);
765 }

◆ logical_xor()

◆ LUnumTempV()

Index Eigen::internal::LUnumTempV ( Index m,
Index w,
Index t,
Index b 
)
inline
42 { return (std::max)(m, (t + b) * w); }

References b, m, max, plotPSD::t, and w.

Referenced by Eigen::SparseLU< MatrixType_, OrderingType_ >::factorize().

◆ LUTempSpace()

template<typename Scalar >
Index Eigen::internal::LUTempSpace ( Index m,
Index w 
)
inline
45  {
46  return (2 * w + 4 + LUNoMarker) * m * sizeof(Index) + (w + 1) * m * sizeof(Scalar);
47 }

References LUNoMarker, m, and w.

◆ main_igamma_term()

template<typename Scalar >
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar Eigen::internal::main_igamma_term ( Scalar  a,
Scalar  x 
)
static
809  {
810  /* Compute x**a * exp(-x) / gamma(a) */
811  Scalar logax = a * numext::log(x) - x - lgamma_impl<Scalar>::run(a);
812  if (logax < -numext::log(NumTraits<Scalar>::highest()) ||
813  // Assuming x and a aren't Nan.
814  (numext::isnan)(logax)) {
815  return Scalar(0);
816  }
817  return numext::exp(logax);
818 }

References a, Eigen::numext::exp(), Eigen::numext::isnan(), Eigen::numext::log(), Eigen::internal::lgamma_impl< Scalar >::run(), and Eigen::numext::x.

◆ make_block_householder_triangular_factor()

template<typename TriangularFactorType , typename VectorsType , typename CoeffsType >
void Eigen::internal::make_block_householder_triangular_factor ( TriangularFactorType &  triFactor,
const VectorsType &  vectors,
const CoeffsType &  hCoeffs 
)
56  {
57  const Index nbVecs = vectors.cols();
58  eigen_assert(triFactor.rows() == nbVecs && triFactor.cols() == nbVecs && vectors.rows() >= nbVecs);
59 
60  for (Index i = nbVecs - 1; i >= 0; --i) {
61  Index rs = vectors.rows() - i - 1;
62  Index rt = nbVecs - i - 1;
63 
64  if (rt > 0) {
65  triFactor.row(i).tail(rt).noalias() = -hCoeffs(i) * vectors.col(i).tail(rs).adjoint() *
66  vectors.bottomRightCorner(rs, rt).template triangularView<UnitLower>();
67 
68  // FIXME use the following line with .noalias() once the triangular product can work inplace
69  // triFactor.row(i).tail(rt) = triFactor.row(i).tail(rt) * triFactor.bottomRightCorner(rt,rt).template
70  // triangularView<Upper>();
71  for (Index j = nbVecs - 1; j > i; --j) {
72  typename TriangularFactorType::Scalar z = triFactor(i, j);
73  triFactor(i, j) = z * triFactor(j, j);
74  if (nbVecs - j - 1 > 0) triFactor.row(i).tail(nbVecs - j - 1) += z * triFactor.row(j).tail(nbVecs - j - 1);
75  }
76  }
77  triFactor(i, i) = hCoeffs(i);
78  }
79 }

References eigen_assert, i, and j.

Referenced by apply_block_householder_on_the_left().

◆ make_packet2d()

EIGEN_ALWAYS_INLINE Packet2d Eigen::internal::make_packet2d ( double  a,
double  b 
)
145  {
146  double from[2] = {a, b};
147  return (Packet2d)__lsx_vld(from, 0);
148 }

References a, and b.

Referenced by paddsub< Packet2d >(), pnegate(), and shuffle().

◆ make_packet2f()

EIGEN_ALWAYS_INLINE Packet2f Eigen::internal::make_packet2f ( float  a,
float  b 
)
95 { return Packet2f{a, b}; }
float32x2_t Packet2f
Definition: NEON/PacketMath.h:75

References a, and b.

Referenced by paddsub< Packet2f >().

◆ make_packet4f()

EIGEN_ALWAYS_INLINE Packet4f Eigen::internal::make_packet4f ( float  a,
float  b,
float  c,
float  d 
)
92  {
93  float from[4] = {a, b, c, d};
94  return (Packet4f)__lsx_vld(from, 0);
95 }

References a, b, and calibrate::c.

Referenced by paddsub< Packet4f >(), shuffle1(), shuffle2(), and shuffle2< true >().

◆ MakeCoherentCwiseBinaryOp()

template<typename Op , typename LhsDerivativeType , typename RhsDerivativeType >
auto Eigen::internal::MakeCoherentCwiseBinaryOp ( const LhsDerivativeType &  x,
const RhsDerivativeType &  y,
Op  op = Op() 
)
52  {
53  const auto& lhs = MaybeCoherentPad(x, y);
54  const auto& rhs = MaybeCoherentPad(y, x);
55  return CwiseBinaryOp<Op, remove_all_t<decltype(lhs)>, remove_all_t<decltype(rhs)>>(lhs, rhs, op);
56 }
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition: CwiseBinaryOp.h:79
char char * op
Definition: level2_impl.h:374
typename remove_all< T >::type remove_all_t
Definition: Meta.h:142
maybe_coherent_pad_helper< DerivativeType, OtherDerivativeType >::type MaybeCoherentPad(const DerivativeType &x, const OtherDerivativeType &y)
Definition: AutoDiffScalar.h:46

References MaybeCoherentPad(), op, plotDoE::x, and y.

Referenced by Eigen::AutoDiffScalar< DerivativeType >::operator*(), Eigen::AutoDiffScalar< DerivativeType >::operator+(), Eigen::AutoDiffScalar< DerivativeType >::operator-(), and Eigen::AutoDiffScalar< DerivativeType >::operator/().

◆ manage_caching_sizes()

void Eigen::internal::manage_caching_sizes ( Action  action,
std::ptrdiff_t *  l1,
std::ptrdiff_t *  l2,
std::ptrdiff_t *  l3 
)
inline
86  {
87  static CacheSizes m_cacheSizes;
88 
89  if (action == SetAction) {
90  // set the cpu cache size and cache all block sizes from a global cache size in byte
91  eigen_internal_assert(l1 != 0 && l2 != 0);
92  m_cacheSizes.m_l1 = *l1;
93  m_cacheSizes.m_l2 = *l2;
94  m_cacheSizes.m_l3 = *l3;
95  } else if (action == GetAction) {
96  eigen_internal_assert(l1 != 0 && l2 != 0);
97  *l1 = m_cacheSizes.m_l1;
98  *l2 = m_cacheSizes.m_l2;
99  *l3 = m_cacheSizes.m_l3;
100  } else {
101  eigen_internal_assert(false);
102  }
103 }
@ SetAction
Definition: Constants.h:516
action
Definition: calibrate.py:47

References calibrate::action, eigen_internal_assert, Eigen::GetAction, Eigen::internal::CacheSizes::m_l1, Eigen::internal::CacheSizes::m_l2, Eigen::internal::CacheSizes::m_l3, and Eigen::SetAction.

Referenced by evaluateProductBlockingSizesHeuristic(), Eigen::l1CacheSize(), Eigen::l2CacheSize(), Eigen::l3CacheSize(), Eigen::internal::triangular_solve_matrix< Scalar, Index, OnTheLeft, Mode, Conjugate, TriStorageOrder, ColMajor, OtherInnerStride >::run(), Eigen::internal::triangular_solve_matrix< Scalar, Index, OnTheRight, Mode, Conjugate, TriStorageOrder, ColMajor, OtherInnerStride >::run(), and Eigen::setCpuCacheSizes().

◆ manage_caching_sizes_helper()

std::ptrdiff_t Eigen::internal::manage_caching_sizes_helper ( std::ptrdiff_t  a,
std::ptrdiff_t  b 
)
inline
Returns
b if a<=0, and returns a otherwise.
27 { return a <= 0 ? b : a; }

References a, and b.

Referenced by Eigen::internal::CacheSizes::CacheSizes().

◆ manage_multi_threading()

void Eigen::internal::manage_multi_threading ( Action  action,
int v 
)
inline
95  {
96  if (action == SetAction) {
97  eigen_internal_assert(v != nullptr);
98  } else if (action == GetAction) {
99  eigen_internal_assert(v != nullptr);
100  *v = 1;
101  } else {
102  eigen_internal_assert(false);
103  }
104 }

References calibrate::action, eigen_internal_assert, Eigen::GetAction, Eigen::SetAction, and v.

Referenced by Eigen::nbThreads(), and Eigen::setNbThreads().

◆ map_superlu()

template<typename Scalar , int Flags, typename Index >
Map<SparseMatrix<Scalar, Flags, Index> > Eigen::internal::map_superlu ( SluMatrix sluMat)

View a Super LU matrix as an Eigen expression

260  {
261  eigen_assert(((Flags & RowMajor) == RowMajor && sluMat.Stype == SLU_NR) ||
262  ((Flags & ColMajor) == ColMajor && sluMat.Stype == SLU_NC));
263 
264  Index outerSize = (Flags & RowMajor) == RowMajor ? sluMat.ncol : sluMat.nrow;
265 
266  return Map<SparseMatrix<Scalar, Flags, Index> >(sluMat.nrow, sluMat.ncol, sluMat.storage.outerInd[outerSize],
267  sluMat.storage.outerInd, sluMat.storage.innerInd,
268  reinterpret_cast<Scalar *>(sluMat.storage.values));
269 }
Extend namespace for flags.
Definition: fsi_chan_precond_driver.cc:56
@ SLU_NC
Definition: oomph_superlu_4.3/supermatrix.h:12
@ SLU_NR
Definition: oomph_superlu_4.3/supermatrix.h:16

References Eigen::ColMajor, eigen_assert, Eigen::SluMatrix::innerInd, SuperMatrix::ncol, SuperMatrix::nrow, Eigen::SluMatrix::outerInd, Eigen::RowMajor, SLU_NC, SLU_NR, Eigen::SluMatrix::storage, SuperMatrix::Stype, and Eigen::SluMatrix::values.

◆ matrix_exp_compute() [1/2]

template<typename ArgType , typename ResultType >
void Eigen::internal::matrix_exp_compute ( const ArgType &  arg,
ResultType &  result,
false_type   
)
383 {
384  typedef typename ArgType::PlainObject MatrixType;
385  typedef typename traits<MatrixType>::Scalar Scalar;
386  typedef typename NumTraits<Scalar>::Real RealScalar;
387  typedef typename std::complex<RealScalar> ComplexScalar;
388  result = arg.matrixFunction(internal::stem_function_exp<ComplexScalar>);
389 }

◆ matrix_exp_compute() [2/2]

template<typename ArgType , typename ResultType >
void Eigen::internal::matrix_exp_compute ( const ArgType &  arg,
ResultType &  result,
true_type   
)
365 {
366  typedef typename ArgType::PlainObject MatrixType;
367  MatrixType U, V;
368  int squarings;
369  matrix_exp_computeUV<MatrixType>::run(arg, U, V, squarings); // Pade approximant is (U+V) / (-U+V)
370  MatrixType numer = U + V;
371  MatrixType denom = -U + V;
372  result = denom.partialPivLu().solve(numer);
373  for (int i = 0; i < squarings; i++) result *= result; // undo scaling by repeated squaring
374 }

References i, Eigen::internal::matrix_exp_computeUV< MatrixType, RealScalar >::run(), RachelsAdvectionDiffusion::U, and V.

Referenced by Eigen::MatrixExponentialReturnValue< Derived >::evalTo().

◆ matrix_exp_pade13()

template<typename MatA , typename MatU , typename MatV >
void Eigen::internal::matrix_exp_pade13 ( const MatA &  A,
MatU &  U,
MatV &  V 
)

Compute the (13,13)-Padé approximant to the exponential.

After exit, \( (V+U)(V-U)^{-1} \) is the Padé approximant of \( \exp(A) \) around \( A = 0 \).

136  {
137  typedef typename MatA::PlainObject MatrixType;
139  const RealScalar b[] = {64764752532480000.L,
140  32382376266240000.L,
141  7771770303897600.L,
142  1187353796428800.L,
143  129060195264000.L,
144  10559470521600.L,
145  670442572800.L,
146  33522128640.L,
147  1323241920.L,
148  40840800.L,
149  960960.L,
150  16380.L,
151  182.L,
152  1.L};
153  const MatrixType A2 = A * A;
154  const MatrixType A4 = A2 * A2;
155  const MatrixType A6 = A4 * A2;
156  V = b[13] * A6 + b[11] * A4 + b[9] * A2; // used for temporary storage
157  MatrixType tmp = A6 * V;
158  tmp += b[7] * A6 + b[5] * A4 + b[3] * A2 + b[1] * MatrixType::Identity(A.rows(), A.cols());
159  U.noalias() = A * tmp;
160  tmp = b[12] * A6 + b[10] * A4 + b[8] * A2;
161  V.noalias() = A6 * tmp;
162  V += b[6] * A6 + b[4] * A4 + b[2] * A2 + b[0] * MatrixType::Identity(A.rows(), A.cols());
163 }
boost::multiprecision::number< boost::multiprecision::cpp_dec_float< 100 >, boost::multiprecision::et_on > Real
Definition: boostmultiprec.cpp:77

References b, Eigen::PlainObjectBase< Derived >::cols(), Eigen::PlainObjectBase< Derived >::rows(), tmp, RachelsAdvectionDiffusion::U, and V.

Referenced by Eigen::internal::matrix_exp_computeUV< MatrixType, double >::run(), and Eigen::internal::matrix_exp_computeUV< MatrixType, long double >::run().

◆ matrix_exp_pade3()

template<typename MatA , typename MatU , typename MatV >
void Eigen::internal::matrix_exp_pade3 ( const MatA &  A,
MatU &  U,
MatV &  V 
)

Compute the (3,3)-Padé approximant to the exponential.

After exit, \( (V+U)(V-U)^{-1} \) is the Padé approximant of \( \exp(A) \) around \( A = 0 \).

64  {
65  typedef typename MatA::PlainObject MatrixType;
67  const RealScalar b[] = {120.L, 60.L, 12.L, 1.L};
68  const MatrixType A2 = A * A;
69  const MatrixType tmp = b[3] * A2 + b[1] * MatrixType::Identity(A.rows(), A.cols());
70  U.noalias() = A * tmp;
71  V = b[2] * A2 + b[0] * MatrixType::Identity(A.rows(), A.cols());
72 }

References b, Eigen::PlainObjectBase< Derived >::cols(), Eigen::PlainObjectBase< Derived >::rows(), tmp, RachelsAdvectionDiffusion::U, and V.

Referenced by Eigen::internal::matrix_exp_computeUV< MatrixType, float >::run(), Eigen::internal::matrix_exp_computeUV< MatrixType, double >::run(), and Eigen::internal::matrix_exp_computeUV< MatrixType, long double >::run().

◆ matrix_exp_pade5()

template<typename MatA , typename MatU , typename MatV >
void Eigen::internal::matrix_exp_pade5 ( const MatA &  A,
MatU &  U,
MatV &  V 
)

Compute the (5,5)-Padé approximant to the exponential.

After exit, \( (V+U)(V-U)^{-1} \) is the Padé approximant of \( \exp(A) \) around \( A = 0 \).

80  {
81  typedef typename MatA::PlainObject MatrixType;
83  const RealScalar b[] = {30240.L, 15120.L, 3360.L, 420.L, 30.L, 1.L};
84  const MatrixType A2 = A * A;
85  const MatrixType A4 = A2 * A2;
86  const MatrixType tmp = b[5] * A4 + b[3] * A2 + b[1] * MatrixType::Identity(A.rows(), A.cols());
87  U.noalias() = A * tmp;
88  V = b[4] * A4 + b[2] * A2 + b[0] * MatrixType::Identity(A.rows(), A.cols());
89 }

References b, Eigen::PlainObjectBase< Derived >::cols(), Eigen::PlainObjectBase< Derived >::rows(), tmp, RachelsAdvectionDiffusion::U, and V.

Referenced by Eigen::internal::matrix_exp_computeUV< MatrixType, float >::run(), Eigen::internal::matrix_exp_computeUV< MatrixType, double >::run(), and Eigen::internal::matrix_exp_computeUV< MatrixType, long double >::run().

◆ matrix_exp_pade7()

template<typename MatA , typename MatU , typename MatV >
void Eigen::internal::matrix_exp_pade7 ( const MatA &  A,
MatU &  U,
MatV &  V 
)

Compute the (7,7)-Padé approximant to the exponential.

After exit, \( (V+U)(V-U)^{-1} \) is the Padé approximant of \( \exp(A) \) around \( A = 0 \).

97  {
98  typedef typename MatA::PlainObject MatrixType;
100  const RealScalar b[] = {17297280.L, 8648640.L, 1995840.L, 277200.L, 25200.L, 1512.L, 56.L, 1.L};
101  const MatrixType A2 = A * A;
102  const MatrixType A4 = A2 * A2;
103  const MatrixType A6 = A4 * A2;
104  const MatrixType tmp = b[7] * A6 + b[5] * A4 + b[3] * A2 + b[1] * MatrixType::Identity(A.rows(), A.cols());
105  U.noalias() = A * tmp;
106  V = b[6] * A6 + b[4] * A4 + b[2] * A2 + b[0] * MatrixType::Identity(A.rows(), A.cols());
107 }

References b, Eigen::PlainObjectBase< Derived >::cols(), Eigen::PlainObjectBase< Derived >::rows(), tmp, RachelsAdvectionDiffusion::U, and V.

Referenced by Eigen::internal::matrix_exp_computeUV< MatrixType, float >::run(), Eigen::internal::matrix_exp_computeUV< MatrixType, double >::run(), and Eigen::internal::matrix_exp_computeUV< MatrixType, long double >::run().

◆ matrix_exp_pade9()

template<typename MatA , typename MatU , typename MatV >
void Eigen::internal::matrix_exp_pade9 ( const MatA &  A,
MatU &  U,
MatV &  V 
)

Compute the (9,9)-Padé approximant to the exponential.

After exit, \( (V+U)(V-U)^{-1} \) is the Padé approximant of \( \exp(A) \) around \( A = 0 \).

115  {
116  typedef typename MatA::PlainObject MatrixType;
118  const RealScalar b[] = {17643225600.L, 8821612800.L, 2075673600.L, 302702400.L, 30270240.L,
119  2162160.L, 110880.L, 3960.L, 90.L, 1.L};
120  const MatrixType A2 = A * A;
121  const MatrixType A4 = A2 * A2;
122  const MatrixType A6 = A4 * A2;
123  const MatrixType A8 = A6 * A2;
124  const MatrixType tmp =
125  b[9] * A8 + b[7] * A6 + b[5] * A4 + b[3] * A2 + b[1] * MatrixType::Identity(A.rows(), A.cols());
126  U.noalias() = A * tmp;
127  V = b[8] * A8 + b[6] * A6 + b[4] * A4 + b[2] * A2 + b[0] * MatrixType::Identity(A.rows(), A.cols());
128 }

References b, Eigen::PlainObjectBase< Derived >::cols(), Eigen::PlainObjectBase< Derived >::rows(), tmp, RachelsAdvectionDiffusion::U, and V.

Referenced by Eigen::internal::matrix_exp_computeUV< MatrixType, double >::run(), and Eigen::internal::matrix_exp_computeUV< MatrixType, long double >::run().

◆ matrix_function_compute_above_diagonal()

template<typename MatrixType , typename VectorType >
void Eigen::internal::matrix_function_compute_above_diagonal ( const MatrixType T,
const VectorType blockStart,
const VectorType clusterSize,
MatrixType fT 
)

Compute part of matrix function above block diagonal.

This routine completes the computation of fT, denoting a matrix function applied to the triangular matrix T. It assumes that the block diagonal part of fT has already been computed. The part below the diagonal is zero, because T is upper triangular.

312  {
313  typedef internal::traits<MatrixType> Traits;
314  typedef typename MatrixType::Scalar Scalar;
315  static const int Options = MatrixType::Options;
316  typedef Matrix<Scalar, Dynamic, Dynamic, Options, Traits::RowsAtCompileTime, Traits::ColsAtCompileTime> DynMatrixType;
317 
318  for (Index k = 1; k < clusterSize.rows(); k++) {
319  for (Index i = 0; i < clusterSize.rows() - k; i++) {
320  // compute (i, i+k) block
321  DynMatrixType A = T.block(blockStart(i), blockStart(i), clusterSize(i), clusterSize(i));
322  DynMatrixType B = -T.block(blockStart(i + k), blockStart(i + k), clusterSize(i + k), clusterSize(i + k));
323  DynMatrixType C = fT.block(blockStart(i), blockStart(i), clusterSize(i), clusterSize(i)) *
324  T.block(blockStart(i), blockStart(i + k), clusterSize(i), clusterSize(i + k));
325  C -= T.block(blockStart(i), blockStart(i + k), clusterSize(i), clusterSize(i + k)) *
326  fT.block(blockStart(i + k), blockStart(i + k), clusterSize(i + k), clusterSize(i + k));
327  for (Index m = i + 1; m < i + k; m++) {
328  C += fT.block(blockStart(i), blockStart(m), clusterSize(i), clusterSize(m)) *
329  T.block(blockStart(m), blockStart(i + k), clusterSize(m), clusterSize(i + k));
330  C -= T.block(blockStart(i), blockStart(m), clusterSize(i), clusterSize(m)) *
331  fT.block(blockStart(m), blockStart(i + k), clusterSize(m), clusterSize(i + k));
332  }
333  fT.block(blockStart(i), blockStart(i + k), clusterSize(i), clusterSize(i + k)) =
335  }
336  }
337 }
MatrixType matrix_function_solve_triangular_sylvester(const MatrixType &A, const MatrixType &B, const MatrixType &C)
Solve a triangular Sylvester equation AX + XB = C.
Definition: MatrixFunction.h:264

References i, k, m, and matrix_function_solve_triangular_sylvester().

Referenced by Eigen::internal::matrix_function_compute< MatrixType, 1 >::run().

◆ matrix_function_compute_block_atomic()

template<typename MatrixType , typename AtomicType , typename VectorType >
void Eigen::internal::matrix_function_compute_block_atomic ( const MatrixType T,
AtomicType &  atomic,
const VectorType blockStart,
const VectorType clusterSize,
MatrixType fT 
)

Compute block diagonal part of matrix function.

This routine computes the matrix function applied to the block diagonal part of T (which should be upper triangular), with the blocking given by blockStart and clusterSize. The matrix function of each diagonal block is computed by atomic. The off-diagonal parts of fT are set to zero.

233  {
234  fT.setZero(T.rows(), T.cols());
235  for (Index i = 0; i < clusterSize.rows(); ++i) {
236  fT.block(blockStart(i), blockStart(i), clusterSize(i), clusterSize(i)) =
237  atomic.compute(T.block(blockStart(i), blockStart(i), clusterSize(i), clusterSize(i)));
238  }
239 }

References i.

Referenced by Eigen::internal::matrix_function_compute< MatrixType, 1 >::run().

◆ matrix_function_compute_block_start()

template<typename VectorType >
void Eigen::internal::matrix_function_compute_block_start ( const VectorType clusterSize,
VectorType blockStart 
)

Compute start of each block using clusterSize.

169  {
170  blockStart.resize(clusterSize.rows());
171  blockStart(0) = 0;
172  for (Index i = 1; i < clusterSize.rows(); i++) {
173  blockStart(i) = blockStart(i - 1) + clusterSize(i - 1);
174  }
175 }

References i.

Referenced by Eigen::internal::matrix_function_compute< MatrixType, 1 >::run().

◆ matrix_function_compute_cluster_size()

template<typename ListOfClusters , typename Index >
void Eigen::internal::matrix_function_compute_cluster_size ( const ListOfClusters &  clusters,
Matrix< Index, Dynamic, 1 > &  clusterSize 
)

Compute size of each cluster given a partitioning.

157  {
158  const Index numClusters = static_cast<Index>(clusters.size());
159  clusterSize.setZero(numClusters);
160  Index clusterIndex = 0;
161  for (typename ListOfClusters::const_iterator cluster = clusters.begin(); cluster != clusters.end(); ++cluster) {
162  clusterSize[clusterIndex] = cluster->size();
163  ++clusterIndex;
164  }
165 }

References Eigen::PlainObjectBase< Derived >::setZero().

Referenced by Eigen::internal::matrix_function_compute< MatrixType, 1 >::run().

◆ matrix_function_compute_map()

template<typename EivalsType , typename ListOfClusters , typename VectorType >
void Eigen::internal::matrix_function_compute_map ( const EivalsType &  eivals,
const ListOfClusters &  clusters,
VectorType eivalToCluster 
)

Compute mapping of eigenvalue indices to cluster indices.

179  {
180  eivalToCluster.resize(eivals.rows());
181  Index clusterIndex = 0;
182  for (typename ListOfClusters::const_iterator cluster = clusters.begin(); cluster != clusters.end(); ++cluster) {
183  for (Index i = 0; i < eivals.rows(); ++i) {
184  if (std::find(cluster->begin(), cluster->end(), i) != cluster->end()) {
185  eivalToCluster[i] = clusterIndex;
186  }
187  }
188  ++clusterIndex;
189  }
190 }
VectorXcd eivals
Definition: MatrixBase_eigenvalues.cpp:2

References eivals, and i.

Referenced by Eigen::internal::matrix_function_compute< MatrixType, 1 >::run().

◆ matrix_function_compute_mu()

template<typename MatrixType >
NumTraits<typename MatrixType::Scalar>::Real Eigen::internal::matrix_function_compute_mu ( const MatrixType A)
53  {
55  Index rows = A.rows();
56  const MatrixType N = MatrixType::Identity(rows, rows) - A;
57  VectorType e = VectorType::Ones(rows);
58  N.template triangularView<Upper>().solveInPlace(e);
59  return e.cwiseAbs().maxCoeff();
60 }
Array< double, 1, 3 > e(1./3., 0.5, 2.)

References e(), N, rows, and Eigen::PlainObjectBase< Derived >::rows().

Referenced by Eigen::internal::MatrixFunctionAtomic< MatrixType >::compute().

◆ matrix_function_compute_permutation()

template<typename DynVectorType , typename VectorType >
void Eigen::internal::matrix_function_compute_permutation ( const DynVectorType &  blockStart,
const DynVectorType &  eivalToCluster,
VectorType permutation 
)

Compute permutation which groups ei'vals in same cluster together.

195  {
196  DynVectorType indexNextEntry = blockStart;
197  permutation.resize(eivalToCluster.rows());
198  for (Index i = 0; i < eivalToCluster.rows(); i++) {
199  Index cluster = eivalToCluster[i];
200  permutation[i] = indexNextEntry[cluster];
201  ++indexNextEntry[cluster];
202  }
203 }

References i.

Referenced by Eigen::internal::matrix_function_compute< MatrixType, 1 >::run().

◆ matrix_function_find_cluster()

template<typename Index , typename ListOfClusters >
ListOfClusters::iterator Eigen::internal::matrix_function_find_cluster ( Index  key,
ListOfClusters &  clusters 
)

Find cluster in clusters containing some value.

Parameters
[in]keyValue to find
Returns
Iterator to cluster containing key, or clusters.end() if no cluster in m_clusters contains key.
105  {
106  typename std::list<Index>::iterator j;
107  for (typename ListOfClusters::iterator i = clusters.begin(); i != clusters.end(); ++i) {
108  j = std::find(i->begin(), i->end(), key);
109  if (j != i->end()) return i;
110  }
111  return clusters.end();
112 }

References i, and j.

Referenced by matrix_function_partition_eigenvalues().

◆ matrix_function_partition_eigenvalues()

template<typename EivalsType , typename Cluster >
void Eigen::internal::matrix_function_partition_eigenvalues ( const EivalsType &  eivals,
std::list< Cluster > &  clusters 
)

Partition eigenvalues in clusters of ei'vals close to each other.

Parameters
[in]eivalsEigenvalues
[out]clustersResulting partition of eigenvalues

The partition satisfies the following two properties:

Any eigenvalue in a certain cluster is at most matrix_function_separation() away from another eigenvalue

in the same cluster.

The distance between two eigenvalues in different clusters is more than matrix_function_separation().

The implementation follows Algorithm 4.1 in the paper of Davies and Higham.

126  {
127  typedef typename EivalsType::RealScalar RealScalar;
128  for (Index i = 0; i < eivals.rows(); ++i) {
129  // Find cluster containing i-th ei'val, adding a new cluster if necessary
130  typename std::list<Cluster>::iterator qi = matrix_function_find_cluster(i, clusters);
131  if (qi == clusters.end()) {
132  Cluster l;
133  l.push_back(i);
134  clusters.push_back(l);
135  qi = clusters.end();
136  --qi;
137  }
138 
139  // Look for other element to add to the set
140  for (Index j = i + 1; j < eivals.rows(); ++j) {
142  std::find(qi->begin(), qi->end(), j) == qi->end()) {
143  typename std::list<Cluster>::iterator qj = matrix_function_find_cluster(j, clusters);
144  if (qj == clusters.end()) {
145  qi->push_back(j);
146  } else {
147  qi->insert(qi->end(), qj->begin(), qj->end());
148  clusters.erase(qj);
149  }
150  }
151  }
152  }
153 }
static const float matrix_function_separation
Maximum distance allowed between eigenvalues to be considered "close".
Definition: MatrixFunction.h:23
ListOfClusters::iterator matrix_function_find_cluster(Index key, ListOfClusters &clusters)
Find cluster in clusters containing some value.
Definition: MatrixFunction.h:105

References abs(), eivals, i, j, matrix_function_find_cluster(), and matrix_function_separation.

Referenced by Eigen::internal::matrix_function_compute< MatrixType, 1 >::run().

◆ matrix_function_permute_schur()

template<typename VectorType , typename MatrixType >
void Eigen::internal::matrix_function_permute_schur ( VectorType permutation,
MatrixType U,
MatrixType T 
)

Permute Schur decomposition in U and T according to permutation.

207  {
208  for (Index i = 0; i < permutation.rows() - 1; i++) {
209  Index j;
210  for (j = i; j < permutation.rows(); j++) {
211  if (permutation(j) == i) break;
212  }
213  eigen_assert(permutation(j) == i);
214  for (Index k = j - 1; k >= i; k--) {
215  JacobiRotation<typename MatrixType::Scalar> rotation;
216  rotation.makeGivens(T(k, k + 1), T(k + 1, k + 1) - T(k, k));
217  T.applyOnTheLeft(k, k + 1, rotation.adjoint());
218  T.applyOnTheRight(k, k + 1, rotation);
219  U.applyOnTheRight(k, k + 1, rotation);
220  std::swap(permutation.coeffRef(k), permutation.coeffRef(k + 1));
221  }
222  }
223 }

References Eigen::JacobiRotation< Scalar >::adjoint(), eigen_assert, i, j, k, Eigen::JacobiRotation< Scalar >::makeGivens(), swap(), and RachelsAdvectionDiffusion::U.

Referenced by Eigen::internal::matrix_function_compute< MatrixType, 1 >::run().

◆ matrix_function_solve_triangular_sylvester()

template<typename MatrixType >
MatrixType Eigen::internal::matrix_function_solve_triangular_sylvester ( const MatrixType A,
const MatrixType B,
const MatrixType C 
)

Solve a triangular Sylvester equation AX + XB = C.

Parameters
[in]Athe matrix A; should be square and upper triangular
[in]Bthe matrix B; should be square and upper triangular
[in]Cthe matrix C; should have correct size.
Returns
the solution X.

If A is m-by-m and B is n-by-n, then both C and X are m-by-n. The (i,j)-th component of the Sylvester equation is

\[ \sum_{k=i}^m A_{ik} X_{kj} + \sum_{k=1}^j X_{ik} B_{kj} = C_{ij}. \]

This can be re-arranged to yield:

\[ X_{ij} = \frac{1}{A_{ii} + B_{jj}} \Bigl( C_{ij} - \sum_{k=i+1}^m A_{ik} X_{kj} - \sum_{k=1}^{j-1} X_{ik} B_{kj} \Bigr). \]

It is assumed that A and B are such that the numerator is never zero (otherwise the Sylvester equation does not have a unique solution). In that case, these equations can be evaluated in the order \( i=m,\ldots,1 \) and \( j=1,\ldots,n \).

264  {
265  eigen_assert(A.rows() == A.cols());
266  eigen_assert(A.isUpperTriangular());
267  eigen_assert(B.rows() == B.cols());
268  eigen_assert(B.isUpperTriangular());
269  eigen_assert(C.rows() == A.rows());
270  eigen_assert(C.cols() == B.rows());
271 
272  typedef typename MatrixType::Scalar Scalar;
273 
274  Index m = A.rows();
275  Index n = B.rows();
276  MatrixType X(m, n);
277 
278  for (Index i = m - 1; i >= 0; --i) {
279  for (Index j = 0; j < n; ++j) {
280  // Compute AX = \sum_{k=i+1}^m A_{ik} X_{kj}
281  Scalar AX;
282  if (i == m - 1) {
283  AX = 0;
284  } else {
285  Matrix<Scalar, 1, 1> AXmatrix = A.row(i).tail(m - 1 - i) * X.col(j).tail(m - 1 - i);
286  AX = AXmatrix(0, 0);
287  }
288 
289  // Compute XB = \sum_{k=1}^{j-1} X_{ik} B_{kj}
290  Scalar XB;
291  if (j == 0) {
292  XB = 0;
293  } else {
294  Matrix<Scalar, 1, 1> XBmatrix = X.row(i).head(j) * B.col(j).head(j);
295  XB = XBmatrix(0, 0);
296  }
297 
298  X(i, j) = (C(i, j) - AX - XB) / (A(i, i) + B(j, j));
299  }
300  }
301  return X;
302 }
Matrix< Scalar, Dynamic, Dynamic > C
Definition: bench_gemm.cpp:49
#define X
Definition: icosphere.cpp:20

References Eigen::PlainObjectBase< Derived >::cols(), eigen_assert, i, j, m, n, Eigen::PlainObjectBase< Derived >::rows(), and X.

Referenced by matrix_function_compute_above_diagonal().

◆ matrix_log_compute_2x2()

template<typename MatrixType >
void Eigen::internal::matrix_log_compute_2x2 ( const MatrixType A,
MatrixType result 
)

Compute logarithm of 2x2 triangular matrix.

41  {
42  typedef typename MatrixType::Scalar Scalar;
43  typedef typename MatrixType::RealScalar RealScalar;
44  using std::abs;
45  using std::ceil;
46  using std::imag;
47  using std::log;
48 
49  Scalar logA00 = log(A(0, 0));
50  Scalar logA11 = log(A(1, 1));
51 
52  result(0, 0) = logA00;
53  result(1, 0) = Scalar(0);
54  result(1, 1) = logA11;
55 
56  Scalar y = A(1, 1) - A(0, 0);
57  if (y == Scalar(0)) {
58  result(0, 1) = A(0, 1) / A(0, 0);
59  } else if ((abs(A(0, 0)) < RealScalar(0.5) * abs(A(1, 1))) || (abs(A(0, 0)) > 2 * abs(A(1, 1)))) {
60  result(0, 1) = A(0, 1) * (logA11 - logA00) / y;
61  } else {
62  // computation in previous branch is inaccurate if A(1,1) \approx A(0,0)
63  RealScalar unwindingNumber = ceil((imag(logA11 - logA00) - RealScalar(EIGEN_PI)) / RealScalar(2 * EIGEN_PI));
64  result(0, 1) = A(0, 1) * (numext::log1p(y / A(0, 0)) + Scalar(0, RealScalar(2 * EIGEN_PI) * unwindingNumber)) / y;
65  }
66 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 ceil(const bfloat16 &a)
Definition: BFloat16.h:644
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 log1p(const bfloat16 &a)
Definition: BFloat16.h:619

References abs(), Eigen::bfloat16_impl::ceil(), EIGEN_PI, imag(), Eigen::imag(), Eigen::bfloat16_impl::log(), Eigen::bfloat16_impl::log1p(), and y.

Referenced by Eigen::internal::MatrixLogarithmAtomic< MatrixType >::compute().

◆ matrix_log_compute_big()

template<typename MatrixType >
void Eigen::internal::matrix_log_compute_big ( const MatrixType A,
MatrixType result 
)

Compute logarithm of triangular matrices with size > 2.

This uses a inverse scale-and-square algorithm.

226  {
227  typedef typename MatrixType::Scalar Scalar;
228  typedef typename NumTraits<Scalar>::Real RealScalar;
229  using std::pow;
230 
231  int numberOfSquareRoots = 0;
232  int numberOfExtraSquareRoots = 0;
233  int degree;
234  MatrixType T = A, sqrtT;
235 
236  const int maxPadeDegree = matrix_log_max_pade_degree<Scalar>::value;
237  const RealScalar maxNormForPade = RealScalar(maxPadeDegree <= 5 ? 5.3149729967117310e-1L : // single precision
238  maxPadeDegree <= 7 ? 2.6429608311114350e-1L
239  : // double precision
240  maxPadeDegree <= 8 ? 2.32777776523703892094e-1L
241  : // extended precision
242  maxPadeDegree <= 10 ? 1.05026503471351080481093652651105e-1L
243  : // double-double
244  1.1880960220216759245467951592883642e-1L); // quadruple precision
245 
246  while (true) {
247  RealScalar normTminusI = (T - MatrixType::Identity(T.rows(), T.rows())).cwiseAbs().colwise().sum().maxCoeff();
248  if (normTminusI < maxNormForPade) {
249  degree = matrix_log_get_pade_degree(normTminusI);
250  int degree2 = matrix_log_get_pade_degree(normTminusI / RealScalar(2));
251  if ((degree - degree2 <= 1) || (numberOfExtraSquareRoots == 1)) break;
252  ++numberOfExtraSquareRoots;
253  }
254  matrix_sqrt_triangular(T, sqrtT);
255  T = sqrtT.template triangularView<Upper>();
256  ++numberOfSquareRoots;
257  }
258 
259  matrix_log_compute_pade(result, T, degree);
260  result *= pow(RealScalar(2), RealScalar(numberOfSquareRoots)); // TODO replace by bitshift if possible
261 }
void matrix_log_compute_pade(MatrixType &result, const MatrixType &T, int degree)
Definition: MatrixLogarithm.h:133
int matrix_log_get_pade_degree(long double normTminusI)
Definition: MatrixLogarithm.h:92
void matrix_sqrt_triangular(const MatrixType &arg, ResultType &result)
Compute matrix square root of triangular matrix.
Definition: MatrixSquareRoot.h:194
const Mdouble degree
Definition: ExtendedMath.h:32

References constants::degree, matrix_log_compute_pade(), matrix_log_get_pade_degree(), Eigen::matrix_sqrt_triangular(), and Eigen::bfloat16_impl::pow().

Referenced by Eigen::internal::MatrixLogarithmAtomic< MatrixType >::compute().

◆ matrix_log_compute_pade()

template<typename MatrixType >
void Eigen::internal::matrix_log_compute_pade ( MatrixType result,
const MatrixType T,
int  degree 
)
133  {
135  const int minPadeDegree = 3;
136  const int maxPadeDegree = 11;
137  eigen_assert(degree >= minPadeDegree && degree <= maxPadeDegree);
138  // FIXME this creates float-conversion-warnings if these are enabled.
139  // Either manually convert each value, or disable the warning locally
140  const RealScalar nodes[][maxPadeDegree] = {
141  {0.1127016653792583114820734600217600L, 0.5000000000000000000000000000000000L, // degree 3
142  0.8872983346207416885179265399782400L},
143  {0.0694318442029737123880267555535953L, 0.3300094782075718675986671204483777L, // degree 4
144  0.6699905217924281324013328795516223L, 0.9305681557970262876119732444464048L},
145  {0.0469100770306680036011865608503035L, 0.2307653449471584544818427896498956L, // degree 5
146  0.5000000000000000000000000000000000L, 0.7692346550528415455181572103501044L,
147  0.9530899229693319963988134391496965L},
148  {0.0337652428984239860938492227530027L, 0.1693953067668677431693002024900473L, // degree 6
149  0.3806904069584015456847491391596440L, 0.6193095930415984543152508608403560L,
150  0.8306046932331322568306997975099527L, 0.9662347571015760139061507772469973L},
151  {0.0254460438286207377369051579760744L, 0.1292344072003027800680676133596058L, // degree 7
152  0.2970774243113014165466967939615193L, 0.5000000000000000000000000000000000L,
153  0.7029225756886985834533032060384807L, 0.8707655927996972199319323866403942L,
154  0.9745539561713792622630948420239256L},
155  {0.0198550717512318841582195657152635L, 0.1016667612931866302042230317620848L, // degree 8
156  0.2372337950418355070911304754053768L, 0.4082826787521750975302619288199080L,
157  0.5917173212478249024697380711800920L, 0.7627662049581644929088695245946232L,
158  0.8983332387068133697957769682379152L, 0.9801449282487681158417804342847365L},
159  {0.0159198802461869550822118985481636L, 0.0819844463366821028502851059651326L, // degree 9
160  0.1933142836497048013456489803292629L, 0.3378732882980955354807309926783317L,
161  0.5000000000000000000000000000000000L, 0.6621267117019044645192690073216683L,
162  0.8066857163502951986543510196707371L, 0.9180155536633178971497148940348674L,
163  0.9840801197538130449177881014518364L},
164  {0.0130467357414141399610179939577740L, 0.0674683166555077446339516557882535L, // degree 10
165  0.1602952158504877968828363174425632L, 0.2833023029353764046003670284171079L,
166  0.4255628305091843945575869994351400L, 0.5744371694908156054424130005648600L,
167  0.7166976970646235953996329715828921L, 0.8397047841495122031171636825574368L,
168  0.9325316833444922553660483442117465L, 0.9869532642585858600389820060422260L},
169  {0.0108856709269715035980309994385713L, 0.0564687001159523504624211153480364L, // degree 11
170  0.1349239972129753379532918739844233L, 0.2404519353965940920371371652706952L,
171  0.3652284220238275138342340072995692L, 0.5000000000000000000000000000000000L,
172  0.6347715779761724861657659927004308L, 0.7595480646034059079628628347293048L,
173  0.8650760027870246620467081260155767L, 0.9435312998840476495375788846519636L,
174  0.9891143290730284964019690005614287L}};
175 
176  const RealScalar weights[][maxPadeDegree] = {
177  {0.2777777777777777777777777777777778L, 0.4444444444444444444444444444444444L, // degree 3
178  0.2777777777777777777777777777777778L},
179  {0.1739274225687269286865319746109997L, 0.3260725774312730713134680253890003L, // degree 4
180  0.3260725774312730713134680253890003L, 0.1739274225687269286865319746109997L},
181  {0.1184634425280945437571320203599587L, 0.2393143352496832340206457574178191L, // degree 5
182  0.2844444444444444444444444444444444L, 0.2393143352496832340206457574178191L,
183  0.1184634425280945437571320203599587L},
184  {0.0856622461895851725201480710863665L, 0.1803807865240693037849167569188581L, // degree 6
185  0.2339569672863455236949351719947755L, 0.2339569672863455236949351719947755L,
186  0.1803807865240693037849167569188581L, 0.0856622461895851725201480710863665L},
187  {0.0647424830844348466353057163395410L, 0.1398526957446383339507338857118898L, // degree 7
188  0.1909150252525594724751848877444876L, 0.2089795918367346938775510204081633L,
189  0.1909150252525594724751848877444876L, 0.1398526957446383339507338857118898L,
190  0.0647424830844348466353057163395410L},
191  {0.0506142681451881295762656771549811L, 0.1111905172266872352721779972131204L, // degree 8
192  0.1568533229389436436689811009933007L, 0.1813418916891809914825752246385978L,
193  0.1813418916891809914825752246385978L, 0.1568533229389436436689811009933007L,
194  0.1111905172266872352721779972131204L, 0.0506142681451881295762656771549811L},
195  {0.0406371941807872059859460790552618L, 0.0903240803474287020292360156214564L, // degree 9
196  0.1303053482014677311593714347093164L, 0.1561735385200014200343152032922218L,
197  0.1651196775006298815822625346434870L, 0.1561735385200014200343152032922218L,
198  0.1303053482014677311593714347093164L, 0.0903240803474287020292360156214564L,
199  0.0406371941807872059859460790552618L},
200  {0.0333356721543440687967844049466659L, 0.0747256745752902965728881698288487L, // degree 10
201  0.1095431812579910219977674671140816L, 0.1346333596549981775456134607847347L,
202  0.1477621123573764350869464973256692L, 0.1477621123573764350869464973256692L,
203  0.1346333596549981775456134607847347L, 0.1095431812579910219977674671140816L,
204  0.0747256745752902965728881698288487L, 0.0333356721543440687967844049466659L},
205  {0.0278342835580868332413768602212743L, 0.0627901847324523123173471496119701L, // degree 11
206  0.0931451054638671257130488207158280L, 0.1165968822959952399592618524215876L,
207  0.1314022722551233310903444349452546L, 0.1364625433889503153572417641681711L,
208  0.1314022722551233310903444349452546L, 0.1165968822959952399592618524215876L,
209  0.0931451054638671257130488207158280L, 0.0627901847324523123173471496119701L,
210  0.0278342835580868332413768602212743L}};
211 
212  MatrixType TminusI = T - MatrixType::Identity(T.rows(), T.rows());
213  result.setZero(T.rows(), T.rows());
214  for (int k = 0; k < degree; ++k) {
215  RealScalar weight = weights[degree - minPadeDegree][k];
216  RealScalar node = nodes[degree - minPadeDegree][k];
217  result +=
218  weight *
219  (MatrixType::Identity(T.rows(), T.rows()) + node * TminusI).template triangularView<Upper>().solve(TminusI);
220  }
221 }
list weights
Definition: calibrate.py:94

References constants::degree, eigen_assert, k, and calibrate::weights.

Referenced by matrix_log_compute_big().

◆ matrix_log_get_pade_degree() [1/3]

int Eigen::internal::matrix_log_get_pade_degree ( double  normTminusI)
inline
80  {
81  const double maxNormForPade[] = {1.6206284795015624e-2 /* degree = 3 */, 5.3873532631381171e-2, 1.1352802267628681e-1,
82  1.8662860613541288e-1, 2.642960831111435e-1};
83  const int minPadeDegree = matrix_log_min_pade_degree<double>::value;
84  const int maxPadeDegree = matrix_log_max_pade_degree<double>::value;
85  int degree = minPadeDegree;
86  for (; degree <= maxPadeDegree; ++degree)
87  if (normTminusI <= maxNormForPade[degree - minPadeDegree]) break;
88  return degree;
89 }

References constants::degree.

◆ matrix_log_get_pade_degree() [2/3]

int Eigen::internal::matrix_log_get_pade_degree ( float  normTminusI)
inline
69  {
70  const float maxNormForPade[] = {2.5111573934555054e-1 /* degree = 3 */, 4.0535837411880493e-1, 5.3149729967117310e-1};
71  const int minPadeDegree = matrix_log_min_pade_degree<float>::value;
72  const int maxPadeDegree = matrix_log_max_pade_degree<float>::value;
73  int degree = minPadeDegree;
74  for (; degree <= maxPadeDegree; ++degree)
75  if (normTminusI <= maxNormForPade[degree - minPadeDegree]) break;
76  return degree;
77 }

References constants::degree.

Referenced by matrix_log_compute_big().

◆ matrix_log_get_pade_degree() [3/3]

int Eigen::internal::matrix_log_get_pade_degree ( long double  normTminusI)
inline
92  {
93 #if LDBL_MANT_DIG == 53 // double precision
94  const long double maxNormForPade[] = {1.6206284795015624e-2L /* degree = 3 */, 5.3873532631381171e-2L,
95  1.1352802267628681e-1L, 1.8662860613541288e-1L, 2.642960831111435e-1L};
96 #elif LDBL_MANT_DIG <= 64 // extended precision
97  const long double maxNormForPade[] = {5.48256690357782863103e-3L /* degree = 3 */,
98  2.34559162387971167321e-2L,
99  5.84603923897347449857e-2L,
100  1.08486423756725170223e-1L,
101  1.68385767881294446649e-1L,
102  2.32777776523703892094e-1L};
103 #elif LDBL_MANT_DIG <= 106 // double-double
104  const long double maxNormForPade[] = {8.58970550342939562202529664318890e-5L /* degree = 3 */,
105  9.34074328446359654039446552677759e-4L,
106  4.26117194647672175773064114582860e-3L,
107  1.21546224740281848743149666560464e-2L,
108  2.61100544998339436713088248557444e-2L,
109  4.66170074627052749243018566390567e-2L,
110  7.32585144444135027565872014932387e-2L,
111  1.05026503471351080481093652651105e-1L};
112 #else // quadruple precision
113  const long double maxNormForPade[] = {4.7419931187193005048501568167858103e-5L /* degree = 3 */,
114  5.8853168473544560470387769480192666e-4L,
115  2.9216120366601315391789493628113520e-3L,
116  8.8415758124319434347116734705174308e-3L,
117  1.9850836029449446668518049562565291e-2L,
118  3.6688019729653446926585242192447447e-2L,
119  5.9290962294020186998954055264528393e-2L,
120  8.6998436081634343903250580992127677e-2L,
121  1.1880960220216759245467951592883642e-1L};
122 #endif
123  const int minPadeDegree = matrix_log_min_pade_degree<long double>::value;
124  const int maxPadeDegree = matrix_log_max_pade_degree<long double>::value;
125  int degree = minPadeDegree;
126  for (; degree <= maxPadeDegree; ++degree)
127  if (normTminusI <= maxNormForPade[degree - minPadeDegree]) break;
128  return degree;
129 }

References constants::degree.

◆ matrix_sqrt_quasi_triangular_1x1_off_diagonal_block()

template<typename MatrixType , typename ResultType >
void Eigen::internal::matrix_sqrt_quasi_triangular_1x1_off_diagonal_block ( const MatrixType T,
Index  i,
Index  j,
ResultType &  sqrtT 
)
37  {
38  typedef typename traits<MatrixType>::Scalar Scalar;
39  Scalar tmp = (sqrtT.row(i).segment(i + 1, j - i - 1) * sqrtT.col(j).segment(i + 1, j - i - 1)).value();
40  sqrtT.coeffRef(i, j) = (T.coeff(i, j) - tmp) / (sqrtT.coeff(i, i) + sqrtT.coeff(j, j));
41 }

References i, j, tmp, and Eigen::value.

Referenced by matrix_sqrt_quasi_triangular_off_diagonal().

◆ matrix_sqrt_quasi_triangular_1x2_off_diagonal_block()

template<typename MatrixType , typename ResultType >
void Eigen::internal::matrix_sqrt_quasi_triangular_1x2_off_diagonal_block ( const MatrixType T,
Index  i,
Index  j,
ResultType &  sqrtT 
)
45  {
46  typedef typename traits<MatrixType>::Scalar Scalar;
47  Matrix<Scalar, 1, 2> rhs = T.template block<1, 2>(i, j);
48  if (j - i > 1) rhs -= sqrtT.block(i, i + 1, 1, j - i - 1) * sqrtT.block(i + 1, j, j - i - 1, 2);
49  Matrix<Scalar, 2, 2> A = sqrtT.coeff(i, i) * Matrix<Scalar, 2, 2>::Identity();
50  A += sqrtT.template block<2, 2>(j, j).transpose();
51  sqrtT.template block<1, 2>(i, j).transpose() = A.fullPivLu().solve(rhs.transpose());
52 }

References Eigen::PlainObjectBase< Derived >::coeff(), i, and j.

Referenced by matrix_sqrt_quasi_triangular_off_diagonal().

◆ matrix_sqrt_quasi_triangular_2x1_off_diagonal_block()

template<typename MatrixType , typename ResultType >
void Eigen::internal::matrix_sqrt_quasi_triangular_2x1_off_diagonal_block ( const MatrixType T,
Index  i,
Index  j,
ResultType &  sqrtT 
)
56  {
57  typedef typename traits<MatrixType>::Scalar Scalar;
58  Matrix<Scalar, 2, 1> rhs = T.template block<2, 1>(i, j);
59  if (j - i > 2) rhs -= sqrtT.block(i, i + 2, 2, j - i - 2) * sqrtT.block(i + 2, j, j - i - 2, 1);
60  Matrix<Scalar, 2, 2> A = sqrtT.coeff(j, j) * Matrix<Scalar, 2, 2>::Identity();
61  A += sqrtT.template block<2, 2>(i, i);
62  sqrtT.template block<2, 1>(i, j) = A.fullPivLu().solve(rhs);
63 }

References Eigen::PlainObjectBase< Derived >::coeff(), i, and j.

Referenced by matrix_sqrt_quasi_triangular_off_diagonal().

◆ matrix_sqrt_quasi_triangular_2x2_diagonal_block()

template<typename MatrixType , typename ResultType >
void Eigen::internal::matrix_sqrt_quasi_triangular_2x2_diagonal_block ( const MatrixType T,
Index  i,
ResultType &  sqrtT 
)
23  {
24  // TODO: This case (2-by-2 blocks with complex conjugate eigenvalues) is probably hidden somewhere
25  // in EigenSolver. If we expose it, we could call it directly from here.
26  typedef typename traits<MatrixType>::Scalar Scalar;
27  Matrix<Scalar, 2, 2> block = T.template block<2, 2>(i, i);
28  EigenSolver<Matrix<Scalar, 2, 2> > es(block);
29  sqrtT.template block<2, 2>(i, i) =
30  (es.eigenvectors() * es.eigenvalues().cwiseSqrt().asDiagonal() * es.eigenvectors().inverse()).real();
31 }
EigenSolver< MatrixXf > es
Definition: EigenSolver_compute.cpp:1

References block(), es, i, and Eigen::real().

Referenced by matrix_sqrt_quasi_triangular_diagonal().

◆ matrix_sqrt_quasi_triangular_2x2_off_diagonal_block()

template<typename MatrixType , typename ResultType >
void Eigen::internal::matrix_sqrt_quasi_triangular_2x2_off_diagonal_block ( const MatrixType T,
Index  i,
Index  j,
ResultType &  sqrtT 
)
101  {
102  typedef typename traits<MatrixType>::Scalar Scalar;
103  Matrix<Scalar, 2, 2> A = sqrtT.template block<2, 2>(i, i);
104  Matrix<Scalar, 2, 2> B = sqrtT.template block<2, 2>(j, j);
105  Matrix<Scalar, 2, 2> C = T.template block<2, 2>(i, j);
106  if (j - i > 2) C -= sqrtT.block(i, i + 2, 2, j - i - 2) * sqrtT.block(i + 2, j, j - i - 2, 2);
107  Matrix<Scalar, 2, 2> X;
109  sqrtT.template block<2, 2>(i, j) = X;
110 }
void matrix_sqrt_quasi_triangular_solve_auxiliary_equation(MatrixType &X, const MatrixType &A, const MatrixType &B, const MatrixType &C)
Definition: MatrixSquareRoot.h:67

References i, j, matrix_sqrt_quasi_triangular_solve_auxiliary_equation(), and X.

Referenced by matrix_sqrt_quasi_triangular_off_diagonal().

◆ matrix_sqrt_quasi_triangular_diagonal()

template<typename MatrixType , typename ResultType >
void Eigen::internal::matrix_sqrt_quasi_triangular_diagonal ( const MatrixType T,
ResultType &  sqrtT 
)
115  {
116  using std::sqrt;
117  const Index size = T.rows();
118  for (Index i = 0; i < size; i++) {
119  if (i == size - 1 || T.coeff(i + 1, i) == 0) {
120  eigen_assert(T(i, i) >= 0);
121  sqrtT.coeffRef(i, i) = sqrt(T.coeff(i, i));
122  } else {
124  ++i;
125  }
126  }
127 }
void matrix_sqrt_quasi_triangular_2x2_diagonal_block(const MatrixType &T, Index i, ResultType &sqrtT)
Definition: MatrixSquareRoot.h:23

References eigen_assert, i, matrix_sqrt_quasi_triangular_2x2_diagonal_block(), size, and sqrt().

Referenced by Eigen::matrix_sqrt_quasi_triangular().

◆ matrix_sqrt_quasi_triangular_off_diagonal()

template<typename MatrixType , typename ResultType >
void Eigen::internal::matrix_sqrt_quasi_triangular_off_diagonal ( const MatrixType T,
ResultType &  sqrtT 
)
132  {
133  const Index size = T.rows();
134  for (Index j = 1; j < size; j++) {
135  if (T.coeff(j, j - 1) != 0) // if T(j-1:j, j-1:j) is a 2-by-2 block
136  continue;
137  for (Index i = j - 1; i >= 0; i--) {
138  if (i > 0 && T.coeff(i, i - 1) != 0) // if T(i-1:i, i-1:i) is a 2-by-2 block
139  continue;
140  bool iBlockIs2x2 = (i < size - 1) && (T.coeff(i + 1, i) != 0);
141  bool jBlockIs2x2 = (j < size - 1) && (T.coeff(j + 1, j) != 0);
142  if (iBlockIs2x2 && jBlockIs2x2)
144  else if (iBlockIs2x2 && !jBlockIs2x2)
146  else if (!iBlockIs2x2 && jBlockIs2x2)
148  else if (!iBlockIs2x2 && !jBlockIs2x2)
150  }
151  }
152 }
void matrix_sqrt_quasi_triangular_1x2_off_diagonal_block(const MatrixType &T, Index i, Index j, ResultType &sqrtT)
Definition: MatrixSquareRoot.h:45
void matrix_sqrt_quasi_triangular_2x2_off_diagonal_block(const MatrixType &T, Index i, Index j, ResultType &sqrtT)
Definition: MatrixSquareRoot.h:101
void matrix_sqrt_quasi_triangular_1x1_off_diagonal_block(const MatrixType &T, Index i, Index j, ResultType &sqrtT)
Definition: MatrixSquareRoot.h:37
void matrix_sqrt_quasi_triangular_2x1_off_diagonal_block(const MatrixType &T, Index i, Index j, ResultType &sqrtT)
Definition: MatrixSquareRoot.h:56

References i, j, matrix_sqrt_quasi_triangular_1x1_off_diagonal_block(), matrix_sqrt_quasi_triangular_1x2_off_diagonal_block(), matrix_sqrt_quasi_triangular_2x1_off_diagonal_block(), matrix_sqrt_quasi_triangular_2x2_off_diagonal_block(), and size.

Referenced by Eigen::matrix_sqrt_quasi_triangular().

◆ matrix_sqrt_quasi_triangular_solve_auxiliary_equation()

template<typename MatrixType >
void Eigen::internal::matrix_sqrt_quasi_triangular_solve_auxiliary_equation ( MatrixType X,
const MatrixType A,
const MatrixType B,
const MatrixType C 
)
68  {
69  typedef typename traits<MatrixType>::Scalar Scalar;
70  Matrix<Scalar, 4, 4> coeffMatrix = Matrix<Scalar, 4, 4>::Zero();
71  coeffMatrix.coeffRef(0, 0) = A.coeff(0, 0) + B.coeff(0, 0);
72  coeffMatrix.coeffRef(1, 1) = A.coeff(0, 0) + B.coeff(1, 1);
73  coeffMatrix.coeffRef(2, 2) = A.coeff(1, 1) + B.coeff(0, 0);
74  coeffMatrix.coeffRef(3, 3) = A.coeff(1, 1) + B.coeff(1, 1);
75  coeffMatrix.coeffRef(0, 1) = B.coeff(1, 0);
76  coeffMatrix.coeffRef(0, 2) = A.coeff(0, 1);
77  coeffMatrix.coeffRef(1, 0) = B.coeff(0, 1);
78  coeffMatrix.coeffRef(1, 3) = A.coeff(0, 1);
79  coeffMatrix.coeffRef(2, 0) = A.coeff(1, 0);
80  coeffMatrix.coeffRef(2, 3) = B.coeff(1, 0);
81  coeffMatrix.coeffRef(3, 1) = A.coeff(1, 0);
82  coeffMatrix.coeffRef(3, 2) = B.coeff(0, 1);
83 
84  Matrix<Scalar, 4, 1> rhs;
85  rhs.coeffRef(0) = C.coeff(0, 0);
86  rhs.coeffRef(1) = C.coeff(0, 1);
87  rhs.coeffRef(2) = C.coeff(1, 0);
88  rhs.coeffRef(3) = C.coeff(1, 1);
89 
90  Matrix<Scalar, 4, 1> result;
91  result = coeffMatrix.fullPivLu().solve(rhs);
92 
93  X.coeffRef(0, 0) = result.coeff(0);
94  X.coeffRef(0, 1) = result.coeff(1);
95  X.coeffRef(1, 0) = result.coeff(2);
96  X.coeffRef(1, 1) = result.coeff(3);
97 }

References Eigen::PlainObjectBase< Derived >::coeff(), Eigen::Matrix< Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_ >::coeffRef(), X, and oomph::PseudoSolidHelper::Zero.

Referenced by matrix_sqrt_quasi_triangular_2x2_off_diagonal_block().

◆ max_size_prefer_dynamic()

template<typename A , typename B >
constexpr int Eigen::internal::max_size_prefer_dynamic ( A  a,
B  b 
)
inlineconstexpr

see min_size_prefer_fixed. No need for a separate variant for MaxSizes here.

695  {
697  if ((int)a == Dynamic || (int)b == Dynamic) return Dynamic;
698  return plain_enum_max(a, b);
699 }
constexpr int plain_enum_max(A a, B b)
Definition: Meta.h:656

References a, b, Eigen::Dynamic, plain_enum_asserts(), and plain_enum_max().

Referenced by householder().

◆ MaybeCoherentPad()

template<typename DerivativeType , typename OtherDerivativeType >
maybe_coherent_pad_helper<DerivativeType, OtherDerivativeType>::type Eigen::internal::MaybeCoherentPad ( const DerivativeType &  x,
const OtherDerivativeType &  y 
)
47  {
48  return maybe_coherent_pad_helper<DerivativeType, OtherDerivativeType>::pad(x, y);
49 }

References Eigen::internal::maybe_coherent_pad_helper< DerivativeType, OtherDerivativeType, EnableIf >::pad(), plotDoE::x, and y.

Referenced by MakeCoherentCwiseBinaryOp().

◆ MICRO_COMPLEX_EXTRA_ROW()

template<typename Scalar , typename Packet , const Index accRows, bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal, const Index remaining_rows>
EIGEN_ALWAYS_INLINE void Eigen::internal::MICRO_COMPLEX_EXTRA_ROW ( const Scalar *&  lhs_ptr_real,
const Scalar *&  lhs_ptr_imag,
const Scalar *&  rhs_ptr_real0,
const Scalar *&  rhs_ptr_real1,
const Scalar *&  rhs_ptr_real2,
const Scalar *&  rhs_ptr_imag0,
const Scalar *&  rhs_ptr_imag1,
const Scalar *&  rhs_ptr_imag2,
PacketBlock< Packet, accRows > &  accReal,
PacketBlock< Packet, accRows > &  accImag 
)
2316  {
2318  pgerc<accRows, Scalar, Packet, ConjugateLhs, ConjugateRhs, LhsIsReal, RhsIsReal>(&accReal, &accImag, lhs_ptr_real,
2319  lhs_ptr_imag, rhsV, rhsVi);
2321 }
#define MICRO_COMPLEX_BROADCAST_EXTRA
Definition: MatrixProduct.h:2250
#define MICRO_COMPLEX_ADD_COLS(size)
Definition: MatrixProduct.h:2284

References MICRO_COMPLEX_ADD_COLS, and MICRO_COMPLEX_BROADCAST_EXTRA.

◆ MICRO_EXTRA_ROW()

template<typename Scalar , typename Packet , const Index accRows, const Index remaining_rows>
EIGEN_ALWAYS_INLINE void Eigen::internal::MICRO_EXTRA_ROW ( const Scalar *&  lhs_ptr,
const Scalar *&  rhs_ptr0,
const Scalar *&  rhs_ptr1,
const Scalar *&  rhs_ptr2,
PacketBlock< Packet, accRows > &  accZero 
)
1904  {
1906  pger<accRows, Scalar, Packet, false>(&accZero, lhs_ptr, rhsV);
1907  lhs_ptr += remaining_rows;
1908 }
#define MICRO_BROADCAST_EXTRA
Definition: MatrixProduct.h:1836

References MICRO_BROADCAST_EXTRA.

◆ min_size_prefer_dynamic()

template<typename A , typename B >
constexpr int Eigen::internal::min_size_prefer_dynamic ( A  a,
B  b 
)
inlineconstexpr

min_size_prefer_dynamic gives the min between compile-time sizes. 0 has absolute priority, followed by 1, followed by Dynamic, followed by other finite values. The reason for giving Dynamic the priority over finite values is that min(3, Dynamic) should be Dynamic, since that could be anything between 0 and 3.

668  {
670  if ((int)a == 0 || (int)b == 0) return 0;
671  if ((int)a == 1 || (int)b == 1) return 1;
672  if ((int)a == Dynamic || (int)b == Dynamic) return Dynamic;
673  return plain_enum_min(a, b);
674 }
constexpr int plain_enum_min(A a, B b)
Definition: Meta.h:649

References a, b, Eigen::Dynamic, plain_enum_asserts(), and plain_enum_min().

Referenced by check_random_matrix(), svd_compute_checks(), and Eigen::umeyama().

◆ min_size_prefer_fixed()

template<typename A , typename B >
constexpr int Eigen::internal::min_size_prefer_fixed ( A  a,
B  b 
)
inlineconstexpr

min_size_prefer_fixed is a variant of min_size_prefer_dynamic comparing MaxSizes. The difference is that finite values now have priority over Dynamic, so that min(3, Dynamic) gives 3. Indeed, whatever the actual value is (between 0 and 3), it is not more than 3.

683  {
685  if ((int)a == 0 || (int)b == 0) return 0;
686  if ((int)a == 1 || (int)b == 1) return 1;
687  if ((int)a == Dynamic && (int)b == Dynamic) return Dynamic;
688  if ((int)a == Dynamic) return (int)b;
689  if ((int)b == Dynamic) return (int)a;
690  return plain_enum_min(a, b);
691 }

References a, b, Eigen::Dynamic, plain_enum_asserts(), and plain_enum_min().

Referenced by partial_lu_inplace().

◆ minimize_helper()

template<typename BVH , typename Minimizer >
Minimizer::Scalar Eigen::internal::minimize_helper ( const BVH &  tree,
Minimizer &  minimizer,
typename BVH::Index  root,
typename Minimizer::Scalar  minimum 
)
151  {
152  typedef typename Minimizer::Scalar Scalar;
153  typedef typename BVH::Index Index;
154  typedef std::pair<Scalar, Index> QueueElement; // first element is priority
155  typedef typename BVH::VolumeIterator VolIter;
156  typedef typename BVH::ObjectIterator ObjIter;
157 
158  VolIter vBegin = VolIter(), vEnd = VolIter();
159  ObjIter oBegin = ObjIter(), oEnd = ObjIter();
160  std::priority_queue<QueueElement, std::vector<QueueElement>, std::greater<QueueElement> >
161  todo; // smallest is at the top
162 
163  todo.push(std::make_pair(Scalar(), root));
164 
165  while (!todo.empty()) {
166  tree.getChildren(todo.top().second, vBegin, vEnd, oBegin, oEnd);
167  todo.pop();
168 
169  for (; oBegin != oEnd; ++oBegin) // go through child objects
170  minimum = (std::min)(minimum, minimizer.minimumOnObject(*oBegin));
171 
172  for (; vBegin != vEnd; ++vBegin) { // go through child volumes
173  Scalar val = minimizer.minimumOnVolume(tree.getVolume(*vBegin));
174  if (val < minimum) todo.push(std::make_pair(val, *vBegin));
175  }
176  }
177 
178  return minimum;
179 }

References min, and calibrate::val.

Referenced by Eigen::BVMinimize().

◆ minres()

template<typename MatrixType , typename Rhs , typename Dest , typename Preconditioner >
EIGEN_DONT_INLINE void Eigen::internal::minres ( const MatrixType mat,
const Rhs rhs,
Dest &  x,
const Preconditioner &  precond,
Index iters,
typename Dest::RealScalar tol_error 
)

Low-level MINRES algorithm

Parameters
matThe matrix A
rhsThe right hand side vector b
xOn input and initial solution, on output the computed solution.
precondA right preconditioner being able to efficiently solve for an approximation of Ax=b (regardless of b)
itersOn input the max number of iteration, on output the number of performed iterations.
tol_errorOn input the tolerance error, on output an estimation of the relative error.
33  {
34  using std::sqrt;
35  typedef typename Dest::RealScalar RealScalar;
36  typedef typename Dest::Scalar Scalar;
37  typedef Matrix<Scalar, Dynamic, 1> VectorType;
38 
39  // Check for zero rhs
40  const RealScalar rhsNorm2(rhs.squaredNorm());
41  if (rhsNorm2 == 0) {
42  x.setZero();
43  iters = 0;
44  tol_error = 0;
45  return;
46  }
47 
48  // initialize
49  const Index maxIters(iters); // initialize maxIters to iters
50  const Index N(mat.cols()); // the size of the matrix
51  const RealScalar threshold2(tol_error * tol_error * rhsNorm2); // convergence threshold (compared to residualNorm2)
52 
53  // Initialize preconditioned Lanczos
54  VectorType v_old(N); // will be initialized inside loop
55  VectorType v(VectorType::Zero(N)); // initialize v
56  VectorType v_new(rhs - mat * x); // initialize v_new
57  RealScalar residualNorm2(v_new.squaredNorm());
58  VectorType w(N); // will be initialized inside loop
59  VectorType w_new(precond.solve(v_new)); // initialize w_new
60  // RealScalar beta; // will be initialized inside loop
61  RealScalar beta_new2(v_new.dot(w_new));
62  eigen_assert(beta_new2 >= 0.0 && "PRECONDITIONER IS NOT POSITIVE DEFINITE");
63  RealScalar beta_new(sqrt(beta_new2));
64  const RealScalar beta_one(beta_new);
65  // Initialize other variables
66  RealScalar c(1.0); // the cosine of the Givens rotation
67  RealScalar c_old(1.0);
68  RealScalar s(0.0); // the sine of the Givens rotation
69  RealScalar s_old(0.0); // the sine of the Givens rotation
70  VectorType p_oold(N); // will be initialized in loop
71  VectorType p_old(VectorType::Zero(N)); // initialize p_old=0
72  VectorType p(p_old); // initialize p=0
73  RealScalar eta(1.0);
74 
75  iters = 0; // reset iters
76  while (iters < maxIters) {
77  // Preconditioned Lanczos
78  /* Note that there are 4 variants on the Lanczos algorithm. These are
79  * described in Paige, C. C. (1972). Computational variants of
80  * the Lanczos method for the eigenproblem. IMA Journal of Applied
81  * Mathematics, 10(3), 373-381. The current implementation corresponds
82  * to the case A(2,7) in the paper. It also corresponds to
83  * algorithm 6.14 in Y. Saad, Iterative Methods for Sparse Linear
84  * Systems, 2003 p.173. For the preconditioned version see
85  * A. Greenbaum, Iterative Methods for Solving Linear Systems, SIAM (1987).
86  */
87  const RealScalar beta(beta_new);
88  v_old = v; // update: at first time step, this makes v_old = 0 so value of beta doesn't matter
89  v_new /= beta_new; // overwrite v_new for next iteration
90  w_new /= beta_new; // overwrite w_new for next iteration
91  v = v_new; // update
92  w = w_new; // update
93  v_new.noalias() = mat * w - beta * v_old; // compute v_new
94  const RealScalar alpha = v_new.dot(w);
95  v_new -= alpha * v; // overwrite v_new
96  w_new = precond.solve(v_new); // overwrite w_new
97  beta_new2 = v_new.dot(w_new); // compute beta_new
98  eigen_assert(beta_new2 >= 0.0 && "PRECONDITIONER IS NOT POSITIVE DEFINITE");
99  beta_new = sqrt(beta_new2); // compute beta_new
100 
101  // Givens rotation
102  const RealScalar r2 = s * alpha + c * c_old * beta; // s, s_old, c and c_old are still from previous iteration
103  const RealScalar r3 = s_old * beta; // s, s_old, c and c_old are still from previous iteration
104  const RealScalar r1_hat = c * alpha - c_old * s * beta;
105  const RealScalar r1 = sqrt(std::pow(r1_hat, 2) + std::pow(beta_new, 2));
106  c_old = c; // store for next iteration
107  s_old = s; // store for next iteration
108  c = r1_hat / r1; // new cosine
109  s = beta_new / r1; // new sine
110 
111  // Update solution
112  p_oold = p_old;
113  p_old = p;
114  p.noalias() = (w - r2 * p_old - r3 * p_oold) / r1; // IS NOALIAS REQUIRED?
115  x += beta_one * c * eta * p;
116 
117  /* Update the squared residual. Note that this is the estimated residual.
118  The real residual |Ax-b|^2 may be slightly larger */
119  residualNorm2 *= s * s;
120 
121  if (residualNorm2 < threshold2) {
122  break;
123  }
124 
125  eta = -s * eta; // update eta
126  iters++; // increment iteration number (for output purposes)
127  }
128 
129  /* Compute error. Note that this is the estimated error. The real
130  error |Ax-b|/|b| may be slightly larger */
131  tol_error = std::sqrt(residualNorm2 / rhsNorm2);
132 }
double eta
Definition: foeppl_von_karman/circular_disk/circular_disk.cc:45

References alpha, beta, calibrate::c, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), eigen_assert, TestSoln::eta, N, p, Eigen::bfloat16_impl::pow(), s, sqrt(), v, w, plotDoE::x, and oomph::PseudoSolidHelper::Zero.

Referenced by Eigen::MINRES< MatrixType_, UpLo_, Preconditioner_ >::_solve_vector_with_guess_impl(), and main().

◆ move_construct_elements_of_array()

template<typename T >
EIGEN_DEVICE_FUNC T* Eigen::internal::move_construct_elements_of_array ( T ptr,
T src,
std::size_t  size 
)
inline

Move-constructs the elements of an array. The size parameter tells on how many objects to move.

376  {
377  std::size_t i = 0;
378  EIGEN_TRY {
379  for (i = 0; i < size; ++i) ::new (ptr + i) T(std::move(*(src + i)));
380  }
381  EIGEN_CATCH(...) {
383  EIGEN_THROW;
384  }
385  return ptr;
386 }

References destruct_elements_of_array(), EIGEN_CATCH, EIGEN_THROW, EIGEN_TRY, i, and size.

Referenced by conditional_aligned_realloc_new().

◆ multVec()

template<Index num_acc>
EIGEN_ALWAYS_INLINE void Eigen::internal::multVec ( __vector_quad(&)  quad_acc[num_acc],
Packet8bf(&)  a0[num_acc],
Packet8bf  b0 
)
380  {
382  for (Index k = 0; k < num_acc; k++) {
383  __builtin_mma_xvbf16ger2pp(&(quad_acc[k]), reinterpret_cast<Packet16uc>(b0.m_val),
384  reinterpret_cast<Packet16uc>(a0[k].m_val));
385  }
386 }

References BFLOAT16_UNROLL, k, and Eigen::internal::eigen_packet_wrapper< T, unique_id >::m_val.

◆ multVecLoop()

template<Index num_acc, typename LhsMapper , typename RhsMapper , bool extra>
EIGEN_ALWAYS_INLINE void Eigen::internal::multVecLoop ( __vector_quad(&)  quad_acc[num_acc],
const LhsMapper &  lhs,
RhsMapper &  rhs,
Index  j,
Index  extra_cols 
)
600  {
601  Packet8bf a0[num_acc], b0;
602 
603  if (extra) {
604  b0 = rhs.template loadPacketPartial<Packet8bf>(j, extra_cols);
605  } else {
606  b0 = rhs.template loadPacket<Packet8bf>(j);
607  }
608 
609  const LhsMapper lhs2 = lhs.getSubMapper(0, j);
611  for (Index k = 0; k < num_acc; k++) {
612  if (extra) {
613  a0[k] = lhs2.template loadPacketPartial<Packet8bf>(k, 0, extra_cols);
614  } else {
615  a0[k] = lhs2.template loadPacket<Packet8bf>(k, 0);
616  }
617  }
618 
619  multVec<num_acc>(quad_acc, a0, b0);
620 }

References BFLOAT16_UNROLL, j, and k.

◆ muluh() [1/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE uint32_t Eigen::internal::muluh ( const uint32_t  a,
const T  b 
)
88  {
89 #if defined(EIGEN_GPU_COMPILE_PHASE)
90  return __umulhi(a, b);
91 #elif defined(SYCL_DEVICE_ONLY)
92  return cl::sycl::mul_hi(a, static_cast<uint32_t>(b));
93 #else
94  return (static_cast<uint64_t>(a) * b) >> 32;
95 #endif
96 }

References a, and b.

Referenced by Eigen::internal::TensorIntDivisor< T, div_gt_one >::divide().

◆ muluh() [2/2]

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE uint64_t Eigen::internal::muluh ( const uint64_t  a,
const T  b 
)
99  {
100 #if defined(EIGEN_GPU_COMPILE_PHASE)
101  return __umul64hi(a, b);
102 #elif defined(SYCL_DEVICE_ONLY)
103  return cl::sycl::mul_hi(a, static_cast<uint64_t>(b));
104 #elif EIGEN_COMP_MSVC && (EIGEN_ARCH_x86_64 || EIGEN_ARCH_ARM64)
105  return __umulh(a, static_cast<uint64_t>(b));
106 #elif EIGEN_HAS_BUILTIN_INT128
107  __uint128_t v = static_cast<__uint128_t>(a) * static_cast<__uint128_t>(b);
108  return static_cast<uint64_t>(v >> 64);
109 #else
110  return (TensorUInt128<static_val<0>, uint64_t>(a) * TensorUInt128<static_val<0>, uint64_t>(b)).upper();
111 #endif
112 }

References a, b, and v.

◆ nr_etdfs()

template<typename IndexVector >
void Eigen::internal::nr_etdfs ( typename IndexVector::Scalar  n,
IndexVector &  parent,
IndexVector &  first_kid,
IndexVector &  next_kid,
IndexVector &  post,
typename IndexVector::Scalar  postnum 
)

Depth-first search from vertex n. No recursion. This routine was contributed by Cédric Doucet, CEDRAT Group, Meylan, France.

127  {
128  typedef typename IndexVector::Scalar StorageIndex;
129  StorageIndex current = n, first, next;
130  while (postnum != n) {
131  // No kid for the current node
132  first = first_kid(current);
133 
134  // no kid for the current node
135  if (first == -1) {
136  // Numbering this node because it has no kid
137  post(current) = postnum++;
138 
139  // looking for the next kid
140  next = next_kid(current);
141  while (next == -1) {
142  // No more kids : back to the parent node
143  current = parent(current);
144  // numbering the parent node
145  post(current) = postnum++;
146 
147  // Get the next kid
148  next = next_kid(current);
149  }
150  // stopping criterion
151  if (postnum == n + 1) return;
152 
153  // Updating current node
154  current = next;
155  } else {
156  current = first;
157  }
158  }
159 }

References n.

Referenced by treePostorder().

◆ omega()

template<typename Vector , typename RealScalar >
Vector::Scalar Eigen::internal::omega ( const Vector t,
const Vector s,
RealScalar  angle 
)

Low-level Induced Dimension Reduction algorithm

Parameters
AThe matrix A
bThe right hand side vector b
xOn input and initial solution, on output the computed solution.
precondA preconditioner being able to efficiently solve for an approximation of Ax=b (regardless of b)
iterOn input the max number of iteration, on output the number of performed iterations.
relresOn input the tolerance error, on output an estimation of the relative error.
SOn input Number of the dimension of the shadow space.
smoothingswitches residual smoothing on.
anglesmall omega lead to faster convergence at the expense of numerical stability
replacementswitches on a residual replacement strategy to increase accuracy of residual at the expense of more Mat*vec products
Returns
false in the case of numerical issue, for example a break down of IDRS.
36  {
37  using numext::abs;
38  typedef typename Vector::Scalar Scalar;
39  const RealScalar ns = s.stableNorm();
40  const RealScalar nt = t.stableNorm();
41  const Scalar ts = t.dot(s);
42  const RealScalar rho = abs(ts / (nt * ns));
43 
44  if (rho < angle) {
45  if (ts == Scalar(0)) {
46  return Scalar(0);
47  }
48  // Original relation for om is given by
49  // om = om * angle / rho;
50  // To alleviate potential (near) division by zero this can be rewritten as
51  // om = angle * (ns / nt) * (ts / abs(ts)) = angle * (ns / nt) * sgn(ts)
52  return angle * (ns / nt) * (ts / abs(ts));
53  }
54  return ts / (nt * nt);
55 }

References abs(), Eigen::numext::abs(), Jeffery_Solution::angle(), s, and plotPSD::t.

Referenced by oomph::Problem::activate_hopf_tracking(), AxisymOscillatingDisk::AxisymOscillatingDisk(), bicgstabl(), oomph::Problem::bifurcation_adapt_helper(), Coil::Coil(), oomph::DampedJacobi< MATRIX >::DampedJacobi(), oomph::SegregatableFSIProblem::enable_under_relaxation(), ExactSoln::get_exact_u(), HorizontalScrew::HorizontalScrew(), idrs(), HGridOptimiser::initialisePolyFunc(), main(), ExactSoln::prescribed_traction(), AxisymOscillatingDisk::residual_for_dispersion(), Screw::Screw(), Coil::set(), TriangulatedScrewSelfTest::setupInitialConditions(), CoupledBeam::setupOomph(), ABCProblem< ELEMENT, TIMESTEPPERT >::solve(), oomph::BlockHopfLinearSolver::solve(), oomph::BlockHopfLinearSolver::solve_for_two_rhs(), and oomph::BiCGStab< MATRIX >::solve_helper().

◆ oneConvertBF16Hi()

EIGEN_ALWAYS_INLINE Packet4f Eigen::internal::oneConvertBF16Hi ( Packet8us  data)
2671  {
2672  Packet8us z = pset1<Packet8us>(0);
2673 #ifdef _BIG_ENDIAN
2674  return reinterpret_cast<Packet4f>(vec_mergeh(data, z));
2675 #else
2676  return reinterpret_cast<Packet4f>(vec_mergeh(z, data));
2677 #endif
2678 }
EIGEN_STRONG_INLINE Packet8us pset1< Packet8us >(const unsigned short int &from)
Definition: AltiVec/PacketMath.h:788

References data, and pset1< Packet8us >().

Referenced by loadVecLoopVSX(), multVSXVecLoop(), and storeConvertTwoBF16().

◆ oneConvertBF16Lo()

EIGEN_ALWAYS_INLINE Packet4f Eigen::internal::oneConvertBF16Lo ( Packet8us  data)
2680  {
2681  Packet8us z = pset1<Packet8us>(0);
2682 #ifdef _BIG_ENDIAN
2683  return reinterpret_cast<Packet4f>(vec_mergel(data, z));
2684 #else
2685  return reinterpret_cast<Packet4f>(vec_mergel(z, data));
2686 #endif
2687 }

References data, and pset1< Packet8us >().

Referenced by loadVecLoopVSX(), multVSXVecLoop(), and storeConvertTwoBF16().

◆ oneConvertBF16Perm()

EIGEN_ALWAYS_INLINE Packet4f Eigen::internal::oneConvertBF16Perm ( Packet8us  data,
Packet16uc  mask 
)
2732  {
2733  Packet8us z = pset1<Packet8us>(0);
2734 #ifdef _BIG_ENDIAN
2735  return reinterpret_cast<Packet4f>(vec_perm(data, z, mask));
2736 #else
2737  return reinterpret_cast<Packet4f>(vec_perm(z, data, mask));
2738 #endif
2739 }

References data, and pset1< Packet8us >().

Referenced by convertArrayPointerBF16toF32DupOne(), and vecColLoopVSX().

◆ operator!=()

template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool Eigen::internal::operator!= ( const TensorUInt128< HL, LL > &  lhs,
const TensorUInt128< HR, LR > &  rhs 
)
76  {
77  return (lhs.high != rhs.high) || (lhs.low != rhs.low);
78 }

References Eigen::internal::TensorUInt128< HIGH, LOW >::high, and Eigen::internal::TensorUInt128< HIGH, LOW >::low.

◆ operator*()

template<typename HL , typename LL , typename HR , typename LR >
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorUInt128<uint64_t, uint64_t> Eigen::internal::operator* ( const TensorUInt128< HL, LL > &  lhs,
const TensorUInt128< HR, LR > &  rhs 
)
static
120  {
121  // Split each 128-bit integer into 4 32-bit integers, and then do the
122  // multiplications by hand as follow:
123  // lhs a b c d
124  // rhs e f g h
125  // -----------
126  // ah bh ch dh
127  // bg cg dg
128  // cf df
129  // de
130  // The result is stored in 2 64bit integers, high and low.
131 
132  const uint64_t LOW = 0x00000000FFFFFFFFLL;
133  const uint64_t HIGH = 0xFFFFFFFF00000000LL;
134 
135  uint64_t d = lhs.low & LOW;
136  uint64_t c = (lhs.low & HIGH) >> 32LL;
137  uint64_t b = lhs.high & LOW;
138  uint64_t a = (lhs.high & HIGH) >> 32LL;
139 
140  uint64_t h = rhs.low & LOW;
141  uint64_t g = (rhs.low & HIGH) >> 32LL;
142  uint64_t f = rhs.high & LOW;
143  uint64_t e = (rhs.high & HIGH) >> 32LL;
144 
145  // Compute the low 32 bits of low
146  uint64_t acc = d * h;
147  uint64_t low = acc & LOW;
148  // Compute the high 32 bits of low. Add a carry every time we wrap around
149  acc >>= 32LL;
150  uint64_t carry = 0;
151  uint64_t acc2 = acc + c * h;
152  if (acc2 < acc) {
153  carry++;
154  }
155  acc = acc2 + d * g;
156  if (acc < acc2) {
157  carry++;
158  }
159  low |= (acc << 32LL);
160 
161  // Carry forward the high bits of acc to initiate the computation of the
162  // low 32 bits of high
163  acc2 = (acc >> 32LL) | (carry << 32LL);
164  carry = 0;
165 
166  acc = acc2 + b * h;
167  if (acc < acc2) {
168  carry++;
169  }
170  acc2 = acc + c * g;
171  if (acc2 < acc) {
172  carry++;
173  }
174  acc = acc2 + d * f;
175  if (acc < acc2) {
176  carry++;
177  }
178  uint64_t high = acc & LOW;
179 
180  // Start to compute the high 32 bits of high.
181  acc2 = (acc >> 32LL) | (carry << 32LL);
182 
183  acc = acc2 + a * h;
184  acc2 = acc + b * g;
185  acc = acc2 + c * f;
186  acc2 = acc + d * e;
187  high |= (acc2 << 32LL);
188 
189  return TensorUInt128<uint64_t, uint64_t>(high, low);
190 }

References a, b, calibrate::c, e(), f(), Eigen::internal::TensorUInt128< HIGH, LOW >::high, and Eigen::internal::TensorUInt128< HIGH, LOW >::low.

◆ operator+()

template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE TensorUInt128<uint64_t, uint64_t> Eigen::internal::operator+ ( const TensorUInt128< HL, LL > &  lhs,
const TensorUInt128< HR, LR > &  rhs 
)
100  {
101  TensorUInt128<uint64_t, uint64_t> result(lhs.high + rhs.high, lhs.low + rhs.low);
102  if (result.low < rhs.low) {
103  result.high += 1;
104  }
105  return result;
106 }

References Eigen::internal::TensorUInt128< HIGH, LOW >::high, and Eigen::internal::TensorUInt128< HIGH, LOW >::low.

◆ operator-()

template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE TensorUInt128<uint64_t, uint64_t> Eigen::internal::operator- ( const TensorUInt128< HL, LL > &  lhs,
const TensorUInt128< HR, LR > &  rhs 
)
110  {
111  TensorUInt128<uint64_t, uint64_t> result(lhs.high - rhs.high, lhs.low - rhs.low);
112  if (result.low > lhs.low) {
113  result.high -= 1;
114  }
115  return result;
116 }

References Eigen::internal::TensorUInt128< HIGH, LOW >::high, and Eigen::internal::TensorUInt128< HIGH, LOW >::low.

◆ operator/() [1/2]

template<typename T , bool div_gt_one>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T Eigen::internal::operator/ ( const T numerator,
const TensorIntDivisor< T, div_gt_one > &  divisor 
)
254  {
255  return divisor.divide(numerator);
256 }

References Eigen::internal::TensorIntDivisor< T, div_gt_one >::divide().

◆ operator/() [2/2]

template<typename HL , typename LL , typename HR , typename LR >
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TensorUInt128<uint64_t, uint64_t> Eigen::internal::operator/ ( const TensorUInt128< HL, LL > &  lhs,
const TensorUInt128< HR, LR > &  rhs 
)
static
194  {
195  if (rhs == TensorUInt128<static_val<0>, static_val<1>>(1)) {
196  return TensorUInt128<uint64_t, uint64_t>(lhs.high, lhs.low);
197  } else if (lhs < rhs) {
198  return TensorUInt128<uint64_t, uint64_t>(0);
199  } else {
200  // calculate the biggest power of 2 times rhs that's less than or equal to lhs
201  TensorUInt128<uint64_t, uint64_t> power2(1);
202  TensorUInt128<uint64_t, uint64_t> d(rhs);
203  TensorUInt128<uint64_t, uint64_t> tmp(lhs - d);
204  while (lhs >= d) {
205  tmp = tmp - d;
206  d = d + d;
207  power2 = power2 + power2;
208  }
209 
210  tmp = TensorUInt128<uint64_t, uint64_t>(lhs.high, lhs.low);
211  TensorUInt128<uint64_t, uint64_t> result(0);
212  while (power2 != TensorUInt128<static_val<0>, static_val<0>>(0)) {
213  if (tmp >= d) {
214  tmp = tmp - d;
215  result = result + power2;
216  }
217  // Shift right
218  power2 = TensorUInt128<uint64_t, uint64_t>(power2.high >> 1, (power2.low >> 1) | (power2.high << 63));
219  d = TensorUInt128<uint64_t, uint64_t>(d.high >> 1, (d.low >> 1) | (d.high << 63));
220  }
221 
222  return result;
223  }
224 }

References Eigen::internal::TensorUInt128< HIGH, LOW >::high, Eigen::internal::TensorUInt128< HIGH, LOW >::low, and tmp.

◆ operator<()

template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool Eigen::internal::operator< ( const TensorUInt128< HL, LL > &  lhs,
const TensorUInt128< HR, LR > &  rhs 
)
91  {
92  if (lhs.high != rhs.high) {
93  return lhs.high < rhs.high;
94  }
95  return lhs.low < rhs.low;
96 }

References Eigen::internal::TensorUInt128< HIGH, LOW >::high, and Eigen::internal::TensorUInt128< HIGH, LOW >::low.

◆ operator<<() [1/15]

std::ostream& Eigen::internal::operator<< ( std::ostream &  os,
const Packet1cd value 
)
inline
384  {
385  os << "[ (" << value.v[0] << ", " << value.v[1] << "i) ]";
386  return os;
387 }

References Eigen::value.

◆ operator<<() [2/15]

std::ostream& Eigen::internal::operator<< ( std::ostream &  os,
const Packet2cf value 
)
inline
81  {
82  os << "[ (" << value.v[0] << ", " << value.v[1]
83  << "i),"
84  " ("
85  << value.v[2] << ", " << value.v[3] << "i) ]";
86  return os;
87 }

References Eigen::value.

◆ operator<<() [3/15]

std::ostream & Eigen::internal::operator<< ( std::ostream &  os,
const Packet2d value 
)
inline
831  {
832  os << "[ " << value[0] << ", " << value[1] << " ]";
833  return os;
834 }

References Eigen::value.

◆ operator<<() [4/15]

std::ostream & Eigen::internal::operator<< ( std::ostream &  os,
const Packet2l value 
)
inline
836  {
837  os << "[ " << value[0] << ", " << value[1] << " ]";
838  return os;
839 }

References Eigen::value.

◆ operator<<() [5/15]

std::ostream & Eigen::internal::operator<< ( std::ostream &  os,
const Packet2ul value 
)
inline
841  {
842  os << "[ " << value[0] << ", " << value[1] << " ]";
843  return os;
844 }

References Eigen::value.

◆ operator<<() [6/15]

std::ostream& Eigen::internal::operator<< ( std::ostream &  os,
const PacketBlock< Packet1cd, 2 > &  value 
)
inline
598  {
599  os << "[ " << value.packet[0] << ", " << std::endl << " " << value.packet[1] << " ]";
600  return os;
601 }

References Eigen::value.

◆ operator<<() [7/15]

std::ostream& Eigen::internal::operator<< ( std::ostream &  os,
const PacketBlock< Packet2cf, 2 > &  value 
)
inline
304  {
305  os << "[ " << value.packet[0] << ", " << std::endl << " " << value.packet[1] << " ]";
306  return os;
307 }

References Eigen::value.

◆ operator<<() [8/15]

std::ostream& Eigen::internal::operator<< ( std::ostream &  os,
const PacketBlock< Packet2d, 2 > &  value 
)
inline
1152  {
1153  os << "[ " << value.packet[0] << "," << std::endl << " " << value.packet[1] << " ]";
1154  return os;
1155 }

References Eigen::value.

◆ operator<<() [9/15]

std::ostream& Eigen::internal::operator<< ( std::ostream &  os,
const PacketBlock< Packet4f, 4 > &  value 
)
inline
679  {
680  os << "[ " << value.packet[0] << "," << std::endl
681  << " " << value.packet[1] << "," << std::endl
682  << " " << value.packet[2] << "," << std::endl
683  << " " << value.packet[3] << " ]";
684  return os;
685 }

References Eigen::value.

◆ operator<<() [10/15]

std::ostream& Eigen::internal::operator<< ( std::ostream &  os,
const PacketBlock< Packet4i, 4 > &  value 
)
inline
703  {
704  os << "[ " << value.packet[0] << "," << std::endl
705  << " " << value.packet[1] << "," << std::endl
706  << " " << value.packet[2] << "," << std::endl
707  << " " << value.packet[3] << " ]";
708  return os;
709 }

References Eigen::value.

◆ operator<<() [11/15]

std::ostream& Eigen::internal::operator<< ( std::ostream &  s,
const Packet16c v 
)
inline
427  {
428  union {
429  Packet16c v;
430  signed char n[16];
431  } vt;
432  vt.v = v;
433  for (int i = 0; i < 16; i++) s << vt.n[i] << ", ";
434  return s;
435 }
__vector signed char Packet16c
Definition: AltiVec/PacketMath.h:40

References i, n, s, and v.

◆ operator<<() [12/15]

std::ostream& Eigen::internal::operator<< ( std::ostream &  s,
const Packet16uc v 
)
inline
437  {
438  union {
439  Packet16uc v;
440  unsigned char n[16];
441  } vt;
442  vt.v = v;
443  for (int i = 0; i < 16; i++) s << vt.n[i] << ", ";
444  return s;
445 }

References i, n, s, and v.

◆ operator<<() [13/15]

std::ostream & Eigen::internal::operator<< ( std::ostream &  s,
const Packet4f v 
)
inline
447  {
448  union {
449  Packet4f v;
450  float n[4];
451  } vt;
452  vt.v = v;
453  s << vt.n[0] << ", " << vt.n[1] << ", " << vt.n[2] << ", " << vt.n[3];
454  return s;
455 }

References n, s, and v.

◆ operator<<() [14/15]

std::ostream & Eigen::internal::operator<< ( std::ostream &  s,
const Packet4i v 
)
inline
457  {
458  union {
459  Packet4i v;
460  int n[4];
461  } vt;
462  vt.v = v;
463  s << vt.n[0] << ", " << vt.n[1] << ", " << vt.n[2] << ", " << vt.n[3];
464  return s;
465 }
__vector int Packet4i
Definition: AltiVec/PacketMath.h:34

References n, s, and v.

◆ operator<<() [15/15]

std::ostream & Eigen::internal::operator<< ( std::ostream &  s,
const Packet4ui v 
)
inline
467  {
468  union {
469  Packet4ui v;
470  unsigned int n[4];
471  } vt;
472  vt.v = v;
473  s << vt.n[0] << ", " << vt.n[1] << ", " << vt.n[2] << ", " << vt.n[3];
474  return s;
475 }

References n, s, and v.

◆ operator==()

template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool Eigen::internal::operator== ( const TensorUInt128< HL, LL > &  lhs,
const TensorUInt128< HR, LR > &  rhs 
)
70  {
71  return (lhs.high == rhs.high) && (lhs.low == rhs.low);
72 }

References Eigen::internal::TensorUInt128< HIGH, LOW >::high, and Eigen::internal::TensorUInt128< HIGH, LOW >::low.

◆ operator>=()

template<typename HL , typename LL , typename HR , typename LR >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool Eigen::internal::operator>= ( const TensorUInt128< HL, LL > &  lhs,
const TensorUInt128< HR, LR > &  rhs 
)
82  {
83  if (lhs.high != rhs.high) {
84  return lhs.high > rhs.high;
85  }
86  return lhs.low >= rhs.low;
87 }

References Eigen::internal::TensorUInt128< HIGH, LOW >::high, and Eigen::internal::TensorUInt128< HIGH, LOW >::low.

◆ outer_product_selector_run() [1/2]

template<typename Dst , typename Lhs , typename Rhs , typename Func >
void EIGEN_DEVICE_FUNC Eigen::internal::outer_product_selector_run ( Dst &  dst,
const Lhs lhs,
const Rhs rhs,
const Func &  func,
const false_type  
)
262  {
263  evaluator<Rhs> rhsEval(rhs);
264  ei_declare_local_nested_eval(Lhs, lhs, Rhs::SizeAtCompileTime, actual_lhs);
265  // FIXME if cols is large enough, then it might be useful to make sure that lhs is sequentially stored
266  // FIXME not very good if rhs is real and lhs complex while alpha is real too
267  const Index cols = dst.cols();
268  for (Index j = 0; j < cols; ++j) func(dst.col(j), rhsEval.coeff(Index(0), j) * actual_lhs);
269 }
#define ei_declare_local_nested_eval(XPR_T, XPR, N, NAME)
Definition: Memory.h:812
func(actual_m, actual_n, a, *lda, actual_b, 1, actual_c, 1, alpha)

References cols, ei_declare_local_nested_eval, func(), j, and Lhs.

Referenced by Eigen::internal::generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, OuterProduct >::addTo(), Eigen::internal::generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, OuterProduct >::evalTo(), Eigen::internal::generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, OuterProduct >::scaleAndAddTo(), and Eigen::internal::generic_product_impl< Lhs, Rhs, DenseShape, DenseShape, OuterProduct >::subTo().

◆ outer_product_selector_run() [2/2]

template<typename Dst , typename Lhs , typename Rhs , typename Func >
void EIGEN_DEVICE_FUNC Eigen::internal::outer_product_selector_run ( Dst &  dst,
const Lhs lhs,
const Rhs rhs,
const Func &  func,
const true_type  
)
274  {
275  evaluator<Lhs> lhsEval(lhs);
276  ei_declare_local_nested_eval(Rhs, rhs, Lhs::SizeAtCompileTime, actual_rhs);
277  // FIXME if rows is large enough, then it might be useful to make sure that rhs is sequentially stored
278  // FIXME not very good if lhs is real and rhs complex while alpha is real too
279  const Index rows = dst.rows();
280  for (Index i = 0; i < rows; ++i) func(dst.row(i), lhsEval.coeff(i, Index(0)) * actual_rhs);
281 }

References ei_declare_local_nested_eval, func(), i, Rhs, and rows.

◆ outputResults()

template<Index num_acc, bool rhsExtraCols, bool lhsExtraRows, Index num_rhs, Index num_lhs>
EIGEN_ALWAYS_INLINE void Eigen::internal::outputResults ( Packet4f(&)  acc[num_acc][4],
Index  rows,
const Packet4f  pAlpha,
float *  result,
const Index  extra_cols,
Index  extra_rows 
)
86  {
88  for (Index i = 0, k = 0; i < num_rhs - (rhsExtraCols ? 1 : 0); i++, result += 4 * rows) {
90  for (Index j = 0; j < num_lhs; j++, k++) {
91  storeResults<false, lhsExtraRows>(acc[k], rows, pAlpha, result + j * 4, extra_cols, extra_rows);
92  }
93  }
94  if (rhsExtraCols) {
95  storeResults<rhsExtraCols, lhsExtraRows>(acc[num_acc - 1], rows, pAlpha, result, extra_cols, extra_rows);
96  }
97 }

References BFLOAT16_UNROLL, i, j, k, and rows.

◆ outputResultsVSX()

template<Index num_acc, bool rhsExtraCols, bool lhsExtraRows, Index num_rhs>
EIGEN_ALWAYS_INLINE void Eigen::internal::outputResultsVSX ( Packet4f(&)  acc[num_acc][4],
Index  rows,
const Packet4f  pAlpha,
float *  result,
const Index  extra_cols,
Index  extra_rows 
)
2865  {
2866  tranposeResults<num_acc>(acc);
2867  addResults<num_acc>(acc);
2868 
2869  constexpr Index real_rhs = ((num_rhs / 2) - (rhsExtraCols ? 1 : 0));
2870  Index k = 0;
2871  for (Index i = 0; i < real_rhs; i++, result += 4 * rows, k++) {
2872  storeResults<false, lhsExtraRows>(acc[k], rows, pAlpha, result, extra_cols, extra_rows);
2873  }
2874  if (rhsExtraCols) {
2875  storeResults<rhsExtraCols, lhsExtraRows>(acc[k], rows, pAlpha, result, extra_cols, extra_rows);
2876  }
2877 }

References i, k, and rows.

◆ outputVecColResults()

template<Index num_acc, bool extraRows, Index size = 4>
EIGEN_ALWAYS_INLINE void Eigen::internal::outputVecColResults ( Packet4f(&)  acc[num_acc][size],
float *  result,
Packet4f  pAlpha,
Index  extra_rows 
)

◆ outputVecResults()

template<Index num_acc, Index size = 4>
EIGEN_ALWAYS_INLINE void Eigen::internal::outputVecResults ( Packet4f(&)  acc[num_acc][size],
float *  result,
Packet4f  pAlpha 
)

◆ p2ui_CONJ_XOR()

uint32x2_t Eigen::internal::p2ui_CONJ_XOR ( )
inline
32  {
33  static const uint32_t conj_XOR_DATA[] = {0x00000000, 0x80000000};
34  return vld1_u32(conj_XOR_DATA);
35 }

Referenced by pconj(), and pmul< Packet1cf >().

◆ pabs() [1/37]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pabs ( const Packet a)
inline
Returns
the absolute value of a
676  {
677  return numext::abs(a);
678 }

References a, and Eigen::numext::abs().

◆ pabs() [2/37]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pabs ( const Packet16bf a)
2875  {
2876  const __m256i sign_mask = _mm256_set1_epi16(static_cast<numext::uint16_t>(0x8000));
2877  return _mm256_andnot_si256(sign_mask, a);
2878 }
std::uint16_t uint16_t
Definition: Meta.h:38

References a.

◆ pabs() [3/37]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pabs ( const Packet16c a)
1952  {
1953  return vec_abs(a);
1954 }

References a.

◆ pabs() [4/37]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pabs ( const Packet16f a)
1320  {
1321  // _mm512_abs_ps intrinsic not found, so hack around it
1322  return _mm512_castsi512_ps(_mm512_and_si512(_mm512_castps_si512(a), _mm512_set1_epi32(0x7fffffff)));
1323 }

References a.

◆ pabs() [5/37]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pabs ( const Packet16h a)
2270  {
2271  const __m256i sign_mask = _mm256_set1_epi16(static_cast<numext::uint16_t>(0x8000));
2272  return _mm256_andnot_si256(sign_mask, a);
2273 }

References a.

◆ pabs() [6/37]

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pabs ( const Packet16i a)
1330  {
1331  return _mm512_abs_epi32(a);
1332 }

References a.

◆ pabs() [7/37]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pabs ( const Packet16uc a)
1956  {
1957  return a;
1958 }

References a.

◆ pabs() [8/37]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pabs ( const Packet2d a)
1366  {
1367  return (Packet2d)__lsx_vbitclri_d((__m128i)a, 63);
1368 }

References a.

◆ pabs() [9/37]

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pabs ( const Packet2f a)
3354  {
3355  return vabs_f32(a);
3356 }

References a.

◆ pabs() [10/37]

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pabs ( const Packet2i a)
3402  {
3403  return vabs_s32(a);
3404 }

References a.

◆ pabs() [11/37]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pabs ( const Packet2l a)
1382  {
1383  return __lsx_vabsd_d(a, pzero(a));
1384 }
EIGEN_STRONG_INLINE Packet2d pzero(const Packet2d &)
Definition: LSX/PacketMath.h:2724

References a, and pzero().

◆ pabs() [12/37]

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pabs ( const Packet2ui a)
3410  {
3411  return a;
3412 }

References a.

◆ pabs() [13/37]

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pabs ( const Packet2ul a)
1398  {
1399  return a;
1400 }

References a.

◆ pabs() [14/37]

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pabs ( const Packet4bf a)
4860  {
4861  return F32ToBf16(pabs<Packet4f>(Bf16ToF32(a)));
4862 }
EIGEN_STRONG_INLINE Packet4f pabs< Packet4f >(const Packet4f &a)
Definition: ZVector/PacketMath.h:954
EIGEN_STRONG_INLINE Packet4bf F32ToBf16(const Packet4f &p)
Definition: NEON/PacketMath.h:4792
EIGEN_STRONG_INLINE Packet4f Bf16ToF32(const Packet4bf &p)
Definition: NEON/PacketMath.h:4818

References a, Bf16ToF32(), F32ToBf16(), and pabs< Packet4f >().

◆ pabs() [15/37]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pabs ( const Packet4d a)
1823  {
1824  const Packet4d mask = _mm256_castsi256_pd(_mm256_set1_epi64x(0x7FFFFFFFFFFFFFFF));
1825  return _mm256_and_pd(a, mask);
1826 }
__m256d Packet4d
Definition: AVX/PacketMath.h:36

References a.

◆ pabs() [16/37]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pabs ( const Packet4f a)
1936  {
1937  return vec_abs(a);
1938 }

References a.

Referenced by generic_atan(), generic_pow(), generic_pow_impl(), generic_rint(), generic_round(), generic_trunc(), Eigen::internal::unary_pow::handle_negative_exponent(), Eigen::internal::unary_pow::handle_nonint_nonint_errors(), pabs< Packet4f >(), pabsdiff< Packet16c >(), pabsdiff< Packet16uc >(), pabsdiff< Packet4f >(), pabsdiff< Packet4i >(), pabsdiff< Packet4ui >(), pabsdiff< Packet8s >(), pabsdiff< Packet8us >(), packetmath_notcomplex(), Eigen::internal::scalar_abs_op< Scalar >::packetOp(), Eigen::internal::scalar_isfinite_op< Scalar, true >::packetOp(), pacos_float(), pasin_float(), patanh_double(), patanh_float(), pblueNorm(), pdiv_complex(), pdiv_float_common(), pexp_complex(), pexp_double(), pexp_float(), pfrexp_generic(), pfrexp_generic_get_biased_exponent(), phypot_complex(), pisinf(), plog_complex(), psincos_double(), psincos_float(), psincos_inner_msa_float(), psqrt_complex(), ptanh< Packet4f >(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t< NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&unpacket_traits< Packet >::vectorizable > >::run(), Eigen::internal::generic_i0e< T, float >::run(), Eigen::internal::generic_i0e< T, double >::run(), Eigen::internal::generic_i0< T, ScalarType >::run(), Eigen::internal::generic_i1e< T, float >::run(), Eigen::internal::generic_i1e< T, double >::run(), Eigen::internal::generic_i1< T, ScalarType >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), and twosum().

◆ pabs() [17/37]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pabs ( const Packet4i a)
1940  {
1941  return vec_abs(a);
1942 }

References a.

◆ pabs() [18/37]

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pabs ( const Packet4s a)
3386  {
3387  return vabs_s16(a);
3388 }

References a.

◆ pabs() [19/37]

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pabs ( const Packet4uc a)
3374  {
3375  return a;
3376 }

References a.

◆ pabs() [20/37]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pabs ( const Packet4ui a)
1394  {
1395  return a;
1396 }

References a.

◆ pabs() [21/37]

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pabs ( const Packet4us a)
3394  {
3395  return a;
3396 }

References a.

◆ pabs() [22/37]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pabs ( const Packet8bf a)
1960  {
1961  EIGEN_DECLARE_CONST_FAST_Packet8us(abs_mask, 0x7FFF);
1962  return pand<Packet8us>(p8us_abs_mask, a);
1963 }

References a, EIGEN_DECLARE_CONST_FAST_Packet8us(), and pand< Packet8us >().

◆ pabs() [23/37]

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pabs ( const Packet8c a)
3366  {
3367  return vabs_s8(a);
3368 }

References a.

◆ pabs() [24/37]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pabs ( const Packet8d a)
1325  {
1326  // _mm512_abs_ps intrinsic not found, so hack around it
1327  return _mm512_castsi512_pd(_mm512_and_si512(_mm512_castpd_si512(a), _mm512_set1_epi64(0x7fffffffffffffff)));
1328 }

References a.

◆ pabs() [25/37]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pabs ( const Packet8f a)
1818  {
1819  const Packet8f mask = _mm256_castsi256_ps(_mm256_set1_epi32(0x7FFFFFFF));
1820  return _mm256_and_ps(a, mask);
1821 }

References a.

◆ pabs() [26/37]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pabs ( const Packet8h a)
2268  {
2269  const __m128i sign_mask = _mm_set1_epi16(static_cast<numext::uint16_t>(0x8000));
2270  return _mm_andnot_si128(sign_mask, a);
2271 }

References a.

◆ pabs() [27/37]

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pabs ( const Packet8i a)
1828  {
1829 #ifdef EIGEN_VECTORIZE_AVX2
1830  return _mm256_abs_epi32(a);
1831 #else
1832  __m128i lo = _mm_abs_epi32(_mm256_extractf128_si256(a, 0));
1833  __m128i hi = _mm_abs_epi32(_mm256_extractf128_si256(a, 1));
1834  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1835 #endif
1836 }

References a.

◆ pabs() [28/37]

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pabs ( const Packet8l a)
1334  {
1335  return _mm512_abs_epi64(a);
1336 }

References a.

◆ pabs() [29/37]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pabs ( const Packet8s a)
1944  {
1945  return vec_abs(a);
1946 }

References a.

◆ pabs() [30/37]

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pabs ( const Packet8uc a)
3378  {
3379  return a;
3380 }

References a.

◆ pabs() [31/37]

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pabs ( const Packet8ui a)
1838  {
1839  return a;
1840 }

References a.

◆ pabs() [32/37]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pabs ( const Packet8us a)
1948  {
1949  return a;
1950 }

References a.

◆ pabs() [33/37]

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pabs ( const PacketXf &  a)
582  {
583  return svabs_f32_x(svptrue_b32(), a);
584 }

References a.

◆ pabs() [34/37]

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pabs ( const PacketXi &  a)
259  {
260  return svabs_s32_x(svptrue_b32(), a);
261 }

References a.

◆ pabs() [35/37]

template<>
EIGEN_DEVICE_FUNC unsigned int Eigen::internal::pabs ( const unsigned int a)
inline
680  {
681  return a;
682 }

References a.

◆ pabs() [36/37]

template<>
EIGEN_DEVICE_FUNC unsigned long Eigen::internal::pabs ( const unsigned long &  a)
inline
684  {
685  return a;
686 }

References a.

◆ pabs() [37/37]

template<>
EIGEN_DEVICE_FUNC unsigned long long Eigen::internal::pabs ( const unsigned long long &  a)
inline
688  {
689  return a;
690 }

References a.

◆ pabs< Packet2d >()

623  {
624  return vec_abs(a);
625 }

References a.

◆ pabs< Packet32h >()

190  {
191  return _mm512_abs_ph(a);
192 }

References a.

◆ pabs< Packet4c >()

3362  {
3363  return vget_lane_s32(vreinterpret_s32_s8(vabs_s8(vreinterpret_s8_s32(vdup_n_s32(a)))), 0);
3364 }

References a.

◆ pabs< Packet4f >()

954  {
955  Packet4f res;
956  res.v4f[0] = pabs(a.v4f[0]);
957  res.v4f[1] = pabs(a.v4f[1]);
958  return res;
959 }

References a, pabs(), and res.

Referenced by pabs().

◆ pabs< Packet4i >()

619  {
620  return vec_abs(a);
621 }

References a.

◆ pabsdiff()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pabsdiff ( const Packet a,
const Packet b 
)
inline
Returns
the min of a and b (coeff-wise)
746  {
747  return pselect(pcmp_lt(a, b), psub(b, a), psub(a, b));
748 }
EIGEN_DEVICE_FUNC Packet pselect(const Packet &mask, const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:600
EIGEN_DEVICE_FUNC Packet pcmp_lt(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:434

References a, b, pcmp_lt(), pselect(), and psub().

Referenced by packetmath_notcomplex(), and Eigen::internal::scalar_absolute_difference_op< LhsScalar, RhsScalar >::packetOp().

◆ pabsdiff< Packet16c >()

2758  {
2759  Packet16c v = psub(a, b);
2760  return pabs(v);
2761 }
EIGEN_STRONG_INLINE Packet2ul pabs(const Packet2ul &a)
Definition: LSX/PacketMath.h:1398

References a, b, pabs(), psub(), and v.

◆ pabsdiff< Packet16uc >()

2793  {
2794  Packet16uc v = psub(a, b);
2795  return pabs(v);
2796 }

References a, b, pabs(), psub(), and v.

◆ pabsdiff< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pabsdiff< Packet2f > ( const Packet2f a,
const Packet2f b 
)
1365  {
1366  return vabd_f32(a, b);
1367 }

References a, and b.

◆ pabsdiff< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pabsdiff< Packet2i > ( const Packet2i a,
const Packet2i b 
)
1415  {
1416  return vabd_s32(a, b);
1417 }

References a, and b.

◆ pabsdiff< Packet2ui >()

1423  {
1424  return vabd_u32(a, b);
1425 }

References a, and b.

◆ pabsdiff< Packet4bf >()

5012  {
5014 }
EIGEN_STRONG_INLINE Packet4f pabsdiff< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:2690

References a, b, Bf16ToF32(), F32ToBf16(), and pabsdiff< Packet4f >().

◆ pabsdiff< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pabsdiff< Packet4c > ( const Packet4c a,
const Packet4c b 
)
1373  {
1374  return vget_lane_s32(
1375  vreinterpret_s32_s8(vabd_s8(vreinterpret_s8_s32(vdup_n_s32(a)), vreinterpret_s8_s32(vdup_n_s32(b)))), 0);
1376 }

References a, and b.

◆ pabsdiff< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pabsdiff< Packet4f > ( const Packet4f a,
const Packet4f b 
)
2690  {
2691  Packet4f v = psub(a, b);
2692  return pabs(v);
2693 }

References a, b, pabs(), psub(), and v.

Referenced by pabsdiff< Packet4bf >().

◆ pabsdiff< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pabsdiff< Packet4i > ( const Packet4i a,
const Packet4i b 
)
2774  {
2775  Packet4i v = psub(a, b);
2776  return pabs(v);
2777 }

References a, b, pabs(), psub(), and v.

◆ pabsdiff< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pabsdiff< Packet4s > ( const Packet4s a,
const Packet4s b 
)
1399  {
1400  return vabd_s16(a, b);
1401 }

References a, and b.

◆ pabsdiff< Packet4uc >()

1386  {
1387  return vget_lane_u32(
1388  vreinterpret_u32_u8(vabd_u8(vreinterpret_u8_u32(vdup_n_u32(a)), vreinterpret_u8_u32(vdup_n_u32(b)))), 0);
1389 }

References a, and b.

◆ pabsdiff< Packet4ui >()

2838  {
2839  Packet4ui v = psub(a, b);
2840  return pabs(v);
2841 }

References a, b, pabs(), psub(), and v.

◆ pabsdiff< Packet4us >()

1407  {
1408  return vabd_u16(a, b);
1409 }

References a, and b.

◆ pabsdiff< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pabsdiff< Packet8c > ( const Packet8c a,
const Packet8c b 
)
1378  {
1379  return vabd_s8(a, b);
1380 }

References a, and b.

◆ pabsdiff< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pabsdiff< Packet8s > ( const Packet8s a,
const Packet8s b 
)
2764  {
2765  Packet8s v = psub(a, b);
2766  return pabs(v);
2767 }
__vector short int Packet8s
Definition: AltiVec/PacketMath.h:37

References a, b, pabs(), psub(), and v.

◆ pabsdiff< Packet8uc >()

1391  {
1392  return vabd_u8(a, b);
1393 }

References a, and b.

◆ pabsdiff< Packet8us >()

2816  {
2817  Packet8us v = psub(a, b);
2818  return pabs(v);
2819 }

References a, b, pabs(), psub(), and v.

◆ Pack16To8()

EIGEN_STRONG_INLINE __m128i Eigen::internal::Pack16To8 ( Packet8f  rf)
402  {
403  return _mm_packs_epi32(_mm256_extractf128_si256(_mm256_castps_si256(rf), 0),
404  _mm256_extractf128_si256(_mm256_castps_si256(rf), 1));
405 }

Referenced by pcmp_eq(), pcmp_le(), pcmp_lt(), and pcmp_lt_or_nan().

◆ Pack32To16()

EIGEN_STRONG_INLINE __m256i Eigen::internal::Pack32To16 ( Packet16f  rf)
653  {
654  // Split data into small pieces and handle with AVX instructions
655  // to guarantee internal order of vector.
656  // Operation:
657  // dst[15:0] := Saturate16(rf[31:0])
658  // dst[31:16] := Saturate16(rf[63:32])
659  // ...
660  // dst[255:240] := Saturate16(rf[255:224])
661  __m256i lo = _mm256_castps_si256(extract256<0>(rf));
662  __m256i hi = _mm256_castps_si256(extract256<1>(rf));
663  __m128i result_lo = _mm_packs_epi32(_mm256_extractf128_si256(lo, 0), _mm256_extractf128_si256(lo, 1));
664  __m128i result_hi = _mm_packs_epi32(_mm256_extractf128_si256(hi, 0), _mm256_extractf128_si256(hi, 1));
665  return _mm256_insertf128_si256(_mm256_castsi128_si256(result_lo), result_hi, 1);
666 }

Referenced by pcmp_eq(), pcmp_le(), pcmp_lt(), and pcmp_lt_or_nan().

◆ packetwise_redux_empty_value() [1/2]

template<typename PacketType , typename Func >
EIGEN_DEVICE_FUNC PacketType Eigen::internal::packetwise_redux_empty_value ( const Func &  )
55  {
56  const typename unpacket_traits<PacketType>::type zero(0);
57  return pset1<PacketType>(zero);
58 }

References zero().

◆ packetwise_redux_empty_value() [2/2]

template<typename PacketType , typename Scalar >
EIGEN_DEVICE_FUNC PacketType Eigen::internal::packetwise_redux_empty_value ( const scalar_product_op< Scalar, Scalar > &  )
62  {
63  return pset1<PacketType>(Scalar(1));
64 }

◆ pacos()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pacos ( const Packet a)
Returns
the arc cosine of a (coeff-wise)
1043  {
1045  return acos(a);
1046 }
AnnoyingScalar acos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:138

References a, acos(), and EIGEN_USING_STD.

Referenced by packetmath_real(), and Eigen::internal::scalar_acos_op< Scalar >::packetOp().

◆ pacos_float()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pacos_float ( const Packet x)
Returns
acos(x) for single precision float
999  {
1000  typedef typename unpacket_traits<Packet>::type Scalar;
1001  static_assert(std::is_same<Scalar, float>::value, "Scalar type must be float");
1002 
1003  const Packet cst_one = pset1<Packet>(Scalar(1));
1004  const Packet cst_pi = pset1<Packet>(Scalar(EIGEN_PI));
1005  const Packet p6 = pset1<Packet>(Scalar(2.36423197202384471893310546875e-3));
1006  const Packet p5 = pset1<Packet>(Scalar(-1.1368644423782825469970703125e-2));
1007  const Packet p4 = pset1<Packet>(Scalar(2.717843465507030487060546875e-2));
1008  const Packet p3 = pset1<Packet>(Scalar(-4.8969544470310211181640625e-2));
1009  const Packet p2 = pset1<Packet>(Scalar(8.8804088532924652099609375e-2));
1010  const Packet p1 = pset1<Packet>(Scalar(-0.214591205120086669921875));
1011  const Packet p0 = pset1<Packet>(Scalar(1.57079637050628662109375));
1012 
1013  // For x in [0:1], we approximate acos(x)/sqrt(1-x), which is a smooth
1014  // function, by a 6'th order polynomial.
1015  // For x in [-1:0) we use that acos(-x) = pi - acos(x).
1016  const Packet neg_mask = psignbit(x_in);
1017  const Packet abs_x = pabs(x_in);
1018 
1019  // Evaluate the polynomial using Horner's rule:
1020  // P(x) = p0 + x * (p1 + x * (p2 + ... (p5 + x * p6)) ... ) .
1021  // We evaluate even and odd terms independently to increase
1022  // instruction level parallelism.
1023  Packet x2 = pmul(x_in, x_in);
1024  Packet p_even = pmadd(p6, x2, p4);
1025  Packet p_odd = pmadd(p5, x2, p3);
1026  p_even = pmadd(p_even, x2, p2);
1027  p_odd = pmadd(p_odd, x2, p1);
1028  p_even = pmadd(p_even, x2, p0);
1029  Packet p = pmadd(p_odd, abs_x, p_even);
1030 
1031  // The polynomial approximates acos(x)/sqrt(1-x), so
1032  // multiply by sqrt(1-x) to get acos(x).
1033  // Conveniently returns NaN for arguments outside [-1:1].
1034  Packet denom = psqrt(psub(cst_one, abs_x));
1035  Packet result = pmul(denom, p);
1036  // Undo mapping for negative arguments.
1037  return pselect(neg_mask, psub(cst_pi, result), result);
1038 }

References EIGEN_PI, p, p0, p1, pabs(), pmadd(), pmul(), pselect(), psignbit(), psqrt(), psub(), Eigen::value, and Global_parameters::x2().

◆ padd() [1/4]

template<>
EIGEN_DEVICE_FUNC bool Eigen::internal::padd ( const bool a,
const bool b 
)
inline
323  {
324  return a || b;
325 }

References a, and b.

◆ padd() [2/4]

template<typename Packet >
DoublePacket<Packet> Eigen::internal::padd ( const DoublePacket< Packet > &  a,
const DoublePacket< Packet > &  b 
)
637  {
638  DoublePacket<Packet> res;
639  res.first = padd(a.first, b.first);
640  res.second = padd(a.second, b.second);
641  return res;
642 }
DoublePacket< Packet > padd(const DoublePacket< Packet > &a, const DoublePacket< Packet > &b)
Definition: products/GeneralBlockPanelKernel.h:637

References a, b, padd(), and res.

◆ padd() [3/4]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::padd ( const Packet a,
const Packet b 
)
inline
Returns
a + b (coeff-wise)
318  {
319  return a + b;
320 }

References a, and b.

Referenced by Eigen::internal::gebp_traits< std::complex< RealScalar >, std::complex< RealScalar >, ConjLhs_, ConjRhs_, Arch, PacketSize_ >::acc(), Eigen::internal::add_assign_op< DstScalar, SrcScalar >::assignPacket(), benchVec(), doubleword_div_fp(), fast_twosum(), generic_ceil(), generic_exp2(), generic_log1p(), generic_pow_impl(), generic_rint(), generic_round(), Eigen::internal::gebp_traits< LhsScalar_, RhsScalar_, ConjLhs_, ConjRhs_, Arch, PacketSize_ >::madd(), Eigen::internal::gebp_traits< std::complex< RealScalar >, RealScalar, ConjLhs_, false, Arch, PacketSize_ >::madd_impl(), Eigen::internal::gebp_traits< RealScalar, std::complex< RealScalar >, false, ConjRhs_, Arch, PacketSize_ >::madd_impl(), Eigen::internal::gebp_kernel< LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::lhs_process_one_packet< nr, LhsProgress, RhsProgress, LhsScalar, RhsScalar, ResScalar, AccPacket, LhsPacket, RhsPacket, ResPacket, GEBPTraits, LinearMapper, DataMapper >::operator()(), Eigen::internal::accurate_log2< double >::operator()(), Eigen::internal::Packet1cd::operator*=(), Eigen::internal::Packet2cf::operator*=(), Eigen::internal::Packet1cd::operator+=(), Eigen::internal::Packet2cf::operator+=(), Eigen::internal::Packet1cd::operator/=(), Eigen::internal::scalar_logistic_op< float >::packetOp(), Eigen::internal::scalar_sum_op< LhsScalar, RhsScalar >::packetOp(), Eigen::internal::scalar_logistic_op_impl< T, EnableIf >::packetOp(), Eigen::internal::linspaced_op_impl< Scalar, false >::packetOp(), padd(), padd< Packet16h >(), padd< Packet8h >(), paddsub(), paddsub< Packet2d >(), paddsub< Packet2f >(), paddsub< Packet4f >(), patanh_double(), patanh_float(), pblueNorm(), pdiv_complex(), pexp< Packet4f >(), pexp_float(), pfrexp_generic(), phypot_complex(), pldexp< Packet4d >(), pldexp< Packet8d >(), pldexp_fast(), pldexp_fast< Packet2d >(), pldexp_fast< Packet4d >(), pldexp_generic(), plog< Packet4f >(), plog_impl_double(), plog_impl_float(), plset< Packet4d >(), plset< Packet8f >(), plset< Packet8i >(), plset< Packet8ui >(), pmadd(), predux< Packet2cd >(), predux< Packet4cd >(), predux< Packet4cf >(), predux< Packet8cf >(), pround(), pround< Packet16f >(), pround< Packet32h >(), pround< Packet4d >(), pround< Packet8d >(), pround< Packet8f >(), psincos_double(), psincos_float(), psincos_inner_msa_float(), psqrt_complex(), Eigen::internal::inner_product_impl< Evaluator, true >::run(), Eigen::internal::compute_inverse_size4< Architecture::Target, float, MatrixType, ResultType >::run(), Eigen::internal::compute_inverse_size4< Architecture::Target, double, MatrixType, ResultType >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t< NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&unpacket_traits< Packet >::vectorizable > >::run(), Eigen::internal::quat_product< Architecture::Target, Derived, OtherDerived, float >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_y0< T, float >::run(), Eigen::internal::generic_y0< T, double >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), Eigen::internal::generic_y1< T, float >::run(), Eigen::internal::generic_y1< T, double >::run(), Eigen::internal::apply_rotation_in_the_plane_selector< Scalar, OtherScalar, SizeAtCompileTime, MinAlignment, true >::run(), trig_reduce_medium_double(), twoprod(), twosum(), Eigen::internal::gemm_class< Scalar, is_unit_inc >::vaddm(), and veltkamp_splitting().

◆ padd() [4/4]

template<typename Packet >
EIGEN_DEVICE_FUNC std::enable_if_t<unpacket_traits<Packet>::masked_fpops_available, Packet> Eigen::internal::padd ( const Packet a,
const Packet b,
typename unpacket_traits< Packet >::mask_t  umask 
)
inline
Returns
a packet version of *from, (un-aligned masked add) There is no generic implementation. We only have implementations for specialized cases. Generic case should not be called.

◆ padd< Packet16b >()

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::padd< Packet16b > ( const Packet16b a,
const Packet16b b 
)
516  {
517  return _mm_or_si128(a, b);
518 }

References a, and b.

◆ padd< Packet16bf >()

2881  {
2883 }
EIGEN_STRONG_INLINE Packet16f padd< Packet16f >(const Packet16f &a, const Packet16f &b, uint16_t umask)
Definition: AVX512/PacketMath.h:372
EIGEN_STRONG_INLINE Packet16bf F32ToBf16(const Packet16f &a)
Definition: AVX512/PacketMath.h:2752
EIGEN_STRONG_INLINE Packet16f Bf16ToF32(const Packet16bf &a)
Definition: AVX512/PacketMath.h:2747

References a, b, Bf16ToF32(), F32ToBf16(), and padd< Packet16f >().

◆ padd< Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::padd< Packet16c > ( const Packet16c a,
const Packet16c b 
)
1086  {
1087  return a + b;
1088 }

References a, and b.

◆ padd< Packet16f >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::padd< Packet16f > ( const Packet16f a,
const Packet16f b 
)
355  {
356  return _mm512_add_ps(a, b);
357 }

References a, and b.

Referenced by padd< Packet16bf >().

◆ padd< Packet16f >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::padd< Packet16f > ( const Packet16f a,
const Packet16f b,
uint16_t  umask 
)
372  {
373  __mmask16 mask = static_cast<__mmask16>(umask);
374  return _mm512_maskz_add_ps(mask, a, b);
375 }

References a, and b.

◆ padd< Packet16h >()

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::padd< Packet16h > ( const Packet16h a,
const Packet16h b 
)
2374  {
2375  Packet16f af = half2float(a);
2376  Packet16f bf = half2float(b);
2377  Packet16f rf = padd(af, bf);
2378  return float2half(rf);
2379 }
EIGEN_STRONG_INLINE Packet16h float2half(const Packet16f &a)
Definition: AVX512/PacketMath.h:2260
EIGEN_STRONG_INLINE Packet16f half2float(const Packet16h &a)
Definition: AVX512/PacketMath.h:2258
__m512 Packet16f
Definition: AVX512/PacketMath.h:34

References a, b, float2half(), half2float(), and padd().

Referenced by predux_half_dowto4< Packet32h >().

◆ padd< Packet16i >()

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::padd< Packet16i > ( const Packet16i a,
const Packet16i b 
)
363  {
364  return _mm512_add_epi32(a, b);
365 }

References a, and b.

◆ padd< Packet16uc >()

1090  {
1091  return a + b;
1092 }

References a, and b.

◆ padd< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::padd< Packet1cd > ( const Packet1cd a,
const Packet1cd b 
)
305  {
306  return Packet1cd(__lsx_vfadd_d(a.v, b.v));
307 }

References a, and b.

◆ padd< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::padd< Packet1cf > ( const Packet1cf a,
const Packet1cf b 
)
132  {
133  return Packet1cf(padd<Packet2f>(a.v, b.v));
134 }
EIGEN_STRONG_INLINE Packet2f padd< Packet2f >(const Packet2f &a, const Packet2f &b)
Definition: NEON/PacketMath.h:840

References a, b, and padd< Packet2f >().

◆ padd< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::padd< Packet2cd > ( const Packet2cd a,
const Packet2cd b 
)
272  {
273  return Packet2cd(_mm256_add_pd(a.v, b.v));
274 }

References a, and b.

◆ padd< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::padd< Packet2cf > ( const Packet2cf a,
const Packet2cf b 
)
256  {
257  return Packet2cf(a.v + b.v);
258 }

References a, and b.

◆ padd< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::padd< Packet2d > ( const Packet2d a,
const Packet2d b 
)
605  {
606  return __lsx_vfadd_d(a, b);
607 }

References a, and b.

◆ padd< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::padd< Packet2f > ( const Packet2f a,
const Packet2f b 
)
840  {
841  return vadd_f32(a, b);
842 }

References a, and b.

Referenced by padd< Packet1cf >().

◆ padd< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::padd< Packet2i > ( const Packet2i a,
const Packet2i b 
)
890  {
891  return vadd_s32(a, b);
892 }

References a, and b.

◆ padd< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::padd< Packet2l > ( const Packet2l a,
const Packet2l b 
)
581  {
582  return __lsx_vadd_d(a, b);
583 }

References a, and b.

◆ padd< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::padd< Packet2ui > ( const Packet2ui a,
const Packet2ui b 
)
898  {
899  return vadd_u32(a, b);
900 }

References a, and b.

◆ padd< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::padd< Packet2ul > ( const Packet2ul a,
const Packet2ul b 
)
597  {
598  return __lsx_vadd_d(a, b);
599 }

References a, and b.

◆ padd< Packet32h >()

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::padd< Packet32h > ( const Packet32h a,
const Packet32h b 
)
293  {
294  return _mm512_add_ph(a, b);
295 }

References a, and b.

◆ padd< Packet4bf >()

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::padd< Packet4bf > ( const Packet4bf a,
const Packet4bf b 
)
4953  {
4955 }
EIGEN_STRONG_INLINE Packet4f padd< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1066

References a, b, Bf16ToF32(), F32ToBf16(), and padd< Packet4f >().

◆ padd< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::padd< Packet4c > ( const Packet4c a,
const Packet4c b 
)
848  {
849  return vget_lane_s32(
850  vreinterpret_s32_s8(vadd_s8(vreinterpret_s8_s32(vdup_n_s32(a)), vreinterpret_s8_s32(vdup_n_s32(b)))), 0);
851 }

References a, and b.

◆ padd< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::padd< Packet4cd > ( const Packet4cd a,
const Packet4cd b 
)
252  {
253  return Packet4cd(_mm512_add_pd(a.v, b.v));
254 }

References a, and b.

◆ padd< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::padd< Packet4cf > ( const Packet4cf a,
const Packet4cf b 
)
69  {
70  return Packet4cf(_mm256_add_ps(a.v, b.v));
71 }

References a, and b.

◆ padd< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::padd< Packet4d > ( const Packet4d a,
const Packet4d b 
)
828  {
829  return _mm256_add_pd(a, b);
830 }

References a, and b.

◆ padd< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::padd< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1066  {
1067  return a + b;
1068 }

References a, and b.

Referenced by padd< Packet4bf >(), padd< Packet8bf >(), Eigen::internal::Packet2cf::pmul(), and predux< Packet2cf >().

◆ padd< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::padd< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1070  {
1071  return a + b;
1072 }

References a, and b.

◆ padd< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::padd< Packet4s > ( const Packet4s a,
const Packet4s b 
)
874  {
875  return vadd_s16(a, b);
876 }

References a, and b.

◆ padd< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::padd< Packet4uc > ( const Packet4uc a,
const Packet4uc b 
)
861  {
862  return vget_lane_u32(
863  vreinterpret_u32_u8(vadd_u8(vreinterpret_u8_u32(vdup_n_u32(a)), vreinterpret_u8_u32(vdup_n_u32(b)))), 0);
864 }

References a, and b.

◆ padd< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::padd< Packet4ui > ( const Packet4ui a,
const Packet4ui b 
)
1074  {
1075  return a + b;
1076 }

References a, and b.

Referenced by F32ToBf16().

◆ padd< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::padd< Packet4us > ( const Packet4us a,
const Packet4us b 
)
882  {
883  return vadd_u16(a, b);
884 }

References a, and b.

◆ padd< Packet8bf >()

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::padd< Packet8bf > ( const Packet8bf a,
const Packet8bf b 
)
2283  {
2285 }
#define BF16_TO_F32_BINARY_OP_WRAPPER(OP, A, B)
Definition: AltiVec/PacketMath.h:2264

References a, b, BF16_TO_F32_BINARY_OP_WRAPPER, and padd< Packet4f >().

Referenced by plset< Packet8bf >(), and predux_half_dowto4< Packet16bf >().

◆ padd< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::padd< Packet8c > ( const Packet8c a,
const Packet8c b 
)
853  {
854  return vadd_s8(a, b);
855 }

References a, and b.

◆ padd< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::padd< Packet8cf > ( const Packet8cf a,
const Packet8cf b 
)
71  {
72  return Packet8cf(_mm512_add_ps(a.v, b.v));
73 }

References a, and b.

◆ padd< Packet8d >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::padd< Packet8d > ( const Packet8d a,
const Packet8d b 
)
359  {
360  return _mm512_add_pd(a, b);
361 }

References a, and b.

◆ padd< Packet8d >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::padd< Packet8d > ( const Packet8d a,
const Packet8d b,
uint8_t  umask 
)
377  {
378  __mmask8 mask = static_cast<__mmask8>(umask);
379  return _mm512_maskz_add_pd(mask, a, b);
380 }

References a, and b.

◆ padd< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::padd< Packet8f > ( const Packet8f a,
const Packet8f b 
)
817  {
818  return _mm256_add_ps(a, b);
819 }

References a, and b.

◆ padd< Packet8h >()

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::padd< Packet8h > ( const Packet8h a,
const Packet8h b 
)
2390  {
2391  Packet8f af = half2float(a);
2392  Packet8f bf = half2float(b);
2393  Packet8f rf = padd(af, bf);
2394  return float2half(rf);
2395 }
EIGEN_STRONG_INLINE Packet8f half2float(const Packet8h &a)
Definition: AVX/PacketMath.h:2273

References a, b, float2half(), half2float(), and padd().

Referenced by predux_half_dowto4< Packet16h >().

◆ padd< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::padd< Packet8i > ( const Packet8i a,
const Packet8i b 
)
832  {
833 #ifdef EIGEN_VECTORIZE_AVX2
834  return _mm256_add_epi32(a, b);
835 #else
836  __m128i lo = _mm_add_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
837  __m128i hi = _mm_add_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
838  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
839 #endif
840 }

References a, and b.

◆ padd< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::padd< Packet8l > ( const Packet8l a,
const Packet8l b 
)
367  {
368  return _mm512_add_epi64(a, b);
369 }

References a, and b.

◆ padd< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::padd< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1078  {
1079  return a + b;
1080 }

References a, and b.

◆ padd< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::padd< Packet8uc > ( const Packet8uc a,
const Packet8uc b 
)
866  {
867  return vadd_u8(a, b);
868 }

References a, and b.

◆ padd< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::padd< Packet8ui > ( const Packet8ui a,
const Packet8ui b 
)
842  {
843 #ifdef EIGEN_VECTORIZE_AVX2
844  return _mm256_add_epi32(a, b);
845 #else
846  __m128i lo = _mm_add_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
847  __m128i hi = _mm_add_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
848  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
849 #endif
850 }

References a, and b.

◆ padd< Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::padd< Packet8us > ( const Packet8us a,
const Packet8us b 
)
1082  {
1083  return a + b;
1084 }

References a, and b.

Referenced by F32ToBf16Two().

◆ padd< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::padd< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
401  {
402  return svadd_f32_x(svptrue_b32(), a, b);
403 }

References a, and b.

◆ padd< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::padd< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
93  {
94  return svadd_s32_x(svptrue_b32(), a, b);
95 }

References a, and b.

◆ padds()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::padds ( const Packet a,
const Packet b 
)

◆ padds< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::padds< Packet2d > ( const Packet2d a,
const Packet2d b 
)
527  {
528  return _mm_add_sd(a, b);
529 }

References a, and b.

◆ padds< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::padds< Packet4f > ( const Packet4f a,
const Packet4f b 
)
523  {
524  return _mm_add_ss(a, b);
525 }

References a, and b.

◆ paddsub()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::paddsub ( const Packet a,
const Packet b 
)
inline
Returns
the addsub value of a,b
694  {
695  return pselect(peven_mask(a), padd(a, b), psub(a, b));
696 }
EIGEN_DEVICE_FUNC std::enable_if_t< unpacket_traits< Packet >::masked_fpops_available, Packet > padd(const Packet &a, const Packet &b, typename unpacket_traits< Packet >::mask_t umask)
EIGEN_DEVICE_FUNC Packet peven_mask(const Packet &)
Definition: GenericPacketMath.h:879

References a, b, padd(), peven_mask(), pselect(), and psub().

◆ paddsub< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::paddsub< Packet2d > ( const Packet2d a,
const Packet2d b 
)
661  {
662  const Packet2d mask = make_packet2d(numext::bit_cast<double>(0x8000000000000000ull), 0.0);
663  return padd(a, pxor(mask, b));
664 }
EIGEN_ALWAYS_INLINE Packet2d make_packet2d(double a, double b)
Definition: LSX/PacketMath.h:145

References a, b, make_packet2d(), padd(), and pxor().

◆ paddsub< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::paddsub< Packet2f > ( const Packet2f a,
const Packet2f b 
)
992  {
993  Packet2f mask = make_packet2f(numext::bit_cast<float>(0x80000000u), 0.0f);
994  return padd(a, pxor(mask, b));
995 }
EIGEN_STRONG_INLINE Packet4bf pxor(const Packet4bf &a, const Packet4bf &b)
Definition: NEON/PacketMath.h:4903
EIGEN_ALWAYS_INLINE Packet2f make_packet2f(float a, float b)
Definition: NEON/PacketMath.h:95

References a, b, make_packet2f(), padd(), and pxor().

◆ paddsub< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::paddsub< Packet4f > ( const Packet4f a,
const Packet4f b 
)
653  {
654  const Packet4f mask =
655  make_packet4f(numext::bit_cast<float>(0x80000000u), 0.0f, numext::bit_cast<float>(0x80000000u), 0.0f);
656  return padd(a, pxor(mask, b));
657 }
EIGEN_ALWAYS_INLINE Packet4f make_packet4f(float a, float b, float c, float d)
Definition: LSX/PacketMath.h:92

References a, b, make_packet4f(), padd(), and pxor().

◆ pand() [1/7]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pand ( const Packet a,
const Packet b 
)
inline
Returns
the bitwise and of a and b
554  {
555  return bitwise_helper<Packet>::bitwise_and(a, b);
556 }

References a, b, and Eigen::internal::bytewise_bitwise_helper< T >::bitwise_and().

◆ pand() [2/7]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pand ( const Packet16bf a,
const Packet16bf b 
)
2802  {
2804 }
eigen_packet_wrapper< __m256i, 0 > Packet8i
Definition: AVX/PacketMath.h:35
EIGEN_STRONG_INLINE Packet8i pand< Packet8i >(const Packet8i &a, const Packet8i &b)
Definition: AVX/PacketMath.h:1310

References a, b, and pand< Packet8i >().

◆ pand() [3/7]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pand ( const Packet16h a,
const Packet16h b 
)
2301  {
2302  return Packet16h(pand(Packet8i(a), Packet8i(b)));
2303 }
EIGEN_STRONG_INLINE Packet16bf pand(const Packet16bf &a, const Packet16bf &b)
Definition: AVX512/PacketMath.h:2802
eigen_packet_wrapper< __m256i, 1 > Packet16h
Definition: AVX512/PacketMath.h:39

References a, b, and pand().

◆ pand() [4/7]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pand ( const Packet32h a,
const Packet32h b 
)
239  {
240  return _mm512_castsi512_ph(_mm512_and_si512(_mm512_castph_si512(a), _mm512_castph_si512(b)));
241 }

References a, and b.

◆ pand() [5/7]

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pand ( const Packet4bf a,
const Packet4bf b 
)
4908  {
4910 }
eigen_packet_wrapper< uint16x4_t, 19 > Packet4bf
Definition: NEON/PacketMath.h:4726
EIGEN_STRONG_INLINE Packet4us pand< Packet4us >(const Packet4us &a, const Packet4us &b)
Definition: NEON/PacketMath.h:1939
uint16x4_t Packet4us
Definition: NEON/PacketMath.h:85

References a, b, and pand< Packet4us >().

◆ pand() [6/7]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pand ( const Packet8bf a,
const Packet8bf b 
)
2699  {
2700  return _mm_and_si128(a, b);
2701 }

References a, and b.

◆ pand() [7/7]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pand ( const Packet8h a,
const Packet8h b 
)
2319  {
2320  return _mm_and_si128(a, b);
2321 }

References a, and b.

Referenced by erfc_double_large(), generic_atan(), generic_ceil(), generic_floor(), generic_pow(), generic_round(), Eigen::internal::unary_pow::handle_negative_exponent(), Eigen::internal::unary_pow::handle_nonint_nonint_errors(), Eigen::internal::minmax_coeff_visitor< Derived, is_min, NaNPropagation, isInt >::initpacket(), Eigen::internal::minmax_coeff_visitor< Derived, is_min, NaNPropagation, false >::initpacket(), Eigen::internal::minmax_coeff_visitor< Derived, is_min, PropagateNumbers, false >::packet(), Eigen::internal::minmax_coeff_visitor< Derived, is_min, NaNPropagation, false >::packet(), packetmath(), Eigen::internal::scalar_boolean_not_op< Scalar >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_EQ, UseTypedComparators >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_LT, UseTypedComparators >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_LE, UseTypedComparators >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_GT, UseTypedComparators >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_GE, UseTypedComparators >::packetOp(), Eigen::internal::scalar_boolean_xor_op< Scalar >::packetOp(), Eigen::internal::scalar_bitwise_and_op< Scalar >::packetOp(), pand(), pand< Packet16f >(), pand< Packet4cd >(), pand< Packet8cf >(), pandnot(), patanh_double(), patanh_float(), pblueNorm(), pcmp_eq(), pcmp_lt(), pexp_complex(), pfrexp_generic(), pfrexp_generic_get_biased_exponent(), plog_impl_double(), plog_impl_float(), pround(), pround< Packet16f >(), pround< Packet32h >(), pround< Packet4d >(), pround< Packet8d >(), pround< Packet8f >(), psincos_double(), psincos_float(), psincos_inner_msa_float(), psqrt_complex(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&NumTraits< typename unpacket_traits< Packet >::type >::IsSigned &&NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psignbit_impl< Packet, false, false >::run(), Eigen::internal::pselect_impl< Packet, EnableIf >::run(), and Eigen::internal::generic_fast_erfc< Scalar >::run().

◆ pand< Packet16b >()

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::pand< Packet16b > ( const Packet16b a,
const Packet16b b 
)
808  {
809  return _mm_and_si128(a, b);
810 }

References a, and b.

◆ pand< Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pand< Packet16c > ( const Packet16c a,
const Packet16c b 
)
884  {
885  return __lsx_vand_v(a, b);
886 }

References a, and b.

◆ pand< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pand< Packet16f > ( const Packet16f a,
const Packet16f b 
)
817  {
818 #ifdef EIGEN_VECTORIZE_AVX512DQ
819  return _mm512_and_ps(a, b);
820 #else
821  return _mm512_castsi512_ps(pand(_mm512_castps_si512(a), _mm512_castps_si512(b)));
822 #endif
823 }

References a, b, and pand().

◆ pand< Packet16i >()

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pand< Packet16i > ( const Packet16i a,
const Packet16i b 
)
807  {
808  return _mm512_and_si512(a, b);
809 }

References a, and b.

◆ pand< Packet16uc >()

900  {
901  return __lsx_vand_v(a, b);
902 }

References a, and b.

◆ pand< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pand< Packet1cd > ( const Packet1cd a,
const Packet1cd b 
)
343  {
344  Packet1cd res;
345  res.v = (Packet2d)__lsx_vand_v((__m128i)a.v, (__m128i)b.v);
346  return res;
347 }

References a, b, and res.

◆ pand< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pand< Packet1cf > ( const Packet1cf a,
const Packet1cf b 
)
263  {
264  return Packet1cf(vreinterpret_f32_u32(vand_u32(vreinterpret_u32_f32(a.v), vreinterpret_u32_f32(b.v))));
265 }

References a, and b.

◆ pand< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::pand< Packet2cd > ( const Packet2cd a,
const Packet2cd b 
)
312  {
313  return Packet2cd(_mm256_and_pd(a.v, b.v));
314 }

References a, and b.

◆ pand< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pand< Packet2cf > ( const Packet2cf a,
const Packet2cf b 
)
273  {
274  return Packet2cf(pand<Packet4f>(a.v, b.v));
275 }

References a, b, and pand< Packet4f >().

◆ pand< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pand< Packet2d > ( const Packet2d a,
const Packet2d b 
)
880  {
881  return (Packet2d)__lsx_vand_v((__m128i)a, (__m128i)b);
882 }

References a, and b.

Referenced by pcmp_eq().

◆ pand< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pand< Packet2f > ( const Packet2f a,
const Packet2f b 
)
1899  {
1900  return vreinterpret_f32_u32(vand_u32(vreinterpret_u32_f32(a), vreinterpret_u32_f32(b)));
1901 }

References a, and b.

Referenced by pcmp_eq().

◆ pand< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pand< Packet2i > ( const Packet2i a,
const Packet2i b 
)
1947  {
1948  return vand_s32(a, b);
1949 }

References a, and b.

◆ pand< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pand< Packet2l > ( const Packet2l a,
const Packet2l b 
)
896  {
897  return __lsx_vand_v(a, b);
898 }

References a, and b.

◆ pand< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pand< Packet2ui > ( const Packet2ui a,
const Packet2ui b 
)
1955  {
1956  return vand_u32(a, b);
1957 }

References a, and b.

◆ pand< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pand< Packet2ul > ( const Packet2ul a,
const Packet2ul b 
)
912  {
913  return __lsx_vand_v(a, b);
914 }

References a, and b.

◆ pand< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pand< Packet4c > ( const Packet4c a,
const Packet4c b 
)
1907  {
1908  return a & b;
1909 }

References a, and b.

◆ pand< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::pand< Packet4cd > ( const Packet4cd a,
const Packet4cd b 
)
284  {
285  return Packet4cd(pand(a.v, b.v));
286 }

References a, b, and pand().

◆ pand< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::pand< Packet4cf > ( const Packet4cf a,
const Packet4cf b 
)
110  {
111  return Packet4cf(_mm256_and_ps(a.v, b.v));
112 }

References a, and b.

◆ pand< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pand< Packet4d > ( const Packet4d a,
const Packet4d b 
)
1306  {
1307  return _mm256_and_pd(a, b);
1308 }

References a, and b.

◆ pand< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pand< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1406  {
1407  return vec_and(a, b);
1408 }

References a, and b.

Referenced by Bf16ToF32Odd(), and pand< Packet2cf >().

◆ pand< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pand< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1410  {
1411  return vec_and(a, b);
1412 }

References a, and b.

Referenced by pcmp_eq().

◆ pand< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pand< Packet4s > ( const Packet4s a,
const Packet4s b 
)
1931  {
1932  return vand_s16(a, b);
1933 }

References a, and b.

◆ pand< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pand< Packet4uc > ( const Packet4uc a,
const Packet4uc b 
)
1919  {
1920  return a & b;
1921 }

References a, and b.

◆ pand< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pand< Packet4ui > ( const Packet4ui a,
const Packet4ui b 
)
1414  {
1415  return vec_and(a, b);
1416 }

References a, and b.

Referenced by F32ToBf16(), pcast< Packet8bf, Packet8us >(), and pcast< Packet8us, Packet8bf >().

◆ pand< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pand< Packet4us > ( const Packet4us a,
const Packet4us b 
)
1939  {
1940  return vand_u16(a, b);
1941 }

References a, and b.

Referenced by pand().

◆ pand< Packet8bf >()

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pand< Packet8bf > ( const Packet8bf a,
const Packet8bf b 
)
1422  {
1423  return pand<Packet8us>(a, b);
1424 }

References a, b, and pand< Packet8us >().

◆ pand< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pand< Packet8c > ( const Packet8c a,
const Packet8c b 
)
1911  {
1912  return vand_s8(a, b);
1913 }

References a, and b.

◆ pand< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::pand< Packet8cf > ( const Packet8cf a,
const Packet8cf b 
)
97  {
98  return Packet8cf(pand(a.v, b.v));
99 }

References a, b, and pand().

◆ pand< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pand< Packet8d > ( const Packet8d a,
const Packet8d b 
)
825  {
826 #ifdef EIGEN_VECTORIZE_AVX512DQ
827  return _mm512_and_pd(a, b);
828 #else
829  Packet8d res = _mm512_undefined_pd();
830  Packet4d lane0_a = _mm512_extractf64x4_pd(a, 0);
831  Packet4d lane0_b = _mm512_extractf64x4_pd(b, 0);
832  res = _mm512_insertf64x4(res, _mm256_and_pd(lane0_a, lane0_b), 0);
833 
834  Packet4d lane1_a = _mm512_extractf64x4_pd(a, 1);
835  Packet4d lane1_b = _mm512_extractf64x4_pd(b, 1);
836  return _mm512_insertf64x4(res, _mm256_and_pd(lane1_a, lane1_b), 1);
837 #endif
838 }
__m512d Packet8d
Definition: AVX512/PacketMath.h:36

References a, b, and res.

◆ pand< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pand< Packet8f > ( const Packet8f a,
const Packet8f b 
)
1302  {
1303  return _mm256_and_ps(a, b);
1304 }

References a, and b.

◆ pand< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pand< Packet8i > ( const Packet8i a,
const Packet8i b 
)
1310  {
1311 #ifdef EIGEN_VECTORIZE_AVX2
1312  return _mm256_and_si256(a, b);
1313 #else
1314  return _mm256_castps_si256(_mm256_and_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
1315 #endif
1316 }

References a, and b.

Referenced by pand().

◆ pand< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pand< Packet8l > ( const Packet8l a,
const Packet8l b 
)
812  {
813  return _mm512_and_si512(a, b);
814 }

References a, and b.

◆ pand< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pand< Packet8s > ( const Packet8s a,
const Packet8s b 
)
888  {
889  return __lsx_vand_v(a, b);
890 }

References a, and b.

◆ pand< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pand< Packet8uc > ( const Packet8uc a,
const Packet8uc b 
)
1923  {
1924  return vand_u8(a, b);
1925 }

References a, and b.

◆ pand< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pand< Packet8ui > ( const Packet8ui a,
const Packet8ui b 
)
1318  {
1319 #ifdef EIGEN_VECTORIZE_AVX2
1320  return _mm256_and_si256(a, b);
1321 #else
1322  return _mm256_castps_si256(_mm256_and_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
1323 #endif
1324 }

References a, and b.

◆ pand< Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pand< Packet8us > ( const Packet8us a,
const Packet8us b 
)
1418  {
1419  return vec_and(a, b);
1420 }

References a, and b.

Referenced by F32ToBf16Two(), pabs(), and pand< Packet8bf >().

◆ pand< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pand< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
502  {
503  return svreinterpret_f32_u32(svand_u32_x(svptrue_b32(), svreinterpret_u32_f32(a), svreinterpret_u32_f32(b)));
504 }

References a, and b.

◆ pand< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pand< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
163  {
164  return svand_s32_x(svptrue_b32(), a, b);
165 }

References a, and b.

◆ pandnot() [1/7]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pandnot ( const Packet a,
const Packet b 
)
inline
Returns
the bitwise and of a and not b
578  {
579  return pand(a, pnot(b));
580 }
EIGEN_DEVICE_FUNC Packet pnot(const Packet &a)
Definition: GenericPacketMath.h:572
EIGEN_DEVICE_FUNC Packet pand(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:554

References a, b, pand(), and pnot().

◆ pandnot() [2/7]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pandnot ( const Packet16bf a,
const Packet16bf b 
)
2807  {
2809 }
EIGEN_STRONG_INLINE Packet8i pandnot< Packet8i >(const Packet8i &a, const Packet8i &b)
Definition: AVX/PacketMath.h:1385

References a, b, and pandnot< Packet8i >().

◆ pandnot() [3/7]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pandnot ( const Packet16h a,
const Packet16h b 
)
2305  {
2306  return Packet16h(pandnot(Packet8i(a), Packet8i(b)));
2307 }
EIGEN_STRONG_INLINE Packet16bf pandnot(const Packet16bf &a, const Packet16bf &b)
Definition: AVX512/PacketMath.h:2807

References a, b, and pandnot().

◆ pandnot() [4/7]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pandnot ( const Packet32h a,
const Packet32h b 
)
246  {
247  return _mm512_castsi512_ph(_mm512_andnot_si512(_mm512_castph_si512(b), _mm512_castph_si512(a)));
248 }

References a, and b.

◆ pandnot() [5/7]

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pandnot ( const Packet4bf a,
const Packet4bf b 
)
4913  {
4915 }
EIGEN_STRONG_INLINE Packet4us pandnot< Packet4us >(const Packet4us &a, const Packet4us &b)
Definition: NEON/PacketMath.h:2158

References a, b, and pandnot< Packet4us >().

◆ pandnot() [6/7]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pandnot ( const Packet8bf a,
const Packet8bf b 
)
2703  {
2704  return _mm_andnot_si128(b, a);
2705 }

References a, and b.

◆ pandnot() [7/7]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pandnot ( const Packet8h a,
const Packet8h b 
)
2323  {
2324  return _mm_andnot_si128(b, a);
2325 }

References a, and b.

Referenced by Eigen::internal::any_visitor< Scalar >::any_predux(), Eigen::internal::count_visitor< Scalar >::count_redux(), generic_pow(), generic_rint(), generic_round(), generic_trunc(), Eigen::internal::unary_pow::handle_nonint_nonint_errors(), packetmath_boolean_mask_ops(), Eigen::internal::scalar_bitwise_not_op< Scalar >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_UNORD, UseTypedComparators >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_NEQ, UseTypedComparators >::packetOp(), Eigen::internal::scalar_boolean_and_op< Scalar >::packetOp(), Eigen::internal::scalar_boolean_or_op< Scalar >::packetOp(), pandnot(), pandnot< Packet16f >(), pandnot< Packet4cd >(), pandnot< Packet8cf >(), pandnot< Packet8d >(), pasin_float(), pblueNorm(), pexp_complex(), phypot_complex(), pisnan(), prsqrt_float_common(), psqrt_complex(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsSigned &&NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t< NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&unpacket_traits< Packet >::vectorizable > >::run(), and Eigen::internal::pselect_impl< Packet, EnableIf >::run().

◆ pandnot< Packet16c >()

1007  {
1008  return __lsx_vandn_v(b, a);
1009 }

References a, and b.

◆ pandnot< Packet16f >()

907  {
908 #ifdef EIGEN_VECTORIZE_AVX512DQ
909  return _mm512_andnot_ps(b, a);
910 #else
911  return _mm512_castsi512_ps(pandnot(_mm512_castps_si512(a), _mm512_castps_si512(b)));
912 #endif
913 }

References a, b, and pandnot().

◆ pandnot< Packet16i >()

897  {
898  return _mm512_andnot_si512(b, a);
899 }

References a, and b.

◆ pandnot< Packet16uc >()

1023  {
1024  return __lsx_vandn_v(b, a);
1025 }

References a, and b.

◆ pandnot< Packet1cd >()

361  {
362  Packet1cd res;
363  res.v = (Packet2d)__lsx_vandn_v((__m128i)b.v, (__m128i)a.v);
364  return res;
365 }

References a, b, and res.

◆ pandnot< Packet1cf >()

290  {
291  return Packet1cf(vreinterpret_f32_u32(vbic_u32(vreinterpret_u32_f32(a.v), vreinterpret_u32_f32(b.v))));
292 }

References a, and b.

◆ pandnot< Packet2cd >()

324  {
325  return Packet2cd(_mm256_andnot_pd(b.v, a.v));
326 }

References a, and b.

◆ pandnot< Packet2cf >()

285  {
286  return Packet2cf(pandnot<Packet4f>(a.v, b.v));
287 }
EIGEN_STRONG_INLINE Packet4f pandnot< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1465

References a, b, and pandnot< Packet4f >().

◆ pandnot< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pandnot< Packet2d > ( const Packet2d a,
const Packet2d b 
)
1003  {
1004  return (Packet2d)__lsx_vandn_v((__m128i)b, (__m128i)a);
1005 }

References a, and b.

◆ pandnot< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pandnot< Packet2f > ( const Packet2f a,
const Packet2f b 
)
2118  {
2119  return vreinterpret_f32_u32(vbic_u32(vreinterpret_u32_f32(a), vreinterpret_u32_f32(b)));
2120 }

References a, and b.

◆ pandnot< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pandnot< Packet2i > ( const Packet2i a,
const Packet2i b 
)
2166  {
2167  return vbic_s32(a, b);
2168 }

References a, and b.

◆ pandnot< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pandnot< Packet2l > ( const Packet2l a,
const Packet2l b 
)
1019  {
1020  return __lsx_vandn_v(b, a);
1021 }

References a, and b.

◆ pandnot< Packet2ui >()

2174  {
2175  return vbic_u32(a, b);
2176 }

References a, and b.

◆ pandnot< Packet2ul >()

1035  {
1036  return __lsx_vandn_v(b, a);
1037 }

References a, and b.

◆ pandnot< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pandnot< Packet4c > ( const Packet4c a,
const Packet4c b 
)
2126  {
2127  return a & ~b;
2128 }

References a, and b.

◆ pandnot< Packet4cd >()

296  {
297  return Packet4cd(pandnot(a.v, b.v));
298 }

References a, b, and pandnot().

◆ pandnot< Packet4cf >()

122  {
123  return Packet4cf(_mm256_andnot_ps(b.v, a.v));
124 }

References a, and b.

◆ pandnot< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pandnot< Packet4d > ( const Packet4d a,
const Packet4d b 
)
1381  {
1382  return _mm256_andnot_pd(b, a);
1383 }

References a, and b.

◆ pandnot< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pandnot< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1465  {
1466  return vec_andc(a, b);
1467 }

References a, and b.

Referenced by pandnot< Packet2cf >().

◆ pandnot< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pandnot< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1469  {
1470  return vec_andc(a, b);
1471 }

References a, and b.

◆ pandnot< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pandnot< Packet4s > ( const Packet4s a,
const Packet4s b 
)
2150  {
2151  return vbic_s16(a, b);
2152 }

References a, and b.

◆ pandnot< Packet4uc >()

2138  {
2139  return a & ~b;
2140 }

References a, and b.

◆ pandnot< Packet4ui >()

1031  {
1032  return __lsx_vandn_v(b, a);
1033 }

References a, and b.

Referenced by F32ToBf16().

◆ pandnot< Packet4us >()

2158  {
2159  return vbic_u16(a, b);
2160 }

References a, and b.

Referenced by pandnot().

◆ pandnot< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pandnot< Packet8c > ( const Packet8c a,
const Packet8c b 
)
2130  {
2131  return vbic_s8(a, b);
2132 }

References a, and b.

◆ pandnot< Packet8cf >()

109  {
110  return Packet8cf(pandnot(a.v, b.v));
111 }

References a, b, and pandnot().

◆ pandnot< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pandnot< Packet8d > ( const Packet8d a,
const Packet8d b 
)
915  {
916 #ifdef EIGEN_VECTORIZE_AVX512DQ
917  return _mm512_andnot_pd(b, a);
918 #else
919  return _mm512_castsi512_pd(pandnot(_mm512_castpd_si512(a), _mm512_castpd_si512(b)));
920 #endif
921 }

References a, b, and pandnot().

◆ pandnot< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pandnot< Packet8f > ( const Packet8f a,
const Packet8f b 
)
1377  {
1378  return _mm256_andnot_ps(b, a);
1379 }

References a, and b.

◆ pandnot< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pandnot< Packet8i > ( const Packet8i a,
const Packet8i b 
)
1385  {
1386 #ifdef EIGEN_VECTORIZE_AVX2
1387  return _mm256_andnot_si256(b, a);
1388 #else
1389  return _mm256_castps_si256(_mm256_andnot_ps(_mm256_castsi256_ps(b), _mm256_castsi256_ps(a)));
1390 #endif
1391 }

References a, and b.

Referenced by pandnot().

◆ pandnot< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pandnot< Packet8l > ( const Packet8l a,
const Packet8l b 
)
902  {
903  return _mm512_andnot_si512(b, a);
904 }

References a, and b.

◆ pandnot< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pandnot< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1011  {
1012  return __lsx_vandn_v(b, a);
1013 }

References a, and b.

◆ pandnot< Packet8uc >()

2142  {
2143  return vbic_u8(a, b);
2144 }

References a, and b.

◆ pandnot< Packet8ui >()

1393  {
1394 #ifdef EIGEN_VECTORIZE_AVX2
1395  return _mm256_andnot_si256(b, a);
1396 #else
1397  return _mm256_castps_si256(_mm256_andnot_ps(_mm256_castsi256_ps(b), _mm256_castsi256_ps(a)));
1398 #endif
1399 }

References a, and b.

◆ pandnot< Packet8us >()

1027  {
1028  return __lsx_vandn_v(b, a);
1029 }

References a, and b.

Referenced by F32ToBf16Two().

◆ pandnot< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pandnot< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
517  {
518  return svreinterpret_f32_u32(svbic_u32_x(svptrue_b32(), svreinterpret_u32_f32(a), svreinterpret_u32_f32(b)));
519 }

References a, and b.

◆ pandnot< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pandnot< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
178  {
179  return svbic_s32_x(svptrue_b32(), a, b);
180 }

References a, and b.

◆ parallelize_gemm()

template<bool Condition, typename Functor , typename Index >
EIGEN_STRONG_INLINE void Eigen::internal::parallelize_gemm ( const Functor func,
Index  rows,
Index  cols,
Index  ,
bool   
)

◆ parg()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::parg ( const Packet a)
inline
Returns
the phase angle of a
700  {
701  using numext::arg;
702  return arg(a);
703 }

References a.

Referenced by Eigen::internal::scalar_arg_op< Scalar >::packetOp().

◆ parithmetic_shift_right() [1/30]

template<int N>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::parithmetic_shift_right ( const Packet16c a)
1263  {
1264  return __lsx_vsrai_b((__m128i)a, N);
1265 }

References a, and N.

◆ parithmetic_shift_right() [2/30]

template<int N>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::parithmetic_shift_right ( const Packet16uc a)
1279  {
1280  return __lsx_vsrli_b((__m128i)a, N);
1281 }

References a, and N.

◆ parithmetic_shift_right() [3/30]

template<int N>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::parithmetic_shift_right ( const Packet2l a)
1275  {
1276  return __lsx_vsrai_d((__m128i)a, N);
1277 }

References a, and N.

◆ parithmetic_shift_right() [4/30]

template<int N>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::parithmetic_shift_right ( const Packet2ul a)
1291  {
1292  return __lsx_vsrli_d((__m128i)a, N);
1293 }

References a, and N.

◆ parithmetic_shift_right() [5/30]

template<int N>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::parithmetic_shift_right ( const Packet4i a)
1975  {
1976  return vec_sra(a, reinterpret_cast<Packet4ui>(pset1<Packet4i>(N)));
1977 }
EIGEN_STRONG_INLINE Packet4i pset1< Packet4i >(const int &from)
Definition: AltiVec/PacketMath.h:778

References a, N, and pset1< Packet4i >().

◆ parithmetic_shift_right() [6/30]

template<int N>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::parithmetic_shift_right ( const Packet4ui a)
1287  {
1288  return __lsx_vsrli_w((__m128i)a, N);
1289 }

References a, and N.

◆ parithmetic_shift_right() [7/30]

template<int N>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::parithmetic_shift_right ( const Packet8s a)
1267  {
1268  return __lsx_vsrai_h((__m128i)a, N);
1269 }

References a, and N.

◆ parithmetic_shift_right() [8/30]

template<int N>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::parithmetic_shift_right ( const Packet8us a)
1283  {
1284  return __lsx_vsrli_h((__m128i)a, N);
1285 }

References a, and N.

◆ parithmetic_shift_right() [9/30]

template<int N, typename T >
EIGEN_DEVICE_FUNC T Eigen::internal::parithmetic_shift_right ( const T a)
inline
Returns
a arithmetically shifted by N bits to the right
707  {
709 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar arithmetic_shift_right(const Scalar &a, int n)
Definition: MathFunctions.h:1838

References a, Eigen::numext::arithmetic_shift_right(), and N.

◆ parithmetic_shift_right() [10/30]

template<int N>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::parithmetic_shift_right ( Packet16c  a)
2199  {
2200  return vshrq_n_s8(a, N);
2201 }

References a, and N.

◆ parithmetic_shift_right() [11/30]

template<int N>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::parithmetic_shift_right ( Packet16i  a)
939  {
940  return _mm512_srai_epi32(a, N);
941 }

References a, and N.

◆ parithmetic_shift_right() [12/30]

template<int N>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::parithmetic_shift_right ( Packet16uc  a)
2211  {
2212  return vshrq_n_u8(a, N);
2213 }

References a, and N.

◆ parithmetic_shift_right() [13/30]

template<int N>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::parithmetic_shift_right ( Packet2i  a)
2231  {
2232  return vshr_n_s32(a, N);
2233 }

References a, and N.

◆ parithmetic_shift_right() [14/30]

template<int N>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::parithmetic_shift_right ( Packet2l  a)
2247  {
2248  return vshrq_n_s64(a, N);
2249 }

References a, and N.

◆ parithmetic_shift_right() [15/30]

template<int N>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::parithmetic_shift_right ( Packet2ui  a)
2239  {
2240  return vshr_n_u32(a, N);
2241 }

References a, and N.

◆ parithmetic_shift_right() [16/30]

template<int N>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::parithmetic_shift_right ( Packet2ul  a)
2251  {
2252  return vshrq_n_u64(a, N);
2253 }

References a, and N.

◆ parithmetic_shift_right() [17/30]

template<int N>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::parithmetic_shift_right ( Packet4c a)
2191  {
2192  return vget_lane_s32(vreinterpret_s32_s8(vshr_n_s8(vreinterpret_s8_s32(vdup_n_s32(a)), N)), 0);
2193 }

References a, and N.

◆ parithmetic_shift_right() [18/30]

template<int N>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::parithmetic_shift_right ( Packet4i  a)
2235  {
2236  return vshrq_n_s32(a, N);
2237 }

References a, and N.

◆ parithmetic_shift_right() [19/30]

template<int N>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::parithmetic_shift_right ( Packet4s  a)
2215  {
2216  return vshr_n_s16(a, N);
2217 }

References a, and N.

◆ parithmetic_shift_right() [20/30]

template<int N>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::parithmetic_shift_right ( Packet4uc a)
2203  {
2204  return vget_lane_u32(vreinterpret_u32_u8(vshr_n_u8(vreinterpret_u8_u32(vdup_n_u32(a)), N)), 0);
2205 }

References a, and N.

◆ parithmetic_shift_right() [21/30]

template<int N>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::parithmetic_shift_right ( Packet4ui  a)
2243  {
2244  return vshrq_n_u32(a, N);
2245 }

References a, and N.

◆ parithmetic_shift_right() [22/30]

template<int N>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::parithmetic_shift_right ( Packet4us  a)
2223  {
2224  return vshr_n_u16(a, N);
2225 }

References a, and N.

◆ parithmetic_shift_right() [23/30]

template<int N>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::parithmetic_shift_right ( Packet8c  a)
2195  {
2196  return vshr_n_s8(a, N);
2197 }

References a, and N.

◆ parithmetic_shift_right() [24/30]

template<int N>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::parithmetic_shift_right ( Packet8i  a)
1444  {
1445 #ifdef EIGEN_VECTORIZE_AVX2
1446  return _mm256_srai_epi32(a, N);
1447 #else
1448  __m128i lo = _mm_srai_epi32(_mm256_extractf128_si256(a, 0), N);
1449  __m128i hi = _mm_srai_epi32(_mm256_extractf128_si256(a, 1), N);
1450  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1451 #endif
1452 }

References a, and N.

◆ parithmetic_shift_right() [25/30]

template<int N>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::parithmetic_shift_right ( Packet8l  a)
954  {
955  return _mm512_srai_epi64(a, N);
956 }

References a, and N.

◆ parithmetic_shift_right() [26/30]

template<int N>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::parithmetic_shift_right ( Packet8s  a)
2219  {
2220  return vshrq_n_s16(a, N);
2221 }

References a, and N.

◆ parithmetic_shift_right() [27/30]

template<int N>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::parithmetic_shift_right ( Packet8uc  a)
2207  {
2208  return vshr_n_u8(a, N);
2209 }

References a, and N.

◆ parithmetic_shift_right() [28/30]

template<int N>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::parithmetic_shift_right ( Packet8ui  a)
1477  {
1478  return (Packet8ui)plogical_shift_right<N>((Packet8i)a);
1479 }
eigen_packet_wrapper< __m256i, 4 > Packet8ui
Definition: AVX/PacketMath.h:41

References a.

◆ parithmetic_shift_right() [29/30]

template<int N>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::parithmetic_shift_right ( Packet8us  a)
2227  {
2228  return vshrq_n_u16(a, N);
2229 }

References a, and N.

◆ parithmetic_shift_right() [30/30]

template<int N>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::parithmetic_shift_right ( PacketXi  a)
183  {
184  return svasrd_n_s32_x(svptrue_b32(), a, N);
185 }

References a, and N.

◆ partial_lu_inplace()

template<typename MatrixType , typename TranspositionType >
void Eigen::internal::partial_lu_inplace ( MatrixType lu,
TranspositionType &  row_transpositions,
typename TranspositionType::StorageIndex &  nb_transpositions 
)

performs the LU decomposition with partial pivoting in-place.

461  {
462  // Special-case of zero matrix.
463  if (lu.rows() == 0 || lu.cols() == 0) {
464  nb_transpositions = 0;
465  return;
466  }
467  eigen_assert(lu.cols() == row_transpositions.size());
468  eigen_assert(row_transpositions.size() < 2 ||
469  (&row_transpositions.coeffRef(1) - &row_transpositions.coeffRef(0)) == 1);
470 
471  partial_lu_impl<typename MatrixType::Scalar, MatrixType::Flags & RowMajorBit ? RowMajor : ColMajor,
472  typename TranspositionType::StorageIndex,
473  internal::min_size_prefer_fixed(MatrixType::RowsAtCompileTime, MatrixType::ColsAtCompileTime)>::
474  blocked_lu(lu.rows(), lu.cols(), &lu.coeffRef(0, 0), lu.outerStride(), &row_transpositions.coeffRef(0),
475  nb_transpositions);
476 }
cout<< "Here is the matrix m:"<< endl<< m<< endl;Eigen::FullPivLU< Matrix5x3 > lu(m)
constexpr int min_size_prefer_fixed(A a, B b)
Definition: Meta.h:683

References Eigen::ColMajor, eigen_assert, lu(), min_size_prefer_fixed(), Eigen::RowMajor, and Eigen::RowMajorBit.

Referenced by Eigen::PartialPivLU< MatrixType_, PermutationIndex_ >::compute().

◆ pasin()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pasin ( const Packet a)
Returns
the arc sine of a (coeff-wise)
1036  {
1038  return asin(a);
1039 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 asin(const bfloat16 &a)
Definition: BFloat16.h:634

References a, Eigen::bfloat16_impl::asin(), and EIGEN_USING_STD.

Referenced by packetmath_real(), and Eigen::internal::scalar_asin_op< Scalar >::packetOp().

◆ pasin_float()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pasin_float ( const Packet x)
Returns
asin(x) for single precision float
1042  {
1043  typedef typename unpacket_traits<Packet>::type Scalar;
1044  static_assert(std::is_same<Scalar, float>::value, "Scalar type must be float");
1045 
1046  constexpr float kPiOverTwo = static_cast<float>(EIGEN_PI / 2);
1047 
1048  const Packet cst_half = pset1<Packet>(0.5f);
1049  const Packet cst_one = pset1<Packet>(1.0f);
1050  const Packet cst_two = pset1<Packet>(2.0f);
1051  const Packet cst_pi_over_two = pset1<Packet>(kPiOverTwo);
1052 
1053  const Packet abs_x = pabs(x_in);
1054  const Packet sign_mask = pandnot(x_in, abs_x);
1055  const Packet invalid_mask = pcmp_lt(cst_one, abs_x);
1056 
1057  // For arguments |x| > 0.5, we map x back to [0:0.5] using
1058  // the transformation x_large = sqrt(0.5*(1-x)), and use the
1059  // identity
1060  // asin(x) = pi/2 - 2 * asin( sqrt( 0.5 * (1 - x)))
1061 
1062  const Packet x_large = psqrt(pnmadd(cst_half, abs_x, cst_half));
1063  const Packet large_mask = pcmp_lt(cst_half, abs_x);
1064  const Packet x = pselect(large_mask, x_large, abs_x);
1065  const Packet x2 = pmul(x, x);
1066 
1067  // For |x| < 0.5 approximate asin(x)/x by an 8th order polynomial with
1068  // even terms only.
1069  constexpr float alpha[] = {5.08838854730129241943359375e-2f, 3.95139865577220916748046875e-2f,
1070  7.550220191478729248046875e-2f, 0.16664917767047882080078125f, 1.00000011920928955078125f};
1072  p = pmul(p, x);
1073 
1074  const Packet p_large = pnmadd(cst_two, p, cst_pi_over_two);
1075  p = pselect(large_mask, p_large, p);
1076  // Flip the sign for negative arguments.
1077  p = pxor(p, sign_mask);
1078  // Return NaN for arguments outside [-1:1].
1079  return por(invalid_mask, p);
1080 }

References alpha, EIGEN_PI, p, pabs(), pandnot(), pcmp_lt(), pmul(), pnmadd(), por(), pselect(), psqrt(), pxor(), Eigen::internal::ppolevl< Packet, N >::run(), Eigen::value, plotDoE::x, and Global_parameters::x2().

◆ patan()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::patan ( const Packet a)
Returns
the arc tangent of a (coeff-wise)
1064  {
1066  return atan(a);
1067 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 atan(const bfloat16 &a)
Definition: BFloat16.h:636

References a, Eigen::bfloat16_impl::atan(), and EIGEN_USING_STD.

Referenced by packetmath_real(), and Eigen::internal::scalar_atan_op< Scalar >::packetOp().

◆ patan2()

template<typename Packet , std::enable_if_t< is_scalar< Packet >::value, int > = 0>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet Eigen::internal::patan2 ( const Packet y,
const Packet x 
)
Returns
the 2-argument arc tangent of y and x (coeff-wise)
1475  {
1476  return numext::atan2(y, x);
1477 }

References Eigen::numext::atan2(), plotDoE::x, and y.

Referenced by Eigen::internal::scalar_atan2_op< LhsScalar, RhsScalar >::packetOp(), and plog_complex().

◆ patanh()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::patanh ( const Packet a)
Returns
the arc tangent of a (coeff-wise)
1078  {
1080  return atanh(a);
1081 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 atanh(const bfloat16 &a)
Definition: BFloat16.h:642

References a, Eigen::bfloat16_impl::atanh(), and EIGEN_USING_STD.

Referenced by packetmath_real(), and Eigen::internal::scalar_atanh_op< Scalar >::packetOp().

◆ patanh_double()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::patanh_double ( const Packet x)
Returns
atanh(x) for double precision float
1285  {
1286  typedef typename unpacket_traits<Packet>::type Scalar;
1287  static_assert(std::is_same<Scalar, double>::value, "Scalar type must be double");
1288  // For x in [-0.5:0.5] we use a rational approximation of the form
1289  // R(x) = x + x^3*P(x^2)/Q(x^2), where P is or order 4 and Q is of order 5.
1290  constexpr double alpha[] = {3.3071338469301391e-03, -4.7129526768798737e-02, 1.8185306179826699e-01,
1291  -2.5949536095445679e-01, 1.2306328729812676e-01};
1292 
1293  constexpr double beta[] = {-3.8679974580640881e-03, 7.6391885763341910e-02, -4.2828141436397615e-01,
1294  9.8733495886883648e-01, -1.0000000000000000e+00, 3.6918986189438030e-01};
1295 
1296  const Packet x2 = pmul(x, x);
1297  const Packet x3 = pmul(x, x2);
1300  Packet y_small = pmadd(x3, pdiv(p, q), x);
1301 
1302  // For |x| in ]0.5:1.0] we use atanh = 0.5*ln((1+x)/(1-x));
1303  const Packet half = pset1<Packet>(0.5);
1304  const Packet one = pset1<Packet>(1.0);
1305  Packet y_large = pdiv(padd(one, x), psub(one, x));
1306  y_large = pmul(half, plog(y_large));
1307 
1308  const Packet x_gt_half = pcmp_le(half, pabs(x));
1309  const Packet x_eq_one = pcmp_eq(one, pabs(x));
1310  const Packet x_gt_one = pcmp_lt(one, pabs(x));
1311  const Packet sign_mask = pset1<Packet>(-0.0);
1312  const Packet x_sign = pand(sign_mask, x);
1313  const Packet inf = pset1<Packet>(std::numeric_limits<double>::infinity());
1314  return por(x_gt_one, pselect(x_eq_one, por(x_sign, inf), pselect(x_gt_half, y_large, y_small)));
1315 }
const Mdouble inf
Definition: GeneralDefine.h:23

References alpha, beta, constants::inf, p, pabs(), padd(), pand(), pcmp_eq(), pcmp_le(), pcmp_lt(), pdiv(), plog(), pmadd(), pmul(), por(), pselect(), psub(), Eigen::numext::q, Eigen::internal::ppolevl< Packet, N >::run(), Eigen::value, plotDoE::x, and Global_parameters::x2().

◆ patanh_float()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::patanh_float ( const Packet x)
Returns
atanh(x) for single precision float
1256  {
1257  typedef typename unpacket_traits<Packet>::type Scalar;
1258  static_assert(std::is_same<Scalar, float>::value, "Scalar type must be float");
1259 
1260  // For |x| in [0:0.5] we use a polynomial approximation of the form
1261  // P(x) = x + x^3*(alpha[4] + x^2 * (alpha[3] + x^2 * (... x^2 * alpha[0]) ... )).
1262  constexpr float alpha[] = {0.1819281280040740966796875f, 8.2311116158962249755859375e-2f,
1263  0.14672131836414337158203125f, 0.1997792422771453857421875f, 0.3333373963832855224609375f};
1264  const Packet x2 = pmul(x, x);
1265  const Packet x3 = pmul(x, x2);
1267  p = pmadd(x3, p, x);
1268 
1269  // For |x| in ]0.5:1.0] we use atanh = 0.5*ln((1+x)/(1-x));
1270  const Packet half = pset1<Packet>(0.5f);
1271  const Packet one = pset1<Packet>(1.0f);
1272  Packet r = pdiv(padd(one, x), psub(one, x));
1273  r = pmul(half, plog(r));
1274 
1275  const Packet x_gt_half = pcmp_le(half, pabs(x));
1276  const Packet x_eq_one = pcmp_eq(one, pabs(x));
1277  const Packet x_gt_one = pcmp_lt(one, pabs(x));
1278  const Packet sign_mask = pset1<Packet>(-0.0f);
1279  const Packet x_sign = pand(sign_mask, x);
1280  const Packet inf = pset1<Packet>(std::numeric_limits<float>::infinity());
1281  return por(x_gt_one, pselect(x_eq_one, por(x_sign, inf), pselect(x_gt_half, r, p)));
1282 }

References alpha, constants::inf, p, pabs(), padd(), pand(), pcmp_eq(), pcmp_le(), pcmp_lt(), pdiv(), plog(), pmadd(), pmul(), por(), pselect(), psub(), UniformPSDSelfTest::r, Eigen::internal::ppolevl< Packet, N >::run(), Eigen::value, plotDoE::x, and Global_parameters::x2().

◆ pbessel_i0()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_i0 ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order zero i0(a) (coeff-wise)
23  {
24  return numext::bessel_i0(x);
25 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_i0_op< typename Derived::Scalar >, const Derived > bessel_i0(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:34

References Eigen::bessel_i0(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_i0_op< Scalar >::packetOp().

◆ pbessel_i0e()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_i0e ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order zero i0e(a) (coeff-wise)
30  {
31  return numext::bessel_i0e(x);
32 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_i0e_op< typename Derived::Scalar >, const Derived > bessel_i0e(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:56

References Eigen::bessel_i0e(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_i0e_op< Scalar >::packetOp().

◆ pbessel_i1()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_i1 ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order one i1(a) (coeff-wise)
37  {
38  return numext::bessel_i1(x);
39 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_i1_op< typename Derived::Scalar >, const Derived > bessel_i1(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:77

References Eigen::bessel_i1(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_i1_op< Scalar >::packetOp().

◆ pbessel_i1e()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_i1e ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order one i1e(a) (coeff-wise)
44  {
45  return numext::bessel_i1e(x);
46 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_i1e_op< typename Derived::Scalar >, const Derived > bessel_i1e(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:99

References Eigen::bessel_i1e(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_i1e_op< Scalar >::packetOp().

◆ pbessel_j0()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_j0 ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order zero j0(a) (coeff-wise)
51  {
52  return numext::bessel_j0(x);
53 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_j0_op< typename Derived::Scalar >, const Derived > bessel_j0(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:206

References Eigen::bessel_j0(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_j0_op< Scalar >::packetOp().

◆ pbessel_j1()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_j1 ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order zero j1(a) (coeff-wise)
58  {
59  return numext::bessel_j1(x);
60 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_j1_op< typename Derived::Scalar >, const Derived > bessel_j1(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:248

References Eigen::bessel_j1(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_j1_op< Scalar >::packetOp().

◆ pbessel_k0()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_k0 ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order zero k0(a) (coeff-wise)
79  {
80  return numext::bessel_k0(x);
81 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_k0_op< typename Derived::Scalar >, const Derived > bessel_k0(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:120

References Eigen::bessel_k0(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_k0_op< Scalar >::packetOp().

◆ pbessel_k0e()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_k0e ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order zero k0e(a) (coeff-wise)
86  {
87  return numext::bessel_k0e(x);
88 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_k0e_op< typename Derived::Scalar >, const Derived > bessel_k0e(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:142

References Eigen::bessel_k0e(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_k0e_op< Scalar >::packetOp().

◆ pbessel_k1()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_k1 ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order one k1e(a) (coeff-wise)
93  {
94  return numext::bessel_k1(x);
95 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_k1_op< typename Derived::Scalar >, const Derived > bessel_k1(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:163

References Eigen::bessel_k1(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_k1_op< Scalar >::packetOp().

◆ pbessel_k1e()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_k1e ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order one k1e(a) (coeff-wise)
100  {
101  return numext::bessel_k1e(x);
102 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_k1e_op< typename Derived::Scalar >, const Derived > bessel_k1e(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:185

References Eigen::bessel_k1e(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_k1e_op< Scalar >::packetOp().

◆ pbessel_y0()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_y0 ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order one y0(a) (coeff-wise)
65  {
66  return numext::bessel_y0(x);
67 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_y0_op< typename Derived::Scalar >, const Derived > bessel_y0(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:227

References Eigen::bessel_y0(), and plotDoE::x.

Referenced by Eigen::internal::scalar_bessel_y0_op< Scalar >::packetOp().

◆ pbessel_y1()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pbessel_y1 ( const Packet x)
Returns
the exponentially scaled modified Bessel function of order one y1(a) (coeff-wise)
72  {
73  return numext::bessel_y1(x);
74 }
EIGEN_STRONG_INLINE const Eigen::CwiseUnaryOp< Eigen::internal::scalar_bessel_y1_op< typename Derived::Scalar >, const Derived > bessel_y1(const Eigen::ArrayBase< Derived > &x)
Definition: BesselFunctionsArrayAPI.h:269

References Eigen::bessel_y1(), and plotDoE::x.

Referenced by packetmath_real(), and Eigen::internal::scalar_bessel_y1_op< Scalar >::packetOp().

◆ pbetainc()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::pbetainc ( const Packet a,
const Packet b,
const Packet x 
)
Returns
the complementary incomplete gamma function betainc(a, b, x)
103  {
104  using numext::betainc;
105  return betainc(a, b, x);
106 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const TensorCwiseTernaryOp< internal::scalar_betainc_op< typename XDerived::Scalar >, const ADerived, const BDerived, const XDerived > betainc(const Eigen::TensorBase< ADerived, ReadOnlyAccessors > &a, const Eigen::TensorBase< BDerived, ReadOnlyAccessors > &b, const Eigen::TensorBase< XDerived, ReadOnlyAccessors > &x)
Definition: TensorGlobalFunctions.h:26

References a, b, Eigen::betainc(), and plotDoE::x.

Referenced by Eigen::internal::scalar_betainc_op< Scalar >::packetOp().

◆ pblend() [1/16]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pblend ( const Selector< 16 > &  ifPacket,
const Packet16c thenPacket,
const Packet16c elsePacket 
)
3113  {
3114  Packet16uc select = {ifPacket.select[0], ifPacket.select[1], ifPacket.select[2], ifPacket.select[3],
3115  ifPacket.select[4], ifPacket.select[5], ifPacket.select[6], ifPacket.select[7],
3116  ifPacket.select[8], ifPacket.select[9], ifPacket.select[10], ifPacket.select[11],
3117  ifPacket.select[12], ifPacket.select[13], ifPacket.select[14], ifPacket.select[15]};
3118 
3119  Packet16uc mask = reinterpret_cast<Packet16uc>(pnegate(reinterpret_cast<Packet16c>(select)));
3120  return vec_sel(elsePacket, thenPacket, mask);
3121 }
EIGEN_STRONG_INLINE Packet4i pnegate(const Packet4i &a)
Definition: AltiVec/PacketMath.h:1144

References pnegate(), and Eigen::internal::Selector< N >::select.

◆ pblend() [2/16]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pblend ( const Selector< 16 > &  ifPacket,
const Packet16f thenPacket,
const Packet16f elsePacket 
)
2190  {
2191  __mmask16 m = avx512_blend_mask(ifPacket);
2192  return _mm512_mask_blend_ps(m, elsePacket, thenPacket);
2193 }
EIGEN_STRONG_INLINE int avx512_blend_mask(const Selector< N > &ifPacket)
Definition: AVX512/PacketMath.h:2181

References avx512_blend_mask(), and m.

◆ pblend() [3/16]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pblend ( const Selector< 16 > &  ifPacket,
const Packet16uc thenPacket,
const Packet16uc elsePacket 
)
3125  {
3126  Packet16uc select = {ifPacket.select[0], ifPacket.select[1], ifPacket.select[2], ifPacket.select[3],
3127  ifPacket.select[4], ifPacket.select[5], ifPacket.select[6], ifPacket.select[7],
3128  ifPacket.select[8], ifPacket.select[9], ifPacket.select[10], ifPacket.select[11],
3129  ifPacket.select[12], ifPacket.select[13], ifPacket.select[14], ifPacket.select[15]};
3130 
3131  Packet16uc mask = reinterpret_cast<Packet16uc>(pnegate(reinterpret_cast<Packet16c>(select)));
3132  return vec_sel(elsePacket, thenPacket, mask);
3133 }

References pnegate(), and Eigen::internal::Selector< N >::select.

◆ pblend() [4/16]

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pblend ( const Selector< 2 > &  ifPacket,
const Packet2cf thenPacket,
const Packet2cf elsePacket 
)
319  {
320  return (Packet2cf)(Packet4f)pblend<Packet2d>(ifPacket, (Packet2d)thenPacket.v, (Packet2d)elsePacket.v);
321 }

◆ pblend() [5/16]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pblend ( const Selector< 2 > &  ifPacket,
const Packet2d thenPacket,
const Packet2d elsePacket 
)
1227  {
1228  Packet2ul select = {ifPacket.select[0], ifPacket.select[1]};
1229  Packet2l mask = __builtin_msa_ceqi_d((Packet2l)select, 0);
1230  return (Packet2d)__builtin_msa_bsel_v((v16u8)mask, (v16u8)thenPacket, (v16u8)elsePacket);
1231 }
eigen_packet_wrapper< __m128i, 7 > Packet2ul
Definition: LSX/PacketMath.h:45

References Eigen::internal::Selector< N >::select.

◆ pblend() [6/16]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pblend ( const Selector< 2 > &  ifPacket,
const Packet2l thenPacket,
const Packet2l elsePacket 
)
2196  {
2197  const __m128i true_mask = sse_blend_mask(ifPacket);
2198  return pselect<Packet2l>(true_mask, thenPacket, elsePacket);
2199 }
EIGEN_STRONG_INLINE __m128i sse_blend_mask(const Selector< 4 > &ifPacket)
Definition: SSE/PacketMath.h:2190

References sse_blend_mask().

◆ pblend() [7/16]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pblend ( const Selector< 4 > &  ifPacket,
const Packet4d thenPacket,
const Packet4d elsePacket 
)
2195  {
2196  const __m256d true_mask = _mm256_castsi256_pd(avx_blend_mask(ifPacket));
2197  return pselect<Packet4d>(true_mask, thenPacket, elsePacket);
2198 }
EIGEN_STRONG_INLINE Packet4d pselect< Packet4d >(const Packet4d &mask, const Packet4d &a, const Packet4d &b)
Definition: AVX/PacketMath.h:1439
EIGEN_STRONG_INLINE __m256i avx_blend_mask(const Selector< 8 > &ifPacket)
Definition: AVX/PacketMath.h:2180

References avx_blend_mask(), and pselect< Packet4d >().

◆ pblend() [8/16]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pblend ( const Selector< 4 > &  ifPacket,
const Packet4f thenPacket,
const Packet4f elsePacket 
)
3082  {
3083  return pblend4<Packet4f>(ifPacket, thenPacket, elsePacket);
3084 }

◆ pblend() [9/16]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pblend ( const Selector< 4 > &  ifPacket,
const Packet4i thenPacket,
const Packet4i elsePacket 
)
3076  {
3077  return pblend4<Packet4i>(ifPacket, thenPacket, elsePacket);
3078 }

Referenced by Eigen::TensorEvaluator< const TensorSelectOp< IfArgType, ThenArgType, ElseArgType >, Device >::packet(), packetmath(), and pblend().

◆ pblend() [10/16]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pblend ( const Selector< 4 > &  ifPacket,
const Packet4ui thenPacket,
const Packet4ui elsePacket 
)
2208  {
2209  return (Packet4ui)pblend(ifPacket, (Packet4i)thenPacket, (Packet4i)elsePacket);
2210 }
EIGEN_STRONG_INLINE Packet4ui pblend(const Selector< 4 > &ifPacket, const Packet4ui &thenPacket, const Packet4ui &elsePacket)
Definition: SSE/PacketMath.h:2207

References pblend().

◆ pblend() [11/16]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pblend ( const Selector< 8 > &  ifPacket,
const Packet8bf thenPacket,
const Packet8bf elsePacket 
)
3107  {
3108  return pblend<Packet8us>(ifPacket, thenPacket, elsePacket);
3109 }

◆ pblend() [12/16]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pblend ( const Selector< 8 > &  ifPacket,
const Packet8d thenPacket,
const Packet8d elsePacket 
)
2196  {
2197  __mmask8 m = avx512_blend_mask(ifPacket);
2198  return _mm512_mask_blend_pd(m, elsePacket, thenPacket);
2199 }

References avx512_blend_mask(), and m.

◆ pblend() [13/16]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pblend ( const Selector< 8 > &  ifPacket,
const Packet8f thenPacket,
const Packet8f elsePacket 
)
2188  {
2189  const __m256 true_mask = _mm256_castsi256_ps(avx_blend_mask(ifPacket));
2190  return pselect<Packet8f>(true_mask, thenPacket, elsePacket);
2191 }
EIGEN_STRONG_INLINE Packet8f pselect< Packet8f >(const Packet8f &mask, const Packet8f &a, const Packet8f &b)
Definition: AVX/PacketMath.h:1424

References avx_blend_mask(), and pselect< Packet8f >().

◆ pblend() [14/16]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pblend ( const Selector< 8 > &  ifPacket,
const Packet8s thenPacket,
const Packet8s elsePacket 
)
3088  {
3089  Packet8us select = {ifPacket.select[0], ifPacket.select[1], ifPacket.select[2], ifPacket.select[3],
3090  ifPacket.select[4], ifPacket.select[5], ifPacket.select[6], ifPacket.select[7]};
3091  Packet8us mask = reinterpret_cast<Packet8us>(pnegate(reinterpret_cast<Packet8s>(select)));
3092  Packet8s result = vec_sel(elsePacket, thenPacket, mask);
3093  return result;
3094 }

References pnegate(), and Eigen::internal::Selector< N >::select.

◆ pblend() [15/16]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pblend ( const Selector< 8 > &  ifPacket,
const Packet8us thenPacket,
const Packet8us elsePacket 
)
3098  {
3099  Packet8us select = {ifPacket.select[0], ifPacket.select[1], ifPacket.select[2], ifPacket.select[3],
3100  ifPacket.select[4], ifPacket.select[5], ifPacket.select[6], ifPacket.select[7]};
3101  Packet8us mask = reinterpret_cast<Packet8us>(pnegate(reinterpret_cast<Packet8s>(select)));
3102  return vec_sel(elsePacket, thenPacket, mask);
3103 }

References pnegate(), and Eigen::internal::Selector< N >::select.

◆ pblend() [16/16]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pblend ( const Selector< unpacket_traits< Packet >::size > &  ifPacket,
const Packet thenPacket,
const Packet elsePacket 
)
inline
1427  {
1428  return ifPacket.select[0] ? thenPacket : elsePacket;
1429 }

◆ pblend4()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::pblend4 ( const Selector< 4 > &  ifPacket,
const Packet thenPacket,
const Packet elsePacket 
)
3068  {
3069  Packet4ui select = {ifPacket.select[0], ifPacket.select[1], ifPacket.select[2], ifPacket.select[3]};
3070  Packet4ui mask = reinterpret_cast<Packet4ui>(pnegate(reinterpret_cast<Packet4i>(select)));
3071  return vec_sel(elsePacket, thenPacket, mask);
3072 }

References pnegate(), and Eigen::internal::Selector< N >::select.

◆ pbroadcast2()

template<typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::pbroadcast2 ( const typename unpacket_traits< Packet >::type *  a,
Packet a0,
Packet a1 
)
inline

equivalent to

a0 = pload1(a+0);
a1 = pload1(a+1);
EIGEN_DEVICE_FUNC Packet pload1(const typename unpacket_traits< Packet >::type *a)
Definition: GenericPacketMath.h:814
See also
pset1, pload1, ploaddup, pbroadcast4
865  {
866  a0 = pload1<Packet>(a + 0);
867  a1 = pload1<Packet>(a + 1);
868 }

References a.

◆ pbroadcast4()

template<typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::pbroadcast4 ( const typename unpacket_traits< Packet >::type *  a,
Packet a0,
Packet a1,
Packet a2,
Packet a3 
)
inline

equivalent to

a0 = pload1(a+0);
a1 = pload1(a+1);
a2 = pload1(a+2);
a3 = pload1(a+3);
See also
pset1, pload1, ploaddup, pbroadcast2
850  {
851  a0 = pload1<Packet>(a + 0);
852  a1 = pload1<Packet>(a + 1);
853  a2 = pload1<Packet>(a + 2);
854  a3 = pload1<Packet>(a + 3);
855 }

References a.

Referenced by Eigen::internal::gebp_traits< LhsScalar_, RhsScalar_, ConjLhs_, ConjRhs_, Arch, PacketSize_ >::loadRhs(), Eigen::internal::gebp_traits< std::complex< RealScalar >, RealScalar, ConjLhs_, false, Arch, PacketSize_ >::loadRhs(), and Eigen::internal::gebp_traits< RealScalar, std::complex< RealScalar >, false, ConjRhs_, Arch, PacketSize_ >::loadRhs().

◆ pbroadcast4< Packet2d >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pbroadcast4< Packet2d > ( const double a,
Packet2d a0,
Packet2d a1,
Packet2d a2,
Packet2d a3 
)
1820  {
1821 #ifdef EIGEN_VECTORIZE_SSE3
1822  a0 = _mm_loaddup_pd(a + 0);
1823  a1 = _mm_loaddup_pd(a + 1);
1824  a2 = _mm_loaddup_pd(a + 2);
1825  a3 = _mm_loaddup_pd(a + 3);
1826 #else
1827  a1 = pload<Packet2d>(a);
1828  a0 = vec2d_swizzle1(a1, 0, 0);
1829  a1 = vec2d_swizzle1(a1, 1, 1);
1830  a3 = pload<Packet2d>(a + 2);
1831  a2 = vec2d_swizzle1(a3, 0, 0);
1832  a3 = vec2d_swizzle1(a3, 1, 1);
1833 #endif
1834 }
#define vec2d_swizzle1(v, p, q)
Definition: SSE/PacketMath.h:102
EIGEN_STRONG_INLINE Packet2d pload< Packet2d >(const double *from)
Definition: LSX/PacketMath.h:1407

References a, pload< Packet2d >(), and vec2d_swizzle1.

◆ pbroadcast4< Packet4f >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pbroadcast4< Packet4f > ( const float *  a,
Packet4f a0,
Packet4f a1,
Packet4f a2,
Packet4f a3 
)
823  {
824  pbroadcast4_common<Packet4f>(a, a0, a1, a2, a3);
825 }

References a.

Referenced by pbroadcastN< Packet4f, 4, true >().

◆ pbroadcast4< Packet4i >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pbroadcast4< Packet4i > ( const int a,
Packet4i a0,
Packet4i a1,
Packet4i a2,
Packet4i a3 
)
827  {
828  pbroadcast4_common<Packet4i>(a, a0, a1, a2, a3);
829 }

References a.

◆ pbroadcast4_common()

template<typename Packet >
EIGEN_STRONG_INLINE void Eigen::internal::pbroadcast4_common ( const __UNPACK_TYPE__(Packet) *  a,
Packet a0,
Packet a1,
Packet a2,
Packet a3 
)
814  {
815  a3 = pload<Packet>(a);
816  a0 = vec_splat(a3, 0);
817  a1 = vec_splat(a3, 1);
818  a2 = vec_splat(a3, 2);
819  a3 = vec_splat(a3, 3);
820 }

References a.

◆ pbroadcastN()

template<typename Packet , int N, bool real>
EIGEN_ALWAYS_INLINE void Eigen::internal::pbroadcastN ( const __UNPACK_TYPE__(Packet) *  ap0,
const __UNPACK_TYPE__(Packet) *  ap1,
const __UNPACK_TYPE__(Packet) *  ap2,
Packet a0,
Packet a1,
Packet a2,
Packet a3 
)
1710  {
1711  a0 = pset1<Packet>(ap0[0]);
1712  if (N == 4) {
1713  a1 = pset1<Packet>(ap0[1]);
1714  a2 = pset1<Packet>(ap0[2]);
1715  a3 = pset1<Packet>(ap0[3]);
1716  EIGEN_UNUSED_VARIABLE(ap1);
1717  EIGEN_UNUSED_VARIABLE(ap2);
1718  } else {
1719  if (N > 1) {
1720  a1 = pset1<Packet>(ap1[0]);
1721  } else {
1723  EIGEN_UNUSED_VARIABLE(ap1);
1724  }
1725  if (N > 2) {
1726  a2 = pset1<Packet>(ap2[0]);
1727  } else {
1729  EIGEN_UNUSED_VARIABLE(ap2);
1730  }
1731  }
1732 }

References EIGEN_UNUSED_VARIABLE, and N.

◆ pbroadcastN< Packet2d, 4, false >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pbroadcastN< Packet2d, 4, false > ( const double ap0,
const double ,
const double ,
Packet2d a0,
Packet2d a1,
Packet2d a2,
Packet2d a3 
)
1748  {
1749  a1 = pload<Packet2d>(ap0);
1750  a3 = pload<Packet2d>(ap0 + 2);
1751  a0 = vec_splat(a1, 0);
1752  a1 = vec_splat(a1, 1);
1753  a2 = vec_splat(a3, 0);
1754  a3 = vec_splat(a3, 1);
1755 }

References pload< Packet2d >().

◆ pbroadcastN< Packet4f, 4, false >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pbroadcastN< Packet4f, 4, false > ( const float *  ap0,
const float *  ap1,
const float *  ap2,
Packet4f a0,
Packet4f a1,
Packet4f a2,
Packet4f a3 
)
1742  {
1743  pbroadcastN<Packet4f, 4, true>(ap0, ap1, ap2, a0, a1, a2, a3);
1744 }
EIGEN_ALWAYS_INLINE void pbroadcastN< Packet4f, 4, true >(const float *ap0, const float *, const float *, Packet4f &a0, Packet4f &a1, Packet4f &a2, Packet4f &a3)
Definition: MatrixProduct.h:1735

References pbroadcastN< Packet4f, 4, true >().

◆ pbroadcastN< Packet4f, 4, true >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pbroadcastN< Packet4f, 4, true > ( const float *  ap0,
const float *  ,
const float *  ,
Packet4f a0,
Packet4f a1,
Packet4f a2,
Packet4f a3 
)
1736  {
1737  pbroadcast4<Packet4f>(ap0, a0, a1, a2, a3);
1738 }
EIGEN_STRONG_INLINE void pbroadcast4< Packet4f >(const float *a, Packet4f &a0, Packet4f &a1, Packet4f &a2, Packet4f &a3)
Definition: AltiVec/PacketMath.h:823

References pbroadcast4< Packet4f >().

Referenced by pbroadcastN< Packet4f, 4, false >().

◆ pcarg()

template<typename Packet , std::enable_if_t< is_scalar< Packet >::value, int > = 0>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet Eigen::internal::pcarg ( const Packet a)
Returns
the argument of a as a complex number
1512  {
1513  return Packet(numext::arg(a));
1514 }

References a.

Referenced by Eigen::internal::scalar_carg_op< Scalar >::packetOp().

◆ pcast() [1/4]

template<typename SrcPacket , typename TgtPacket >
EIGEN_DEVICE_FUNC TgtPacket Eigen::internal::pcast ( const SrcPacket &  a)
inline
Returns
static_cast<TgtType>(a) (coeff-wise)
287  {
289 }

References a, and run().

◆ pcast() [2/4]

template<typename SrcPacket , typename TgtPacket >
EIGEN_DEVICE_FUNC TgtPacket Eigen::internal::pcast ( const SrcPacket &  a,
const SrcPacket &  b 
)
inline
291  {
293 }

References a, b, and run().

◆ pcast() [3/4]

template<typename SrcPacket , typename TgtPacket >
EIGEN_DEVICE_FUNC TgtPacket Eigen::internal::pcast ( const SrcPacket &  a,
const SrcPacket &  b,
const SrcPacket &  c,
const SrcPacket &  d 
)
inline
296  {
298 }

References a, b, calibrate::c, and run().

◆ pcast() [4/4]

template<typename SrcPacket , typename TgtPacket >
EIGEN_DEVICE_FUNC TgtPacket Eigen::internal::pcast ( const SrcPacket &  a,
const SrcPacket &  b,
const SrcPacket &  c,
const SrcPacket &  d,
const SrcPacket &  e,
const SrcPacket &  f,
const SrcPacket &  g,
const SrcPacket &  h 
)
inline
302  {
303  return pcast_generic<SrcPacket, TgtPacket>::run(a, b, c, d, e, f, g, h);
304 }

References a, b, calibrate::c, e(), f(), and run().

◆ pcast< float, Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pcast< float, Packet1cf > ( const float &  a)
103  {
104  return Packet1cf(vset_lane_f32(a, vdup_n_f32(0.f), 0));
105 }

References a.

◆ pcast< Packet16b, Packet16f >()

62  {
63  return _mm512_cvtepi32_ps(_mm512_and_si512(_mm512_cvtepi8_epi32(a), _mm512_set1_epi32(1)));
64 }

References a.

◆ pcast< Packet16b, Packet4f >()

64  {
65  const __m128 cst_one = _mm_set_ps1(1.0f);
66 #ifdef EIGEN_VECTORIZE_SSE4_1
67  __m128i a_extended = _mm_cvtepi8_epi32(a);
68  __m128i abcd = _mm_cmpeq_epi32(a_extended, _mm_setzero_si128());
69 #else
70  __m128i abcd_efhg_ijkl_mnop = _mm_cmpeq_epi8(a, _mm_setzero_si128());
71  __m128i aabb_ccdd_eeff_gghh = _mm_unpacklo_epi8(abcd_efhg_ijkl_mnop, abcd_efhg_ijkl_mnop);
72  __m128i abcd = _mm_unpacklo_epi8(aabb_ccdd_eeff_gghh, aabb_ccdd_eeff_gghh);
73 #endif
74  __m128 result = _mm_andnot_ps(_mm_castsi128_ps(abcd), cst_one);
75  return result;
76 }

References a.

◆ pcast< Packet16b, Packet8f >()

89  {
90  const __m256 cst_one = _mm256_set1_ps(1.0f);
91 #ifdef EIGEN_VECTORIZE_AVX2
92  __m256i a_extended = _mm256_cvtepi8_epi32(a);
93  __m256i abcd_efgh = _mm256_cmpeq_epi32(a_extended, _mm256_setzero_si256());
94 #else
95  __m128i abcd_efhg_ijkl_mnop = _mm_cmpeq_epi8(a, _mm_setzero_si128());
96  __m128i aabb_ccdd_eeff_gghh = _mm_unpacklo_epi8(abcd_efhg_ijkl_mnop, abcd_efhg_ijkl_mnop);
97  __m128i aaaa_bbbb_cccc_dddd = _mm_unpacklo_epi8(aabb_ccdd_eeff_gghh, aabb_ccdd_eeff_gghh);
98  __m128i eeee_ffff_gggg_hhhh = _mm_unpackhi_epi8(aabb_ccdd_eeff_gghh, aabb_ccdd_eeff_gghh);
99  __m256i abcd_efgh = _mm256_setr_m128i(aaaa_bbbb_cccc_dddd, eeee_ffff_gggg_hhhh);
100 #endif
101  __m256 result = _mm256_andnot_ps(_mm256_castsi256_ps(abcd_efgh), cst_one);
102  return result;
103 }

References a.

◆ pcast< Packet16bf, Packet16f >()

261  {
262  return Bf16ToF32(a);
263 }
EIGEN_STRONG_INLINE Packet8f Bf16ToF32(const Packet8bf &a)
Definition: AVX/PacketMath.h:2558

References a, and Bf16ToF32().

◆ pcast< Packet16c, Packet2d >()

484  {
485  Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
486  Packet4i tmp2 = __lsx_vsllwil_w_h((__m128i)tmp1, 0);
487  return __lsx_vffint_d_l(__lsx_vsllwil_d_w((__m128i)tmp2, 0));
488 }

References a.

◆ pcast< Packet16c, Packet2l >()

141  {
142  Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
143  Packet4i tmp2 = __lsx_vsllwil_w_h((__m128i)tmp1, 0);
144  return __lsx_vsllwil_d_w((__m128i)tmp2, 0);
145 }

References a.

◆ pcast< Packet16c, Packet2ul >()

147  {
148  Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
149  Packet4i tmp2 = __lsx_vsllwil_w_h((__m128i)tmp1, 0);
150  return (Packet2ul)__lsx_vsllwil_d_w((__m128i)tmp2, 0);
151 }

References a.

◆ pcast< Packet16c, Packet4f >()

135  {
136  Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
137  Packet4i tmp2 = __lsx_vsllwil_w_h((__m128i)tmp1, 0);
138  return __lsx_vffint_s_w(tmp2);
139 }

References a.

◆ pcast< Packet16c, Packet4i >()

153  {
154  Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
155  return __lsx_vsllwil_w_h((__m128i)tmp1, 0);
156 }

References a.

◆ pcast< Packet16c, Packet4ui >()

158  {
159  Packet8s tmp1 = __lsx_vsllwil_h_b((__m128i)a, 0);
160  return (Packet4ui)__lsx_vsllwil_w_h((__m128i)tmp1, 0);
161 }

References a.

◆ pcast< Packet16c, Packet8s >()

163  {
164  return __lsx_vsllwil_h_b((__m128i)a, 0);
165 }

References a.

◆ pcast< Packet16c, Packet8us >()

167  {
168  return (Packet8us)__lsx_vsllwil_h_b((__m128i)a, 0);
169 }

References a.

◆ pcast< Packet16f, Packet16b >()

56  {
57  __mmask16 mask = _mm512_cmpneq_ps_mask(a, pzero(a));
58  return _mm512_maskz_cvtepi32_epi8(mask, _mm512_set1_epi32(1));
59 }
EIGEN_STRONG_INLINE Packet8f pzero(const Packet8f &)
Definition: AVX/PacketMath.h:774

References a, and pzero().

◆ pcast< Packet16f, Packet16bf >()

266  {
267  return F32ToBf16(a);
268 }
EIGEN_STRONG_INLINE Packet8bf F32ToBf16(Packet4f p4f)
Definition: AltiVec/PacketMath.h:2059

References a, and F32ToBf16().

◆ pcast< Packet16f, Packet16h >()

256  {
257  return float2half(a);
258 }

References a, and float2half().

◆ pcast< Packet16f, Packet16i >()

67  {
68  return _mm512_cvttps_epi32(a);
69 }

References a.

◆ pcast< Packet16f, Packet8d >()

72  {
73  return _mm512_cvtps_pd(_mm512_castps512_ps256(a));
74 }

References a.

◆ pcast< Packet16h, Packet16f >()

251  {
252  return half2float(a);
253 }

References a, and half2float().

◆ pcast< Packet16i, Packet16f >()

115  {
116  return _mm512_cvtepi32_ps(a);
117 }

References a.

◆ pcast< Packet16i, Packet8d >()

120  {
121  return _mm512_cvtepi32_pd(_mm512_castsi512_si256(a));
122 }

References a.

◆ pcast< Packet16uc, Packet2d >()

490  {
491  Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
492  Packet4ui tmp2 = __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
493  return __lsx_vffint_d_lu(__lsx_vsllwil_du_wu((__m128i)tmp2, 0));
494 }

References a.

◆ pcast< Packet16uc, Packet2l >()

184  {
185  Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
186  Packet4ui tmp2 = __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
187  return (Packet2l)__lsx_vsllwil_du_wu((__m128i)tmp2, 0);
188 }

References a.

◆ pcast< Packet16uc, Packet2ul >()

178  {
179  Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
180  Packet4ui tmp2 = __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
181  return __lsx_vsllwil_du_wu((__m128i)tmp2, 0);
182 }

References a.

◆ pcast< Packet16uc, Packet4f >()

172  {
173  Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
174  Packet4ui tmp2 = __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
175  return __lsx_vffint_s_wu(tmp2);
176 }

References a.

◆ pcast< Packet16uc, Packet4i >()

195  {
196  Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
197  return (Packet4i)__lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
198 }

References a.

◆ pcast< Packet16uc, Packet4ui >()

190  {
191  Packet8us tmp1 = __lsx_vsllwil_hu_bu((__m128i)a, 0);
192  return __lsx_vsllwil_wu_hu((__m128i)tmp1, 0);
193 }

References a.

◆ pcast< Packet16uc, Packet8s >()

204  {
205  return (Packet8s)__lsx_vsllwil_hu_bu((__m128i)a, 0);
206 }

References a.

◆ pcast< Packet16uc, Packet8us >()

200  {
201  return __lsx_vsllwil_hu_bu((__m128i)a, 0);
202 }

References a.

◆ pcast< Packet2d, Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pcast< Packet2d, Packet16c > ( const Packet2d a,
const Packet2d b,
const Packet2d c,
const Packet2d d,
const Packet2d e,
const Packet2d f,
const Packet2d g,
const Packet2d h 
)
465  {
466  const Packet8s abcd = pcast<Packet2d, Packet8s>(a, b, c, d);
467  const Packet8s efgh = pcast<Packet2d, Packet8s>(e, f, g, h);
468  return __lsx_vssrlni_b_h((__m128i)abcd, (__m128i)efgh, 0);
469 }
EIGEN_STRONG_INLINE Packet8s pcast< Packet2d, Packet8s >(const Packet2d &a, const Packet2d &b, const Packet2d &c, const Packet2d &d)
Definition: LSX/TypeCasting.h:449

References a, b, calibrate::c, e(), f(), and pcast< Packet2d, Packet8s >().

◆ pcast< Packet2d, Packet16uc >()

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pcast< Packet2d, Packet16uc > ( const Packet2d a,
const Packet2d b,
const Packet2d c,
const Packet2d d,
const Packet2d e,
const Packet2d f,
const Packet2d g,
const Packet2d h 
)
473  {
474  const Packet8us abcd = pcast<Packet2d, Packet8us>(a, b, c, d);
475  const Packet8us efgh = pcast<Packet2d, Packet8us>(e, f, g, h);
476  return __lsx_vssrlni_bu_h((__m128i)abcd, (__m128i)efgh, 0);
477 }
EIGEN_STRONG_INLINE Packet8us pcast< Packet2d, Packet8us >(const Packet2d &a, const Packet2d &b, const Packet2d &c, const Packet2d &d)
Definition: LSX/TypeCasting.h:456

References a, b, calibrate::c, e(), f(), and pcast< Packet2d, Packet8us >().

◆ pcast< Packet2d, Packet2l >()

433  {
434  return __lsx_vftint_l_d(a);
435 }

References a.

◆ pcast< Packet2d, Packet2ul >()

437  {
438  return __lsx_vftint_lu_d(a);
439 }

References a.

◆ pcast< Packet2d, Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pcast< Packet2d, Packet4f > ( const Packet2d a,
const Packet2d b 
)
429  {
430  return __lsx_vfcvt_s_d(b, a);
431 }

References a, and b.

◆ pcast< Packet2d, Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pcast< Packet2d, Packet4i > ( const Packet2d a,
const Packet2d b 
)
441  {
442  return __lsx_vssrlni_w_d(__lsx_vftint_l_d(a), __lsx_vftint_l_d(b), 0);
443 }

References a, and b.

◆ pcast< Packet2d, Packet4ui >()

445  {
446  return __lsx_vssrlni_wu_d(__lsx_vftint_lu_d(a), __lsx_vftint_lu_d(b), 0);
447 }

References a, and b.

◆ pcast< Packet2d, Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcast< Packet2d, Packet8s > ( const Packet2d a,
const Packet2d b,
const Packet2d c,
const Packet2d d 
)
450  {
451  Packet4i tmp1 = __lsx_vssrlni_w_d(__lsx_vftint_l_d(a), __lsx_vftint_l_d(b), 0);
452  Packet4i tmp2 = __lsx_vssrlni_w_d(__lsx_vftint_l_d(c), __lsx_vftint_l_d(d), 0);
453  return __lsx_vssrlni_h_w((__m128i)tmp1, (__m128i)tmp2, 0);
454 }

References a, b, and calibrate::c.

Referenced by pcast< Packet2d, Packet16c >().

◆ pcast< Packet2d, Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pcast< Packet2d, Packet8us > ( const Packet2d a,
const Packet2d b,
const Packet2d c,
const Packet2d d 
)
457  {
458  Packet4ui tmp1 = __lsx_vssrlni_wu_d(__lsx_vftint_lu_d(a), __lsx_vftint_lu_d(b), 0);
459  Packet4ui tmp2 = __lsx_vssrlni_wu_d(__lsx_vftint_lu_d(c), __lsx_vftint_lu_d(d), 0);
460  return __lsx_vssrlni_hu_w((__m128i)tmp1, (__m128i)tmp2, 0);
461 }

References a, b, and calibrate::c.

Referenced by pcast< Packet2d, Packet16uc >().

◆ pcast< Packet2f, Packet2cf >()

107  {
108  return Packet2cf(vreinterpretq_f32_u64(vmovl_u32(vreinterpret_u32_f32(a))));
109 }

References a.

◆ pcast< Packet2f, Packet2i >()

244  {
245  return vcvt_s32_f32(a);
246 }

References a.

◆ pcast< Packet2f, Packet2l >()

220  {
221  return vmovl_s32(vcvt_s32_f32(a));
222 }

References a.

◆ pcast< Packet2f, Packet2ui >()

257  {
258  return vcvt_u32_f32(a);
259 }

References a.

◆ pcast< Packet2f, Packet2ul >()

229  {
230  // Discard second half of input.
231  return vmovl_u32(vcvt_u32_f32(a));
232 }

References a.

◆ pcast< Packet2f, Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pcast< Packet2f, Packet4s > ( const Packet2f a,
const Packet2f b 
)
274  {
275  return vmovn_s32(vcombine_s32(vcvt_s32_f32(a), vcvt_s32_f32(b)));
276 }

References a, and b.

Referenced by pcast< Packet2f, Packet8c >().

◆ pcast< Packet2f, Packet4us >()

291  {
292  return vmovn_u32(vcombine_u32(vcvt_u32_f32(a), vcvt_u32_f32(b)));
293 }

References a, and b.

◆ pcast< Packet2f, Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcast< Packet2f, Packet8c > ( const Packet2f a,
const Packet2f b,
const Packet2f c,
const Packet2f d 
)
313  {
314  const int16x4_t ab_s16 = pcast<Packet2f, Packet4s>(a, b);
315  const int16x4_t cd_s16 = pcast<Packet2f, Packet4s>(c, d);
316  return vmovn_s16(vcombine_s16(ab_s16, cd_s16));
317 }
EIGEN_STRONG_INLINE Packet4s pcast< Packet2f, Packet4s >(const Packet2f &a, const Packet2f &b)
Definition: NEON/TypeCasting.h:274

References a, b, calibrate::c, and pcast< Packet2f, Packet4s >().

Referenced by pcast< Packet2f, Packet8uc >().

◆ pcast< Packet2f, Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pcast< Packet2f, Packet8uc > ( const Packet2f a,
const Packet2f b,
const Packet2f c,
const Packet2f d 
)
342  {
343  return preinterpret<Packet8uc>(pcast<Packet2f, Packet8c>(a, b, c, d));
344 }
EIGEN_STRONG_INLINE Packet8c pcast< Packet2f, Packet8c >(const Packet2f &a, const Packet2f &b, const Packet2f &c, const Packet2f &d)
Definition: NEON/TypeCasting.h:312

References a, b, calibrate::c, and pcast< Packet2f, Packet8c >().

◆ pcast< Packet2i, Packet2f >()

843  {
844  return vcvt_f32_s32(a);
845 }

References a.

◆ pcast< Packet2i, Packet2l >()

857  {
858  return vmovl_s32(a);
859 }

References a.

Referenced by pcast< Packet2i, Packet2ul >().

◆ pcast< Packet2i, Packet2ul >()

870  {
871  return preinterpret<Packet2ul>(pcast<Packet2i, Packet2l>(a));
872 }
EIGEN_STRONG_INLINE Packet2l pcast< Packet2i, Packet2l >(const Packet2i &a)
Definition: NEON/TypeCasting.h:857

References a, and pcast< Packet2i, Packet2l >().

◆ pcast< Packet2i, Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pcast< Packet2i, Packet4s > ( const Packet2i a,
const Packet2i b 
)
887  {
888  return vmovn_s32(vcombine_s32(a, b));
889 }

References a, and b.

◆ pcast< Packet2i, Packet4us >()

904  {
905  return vmovn_u32(vreinterpretq_u32_s32(vcombine_s32(a, b)));
906 }

References a, and b.

◆ pcast< Packet2i, Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcast< Packet2i, Packet8c > ( const Packet2i a,
const Packet2i b,
const Packet2i c,
const Packet2i d 
)
926  {
927  const int16x4_t ab_s16 = vmovn_s32(vcombine_s32(a, b));
928  const int16x4_t cd_s16 = vmovn_s32(vcombine_s32(c, d));
929  return vmovn_s16(vcombine_s16(ab_s16, cd_s16));
930 }

References a, b, and calibrate::c.

Referenced by pcast< Packet2i, Packet8uc >().

◆ pcast< Packet2i, Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pcast< Packet2i, Packet8uc > ( const Packet2i a,
const Packet2i b,
const Packet2i c,
const Packet2i d 
)
954  {
955  return preinterpret<Packet8uc>(pcast<Packet2i, Packet8c>(a, b, c, d));
956 }
EIGEN_STRONG_INLINE Packet8c pcast< Packet2i, Packet8c >(const Packet2i &a, const Packet2i &b, const Packet2i &c, const Packet2i &d)
Definition: NEON/TypeCasting.h:925

References a, b, calibrate::c, and pcast< Packet2i, Packet8c >().

◆ pcast< Packet2l, Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pcast< Packet2l, Packet16c > ( const Packet2l a,
const Packet2l b,
const Packet2l c,
const Packet2l d,
const Packet2l e,
const Packet2l f,
const Packet2l g,
const Packet2l h 
)
371  {
372  const Packet8s abcd = pcast<Packet2l, Packet8s>(a, b, c, d);
373  const Packet8s efgh = pcast<Packet2l, Packet8s>(e, f, g, h);
374  return __lsx_vssrlni_b_h((__m128i)abcd, (__m128i)efgh, 0);
375 }
EIGEN_STRONG_INLINE Packet8s pcast< Packet2l, Packet8s >(const Packet2l &a, const Packet2l &b, const Packet2l &c, const Packet2l &d)
Definition: LSX/TypeCasting.h:355

References a, b, calibrate::c, e(), f(), and pcast< Packet2l, Packet8s >().

◆ pcast< Packet2l, Packet16uc >()

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pcast< Packet2l, Packet16uc > ( const Packet2l a,
const Packet2l b,
const Packet2l c,
const Packet2l d,
const Packet2l e,
const Packet2l f,
const Packet2l g,
const Packet2l h 
)
379  {
380  const Packet8us abcd = pcast<Packet2l, Packet8us>(a, b, c, d);
381  const Packet8us efgh = pcast<Packet2l, Packet8us>(e, f, g, h);
382  return __lsx_vssrlni_bu_h((__m128i)abcd, (__m128i)efgh, 0);
383 }
EIGEN_STRONG_INLINE Packet8us pcast< Packet2l, Packet8us >(const Packet2l &a, const Packet2l &b, const Packet2l &c, const Packet2l &d)
Definition: LSX/TypeCasting.h:362

References a, b, calibrate::c, e(), f(), and pcast< Packet2l, Packet8us >().

◆ pcast< Packet2l, Packet2d >()

514  {
515  return __lsx_vffint_d_l(a);
516 }

References a.

◆ pcast< Packet2l, Packet2f >()

1116  {
1117 #if EIGEN_ARCH_ARM64
1118  return vcvt_f32_f64(vcvtq_f64_s64(a));
1119 #else
1120  EIGEN_ALIGN_MAX int64_t lvals[2];
1121  pstore(lvals, a);
1122  EIGEN_ALIGN_MAX float fvals[2] = {static_cast<float>(lvals[0]), static_cast<float>(lvals[1])};
1123  return pload<Packet2f>(fvals);
1124 #endif
1125 }
#define EIGEN_ALIGN_MAX
Definition: ConfigureVectorization.h:146
EIGEN_DEVICE_FUNC void pstore(Scalar *to, const Packet &from)
Definition: GenericPacketMath.h:891
EIGEN_STRONG_INLINE Packet2f pload< Packet2f >(const float *from)
Definition: NEON/PacketMath.h:2386

References a, EIGEN_ALIGN_MAX, pload< Packet2f >(), and pstore().

◆ pcast< Packet2l, Packet2i >()

1136  {
1137  return vmovn_s64(a);
1138 }

References a.

◆ pcast< Packet2l, Packet2ui >()

1149  {
1150  return vmovn_u64(vreinterpretq_u64_s64(a));
1151 }

References a.

◆ pcast< Packet2l, Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pcast< Packet2l, Packet4c > ( const Packet2l a,
const Packet2l b 
)
1203  {
1204  const int16x4_t ab_s16 = pcast<Packet2l, Packet4s>(a, b);
1205  const int16x8_t abab_s16 = vcombine_s16(ab_s16, ab_s16);
1206  const int8x8_t abab_s8 = vmovn_s16(abab_s16);
1207  return vget_lane_s32(vreinterpret_s32_s8(abab_s8), 0);
1208 }
EIGEN_STRONG_INLINE Packet4s pcast< Packet2l, Packet4s >(const Packet2l &a, const Packet2l &b)
Definition: NEON/TypeCasting.h:1165

References a, b, and pcast< Packet2l, Packet4s >().

Referenced by pcast< Packet2l, Packet4uc >().

◆ pcast< Packet2l, Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pcast< Packet2l, Packet4f > ( const Packet2l a,
const Packet2l b 
)
343  {
344  return __lsx_vffint_s_w(__lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0));
345 }

References a, and b.

◆ pcast< Packet2l, Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pcast< Packet2l, Packet4i > ( const Packet2l a,
const Packet2l b 
)
347  {
348  return __lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0);
349 }

References a, and b.

Referenced by pcast< Packet2l, Packet4s >().

◆ pcast< Packet2l, Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pcast< Packet2l, Packet4s > ( const Packet2l a,
const Packet2l b 
)
1165  {
1166  const int32x4_t ab_s32 = pcast<Packet2l, Packet4i>(a, b);
1167  return vmovn_s32(ab_s32);
1168 }
EIGEN_STRONG_INLINE Packet4i pcast< Packet2l, Packet4i >(const Packet2l &a, const Packet2l &b)
Definition: LSX/TypeCasting.h:347

References a, b, and pcast< Packet2l, Packet4i >().

Referenced by pcast< Packet2l, Packet4c >(), and pcast< Packet2l, Packet4us >().

◆ pcast< Packet2l, Packet4uc >()

1228  {
1229  return static_cast<Packet4uc>(pcast<Packet2l, Packet4c>(a, b));
1230 }
eigen_packet_wrapper< uint32_t, 5 > Packet4uc
Definition: NEON/PacketMath.h:80
EIGEN_STRONG_INLINE Packet4c pcast< Packet2l, Packet4c >(const Packet2l &a, const Packet2l &b)
Definition: NEON/TypeCasting.h:1203

References a, b, and pcast< Packet2l, Packet4c >().

◆ pcast< Packet2l, Packet4ui >()

351  {
352  return (Packet4ui)__lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0);
353 }

References a, and b.

◆ pcast< Packet2l, Packet4us >()

1180  {
1181  return preinterpret<Packet4us>(pcast<Packet2l, Packet4s>(a, b));
1182 }

References a, b, and pcast< Packet2l, Packet4s >().

◆ pcast< Packet2l, Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcast< Packet2l, Packet8c > ( const Packet2l a,
const Packet2l b,
const Packet2l c,
const Packet2l d 
)
1198  {
1199  const int16x8_t abcd_s16 = pcast<Packet2l, Packet8s>(a, b, c, d);
1200  return vmovn_s16(abcd_s16);
1201 }

References a, b, calibrate::c, and pcast< Packet2l, Packet8s >().

Referenced by pcast< Packet2l, Packet8uc >().

◆ pcast< Packet2l, Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcast< Packet2l, Packet8s > ( const Packet2l a,
const Packet2l b,
const Packet2l c,
const Packet2l d 
)
356  {
357  Packet4i tmp1 = __lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0);
358  Packet4i tmp2 = __lsx_vssrlni_w_d((__m128i)c, (__m128i)d, 0);
359  return __lsx_vssrlni_h_w((__m128i)tmp1, (__m128i)tmp2, 0);
360 }

References a, b, and calibrate::c.

Referenced by pcast< Packet2l, Packet16c >(), and pcast< Packet2l, Packet8c >().

◆ pcast< Packet2l, Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pcast< Packet2l, Packet8uc > ( const Packet2l a,
const Packet2l b,
const Packet2l c,
const Packet2l d 
)
1224  {
1225  return preinterpret<Packet8uc>(pcast<Packet2l, Packet8c>(a, b, c, d));
1226 }
EIGEN_STRONG_INLINE Packet8c pcast< Packet2l, Packet8c >(const Packet2l &a, const Packet2l &b, const Packet2l &c, const Packet2l &d)
Definition: NEON/TypeCasting.h:1197

References a, b, calibrate::c, and pcast< Packet2l, Packet8c >().

◆ pcast< Packet2l, Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pcast< Packet2l, Packet8us > ( const Packet2l a,
const Packet2l b,
const Packet2l c,
const Packet2l d 
)
363  {
364  Packet4i tmp1 = __lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0);
365  Packet4i tmp2 = __lsx_vssrlni_w_d((__m128i)c, (__m128i)d, 0);
366  return (Packet8us)__lsx_vssrlni_h_w((__m128i)tmp1, (__m128i)tmp2, 0);
367 }

References a, b, and calibrate::c.

Referenced by pcast< Packet2l, Packet16uc >().

◆ pcast< Packet2ui, Packet2f >()

974  {
975  return vcvt_f32_u32(a);
976 }

References a.

◆ pcast< Packet2ui, Packet2l >()

1001  {
1002  return preinterpret<Packet2l>(pcast<Packet2ui, Packet2ul>(a));
1003 }
EIGEN_STRONG_INLINE Packet2ul pcast< Packet2ui, Packet2ul >(const Packet2ui &a)
Definition: NEON/TypeCasting.h:988

References a, and pcast< Packet2ui, Packet2ul >().

◆ pcast< Packet2ui, Packet2ul >()

988  {
989  return vmovl_u32(a);
990 }

References a.

Referenced by pcast< Packet2ui, Packet2l >().

◆ pcast< Packet2ui, Packet4s >()

1031  {
1032  return preinterpret<Packet4s>(pcast<Packet2ui, Packet4us>(a, b));
1033 }
EIGEN_STRONG_INLINE Packet4us pcast< Packet2ui, Packet4us >(const Packet2ui &a, const Packet2ui &b)
Definition: NEON/TypeCasting.h:1014

References a, b, and pcast< Packet2ui, Packet4us >().

◆ pcast< Packet2ui, Packet4us >()

1014  {
1015  return vmovn_u32(vcombine_u32(a, b));
1016 }

References a, and b.

Referenced by pcast< Packet2ui, Packet4s >().

◆ pcast< Packet2ui, Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcast< Packet2ui, Packet8c > ( const Packet2ui a,
const Packet2ui b,
const Packet2ui c,
const Packet2ui d 
)
1085  {
1086  return preinterpret<Packet8c>(pcast<Packet2ui, Packet8uc>(a, b, c, d));
1087 }
EIGEN_STRONG_INLINE Packet8uc pcast< Packet2ui, Packet8uc >(const Packet2ui &a, const Packet2ui &b, const Packet2ui &c, const Packet2ui &d)
Definition: NEON/TypeCasting.h:1056

References a, b, calibrate::c, and pcast< Packet2ui, Packet8uc >().

◆ pcast< Packet2ui, Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pcast< Packet2ui, Packet8uc > ( const Packet2ui a,
const Packet2ui b,
const Packet2ui c,
const Packet2ui d 
)
1057  {
1058  const uint16x4_t ab_u16 = vmovn_u32(vcombine_u32(a, b));
1059  const uint16x4_t cd_u16 = vmovn_u32(vcombine_u32(c, d));
1060  return vmovn_u16(vcombine_u16(ab_u16, cd_u16));
1061 }

References a, b, and calibrate::c.

Referenced by pcast< Packet2ui, Packet8c >().

◆ pcast< Packet2ul, Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pcast< Packet2ul, Packet16c > ( const Packet2ul a,
const Packet2ul b,
const Packet2ul c,
const Packet2ul d,
const Packet2ul e,
const Packet2ul f,
const Packet2ul g,
const Packet2ul h 
)
422  {
423  const Packet8us abcd = pcast<Packet2ul, Packet8us>(a, b, c, d);
424  const Packet8us efgh = pcast<Packet2ul, Packet8us>(e, f, g, h);
425  return __lsx_vssrlni_bu_h((__m128i)abcd, (__m128i)efgh, 0);
426 }
EIGEN_STRONG_INLINE Packet8us pcast< Packet2ul, Packet8us >(const Packet2ul &a, const Packet2ul &b, const Packet2ul &c, const Packet2ul &d)
Definition: LSX/TypeCasting.h:398

References a, b, calibrate::c, e(), f(), and pcast< Packet2ul, Packet8us >().

◆ pcast< Packet2ul, Packet16uc >()

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pcast< Packet2ul, Packet16uc > ( const Packet2ul a,
const Packet2ul b,
const Packet2ul c,
const Packet2ul d,
const Packet2ul e,
const Packet2ul f,
const Packet2ul g,
const Packet2ul h 
)
414  {
415  const Packet8s abcd = pcast<Packet2ul, Packet8s>(a, b, c, d);
416  const Packet8s efgh = pcast<Packet2ul, Packet8s>(e, f, g, h);
417  return __lsx_vssrlni_b_h((__m128i)abcd, (__m128i)efgh, 0);
418 }
EIGEN_STRONG_INLINE Packet8s pcast< Packet2ul, Packet8s >(const Packet2ul &a, const Packet2ul &b, const Packet2ul &c, const Packet2ul &d)
Definition: LSX/TypeCasting.h:405

References a, b, calibrate::c, e(), f(), and pcast< Packet2ul, Packet8s >().

◆ pcast< Packet2ul, Packet2d >()

518  {
519  return __lsx_vffint_d_lu(a);
520 }

References a.

◆ pcast< Packet2ul, Packet2f >()

1253  {
1254 #if EIGEN_ARCH_ARM64
1255  return vcvt_f32_f64(vcvtq_f64_u64(a));
1256 #else
1257  EIGEN_ALIGN_MAX uint64_t uvals[2];
1258  pstore(uvals, a);
1259  EIGEN_ALIGN_MAX float fvals[2] = {static_cast<float>(uvals[0]), static_cast<float>(uvals[1])};
1260  return pload<Packet2f>(fvals);
1261 #endif
1262 }

References a, EIGEN_ALIGN_MAX, pload< Packet2f >(), and pstore().

◆ pcast< Packet2ul, Packet2i >()

1286  {
1287  return preinterpret<Packet2i>(pcast<Packet2ul, Packet2ui>(a));
1288 }
EIGEN_STRONG_INLINE Packet2ui pcast< Packet2ul, Packet2ui >(const Packet2ul &a)
Definition: NEON/TypeCasting.h:1273

References a, and pcast< Packet2ul, Packet2ui >().

◆ pcast< Packet2ul, Packet2ui >()

1273  {
1274  return vmovn_u64(a);
1275 }

References a.

Referenced by pcast< Packet2ul, Packet2i >().

◆ pcast< Packet2ul, Packet4c >()

1362  {
1363  return static_cast<Packet4c>(pcast<Packet2ul, Packet4uc>(a, b));
1364 }
eigen_packet_wrapper< int32_t, 2 > Packet4c
Definition: NEON/PacketMath.h:77
EIGEN_STRONG_INLINE Packet4uc pcast< Packet2ul, Packet4uc >(const Packet2ul &a, const Packet2ul &b)
Definition: NEON/TypeCasting.h:1339

References a, b, and pcast< Packet2ul, Packet4uc >().

◆ pcast< Packet2ul, Packet4f >()

386  {
387  return __lsx_vffint_s_wu(__lsx_vssrlni_w_d((__m128i)a, (__m128i)b, 0));
388 }

References a, and b.

◆ pcast< Packet2ul, Packet4i >()

394  {
395  return (Packet4i)__lsx_vssrlni_wu_d((__m128i)a, (__m128i)b, 0);
396 }

References a, and b.

◆ pcast< Packet2ul, Packet4s >()

1316  {
1317  return preinterpret<Packet4s>(pcast<Packet2ul, Packet4us>(a, b));
1318 }
EIGEN_STRONG_INLINE Packet4us pcast< Packet2ul, Packet4us >(const Packet2ul &a, const Packet2ul &b)
Definition: NEON/TypeCasting.h:1302

References a, b, and pcast< Packet2ul, Packet4us >().

◆ pcast< Packet2ul, Packet4uc >()

1339  {
1340  const uint16x4_t ab_u16 = pcast<Packet2ul, Packet4us>(a, b);
1341  const uint16x8_t abab_u16 = vcombine_u16(ab_u16, ab_u16);
1342  const uint8x8_t abab_u8 = vmovn_u16(abab_u16);
1343  return vget_lane_u32(vreinterpret_u32_u8(abab_u8), 0);
1344 }

References a, b, and pcast< Packet2ul, Packet4us >().

Referenced by pcast< Packet2ul, Packet4c >().

◆ pcast< Packet2ul, Packet4ui >()

390  {
391  return __lsx_vssrlni_wu_d((__m128i)a, (__m128i)b, 0);
392 }

References a, and b.

◆ pcast< Packet2ul, Packet4us >()

1302  {
1303  return vmovn_u32(vcombine_u32(vmovn_u64(a), vmovn_u64(b)));
1304 }

References a, and b.

Referenced by pcast< Packet2ul, Packet4s >(), and pcast< Packet2ul, Packet4uc >().

◆ pcast< Packet2ul, Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcast< Packet2ul, Packet8c > ( const Packet2ul a,
const Packet2ul b,
const Packet2ul c,
const Packet2ul d 
)
1358  {
1359  return preinterpret<Packet8c>(pcast<Packet2ul, Packet8uc>(a, b, c, d));
1360 }
EIGEN_STRONG_INLINE Packet8uc pcast< Packet2ul, Packet8uc >(const Packet2ul &a, const Packet2ul &b, const Packet2ul &c, const Packet2ul &d)
Definition: NEON/TypeCasting.h:1333

References a, b, calibrate::c, and pcast< Packet2ul, Packet8uc >().

◆ pcast< Packet2ul, Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcast< Packet2ul, Packet8s > ( const Packet2ul a,
const Packet2ul b,
const Packet2ul c,
const Packet2ul d 
)
406  {
407  Packet4ui tmp1 = __lsx_vssrlni_wu_d((__m128i)a, (__m128i)b, 0);
408  Packet4ui tmp2 = __lsx_vssrlni_wu_d((__m128i)c, (__m128i)d, 0);
409  return (Packet8s)__lsx_vssrlni_hu_w((__m128i)tmp1, (__m128i)tmp2, 0);
410 }

References a, b, and calibrate::c.

Referenced by pcast< Packet2ul, Packet16uc >().

◆ pcast< Packet2ul, Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pcast< Packet2ul, Packet8uc > ( const Packet2ul a,
const Packet2ul b,
const Packet2ul c,
const Packet2ul d 
)
1334  {
1335  const uint16x8_t abcd_u16 = pcast<Packet2ul, Packet8us>(a, b, c, d);
1336  return vmovn_u16(abcd_u16);
1337 }

References a, b, calibrate::c, and pcast< Packet2ul, Packet8us >().

Referenced by pcast< Packet2ul, Packet8c >().

◆ pcast< Packet2ul, Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pcast< Packet2ul, Packet8us > ( const Packet2ul a,
const Packet2ul b,
const Packet2ul c,
const Packet2ul d 
)
399  {
400  Packet4ui tmp1 = __lsx_vssrlni_wu_d((__m128i)a, (__m128i)b, 0);
401  Packet4ui tmp2 = __lsx_vssrlni_wu_d((__m128i)c, (__m128i)d, 0);
402  return __lsx_vssrlni_hu_w((__m128i)tmp1, (__m128i)tmp2, 0);
403 }

References a, b, and calibrate::c.

Referenced by pcast< Packet2ul, Packet16c >(), and pcast< Packet2ul, Packet8uc >().

◆ pcast< Packet4c, Packet4f >()

363  {
364  return vcvtq_f32_s32(vmovl_s16(vget_low_s16(vmovl_s8(vreinterpret_s8_s32(vdup_n_s32(a))))));
365 }

References a.

◆ pcast< Packet4c, Packet4i >()

405  {
406  return pcast<Packet8c, Packet4i>(vreinterpret_s8_s32(vdup_n_s32(a)));
407 }
EIGEN_STRONG_INLINE Packet4i pcast< Packet8c, Packet4i >(const Packet8c &a)
Definition: NEON/TypeCasting.h:401

References a, and pcast< Packet8c, Packet4i >().

Referenced by pcast< Packet4c, Packet4ui >().

◆ pcast< Packet4c, Packet4s >()

450  {
451  return pcast<Packet8c, Packet4s>(vreinterpret_s8_s32(vdup_n_s32(a)));
452 }
EIGEN_STRONG_INLINE Packet4s pcast< Packet8c, Packet4s >(const Packet8c &a)
Definition: NEON/TypeCasting.h:445

References a, and pcast< Packet8c, Packet4s >().

Referenced by pcast< Packet4c, Packet4us >().

◆ pcast< Packet4c, Packet4ui >()

427  {
428  return preinterpret<Packet4ui>(pcast<Packet4c, Packet4i>(a));
429 }
EIGEN_STRONG_INLINE Packet4i pcast< Packet4c, Packet4i >(const Packet4c &a)
Definition: NEON/TypeCasting.h:405

References a, and pcast< Packet4c, Packet4i >().

◆ pcast< Packet4c, Packet4us >()

471  {
472  return preinterpret<Packet4us>(pcast<Packet4c, Packet4s>(a));
473 }
EIGEN_STRONG_INLINE Packet4s pcast< Packet4c, Packet4s >(const Packet4c &a)
Definition: NEON/TypeCasting.h:450

References a, and pcast< Packet4c, Packet4s >().

◆ pcast< Packet4d, Packet4f >()

131  {
132  return _mm256_cvtpd_ps(a);
133 }

References a.

◆ pcast< Packet4d, Packet4i >()

116  {
117  return _mm256_cvttpd_epi32(a);
118 }

References a.

◆ pcast< Packet4d, Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pcast< Packet4d, Packet8f > ( const Packet4d a,
const Packet4d b 
)
126  {
127  return _mm256_set_m128(_mm256_cvtpd_ps(b), _mm256_cvtpd_ps(a));
128 }

References a, and b.

◆ pcast< Packet4d, Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pcast< Packet4d, Packet8i > ( const Packet4d a,
const Packet4d b 
)
111  {
112  return _mm256_set_m128i(_mm256_cvttpd_epi32(b), _mm256_cvttpd_epi32(a));
113 }

References a, and b.

◆ pcast< Packet4f, Packet16b >()

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::pcast< Packet4f, Packet16b > ( const Packet4f a,
const Packet4f b,
const Packet4f c,
const Packet4f d 
)
51  {
52  __m128 zero = pzero(a);
53  __m128 nonzero_a = _mm_cmpneq_ps(a, zero);
54  __m128 nonzero_b = _mm_cmpneq_ps(b, zero);
55  __m128 nonzero_c = _mm_cmpneq_ps(c, zero);
56  __m128 nonzero_d = _mm_cmpneq_ps(d, zero);
57  __m128i ab_bytes = _mm_packs_epi32(_mm_castps_si128(nonzero_a), _mm_castps_si128(nonzero_b));
58  __m128i cd_bytes = _mm_packs_epi32(_mm_castps_si128(nonzero_c), _mm_castps_si128(nonzero_d));
59  __m128i merged = _mm_packs_epi16(ab_bytes, cd_bytes);
60  return _mm_and_si128(merged, _mm_set1_epi8(1));
61 }

References a, b, calibrate::c, pzero(), and zero().

◆ pcast< Packet4f, Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pcast< Packet4f, Packet16c > ( const Packet4f a,
const Packet4f b,
const Packet4f c,
const Packet4f d 
)
121  {
122  Packet8s tmp1 = __lsx_vssrlni_h_w(__lsx_vftint_w_s(a), __lsx_vftint_w_s(b), 0);
123  Packet8s tmp2 = __lsx_vssrlni_h_w(__lsx_vftint_w_s(c), __lsx_vftint_w_s(d), 0);
124  return __lsx_vssrlni_b_h((__m128i)tmp1, (__m128i)tmp2, 0);
125 }

References a, b, and calibrate::c.

◆ pcast< Packet4f, Packet16uc >()

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pcast< Packet4f, Packet16uc > ( const Packet4f a,
const Packet4f b,
const Packet4f c,
const Packet4f d 
)
128  {
129  Packet8us tmp1 = __lsx_vssrlni_hu_w(__lsx_vftint_wu_s(a), __lsx_vftint_wu_s(b), 0);
130  Packet8us tmp2 = __lsx_vssrlni_hu_w(__lsx_vftint_wu_s(c), __lsx_vftint_wu_s(d), 0);
131  return __lsx_vssrlni_bu_h((__m128i)tmp1, (__m128i)tmp2, 0);
132 }

References a, b, and calibrate::c.

◆ pcast< Packet4f, Packet2d >()

480  {
481  return __lsx_vfcvtl_d_s(a);
482 }

References a.

◆ pcast< Packet4f, Packet2l >()

94  {
95  Packet2d tmp = __lsx_vfcvtl_d_s(a);
96  return __lsx_vftint_l_d(tmp);
97 }

References a, and tmp.

◆ pcast< Packet4f, Packet2ul >()

99  {
100  Packet2d tmp = __lsx_vfcvtl_d_s(a);
101  return __lsx_vftint_lu_d(tmp);
102 }

References a, and tmp.

◆ pcast< Packet4f, Packet4c >()

319  {
320  const int32x4_t a_s32x4 = vcvtq_s32_f32(a);
321  const int16x4_t a_s16x4 = vmovn_s32(a_s32x4);
322  const int16x8_t aa_s16x8 = vcombine_s16(a_s16x4, a_s16x4);
323  const int8x8_t aa_s8x8 = vmovn_s16(aa_s16x8);
324  return vget_lane_s32(vreinterpret_s32_s8(aa_s8x8), 0);
325 }

References a.

Referenced by pcast< Packet4f, Packet4uc >().

◆ pcast< Packet4f, Packet4d >()

151  {
152  return _mm256_cvtps_pd(a);
153 }

References a.

◆ pcast< Packet4f, Packet4i >()

41  {
42  return vec_cts(a, 0);
43 }

References a.

◆ pcast< Packet4f, Packet4s >()

270  {
271  return vmovn_s32(vcvtq_s32_f32(a));
272 }

References a.

◆ pcast< Packet4f, Packet4uc >()

346  {
347  return static_cast<Packet4uc>(pcast<Packet4f, Packet4c>(a));
348 }
EIGEN_STRONG_INLINE Packet4c pcast< Packet4f, Packet4c >(const Packet4f &a)
Definition: NEON/TypeCasting.h:319

References a, and pcast< Packet4f, Packet4c >().

◆ pcast< Packet4f, Packet4ui >()

46  {
47  return vec_ctu(a, 0);
48 }

References a.

Referenced by pcast< Packet8bf, Packet8us >().

◆ pcast< Packet4f, Packet4us >()

287  {
288  return vmovn_u32(vcvtq_u32_f32(a));
289 }

References a.

◆ pcast< Packet4f, Packet8bf >()

117  {
118  return F32ToBf16Both(a, b);
119 }

References a, b, and F32ToBf16Both().

◆ pcast< Packet4f, Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcast< Packet4f, Packet8c > ( const Packet4f a,
const Packet4f b 
)
307  {
308  const int16x8_t ab_s16 = pcast<Packet4f, Packet8s>(a, b);
309  return vmovn_s16(ab_s16);
310 }
EIGEN_STRONG_INLINE Packet8s pcast< Packet4f, Packet8s >(const Packet4f &a, const Packet4f &b)
Definition: LSX/TypeCasting.h:112

References a, b, and pcast< Packet4f, Packet8s >().

Referenced by pcast< Packet4f, Packet8uc >().

◆ pcast< Packet4f, Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcast< Packet4f, Packet8s > ( const Packet4f a,
const Packet4f b 
)
112  {
113  return __lsx_vssrlni_h_w(__lsx_vftint_w_s(a), __lsx_vftint_w_s(b), 0);
114 }

References a, and b.

Referenced by pcast< Packet4f, Packet8c >().

◆ pcast< Packet4f, Packet8uc >()

337  {
338  return preinterpret<Packet8uc>(pcast<Packet4f, Packet8c>(a, b));
339 }
EIGEN_STRONG_INLINE Packet8c pcast< Packet4f, Packet8c >(const Packet4f &a, const Packet4f &b)
Definition: NEON/TypeCasting.h:307

References a, b, and pcast< Packet4f, Packet8c >().

◆ pcast< Packet4f, Packet8us >()

116  {
117  return __lsx_vssrlni_hu_w(__lsx_vftint_wu_s(a), __lsx_vftint_wu_s(b), 0);
118 }

References a, and b.

◆ pcast< Packet4i, Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pcast< Packet4i, Packet16c > ( const Packet4i a,
const Packet4i b,
const Packet4i c,
const Packet4i d 
)
294  {
295  Packet8s tmp1 = __lsx_vssrlni_h_w((__m128i)a, (__m128i)b, 0);
296  Packet8s tmp2 = __lsx_vssrlni_h_w((__m128i)c, (__m128i)d, 0);
297  return __lsx_vssrlni_b_h((__m128i)tmp1, (__m128i)tmp2, 0);
298 }

References a, b, and calibrate::c.

◆ pcast< Packet4i, Packet16uc >()

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pcast< Packet4i, Packet16uc > ( const Packet4i a,
const Packet4i b,
const Packet4i c,
const Packet4i d 
)
301  {
302  Packet8s tmp1 = __lsx_vssrlni_h_w((__m128i)a, (__m128i)b, 0);
303  Packet8s tmp2 = __lsx_vssrlni_h_w((__m128i)c, (__m128i)d, 0);
304  return (Packet16uc)__lsx_vssrlni_b_h((__m128i)tmp1, (__m128i)tmp2, 0);
305 }

References a, b, and calibrate::c.

◆ pcast< Packet4i, Packet2d >()

506  {
507  return __lsx_vffint_d_l(__lsx_vsllwil_d_w((__m128i)a, 0));
508 }

References a.

◆ pcast< Packet4i, Packet2l >()

277  {
278  return __lsx_vsllwil_d_w((__m128i)a, 0);
279 }

References a.

◆ pcast< Packet4i, Packet2ul >()

281  {
282  return (Packet2ul)__lsx_vsllwil_d_w((__m128i)a, 0);
283 }

References a.

◆ pcast< Packet4i, Packet4c >()

932  {
933  const int16x4_t a_s16x4 = vmovn_s32(a);
934  const int16x8_t aa_s16x8 = vcombine_s16(a_s16x4, a_s16x4);
935  const int8x8_t aa_s8x8 = vmovn_s16(aa_s16x8);
936  return vget_lane_s32(vreinterpret_s32_s8(aa_s8x8), 0);
937 }

References a.

Referenced by pcast< Packet4i, Packet4uc >().

◆ pcast< Packet4i, Packet4d >()

141  {
142  return _mm256_cvtepi32_pd(a);
143 }

References a.

◆ pcast< Packet4i, Packet4f >()

51  {
52  return vec_ctf(a, 0);
53 }

References a.

◆ pcast< Packet4i, Packet4s >()

883  {
884  return vmovn_s32(a);
885 }

References a.

◆ pcast< Packet4i, Packet4uc >()

958  {
959  return static_cast<Packet4uc>(pcast<Packet4i, Packet4c>(a));
960 }
EIGEN_STRONG_INLINE Packet4c pcast< Packet4i, Packet4c >(const Packet4i &a)
Definition: NEON/TypeCasting.h:932

References a, and pcast< Packet4i, Packet4c >().

◆ pcast< Packet4i, Packet4us >()

900  {
901  return vmovn_u32(vreinterpretq_u32_s32(a));
902 }

References a.

◆ pcast< Packet4i, Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcast< Packet4i, Packet8c > ( const Packet4i a,
const Packet4i b 
)
920  {
921  const int16x8_t ab_s16 = pcast<Packet4i, Packet8s>(a, b);
922  return vmovn_s16(ab_s16);
923 }
EIGEN_STRONG_INLINE Packet8s pcast< Packet4i, Packet8s >(const Packet4i &a, const Packet4i &b)
Definition: LSX/TypeCasting.h:285

References a, b, and pcast< Packet4i, Packet8s >().

Referenced by pcast< Packet4i, Packet8uc >().

◆ pcast< Packet4i, Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcast< Packet4i, Packet8s > ( const Packet4i a,
const Packet4i b 
)
285  {
286  return __lsx_vssrlni_h_w((__m128i)a, (__m128i)b, 0);
287 }

References a, and b.

Referenced by pcast< Packet4i, Packet8c >().

◆ pcast< Packet4i, Packet8uc >()

949  {
950  return preinterpret<Packet8uc>(pcast<Packet4i, Packet8c>(a, b));
951 }
EIGEN_STRONG_INLINE Packet8c pcast< Packet4i, Packet8c >(const Packet4i &a, const Packet4i &b)
Definition: NEON/TypeCasting.h:920

References a, b, and pcast< Packet4i, Packet8c >().

◆ pcast< Packet4i, Packet8us >()

289  {
290  return (Packet8us)__lsx_vssrlni_h_w((__m128i)a, (__m128i)b, 0);
291 }

References a, and b.

◆ pcast< Packet4s, Packet2f >()

608  {
609  // Discard second half of input.
610  return vcvt_f32_s32(vget_low_s32(vmovl_s16(a)));
611 }

References a.

◆ pcast< Packet4s, Packet2i >()

646  {
647  // Discard second half of input.
648  return vget_low_s32(vmovl_s16(a));
649 }

References a.

Referenced by pcast< Packet4s, Packet2ui >().

◆ pcast< Packet4s, Packet2ui >()

664  {
665  return preinterpret<Packet2ui>(pcast<Packet4s, Packet2i>(a));
666 }
EIGEN_STRONG_INLINE Packet2i pcast< Packet4s, Packet2i >(const Packet4s &a)
Definition: NEON/TypeCasting.h:646

References a, and pcast< Packet4s, Packet2i >().

◆ pcast< Packet4s, Packet4c >()

685  {
686  const int8x8_t aa_s8x8 = pcast<Packet4s, Packet8c>(a, a);
687  return vget_lane_s32(vreinterpret_s32_s8(aa_s8x8), 0);
688 }
EIGEN_STRONG_INLINE Packet8c pcast< Packet4s, Packet8c >(const Packet4s &a, const Packet4s &b)
Definition: NEON/TypeCasting.h:681

References a, and pcast< Packet4s, Packet8c >().

Referenced by pcast< Packet4s, Packet4uc >().

◆ pcast< Packet4s, Packet4f >()

604  {
605  return vcvtq_f32_s32(vmovl_s16(a));
606 }

References a.

◆ pcast< Packet4s, Packet4i >()

642  {
643  return vmovl_s16(a);
644 }

References a.

Referenced by pcast< Packet4s, Packet4ui >().

◆ pcast< Packet4s, Packet4uc >()

707  {
708  return static_cast<Packet4uc>(pcast<Packet4s, Packet4c>(a));
709 }
EIGEN_STRONG_INLINE Packet4c pcast< Packet4s, Packet4c >(const Packet4s &a)
Definition: NEON/TypeCasting.h:685

References a, and pcast< Packet4s, Packet4c >().

◆ pcast< Packet4s, Packet4ui >()

660  {
661  return preinterpret<Packet4ui>(pcast<Packet4s, Packet4i>(a));
662 }
EIGEN_STRONG_INLINE Packet4i pcast< Packet4s, Packet4i >(const Packet4s &a)
Definition: NEON/TypeCasting.h:642

References a, and pcast< Packet4s, Packet4i >().

◆ pcast< Packet4s, Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcast< Packet4s, Packet8c > ( const Packet4s a,
const Packet4s b 
)
681  {
682  return vmovn_s16(vcombine_s16(a, b));
683 }

References a, and b.

Referenced by pcast< Packet4s, Packet4c >(), and pcast< Packet4s, Packet8uc >().

◆ pcast< Packet4s, Packet8uc >()

703  {
704  return preinterpret<Packet8uc>(pcast<Packet4s, Packet8c>(a, b));
705 }

References a, b, and pcast< Packet4s, Packet8c >().

◆ pcast< Packet4uc, Packet4f >()

488  {
489  return vcvtq_f32_u32(vmovl_u16(vget_low_u16(vmovl_u8(vreinterpret_u8_u32(vdup_n_u32(a))))));
490 }

References a.

◆ pcast< Packet4uc, Packet4i >()

552  {
553  return preinterpret<Packet4i>(pcast<Packet4uc, Packet4ui>(a));
554 }
EIGEN_STRONG_INLINE Packet4ui pcast< Packet4uc, Packet4ui >(const Packet4uc &a)
Definition: NEON/TypeCasting.h:535

References a, and pcast< Packet4uc, Packet4ui >().

◆ pcast< Packet4uc, Packet4s >()

587  {
588  return preinterpret<Packet4s>(pcast<Packet4uc, Packet4us>(a));
589 }
EIGEN_STRONG_INLINE Packet4us pcast< Packet4uc, Packet4us >(const Packet4uc &a)
Definition: NEON/TypeCasting.h:570

References a, and pcast< Packet4uc, Packet4us >().

◆ pcast< Packet4uc, Packet4ui >()

535  {
536  return pcast<Packet8uc, Packet4ui>(vreinterpret_u8_u32(vdup_n_u32(a)));
537 }
EIGEN_STRONG_INLINE Packet4ui pcast< Packet8uc, Packet4ui >(const Packet8uc &a)
Definition: NEON/TypeCasting.h:526

References a, and pcast< Packet8uc, Packet4ui >().

Referenced by pcast< Packet4uc, Packet4i >().

◆ pcast< Packet4uc, Packet4us >()

570  {
571  return vget_low_u16(vmovl_u8(vreinterpret_u8_u32(vdup_n_u32(a))));
572 }

References a.

Referenced by pcast< Packet4uc, Packet4s >().

◆ pcast< Packet4ui, Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pcast< Packet4ui, Packet16c > ( const Packet4ui a,
const Packet4ui b,
const Packet4ui c,
const Packet4ui d 
)
336  {
337  Packet8us tmp1 = __lsx_vssrlni_hu_w((__m128i)a, (__m128i)b, 0);
338  Packet8us tmp2 = __lsx_vssrlni_hu_w((__m128i)c, (__m128i)d, 0);
339  return (Packet16c)__lsx_vssrlni_bu_h((__m128i)tmp1, (__m128i)tmp2, 0);
340 }

References a, b, and calibrate::c.

◆ pcast< Packet4ui, Packet16uc >()

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pcast< Packet4ui, Packet16uc > ( const Packet4ui a,
const Packet4ui b,
const Packet4ui c,
const Packet4ui d 
)
329  {
330  Packet8us tmp1 = __lsx_vssrlni_hu_w((__m128i)a, (__m128i)b, 0);
331  Packet8us tmp2 = __lsx_vssrlni_hu_w((__m128i)c, (__m128i)d, 0);
332  return __lsx_vssrlni_bu_h((__m128i)tmp1, (__m128i)tmp2, 0);
333 }

References a, b, and calibrate::c.

◆ pcast< Packet4ui, Packet2d >()

510  {
511  return __lsx_vffint_d_lu(__lsx_vsllwil_du_wu((__m128i)a, 0));
512 }

References a.

◆ pcast< Packet4ui, Packet2l >()

316  {
317  return (Packet2l)__lsx_vsllwil_du_wu((__m128i)a, 0);
318 }

References a.

◆ pcast< Packet4ui, Packet2ul >()

312  {
313  return __lsx_vsllwil_du_wu((__m128i)a, 0);
314 }

References a.

◆ pcast< Packet4ui, Packet4c >()

1089  {
1090  return static_cast<Packet4c>(pcast<Packet4ui, Packet4uc>(a));
1091 }
EIGEN_STRONG_INLINE Packet4uc pcast< Packet4ui, Packet4uc >(const Packet4ui &a)
Definition: NEON/TypeCasting.h:1063

References a, and pcast< Packet4ui, Packet4uc >().

◆ pcast< Packet4ui, Packet4f >()

56  {
57  return vec_ctf(a, 0);
58 }

References a.

Referenced by pcast< Packet8us, Packet8bf >().

◆ pcast< Packet4ui, Packet4s >()

1035  {
1036  return preinterpret<Packet4s>(pcast<Packet4ui, Packet4us>(a));
1037 }
EIGEN_STRONG_INLINE Packet4us pcast< Packet4ui, Packet4us >(const Packet4ui &a)
Definition: NEON/TypeCasting.h:1018

References a, and pcast< Packet4ui, Packet4us >().

◆ pcast< Packet4ui, Packet4uc >()

1063  {
1064  const uint16x4_t a_u16x4 = vmovn_u32(a);
1065  const uint16x8_t aa_u16x8 = vcombine_u16(a_u16x4, a_u16x4);
1066  const uint8x8_t aa_u8x8 = vmovn_u16(aa_u16x8);
1067  return vget_lane_u32(vreinterpret_u32_u8(aa_u8x8), 0);
1068 }

References a.

Referenced by pcast< Packet4ui, Packet4c >().

◆ pcast< Packet4ui, Packet4us >()

1018  {
1019  return vmovn_u32(a);
1020 }

References a.

Referenced by pcast< Packet4ui, Packet4s >().

◆ pcast< Packet4ui, Packet8c >()

1080  {
1081  return preinterpret<Packet8c>(pcast<Packet4ui, Packet8uc>(a, b));
1082 }
EIGEN_STRONG_INLINE Packet8uc pcast< Packet4ui, Packet8uc >(const Packet4ui &a, const Packet4ui &b)
Definition: NEON/TypeCasting.h:1051

References a, b, and pcast< Packet4ui, Packet8uc >().

◆ pcast< Packet4ui, Packet8s >()

324  {
325  return (Packet8s)__lsx_vssrlni_hu_w((__m128i)a, (__m128i)b, 0);
326 }

References a, and b.

◆ pcast< Packet4ui, Packet8uc >()

1051  {
1052  const uint16x8_t ab_u16 = vcombine_u16(vmovn_u32(a), vmovn_u32(b));
1053  return vmovn_u16(ab_u16);
1054 }

References a, and b.

Referenced by pcast< Packet4ui, Packet8c >().

◆ pcast< Packet4ui, Packet8us >()

320  {
321  return __lsx_vssrlni_hu_w((__m128i)a, (__m128i)b, 0);
322 }

References a, and b.

◆ pcast< Packet4us, Packet2f >()

728  {
729  // Discard second half of input.
730  return vcvt_f32_u32(vget_low_u32(vmovl_u16(a)));
731 }

References a.

◆ pcast< Packet4us, Packet2i >()

784  {
785  return preinterpret<Packet2i>(pcast<Packet4us, Packet2ui>(a));
786 }
EIGEN_STRONG_INLINE Packet2ui pcast< Packet4us, Packet2ui >(const Packet4us &a)
Definition: NEON/TypeCasting.h:766

References a, and pcast< Packet4us, Packet2ui >().

◆ pcast< Packet4us, Packet2ui >()

766  {
767  // Discard second half of input.
768  return vget_low_u32(vmovl_u16(a));
769 }

References a.

Referenced by pcast< Packet4us, Packet2i >().

◆ pcast< Packet4us, Packet4c >()

827  {
828  return static_cast<Packet4c>(pcast<Packet4us, Packet4uc>(a));
829 }
EIGEN_STRONG_INLINE Packet4uc pcast< Packet4us, Packet4uc >(const Packet4us &a)
Definition: NEON/TypeCasting.h:805

References a, and pcast< Packet4us, Packet4uc >().

◆ pcast< Packet4us, Packet4f >()

724  {
725  return vcvtq_f32_u32(vmovl_u16(a));
726 }

References a.

◆ pcast< Packet4us, Packet4i >()

780  {
781  return preinterpret<Packet4i>(pcast<Packet4us, Packet4ui>(a));
782 }
EIGEN_STRONG_INLINE Packet4ui pcast< Packet4us, Packet4ui >(const Packet4us &a)
Definition: NEON/TypeCasting.h:762

References a, and pcast< Packet4us, Packet4ui >().

◆ pcast< Packet4us, Packet4uc >()

805  {
806  uint8x8_t aa_u8x8 = pcast<Packet4us, Packet8uc>(a, a);
807  return vget_lane_u32(vreinterpret_u32_u8(aa_u8x8), 0);
808 }
EIGEN_STRONG_INLINE Packet8uc pcast< Packet4us, Packet8uc >(const Packet4us &a, const Packet4us &b)
Definition: NEON/TypeCasting.h:801

References a, and pcast< Packet4us, Packet8uc >().

Referenced by pcast< Packet4us, Packet4c >().

◆ pcast< Packet4us, Packet4ui >()

762  {
763  return vmovl_u16(a);
764 }

References a.

Referenced by pcast< Packet4us, Packet4i >().

◆ pcast< Packet4us, Packet8c >()

823  {
824  return preinterpret<Packet8c>(pcast<Packet4us, Packet8uc>(a, b));
825 }

References a, b, and pcast< Packet4us, Packet8uc >().

◆ pcast< Packet4us, Packet8uc >()

801  {
802  return vmovn_u16(vcombine_u16(a, b));
803 }

References a, and b.

Referenced by pcast< Packet4us, Packet4uc >(), and pcast< Packet4us, Packet8c >().

◆ pcast< Packet8bf, Packet4f >()

102  {
104 #ifdef _BIG_ENDIAN
105  return reinterpret_cast<Packet4f>(vec_mergeh(a.m_val, z));
106 #else
107  return reinterpret_cast<Packet4f>(vec_mergeh(z, a.m_val));
108 #endif
109 }

References a, and pset1< Packet8us >().

◆ pcast< Packet8bf, Packet8f >()

288  {
289  return Bf16ToF32(a);
290 }

References a, and Bf16ToF32().

◆ pcast< Packet8bf, Packet8us >()

61  {
62  Packet4f float_even = Bf16ToF32Even(a);
63  Packet4f float_odd = Bf16ToF32Odd(a);
64  Packet4ui int_even = pcast<Packet4f, Packet4ui>(float_even);
65  Packet4ui int_odd = pcast<Packet4f, Packet4ui>(float_odd);
66  const EIGEN_DECLARE_CONST_FAST_Packet4ui(low_mask, 0x0000FFFF);
67  Packet4ui low_even = pand<Packet4ui>(int_even, p4ui_low_mask);
68  Packet4ui low_odd = pand<Packet4ui>(int_odd, p4ui_low_mask);
69 
70  // Check values that are bigger than USHRT_MAX (0xFFFF)
71  Packet4bi overflow_selector;
72  if (vec_any_gt(int_even, p4ui_low_mask)) {
73  overflow_selector = vec_cmpgt(int_even, p4ui_low_mask);
74  low_even = vec_sel(low_even, p4ui_low_mask, overflow_selector);
75  }
76  if (vec_any_gt(int_odd, p4ui_low_mask)) {
77  overflow_selector = vec_cmpgt(int_odd, p4ui_low_mask);
78  low_odd = vec_sel(low_even, p4ui_low_mask, overflow_selector);
79  }
80 
81  return pmerge(low_even, low_odd);
82 }
EIGEN_STRONG_INLINE Packet4f Bf16ToF32Even(const Packet8bf &bf)
Definition: AltiVec/PacketMath.h:2023
EIGEN_STRONG_INLINE Packet4f Bf16ToF32Odd(const Packet8bf &bf)
Definition: AltiVec/PacketMath.h:2027
EIGEN_STRONG_INLINE Packet4ui pcast< Packet4f, Packet4ui >(const Packet4f &a)
Definition: AltiVec/TypeCasting.h:46

References a, Bf16ToF32Even(), Bf16ToF32Odd(), EIGEN_DECLARE_CONST_FAST_Packet4ui(), pand< Packet4ui >(), pcast< Packet4f, Packet4ui >(), and pmerge().

◆ pcast< Packet8c, Packet2f >()

367  {
368  // Discard all but first 2 bytes.
369  return vcvt_f32_s32(vget_low_s32(vmovl_s16(vget_low_s16(vmovl_s8(a)))));
370 }

References a.

◆ pcast< Packet8c, Packet2i >()

409  {
410  // Discard all but first 2 bytes.
411  return vget_low_s32(vmovl_s16(vget_low_s16(vmovl_s8(a))));
412 }

References a.

Referenced by pcast< Packet8c, Packet2ui >().

◆ pcast< Packet8c, Packet2ui >()

423  {
424  return preinterpret<Packet2ui>(pcast<Packet8c, Packet2i>(a));
425 }
EIGEN_STRONG_INLINE Packet2i pcast< Packet8c, Packet2i >(const Packet8c &a)
Definition: NEON/TypeCasting.h:409

References a, and pcast< Packet8c, Packet2i >().

◆ pcast< Packet8c, Packet4i >()

401  {
402  return vmovl_s16(vget_low_s16(vmovl_s8(a)));
403 }

References a.

Referenced by pcast< Packet4c, Packet4i >().

◆ pcast< Packet8c, Packet4s >()

445  {
446  // Discard second half of input.
447  return vget_low_s16(vmovl_s8(a));
448 }

References a.

Referenced by pcast< Packet4c, Packet4s >(), and pcast< Packet8c, Packet4us >().

◆ pcast< Packet8c, Packet4us >()

467  {
468  return preinterpret<Packet4us>(pcast<Packet8c, Packet4s>(a));
469 }

References a, and pcast< Packet8c, Packet4s >().

◆ pcast< Packet8c, Packet8s >()

441  {
442  return vmovl_s8(a);
443 }

References a.

Referenced by pcast< Packet8c, Packet8us >().

◆ pcast< Packet8c, Packet8us >()

463  {
464  return preinterpret<Packet8us>(pcast<Packet8c, Packet8s>(a));
465 }
EIGEN_STRONG_INLINE Packet8s pcast< Packet8c, Packet8s >(const Packet8c &a)
Definition: NEON/TypeCasting.h:441

References a, and pcast< Packet8c, Packet8s >().

◆ pcast< Packet8d, Packet16f >()

143  {
144  return cat256(_mm512_cvtpd_ps(a), _mm512_cvtpd_ps(b));
145 }
EIGEN_STRONG_INLINE Packet16f cat256(Packet8f a, Packet8f b)
Definition: AVX512/PacketMath.h:642

References a, b, and cat256().

◆ pcast< Packet8d, Packet16i >()

148  {
149  return cat256i(_mm512_cvttpd_epi32(a), _mm512_cvttpd_epi32(b));
150 }
EIGEN_STRONG_INLINE Packet16i cat256i(Packet8i a, Packet8i b)
Definition: AVX512/PacketMath.h:646

References a, b, and cat256i().

◆ pcast< Packet8d, Packet8f >()

157  {
158  return _mm512_cvtpd_ps(a);
159 }

References a.

◆ pcast< Packet8d, Packet8i >()

153  {
154  return _mm512_cvtpd_epi32(a);
155 }

References a.

◆ pcast< Packet8d, Packet8l >()

82  {
83 #if defined(EIGEN_VECTORIZE_AVX512DQ) && defined(EIGEN_VECTORIZE_AVX512VL)
84  return _mm512_cvttpd_epi64(a);
85 #else
86  constexpr int kTotalBits = sizeof(double) * CHAR_BIT, kMantissaBits = std::numeric_limits<double>::digits - 1,
87  kExponentBits = kTotalBits - kMantissaBits - 1, kBias = (1 << (kExponentBits - 1)) - 1;
88 
89  const __m512i cst_one = _mm512_set1_epi64(1);
90  const __m512i cst_total_bits = _mm512_set1_epi64(kTotalBits);
91  const __m512i cst_bias = _mm512_set1_epi64(kBias);
92 
93  __m512i a_bits = _mm512_castpd_si512(a);
94  // shift left by 1 to clear the sign bit, and shift right by kMantissaBits + 1 to recover biased exponent
95  __m512i biased_e = _mm512_srli_epi64(_mm512_slli_epi64(a_bits, 1), kMantissaBits + 1);
96  __m512i e = _mm512_sub_epi64(biased_e, cst_bias);
97 
98  // shift to the left by kExponentBits + 1 to clear the sign and exponent bits
99  __m512i shifted_mantissa = _mm512_slli_epi64(a_bits, kExponentBits + 1);
100  // shift to the right by kTotalBits - e to convert the significand to an integer
101  __m512i result_significand = _mm512_srlv_epi64(shifted_mantissa, _mm512_sub_epi64(cst_total_bits, e));
102 
103  // add the implied bit
104  __m512i result_exponent = _mm512_sllv_epi64(cst_one, e);
105  // e <= 0 is interpreted as a large positive shift (2's complement), which also conveniently results in zero
106  __m512i result = _mm512_add_epi64(result_significand, result_exponent);
107  // handle negative arguments
108  __mmask8 sign_mask = _mm512_cmplt_epi64_mask(a_bits, _mm512_setzero_si512());
109  result = _mm512_mask_sub_epi64(result, sign_mask, _mm512_setzero_si512(), result);
110  return result;
111 #endif
112 }

References a, and e().

◆ pcast< Packet8f, Packet16b >()

60  {
61  __m256 nonzero_a = _mm256_cmp_ps(a, pzero(a), _CMP_NEQ_UQ);
62  __m256 nonzero_b = _mm256_cmp_ps(b, pzero(b), _CMP_NEQ_UQ);
63  constexpr char kFF = '\255';
64 #ifndef EIGEN_VECTORIZE_AVX2
65  __m128i shuffle_mask128_a_lo = _mm_set_epi8(kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, 12, 8, 4, 0);
66  __m128i shuffle_mask128_a_hi = _mm_set_epi8(kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, 12, 8, 4, 0, kFF, kFF, kFF, kFF);
67  __m128i shuffle_mask128_b_lo = _mm_set_epi8(kFF, kFF, kFF, kFF, 12, 8, 4, 0, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF);
68  __m128i shuffle_mask128_b_hi = _mm_set_epi8(12, 8, 4, 0, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF);
69  __m128i a_hi = _mm_shuffle_epi8(_mm256_extractf128_si256(_mm256_castps_si256(nonzero_a), 1), shuffle_mask128_a_hi);
70  __m128i a_lo = _mm_shuffle_epi8(_mm256_extractf128_si256(_mm256_castps_si256(nonzero_a), 0), shuffle_mask128_a_lo);
71  __m128i b_hi = _mm_shuffle_epi8(_mm256_extractf128_si256(_mm256_castps_si256(nonzero_b), 1), shuffle_mask128_b_hi);
72  __m128i b_lo = _mm_shuffle_epi8(_mm256_extractf128_si256(_mm256_castps_si256(nonzero_b), 0), shuffle_mask128_b_lo);
73  __m128i merged = _mm_or_si128(_mm_or_si128(b_lo, b_hi), _mm_or_si128(a_lo, a_hi));
74  return _mm_and_si128(merged, _mm_set1_epi8(1));
75 #else
76  __m256i a_shuffle_mask = _mm256_set_epi8(kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, 12, 8, 4, 0, kFF, kFF, kFF, kFF, kFF,
77  kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, 12, 8, 4, 0);
78  __m256i b_shuffle_mask = _mm256_set_epi8(12, 8, 4, 0, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF,
79  kFF, kFF, kFF, 12, 8, 4, 0, kFF, kFF, kFF, kFF, kFF, kFF, kFF, kFF);
80  __m256i a_shuff = _mm256_shuffle_epi8(_mm256_castps_si256(nonzero_a), a_shuffle_mask);
81  __m256i b_shuff = _mm256_shuffle_epi8(_mm256_castps_si256(nonzero_b), b_shuffle_mask);
82  __m256i a_or_b = _mm256_or_si256(a_shuff, b_shuff);
83  __m256i merged = _mm256_or_si256(a_or_b, _mm256_castsi128_si256(_mm256_extractf128_si256(a_or_b, 1)));
84  return _mm256_castsi256_si128(_mm256_and_si256(merged, _mm256_set1_epi8(1)));
85 #endif
86 }

References a, b, and pzero().

◆ pcast< Packet8f, Packet4d >()

146  {
147  return _mm256_cvtps_pd(_mm256_castps256_ps128(a));
148 }

References a.

◆ pcast< Packet8f, Packet8bf >()

298  {
299  return F32ToBf16(a);
300 }

References a, and F32ToBf16().

◆ pcast< Packet8f, Packet8d >()

77  {
78  return _mm512_cvtps_pd(a);
79 }

References a.

◆ pcast< Packet8f, Packet8h >()

293  {
294  return float2half(a);
295 }

References a, and float2half().

◆ pcast< Packet8f, Packet8i >()

106  {
107  return _mm256_cvttps_epi32(a);
108 }

References a.

◆ pcast< Packet8h, Packet8f >()

283  {
284  return half2float(a);
285 }

References a, and half2float().

◆ pcast< Packet8i, Packet4d >()

136  {
137  return _mm256_cvtepi32_pd(_mm256_castsi256_si128(a));
138 }

References a.

◆ pcast< Packet8i, Packet8d >()

125  {
126  return _mm512_cvtepi32_pd(a);
127 }

References a.

◆ pcast< Packet8i, Packet8f >()

121  {
122  return _mm256_cvtepi32_ps(a);
123 }

References a.

◆ pcast< Packet8l, Packet8d >()

130  {
131 #if defined(EIGEN_VECTORIZE_AVX512DQ) && defined(EIGEN_VECTORIZE_AVX512VL)
132  return _mm512_cvtepi64_pd(a);
133 #else
134  EIGEN_ALIGN64 int64_t aux[8];
135  pstore(aux, a);
136  return _mm512_set_pd(static_cast<double>(aux[7]), static_cast<double>(aux[6]), static_cast<double>(aux[5]),
137  static_cast<double>(aux[4]), static_cast<double>(aux[3]), static_cast<double>(aux[2]),
138  static_cast<double>(aux[1]), static_cast<double>(aux[0]));
139 #endif
140 }
#define EIGEN_ALIGN64
Definition: ConfigureVectorization.h:144

References a, EIGEN_ALIGN64, and pstore().

◆ pcast< Packet8s, Packet16c >()

232  {
233  return __lsx_vssrlni_b_h((__m128i)a, (__m128i)b, 0);
234 }

References a, and b.

◆ pcast< Packet8s, Packet16uc >()

236  {
237  return (Packet16uc)__lsx_vssrlni_b_h((__m128i)a, (__m128i)b, 0);
238 }

References a, and b.

◆ pcast< Packet8s, Packet2d >()

496  {
497  Packet4i tmp = __lsx_vsllwil_w_h((__m128i)a, 0);
498  return __lsx_vffint_d_l(__lsx_vsllwil_d_w((__m128i)tmp, 0));
499 }

References a, and tmp.

◆ pcast< Packet8s, Packet2l >()

214  {
215  Packet4i tmp1 = __lsx_vsllwil_w_h((__m128i)a, 0);
216  return __lsx_vsllwil_d_w((__m128i)tmp1, 0);
217 }

References a.

◆ pcast< Packet8s, Packet2ul >()

219  {
220  Packet4i tmp1 = __lsx_vsllwil_w_h((__m128i)a, 0);
221  return (Packet2ul)__lsx_vsllwil_d_w((__m128i)tmp1, 0);
222 }

References a.

◆ pcast< Packet8s, Packet4f >()

209  {
210  Packet4i tmp1 = __lsx_vsllwil_w_h((__m128i)a, 0);
211  return __lsx_vffint_s_w(tmp1);
212 }

References a.

◆ pcast< Packet8s, Packet4i >()

224  {
225  return __lsx_vsllwil_w_h((__m128i)a, 0);
226 }

References a.

◆ pcast< Packet8s, Packet4ui >()

228  {
229  return (Packet4ui)__lsx_vsllwil_w_h((__m128i)a, 0);
230 }

References a.

◆ pcast< Packet8s, Packet8c >()

677  {
678  return vmovn_s16(a);
679 }

References a.

Referenced by pcast< Packet8s, Packet8uc >().

◆ pcast< Packet8s, Packet8uc >()

699  {
700  return preinterpret<Packet8uc>(pcast<Packet8s, Packet8c>(a));
701 }
EIGEN_STRONG_INLINE Packet8c pcast< Packet8s, Packet8c >(const Packet8s &a)
Definition: NEON/TypeCasting.h:677

References a, and pcast< Packet8s, Packet8c >().

◆ pcast< Packet8uc, Packet2f >()

492  {
493  // Discard all but first 2 bytes.
494  return vcvt_f32_u32(vget_low_u32(vmovl_u16(vget_low_u16(vmovl_u8(a)))));
495 }

References a.

◆ pcast< Packet8uc, Packet2i >()

548  {
549  return preinterpret<Packet2i>(pcast<Packet8uc, Packet2ui>(a));
550 }
EIGEN_STRONG_INLINE Packet2ui pcast< Packet8uc, Packet2ui >(const Packet8uc &a)
Definition: NEON/TypeCasting.h:530

References a, and pcast< Packet8uc, Packet2ui >().

◆ pcast< Packet8uc, Packet2ui >()

530  {
531  // Discard all but first 2 bytes.
532  return vget_low_u32(vmovl_u16(vget_low_u16(vmovl_u8(a))));
533 }

References a.

Referenced by pcast< Packet8uc, Packet2i >().

◆ pcast< Packet8uc, Packet4ui >()

526  {
527  return vmovl_u16(vget_low_u16(vmovl_u8(a)));
528 }

References a.

Referenced by pcast< Packet4uc, Packet4ui >().

◆ pcast< Packet8uc, Packet8s >()

583  {
584  return preinterpret<Packet8s>(pcast<Packet8uc, Packet8us>(a));
585 }
EIGEN_STRONG_INLINE Packet8us pcast< Packet8uc, Packet8us >(const Packet8uc &a)
Definition: NEON/TypeCasting.h:566

References a, and pcast< Packet8uc, Packet8us >().

◆ pcast< Packet8uc, Packet8us >()

566  {
567  return vmovl_u8(a);
568 }

References a.

Referenced by pcast< Packet8uc, Packet8s >().

◆ pcast< Packet8us, Packet16c >()

268  {
269  return (Packet16c)__lsx_vssrlni_bu_h((__m128i)a, (__m128i)b, 0);
270 }

References a, and b.

◆ pcast< Packet8us, Packet16uc >()

264  {
265  return __lsx_vssrlni_bu_h((__m128i)a, (__m128i)b, 0);
266 }

References a, and b.

◆ pcast< Packet8us, Packet2d >()

501  {
502  Packet4ui tmp = __lsx_vsllwil_wu_hu((__m128i)a, 0);
503  return __lsx_vffint_d_lu(__lsx_vsllwil_du_wu((__m128i)tmp, 0));
504 }

References a, and tmp.

◆ pcast< Packet8us, Packet2l >()

251  {
252  Packet4ui tmp1 = __lsx_vsllwil_wu_hu((__m128i)a, 0);
253  return (Packet2l)__lsx_vsllwil_du_wu((__m128i)tmp1, 0);
254 }

References a.

◆ pcast< Packet8us, Packet2ul >()

246  {
247  Packet4ui tmp1 = __lsx_vsllwil_wu_hu((__m128i)a, 0);
248  return __lsx_vsllwil_du_wu((__m128i)tmp1, 0);
249 }

References a.

◆ pcast< Packet8us, Packet4f >()

241  {
242  Packet4ui tmp1 = __lsx_vsllwil_wu_hu((__m128i)a, 0);
243  return __lsx_vffint_s_wu(tmp1);
244 }

References a.

◆ pcast< Packet8us, Packet4i >()

260  {
261  return (Packet4i)__lsx_vsllwil_wu_hu((__m128i)a, 0);
262 }

References a.

◆ pcast< Packet8us, Packet4ui >()

256  {
257  return __lsx_vsllwil_wu_hu((__m128i)a, 0);
258 }

References a.

◆ pcast< Packet8us, Packet8bf >()

85  {
86  // short -> int -> float -> bfloat16
87  const EIGEN_DECLARE_CONST_FAST_Packet4ui(low_mask, 0x0000FFFF);
88  Packet4ui int_cast = reinterpret_cast<Packet4ui>(a);
89  Packet4ui int_even = pand<Packet4ui>(int_cast, p4ui_low_mask);
90  Packet4ui int_odd = plogical_shift_right<16>(int_cast);
91  Packet4f float_even = pcast<Packet4ui, Packet4f>(int_even);
92  Packet4f float_odd = pcast<Packet4ui, Packet4f>(int_odd);
93  return F32ToBf16(float_even, float_odd);
94 }
EIGEN_STRONG_INLINE Packet4f pcast< Packet4ui, Packet4f >(const Packet4ui &a)
Definition: AltiVec/TypeCasting.h:56

References a, EIGEN_DECLARE_CONST_FAST_Packet4ui(), F32ToBf16(), pand< Packet4ui >(), and pcast< Packet4ui, Packet4f >().

◆ pcast< Packet8us, Packet8c >()

819  {
820  return preinterpret<Packet8c>(pcast<Packet8us, Packet8uc>(a));
821 }
EIGEN_STRONG_INLINE Packet8uc pcast< Packet8us, Packet8uc >(const Packet8us &a)
Definition: NEON/TypeCasting.h:797

References a, and pcast< Packet8us, Packet8uc >().

◆ pcast< Packet8us, Packet8uc >()

797  {
798  return vmovn_u16(a);
799 }

References a.

Referenced by pcast< Packet8us, Packet8c >().

◆ pcast< PacketXf, PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pcast< PacketXf, PacketXi > ( const PacketXf &  a)
35  {
36  return svcvt_s32_f32_x(svptrue_b32(), a);
37 }

References a.

◆ pcast< PacketXi, PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pcast< PacketXi, PacketXf > ( const PacketXi &  a)
30  {
31  return svcvt_f32_s32_x(svptrue_b32(), a);
32 }

References a.

◆ pcbrt()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pcbrt ( const Packet a)
Returns
the cube-root of a (coeff-wise)
1137  {
1138  return numext::cbrt(a);
1139 }
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T cbrt(const T &x)
Definition: MathFunctions.h:1320

References a, and Eigen::numext::cbrt().

◆ pceil() [1/3]

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::pceil ( const Packet a)
Returns
the ceil of a (coeff-wise)
1172  {
1173  return nearest_integer_packetop_impl<Packet>::run_ceil(a);
1174 }

References a, and Eigen::internal::nearest_integer_packetop_impl< Packet, IsScalar, IsInteger >::run_ceil().

◆ pceil() [2/3]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pceil ( const Packet2d a)
2550  {
2551  return __lsx_vfrintrp_d(a);
2552 }

References a.

◆ pceil() [3/3]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pceil ( const Packet4f a)
2546  {
2547  return __lsx_vfrintrp_s(a);
2548 }

References a.

Referenced by packetmath_real(), and Eigen::internal::scalar_ceil_op< Scalar >::packetOp().

◆ pceil< Packet16bf >()

2829  {
2831 }
EIGEN_STRONG_INLINE Packet16f pceil< Packet16f >(const Packet16f &a)
Definition: AVX512/PacketMath.h:760

References a, Bf16ToF32(), F32ToBf16(), and pceil< Packet16f >().

◆ pceil< Packet16f >()

760  {
761  return _mm512_roundscale_ps(a, _MM_FROUND_TO_POS_INF);
762 }

References a.

Referenced by pceil< Packet16bf >(), and pceil< Packet16h >().

◆ pceil< Packet16h >()

◆ pceil< Packet2d >()

1186  {
1187  Packet2d v = a;
1188  int32_t old_mode, new_mode;
1189  asm volatile(
1190  "cfcmsa %[old_mode], $1\n"
1191  "ori %[new_mode], %[old_mode], 3\n"
1192  "xori %[new_mode], %[new_mode], 1\n" // 2 = round towards +INFINITY.
1193  "ctcmsa $1, %[new_mode]\n"
1194  "frint.d %w[v], %w[v]\n"
1195  "ctcmsa $1, %[old_mode]\n"
1196  : // outputs
1197  [old_mode] "=r"(old_mode), [new_mode] "=r"(new_mode),
1198  [v] "+f"(v)
1199  : // inputs
1200  : // clobbers
1201  );
1202  return v;
1203 }
std::int32_t int32_t
Definition: Meta.h:41

References a, and v.

◆ pceil< Packet32h >()

382  {
383  return _mm512_roundscale_ph(a, _MM_FROUND_TO_POS_INF);
384 }

References a.

◆ pceil< Packet4bf >()

4933  {
4935 }
EIGEN_STRONG_INLINE Packet4f pceil< Packet4f >(const Packet4f &a)
Definition: AltiVec/PacketMath.h:1493

References a, Bf16ToF32(), F32ToBf16(), and pceil< Packet4f >().

◆ pceil< Packet4d >()

1246  {
1247  return _mm256_ceil_pd(a);
1248 }

References a.

◆ pceil< Packet4f >()

1493  {
1494  return vec_ceil(a);
1495 }

References a.

Referenced by pceil< Packet4bf >(), and pceil< Packet8bf >().

◆ pceil< Packet8bf >()

2360  {
2362 }
#define BF16_TO_F32_UNARY_OP_WRAPPER(OP, A)
Definition: AltiVec/PacketMath.h:2257

References a, BF16_TO_F32_UNARY_OP_WRAPPER, and pceil< Packet4f >().

◆ pceil< Packet8d >()

764  {
765  return _mm512_roundscale_pd(a, _MM_FROUND_TO_POS_INF);
766 }

References a.

◆ pceil< Packet8f >()

1242  {
1243  return _mm256_ceil_ps(a);
1244 }

References a.

Referenced by pceil< Packet8h >().

◆ pceil< Packet8h >()

2343  {
2345 }
EIGEN_STRONG_INLINE Packet8f pceil< Packet8f >(const Packet8f &a)
Definition: AVX/PacketMath.h:1242

References a, float2half(), half2float(), and pceil< Packet8f >().

◆ PCG_XSH_RS_generator()

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE unsigned Eigen::internal::PCG_XSH_RS_generator ( uint64_t *  state,
uint64_t  stream 
)
32  {
33  // TODO: Unify with the implementation in the non blocking thread pool.
34  uint64_t current = *state;
35  // Update the internal state
36  *state = current * 6364136223846793005ULL + (stream << 1 | 1);
37  // Generate the random output (using the PCG-XSH-RS scheme)
38  return static_cast<unsigned>((current ^ (current >> 22)) >> (22 + (current >> 61)));
39 }

Referenced by RandomToTypeUniform(), RandomToTypeUniform< double >(), RandomToTypeUniform< Eigen::bfloat16 >(), RandomToTypeUniform< Eigen::half >(), and RandomToTypeUniform< float >().

◆ PCG_XSH_RS_state()

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE uint64_t Eigen::internal::PCG_XSH_RS_state ( uint64_t  seed)
41  {
42  seed = seed ? seed : get_random_seed();
43  return seed * 6364136223846793005ULL + 0xda3e39cb94b95bdbULL;
44 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE uint64_t get_random_seed()
Definition: TensorRandom.h:20

References get_random_seed().

Referenced by Eigen::internal::NormalRandomGenerator< T >::NormalRandomGenerator(), and Eigen::internal::UniformRandomGenerator< T >::UniformRandomGenerator().

◆ pcmp_eq() [1/31]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pcmp_eq ( const Packet a,
const Packet b 
)
inline
Returns
a == b as a bit mask
440  {
441  return a == b ? ptrue(a) : pzero(a);
442 }
EIGEN_DEVICE_FUNC Packet ptrue(const Packet &a)
Definition: GenericPacketMath.h:399
EIGEN_DEVICE_FUNC Packet pzero(const Packet &a)
Definition: GenericPacketMath.h:422

References a, b, ptrue(), and pzero().

◆ pcmp_eq() [2/31]

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::pcmp_eq ( const Packet16b a,
const Packet16b b 
)
956  {
957  // Mask out invalid bool bits to avoid UB.
958  const Packet16b kBoolMask = pset1<Packet16b>(true);
959  return _mm_and_si128(_mm_cmpeq_epi8(a, b), kBoolMask);
960 }
eigen_packet_wrapper< __m128i, 1 > Packet16b
Definition: SSE/PacketMath.h:53
EIGEN_STRONG_INLINE Packet16b pset1< Packet16b >(const bool &from)
Definition: SSE/PacketMath.h:406

References a, b, and pset1< Packet16b >().

◆ pcmp_eq() [3/31]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pcmp_eq ( const Packet16bf a,
const Packet16bf b 
)
2844  {
2845  return Pack32To16(pcmp_eq(Bf16ToF32(a), Bf16ToF32(b)));
2846 }
EIGEN_STRONG_INLINE Packet16bf pcmp_eq(const Packet16bf &a, const Packet16bf &b)
Definition: AVX512/PacketMath.h:2844
EIGEN_STRONG_INLINE __m256i Pack32To16(Packet16f rf)
Definition: AVX512/PacketMath.h:653

References a, b, Bf16ToF32(), Pack32To16(), and pcmp_eq().

◆ pcmp_eq() [4/31]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pcmp_eq ( const Packet16c a,
const Packet16c b 
)
1387  {
1388  return reinterpret_cast<Packet16c>(vec_cmpeq(a, b));
1389 }

References a, and b.

◆ pcmp_eq() [5/31]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pcmp_eq ( const Packet16f a,
const Packet16f b 
)
675  {
676  __mmask16 mask = _mm512_cmp_ps_mask(a, b, _CMP_EQ_OQ);
677  return _mm512_castsi512_ps(_mm512_mask_set1_epi32(_mm512_setzero_epi32(), mask, int32_t(-1)));
678 }

References a, and b.

◆ pcmp_eq() [6/31]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pcmp_eq ( const Packet16h a,
const Packet16h b 
)
2340  {
2341  Packet16f af = half2float(a);
2342  Packet16f bf = half2float(b);
2343  return Pack32To16(pcmp_eq(af, bf));
2344 }

References a, b, half2float(), Pack32To16(), and pcmp_eq().

◆ pcmp_eq() [7/31]

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pcmp_eq ( const Packet16i a,
const Packet16i b 
)
698  {
699  __mmask16 mask = _mm512_cmp_epi32_mask(a, b, _MM_CMPINT_EQ);
700  return _mm512_mask_set1_epi32(_mm512_setzero_epi32(), mask, int32_t(-1));
701 }

References a, and b.

◆ pcmp_eq() [8/31]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pcmp_eq ( const Packet16uc a,
const Packet16uc b 
)
1401  {
1402  return reinterpret_cast<Packet16uc>(vec_cmpeq(a, b));
1403 }

References a, and b.

◆ pcmp_eq() [9/31]

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pcmp_eq ( const Packet1cd a,
const Packet1cd b 
)
449  {
450  Packet2d eq = (Packet2d)__lsx_vfcmp_ceq_d(a.v, b.v);
451  return Packet1cd(pand<Packet2d>(eq, preverse(eq)));
452 }
EIGEN_STRONG_INLINE Packet2d pand< Packet2d >(const Packet2d &a, const Packet2d &b)
Definition: LSX/PacketMath.h:880
EIGEN_STRONG_INLINE Packet1cd preverse(const Packet1cd &a)
Definition: LSX/Complex.h:410

References a, b, pand< Packet2d >(), and preverse().

◆ pcmp_eq() [10/31]

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pcmp_eq ( const Packet1cf a,
const Packet1cf b 
)
240  {
241  // Compare real and imaginary parts of a and b to get the mask vector:
242  // [re(a[0])==re(b[0]), im(a[0])==im(b[0])]
243  Packet2f eq = pcmp_eq<Packet2f>(a.v, b.v);
244  // Swap real/imag elements in the mask in to get:
245  // [im(a[0])==im(b[0]), re(a[0])==re(b[0])]
246  Packet2f eq_swapped = vrev64_f32(eq);
247  // Return re(a)==re(b) && im(a)==im(b) by computing bitwise AND of eq and eq_swapped
248  return Packet1cf(pand<Packet2f>(eq, eq_swapped));
249 }
EIGEN_STRONG_INLINE Packet2f pand< Packet2f >(const Packet2f &a, const Packet2f &b)
Definition: NEON/PacketMath.h:1899
EIGEN_STRONG_INLINE Packet2f pcmp_eq< Packet2f >(const Packet2f &a, const Packet2f &b)
Definition: NEON/PacketMath.h:1804

References a, b, pand< Packet2f >(), and pcmp_eq< Packet2f >().

◆ pcmp_eq() [11/31]

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::pcmp_eq ( const Packet2cd a,
const Packet2cd b 
)
302  {
303  __m256d eq = _mm256_cmp_pd(a.v, b.v, _CMP_EQ_OQ);
304  return Packet2cd(pand(eq, _mm256_permute_pd(eq, 0x5)));
305 }

References a, b, and pand().

◆ pcmp_eq() [12/31]

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pcmp_eq ( const Packet2cf a,
const Packet2cf b 
)
353  {
354  Packet4f eq = reinterpret_cast<Packet4f>(vec_cmpeq(a.v, b.v));
355  return Packet2cf(vec_and(eq, vec_perm(eq, eq, p16uc_COMPLEX32_REV)));
356 }
static Packet16uc p16uc_COMPLEX32_REV
Definition: AltiVec/PacketMath.h:148

References a, b, and p16uc_COMPLEX32_REV.

Referenced by Eigen::internal::all_visitor< Scalar >::all_predux(), Eigen::internal::any_visitor< Scalar >::any_predux(), Eigen::internal::count_visitor< Scalar >::count_redux(), generic_expm1(), generic_log1p(), generic_ndtri(), generic_pow(), Eigen::internal::unary_pow::handle_negative_exponent(), Eigen::internal::unary_pow::handle_nonint_nonint_errors(), Eigen::internal::minmax_coeff_visitor< Derived, is_min, NaNPropagation, isInt >::initpacket(), Eigen::internal::minmax_coeff_visitor< Derived, is_min, NaNPropagation, false >::initpacket(), Eigen::internal::minmax_coeff_visitor< Derived, is_min, PropagateNumbers, false >::packet(), Eigen::internal::minmax_coeff_visitor< Derived, is_min, NaNPropagation, false >::packet(), packetmath_boolean_mask_ops(), Eigen::internal::scalar_boolean_not_op< Scalar >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_EQ, UseTypedComparators >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_NEQ, UseTypedComparators >::packetOp(), Eigen::internal::scalar_boolean_and_op< Scalar >::packetOp(), Eigen::internal::scalar_boolean_or_op< Scalar >::packetOp(), Eigen::internal::scalar_boolean_xor_op< Scalar >::packetOp(), Eigen::internal::scalar_boolean_select_op< ThenScalar, ElseScalar, ConditionScalar >::packetOp(), Eigen::internal::scalar_logistic_op_impl< T, EnableIf >::packetOp(), patanh_double(), patanh_float(), pcmp_eq(), pcmp_le(), pcmp_lt(), pexp_complex(), pfrexp_generic(), phypot_complex(), pisinf(), pisnan(), plog_complex(), plog_impl_double(), plog_impl_float(), pminmax_propagate_nan(), pminmax_propagate_numbers(), prsqrt_float_common(), psincos_double(), psincos_float(), psqrt_complex(), psqrt_float_common(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsSigned &&NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t< NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&unpacket_traits< Packet >::vectorizable > >::run(), Eigen::internal::psignbit_impl< Packet, false, false >::run(), Eigen::internal::generic_reciprocal_newton_step< Packet, Steps >::run(), Eigen::internal::generic_sqrt_newton_step< Packet, Steps >::run(), Eigen::internal::pminmax_impl< PropagateNaN >::run(), Eigen::internal::pminmax_impl< PropagateNumbers >::run(), and Eigen::internal::maybe_raise_div_by_zero< Packet, true >::run().

◆ pcmp_eq() [13/31]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pcmp_eq ( const Packet2d a,
const Packet2d b 
)
913  {
914  return _mm_cmpeq_pd(a, b);
915 }

References a, and b.

◆ pcmp_eq() [14/31]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pcmp_eq ( const Packet2l a,
const Packet2l b 
)
943  {
944 #ifdef EIGEN_VECTORIZE_SSE4_1
945  return _mm_cmpeq_epi64(a, b);
946 #else
948  return Packet2l(pand<Packet4i>(tmp, _mm_shuffle_epi32(tmp, (shuffle_mask<1, 0, 3, 2>::mask))));
949 #endif
950 }
EIGEN_STRONG_INLINE Packet4i pcmp_eq< Packet4i >(const Packet4i &a, const Packet4i &b)
Definition: LSX/PacketMath.h:1147
EIGEN_STRONG_INLINE Packet4i pand< Packet4i >(const Packet4i &a, const Packet4i &b)
Definition: AltiVec/PacketMath.h:1410

References a, b, pand< Packet4i >(), pcmp_eq< Packet4i >(), and tmp.

◆ pcmp_eq() [15/31]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pcmp_eq ( const Packet32h a,
const Packet32h b 
)
261  {
262  __mmask32 mask = _mm512_cmp_ph_mask(a, b, _CMP_EQ_OQ);
263  return _mm512_castsi512_ph(_mm512_mask_set1_epi16(_mm512_set1_epi32(0), mask, static_cast<short>(0xffffu)));
264 }

References a, and b.

◆ pcmp_eq() [16/31]

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::pcmp_eq ( const Packet4cd a,
const Packet4cd b 
)
301  {
302  __m512d eq = pcmp_eq<Packet8d>(a.v, b.v);
303  return Packet4cd(pand(eq, _mm512_permute_pd(eq, 0x55)));
304 }

References a, b, and pand().

◆ pcmp_eq() [17/31]

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::pcmp_eq ( const Packet4cf a,
const Packet4cf b 
)
100  {
101  __m256 eq = _mm256_cmp_ps(a.v, b.v, _CMP_EQ_OQ);
102  return Packet4cf(_mm256_and_ps(eq, _mm256_permute_ps(eq, 0xb1)));
103 }

References a, and b.

◆ pcmp_eq() [18/31]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pcmp_eq ( const Packet4d a,
const Packet4d b 
)
1051  {
1052  return _mm256_cmp_pd(a, b, _CMP_EQ_OQ);
1053 }

References a, and b.

◆ pcmp_eq() [19/31]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pcmp_eq ( const Packet4f a,
const Packet4f b 
)
1325  {
1326  return reinterpret_cast<Packet4f>(vec_cmpeq(a, b));
1327 }

References a, and b.

◆ pcmp_eq() [20/31]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pcmp_eq ( const Packet4i a,
const Packet4i b 
)
1345  {
1346  return reinterpret_cast<Packet4i>(vec_cmpeq(a, b));
1347 }

References a, and b.

◆ pcmp_eq() [21/31]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pcmp_eq ( const Packet4ui a,
const Packet4ui b 
)
962  {
963  return _mm_cmpeq_epi32(a, b);
964 }

References a, and b.

◆ pcmp_eq() [22/31]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pcmp_eq ( const Packet8bf a,
const Packet8bf b 
)
2413  {
2415 }
#define BF16_TO_F32_BINARY_OP_WRAPPER_BOOL(OP, A, B)
Definition: AltiVec/PacketMath.h:2273
EIGEN_STRONG_INLINE Packet4f pcmp_eq< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:1131

References a, b, BF16_TO_F32_BINARY_OP_WRAPPER_BOOL, and pcmp_eq< Packet4f >().

◆ pcmp_eq() [23/31]

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::pcmp_eq ( const Packet8cf a,
const Packet8cf b 
)
114  {
115  __m512 eq = pcmp_eq<Packet16f>(a.v, b.v);
116  return Packet8cf(pand(eq, _mm512_permute_ps(eq, 0xB1)));
117 }

References a, b, and pand().

◆ pcmp_eq() [24/31]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pcmp_eq ( const Packet8d a,
const Packet8d b 
)
730  {
731  __mmask8 mask = _mm512_cmp_pd_mask(a, b, _CMP_EQ_OQ);
732  return _mm512_castsi512_pd(_mm512_mask_set1_epi64(_mm512_setzero_epi32(), mask, 0xffffffffffffffffu));
733 }

References a, and b.

◆ pcmp_eq() [25/31]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pcmp_eq ( const Packet8f a,
const Packet8f b 
)
1030  {
1031  return _mm256_cmp_ps(a, b, _CMP_EQ_OQ);
1032 }

References a, and b.

◆ pcmp_eq() [26/31]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pcmp_eq ( const Packet8h a,
const Packet8h b 
)
2358  {
2359  return Pack16To8(pcmp_eq(half2float(a), half2float(b)));
2360 }
EIGEN_STRONG_INLINE __m128i Pack16To8(Packet8f rf)
Definition: AVX/PacketMath.h:402
EIGEN_STRONG_INLINE Packet8h pcmp_eq(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2358

References a, b, half2float(), Pack16To8(), and pcmp_eq().

◆ pcmp_eq() [27/31]

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pcmp_eq ( const Packet8i a,
const Packet8i b 
)
1078  {
1079 #ifdef EIGEN_VECTORIZE_AVX2
1080  return _mm256_cmpeq_epi32(a, b);
1081 #else
1082  __m128i lo = _mm_cmpeq_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
1083  __m128i hi = _mm_cmpeq_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
1084  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1085 #endif
1086 }

References a, and b.

◆ pcmp_eq() [28/31]

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pcmp_eq ( const Packet8l a,
const Packet8l b 
)
714  {
715  __mmask8 mask = _mm512_cmp_epi64_mask(a, b, _MM_CMPINT_EQ);
716  return _mm512_mask_set1_epi64(_mm512_setzero_si512(), mask, int64_t(-1));
717 }

References a, and b.

◆ pcmp_eq() [29/31]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcmp_eq ( const Packet8s a,
const Packet8s b 
)
1359  {
1360  return reinterpret_cast<Packet8s>(vec_cmpeq(a, b));
1361 }

References a, and b.

◆ pcmp_eq() [30/31]

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pcmp_eq ( const Packet8ui a,
const Packet8ui b 
)
1088  {
1089 #ifdef EIGEN_VECTORIZE_AVX2
1090  return _mm256_cmpeq_epi32(a, b);
1091 #else
1092  __m128i lo = _mm_cmpeq_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
1093  __m128i hi = _mm_cmpeq_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
1094  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1095 #endif
1096 }

References a, and b.

◆ pcmp_eq() [31/31]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pcmp_eq ( const Packet8us a,
const Packet8us b 
)
1373  {
1374  return reinterpret_cast<Packet8us>(vec_cmpeq(a, b));
1375 }

References a, and b.

◆ pcmp_eq< Packet16c >()

1139  {
1140  return __lsx_vseq_b(a, b);
1141 }

References a, and b.

◆ pcmp_eq< Packet16uc >()

1155  {
1156  return __lsx_vseq_b(a, b);
1157 }

References a, and b.

◆ pcmp_eq< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pcmp_eq< Packet2d > ( const Packet2d a,
const Packet2d b 
)
1135  {
1136  return (Packet2d)__lsx_vfcmp_seq_d(a, b);
1137 }

References a, and b.

◆ pcmp_eq< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pcmp_eq< Packet2f > ( const Packet2f a,
const Packet2f b 
)
1804  {
1805  return vreinterpret_f32_u32(vceq_f32(a, b));
1806 }

References a, and b.

Referenced by pcmp_eq().

◆ pcmp_eq< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pcmp_eq< Packet2i > ( const Packet2i a,
const Packet2i b 
)
1854  {
1855  return vreinterpret_s32_u32(vceq_s32(a, b));
1856 }

References a, and b.

◆ pcmp_eq< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pcmp_eq< Packet2l > ( const Packet2l a,
const Packet2l b 
)
1151  {
1152  return __lsx_vseq_d(a, b);
1153 }

References a, and b.

◆ pcmp_eq< Packet2ui >()

1862  {
1863  return vceq_u32(a, b);
1864 }

References a, and b.

◆ pcmp_eq< Packet2ul >()

1167  {
1168  return __lsx_vseq_d(a, b);
1169 }

References a, and b.

◆ pcmp_eq< Packet4bf >()

5017  {
5019 }
EIGEN_STRONG_INLINE Packet4bf F32MaskToBf16Mask(const Packet4f &p)
Definition: NEON/PacketMath.h:4822

References a, b, Bf16ToF32(), F32MaskToBf16Mask(), and pcmp_eq< Packet4f >().

◆ pcmp_eq< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pcmp_eq< Packet4c > ( const Packet4c a,
const Packet4c b 
)
1812  {
1813  return vget_lane_s32(
1814  vreinterpret_s32_u8(vceq_s8(vreinterpret_s8_s32(vdup_n_s32(a)), vreinterpret_s8_s32(vdup_n_s32(b)))), 0);
1815 }

References a, and b.

◆ pcmp_eq< Packet4f >()

template<>
Packet4f EIGEN_STRONG_INLINE Eigen::internal::pcmp_eq< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1131  {
1132  return (Packet4f)__lsx_vfcmp_seq_s(a, b);
1133 }

References a, and b.

Referenced by pcmp_eq(), and pcmp_eq< Packet4bf >().

◆ pcmp_eq< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pcmp_eq< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1147  {
1148  return __lsx_vseq_w(a, b);
1149 }

References a, and b.

Referenced by pcmp_eq(), and pcmp_lt().

◆ pcmp_eq< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pcmp_eq< Packet4s > ( const Packet4s a,
const Packet4s b 
)
1838  {
1839  return vreinterpret_s16_u16(vceq_s16(a, b));
1840 }

References a, and b.

◆ pcmp_eq< Packet4uc >()

1825  {
1826  return vget_lane_u32(
1827  vreinterpret_u32_u8(vceq_u8(vreinterpret_u8_u32(vdup_n_u32(a)), vreinterpret_u8_u32(vdup_n_u32(b)))), 0);
1828 }

References a, and b.

◆ pcmp_eq< Packet4ui >()

1163  {
1164  return __lsx_vseq_w(a, b);
1165 }

References a, and b.

◆ pcmp_eq< Packet4us >()

1846  {
1847  return vceq_u16(a, b);
1848 }

References a, and b.

◆ pcmp_eq< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcmp_eq< Packet8c > ( const Packet8c a,
const Packet8c b 
)
1817  {
1818  return vreinterpret_s8_u8(vceq_s8(a, b));
1819 }

References a, and b.

◆ pcmp_eq< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcmp_eq< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1143  {
1144  return __lsx_vseq_h(a, b);
1145 }

References a, and b.

◆ pcmp_eq< Packet8uc >()

1830  {
1831  return vceq_u8(a, b);
1832 }

References a, and b.

◆ pcmp_eq< Packet8us >()

1159  {
1160  return __lsx_vseq_h(a, b);
1161 }

References a, and b.

◆ pcmp_eq< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pcmp_eq< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
478  {
479  return svreinterpret_f32_u32(svdup_n_u32_z(svcmpeq_f32(svptrue_b32(), a, b), 0xffffffffu));
480 }

References a, and b.

◆ pcmp_eq< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pcmp_eq< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
148  {
149  return svdup_n_s32_z(svcmpeq_s32(svptrue_b32(), a, b), 0xffffffffu);
150 }

References a, and b.

◆ pcmp_le() [1/19]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pcmp_le ( const Packet a,
const Packet b 
)
inline
Returns
a <= b as a bit mask
428  {
429  return a <= b ? ptrue(a) : pzero(a);
430 }

References a, b, ptrue(), and pzero().

◆ pcmp_le() [2/19]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pcmp_le ( const Packet16bf a,
const Packet16bf b 
)
2849  {
2850  return Pack32To16(pcmp_le(Bf16ToF32(a), Bf16ToF32(b)));
2851 }
EIGEN_STRONG_INLINE Packet16bf pcmp_le(const Packet16bf &a, const Packet16bf &b)
Definition: AVX512/PacketMath.h:2849

References a, b, Bf16ToF32(), Pack32To16(), and pcmp_le().

◆ pcmp_le() [3/19]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pcmp_le ( const Packet16f a,
const Packet16f b 
)
680  {
681  __mmask16 mask = _mm512_cmp_ps_mask(a, b, _CMP_LE_OQ);
682  return _mm512_castsi512_ps(_mm512_mask_set1_epi32(_mm512_setzero_epi32(), mask, int32_t(-1)));
683 }

References a, and b.

◆ pcmp_le() [4/19]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pcmp_le ( const Packet16h a,
const Packet16h b 
)
2347  {
2348  return Pack32To16(pcmp_le(half2float(a), half2float(b)));
2349 }

References a, b, half2float(), Pack32To16(), and pcmp_le().

◆ pcmp_le() [5/19]

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pcmp_le ( const Packet16i a,
const Packet16i b 
)
703  {
704  __mmask16 mask = _mm512_cmp_epi32_mask(a, b, _MM_CMPINT_LE);
705  return _mm512_mask_set1_epi32(_mm512_setzero_epi32(), mask, int32_t(-1));
706 }

References a, and b.

◆ pcmp_le() [6/19]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pcmp_le ( const Packet2d a,
const Packet2d b 
)
901  {
902  return _mm_cmple_pd(a, b);
903 }

References a, and b.

◆ pcmp_le() [7/19]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pcmp_le ( const Packet2l a,
const Packet2l b 
)
952  {
953  return por(pcmp_lt(a, b), pcmp_eq(a, b));
954 }
EIGEN_STRONG_INLINE Packet4ui pcmp_lt(const Packet4ui &a, const Packet4ui &b)
Definition: SSE/PacketMath.h:1099
EIGEN_STRONG_INLINE Packet4ui pcmp_eq(const Packet4ui &a, const Packet4ui &b)
Definition: SSE/PacketMath.h:962

References a, b, pcmp_eq(), pcmp_lt(), and por().

◆ pcmp_le() [8/19]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pcmp_le ( const Packet32h a,
const Packet32h b 
)
269  {
270  __mmask32 mask = _mm512_cmp_ph_mask(a, b, _CMP_LE_OQ);
271  return _mm512_castsi512_ph(_mm512_mask_set1_epi16(_mm512_set1_epi32(0), mask, static_cast<short>(0xffffu)));
272 }

References a, and b.

◆ pcmp_le() [9/19]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pcmp_le ( const Packet4d a,
const Packet4d b 
)
1039  {
1040  return _mm256_cmp_pd(a, b, _CMP_LE_OQ);
1041 }

References a, and b.

◆ pcmp_le() [10/19]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pcmp_le ( const Packet4f a,
const Packet4f b 
)
1314  {
1315  return reinterpret_cast<Packet4f>(vec_cmple(a, b));
1316 }

References a, and b.

Referenced by generic_ndtri(), generic_pow(), generic_round(), Eigen::internal::unary_pow::handle_nonint_nonint_errors(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_LE, UseTypedComparators >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_GE, UseTypedComparators >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_UNORD, UseTypedComparators >::packetOp(), patanh_double(), patanh_float(), pcmp_le(), pdiv_float_common(), psincos_double(), psincos_float(), packetmath_boolean_mask_ops_notcomplex_test< Scalar, Packet, std::enable_if_t< internal::packet_traits< Scalar >::HasCmp &&!internal::is_same< Scalar, bool >::value > >::run(), Eigen::internal::generic_i0e< T, float >::run(), Eigen::internal::generic_i0e< T, double >::run(), Eigen::internal::generic_i1e< T, float >::run(), Eigen::internal::generic_i1e< T, double >::run(), Eigen::internal::generic_k0e< T, float >::run(), Eigen::internal::generic_k0e< T, double >::run(), Eigen::internal::generic_k0< T, float >::run(), Eigen::internal::generic_k0< T, double >::run(), Eigen::internal::generic_k1e< T, float >::run(), Eigen::internal::generic_k1e< T, double >::run(), Eigen::internal::generic_k1< T, float >::run(), Eigen::internal::generic_k1< T, double >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_y0< T, float >::run(), Eigen::internal::generic_y0< T, double >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), Eigen::internal::generic_y1< T, float >::run(), and Eigen::internal::generic_y1< T, double >::run().

◆ pcmp_le() [11/19]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pcmp_le ( const Packet4i a,
const Packet4i b 
)
925  {
926  return por(pcmp_lt(a, b), pcmp_eq(a, b));
927 }

References a, b, pcmp_eq(), pcmp_lt(), and por().

◆ pcmp_le() [12/19]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pcmp_le ( const Packet4ui a,
const Packet4ui b 
)
1108  {
1109 #ifdef EIGEN_VECTORIZE_SSE4_1
1110  return pcmp_eq(a, pmin(a, b));
1111 #else
1112  return (Packet4ui)pcmp_le((Packet4i)psub(a, pset1<Packet4ui>(0x80000000UL)),
1113  (Packet4i)psub(b, pset1<Packet4ui>(0x80000000UL)));
1114 #endif
1115 }
EIGEN_STRONG_INLINE Packet4ui pset1< Packet4ui >(const uint32_t &from)
Definition: LSX/PacketMath.h:490
EIGEN_STRONG_INLINE Packet4ui pcmp_le(const Packet4ui &a, const Packet4ui &b)
Definition: SSE/PacketMath.h:1108

References a, b, pcmp_eq(), pcmp_le(), pmin(), pset1< Packet4ui >(), and psub().

◆ pcmp_le() [13/19]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pcmp_le ( const Packet8bf a,
const Packet8bf b 
)
2409  {
2411 }
EIGEN_STRONG_INLINE Packet4f pcmp_le< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:1040

References a, b, BF16_TO_F32_BINARY_OP_WRAPPER_BOOL, and pcmp_le< Packet4f >().

◆ pcmp_le() [14/19]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pcmp_le ( const Packet8d a,
const Packet8d b 
)
735  {
736  __mmask8 mask = _mm512_cmp_pd_mask(a, b, _CMP_LE_OQ);
737  return _mm512_castsi512_pd(_mm512_mask_set1_epi64(_mm512_setzero_epi32(), mask, 0xffffffffffffffffu));
738 }

References a, and b.

◆ pcmp_le() [15/19]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pcmp_le ( const Packet8f a,
const Packet8f b 
)
1018  {
1019  return _mm256_cmp_ps(a, b, _CMP_LE_OQ);
1020 }

References a, and b.

◆ pcmp_le() [16/19]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pcmp_le ( const Packet8h a,
const Packet8h b 
)
2363  {
2364  return Pack16To8(pcmp_le(half2float(a), half2float(b)));
2365 }
EIGEN_STRONG_INLINE Packet8h pcmp_le(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2363

References a, b, half2float(), Pack16To8(), and pcmp_le().

◆ pcmp_le() [17/19]

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pcmp_le ( const Packet8i a,
const Packet8i b 
)
1056  {
1057 #ifdef EIGEN_VECTORIZE_AVX2
1058  return _mm256_xor_si256(_mm256_cmpgt_epi32(a, b), _mm256_set1_epi32(-1));
1059 #else
1060  __m128i lo = _mm_cmpgt_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
1061  lo = _mm_xor_si128(lo, _mm_set1_epi32(-1));
1062  __m128i hi = _mm_cmpgt_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
1063  hi = _mm_xor_si128(hi, _mm_set1_epi32(-1));
1064  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1065 #endif
1066 }

References a, and b.

◆ pcmp_le() [18/19]

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pcmp_le ( const Packet8l a,
const Packet8l b 
)
719  {
720  __mmask8 mask = _mm512_cmp_epi64_mask(a, b, _MM_CMPINT_LE);
721  return _mm512_mask_set1_epi64(_mm512_setzero_si512(), mask, int64_t(-1));
722 }

References a, and b.

◆ pcmp_le() [19/19]

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pcmp_le ( const Packet8ui a,
const Packet8ui b 
)
1406  {
1407  return pcmp_eq(a, pmin(a, b));
1408 }

References a, b, pcmp_eq(), and pmin().

◆ pcmp_le< Packet16c >()

1048  {
1049  return __lsx_vsle_b(a, b);
1050 }

References a, and b.

◆ pcmp_le< Packet16uc >()

1064  {
1065  return __lsx_vsle_bu(a, b);
1066 }

References a, and b.

◆ pcmp_le< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pcmp_le< Packet2d > ( const Packet2d a,
const Packet2d b 
)
1044  {
1045  return (Packet2d)__lsx_vfcmp_cle_d(a, b);
1046 }

References a, and b.

◆ pcmp_le< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pcmp_le< Packet2f > ( const Packet2f a,
const Packet2f b 
)
1634  {
1635  return vreinterpret_f32_u32(vcle_f32(a, b));
1636 }

References a, and b.

◆ pcmp_le< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pcmp_le< Packet2i > ( const Packet2i a,
const Packet2i b 
)
1684  {
1685  return vreinterpret_s32_u32(vcle_s32(a, b));
1686 }

References a, and b.

◆ pcmp_le< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pcmp_le< Packet2l > ( const Packet2l a,
const Packet2l b 
)
1060  {
1061  return __lsx_vsle_d(a, b);
1062 }

References a, and b.

◆ pcmp_le< Packet2ui >()

1692  {
1693  return vcle_u32(a, b);
1694 }

References a, and b.

◆ pcmp_le< Packet2ul >()

1076  {
1077  return __lsx_vsle_du(a, b);
1078 }

References a, and b.

◆ pcmp_le< Packet4bf >()

◆ pcmp_le< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pcmp_le< Packet4c > ( const Packet4c a,
const Packet4c b 
)
1642  {
1643  return vget_lane_s32(
1644  vreinterpret_s32_u8(vcle_s8(vreinterpret_s8_s32(vdup_n_s32(a)), vreinterpret_s8_s32(vdup_n_s32(b)))), 0);
1645 }

References a, and b.

◆ pcmp_le< Packet4f >()

template<>
Packet4f EIGEN_STRONG_INLINE Eigen::internal::pcmp_le< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1040  {
1041  return (Packet4f)__lsx_vfcmp_cle_s(a, b);
1042 }

References a, and b.

Referenced by pcmp_le(), and pcmp_le< Packet4bf >().

◆ pcmp_le< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pcmp_le< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1056  {
1057  return __lsx_vsle_w(a, b);
1058 }

References a, and b.

◆ pcmp_le< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pcmp_le< Packet4s > ( const Packet4s a,
const Packet4s b 
)
1668  {
1669  return vreinterpret_s16_u16(vcle_s16(a, b));
1670 }

References a, and b.

◆ pcmp_le< Packet4uc >()

1655  {
1656  return vget_lane_u32(
1657  vreinterpret_u32_u8(vcle_u8(vreinterpret_u8_u32(vdup_n_u32(a)), vreinterpret_u8_u32(vdup_n_u32(b)))), 0);
1658 }

References a, and b.

◆ pcmp_le< Packet4ui >()

1072  {
1073  return __lsx_vsle_wu(a, b);
1074 }

References a, and b.

◆ pcmp_le< Packet4us >()

1676  {
1677  return vcle_u16(a, b);
1678 }

References a, and b.

◆ pcmp_le< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcmp_le< Packet8c > ( const Packet8c a,
const Packet8c b 
)
1647  {
1648  return vreinterpret_s8_u8(vcle_s8(a, b));
1649 }

References a, and b.

◆ pcmp_le< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcmp_le< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1052  {
1053  return __lsx_vsle_h(a, b);
1054 }

References a, and b.

◆ pcmp_le< Packet8uc >()

1660  {
1661  return vcle_u8(a, b);
1662 }

References a, and b.

◆ pcmp_le< Packet8us >()

1068  {
1069  return __lsx_vsle_hu(a, b);
1070 }

References a, and b.

◆ pcmp_le< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pcmp_le< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
468  {
469  return svreinterpret_f32_u32(svdup_n_u32_z(svcmple_f32(svptrue_b32(), a, b), 0xffffffffu));
470 }

References a, and b.

◆ pcmp_le< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pcmp_le< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
138  {
139  return svdup_n_s32_z(svcmple_s32(svptrue_b32(), a, b), 0xffffffffu);
140 }

References a, and b.

◆ pcmp_lt() [1/23]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pcmp_lt ( const Packet a,
const Packet b 
)
inline
Returns
a < b as a bit mask
434  {
435  return a < b ? ptrue(a) : pzero(a);
436 }

References a, b, ptrue(), and pzero().

◆ pcmp_lt() [2/23]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pcmp_lt ( const Packet16bf a,
const Packet16bf b 
)
2854  {
2855  return Pack32To16(pcmp_lt(Bf16ToF32(a), Bf16ToF32(b)));
2856 }
EIGEN_STRONG_INLINE Packet16bf pcmp_lt(const Packet16bf &a, const Packet16bf &b)
Definition: AVX512/PacketMath.h:2854

References a, b, Bf16ToF32(), Pack32To16(), and pcmp_lt().

◆ pcmp_lt() [3/23]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pcmp_lt ( const Packet16c a,
const Packet16c b 
)
1383  {
1384  return reinterpret_cast<Packet16c>(vec_cmplt(a, b));
1385 }

References a, and b.

◆ pcmp_lt() [4/23]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pcmp_lt ( const Packet16f a,
const Packet16f b 
)
686  {
687  __mmask16 mask = _mm512_cmp_ps_mask(a, b, _CMP_LT_OQ);
688  return _mm512_castsi512_ps(_mm512_mask_set1_epi32(_mm512_setzero_epi32(), mask, int32_t(-1)));
689 }

References a, and b.

◆ pcmp_lt() [5/23]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pcmp_lt ( const Packet16h a,
const Packet16h b 
)
2352  {
2353  return Pack32To16(pcmp_lt(half2float(a), half2float(b)));
2354 }

References a, b, half2float(), Pack32To16(), and pcmp_lt().

◆ pcmp_lt() [6/23]

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pcmp_lt ( const Packet16i a,
const Packet16i b 
)
708  {
709  __mmask16 mask = _mm512_cmp_epi32_mask(a, b, _MM_CMPINT_LT);
710  return _mm512_mask_set1_epi32(_mm512_setzero_epi32(), mask, int32_t(-1));
711 }

References a, and b.

◆ pcmp_lt() [7/23]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pcmp_lt ( const Packet16uc a,
const Packet16uc b 
)
1397  {
1398  return reinterpret_cast<Packet16uc>(vec_cmplt(a, b));
1399 }

References a, and b.

◆ pcmp_lt() [8/23]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pcmp_lt ( const Packet2d a,
const Packet2d b 
)
905  {
906  return _mm_cmplt_pd(a, b);
907 }

References a, and b.

◆ pcmp_lt() [9/23]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pcmp_lt ( const Packet2l a,
const Packet2l b 
)
929  {
930 #ifdef EIGEN_VECTORIZE_SSE4_2
931  return _mm_cmpgt_epi64(b, a);
932 #else
934  Packet2l hi_eq = Packet2l(_mm_shuffle_epi32(eq, (shuffle_mask<1, 1, 3, 3>::mask)));
936  Packet2l hi_lt = Packet2l(_mm_shuffle_epi32(lt, (shuffle_mask<1, 1, 3, 3>::mask)));
937  Packet2l lo_lt = Packet2l(_mm_shuffle_epi32(lt, (shuffle_mask<0, 0, 2, 2>::mask)));
938  // return hi(a) < hi(b) || (hi(a) == hi(b) && lo(a) < lo(b))
939  return por(hi_lt, pand(hi_eq, lo_lt));
940 #endif
941 }
EIGEN_STRONG_INLINE Packet4i pcmp_lt< Packet4i >(const Packet4i &a, const Packet4i &b)
Definition: LSX/PacketMath.h:1097

References a, b, pand(), pcmp_eq< Packet4i >(), pcmp_lt< Packet4i >(), and por().

◆ pcmp_lt() [10/23]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pcmp_lt ( const Packet32h a,
const Packet32h b 
)
277  {
278  __mmask32 mask = _mm512_cmp_ph_mask(a, b, _CMP_LT_OQ);
279  return _mm512_castsi512_ph(_mm512_mask_set1_epi16(_mm512_set1_epi32(0), mask, static_cast<short>(0xffffu)));
280 }

References a, and b.

◆ pcmp_lt() [11/23]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pcmp_lt ( const Packet4d a,
const Packet4d b 
)
1043  {
1044  return _mm256_cmp_pd(a, b, _CMP_LT_OQ);
1045 }

References a, and b.

◆ pcmp_lt() [12/23]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pcmp_lt ( const Packet4f a,
const Packet4f b 
)
888  {
889  return _mm_cmplt_ps(a, b);
890 }

References a, and b.

◆ pcmp_lt() [13/23]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pcmp_lt ( const Packet4i a,
const Packet4i b 
)
1341  {
1342  return reinterpret_cast<Packet4i>(vec_cmplt(a, b));
1343 }

References a, and b.

Referenced by erfc_double_large(), generic_atan(), generic_ceil(), generic_floor(), generic_ndtri(), generic_ndtri_lt_exp_neg_two(), generic_pow(), generic_pow_impl(), generic_rint(), pabsdiff(), Eigen::internal::scalar_logistic_op< float >::packetOp(), Eigen::internal::scalar_isfinite_op< Scalar, true >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_LT, UseTypedComparators >::packetOp(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_GT, UseTypedComparators >::packetOp(), Eigen::internal::linspaced_op_impl< Scalar, false >::packetOp(), pasin_float(), patanh_double(), patanh_float(), pcmp_le(), pcmp_lt(), pexp_double(), pexp_float(), pfrexp_generic(), plog_impl_double(), plog_impl_float(), psqrt_complex(), packetmath_boolean_mask_ops_notcomplex_test< Scalar, Packet, std::enable_if_t< internal::packet_traits< Scalar >::HasCmp &&!internal::is_same< Scalar, bool >::value > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&NumTraits< typename unpacket_traits< Packet >::type >::IsSigned &&NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psignbit_impl< Packet, false, true >::run(), Eigen::internal::generic_i1e< T, float >::run(), Eigen::internal::generic_i1e< T, double >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), Eigen::internal::generic_y1< T, float >::run(), Eigen::internal::generic_fast_erf< Scalar >::run(), Eigen::internal::generic_fast_erfc< Scalar >::run(), and twosum().

◆ pcmp_lt() [14/23]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pcmp_lt ( const Packet4ui a,
const Packet4ui b 
)
1099  {
1100 #ifdef EIGEN_VECTORIZE_SSE4_1
1101  return pxor(pcmp_eq(a, pmax(a, b)), ptrue(a));
1102 #else
1103  return (Packet4ui)pcmp_lt((Packet4i)psub(a, pset1<Packet4ui>(0x80000000UL)),
1104  (Packet4i)psub(b, pset1<Packet4ui>(0x80000000UL)));
1105 #endif
1106 }
EIGEN_STRONG_INLINE Packet8h ptrue(const Packet8h &a)
Definition: AVX/PacketMath.h:2263

References a, b, pcmp_eq(), pcmp_lt(), pmax(), pset1< Packet4ui >(), psub(), ptrue(), and pxor().

◆ pcmp_lt() [15/23]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pcmp_lt ( const Packet8bf a,
const Packet8bf b 
)
2401  {
2403 }
EIGEN_STRONG_INLINE Packet4f pcmp_lt< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:1081

References a, b, BF16_TO_F32_BINARY_OP_WRAPPER_BOOL, and pcmp_lt< Packet4f >().

◆ pcmp_lt() [16/23]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pcmp_lt ( const Packet8d a,
const Packet8d b 
)
740  {
741  __mmask8 mask = _mm512_cmp_pd_mask(a, b, _CMP_LT_OQ);
742  return _mm512_castsi512_pd(_mm512_mask_set1_epi64(_mm512_setzero_epi32(), mask, 0xffffffffffffffffu));
743 }

References a, and b.

◆ pcmp_lt() [17/23]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pcmp_lt ( const Packet8f a,
const Packet8f b 
)
1022  {
1023  return _mm256_cmp_ps(a, b, _CMP_LT_OQ);
1024 }

References a, and b.

◆ pcmp_lt() [18/23]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pcmp_lt ( const Packet8h a,
const Packet8h b 
)
2368  {
2369  return Pack16To8(pcmp_lt(half2float(a), half2float(b)));
2370 }
EIGEN_STRONG_INLINE Packet8h pcmp_lt(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2368

References a, b, half2float(), Pack16To8(), and pcmp_lt().

◆ pcmp_lt() [19/23]

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pcmp_lt ( const Packet8i a,
const Packet8i b 
)
1068  {
1069 #ifdef EIGEN_VECTORIZE_AVX2
1070  return _mm256_cmpgt_epi32(b, a);
1071 #else
1072  __m128i lo = _mm_cmpgt_epi32(_mm256_extractf128_si256(b, 0), _mm256_extractf128_si256(a, 0));
1073  __m128i hi = _mm_cmpgt_epi32(_mm256_extractf128_si256(b, 1), _mm256_extractf128_si256(a, 1));
1074  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1075 #endif
1076 }

References a, and b.

◆ pcmp_lt() [20/23]

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pcmp_lt ( const Packet8l a,
const Packet8l b 
)
724  {
725  __mmask8 mask = _mm512_cmp_epi64_mask(a, b, _MM_CMPINT_LT);
726  return _mm512_mask_set1_epi64(_mm512_setzero_si512(), mask, int64_t(-1));
727 }

References a, and b.

◆ pcmp_lt() [21/23]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcmp_lt ( const Packet8s a,
const Packet8s b 
)
1355  {
1356  return reinterpret_cast<Packet8s>(vec_cmplt(a, b));
1357 }

References a, and b.

◆ pcmp_lt() [22/23]

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pcmp_lt ( const Packet8ui a,
const Packet8ui b 
)
1402  {
1403  return pxor(pcmp_eq(a, pmax(a, b)), ptrue(a));
1404 }
EIGEN_STRONG_INLINE Packet8bf ptrue(const Packet8bf &a)
Definition: AVX/PacketMath.h:2665
EIGEN_STRONG_INLINE Packet8bf pxor(const Packet8bf &a, const Packet8bf &b)
Definition: AVX/PacketMath.h:2695

References a, b, pcmp_eq(), pmax(), ptrue(), and pxor().

◆ pcmp_lt() [23/23]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pcmp_lt ( const Packet8us a,
const Packet8us b 
)
1369  {
1370  return reinterpret_cast<Packet8us>(vec_cmplt(a, b));
1371 }

References a, and b.

◆ pcmp_lt< Packet16c >()

1089  {
1090  return __lsx_vslt_b(a, b);
1091 }

References a, and b.

◆ pcmp_lt< Packet16uc >()

1105  {
1106  return __lsx_vslt_bu(a, b);
1107 }

References a, and b.

◆ pcmp_lt< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pcmp_lt< Packet2d > ( const Packet2d a,
const Packet2d b 
)
1085  {
1086  return (Packet2d)__lsx_vfcmp_clt_d(a, b);
1087 }

References a, and b.

◆ pcmp_lt< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pcmp_lt< Packet2f > ( const Packet2f a,
const Packet2f b 
)
1719  {
1720  return vreinterpret_f32_u32(vclt_f32(a, b));
1721 }

References a, and b.

◆ pcmp_lt< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pcmp_lt< Packet2i > ( const Packet2i a,
const Packet2i b 
)
1769  {
1770  return vreinterpret_s32_u32(vclt_s32(a, b));
1771 }

References a, and b.

◆ pcmp_lt< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pcmp_lt< Packet2l > ( const Packet2l a,
const Packet2l b 
)
1101  {
1102  return __lsx_vslt_d(a, b);
1103 }

References a, and b.

◆ pcmp_lt< Packet2ui >()

1777  {
1778  return vclt_u32(a, b);
1779 }

References a, and b.

◆ pcmp_lt< Packet2ul >()

1117  {
1118  return __lsx_vslt_du(a, b);
1119 }

References a, and b.

◆ pcmp_lt< Packet4bf >()

◆ pcmp_lt< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pcmp_lt< Packet4c > ( const Packet4c a,
const Packet4c b 
)
1727  {
1728  return vget_lane_s32(
1729  vreinterpret_s32_u8(vclt_s8(vreinterpret_s8_s32(vdup_n_s32(a)), vreinterpret_s8_s32(vdup_n_s32(b)))), 0);
1730 }

References a, and b.

◆ pcmp_lt< Packet4f >()

template<>
Packet4f EIGEN_STRONG_INLINE Eigen::internal::pcmp_lt< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1081  {
1082  return (Packet4f)__lsx_vfcmp_clt_s(a, b);
1083 }

References a, and b.

Referenced by pcmp_lt(), and pcmp_lt< Packet4bf >().

◆ pcmp_lt< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pcmp_lt< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1097  {
1098  return __lsx_vslt_w(a, b);
1099 }

References a, and b.

Referenced by pcmp_lt().

◆ pcmp_lt< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pcmp_lt< Packet4s > ( const Packet4s a,
const Packet4s b 
)
1753  {
1754  return vreinterpret_s16_u16(vclt_s16(a, b));
1755 }

References a, and b.

◆ pcmp_lt< Packet4uc >()

1740  {
1741  return vget_lane_u32(
1742  vreinterpret_u32_u8(vclt_u8(vreinterpret_u8_u32(vdup_n_u32(a)), vreinterpret_u8_u32(vdup_n_u32(b)))), 0);
1743 }

References a, and b.

◆ pcmp_lt< Packet4ui >()

1113  {
1114  return __lsx_vslt_wu(a, b);
1115 }

References a, and b.

◆ pcmp_lt< Packet4us >()

1761  {
1762  return vclt_u16(a, b);
1763 }

References a, and b.

◆ pcmp_lt< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pcmp_lt< Packet8c > ( const Packet8c a,
const Packet8c b 
)
1732  {
1733  return vreinterpret_s8_u8(vclt_s8(a, b));
1734 }

References a, and b.

◆ pcmp_lt< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pcmp_lt< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1093  {
1094  return __lsx_vslt_h(a, b);
1095 }

References a, and b.

◆ pcmp_lt< Packet8uc >()

1745  {
1746  return vclt_u8(a, b);
1747 }

References a, and b.

◆ pcmp_lt< Packet8us >()

1109  {
1110  return __lsx_vslt_hu(a, b);
1111 }

References a, and b.

◆ pcmp_lt< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pcmp_lt< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
473  {
474  return svreinterpret_f32_u32(svdup_n_u32_z(svcmplt_f32(svptrue_b32(), a, b), 0xffffffffu));
475 }

References a, and b.

◆ pcmp_lt< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pcmp_lt< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
143  {
144  return svdup_n_s32_z(svcmplt_s32(svptrue_b32(), a, b), 0xffffffffu);
145 }

References a, and b.

◆ pcmp_lt_or_nan() [1/12]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pcmp_lt_or_nan ( const Packet a,
const Packet b 
)
inline
Returns
a < b or a==NaN or b==NaN as a bit mask
446  {
447  return a >= b ? pzero(a) : ptrue(a);
448 }

References a, b, ptrue(), and pzero().

◆ pcmp_lt_or_nan() [2/12]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pcmp_lt_or_nan ( const Packet16bf a,
const Packet16bf b 
)
2859  {
2861 }
EIGEN_STRONG_INLINE Packet16bf pcmp_lt_or_nan(const Packet16bf &a, const Packet16bf &b)
Definition: AVX512/PacketMath.h:2859

References a, b, Bf16ToF32(), Pack32To16(), and pcmp_lt_or_nan().

◆ pcmp_lt_or_nan() [3/12]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pcmp_lt_or_nan ( const Packet16f a,
const Packet16f b 
)
692  {
693  __mmask16 mask = _mm512_cmp_ps_mask(a, b, _CMP_NGE_UQ);
694  return _mm512_castsi512_ps(_mm512_mask_set1_epi32(_mm512_setzero_epi32(), mask, int32_t(-1)));
695 }

References a, and b.

◆ pcmp_lt_or_nan() [4/12]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pcmp_lt_or_nan ( const Packet16h a,
const Packet16h b 
)
2357  {
2359 }

References a, b, half2float(), Pack32To16(), and pcmp_lt_or_nan().

◆ pcmp_lt_or_nan() [5/12]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pcmp_lt_or_nan ( const Packet2d a,
const Packet2d b 
)
909  {
910  return _mm_cmpnge_pd(a, b);
911 }

References a, and b.

◆ pcmp_lt_or_nan() [6/12]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pcmp_lt_or_nan ( const Packet32h a,
const Packet32h b 
)
285  {
286  __mmask32 mask = _mm512_cmp_ph_mask(a, b, _CMP_NGE_UQ);
287  return _mm512_castsi512_ph(_mm512_mask_set1_epi16(_mm512_set1_epi16(0), mask, static_cast<short>(0xffffu)));
288 }

References a, and b.

◆ pcmp_lt_or_nan() [7/12]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pcmp_lt_or_nan ( const Packet4d a,
const Packet4d b 
)
1047  {
1048  return _mm256_cmp_pd(a, b, _CMP_NGE_UQ);
1049 }

References a, and b.

◆ pcmp_lt_or_nan() [8/12]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pcmp_lt_or_nan ( const Packet4f a,
const Packet4f b 
)
1329  {
1330  Packet4f c = reinterpret_cast<Packet4f>(vec_cmpge(a, b));
1331  return vec_nor(c, c);
1332 }

References a, b, and calibrate::c.

Referenced by packetmath_boolean_mask_ops_real(), pcmp_lt_or_nan(), plog_impl_double(), and plog_impl_float().

◆ pcmp_lt_or_nan() [9/12]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pcmp_lt_or_nan ( const Packet8bf a,
const Packet8bf b 
)
2405  {
2407 }
EIGEN_STRONG_INLINE Packet4f pcmp_lt_or_nan< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:1122

References a, b, BF16_TO_F32_BINARY_OP_WRAPPER_BOOL, and pcmp_lt_or_nan< Packet4f >().

◆ pcmp_lt_or_nan() [10/12]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pcmp_lt_or_nan ( const Packet8d a,
const Packet8d b 
)
745  {
746  __mmask8 mask = _mm512_cmp_pd_mask(a, b, _CMP_NGE_UQ);
747  return _mm512_castsi512_pd(_mm512_mask_set1_epi64(_mm512_setzero_epi32(), mask, 0xffffffffffffffffu));
748 }

References a, and b.

◆ pcmp_lt_or_nan() [11/12]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pcmp_lt_or_nan ( const Packet8f a,
const Packet8f b 
)
1026  {
1027  return _mm256_cmp_ps(a, b, _CMP_NGE_UQ);
1028 }

References a, and b.

◆ pcmp_lt_or_nan() [12/12]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pcmp_lt_or_nan ( const Packet8h a,
const Packet8h b 
)
2373  {
2375 }
EIGEN_STRONG_INLINE Packet8h pcmp_lt_or_nan(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2373

References a, b, half2float(), Pack16To8(), and pcmp_lt_or_nan().

◆ pcmp_lt_or_nan< Packet2d >()

1126  {
1127  return (Packet2d)__lsx_vfcmp_sult_d(a, b);
1128 }

References a, and b.

◆ pcmp_lt_or_nan< Packet2f >()

1889  {
1890  return vreinterpret_f32_u32(vmvn_u32(vcge_f32(a, b)));
1891 }

References a, and b.

◆ pcmp_lt_or_nan< Packet4bf >()

◆ pcmp_lt_or_nan< Packet4f >()

1122  {
1123  return (Packet4f)__lsx_vfcmp_sult_s(a, b);
1124 }

References a, and b.

Referenced by pcmp_lt_or_nan(), and pcmp_lt_or_nan< Packet4bf >().

◆ pcmp_lt_or_nan< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pcmp_lt_or_nan< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
486  {
487  return svreinterpret_f32_u32(svdup_n_u32_z(svnot_b_z(svptrue_b32(), svcmpge_f32(svptrue_b32(), a, b)), 0xffffffffu));
488 }

References a, and b.

◆ pconj() [1/41]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pconj ( const Packet a)
inline
Returns
conj(a) (coeff-wise)
351  {
352  return numext::conj(a);
353 }

References a, and conj().

◆ pconj() [2/41]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pconj ( const Packet16bf a)
2870  {
2871  return a;
2872 }

References a.

◆ pconj() [3/41]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pconj ( const Packet16c a)
704  {
705  return a;
706 }

References a.

◆ pconj() [4/41]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pconj ( const Packet16f a)
426  {
427  return a;
428 }

References a.

◆ pconj() [5/41]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pconj ( const Packet16h a)
2362  {
2363  return a;
2364 }

References a.

◆ pconj() [6/41]

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pconj ( const Packet16i a)
434  {
435  return a;
436 }

References a.

◆ pconj() [7/41]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pconj ( const Packet16uc a)
720  {
721  return a;
722 }

References a.

◆ pconj() [8/41]

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pconj ( const Packet1cd a)
318  {
319  const uint64_t tmp[2] = {0x0000000000000000u, 0x8000000000000000u};
320  __m128i mask = __lsx_vld(tmp, 0);
321  Packet1cd res;
322  res.v = (Packet2d)__lsx_vxor_v((__m128i)a.v, mask);
323  return res;
324 }

References a, res, and tmp.

◆ pconj() [9/41]

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pconj ( const Packet1cf a)
159  {
160  const Packet2ui b = Packet2ui(vreinterpret_u32_f32(a.v));
161  return Packet1cf(vreinterpret_f32_u32(veor_u32(b, p2ui_CONJ_XOR())));
162 }
uint32x2_t p2ui_CONJ_XOR()
Definition: NEON/Complex.h:32
uint32x2_t Packet2ui
Definition: NEON/PacketMath.h:89

References a, b, and p2ui_CONJ_XOR().

◆ pconj() [10/41]

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::pconj ( const Packet2cd a)
284  {
285  const __m256d mask = _mm256_castsi256_pd(_mm256_set_epi32(0x80000000, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0));
286  return Packet2cd(_mm256_xor_pd(a.v, mask));
287 }

References a.

◆ pconj() [11/41]

◆ pconj() [12/41]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pconj ( const Packet2d a)
700  {
701  return a;
702 }

References a.

◆ pconj() [13/41]

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pconj ( const Packet2f a)
1050  {
1051  return a;
1052 }

References a.

◆ pconj() [14/41]

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pconj ( const Packet2i a)
1098  {
1099  return a;
1100 }

References a.

◆ pconj() [15/41]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pconj ( const Packet2l a)
716  {
717  return a;
718 }

References a.

◆ pconj() [16/41]

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pconj ( const Packet2ui a)
1106  {
1107  return a;
1108 }

References a.

◆ pconj() [17/41]

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pconj ( const Packet2ul a)
732  {
733  return a;
734 }

References a.

◆ pconj() [18/41]

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pconj ( const Packet4bf a)
4948  {
4949  return a;
4950 }

References a.

◆ pconj() [19/41]

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pconj ( const Packet4c a)
1058  {
1059  return a;
1060 }

References a.

◆ pconj() [20/41]

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::pconj ( const Packet4cd a)
264  {
265  const __m512d mask = _mm512_castsi512_pd(_mm512_set_epi32(0x80000000, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0,
266  0x80000000, 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0));
267  return Packet4cd(pxor(a.v, mask));
268 }

References a, and pxor().

◆ pconj() [21/41]

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::pconj ( const Packet4cf a)
81  {
82  const __m256 mask = _mm256_castsi256_ps(_mm256_setr_epi32(0x00000000, 0x80000000, 0x00000000, 0x80000000, 0x00000000,
83  0x80000000, 0x00000000, 0x80000000));
84  return Packet4cf(_mm256_xor_ps(a.v, mask));
85 }

References a.

◆ pconj() [22/41]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pconj ( const Packet4d a)
918  {
919  return a;
920 }

References a.

◆ pconj() [23/41]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pconj ( const Packet4f a)
1153  {
1154  return a;
1155 }

References a.

◆ pconj() [24/41]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pconj ( const Packet4i a)
1157  {
1158  return a;
1159 }

References a.

◆ pconj() [25/41]

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pconj ( const Packet4s a)
1082  {
1083  return a;
1084 }

References a.

◆ pconj() [26/41]

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pconj ( const Packet4uc a)
1070  {
1071  return a;
1072 }

References a.

◆ pconj() [27/41]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pconj ( const Packet4ui a)
728  {
729  return a;
730 }

References a.

◆ pconj() [28/41]

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pconj ( const Packet4us a)
1090  {
1091  return a;
1092 }

References a.

◆ pconj() [29/41]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pconj ( const Packet8bf a)
2758  {
2759  return a;
2760 }

References a.

◆ pconj() [30/41]

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pconj ( const Packet8c a)
1062  {
1063  return a;
1064 }

References a.

◆ pconj() [31/41]

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::pconj ( const Packet8cf a)
83  {
84  const __m512 mask = _mm512_castsi512_ps(_mm512_setr_epi32(
85  0x00000000, 0x80000000, 0x00000000, 0x80000000, 0x00000000, 0x80000000, 0x00000000, 0x80000000, 0x00000000,
86  0x80000000, 0x00000000, 0x80000000, 0x00000000, 0x80000000, 0x00000000, 0x80000000));
87  return Packet8cf(pxor(a.v, mask));
88 }

References a, and pxor().

◆ pconj() [32/41]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pconj ( const Packet8d a)
430  {
431  return a;
432 }

References a.

◆ pconj() [33/41]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pconj ( const Packet8f a)
914  {
915  return a;
916 }

References a.

◆ pconj() [34/41]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pconj ( const Packet8h a)
2378  {
2379  return a;
2380 }

References a.

◆ pconj() [35/41]

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pconj ( const Packet8i a)
922  {
923  return a;
924 }

References a.

◆ pconj() [36/41]

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pconj ( const Packet8l a)
438  {
439  return a;
440 }

References a.

◆ pconj() [37/41]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pconj ( const Packet8s a)
708  {
709  return a;
710 }

References a.

◆ pconj() [38/41]

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pconj ( const Packet8uc a)
1074  {
1075  return a;
1076 }

References a.

◆ pconj() [39/41]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pconj ( const Packet8us a)
724  {
725  return a;
726 }

References a.

◆ pconj() [40/41]

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pconj ( const PacketXf &  a)
416  {
417  return a;
418 }

References a.

◆ pconj() [41/41]

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pconj ( const PacketXi &  a)
108  {
109  return a;
110 }

References a.

◆ pconj< Packet32h >()

523  {
524  return a;
525 }

References a.

◆ pcos()

◆ pcos< Packet16h >()

◆ pcos< Packet32h >()

750  {
751  Packet16h low;
752  Packet16h high;
753  extract2Packet16h(a, low, high);
754 
755  Packet16h lowOut = pcos(low);
756  Packet16h highOut = pcos(high);
757 
758  return combine2Packet16h(lowOut, highOut);
759 }
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos(const Packet &a)
Definition: GenericPacketMath.h:1022
EIGEN_STRONG_INLINE Packet32h combine2Packet16h(const Packet16h &a, const Packet16h &b)
Definition: PacketMathFP16.h:723
EIGEN_STRONG_INLINE void extract2Packet16h(const Packet32h &x, Packet16h &a, Packet16h &b)
Definition: PacketMathFP16.h:730

References a, combine2Packet16h(), extract2Packet16h(), and pcos().

◆ pcos< Packet4f >()

315  {
316  return psincos_inner_msa_float</* sine */ false>(x);
317 }
Packet4f psincos_inner_msa_float(const Packet4f &_x)
Definition: arch/MSA/MathFunctions.h:228

References psincos_inner_msa_float(), and plotDoE::x.

◆ pcos< Packet8bf >()

2348  {
2350 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos_float(const Packet &x)
Definition: GenericPacketMathFunctions.h:825

References a, BF16_TO_F32_UNARY_OP_WRAPPER, and pcos_float().

◆ pcos< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pcos< PacketXf > ( const PacketXf &  x)
35  {
36  return pcos_float(x);
37 }

References pcos_float(), and plotDoE::x.

◆ pcos_double()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pcos_double ( const Packet x)
Returns
cos(x) for double precision float
993  {
994  return psincos_double<false>(x);
995 }

References plotDoE::x.

◆ pcos_float()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pcos_float ( const Packet x)
Returns
cos(x) for single precision float
825  {
826  return psincos_float<false>(x);
827 }

References plotDoE::x.

Referenced by pcos< Packet8bf >(), and pcos< PacketXf >().

◆ pcosh()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pcosh ( const Packet a)
Returns
the hyperbolic cosine of a (coeff-wise)
1057  {
1059  return cosh(a);
1060 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 cosh(const bfloat16 &a)
Definition: BFloat16.h:638

References a, Eigen::bfloat16_impl::cosh(), and EIGEN_USING_STD.

Referenced by Eigen::internal::scalar_cosh_op< Scalar >::packetOp().

◆ pcplxflip() [1/3]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pcplxflip ( const Packet a)
inline
Returns
a with real and imaginary part flipped (for complex type only)
991  {
992  return Packet(numext::imag(a), numext::real(a));
993 }

References a, and imag().

◆ pcplxflip() [2/3]

EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pcplxflip ( const Packet1cd x)
431  {
432  return Packet1cd(preverse(Packet2d(x.v)));
433 }

References preverse(), and plotDoE::x.

◆ pcplxflip() [3/3]

◆ pcplxflip< Packet1cf >()

399  {
400  return Packet1cf(vrev64_f32(a.v));
401 }

References a.

◆ pcplxflip< Packet2cd >()

406  {
407  return Packet2cd(_mm256_shuffle_pd(x.v, x.v, 0x5));
408 }

References plotDoE::x.

◆ pcplxflip< Packet2cf >()

335  {
336  return Packet2cf(vec_perm(x.v, x.v, p16uc_COMPLEX32_REV));
337 }

References p16uc_COMPLEX32_REV, and plotDoE::x.

◆ pcplxflip< Packet4cd >()

388  {
389  return Packet4cd(_mm512_permute_pd(x.v, 0x55));
390 }

References plotDoE::x.

◆ pcplxflip< Packet4cf >()

220  {
221  return Packet4cf(_mm256_shuffle_ps(x.v, x.v, _MM_SHUFFLE(2, 3, 0, 1)));
222 }

References plotDoE::x.

◆ pcplxflip< Packet8cf >()

202  {
203  return Packet8cf(_mm512_shuffle_ps(x.v, x.v, _MM_SHUFFLE(2, 3, 0, 1)));
204 }

References plotDoE::x.

◆ pdigamma()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pdigamma ( const Packet a)
Returns
the derivative of lgamma, psi(a) (coeff-wise)
29  {
30  using numext::digamma;
31  return digamma(a);
32 }

References a.

Referenced by Eigen::internal::scalar_digamma_op< Scalar >::packetOp().

◆ pdiv()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pdiv ( const Packet a,
const Packet b 
)
inline
Returns
a / b (coeff-wise)
368  {
369  return a / b;
370 }

References a, and b.

Referenced by Eigen::internal::div_assign_op< DstScalar, SrcScalar >::assignPacket(), doubleword_div_fp(), erf_over_x_double_small(), erfc_double_large(), Eigen::TensorSycl::internal::OpDefiner< Eigen::internal::MeanReducer< CoeffReturnType >, CoeffReturnType, Index, true >::finalise_op(), Eigen::internal::MeanReducer< T >::finalizePacket(), generic_expm1(), generic_log1p(), generic_ndtri_gt_exp_neg_two(), generic_ndtri_lt_exp_neg_two(), Eigen::internal::Packet1cd::operator/=(), packetmath(), Eigen::internal::scalar_logistic_op< float >::packetOp(), Eigen::internal::scalar_quotient_op< LhsScalar, RhsScalar >::packetOp(), Eigen::internal::scalar_logistic_op_impl< T, EnableIf >::packetOp(), patanh_double(), patanh_float(), pdiv< Packet16h >(), pdiv< Packet8h >(), pdiv_complex(), pexp< Packet2d >(), pexp_double(), phypot_complex(), plog_impl_double(), plog_impl_float(), preciprocal(), psincos_double(), psqrt_complex(), ptanh< Packet4f >(), ptanh_double(), ptanh_float(), Eigen::internal::compute_inverse_size4< Architecture::Target, double, MatrixType, ResultType >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t< NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&unpacket_traits< Packet >::vectorizable > >::run(), Eigen::internal::patan_reduced< Scalar >::run(), Eigen::internal::unary_pow::reciprocate< Packet, ScalarExponent, ReciprocateIfExponentIsNegative >::run(), Eigen::internal::generic_i0e< T, float >::run(), Eigen::internal::generic_i0e< T, double >::run(), Eigen::internal::generic_i1e< T, float >::run(), Eigen::internal::generic_i1e< T, double >::run(), Eigen::internal::generic_k0e< T, float >::run(), Eigen::internal::generic_k0e< T, double >::run(), Eigen::internal::generic_k0< T, float >::run(), Eigen::internal::generic_k0< T, double >::run(), Eigen::internal::generic_k1e< T, float >::run(), Eigen::internal::generic_k1e< T, double >::run(), Eigen::internal::generic_k1< T, float >::run(), Eigen::internal::generic_k1< T, double >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_y0< T, float >::run(), Eigen::internal::generic_y0< T, double >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), Eigen::internal::generic_y1< T, float >::run(), Eigen::internal::generic_y1< T, double >::run(), Eigen::internal::generic_fast_erf< Scalar >::run(), and Eigen::internal::generic_fast_erfc< Scalar >::run().

◆ pdiv< Packet16bf >()

2896  {
2898 }
EIGEN_STRONG_INLINE Packet16f pdiv< Packet16f >(const Packet16f &a, const Packet16f &b)
Definition: AVX512/PacketMath.h:464

References a, b, Bf16ToF32(), F32ToBf16(), and pdiv< Packet16f >().

◆ pdiv< Packet16c >()

1210  {
1211  eigen_assert(false && "packet integer division are not supported by NEON");
1212  return pset1<Packet16c>(0);
1213 }
EIGEN_STRONG_INLINE Packet16c pset1< Packet16c >(const signed char &from)
Definition: AltiVec/PacketMath.h:793

References eigen_assert, and pset1< Packet16c >().

◆ pdiv< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pdiv< Packet16f > ( const Packet16f a,
const Packet16f b 
)
464  {
465  return _mm512_div_ps(a, b);
466 }

References a, and b.

Referenced by pdiv< Packet16bf >().

◆ pdiv< Packet16h >()

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pdiv< Packet16h > ( const Packet16h a,
const Packet16h b 
)
2398  {
2399  Packet16f af = half2float(a);
2400  Packet16f bf = half2float(b);
2401  Packet16f rf = pdiv(af, bf);
2402  return float2half(rf);
2403 }

References a, b, float2half(), half2float(), and pdiv().

◆ pdiv< Packet16i >()

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pdiv< Packet16i > ( const Packet16i a,
const Packet16i b 
)
474  {
475  Packet8i q_lo = pdiv<Packet8i>(_mm512_extracti64x4_epi64(a, 0), _mm512_extracti64x4_epi64(b, 0));
476  Packet8i q_hi = pdiv<Packet8i>(_mm512_extracti64x4_epi64(a, 1), _mm512_extracti64x4_epi64(b, 1));
477  return _mm512_inserti64x4(_mm512_castsi256_si512(q_lo), q_hi, 1);
478 }
EIGEN_STRONG_INLINE Packet8i pdiv< Packet8i >(const Packet8i &a, const Packet8i &b)
Definition: AVX/PacketMath.h:965

References a, b, and pdiv< Packet8i >().

◆ pdiv< Packet16uc >()

2789  {
2790  return __lsx_vdiv_bu(a, b);
2791 }

References a, and b.

◆ pdiv< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pdiv< Packet1cd > ( const Packet1cd a,
const Packet1cd b 
)
427  {
428  return pdiv_complex(a, b);
429 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pdiv_complex(const Packet &x, const Packet &y)
Definition: GenericPacketMathFunctions.h:1318

References a, b, and pdiv_complex().

◆ pdiv< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pdiv< Packet1cf > ( const Packet1cf a,
const Packet1cf b 
)
457  {
458  return pdiv_complex(a, b);
459 }

References a, b, and pdiv_complex().

◆ pdiv< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::pdiv< Packet2cd > ( const Packet2cd a,
const Packet2cd b 
)
401  {
402  return pdiv_complex(a, b);
403 }

References a, b, and pdiv_complex().

◆ pdiv< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pdiv< Packet2cf > ( const Packet2cf a,
const Packet2cf b 
)
330  {
331  return pdiv_complex(a, b);
332 }

References a, b, and pdiv_complex().

◆ pdiv< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pdiv< Packet2d > ( const Packet2d a,
const Packet2d b 
)
782  {
783  return __lsx_vfdiv_d(a, b);
784 }

References a, and b.

◆ pdiv< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pdiv< Packet2f > ( const Packet2f a,
const Packet2f b 
)
4717  {
4718  return pdiv_float_common(a, b);
4719 }
EIGEN_STRONG_INLINE Packet pdiv_float_common(const Packet &a, const Packet &b)
Definition: NEON/PacketMath.h:4696

References a, b, and pdiv_float_common().

◆ pdiv< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pdiv< Packet2i > ( const Packet2i ,
const Packet2i  
)
1250  {
1251  eigen_assert(false && "packet integer division are not supported by NEON");
1252  return pset1<Packet2i>(0);
1253 }
EIGEN_STRONG_INLINE Packet2i pset1< Packet2i >(const int32_t &from)
Definition: NEON/PacketMath.h:717

References eigen_assert, and pset1< Packet2i >().

◆ pdiv< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pdiv< Packet2l > ( const Packet2l a,
const Packet2l b 
)
794  {
795  return __lsx_vdiv_d(a, b);
796 }

References a, and b.

◆ pdiv< Packet2ui >()

1260  {
1261  eigen_assert(false && "packet integer division are not supported by NEON");
1262  return pset1<Packet2ui>(0);
1263 }
EIGEN_STRONG_INLINE Packet2ui pset1< Packet2ui >(const uint32_t &from)
Definition: NEON/PacketMath.h:725

References eigen_assert, and pset1< Packet2ui >().

◆ pdiv< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pdiv< Packet2ul > ( const Packet2ul a,
const Packet2ul b 
)
806  {
807  return __lsx_vdiv_du(a, b);
808 }

References a, and b.

◆ pdiv< Packet32h >()

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pdiv< Packet32h > ( const Packet32h a,
const Packet32h b 
)
344  {
345  return _mm512_div_ph(a, b);
346 }

References a, and b.

◆ pdiv< Packet4bf >()

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pdiv< Packet4bf > ( const Packet4bf a,
const Packet4bf b 
)
4968  {
4970 }
EIGEN_STRONG_INLINE Packet4f pdiv< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1187

References a, b, Bf16ToF32(), F32ToBf16(), and pdiv< Packet4f >().

◆ pdiv< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pdiv< Packet4c > ( const Packet4c ,
const Packet4c  
)
1200  {
1201  eigen_assert(false && "packet integer division are not supported by NEON");
1202  return pset1<Packet4c>(0);
1203 }
EIGEN_STRONG_INLINE Packet4c pset1< Packet4c >(const int8_t &from)
Definition: NEON/PacketMath.h:677

References eigen_assert, and pset1< Packet4c >().

◆ pdiv< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::pdiv< Packet4cd > ( const Packet4cd a,
const Packet4cd b 
)
383  {
384  return pdiv_complex(a, b);
385 }

References a, b, and pdiv_complex().

◆ pdiv< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::pdiv< Packet4cf > ( const Packet4cf a,
const Packet4cf b 
)
215  {
216  return pdiv_complex(a, b);
217 }

References a, b, and pdiv_complex().

◆ pdiv< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pdiv< Packet4d > ( const Packet4d a,
const Packet4d b 
)
960  {
961  return _mm256_div_pd(a, b);
962 }

References a, and b.

◆ pdiv< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pdiv< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1187  {
1188 #ifndef __VSX__ // VSX actually provides a div instruction
1189  Packet4f t, y_0, y_1;
1190 
1191  // Altivec does not offer a divide instruction, we have to do a reciprocal approximation
1192  y_0 = vec_re(b);
1193 
1194  // Do one Newton-Raphson iteration to get the needed accuracy
1195  t = vec_nmsub(y_0, b, p4f_ONE);
1196  y_1 = vec_madd(y_0, t, y_0);
1197 
1198  return vec_madd(a, y_1, p4f_MZERO);
1199 #else
1200  return vec_div(a, b);
1201 #endif
1202 }
static Packet4f p4f_ONE
Definition: AltiVec/PacketMath.h:84
static Packet4f p4f_MZERO
Definition: AltiVec/PacketMath.h:81

References a, b, p4f_MZERO, p4f_ONE, and plotPSD::t.

Referenced by pdiv< Packet4bf >(), and pdiv< Packet8bf >().

◆ pdiv< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pdiv< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1205  {
1206 #if defined(_ARCH_PWR10) && (EIGEN_COMP_LLVM || EIGEN_GNUC_STRICT_AT_LEAST(11, 0, 0))
1207  return vec_div(a, b);
1208 #else
1211  eigen_assert(false && "packet integer division are not supported by AltiVec");
1212  return pset1<Packet4i>(0);
1213 #endif
1214 }

References a, b, eigen_assert, EIGEN_UNUSED_VARIABLE, and pset1< Packet4i >().

Referenced by pdiv< Packet8i >().

◆ pdiv< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pdiv< Packet4s > ( const Packet4s ,
const Packet4s  
)
1230  {
1231  eigen_assert(false && "packet integer division are not supported by NEON");
1232  return pset1<Packet4s>(0);
1233 }
EIGEN_STRONG_INLINE Packet4s pset1< Packet4s >(const int16_t &from)
Definition: NEON/PacketMath.h:701

References eigen_assert, and pset1< Packet4s >().

◆ pdiv< Packet4uc >()

1215  {
1216  eigen_assert(false && "packet integer division are not supported by NEON");
1217  return pset1<Packet4uc>(0);
1218 }
EIGEN_STRONG_INLINE Packet4uc pset1< Packet4uc >(const uint8_t &from)
Definition: NEON/PacketMath.h:689

References eigen_assert, and pset1< Packet4uc >().

◆ pdiv< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pdiv< Packet4ui > ( const Packet4ui a,
const Packet4ui b 
)
802  {
803  return __lsx_vdiv_wu(a, b);
804 }

References a, and b.

◆ pdiv< Packet4us >()

1240  {
1241  eigen_assert(false && "packet integer division are not supported by NEON");
1242  return pset1<Packet4us>(0);
1243 }
EIGEN_STRONG_INLINE Packet4us pset1< Packet4us >(const uint16_t &from)
Definition: NEON/PacketMath.h:709

References eigen_assert, and pset1< Packet4us >().

◆ pdiv< Packet8bf >()

◆ pdiv< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pdiv< Packet8c > ( const Packet8c ,
const Packet8c  
)
1205  {
1206  eigen_assert(false && "packet integer division are not supported by NEON");
1207  return pset1<Packet8c>(0);
1208 }
EIGEN_STRONG_INLINE Packet8c pset1< Packet8c >(const int8_t &from)
Definition: NEON/PacketMath.h:681

References eigen_assert, and pset1< Packet8c >().

◆ pdiv< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::pdiv< Packet8cf > ( const Packet8cf a,
const Packet8cf b 
)
197  {
198  return pdiv_complex(a, b);
199 }

References a, b, and pdiv_complex().

◆ pdiv< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pdiv< Packet8d > ( const Packet8d a,
const Packet8d b 
)
469  {
470  return _mm512_div_pd(a, b);
471 }

References a, and b.

◆ pdiv< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pdiv< Packet8f > ( const Packet8f a,
const Packet8f b 
)
956  {
957  return _mm256_div_ps(a, b);
958 }

References a, and b.

◆ pdiv< Packet8h >()

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pdiv< Packet8h > ( const Packet8h a,
const Packet8h b 
)
2414  {
2415  Packet8f af = half2float(a);
2416  Packet8f bf = half2float(b);
2417  Packet8f rf = pdiv(af, bf);
2418  return float2half(rf);
2419 }

References a, b, float2half(), half2float(), and pdiv().

◆ pdiv< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pdiv< Packet8i > ( const Packet8i a,
const Packet8i b 
)
965  {
966 #ifdef EIGEN_VECTORIZE_AVX512
967  return _mm512_cvttpd_epi32(_mm512_div_pd(_mm512_cvtepi32_pd(a), _mm512_cvtepi32_pd(b)));
968 #else
969  Packet4i lo = pdiv<Packet4i>(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
970  Packet4i hi = pdiv<Packet4i>(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
971  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), hi, 1);
972 #endif
973 }
EIGEN_STRONG_INLINE Packet4i pdiv< Packet4i >(const Packet4i &a, const Packet4i &b)
Definition: AltiVec/PacketMath.h:1205

References a, b, and pdiv< Packet4i >().

Referenced by pdiv< Packet16i >().

◆ pdiv< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pdiv< Packet8s > ( const Packet8s a,
const Packet8s b 
)
786  {
787  return __lsx_vdiv_h(a, b);
788 }

References a, and b.

◆ pdiv< Packet8uc >()

1220  {
1221  eigen_assert(false && "packet integer division are not supported by NEON");
1222  return pset1<Packet8uc>(0);
1223 }
EIGEN_STRONG_INLINE Packet8uc pset1< Packet8uc >(const uint8_t &from)
Definition: NEON/PacketMath.h:693

References eigen_assert, and pset1< Packet8uc >().

◆ pdiv< Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pdiv< Packet8us > ( const Packet8us a,
const Packet8us b 
)
798  {
799  return __lsx_vdiv_hu(a, b);
800 }

References a, and b.

◆ pdiv< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pdiv< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
426  {
427  return svdiv_f32_x(svptrue_b32(), a, b);
428 }

References a, and b.

◆ pdiv< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pdiv< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
118  {
119  return svdiv_s32_x(svptrue_b32(), a, b);
120 }

References a, and b.

◆ pdiv_complex()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pdiv_complex ( const Packet x,
const Packet y 
)
Returns
x / y for complex types
1318  {
1319  typedef typename unpacket_traits<Packet>::as_real RealPacket;
1320  // In the following we annotate the code for the case where the inputs
1321  // are a pair length-2 SIMD vectors representing a single pair of complex
1322  // numbers x = a + i*b, y = c + i*d.
1323  const RealPacket y_abs = pabs(y.v); // |c|, |d|
1324  const RealPacket y_abs_flip = pcplxflip(Packet(y_abs)).v; // |d|, |c|
1325  const RealPacket y_max = pmax(y_abs, y_abs_flip); // max(|c|, |d|), max(|c|, |d|)
1326  const RealPacket y_scaled = pdiv(y.v, y_max); // c / max(|c|, |d|), d / max(|c|, |d|)
1327  // Compute scaled denominator.
1328  const RealPacket y_scaled_sq = pmul(y_scaled, y_scaled); // c'**2, d'**2
1329  const RealPacket denom = padd(y_scaled_sq, pcplxflip(Packet(y_scaled_sq)).v);
1330  Packet result_scaled = pmul(x, pconj(Packet(y_scaled))); // a * c' + b * d', -a * d + b * c
1331  // Divide elementwise by denom.
1332  result_scaled = Packet(pdiv(result_scaled.v, denom));
1333  // Rescale result
1334  return Packet(pdiv(result_scaled.v, y_max));
1335 }
EIGEN_STRONG_INLINE Packet2cf pconj(const Packet2cf &a)
Definition: AltiVec/Complex.h:268
EIGEN_STRONG_INLINE Packet2cf pcplxflip(const Packet2cf &x)
Definition: LSX/Complex.h:218
Packet4f v
Definition: AltiVec/Complex.h:78

References pabs(), padd(), pconj(), pcplxflip(), pdiv(), pmax(), pmul(), v, Eigen::internal::Packet2cf::v, plotDoE::x, and y.

Referenced by Eigen::internal::Packet2cf::operator/(), pdiv< Packet1cd >(), pdiv< Packet1cf >(), pdiv< Packet2cd >(), pdiv< Packet2cf >(), pdiv< Packet4cd >(), pdiv< Packet4cf >(), and pdiv< Packet8cf >().

◆ pdiv_float_common()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::pdiv_float_common ( const Packet a,
const Packet b 
)
4696  {
4697  // if b is large, NEON intrinsics will flush preciprocal(b) to zero
4698  // avoid underflow with the following manipulation:
4699  // a / b = f * (a * reciprocal(f * b))
4700 
4701  const Packet cst_one = pset1<Packet>(1.0f);
4702  const Packet cst_quarter = pset1<Packet>(0.25f);
4703  const Packet cst_thresh = pset1<Packet>(NumTraits<float>::highest() / 4.0f);
4704 
4705  Packet b_will_underflow = pcmp_le(cst_thresh, pabs(b));
4706  Packet f = pselect(b_will_underflow, cst_quarter, cst_one);
4707  Packet result = pmul(f, pmul(a, preciprocal(pmul(b, f))));
4708  return result;
4709 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4bf pselect(const Packet4bf &mask, const Packet4bf &a, const Packet4bf &b)
Definition: NEON/PacketMath.h:4918
EIGEN_STRONG_INLINE Packet4bf pabs(const Packet4bf &a)
Definition: NEON/PacketMath.h:4860

References a, b, f(), pabs(), pcmp_le(), pmul(), preciprocal(), and pselect().

Referenced by pdiv< Packet2f >().

◆ perf()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::perf ( const Packet a)
Returns
the erf(a) (coeff-wise)
50  {
51  using numext::erf;
52  return erf(a);
53 }

References a.

Referenced by packetmath_real(), and Eigen::internal::scalar_erf_op< Scalar >::packetOp().

◆ perfc()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::perfc ( const Packet a)
Returns
the erfc(a) (coeff-wise)
57  {
58  using numext::erfc;
59  return erfc(a);
60 }

References a.

Referenced by packetmath_real(), and Eigen::internal::scalar_erfc_op< Scalar >::packetOp().

◆ permute_symm_to_fullsymm()

template<int Mode, bool NonHermitian, typename MatrixType , int DestOrder>
void Eigen::internal::permute_symm_to_fullsymm ( const MatrixType mat,
SparseMatrix< typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex > &  _dest,
const typename MatrixType::StorageIndex *  perm = 0 
)
412  {
413  typedef typename MatrixType::StorageIndex StorageIndex;
414  typedef typename MatrixType::Scalar Scalar;
415  typedef SparseMatrix<Scalar, DestOrder, StorageIndex> Dest;
416  typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
417  typedef evaluator<MatrixType> MatEval;
418  typedef typename evaluator<MatrixType>::InnerIterator MatIterator;
419 
420  MatEval matEval(mat);
421  Dest& dest(_dest.derived());
422  enum { StorageOrderMatch = int(Dest::IsRowMajor) == int(MatrixType::IsRowMajor) };
423 
424  Index size = mat.rows();
425  VectorI count;
426  count.resize(size);
427  count.setZero();
428  dest.resize(size, size);
429  for (Index j = 0; j < size; ++j) {
430  Index jp = perm ? perm[j] : j;
431  for (MatIterator it(matEval, j); it; ++it) {
432  Index i = it.index();
433  Index r = it.row();
434  Index c = it.col();
435  Index ip = perm ? perm[i] : i;
436  if (Mode == int(Upper | Lower))
437  count[StorageOrderMatch ? jp : ip]++;
438  else if (r == c)
439  count[ip]++;
440  else if ((Mode == Lower && r > c) || (Mode == Upper && r < c)) {
441  count[ip]++;
442  count[jp]++;
443  }
444  }
445  }
446  Index nnz = count.sum();
447 
448  // reserve space
449  dest.resizeNonZeros(nnz);
450  dest.outerIndexPtr()[0] = 0;
451  for (Index j = 0; j < size; ++j) dest.outerIndexPtr()[j + 1] = dest.outerIndexPtr()[j] + count[j];
452  for (Index j = 0; j < size; ++j) count[j] = dest.outerIndexPtr()[j];
453 
454  // copy data
455  for (StorageIndex j = 0; j < size; ++j) {
456  for (MatIterator it(matEval, j); it; ++it) {
457  StorageIndex i = internal::convert_index<StorageIndex>(it.index());
458  Index r = it.row();
459  Index c = it.col();
460 
461  StorageIndex jp = perm ? perm[j] : j;
462  StorageIndex ip = perm ? perm[i] : i;
463 
464  if (Mode == int(Upper | Lower)) {
465  Index k = count[StorageOrderMatch ? jp : ip]++;
466  dest.innerIndexPtr()[k] = StorageOrderMatch ? ip : jp;
467  dest.valuePtr()[k] = it.value();
468  } else if (r == c) {
469  Index k = count[ip]++;
470  dest.innerIndexPtr()[k] = ip;
471  dest.valuePtr()[k] = it.value();
472  } else if (((Mode & Lower) == Lower && r > c) || ((Mode & Upper) == Upper && r < c)) {
473  if (!StorageOrderMatch) std::swap(ip, jp);
474  Index k = count[jp]++;
475  dest.innerIndexPtr()[k] = ip;
476  dest.valuePtr()[k] = it.value();
477  k = count[ip]++;
478  dest.innerIndexPtr()[k] = jp;
479  dest.valuePtr()[k] = (NonHermitian ? it.value() : numext::conj(it.value()));
480  }
481  }
482  }
483 }

References calibrate::c, conj(), Eigen::SparseMatrixBase< Derived >::derived(), i, int(), j, k, Eigen::Lower, UniformPSDSelfTest::r, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), size, swap(), and Eigen::Upper.

◆ permute_symm_to_symm() [1/2]

template<int SrcMode, int DstMode, bool NonHermitian, typename MatrixType , int DestOrder>
void Eigen::internal::permute_symm_to_symm ( const MatrixType mat,
SparseMatrix< typename MatrixType::Scalar, DestOrder, typename MatrixType::StorageIndex > &  _dest,
const typename MatrixType::StorageIndex *  perm = 0 
)

◆ permute_symm_to_symm() [2/2]

template<int SrcMode_, int DstMode_, bool NonHermitian, typename MatrixType , int DstOrder>
void Eigen::internal::permute_symm_to_symm ( const MatrixType mat,
SparseMatrix< typename MatrixType::Scalar, DstOrder, typename MatrixType::StorageIndex > &  _dest,
const typename MatrixType::StorageIndex *  perm 
)
488  {
489  typedef typename MatrixType::StorageIndex StorageIndex;
490  typedef typename MatrixType::Scalar Scalar;
491  SparseMatrix<Scalar, DstOrder, StorageIndex>& dest(_dest.derived());
492  typedef Matrix<StorageIndex, Dynamic, 1> VectorI;
493  typedef evaluator<MatrixType> MatEval;
494  typedef typename evaluator<MatrixType>::InnerIterator MatIterator;
495 
496  enum {
497  SrcOrder = MatrixType::IsRowMajor ? RowMajor : ColMajor,
498  StorageOrderMatch = int(SrcOrder) == int(DstOrder),
499  DstMode = DstOrder == RowMajor ? (DstMode_ == Upper ? Lower : Upper) : DstMode_,
500  SrcMode = SrcOrder == RowMajor ? (SrcMode_ == Upper ? Lower : Upper) : SrcMode_
501  };
502 
503  MatEval matEval(mat);
504 
505  Index size = mat.rows();
506  VectorI count(size);
507  count.setZero();
508  dest.resize(size, size);
509  for (StorageIndex j = 0; j < size; ++j) {
510  StorageIndex jp = perm ? perm[j] : j;
511  for (MatIterator it(matEval, j); it; ++it) {
512  StorageIndex i = it.index();
513  if ((int(SrcMode) == int(Lower) && i < j) || (int(SrcMode) == int(Upper) && i > j)) continue;
514 
515  StorageIndex ip = perm ? perm[i] : i;
516  count[int(DstMode) == int(Lower) ? (std::min)(ip, jp) : (std::max)(ip, jp)]++;
517  }
518  }
519  dest.outerIndexPtr()[0] = 0;
520  for (Index j = 0; j < size; ++j) dest.outerIndexPtr()[j + 1] = dest.outerIndexPtr()[j] + count[j];
521  dest.resizeNonZeros(dest.outerIndexPtr()[size]);
522  for (Index j = 0; j < size; ++j) count[j] = dest.outerIndexPtr()[j];
523 
524  for (StorageIndex j = 0; j < size; ++j) {
525  for (MatIterator it(matEval, j); it; ++it) {
526  StorageIndex i = it.index();
527  if ((int(SrcMode) == int(Lower) && i < j) || (int(SrcMode) == int(Upper) && i > j)) continue;
528 
529  StorageIndex jp = perm ? perm[j] : j;
530  StorageIndex ip = perm ? perm[i] : i;
531 
532  Index k = count[int(DstMode) == int(Lower) ? (std::min)(ip, jp) : (std::max)(ip, jp)]++;
533  dest.innerIndexPtr()[k] = int(DstMode) == int(Lower) ? (std::max)(ip, jp) : (std::min)(ip, jp);
534 
535  if (!StorageOrderMatch) std::swap(ip, jp);
536  if (((int(DstMode) == int(Lower) && ip < jp) || (int(DstMode) == int(Upper) && ip > jp)))
537  dest.valuePtr()[k] = (NonHermitian ? it.value() : numext::conj(it.value()));
538  else
539  dest.valuePtr()[k] = it.value();
540  }
541  }
542 }

References Eigen::ColMajor, conj(), Eigen::SparseMatrixBase< Derived >::derived(), i, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::innerIndexPtr(), int(), j, k, Eigen::Lower, max, min, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::outerIndexPtr(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::resize(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::resizeNonZeros(), Eigen::RowMajor, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), size, swap(), Eigen::Upper, and Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::valuePtr().

◆ peven_mask() [1/14]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::peven_mask ( const Packet )
inline
Returns
a packet with constant coefficients a, e.g.: (x, 0, x, 0), where x is the value of all 1-bits.
879  {
880  typedef typename unpacket_traits<Packet>::type Scalar;
881  const size_t n = unpacket_traits<Packet>::size;
882  EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) Scalar elements[n];
883  for (size_t i = 0; i < n; ++i) {
884  memset(elements + i, ((i & 1) == 0 ? 0xff : 0), sizeof(Scalar));
885  }
886  return ploadu<Packet>(elements);
887 }
#define EIGEN_ALIGN_TO_BOUNDARY(n)
Definition: ConfigureVectorization.h:37

References EIGEN_ALIGN_TO_BOUNDARY, i, and n.

◆ peven_mask() [2/14]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::peven_mask ( const Packet16f )
297  {
298  return _mm512_castsi512_ps(_mm512_set_epi32(0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1));
299 }

◆ peven_mask() [3/14]

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::peven_mask ( const Packet16i )
301  {
302  return _mm512_set_epi32(0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1);
303 }

◆ peven_mask() [4/14]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::peven_mask ( const Packet2d )
436  {
437  return _mm_castsi128_pd(_mm_set_epi32(0, 0, -1, -1));
438 }

◆ peven_mask() [5/14]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::peven_mask ( const Packet2l )
424  {
425  return _mm_set_epi32(0, 0, -1, -1);
426 }

◆ peven_mask() [6/14]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::peven_mask ( const Packet4d )
803  {
804  return _mm256_castsi256_pd(_mm256_set_epi32(0, 0, -1, -1, 0, 0, -1, -1));
805 }

◆ peven_mask() [7/14]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::peven_mask ( const Packet4f )
420  {
421  return _mm_castsi128_ps(_mm_set_epi32(0, -1, 0, -1));
422 }

◆ peven_mask() [8/14]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::peven_mask ( const Packet4i )
428  {
429  return _mm_set_epi32(0, -1, 0, -1);
430 }

◆ peven_mask() [9/14]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::peven_mask ( const Packet4ui )
432  {
433  return _mm_set_epi32(0, -1, 0, -1);
434 }

◆ peven_mask() [10/14]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::peven_mask ( const Packet8d )
305  {
306  return _mm512_castsi512_pd(_mm512_set_epi32(0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1));
307 }

◆ peven_mask() [11/14]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::peven_mask ( const Packet8f )
791  {
792  return _mm256_castsi256_ps(_mm256_set_epi32(0, -1, 0, -1, 0, -1, 0, -1));
793 }

Referenced by paddsub(), pexp_complex(), phypot_complex(), plog_complex(), psincos_double(), psincos_float(), and psqrt_complex().

◆ peven_mask() [12/14]

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::peven_mask ( const Packet8i )
795  {
796  return _mm256_set_epi32(0, -1, 0, -1, 0, -1, 0, -1);
797 }

◆ peven_mask() [13/14]

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::peven_mask ( const Packet8l )
309  {
310  return _mm512_set_epi32(0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1);
311 }

◆ peven_mask() [14/14]

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::peven_mask ( const Packet8ui )
799  {
800  return _mm256_set_epi32(0, -1, 0, -1, 0, -1, 0, -1);
801 }

◆ pexp() [1/3]

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pexp ( const Packet a)
Returns
the exp of a (coeff-wise)
1085  {
1086  return numext::exp(a);
1087 }

References a, and Eigen::numext::exp().

◆ pexp() [2/3]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pexp ( const Packet2d _x)
2667  {
2668  return pexp_double(_x);
2669 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_double(const Packet _x)
Definition: GenericPacketMathFunctions.h:561

References pexp_double().

◆ pexp() [3/3]

◆ pexp2()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pexp2 ( const Packet a)
Returns
the exp2 of a (coeff-wise)
1091  {
1092  return numext::exp2(a);
1093 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 exp2(const bfloat16 &a)
Definition: BFloat16.h:616

References a, and Eigen::numext::exp2().

Referenced by Eigen::internal::scalar_exp2_op< Scalar >::operator()(), packetmath_real(), and Eigen::internal::scalar_exp2_op< Scalar >::packetOp().

◆ pexp2< Packet8bf >()

◆ pexp< Packet16h >()

◆ pexp< Packet1cf >()

493  {
494  return pexp_complex(a);
495 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp_complex(const Packet &a)
Definition: GenericPacketMathFunctions.h:1366

References a, and pexp_complex().

◆ pexp< Packet2cf >() [1/2]

380  {
381  return pexp_complex<Packet2cf>(a);
382 }

References a.

◆ pexp< Packet2cf >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pexp< Packet2cf > ( const Packet2cf a,
const Packet2cf b 
)
441  {
442  return pexp_complex(a, b);
443 }

References a, b, and pexp_complex().

◆ pexp< Packet2d >()

320  {
321  // Limiting double-precision pexp's argument to [-1024, +1024] lets pexp
322  // reach 0 and INFINITY naturally.
323  static EIGEN_DECLARE_CONST_Packet2d(exp_lo, -1024.0);
324  static EIGEN_DECLARE_CONST_Packet2d(exp_hi, +1024.0);
325  static EIGEN_DECLARE_CONST_Packet2d(cephes_LOG2EF, 1.4426950408889634073599);
326  static EIGEN_DECLARE_CONST_Packet2d(cephes_exp_C1, 0.693145751953125);
327  static EIGEN_DECLARE_CONST_Packet2d(cephes_exp_C2, 1.42860682030941723212e-6);
328  static EIGEN_DECLARE_CONST_Packet2d(cephes_exp_p0, 1.26177193074810590878e-4);
329  static EIGEN_DECLARE_CONST_Packet2d(cephes_exp_p1, 3.02994407707441961300e-2);
330  static EIGEN_DECLARE_CONST_Packet2d(cephes_exp_p2, 9.99999999999999999910e-1);
331  static EIGEN_DECLARE_CONST_Packet2d(cephes_exp_q0, 3.00198505138664455042e-6);
332  static EIGEN_DECLARE_CONST_Packet2d(cephes_exp_q1, 2.52448340349684104192e-3);
333  static EIGEN_DECLARE_CONST_Packet2d(cephes_exp_q2, 2.27265548208155028766e-1);
334  static EIGEN_DECLARE_CONST_Packet2d(cephes_exp_q3, 2.00000000000000000009e0);
335  static EIGEN_DECLARE_CONST_Packet2d(half, 0.5);
336  static EIGEN_DECLARE_CONST_Packet2d(1, 1.0);
337  static EIGEN_DECLARE_CONST_Packet2d(2, 2.0);
338 
339  Packet2d x = _x;
340 
341  // Clamp x.
342  x = (Packet2d)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_d(x, p2d_exp_lo), (v16u8)x, (v16u8)p2d_exp_lo);
343  x = (Packet2d)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_d(p2d_exp_hi, x), (v16u8)x, (v16u8)p2d_exp_hi);
344 
345  // Round to nearest integer by adding 0.5 (with x's sign) and truncating.
346  Packet2d x2_add = (Packet2d)__builtin_msa_binsli_d((v2u64)p2d_half, (v2u64)x, 0);
347  Packet2d x2 = pmadd(x, p2d_cephes_LOG2EF, x2_add);
348  Packet2l x2_long = __builtin_msa_ftrunc_s_d(x2);
349  Packet2d x2_long_d = __builtin_msa_ffint_s_d(x2_long);
350 
351  x = __builtin_msa_fmsub_d(x, x2_long_d, p2d_cephes_exp_C1);
352  x = __builtin_msa_fmsub_d(x, x2_long_d, p2d_cephes_exp_C2);
353 
354  x2 = pmul(x, x);
355 
356  Packet2d px = p2d_cephes_exp_p0;
357  px = pmadd(px, x2, p2d_cephes_exp_p1);
358  px = pmadd(px, x2, p2d_cephes_exp_p2);
359  px = pmul(px, x);
360 
361  Packet2d qx = p2d_cephes_exp_q0;
362  qx = pmadd(qx, x2, p2d_cephes_exp_q1);
363  qx = pmadd(qx, x2, p2d_cephes_exp_q2);
364  qx = pmadd(qx, x2, p2d_cephes_exp_q3);
365 
366  x = pdiv(px, psub(qx, px));
367  x = pmadd(p2d_2, x, p2d_1);
368 
369  // x *= 2**exponent.
370  x = __builtin_msa_fexp2_d(x, x2_long);
371 
372  return x;
373 }
#define EIGEN_DECLARE_CONST_Packet2d(NAME, X)
Definition: AltiVec/PacketMath.h:61
RealScalar RealScalar * px
Definition: level1_cplx_impl.h:27

References EIGEN_DECLARE_CONST_Packet2d(), pdiv(), pmadd(), pmul(), psub(), px, plotDoE::x, and Global_parameters::x2().

◆ pexp< Packet32h >()

802  {
803  Packet16h low;
804  Packet16h high;
805  extract2Packet16h(a, low, high);
806 
807  Packet16h lowOut = pexp(low);
808  Packet16h highOut = pexp(high);
809 
810  return combine2Packet16h(lowOut, highOut);
811 }

References a, combine2Packet16h(), extract2Packet16h(), and pexp().

◆ pexp< Packet4cf >()

454  {
455  return pexp_complex<Packet4cf>(a);
456 }

References a.

◆ pexp< Packet4f >()

124  {
125  // Limiting single-precision pexp's argument to [-128, +128] lets pexp
126  // reach 0 and INFINITY naturally.
127  static EIGEN_DECLARE_CONST_Packet4f(exp_lo, -128.0f);
128  static EIGEN_DECLARE_CONST_Packet4f(exp_hi, +128.0f);
129  static EIGEN_DECLARE_CONST_Packet4f(cephes_LOG2EF, 1.44269504088896341f);
130  static EIGEN_DECLARE_CONST_Packet4f(cephes_exp_C1, 0.693359375f);
131  static EIGEN_DECLARE_CONST_Packet4f(cephes_exp_C2, -2.12194440e-4f);
132  static EIGEN_DECLARE_CONST_Packet4f(cephes_exp_p0, 1.9875691500e-4f);
133  static EIGEN_DECLARE_CONST_Packet4f(cephes_exp_p1, 1.3981999507e-3f);
134  static EIGEN_DECLARE_CONST_Packet4f(cephes_exp_p2, 8.3334519073e-3f);
135  static EIGEN_DECLARE_CONST_Packet4f(cephes_exp_p3, 4.1665795894e-2f);
136  static EIGEN_DECLARE_CONST_Packet4f(cephes_exp_p4, 1.6666665459e-1f);
137  static EIGEN_DECLARE_CONST_Packet4f(cephes_exp_p5, 5.0000001201e-1f);
138  static EIGEN_DECLARE_CONST_Packet4f(half, 0.5f);
139  static EIGEN_DECLARE_CONST_Packet4f(1, 1.0f);
140 
141  Packet4f x = _x;
142 
143  // Clamp x.
144  x = (Packet4f)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_w(x, p4f_exp_lo), (v16u8)x, (v16u8)p4f_exp_lo);
145  x = (Packet4f)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_w(p4f_exp_hi, x), (v16u8)x, (v16u8)p4f_exp_hi);
146 
147  // Round to nearest integer by adding 0.5 (with x's sign) and truncating.
148  Packet4f x2_add = (Packet4f)__builtin_msa_binsli_w((v4u32)p4f_half, (v4u32)x, 0);
149  Packet4f x2 = pmadd(x, p4f_cephes_LOG2EF, x2_add);
150  Packet4i x2_int = __builtin_msa_ftrunc_s_w(x2);
151  Packet4f x2_int_f = __builtin_msa_ffint_s_w(x2_int);
152 
153  x = __builtin_msa_fmsub_w(x, x2_int_f, p4f_cephes_exp_C1);
154  x = __builtin_msa_fmsub_w(x, x2_int_f, p4f_cephes_exp_C2);
155 
156  Packet4f z = pmul(x, x);
157 
158  Packet4f y = p4f_cephes_exp_p0;
159  y = pmadd(y, x, p4f_cephes_exp_p1);
160  y = pmadd(y, x, p4f_cephes_exp_p2);
161  y = pmadd(y, x, p4f_cephes_exp_p3);
162  y = pmadd(y, x, p4f_cephes_exp_p4);
163  y = pmadd(y, x, p4f_cephes_exp_p5);
164  y = pmadd(y, z, x);
165  y = padd(y, p4f_1);
166 
167  // y *= 2**exponent.
168  y = __builtin_msa_fexp2_w(y, x2_int);
169 
170  return y;
171 }
#define EIGEN_DECLARE_CONST_Packet4f(NAME, X)
Definition: AltiVec/PacketMath.h:57

References EIGEN_DECLARE_CONST_Packet4f(), padd(), pmadd(), pmul(), plotDoE::x, Global_parameters::x2(), and y.

◆ pexp< Packet8bf >()

◆ pexp< Packet8cf >()

465  {
466  return pexp_complex<Packet8cf>(a);
467 }

References a.

◆ pexp< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pexp< PacketXf > ( const PacketXf &  x)
20  {
21  return pexp_float(x);
22 }

References pexp_float(), and plotDoE::x.

◆ pexp_complex()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pexp_complex ( const Packet x)
Returns
exp(x) for complex types
1366  {
1367  typedef typename unpacket_traits<Packet>::as_real RealPacket;
1368  typedef typename unpacket_traits<Packet>::type Scalar;
1369  typedef typename Scalar::value_type RealScalar;
1370  const RealPacket even_mask = peven_mask(a.v);
1371  const RealPacket odd_mask = pcplxflip(Packet(even_mask)).v;
1372 
1373  // Let a = x + iy.
1374  // exp(a) = exp(x) * cis(y), plus some special edge-case handling.
1375 
1376  // exp(x):
1377  RealPacket x = pand(a.v, even_mask);
1378  x = por(x, pcplxflip(Packet(x)).v);
1379  RealPacket expx = pexp(x); // exp(x);
1380 
1381  // cis(y):
1382  RealPacket y = pand(odd_mask, a.v);
1383  y = por(y, pcplxflip(Packet(y)).v);
1384  RealPacket cisy = psincos_float<false, RealPacket, true>(y);
1385  cisy = pcplxflip(Packet(cisy)).v; // cos(y) + i * sin(y)
1386 
1387  const RealPacket cst_pos_inf = pset1<RealPacket>(NumTraits<RealScalar>::infinity());
1388  const RealPacket cst_neg_inf = pset1<RealPacket>(-NumTraits<RealScalar>::infinity());
1389 
1390  // If x is -inf, we know that cossin(y) is bounded,
1391  // so the result is (0, +/-0), where the sign of the imaginary part comes
1392  // from the sign of cossin(y).
1393  RealPacket cisy_sign = por(pandnot(cisy, pabs(cisy)), pset1<RealPacket>(RealScalar(1)));
1394  cisy = pselect(pcmp_eq(x, cst_neg_inf), cisy_sign, cisy);
1395 
1396  // If x is inf, and cos(y) has unknown sign (y is inf or NaN), the result
1397  // is (+/-inf, NaN), where the signs are undetermined (take the sign of y).
1398  RealPacket y_sign = por(pandnot(y, pabs(y)), pset1<RealPacket>(RealScalar(1)));
1399  cisy = pselect(pand(pcmp_eq(x, cst_pos_inf), pisnan(cisy)), pand(y_sign, even_mask), cisy);
1400  Packet result = Packet(pmul(expx, cisy));
1401 
1402  // If y is +/- 0, the input is real, so take the real result for consistency.
1403  result = pselect(Packet(pcmp_eq(y, pzero(y))), Packet(por(pand(expx, even_mask), pand(y, odd_mask))), result);
1404 
1405  return result;
1406 }
EIGEN_STRONG_INLINE Packet8f peven_mask(const Packet8f &)
Definition: AVX/PacketMath.h:791
Scalar expx
Definition: AutoDiffScalar.h:542

References a, Eigen::expx, pabs(), pand(), pandnot(), pcmp_eq(), pcplxflip(), peven_mask(), pexp(), pisnan(), pmul(), por(), pselect(), pzero(), v, Eigen::internal::Packet2cf::v, plotDoE::x, and y.

Referenced by pexp< Packet1cf >(), and pexp< Packet2cf >().

◆ pexp_double()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pexp_double ( const Packet  _x)
Returns
exp(x) for double precision real numbers
561  {
562  Packet x = _x;
563  const Packet cst_zero = pset1<Packet>(0.0);
564  const Packet cst_1 = pset1<Packet>(1.0);
565  const Packet cst_2 = pset1<Packet>(2.0);
566  const Packet cst_half = pset1<Packet>(0.5);
567 
568  const Packet cst_exp_hi = pset1<Packet>(709.784);
569  const Packet cst_exp_lo = pset1<Packet>(-745.519);
570  const Packet cst_pldexp_threshold = pset1<Packet>(708.0);
571  const Packet cst_cephes_LOG2EF = pset1<Packet>(1.4426950408889634073599);
572  const Packet cst_cephes_exp_p0 = pset1<Packet>(1.26177193074810590878e-4);
573  const Packet cst_cephes_exp_p1 = pset1<Packet>(3.02994407707441961300e-2);
574  const Packet cst_cephes_exp_p2 = pset1<Packet>(9.99999999999999999910e-1);
575  const Packet cst_cephes_exp_q0 = pset1<Packet>(3.00198505138664455042e-6);
576  const Packet cst_cephes_exp_q1 = pset1<Packet>(2.52448340349684104192e-3);
577  const Packet cst_cephes_exp_q2 = pset1<Packet>(2.27265548208155028766e-1);
578  const Packet cst_cephes_exp_q3 = pset1<Packet>(2.00000000000000000009e0);
579  const Packet cst_cephes_exp_C1 = pset1<Packet>(0.693145751953125);
580  const Packet cst_cephes_exp_C2 = pset1<Packet>(1.42860682030941723212e-6);
581 
582  Packet tmp, fx;
583 
584  // clamp x
585  Packet zero_mask = pcmp_lt(_x, cst_exp_lo);
586  x = pmin(x, cst_exp_hi);
587  // Express exp(x) as exp(g + n*log(2)).
588  fx = pmadd(cst_cephes_LOG2EF, x, cst_half);
589 
590  // Get the integer modulus of log(2), i.e. the "n" described above.
591  fx = pfloor(fx);
592 
593  // Get the remainder modulo log(2), i.e. the "g" described above. Subtract
594  // n*log(2) out in two steps, i.e. n*C1 + n*C2, C1+C2=log2 to get the last
595  // digits right.
596  tmp = pmul(fx, cst_cephes_exp_C1);
597  Packet z = pmul(fx, cst_cephes_exp_C2);
598  x = psub(x, tmp);
599  x = psub(x, z);
600 
601  Packet x2 = pmul(x, x);
602 
603  // Evaluate the numerator polynomial of the rational interpolant.
604  Packet px = cst_cephes_exp_p0;
605  px = pmadd(px, x2, cst_cephes_exp_p1);
606  px = pmadd(px, x2, cst_cephes_exp_p2);
607  px = pmul(px, x);
608 
609  // Evaluate the denominator polynomial of the rational interpolant.
610  Packet qx = cst_cephes_exp_q0;
611  qx = pmadd(qx, x2, cst_cephes_exp_q1);
612  qx = pmadd(qx, x2, cst_cephes_exp_q2);
613  qx = pmadd(qx, x2, cst_cephes_exp_q3);
614 
615  // I don't really get this bit, copied from the SSE2 routines, so...
616  // TODO(gonnet): Figure out what is going on here, perhaps find a better
617  // rational interpolant?
618  x = pdiv(px, psub(qx, px));
619  x = pmadd(cst_2, x, cst_1);
620 
621  // Construct the result 2^n * exp(g) = e * x. The max is used to catch
622  // non-finite values in the input.
623  const Packet fast_pldexp_unsafe = pcmp_lt(cst_pldexp_threshold, pabs(_x));
624  if (!predux_any(fast_pldexp_unsafe)) {
625  // For |x| <= 708, we know the result is not zero or inf, and we can safely use
626  // the fast version of pldexp.
627  return pmax(pldexp_fast(x, fx), _x);
628  }
629  return pselect(zero_mask, cst_zero, pmax(pldexp(x, fx), _x));
630 }

References pabs(), pcmp_lt(), pdiv(), pfloor(), pldexp(), pldexp_fast(), pmadd(), pmax(), pmin(), pmul(), predux_any(), pselect(), psub(), px, tmp, plotDoE::x, and Global_parameters::x2().

Referenced by pexp().

◆ pexp_float()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pexp_float ( const Packet  _x)
Returns
exp(x) for single precision float
509  {
510  const Packet cst_zero = pset1<Packet>(0.0f);
511  const Packet cst_one = pset1<Packet>(1.0f);
512  const Packet cst_half = pset1<Packet>(0.5f);
513  const Packet cst_exp_hi = pset1<Packet>(88.723f);
514  const Packet cst_exp_lo = pset1<Packet>(-104.f);
515  const Packet cst_pldexp_threshold = pset1<Packet>(87.0);
516 
517  const Packet cst_cephes_LOG2EF = pset1<Packet>(1.44269504088896341f);
518  const Packet cst_p2 = pset1<Packet>(0.49999988079071044921875f);
519  const Packet cst_p3 = pset1<Packet>(0.16666518151760101318359375f);
520  const Packet cst_p4 = pset1<Packet>(4.166965186595916748046875e-2f);
521  const Packet cst_p5 = pset1<Packet>(8.36894474923610687255859375e-3f);
522  const Packet cst_p6 = pset1<Packet>(1.37449637986719608306884765625e-3f);
523 
524  // Clamp x.
525  Packet zero_mask = pcmp_lt(_x, cst_exp_lo);
526  Packet x = pmin(_x, cst_exp_hi);
527 
528  // Express exp(x) as exp(m*ln(2) + r), start by extracting
529  // m = floor(x/ln(2) + 0.5).
530  Packet m = pfloor(pmadd(x, cst_cephes_LOG2EF, cst_half));
531 
532  // Get r = x - m*ln(2). If no FMA instructions are available, m*ln(2) is
533  // subtracted out in two parts, m*C1+m*C2 = m*ln(2), to avoid accumulating
534  // truncation errors.
535  const Packet cst_cephes_exp_C1 = pset1<Packet>(-0.693359375f);
536  const Packet cst_cephes_exp_C2 = pset1<Packet>(2.12194440e-4f);
537  Packet r = pmadd(m, cst_cephes_exp_C1, x);
538  r = pmadd(m, cst_cephes_exp_C2, r);
539 
540  // Evaluate the 6th order polynomial approximation to exp(r)
541  // with r in the interval [-ln(2)/2;ln(2)/2].
542  const Packet r2 = pmul(r, r);
543  Packet p_even = pmadd(r2, cst_p6, cst_p4);
544  const Packet p_odd = pmadd(r2, cst_p5, cst_p3);
545  p_even = pmadd(r2, p_even, cst_p2);
546  const Packet p_low = padd(r, cst_one);
547  Packet y = pmadd(r, p_odd, p_even);
548  y = pmadd(r2, y, p_low);
549 
550  // Return 2^m * exp(r).
551  const Packet fast_pldexp_unsafe = pcmp_lt(cst_pldexp_threshold, pabs(x));
552  if (!predux_any(fast_pldexp_unsafe)) {
553  // For |x| <= 87, we know the result is not zero or inf, and we can safely use
554  // the fast version of pldexp.
555  return pmax(pldexp_fast(y, m), _x);
556  }
557  return pselect(zero_mask, cst_zero, pmax(pldexp(y, m), _x));
558 }

References m, pabs(), padd(), pcmp_lt(), pfloor(), pldexp(), pldexp_fast(), pmadd(), pmax(), pmin(), pmul(), predux_any(), pselect(), UniformPSDSelfTest::r, plotDoE::x, and y.

Referenced by pexp(), pexp< Packet8bf >(), and pexp< PacketXf >().

◆ pexpm1()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pexpm1 ( const Packet a)
Returns
the expm1 of a (coeff-wise)
1097  {
1098  return numext::expm1(a);
1099 }

References a, and Eigen::bfloat16_impl::expm1().

Referenced by packetmath_real(), Eigen::internal::scalar_expm1_op< Scalar >::packetOp(), and pexpm1< Packet32h >().

◆ pexpm1< Packet16h >()

◆ pexpm1< Packet32h >()

815  {
816  Packet16h low;
817  Packet16h high;
818  extract2Packet16h(a, low, high);
819 
820  Packet16h lowOut = pexpm1(low);
821  Packet16h highOut = pexpm1(high);
822 
823  return combine2Packet16h(lowOut, highOut);
824 }
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexpm1(const Packet &a)
Definition: GenericPacketMath.h:1097

References a, combine2Packet16h(), extract2Packet16h(), and pexpm1().

◆ pfirst() [1/2]

template<typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits<Packet>::type Eigen::internal::pfirst ( const Packet a)
inline
Returns
the first element of a packet
1200  {
1201  return a;
1202 }

References a.

◆ pfirst() [2/2]

template<>
EIGEN_STRONG_INLINE bfloat16 Eigen::internal::pfirst ( const Packet8bf a)
2418  {
2420 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR __bfloat16_raw raw_uint16_to_bfloat16(unsigned short value)
EIGEN_STRONG_INLINE unsigned short int pfirst< Packet8us >(const Packet8us &a)
Definition: AltiVec/PacketMath.h:1888

References a, pfirst< Packet8us >(), and Eigen::bfloat16_impl::raw_uint16_to_bfloat16().

Referenced by packetmath(), exp_complex_test_impl< Scalar, Packet, HasExp >::pexp1(), pfirst< Packet4cf >(), pfirst< Packet8cf >(), predux< Packet16b >(), predux< Packet1cd >(), predux< Packet4f >(), predux< Packet4i >(), predux_max< Packet16c >(), predux_max< Packet16f >(), predux_max< Packet16uc >(), predux_max< Packet2d >(), predux_max< Packet2l >(), predux_max< Packet2ul >(), predux_max< Packet4d >(), predux_max< Packet4ui >(), predux_max< Packet8d >(), predux_max< Packet8f >(), predux_max< Packet8s >(), predux_max< Packet8us >(), predux_min< Packet16c >(), predux_min< Packet16f >(), predux_min< Packet16uc >(), predux_min< Packet2d >(), predux_min< Packet2l >(), predux_min< Packet2ul >(), predux_min< Packet4d >(), predux_min< Packet4ui >(), predux_min< Packet8d >(), predux_min< Packet8f >(), predux_min< Packet8s >(), predux_min< Packet8us >(), predux_mul< Packet16c >(), predux_mul< Packet16f >(), predux_mul< Packet16uc >(), predux_mul< Packet1cd >(), predux_mul< Packet4d >(), predux_mul< Packet4f >(), predux_mul< Packet8d >(), predux_mul< Packet8f >(), predux_mul< Packet8s >(), predux_mul< Packet8us >(), eigen_optimization_barrier_test< Packet, std::enable_if_t<!NumTraits< Packet >::IsComplex &&!internal::is_same< Packet, Eigen::half >::value &&!internal::is_same< Packet, Eigen::bfloat16 >::value > >::run(), and Eigen::numext::sqrt().

◆ pfirst< Packet16b >()

1629  {
1630  int x = _mm_cvtsi128_si32(a);
1631  return static_cast<bool>(x & 1);
1632 }

References a, and plotDoE::x.

◆ pfirst< Packet16bf >()

2699  {
2700  bfloat16 t;
2701  t.value = static_cast<unsigned short>(_mm256_extract_epi16(from, 0));
2702  return t;
2703 }

References plotPSD::t.

◆ pfirst< Packet16c >()

template<>
EIGEN_STRONG_INLINE int8_t Eigen::internal::pfirst< Packet16c > ( const Packet16c a)
1893  {
1894  return pfirst_common<Packet16c>(a);
1895 }

References a.

◆ pfirst< Packet16f >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::pfirst< Packet16f > ( const Packet16f a)
1278  {
1279  return _mm512_cvtss_f32(a);
1280 }

References a.

◆ pfirst< Packet16h >()

2208  {
2209  return half_impl::raw_uint16_to_half(static_cast<unsigned short>(_mm256_extract_epi16(from, 0)));
2210 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR __half_raw raw_uint16_to_half(numext::uint16_t x)
Definition: Half.h:496

References Eigen::half_impl::raw_uint16_to_half().

◆ pfirst< Packet16i >()

1291  {
1292 #if EIGEN_GNUC_STRICT_LESS_THAN(11, 0, 0)
1293  return _mm_cvtsi128_si32(_mm512_castsi512_si128(a));
1294 #else
1295  return _mm512_cvtsi512_si32(a);
1296 #endif
1297 }

References a.

◆ pfirst< Packet16uc >()

template<>
EIGEN_STRONG_INLINE uint8_t Eigen::internal::pfirst< Packet16uc > ( const Packet16uc a)
1898  {
1899  return pfirst_common<Packet16uc>(a);
1900 }

References a.

◆ pfirst< Packet1cd >()

template<>
EIGEN_STRONG_INLINE std::complex< double > Eigen::internal::pfirst< Packet1cd > ( const Packet1cd a)
403  {
404  EIGEN_ALIGN16 double res[2];
405  __lsx_vst(a.v, res, 0);
406  return std::complex<double>(res[0], res[1]);
407 }

References a, EIGEN_ALIGN16, and res.

◆ pfirst< Packet1cf >()

template<>
EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::pfirst< Packet1cf > ( const Packet1cf a)
377  {
378  EIGEN_ALIGN16 std::complex<float> x;
379  vst1_f32(reinterpret_cast<float*>(&x), a.v);
380  return x;
381 }

References a, EIGEN_ALIGN16, and plotDoE::x.

◆ pfirst< Packet2cd >()

template<>
EIGEN_STRONG_INLINE std::complex<double> Eigen::internal::pfirst< Packet2cd > ( const Packet2cd a)
375  {
376  __m128d low = _mm256_extractf128_pd(a.v, 0);
377  EIGEN_ALIGN16 double res[2];
378  _mm_store_pd(res, low);
379  return std::complex<double>(res[0], res[1]);
380 }

References a, EIGEN_ALIGN16, and res.

◆ pfirst< Packet2cf >()

template<>
EIGEN_STRONG_INLINE std::complex< float > Eigen::internal::pfirst< Packet2cf > ( const Packet2cf a)
295  {
296  EIGEN_ALIGN16 std::complex<float> res[2];
297  pstore((float*)&res, a.v);
298 
299  return res[0];
300 }

References a, EIGEN_ALIGN16, pstore(), and res.

Referenced by predux< Packet2cf >(), and predux_mul< Packet2cf >().

◆ pfirst< Packet2d >()

1879  {
1880  double v;
1881  __lsx_vstelm_d(a, &v, 0, 0);
1882  return v;
1883 }

References a, and v.

Referenced by predux< Packet2d >(), and predux_mul< Packet2d >().

◆ pfirst< Packet2f >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::pfirst< Packet2f > ( const Packet2f a)
3201  {
3202  return vget_lane_f32(a, 0);
3203 }

References a.

◆ pfirst< Packet2i >()

template<>
EIGEN_STRONG_INLINE int32_t Eigen::internal::pfirst< Packet2i > ( const Packet2i a)
3249  {
3250  return vget_lane_s32(a, 0);
3251 }

References a.

◆ pfirst< Packet2l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::pfirst< Packet2l > ( const Packet2l a)
1898  {
1899  return __lsx_vpickve2gr_d((__m128i)a, 0);
1900 }

References a.

◆ pfirst< Packet2ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::pfirst< Packet2ui > ( const Packet2ui a)
3257  {
3258  return vget_lane_u32(a, 0);
3259 }

References a.

◆ pfirst< Packet2ul >()

template<>
EIGEN_STRONG_INLINE uint64_t Eigen::internal::pfirst< Packet2ul > ( const Packet2ul a)
1914  {
1915  return __lsx_vpickve2gr_du((__m128i)a, 0);
1916 }

References a.

◆ pfirst< Packet32h >()

130  {
131 #ifdef EIGEN_VECTORIZE_AVX512DQ
133  static_cast<unsigned short>(_mm256_extract_epi16(_mm512_extracti32x8_epi32(_mm512_castph_si512(from), 0), 0)));
134 #else
135  Eigen::half dest[32];
136  _mm512_storeu_ph(dest, from);
137  return dest[0];
138 #endif
139 }
Definition: Half.h:139

References Eigen::half_impl::raw_uint16_to_half().

◆ pfirst< Packet4bf >()

4830  {
4832 }
EIGEN_STRONG_INLINE uint16_t pfirst< Packet4us >(const Packet4us &a)
Definition: NEON/PacketMath.h:3241

References pfirst< Packet4us >(), and Eigen::bfloat16_impl::raw_uint16_to_bfloat16().

◆ pfirst< Packet4c >()

template<>
EIGEN_STRONG_INLINE int8_t Eigen::internal::pfirst< Packet4c > ( const Packet4c a)
3209  {
3210  return static_cast<int8_t>(a & 0xff);
3211 }
std::int8_t int8_t
Definition: Meta.h:37

References a.

◆ pfirst< Packet4cd >()

template<>
EIGEN_STRONG_INLINE std::complex<double> Eigen::internal::pfirst< Packet4cd > ( const Packet4cd a)
358  {
359  __m128d low = extract128<0>(a.v);
360  EIGEN_ALIGN16 double res[2];
361  _mm_store_pd(res, low);
362  return std::complex<double>(res[0], res[1]);
363 }

References a, EIGEN_ALIGN16, and res.

◆ pfirst< Packet4cf >()

template<>
EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::pfirst< Packet4cf > ( const Packet4cf a)
184  {
185  return pfirst(Packet2cf(_mm256_castps256_ps128(a.v)));
186 }
EIGEN_STRONG_INLINE bfloat16 pfirst(const Packet8bf &a)
Definition: AltiVec/PacketMath.h:2418

References a, and pfirst().

◆ pfirst< Packet4d >()

1768  {
1769  return _mm_cvtsd_f64(_mm256_castpd256_pd128(a));
1770 }

References a.

◆ pfirst< Packet4f >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::pfirst< Packet4f > ( const Packet4f a)
1863  {
1864  EIGEN_ALIGN16 float x;
1865  vec_ste(a, 0, &x);
1866  return x;
1867 }

References a, EIGEN_ALIGN16, and plotDoE::x.

◆ pfirst< Packet4i >()

1869  {
1870  EIGEN_ALIGN16 int x;
1871  vec_ste(a, 0, &x);
1872  return x;
1873 }

References a, EIGEN_ALIGN16, and plotDoE::x.

Referenced by predux< Packet16b >(), and predux_mul< Packet16b >().

◆ pfirst< Packet4s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::pfirst< Packet4s > ( const Packet4s a)
3233  {
3234  return vget_lane_s16(a, 0);
3235 }

References a.

◆ pfirst< Packet4uc >()

template<>
EIGEN_STRONG_INLINE uint8_t Eigen::internal::pfirst< Packet4uc > ( const Packet4uc a)
3221  {
3222  return static_cast<uint8_t>(a & 0xff);
3223 }

References a.

◆ pfirst< Packet4ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::pfirst< Packet4ui > ( const Packet4ui a)
1910  {
1911  return __lsx_vpickve2gr_wu((__m128i)a, 0);
1912 }

References a.

◆ pfirst< Packet4us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::pfirst< Packet4us > ( const Packet4us a)
3241  {
3242  return vget_lane_u16(a, 0);
3243 }

References a.

Referenced by pfirst< Packet4bf >().

◆ pfirst< Packet8bf >()

2624  {
2625  return numext::bit_cast<bfloat16>(static_cast<numext::uint16_t>(_mm_extract_epi16(from, 0)));
2626 }

◆ pfirst< Packet8c >()

template<>
EIGEN_STRONG_INLINE int8_t Eigen::internal::pfirst< Packet8c > ( const Packet8c a)
3213  {
3214  return vget_lane_s8(a, 0);
3215 }

References a.

◆ pfirst< Packet8cf >()

template<>
EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::pfirst< Packet8cf > ( const Packet8cf a)
166  {
167  return pfirst(Packet2cf(_mm512_castps512_ps128(a.v)));
168 }

References a, and pfirst().

◆ pfirst< Packet8d >()

1282  {
1283  return _mm512_cvtsd_f64(a);
1284 }

References a.

◆ pfirst< Packet8f >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::pfirst< Packet8f > ( const Packet8f a)
1764  {
1765  return _mm_cvtss_f32(_mm256_castps256_ps128(a));
1766 }

References a.

◆ pfirst< Packet8h >()

2222  {
2223  return numext::bit_cast<Eigen::half>(static_cast<numext::uint16_t>(_mm_extract_epi16(from, 0)));
2224 }

◆ pfirst< Packet8i >()

1772  {
1773  return _mm_cvtsi128_si32(_mm256_castsi256_si128(a));
1774 }

References a.

◆ pfirst< Packet8l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::pfirst< Packet8l > ( const Packet8l a)
1286  {
1287  int64_t x = _mm_extract_epi64_0(_mm512_extracti32x4_epi32(a, 0));
1288  return x;
1289 }
EIGEN_ALWAYS_INLINE int64_t _mm_extract_epi64_0(const __m128i &a)
Definition: SSE/PacketMath.h:161

References _mm_extract_epi64_0(), a, and plotDoE::x.

◆ pfirst< Packet8s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::pfirst< Packet8s > ( const Packet8s a)
1883  {
1884  return pfirst_common<Packet8s>(a);
1885 }

References a.

◆ pfirst< Packet8uc >()

template<>
EIGEN_STRONG_INLINE uint8_t Eigen::internal::pfirst< Packet8uc > ( const Packet8uc a)
3225  {
3226  return vget_lane_u8(a, 0);
3227 }

References a.

◆ pfirst< Packet8ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::pfirst< Packet8ui > ( const Packet8ui a)
1776  {
1777  return numext::bit_cast<uint32_t>(_mm_cvtsi128_si32(_mm256_castsi256_si128(a)));
1778 }

References a.

◆ pfirst< Packet8us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::pfirst< Packet8us > ( const Packet8us a)
1888  {
1889  return pfirst_common<Packet8us>(a);
1890 }

References a.

Referenced by pfirst().

◆ pfirst< PacketXf >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::pfirst< PacketXf > ( const PacketXf &  a)
571  {
572  // svlasta returns the first element if all predicate bits are 0
573  return svlasta_f32(svpfalse_b(), a);
574 }

References a.

Referenced by predux_mul< PacketXf >().

◆ pfirst< PacketXi >()

template<>
EIGEN_STRONG_INLINE numext::int32_t Eigen::internal::pfirst< PacketXi > ( const PacketXi &  a)
248  {
249  // svlasta returns the first element if all predicate bits are 0
250  return svlasta_s32(svpfalse_b(), a);
251 }

References a.

Referenced by predux_mul< PacketXi >().

◆ pfloor() [1/3]

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::pfloor ( const Packet a)
Returns
the floor of a (coeff-wise)
1159  {
1160  return nearest_integer_packetop_impl<Packet>::run_floor(a);
1161 }

References a, and Eigen::internal::nearest_integer_packetop_impl< Packet, IsScalar, IsInteger >::run_floor().

◆ pfloor() [2/3]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pfloor ( const Packet2d a)
2541  {
2542  return __lsx_vfrintrm_d(a);
2543 }

References a.

◆ pfloor() [3/3]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pfloor ( const Packet4f a)

◆ pfloor< Packet16bf >()

2834  {
2836 }
EIGEN_STRONG_INLINE Packet16f pfloor< Packet16f >(const Packet16f &a)
Definition: AVX512/PacketMath.h:769

References a, Bf16ToF32(), F32ToBf16(), and pfloor< Packet16f >().

◆ pfloor< Packet16f >()

769  {
770  return _mm512_roundscale_ps(a, _MM_FROUND_TO_NEG_INF);
771 }

References a.

Referenced by pfloor< Packet16bf >(), and pfloor< Packet16h >().

◆ pfloor< Packet16h >()

◆ pfloor< Packet2d >()

1167  {
1168  Packet2d v = a;
1169  int32_t old_mode, new_mode;
1170  asm volatile(
1171  "cfcmsa %[old_mode], $1\n"
1172  "ori %[new_mode], %[old_mode], 3\n" // 3 = round towards -INFINITY.
1173  "ctcmsa $1, %[new_mode]\n"
1174  "frint.d %w[v], %w[v]\n"
1175  "ctcmsa $1, %[old_mode]\n"
1176  : // outputs
1177  [old_mode] "=r"(old_mode), [new_mode] "=r"(new_mode),
1178  [v] "+f"(v)
1179  : // inputs
1180  : // clobbers
1181  );
1182  return v;
1183 }

References a, and v.

◆ pfloor< Packet32h >()

389  {
390  return _mm512_roundscale_ph(a, _MM_FROUND_TO_NEG_INF);
391 }

References a.

◆ pfloor< Packet4bf >()

4928  {
4930 }
EIGEN_STRONG_INLINE Packet4f pfloor< Packet4f >(const Packet4f &a)
Definition: AltiVec/PacketMath.h:1497

References a, Bf16ToF32(), F32ToBf16(), and pfloor< Packet4f >().

◆ pfloor< Packet4d >()

1255  {
1256  return _mm256_floor_pd(a);
1257 }

References a.

◆ pfloor< Packet4f >()

1497  {
1498  return vec_floor(a);
1499 }

References a.

Referenced by pfloor< Packet4bf >(), and pfloor< Packet8bf >().

◆ pfloor< Packet8bf >()

◆ pfloor< Packet8d >()

773  {
774  return _mm512_roundscale_pd(a, _MM_FROUND_TO_NEG_INF);
775 }

References a.

◆ pfloor< Packet8f >()

1251  {
1252  return _mm256_floor_ps(a);
1253 }

References a.

Referenced by pfloor< Packet8h >().

◆ pfloor< Packet8h >()

2348  {
2350 }
EIGEN_STRONG_INLINE Packet8f pfloor< Packet8f >(const Packet8f &a)
Definition: AVX/PacketMath.h:1251

References a, float2half(), half2float(), and pfloor< Packet8f >().

◆ pfloor< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pfloor< PacketXf > ( const PacketXf &  a)
491  {
492  return svrintm_f32_x(svptrue_b32(), a);
493 }

References a.

◆ pfrexp() [1/6]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pfrexp ( const Packet a,
Packet exponent 
)
inline
Returns
the significant and exponent of the underlying floating point numbers See https://en.cppreference.com/w/cpp/numeric/math/frexp
727  {
728  int exp;
729  EIGEN_USING_STD(frexp);
730  Packet result = static_cast<Packet>(frexp(a, &exp));
731  exponent = static_cast<Packet>(exp);
732  return result;
733 }

References a, EIGEN_USING_STD, and Eigen::bfloat16_impl::exp().

◆ pfrexp() [2/6]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pfrexp ( const Packet16bf a,
Packet16bf exponent 
)
36  {
37  Packet16f fexponent;
38  const Packet16bf out = F32ToBf16(pfrexp<Packet16f>(Bf16ToF32(a), fexponent));
39  exponent = F32ToBf16(fexponent);
40  return out;
41 }
EIGEN_STRONG_INLINE Packet16f pfrexp< Packet16f >(const Packet16f &a, Packet16f &exponent)
Definition: AVX512/PacketMath.h:1356
std::ofstream out("Result.txt")

References a, Bf16ToF32(), F32ToBf16(), out(), and pfrexp< Packet16f >().

◆ pfrexp() [3/6]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pfrexp ( const Packet16h a,
Packet16h exponent 
)
23  {
24  Packet16f fexponent;
25  const Packet16h out = float2half(pfrexp<Packet16f>(half2float(a), fexponent));
26  exponent = float2half(fexponent);
27  return out;
28 }

References a, float2half(), half2float(), out(), and pfrexp< Packet16f >().

◆ pfrexp() [4/6]

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pfrexp ( const Packet4bf a,
Packet4bf exponent 
)
44  {
45  Packet4f fexponent;
46  const Packet4bf out = F32ToBf16(pfrexp<Packet4f>(Bf16ToF32(a), fexponent));
47  exponent = F32ToBf16(fexponent);
48  return out;
49 }
EIGEN_STRONG_INLINE Packet4f pfrexp< Packet4f >(const Packet4f &a, Packet4f &exponent)
Definition: AltiVec/PacketMath.h:2328

References a, Bf16ToF32(), F32ToBf16(), out(), and pfrexp< Packet4f >().

◆ pfrexp() [5/6]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pfrexp ( const Packet8bf a,
Packet8bf exponent 
)
85  {
86  Packet8f fexponent;
87  const Packet8bf out = F32ToBf16(pfrexp<Packet8f>(Bf16ToF32(a), fexponent));
88  exponent = F32ToBf16(fexponent);
89  return out;
90 }
EIGEN_STRONG_INLINE Packet8f pfrexp< Packet8f >(const Packet8f &a, Packet8f &exponent)
Definition: AVX/PacketMath.h:1874

References a, Bf16ToF32(), F32ToBf16(), out(), and pfrexp< Packet8f >().

◆ pfrexp() [6/6]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pfrexp ( const Packet8h a,
Packet8h exponent 
)
72  {
73  Packet8f fexponent;
74  const Packet8h out = float2half(pfrexp<Packet8f>(half2float(a), fexponent));
75  exponent = float2half(fexponent);
76  return out;
77 }
eigen_packet_wrapper< __m128i, 2 > Packet8h
Definition: AVX/PacketMath.h:38

References a, float2half(), half2float(), out(), and pfrexp< Packet8f >().

Referenced by generic_pow_impl(), packetmath_real(), pfrexp< Packet32h >(), plog_impl_double(), and plog_impl_float().

◆ pfrexp< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pfrexp< Packet16f > ( const Packet16f a,
Packet16f exponent 
)
1356  {
1357  return pfrexp_generic(a, exponent);
1358 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pfrexp_generic(const Packet &a, Packet &exponent)
Definition: GenericPacketMathFunctions.h:184

References a, and pfrexp_generic().

Referenced by pfrexp().

◆ pfrexp< Packet16h >()

◆ pfrexp< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pfrexp< Packet2d > ( const Packet2d a,
Packet2d exponent 
)
2677  {
2678  return pfrexp_generic(a, exponent);
2679 }

References a, and pfrexp_generic().

◆ pfrexp< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pfrexp< Packet2f > ( const Packet2f a,
Packet2f exponent 
)
3440  {
3441  return pfrexp_generic(a, exponent);
3442 }

References a, and pfrexp_generic().

◆ pfrexp< Packet32h >()

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pfrexp< Packet32h > ( const Packet32h a,
Packet32h exponent 
)
841  {
842  Packet16h low;
843  Packet16h high;
844  extract2Packet16h(a, low, high);
845 
846  Packet16h exp1 = _mm256_undefined_si256();
847  Packet16h exp2 = _mm256_undefined_si256();
848 
849  Packet16h lowOut = pfrexp(low, exp1);
850  Packet16h highOut = pfrexp(high, exp2);
851 
852  exponent = combine2Packet16h(exp1, exp2);
853 
854  return combine2Packet16h(lowOut, highOut);
855 }

References a, combine2Packet16h(), Eigen::bfloat16_impl::exp2(), extract2Packet16h(), and pfrexp().

◆ pfrexp< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pfrexp< Packet4d > ( const Packet4d a,
Packet4d exponent 
)
1901  {
1902  return pfrexp_generic(a, exponent);
1903 }

References a, and pfrexp_generic().

◆ pfrexp< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pfrexp< Packet4f > ( const Packet4f a,
Packet4f exponent 
)
2328  {
2329  return pfrexp_generic(a, exponent);
2330 }

References a, and pfrexp_generic().

Referenced by pfrexp(), and pfrexp< Packet8bf >().

◆ pfrexp< Packet8bf >()

2332  {
2333  Packet4f a_even = Bf16ToF32Even(a);
2334  Packet4f a_odd = Bf16ToF32Odd(a);
2335  Packet4f e_even;
2336  Packet4f e_odd;
2337  Packet4f op_even = pfrexp<Packet4f>(a_even, e_even);
2338  Packet4f op_odd = pfrexp<Packet4f>(a_odd, e_odd);
2339  e = F32ToBf16(e_even, e_odd);
2340  return F32ToBf16(op_even, op_odd);
2341 }

References a, Bf16ToF32Even(), Bf16ToF32Odd(), e(), F32ToBf16(), and pfrexp< Packet4f >().

◆ pfrexp< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pfrexp< Packet8d > ( const Packet8d a,
Packet8d exponent 
)
1372  {
1373  return pfrexp_generic(a, exponent);
1374 }

References a, and pfrexp_generic().

◆ pfrexp< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pfrexp< Packet8f > ( const Packet8f a,
Packet8f exponent 
)
1874  {
1875  return pfrexp_generic(a, exponent);
1876 }

References a, and pfrexp_generic().

Referenced by pfrexp().

◆ pfrexp< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pfrexp< PacketXf > ( const PacketXf &  a,
PacketXf &  exponent 
)
589  {
590  return pfrexp_generic(a, exponent);
591 }

References a, and pfrexp_generic().

◆ pfrexp_generic()

template<typename Packet >
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet Eigen::internal::pfrexp_generic ( const Packet a,
Packet exponent 
)

Default implementation of pfrexp. It is expected to be called by implementers of template<> pfrexp.

184  {
185  typedef typename unpacket_traits<Packet>::type Scalar;
187  static constexpr int TotalBits = sizeof(Scalar) * CHAR_BIT, MantissaBits = numext::numeric_limits<Scalar>::digits - 1,
188  ExponentBits = TotalBits - MantissaBits - 1;
189 
190  EIGEN_CONSTEXPR ScalarUI scalar_sign_mantissa_mask =
191  ~(((ScalarUI(1) << ExponentBits) - ScalarUI(1)) << MantissaBits); // ~0x7f800000
192  const Packet sign_mantissa_mask = pset1frombits<Packet>(static_cast<ScalarUI>(scalar_sign_mantissa_mask));
193  const Packet half = pset1<Packet>(Scalar(0.5));
194  const Packet zero = pzero(a);
195  const Packet normal_min = pset1<Packet>((numext::numeric_limits<Scalar>::min)()); // Minimum normal value, 2^-126
196 
197  // To handle denormals, normalize by multiplying by 2^(int(MantissaBits)+1).
198  const Packet is_denormal = pcmp_lt(pabs(a), normal_min);
199  EIGEN_CONSTEXPR ScalarUI scalar_normalization_offset = ScalarUI(MantissaBits + 1); // 24
200  // The following cannot be constexpr because bfloat16(uint16_t) is not constexpr.
201  const Scalar scalar_normalization_factor = Scalar(ScalarUI(1) << int(scalar_normalization_offset)); // 2^24
202  const Packet normalization_factor = pset1<Packet>(scalar_normalization_factor);
203  const Packet normalized_a = pselect(is_denormal, pmul(a, normalization_factor), a);
204 
205  // Determine exponent offset: -126 if normal, -126-24 if denormal
206  const Scalar scalar_exponent_offset = -Scalar((ScalarUI(1) << (ExponentBits - 1)) - ScalarUI(2)); // -126
207  Packet exponent_offset = pset1<Packet>(scalar_exponent_offset);
208  const Packet normalization_offset = pset1<Packet>(-Scalar(scalar_normalization_offset)); // -24
209  exponent_offset = pselect(is_denormal, padd(exponent_offset, normalization_offset), exponent_offset);
210 
211  // Determine exponent and mantissa from normalized_a.
212  exponent = pfrexp_generic_get_biased_exponent(normalized_a);
213  // Zero, Inf and NaN return 'a' unmodified, exponent is zero
214  // (technically the exponent is unspecified for inf/NaN, but GCC/Clang set it to zero)
215  const Scalar scalar_non_finite_exponent = Scalar((ScalarUI(1) << ExponentBits) - ScalarUI(1)); // 255
216  const Packet non_finite_exponent = pset1<Packet>(scalar_non_finite_exponent);
217  const Packet is_zero_or_not_finite = por(pcmp_eq(a, zero), pcmp_eq(exponent, non_finite_exponent));
218  const Packet m = pselect(is_zero_or_not_finite, a, por(pand(normalized_a, sign_mantissa_mask), half));
219  exponent = pselect(is_zero_or_not_finite, zero, padd(exponent, exponent_offset));
220  return m;
221 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pfrexp_generic_get_biased_exponent(const Packet &a)
Definition: GenericPacketMathFunctions.h:174

References a, EIGEN_CONSTEXPR, m, min, pabs(), padd(), pand(), pcmp_eq(), pcmp_lt(), pfrexp_generic_get_biased_exponent(), pmul(), por(), pselect(), pzero(), compute_granudrum_aor::type, and zero().

Referenced by pfrexp< Packet16f >(), pfrexp< Packet2d >(), pfrexp< Packet2f >(), pfrexp< Packet4d >(), pfrexp< Packet4f >(), pfrexp< Packet8d >(), pfrexp< Packet8f >(), and pfrexp< PacketXf >().

◆ pfrexp_generic_get_biased_exponent() [1/4]

template<typename Packet >
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet Eigen::internal::pfrexp_generic_get_biased_exponent ( const Packet a)
174  {
175  typedef typename unpacket_traits<Packet>::type Scalar;
176  typedef typename unpacket_traits<Packet>::integer_packet PacketI;
177  static constexpr int mantissa_bits = numext::numeric_limits<Scalar>::digits - 1;
178  return pcast<PacketI, Packet>(plogical_shift_right<mantissa_bits>(preinterpret<PacketI>(pabs(a))));
179 }

References a, and pabs().

◆ pfrexp_generic_get_biased_exponent() [2/4]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pfrexp_generic_get_biased_exponent ( const Packet2d a)
1752  {
1753  const Packet2d cst_exp_mask = pset1frombits<Packet2d>(static_cast<uint64_t>(0x7ff0000000000000ull));
1754  __m128i a_expo = _mm_srli_epi64(_mm_castpd_si128(pand(a, cst_exp_mask)), 52);
1755  return _mm_cvtepi32_pd(vec4i_swizzle1(a_expo, 0, 2, 1, 3));
1756 }
#define vec4i_swizzle1(v, p, q, r, s)
Definition: SSE/PacketMath.h:98
EIGEN_STRONG_INLINE Packet2d pset1frombits< Packet2d >(uint64_t from)
Definition: LSX/PacketMath.h:513

References a, pand(), pset1frombits< Packet2d >(), and vec4i_swizzle1.

◆ pfrexp_generic_get_biased_exponent() [3/4]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pfrexp_generic_get_biased_exponent ( const Packet4d a)
1880  {
1881  const Packet4d cst_exp_mask = pset1frombits<Packet4d>(static_cast<uint64_t>(0x7ff0000000000000ull));
1882  __m256i a_expo = _mm256_castpd_si256(pand(a, cst_exp_mask));
1883 #ifdef EIGEN_VECTORIZE_AVX2
1884  a_expo = _mm256_srli_epi64(a_expo, 52);
1885  __m128i lo = _mm256_extractf128_si256(a_expo, 0);
1886  __m128i hi = _mm256_extractf128_si256(a_expo, 1);
1887 #else
1888  __m128i lo = _mm256_extractf128_si256(a_expo, 0);
1889  __m128i hi = _mm256_extractf128_si256(a_expo, 1);
1890  lo = _mm_srli_epi64(lo, 52);
1891  hi = _mm_srli_epi64(hi, 52);
1892 #endif
1893  Packet2d exponent_lo = _mm_cvtepi32_pd(vec4i_swizzle1(lo, 0, 2, 1, 3));
1894  Packet2d exponent_hi = _mm_cvtepi32_pd(vec4i_swizzle1(hi, 0, 2, 1, 3));
1895  Packet4d exponent = _mm256_insertf128_pd(_mm256_setzero_pd(), exponent_lo, 0);
1896  exponent = _mm256_insertf128_pd(exponent, exponent_hi, 1);
1897  return exponent;
1898 }
EIGEN_STRONG_INLINE Packet8bf pand(const Packet8bf &a, const Packet8bf &b)
Definition: AVX/PacketMath.h:2699
EIGEN_STRONG_INLINE Packet4d pset1frombits< Packet4d >(uint64_t from)
Definition: AVX/PacketMath.h:769

References a, pand(), pset1frombits< Packet4d >(), and vec4i_swizzle1.

Referenced by pfrexp_generic().

◆ pfrexp_generic_get_biased_exponent() [4/4]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pfrexp_generic_get_biased_exponent ( const Packet8d a)
1362  {
1363  const Packet8d cst_exp_mask = pset1frombits<Packet8d>(static_cast<uint64_t>(0x7ff0000000000000ull));
1364 #ifdef EIGEN_VECTORIZE_AVX512DQ
1365  return _mm512_cvtepi64_pd(_mm512_srli_epi64(_mm512_castpd_si512(pand(a, cst_exp_mask)), 52));
1366 #else
1367  return _mm512_cvtepi32_pd(_mm512_cvtepi64_epi32(_mm512_srli_epi64(_mm512_castpd_si512(pand(a, cst_exp_mask)), 52)));
1368 #endif
1369 }
EIGEN_STRONG_INLINE Packet8d pset1frombits< Packet8d >(const numext::uint64_t from)
Definition: AVX512/PacketMath.h:274

References a, pand(), and pset1frombits< Packet8d >().

◆ pgamma_sample_der_alpha()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::pgamma_sample_der_alpha ( const Packet alpha,
const Packet sample 
)
Returns
compute the derivative of the sample of Gamma(alpha, 1) random variable with respect to the parameter a gamma_sample_der_alpha(alpha, sample)
89  {
91  return gamma_sample_der_alpha(alpha, sample);
92 }
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_gamma_sample_der_alpha_op< typename AlphaDerived::Scalar >, const AlphaDerived, const SampleDerived > gamma_sample_der_alpha(const Eigen::ArrayBase< AlphaDerived > &alpha, const Eigen::ArrayBase< SampleDerived > &sample)
Definition: SpecialFunctionsArrayAPI.h:75

References alpha, and Eigen::gamma_sample_der_alpha().

Referenced by Eigen::internal::scalar_gamma_sample_der_alpha_op< Scalar >::packetOp().

◆ pgather() [1/2]

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pgather ( const Packet src,
const Scalar from,
Index  stride,
typename unpacket_traits< Packet >::mask_t  umask 
)
inline

◆ pgather() [2/2]

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pgather ( const Scalar from,
Index   
)
inline
936  {
937  return ploadu<Packet>(from);
938 }

◆ pgather< bfloat16, Packet16bf >()

2955  {
2956  return _mm256_set_epi16(
2957  from[15 * stride].value, from[14 * stride].value, from[13 * stride].value, from[12 * stride].value,
2958  from[11 * stride].value, from[10 * stride].value, from[9 * stride].value, from[8 * stride].value,
2959  from[7 * stride].value, from[6 * stride].value, from[5 * stride].value, from[4 * stride].value,
2960  from[3 * stride].value, from[2 * stride].value, from[1 * stride].value, from[0 * stride].value);
2961 }

References Eigen::value.

◆ pgather< bfloat16, Packet4bf >()

4973  {
4974  return Packet4bf(pgather<uint16_t, Packet4us>(reinterpret_cast<const uint16_t*>(from), stride));
4975 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4us pgather< uint16_t, Packet4us >(const uint16_t *from, Index stride)
Definition: NEON/PacketMath.h:2938

References pgather< uint16_t, Packet4us >().

◆ pgather< bfloat16, Packet8bf >()

874  {
875  return pgather_common<Packet8bf>(from, stride);
876 }

Referenced by loadBF16fromResult().

◆ pgather< bool, Packet16b >()

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::pgather< bool, Packet16b > ( const bool from,
Index  stride 
)
1657  {
1658  return _mm_set_epi8(from[15 * stride], from[14 * stride], from[13 * stride], from[12 * stride], from[11 * stride],
1659  from[10 * stride], from[9 * stride], from[8 * stride], from[7 * stride], from[6 * stride],
1660  from[5 * stride], from[4 * stride], from[3 * stride], from[2 * stride], from[1 * stride],
1661  from[0 * stride]);
1662 }

◆ pgather< double, Packet2d >()

template<>
EIGEN_DEVICE_FUNC Packet2d Eigen::internal::pgather< double, Packet2d > ( const double from,
Index  stride 
)
inline
1621  {
1622  Packet2d v = {from[0], from[stride]};
1623  return v;
1624 }

References v.

◆ pgather< double, Packet4d >()

template<>
EIGEN_DEVICE_FUNC Packet4d Eigen::internal::pgather< double, Packet4d > ( const double from,
Index  stride 
)
inline
1673  {
1674  return _mm256_set_pd(from[3 * stride], from[2 * stride], from[1 * stride], from[0 * stride]);
1675 }

◆ pgather< double, Packet8d >() [1/2]

template<>
EIGEN_DEVICE_FUNC Packet8d Eigen::internal::pgather< double, Packet8d > ( const double from,
Index  stride 
)
inline
1170  {
1171  Packet8i stride_vector = _mm256_set1_epi32(convert_index<int>(stride));
1172  Packet8i stride_multiplier = _mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0);
1173  Packet8i indices = _mm256_mullo_epi32(stride_vector, stride_multiplier);
1174 
1175  return _mm512_i32gather_pd(indices, from, 8);
1176 }

◆ pgather< double, Packet8d >() [2/2]

template<>
EIGEN_DEVICE_FUNC Packet8d Eigen::internal::pgather< double, Packet8d > ( const Packet8d src,
const double from,
Index  stride,
uint8_t  umask 
)
inline
1152  {
1153  Packet8i stride_vector = _mm256_set1_epi32(convert_index<int>(stride));
1154  Packet8i stride_multiplier = _mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0);
1155  Packet8i indices = _mm256_mullo_epi32(stride_vector, stride_multiplier);
1156  __mmask8 mask = static_cast<__mmask8>(umask);
1157 
1158  return _mm512_mask_i32gather_pd(src, mask, indices, from, 8);
1159 }

Referenced by pgather< std::complex< float >, Packet8cf >().

◆ pgather< Eigen::half, Packet16h >()

2448  {
2449  return _mm256_set_epi16(from[15 * stride].x, from[14 * stride].x, from[13 * stride].x, from[12 * stride].x,
2450  from[11 * stride].x, from[10 * stride].x, from[9 * stride].x, from[8 * stride].x,
2451  from[7 * stride].x, from[6 * stride].x, from[5 * stride].x, from[4 * stride].x,
2452  from[3 * stride].x, from[2 * stride].x, from[1 * stride].x, from[0 * stride].x);
2453 }

References plotDoE::x.

◆ pgather< Eigen::half, Packet32h >()

691  {
692  return _mm512_castsi512_ph(_mm512_set_epi16(
693  from[31 * stride].x, from[30 * stride].x, from[29 * stride].x, from[28 * stride].x, from[27 * stride].x,
694  from[26 * stride].x, from[25 * stride].x, from[24 * stride].x, from[23 * stride].x, from[22 * stride].x,
695  from[21 * stride].x, from[20 * stride].x, from[19 * stride].x, from[18 * stride].x, from[17 * stride].x,
696  from[16 * stride].x, from[15 * stride].x, from[14 * stride].x, from[13 * stride].x, from[12 * stride].x,
697  from[11 * stride].x, from[10 * stride].x, from[9 * stride].x, from[8 * stride].x, from[7 * stride].x,
698  from[6 * stride].x, from[5 * stride].x, from[4 * stride].x, from[3 * stride].x, from[2 * stride].x,
699  from[1 * stride].x, from[0 * stride].x));
700 }

References plotDoE::x.

◆ pgather< Eigen::half, Packet8h >()

2423  {
2424  const numext::uint16_t s0 = numext::bit_cast<numext::uint16_t>(from[0 * stride]);
2425  const numext::uint16_t s1 = numext::bit_cast<numext::uint16_t>(from[1 * stride]);
2426  const numext::uint16_t s2 = numext::bit_cast<numext::uint16_t>(from[2 * stride]);
2427  const numext::uint16_t s3 = numext::bit_cast<numext::uint16_t>(from[3 * stride]);
2428  const numext::uint16_t s4 = numext::bit_cast<numext::uint16_t>(from[4 * stride]);
2429  const numext::uint16_t s5 = numext::bit_cast<numext::uint16_t>(from[5 * stride]);
2430  const numext::uint16_t s6 = numext::bit_cast<numext::uint16_t>(from[6 * stride]);
2431  const numext::uint16_t s7 = numext::bit_cast<numext::uint16_t>(from[7 * stride]);
2432  return _mm_set_epi16(s7, s6, s5, s4, s3, s2, s1, s0);
2433 }

◆ pgather< float, Packet16f >() [1/2]

template<>
EIGEN_DEVICE_FUNC Packet16f Eigen::internal::pgather< float, Packet16f > ( const float *  from,
Index  stride 
)
inline
1162  {
1163  Packet16i stride_vector = _mm512_set1_epi32(convert_index<int>(stride));
1164  Packet16i stride_multiplier = _mm512_set_epi32(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
1165  Packet16i indices = _mm512_mullo_epi32(stride_vector, stride_multiplier);
1166 
1167  return _mm512_i32gather_ps(indices, from, 4);
1168 }
__m512i Packet16i
Definition: AVX512/PacketMath.h:35

◆ pgather< float, Packet16f >() [2/2]

template<>
EIGEN_DEVICE_FUNC Packet16f Eigen::internal::pgather< float, Packet16f > ( const Packet16f src,
const float *  from,
Index  stride,
uint16_t  umask 
)
inline
1142  {
1143  Packet16i stride_vector = _mm512_set1_epi32(convert_index<int>(stride));
1144  Packet16i stride_multiplier = _mm512_set_epi32(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
1145  Packet16i indices = _mm512_mullo_epi32(stride_vector, stride_multiplier);
1146  __mmask16 mask = static_cast<__mmask16>(umask);
1147 
1148  return _mm512_mask_i32gather_ps(src, mask, indices, from, 4);
1149 }

◆ pgather< float, Packet2f >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2f Eigen::internal::pgather< float, Packet2f > ( const float *  from,
Index  stride 
)
2828  {
2829  Packet2f res = vld1_dup_f32(from);
2830  res = vld1_lane_f32(from + 1 * stride, res, 1);
2831  return res;
2832 }

References res.

◆ pgather< float, Packet4f >()

template<>
EIGEN_DEVICE_FUNC Packet4f Eigen::internal::pgather< float, Packet4f > ( const float *  from,
Index  stride 
)
inline
853  {
854  return pgather_common<Packet4f>(from, stride);
855 }

◆ pgather< float, Packet8f >()

template<>
EIGEN_DEVICE_FUNC Packet8f Eigen::internal::pgather< float, Packet8f > ( const float *  from,
Index  stride 
)
inline
1668  {
1669  return _mm256_set_ps(from[7 * stride], from[6 * stride], from[5 * stride], from[4 * stride], from[3 * stride],
1670  from[2 * stride], from[1 * stride], from[0 * stride]);
1671 }

◆ pgather< float, PacketXf >()

template<>
EIGEN_DEVICE_FUNC PacketXf Eigen::internal::pgather< float, PacketXf > ( const float *  from,
Index  stride 
)
inline
557  {
558  // Indice format: {base=0, base+stride, base+stride*2, base+stride*3, ...}
559  svint32_t indices = svindex_s32(0, stride);
560  return svld1_gather_s32index_f32(svptrue_b32(), from, indices);
561 }

◆ pgather< int, Packet16i >()

template<>
EIGEN_DEVICE_FUNC Packet16i Eigen::internal::pgather< int, Packet16i > ( const int from,
Index  stride 
)
inline
1186  {
1187  Packet16i stride_vector = _mm512_set1_epi32(convert_index<int>(stride));
1188  Packet16i stride_multiplier = _mm512_set_epi32(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
1189  Packet16i indices = _mm512_mullo_epi32(stride_vector, stride_multiplier);
1190  return _mm512_i32gather_epi32(indices, from, 4);
1191 }

◆ pgather< int, Packet4i >()

template<>
EIGEN_DEVICE_FUNC Packet4i Eigen::internal::pgather< int, Packet4i > ( const int from,
Index  stride 
)
inline
858  {
859  return pgather_common<Packet4i>(from, stride);
860 }

◆ pgather< int, Packet8i >()

template<>
EIGEN_DEVICE_FUNC Packet8i Eigen::internal::pgather< int, Packet8i > ( const int from,
Index  stride 
)
inline
1677  {
1678  return _mm256_set_epi32(from[7 * stride], from[6 * stride], from[5 * stride], from[4 * stride], from[3 * stride],
1679  from[2 * stride], from[1 * stride], from[0 * stride]);
1680 }

Referenced by pgather< uint32_t, Packet8ui >().

◆ pgather< int16_t, Packet4s >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4s Eigen::internal::pgather< int16_t, Packet4s > ( const int16_t *  from,
Index  stride 
)
2918  {
2919  Packet4s res = vld1_dup_s16(from);
2920  res = vld1_lane_s16(from + 1 * stride, res, 1);
2921  res = vld1_lane_s16(from + 2 * stride, res, 2);
2922  res = vld1_lane_s16(from + 3 * stride, res, 3);
2923  return res;
2924 }
int16x4_t Packet4s
Definition: NEON/PacketMath.h:83

References res.

◆ pgather< int16_t, Packet8s >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8s Eigen::internal::pgather< int16_t, Packet8s > ( const int16_t *  from,
Index  stride 
)
1647  {
1648  int16_t v[8] __attribute__((aligned(16)));
1649  v[0] = from[0];
1650  v[1] = from[stride];
1651  v[2] = from[2 * stride];
1652  v[3] = from[3 * stride];
1653  v[4] = from[4 * stride];
1654  v[5] = from[5 * stride];
1655  v[6] = from[6 * stride];
1656  v[7] = from[7 * stride];
1657  return __lsx_vld(v, 0);
1658 }
svint32_t PacketXi __attribute__((arm_sve_vector_bits(EIGEN_ARM64_SVE_VL)))
Definition: SVE/PacketMath.h:34
std::int16_t int16_t
Definition: Meta.h:39

References v.

◆ pgather< int32_t, Packet2i >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2i Eigen::internal::pgather< int32_t, Packet2i > ( const int32_t *  from,
Index  stride 
)
2958  {
2959  Packet2i res = vld1_dup_s32(from);
2960  res = vld1_lane_s32(from + 1 * stride, res, 1);
2961  return res;
2962 }
int32x2_t Packet2i
Definition: NEON/PacketMath.h:87

References res.

◆ pgather< int32_t, Packet4i >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4i Eigen::internal::pgather< int32_t, Packet4i > ( const int32_t *  from,
Index  stride 
)
inline
1660  {
1661  int32_t v[4] __attribute__((aligned(16)));
1662  v[0] = from[0];
1663  v[1] = from[stride];
1664  v[2] = from[2 * stride];
1665  v[3] = from[3 * stride];
1666  return __lsx_vld(v, 0);
1667 }

References v.

◆ pgather< int64_t, Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pgather< int64_t, Packet2l > ( const int64_t *  from,
Index  stride 
)
1669  {
1670  int64_t v[2] __attribute__((aligned(16)));
1671  v[0] = from[0];
1672  v[1] = from[stride];
1673  return __lsx_vld(v, 0);
1674 }

References v.

◆ pgather< int64_t, Packet8l >()

template<>
EIGEN_DEVICE_FUNC Packet8l Eigen::internal::pgather< int64_t, Packet8l > ( const int64_t *  from,
Index  stride 
)
inline
1178  {
1179  Packet8i stride_vector = _mm256_set1_epi32(convert_index<int>(stride));
1180  Packet8i stride_multiplier = _mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0);
1181  Packet8i indices = _mm256_mullo_epi32(stride_vector, stride_multiplier);
1182 
1183  return _mm512_i32gather_epi64(indices, from, 8);
1184 }

◆ pgather< int8_t, Packet16c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet16c Eigen::internal::pgather< int8_t, Packet16c > ( const int8_t *  from,
Index  stride 
)
1626  {
1627  int8_t v[16] __attribute__((aligned(16)));
1628  v[0] = from[0];
1629  v[1] = from[stride];
1630  v[2] = from[2 * stride];
1631  v[3] = from[3 * stride];
1632  v[4] = from[4 * stride];
1633  v[5] = from[5 * stride];
1634  v[6] = from[6 * stride];
1635  v[7] = from[7 * stride];
1636  v[8] = from[8 * stride];
1637  v[9] = from[9 * stride];
1638  v[10] = from[10 * stride];
1639  v[11] = from[11 * stride];
1640  v[12] = from[12 * stride];
1641  v[13] = from[13 * stride];
1642  v[14] = from[14 * stride];
1643  v[15] = from[15 * stride];
1644  return __lsx_vld(v, 0);
1645 }

References v.

◆ pgather< int8_t, Packet4c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4c Eigen::internal::pgather< int8_t, Packet4c > ( const int8_t *  from,
Index  stride 
)
2842  {
2843  Packet4c res;
2844  for (int i = 0; i != 4; i++) reinterpret_cast<int8_t*>(&res)[i] = *(from + i * stride);
2845  return res;
2846 }

References i, and res.

◆ pgather< int8_t, Packet8c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8c Eigen::internal::pgather< int8_t, Packet8c > ( const int8_t *  from,
Index  stride 
)
2848  {
2849  Packet8c res = vld1_dup_s8(from);
2850  res = vld1_lane_s8(from + 1 * stride, res, 1);
2851  res = vld1_lane_s8(from + 2 * stride, res, 2);
2852  res = vld1_lane_s8(from + 3 * stride, res, 3);
2853  res = vld1_lane_s8(from + 4 * stride, res, 4);
2854  res = vld1_lane_s8(from + 5 * stride, res, 5);
2855  res = vld1_lane_s8(from + 6 * stride, res, 6);
2856  res = vld1_lane_s8(from + 7 * stride, res, 7);
2857  return res;
2858 }
int8x8_t Packet8c
Definition: NEON/PacketMath.h:78

References res.

◆ pgather< numext::int32_t, PacketXi >()

template<>
EIGEN_DEVICE_FUNC PacketXi Eigen::internal::pgather< numext::int32_t, PacketXi > ( const numext::int32_t from,
Index  stride 
)
inline
233  {
234  // Indice format: {base=0, base+stride, base+stride*2, base+stride*3, ...}
235  svint32_t indices = svindex_s32(0, stride);
236  return svld1_gather_s32index_s32(svptrue_b32(), from, indices);
237 }

◆ pgather< short int, Packet8s >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8s Eigen::internal::pgather< short int, Packet8s > ( const short int from,
Index  stride 
)
863  {
864  return pgather_common<Packet8s>(from, stride);
865 }

◆ pgather< signed char, Packet16c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet16c Eigen::internal::pgather< signed char, Packet16c > ( const signed char from,
Index  stride 
)
879  {
880  return pgather_common<Packet16c>(from, stride);
881 }

◆ pgather< std::complex< double >, Packet1cd >() [1/3]

template<>
EIGEN_DEVICE_FUNC Packet1cd Eigen::internal::pgather< std::complex< double >, Packet1cd > ( const std::complex< double > *  from,
Index stride   __attribute__(unused) 
)
inline
538  {
540 
541  Packet1cd res;
542  res.v[0] = std::real(from[0]);
543  res.v[1] = std::imag(from[0]);
544  return res;
545 }
#define EIGEN_MSA_DEBUG
Definition: MSA/PacketMath.h:48

References EIGEN_MSA_DEBUG, imag(), and res.

◆ pgather< std::complex< double >, Packet1cd >() [2/3]

template<>
EIGEN_DEVICE_FUNC Packet1cd Eigen::internal::pgather< std::complex< double >, Packet1cd > ( const std::complex< double > *  from,
Index stride  EIGEN_UNUSED 
)
inline
154  {
155  return pload<Packet1cd>(from);
156 }
EIGEN_STRONG_INLINE Packet1cd pload< Packet1cd >(const std::complex< double > *from)
Definition: LSX/Complex.h:369

References pload< Packet1cd >().

◆ pgather< std::complex< double >, Packet1cd >() [3/3]

template<>
EIGEN_DEVICE_FUNC Packet1cd Eigen::internal::pgather< std::complex< double >, Packet1cd > ( const std::complex< double > *  from,
Index    
)
inline
498  {
499  Packet1cd res;
500  __m128i tmp = __lsx_vld((void*)from, 0);
501  res.v = (__m128d)tmp;
502  return res;
503 }

References res, and tmp.

◆ pgather< std::complex< double >, Packet2cd >()

template<>
EIGEN_DEVICE_FUNC Packet2cd Eigen::internal::pgather< std::complex< double >, Packet2cd > ( const std::complex< double > *  from,
Index  stride 
)
inline
360  {
361  return Packet2cd(_mm256_set_pd(std::imag(from[1 * stride]), std::real(from[1 * stride]), std::imag(from[0 * stride]),
362  std::real(from[0 * stride])));
363 }

References imag().

◆ pgather< std::complex< double >, Packet4cd >()

template<>
EIGEN_DEVICE_FUNC Packet4cd Eigen::internal::pgather< std::complex< double >, Packet4cd > ( const std::complex< double > *  from,
Index  stride 
)
inline
337  {
338  return Packet4cd(_mm512_insertf64x4(
339  _mm512_castpd256_pd512(_mm256_insertf128_pd(_mm256_castpd128_pd256(ploadu<Packet1cd>(from + 0 * stride).v),
340  ploadu<Packet1cd>(from + 1 * stride).v, 1)),
341  _mm256_insertf128_pd(_mm256_castpd128_pd256(ploadu<Packet1cd>(from + 2 * stride).v),
342  ploadu<Packet1cd>(from + 3 * stride).v, 1),
343  1));
344 }
EIGEN_STRONG_INLINE Packet1cd ploadu< Packet1cd >(const std::complex< double > *from)
Definition: LSX/Complex.h:373

References ploadu< Packet1cd >(), and v.

◆ pgather< std::complex< float >, Packet1cf >()

template<>
EIGEN_DEVICE_FUNC Packet1cf Eigen::internal::pgather< std::complex< float >, Packet1cf > ( const std::complex< float > *  from,
Index  stride 
)
inline
345  {
346  const Packet2f tmp = vdup_n_f32(std::real(from[0 * stride]));
347  return Packet1cf(vset_lane_f32(std::imag(from[0 * stride]), tmp, 1));
348 }

References imag(), and tmp.

◆ pgather< std::complex< float >, Packet2cf >()

template<>
EIGEN_DEVICE_FUNC Packet2cf Eigen::internal::pgather< std::complex< float >, Packet2cf > ( const std::complex< float > *  from,
Index  stride 
)
inline
223  {
224  return pgather_complex_size2<std::complex<float>, Packet2cf>(from, stride);
225 }

◆ pgather< std::complex< float >, Packet4cf >()

template<>
EIGEN_DEVICE_FUNC Packet4cf Eigen::internal::pgather< std::complex< float >, Packet4cf > ( const std::complex< float > *  from,
Index  stride 
)
inline
161  {
162  return Packet4cf(_mm256_set_ps(std::imag(from[3 * stride]), std::real(from[3 * stride]), std::imag(from[2 * stride]),
163  std::real(from[2 * stride]), std::imag(from[1 * stride]), std::real(from[1 * stride]),
164  std::imag(from[0 * stride]), std::real(from[0 * stride])));
165 }

References imag().

◆ pgather< std::complex< float >, Packet8cf >()

template<>
EIGEN_DEVICE_FUNC Packet8cf Eigen::internal::pgather< std::complex< float >, Packet8cf > ( const std::complex< float > *  from,
Index  stride 
)
inline
155  {
156  return Packet8cf(_mm512_castpd_ps(pgather<double, Packet8d>((const double*)(const void*)from, stride)));
157 }
EIGEN_DEVICE_FUNC Packet8d pgather< double, Packet8d >(const Packet8d &src, const double *from, Index stride, uint8_t umask)
Definition: AVX512/PacketMath.h:1151

References pgather< double, Packet8d >().

◆ pgather< uint16_t, Packet4us >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4us Eigen::internal::pgather< uint16_t, Packet4us > ( const uint16_t *  from,
Index  stride 
)
2938  {
2939  Packet4us res = vld1_dup_u16(from);
2940  res = vld1_lane_u16(from + 1 * stride, res, 1);
2941  res = vld1_lane_u16(from + 2 * stride, res, 2);
2942  res = vld1_lane_u16(from + 3 * stride, res, 3);
2943  return res;
2944 }

References res.

Referenced by pgather< bfloat16, Packet4bf >().

◆ pgather< uint16_t, Packet8us >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8us Eigen::internal::pgather< uint16_t, Packet8us > ( const uint16_t *  from,
Index  stride 
)
1697  {
1698  uint16_t v[8] __attribute__((aligned(16)));
1699  v[0] = from[0];
1700  v[1] = from[stride];
1701  v[2] = from[2 * stride];
1702  v[3] = from[3 * stride];
1703  v[4] = from[4 * stride];
1704  v[5] = from[5 * stride];
1705  v[6] = from[6 * stride];
1706  v[7] = from[7 * stride];
1707  return __lsx_vld(v, 0);
1708 }

References v.

◆ pgather< uint32_t, Packet2ui >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pgather< uint32_t, Packet2ui > ( const uint32_t *  from,
Index  stride 
)
2972  {
2973  Packet2ui res = vld1_dup_u32(from);
2974  res = vld1_lane_u32(from + 1 * stride, res, 1);
2975  return res;
2976 }

References res.

◆ pgather< uint32_t, Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pgather< uint32_t, Packet4ui > ( const uint32_t *  from,
Index  stride 
)
1710  {
1711  uint32_t v[4] __attribute__((aligned(16)));
1712  v[0] = from[0];
1713  v[1] = from[stride];
1714  v[2] = from[2 * stride];
1715  v[3] = from[3 * stride];
1716  return __lsx_vld(v, 0);
1717 }

References v.

◆ pgather< uint32_t, Packet8ui >()

template<>
EIGEN_DEVICE_FUNC Packet8ui Eigen::internal::pgather< uint32_t, Packet8ui > ( const uint32_t *  from,
Index  stride 
)
inline
1682  {
1683  return (Packet8ui)pgather<int, Packet8i>((int*)from, stride);
1684 }
EIGEN_DEVICE_FUNC Packet8i pgather< int, Packet8i >(const int *from, Index stride)
Definition: AVX/PacketMath.h:1677

References pgather< int, Packet8i >().

◆ pgather< uint64_t, Packet2ul >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pgather< uint64_t, Packet2ul > ( const uint64_t *  from,
Index  stride 
)
1719  {
1720  uint64_t v[2] __attribute__((aligned(16)));
1721  v[0] = from[0];
1722  v[1] = from[stride];
1723  return __lsx_vld(v, 0);
1724 }

References v.

◆ pgather< uint8_t, Packet16uc >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pgather< uint8_t, Packet16uc > ( const uint8_t *  from,
Index  stride 
)
1676  {
1677  uint8_t v[16] __attribute__((aligned(16)));
1678  v[0] = from[0];
1679  v[1] = from[stride];
1680  v[2] = from[2 * stride];
1681  v[3] = from[3 * stride];
1682  v[4] = from[4 * stride];
1683  v[5] = from[5 * stride];
1684  v[6] = from[6 * stride];
1685  v[7] = from[7 * stride];
1686  v[8] = from[8 * stride];
1687  v[9] = from[9 * stride];
1688  v[10] = from[10 * stride];
1689  v[11] = from[11 * stride];
1690  v[12] = from[12 * stride];
1691  v[13] = from[13 * stride];
1692  v[14] = from[14 * stride];
1693  v[15] = from[15 * stride];
1694  return __lsx_vld(v, 0);
1695 }

References v.

◆ pgather< uint8_t, Packet4uc >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pgather< uint8_t, Packet4uc > ( const uint8_t *  from,
Index  stride 
)
2880  {
2881  Packet4uc res;
2882  for (int i = 0; i != 4; i++) reinterpret_cast<uint8_t*>(&res)[i] = *(from + i * stride);
2883  return res;
2884 }

References i, and res.

◆ pgather< uint8_t, Packet8uc >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pgather< uint8_t, Packet8uc > ( const uint8_t *  from,
Index  stride 
)
2886  {
2887  Packet8uc res = vld1_dup_u8(from);
2888  res = vld1_lane_u8(from + 1 * stride, res, 1);
2889  res = vld1_lane_u8(from + 2 * stride, res, 2);
2890  res = vld1_lane_u8(from + 3 * stride, res, 3);
2891  res = vld1_lane_u8(from + 4 * stride, res, 4);
2892  res = vld1_lane_u8(from + 5 * stride, res, 5);
2893  res = vld1_lane_u8(from + 6 * stride, res, 6);
2894  res = vld1_lane_u8(from + 7 * stride, res, 7);
2895  return res;
2896 }
uint8x8_t Packet8uc
Definition: NEON/PacketMath.h:81

References res.

◆ pgather< unsigned char, Packet16uc >()

885  {
886  return pgather_common<Packet16uc>(from, stride);
887 }

◆ pgather< unsigned short int, Packet8us >()

869  {
870  return pgather_common<Packet8us>(from, stride);
871 }

◆ pgather_common()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet Eigen::internal::pgather_common ( const __UNPACK_TYPE__(Packet) *  from,
Index  stride,
const Index  n = unpacket_traits<Packet>::size 
)
833  {
835  eigen_internal_assert(n <= unpacket_traits<Packet>::size && "number of elements will gather past end of packet");
836  if (stride == 1) {
838  return ploadu<Packet>(from);
839  } else {
840  return ploadu_partial<Packet>(from, n);
841  }
842  } else {
844  for (Index i = 0; i < n; i++) {
845  a[i] = from[i * stride];
846  }
847  // Leave rest of the array uninitialized
848  return pload_ignore<Packet>(a);
849  }
850 }
#define LOAD_STORE_UNROLL_16
Definition: AltiVec/PacketMath.h:160

References __UNPACK_TYPE__(), a, EIGEN_ALIGN16, eigen_internal_assert, i, LOAD_STORE_UNROLL_16, and n.

◆ pgather_complex_size2()

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet Eigen::internal::pgather_complex_size2 ( const Scalar from,
Index  stride,
const Index  n = 2 
)
213  {
214  eigen_internal_assert(n <= unpacket_traits<Packet>::size && "number of elements will gather past end of packet");
215  EIGEN_ALIGN16 Scalar af[2];
216  for (Index i = 0; i < n; i++) {
217  af[i] = from[i * stride];
218  }
219  return pload_ignore<Packet>(af);
220 }

References EIGEN_ALIGN16, eigen_internal_assert, i, and n.

◆ pgather_partial()

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pgather_partial ( const Scalar from,
Index  stride,
const Index  n 
)
inline
941  {
942  const Index packet_size = unpacket_traits<Packet>::size;
943  EIGEN_ALIGN_MAX Scalar elements[packet_size] = {Scalar(0)};
944  for (Index i = 0; i < numext::mini(n, packet_size); i++) {
945  elements[i] = from[i * stride];
946  }
947  return pload<Packet>(elements);
948 }

References EIGEN_ALIGN_MAX, i, Eigen::numext::mini(), and n.

◆ pgather_partial< bfloat16, Packet8bf >()

915  {
916  return pgather_common<Packet8bf>(from, stride, n);
917 }

References n.

◆ pgather_partial< float, Packet4f >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet4f Eigen::internal::pgather_partial< float, Packet4f > ( const float *  from,
Index  stride,
const Index  n 
)
891  {
892  return pgather_common<Packet4f>(from, stride, n);
893 }

References n.

◆ pgather_partial< int, Packet4i >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet4i Eigen::internal::pgather_partial< int, Packet4i > ( const int from,
Index  stride,
const Index  n 
)
897  {
898  return pgather_common<Packet4i>(from, stride, n);
899 }

References n.

◆ pgather_partial< short int, Packet8s >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8s Eigen::internal::pgather_partial< short int, Packet8s > ( const short int from,
Index  stride,
const Index  n 
)
903  {
904  return pgather_common<Packet8s>(from, stride, n);
905 }

References n.

◆ pgather_partial< signed char, Packet16c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet16c Eigen::internal::pgather_partial< signed char, Packet16c > ( const signed char from,
Index  stride,
const Index  n 
)
921  {
922  return pgather_common<Packet16c>(from, stride, n);
923 }

References n.

◆ pgather_partial< std::complex< float >, Packet2cf >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet2cf Eigen::internal::pgather_partial< std::complex< float >, Packet2cf > ( const std::complex< float > *  from,
Index  stride,
const Index  n 
)
228  {
229  return pgather_complex_size2<std::complex<float>, Packet2cf>(from, stride, n);
230 }

References n.

◆ pgather_partial< unsigned char, Packet16uc >()

928  {
929  return pgather_common<Packet16uc>(from, stride, n);
930 }

References n.

◆ pgather_partial< unsigned short int, Packet8us >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet8us Eigen::internal::pgather_partial< unsigned short int, Packet8us > ( const unsigned short int from,
Index  stride,
const Index  n 
)
909  {
910  return pgather_common<Packet8us>(from, stride, n);
911 }

References n.

◆ pger()

template<int N, typename Scalar , typename Packet , bool NegativeAccumulate>
EIGEN_ALWAYS_INLINE void Eigen::internal::pger ( PacketBlock< Packet, N > *  acc,
const Scalar lhs,
const Packet rhsV 
)
1505  {
1506  Packet lhsV = pload<Packet>(lhs);
1507 
1508  pger_common<Packet, NegativeAccumulate, N>(acc, lhsV, rhsV);
1509 }

◆ pger_common()

template<typename Packet , bool NegativeAccumulate, int N>
EIGEN_ALWAYS_INLINE void Eigen::internal::pger_common ( PacketBlock< Packet, N > *  acc,
const Packet lhsV,
const Packet rhsV 
)
1492  {
1493  if (NegativeAccumulate) {
1494  for (int M = 0; M < N; M++) {
1495  acc->packet[M] = vec_nmsub(lhsV, rhsV[M], acc->packet[M]);
1496  }
1497  } else {
1498  for (int M = 0; M < N; M++) {
1499  acc->packet[M] = vec_madd(lhsV, rhsV[M], acc->packet[M]);
1500  }
1501  }
1502 }

References N, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ pgerc()

template<int N, typename Scalar , typename Packet , bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void Eigen::internal::pgerc ( PacketBlock< Packet, N > *  accReal,
PacketBlock< Packet, N > *  accImag,
const Scalar lhs_ptr,
const Scalar lhs_ptr_imag,
const Packet rhsV,
const Packet rhsVi 
)
1533  {
1534  Packet lhsV = ploadLhs<Packet>(lhs_ptr);
1535  Packet lhsVi;
1536  if (!LhsIsReal)
1537  lhsVi = ploadLhs<Packet>(lhs_ptr_imag);
1538  else
1539  EIGEN_UNUSED_VARIABLE(lhs_ptr_imag);
1540 
1541  pgerc_common<N, Packet, ConjugateLhs, ConjugateRhs, LhsIsReal, RhsIsReal>(accReal, accImag, lhsV, lhsVi, rhsV, rhsVi);
1542 }

References EIGEN_UNUSED_VARIABLE.

◆ pgerc_common()

template<int N, typename Packet , bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void Eigen::internal::pgerc_common ( PacketBlock< Packet, N > *  accReal,
PacketBlock< Packet, N > *  accImag,
const Packet lhsV,
Packet lhsVi,
const Packet rhsV,
const Packet rhsVi 
)
1515  {
1516  pger_common<Packet, false, N>(accReal, lhsV, rhsV);
1517  if (LhsIsReal) {
1518  pger_common<Packet, ConjugateRhs, N>(accImag, lhsV, rhsVi);
1519  EIGEN_UNUSED_VARIABLE(lhsVi);
1520  } else {
1521  if (!RhsIsReal) {
1522  pger_common<Packet, ConjugateLhs == ConjugateRhs, N>(accReal, lhsVi, rhsVi);
1523  pger_common<Packet, ConjugateRhs, N>(accImag, lhsV, rhsVi);
1524  } else {
1525  EIGEN_UNUSED_VARIABLE(rhsVi);
1526  }
1527  pger_common<Packet, ConjugateLhs, N>(accImag, lhsVi, rhsV);
1528  }
1529 }

References EIGEN_UNUSED_VARIABLE.

◆ pgercMMA()

template<typename Packet , typename RhsPacket , bool ConjugateLhs, bool ConjugateRhs, bool LhsIsReal, bool RhsIsReal>
EIGEN_ALWAYS_INLINE void Eigen::internal::pgercMMA ( __vector_quad *  accReal,
__vector_quad *  accImag,
const Packet lhsV,
Packet lhsVi,
const RhsPacket &  rhsV,
RhsPacket &  rhsVi 
)
106  {
107  pgerMMA<Packet, RhsPacket, false>(accReal, rhsV, lhsV);
108  if (LhsIsReal) {
109  pgerMMA<Packet, RhsPacket, ConjugateRhs>(accImag, rhsVi, lhsV);
110  EIGEN_UNUSED_VARIABLE(lhsVi);
111  } else {
112  if (!RhsIsReal) {
113  pgerMMA<Packet, RhsPacket, ConjugateLhs == ConjugateRhs>(accReal, rhsVi, lhsVi);
114  pgerMMA<Packet, RhsPacket, ConjugateRhs>(accImag, rhsVi, lhsV);
115  } else {
116  EIGEN_UNUSED_VARIABLE(rhsVi);
117  }
118  pgerMMA<Packet, RhsPacket, ConjugateLhs>(accImag, rhsV, lhsVi);
119  }
120 }

References EIGEN_UNUSED_VARIABLE.

◆ pgerMMA() [1/2]

template<typename LhsPacket , typename RhsPacket , bool NegativeAccumulate>
EIGEN_ALWAYS_INLINE void Eigen::internal::pgerMMA ( __vector_quad *  acc,
const __vector_pair &  a,
const Packet2d b 
)
96  {
97  if (NegativeAccumulate) {
98  __builtin_mma_xvf64gernp(acc, (__vector_pair)a, (__vector unsigned char)b);
99  } else {
100  __builtin_mma_xvf64gerpp(acc, (__vector_pair)a, (__vector unsigned char)b);
101  }
102 }

References a, and b.

◆ pgerMMA() [2/2]

template<typename LhsPacket , typename RhsPacket , bool NegativeAccumulate>
EIGEN_ALWAYS_INLINE void Eigen::internal::pgerMMA ( __vector_quad *  acc,
const RhsPacket &  a,
const LhsPacket &  b 
)
87  {
88  if (NegativeAccumulate) {
89  __builtin_mma_xvf32gernp(acc, (__vector unsigned char)a, (__vector unsigned char)b);
90  } else {
91  __builtin_mma_xvf32gerpp(acc, (__vector unsigned char)a, (__vector unsigned char)b);
92  }
93 }

References a, and b.

◆ phypot_complex()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::phypot_complex ( const Packet a)
1523  {
1524  typedef typename unpacket_traits<Packet>::type Scalar;
1525  typedef typename Scalar::value_type RealScalar;
1526  typedef typename unpacket_traits<Packet>::as_real RealPacket;
1527 
1528  const RealPacket cst_zero_rp = pset1<RealPacket>(static_cast<RealScalar>(0.0));
1529  const RealPacket cst_minus_one_rp = pset1<RealPacket>(static_cast<RealScalar>(-1.0));
1530  const RealPacket cst_two_rp = pset1<RealPacket>(static_cast<RealScalar>(2.0));
1531  const RealPacket evenmask = peven_mask(a.v);
1532 
1533  RealPacket a_abs = pabs(a.v);
1534  RealPacket a_flip = pcplxflip(Packet(a_abs)).v; // |b|, |a|
1535  RealPacket a_all = pselect(evenmask, a_abs, a_flip); // |a|, |a|
1536  RealPacket b_all = pselect(evenmask, a_flip, a_abs); // |b|, |b|
1537 
1538  RealPacket a2 = pmul(a.v, a.v); // |a^2, b^2|
1539  RealPacket a2_flip = pcplxflip(Packet(a2)).v; // |b^2, a^2|
1540  RealPacket h = psqrt(padd(a2, a2_flip)); // |sqrt(a^2 + b^2), sqrt(a^2 + b^2)|
1541  RealPacket h_sq = pmul(h, h); // |a^2 + b^2, a^2 + b^2|
1542  RealPacket a_sq = pselect(evenmask, a2, a2_flip); // |a^2, a^2|
1543  RealPacket m_h_sq = pmul(h_sq, cst_minus_one_rp);
1544  RealPacket m_a_sq = pmul(a_sq, cst_minus_one_rp);
1545  RealPacket x = psub(psub(pmadd(h, h, m_h_sq), pmadd(b_all, b_all, psub(a_sq, h_sq))), pmadd(a_all, a_all, m_a_sq));
1546  h = psub(h, pdiv(x, pmul(cst_two_rp, h))); // |h - x/(2*h), h - x/(2*h)|
1547 
1548  // handle zero-case
1549  RealPacket iszero = pcmp_eq(por(a_abs, a_flip), cst_zero_rp);
1550 
1551  h = pandnot(h, iszero); // |sqrt(a^2+b^2), sqrt(a^2+b^2)|
1552  return Packet(h); // |sqrt(a^2+b^2), sqrt(a^2+b^2)|
1553 }

References a, pabs(), padd(), pandnot(), pcmp_eq(), pcplxflip(), pdiv(), peven_mask(), pmadd(), pmul(), por(), pselect(), psqrt(), psub(), Eigen::internal::Packet2cf::v, and plotDoE::x.

Referenced by plog_complex().

◆ pigamma()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::pigamma ( const Packet a,
const Packet x 
)
Returns
the incomplete gamma function igamma(a, x)
72  {
73  using numext::igamma;
74  return igamma(a, x);
75 }
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igamma_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igamma(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition: SpecialFunctionsArrayAPI.h:31

References a, Eigen::igamma(), and plotDoE::x.

Referenced by Eigen::internal::scalar_igamma_op< Scalar >::packetOp().

◆ pigamma_der_a()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::pigamma_der_a ( const Packet a,
const Packet x 
)
Returns
the derivative of the incomplete gamma function igamma_der_a(a, x)
80  {
82  return igamma_der_a(a, x);
83 }
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igamma_der_a_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igamma_der_a(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition: SpecialFunctionsArrayAPI.h:52

References a, Eigen::igamma_der_a(), and plotDoE::x.

Referenced by Eigen::internal::scalar_igamma_der_a_op< Scalar >::packetOp().

◆ pigammac()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::pigammac ( const Packet a,
const Packet x 
)
Returns
the complementary incomplete gamma function igammac(a, x)
96  {
97  using numext::igammac;
98  return igammac(a, x);
99 }
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igammac_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igammac(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition: SpecialFunctionsArrayAPI.h:93

References a, Eigen::igammac(), and plotDoE::x.

Referenced by Eigen::internal::scalar_igammac_op< Scalar >::packetOp().

◆ pisinf()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pisinf ( const Packet a)
inline
Returns
isinf(a)
1007  {
1008  using Scalar = typename unpacket_traits<Packet>::type;
1009  constexpr Scalar inf = NumTraits<Scalar>::infinity();
1010  return pcmp_eq(pabs(a), pset1<Packet>(inf));
1011 }
EIGEN_DEVICE_FUNC Packet pcmp_eq(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:440
EIGEN_DEVICE_FUNC unsigned long long pabs(const unsigned long long &a)
Definition: GenericPacketMath.h:688

References a, constants::inf, pabs(), and pcmp_eq().

Referenced by Eigen::internal::scalar_isinf_op< Scalar, true >::packetOp().

◆ pisnan() [1/3]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pisnan ( const Packet a)
inline
Returns
isnan(a)
1001  {
1002  return pandnot(ptrue(a), pcmp_eq(a, a));
1003 }
EIGEN_DEVICE_FUNC Packet pandnot(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:578

References a, pandnot(), pcmp_eq(), and ptrue().

◆ pisnan() [2/3]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pisnan ( const Packet16f a)
669  {
670  __mmask16 mask = _mm512_cmp_ps_mask(a, a, _CMP_UNORD_Q);
671  return _mm512_castsi512_ps(_mm512_maskz_set1_epi32(mask, int32_t(-1)));
672 }

References a.

◆ pisnan() [3/3]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pisnan ( const Packet8f a)

◆ plain_enum_asserts()

template<typename A , typename B >
constexpr void Eigen::internal::plain_enum_asserts ( A  ,
B   
)
inlineconstexpr
642  {
643  static_assert(is_int_or_enum_v<A>, "Argument a must be an integer or enum");
644  static_assert(is_int_or_enum_v<B>, "Argument b must be an integer or enum");
645 }

Referenced by enum_eq_not_dynamic(), enum_ge_not_dynamic(), enum_gt_not_dynamic(), enum_le_not_dynamic(), enum_lt_not_dynamic(), max_size_prefer_dynamic(), min_size_prefer_dynamic(), min_size_prefer_fixed(), plain_enum_max(), and plain_enum_min().

◆ plain_enum_max()

◆ plain_enum_min()

◆ pldexp() [1/6]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pldexp ( const Packet a,
const Packet exponent 
)
inline
Returns
a * 2^((int)exponent) See https://en.cppreference.com/w/cpp/numeric/math/ldexp
739  {
740  EIGEN_USING_STD(ldexp)
741  return static_cast<Packet>(ldexp(a, static_cast<int>(exponent)));
742 }

References a, and EIGEN_USING_STD.

◆ pldexp() [2/6]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pldexp ( const Packet16bf a,
const Packet16bf exponent 
)
44  {
45  return F32ToBf16(pldexp<Packet16f>(Bf16ToF32(a), Bf16ToF32(exponent)));
46 }
EIGEN_STRONG_INLINE Packet16f pldexp< Packet16f >(const Packet16f &a, const Packet16f &exponent)
Definition: AVX512/PacketMath.h:1377

References a, Bf16ToF32(), F32ToBf16(), and pldexp< Packet16f >().

◆ pldexp() [3/6]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pldexp ( const Packet16h a,
const Packet16h exponent 
)
31  {
32  return float2half(pldexp<Packet16f>(half2float(a), half2float(exponent)));
33 }

References a, float2half(), half2float(), and pldexp< Packet16f >().

◆ pldexp() [4/6]

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pldexp ( const Packet4bf a,
const Packet4bf exponent 
)
52  {
53  return F32ToBf16(pldexp<Packet4f>(Bf16ToF32(a), Bf16ToF32(exponent)));
54 }
EIGEN_STRONG_INLINE Packet4f pldexp< Packet4f >(const Packet4f &a, const Packet4f &exponent)
Definition: AltiVec/PacketMath.h:2319

References a, Bf16ToF32(), F32ToBf16(), and pldexp< Packet4f >().

◆ pldexp() [5/6]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pldexp ( const Packet8bf a,
const Packet8bf exponent 
)
93  {
94  return F32ToBf16(pldexp<Packet8f>(Bf16ToF32(a), Bf16ToF32(exponent)));
95 }
EIGEN_STRONG_INLINE Packet8f pldexp< Packet8f >(const Packet8f &a, const Packet8f &exponent)
Definition: AVX/PacketMath.h:1906

References a, Bf16ToF32(), F32ToBf16(), and pldexp< Packet8f >().

◆ pldexp() [6/6]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pldexp ( const Packet8h a,
const Packet8h exponent 
)

◆ pldexp< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pldexp< Packet16f > ( const Packet16f a,
const Packet16f exponent 
)
1377  {
1378  return pldexp_generic(a, exponent);
1379 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet pldexp_generic(const Packet &a, const Packet &exponent)
Definition: GenericPacketMathFunctions.h:226

References a, and pldexp_generic().

Referenced by pldexp().

◆ pldexp< Packet16h >()

◆ pldexp< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pldexp< Packet2d > ( const Packet2d a,
const Packet2d exponent 
)
2753  {
2754  return pldexp_generic(a, exponent);
2755 }

References a, and pldexp_generic().

◆ pldexp< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pldexp< Packet2f > ( const Packet2f a,
const Packet2f exponent 
)
3449  {
3450  return pldexp_generic(a, exponent);
3451 }

References a, and pldexp_generic().

◆ pldexp< Packet32h >()

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pldexp< Packet32h > ( const Packet32h a,
const Packet32h exponent 
)
859  {
860  Packet16h low;
861  Packet16h high;
862  extract2Packet16h(a, low, high);
863 
864  Packet16h exp1;
865  Packet16h exp2;
866  extract2Packet16h(exponent, exp1, exp2);
867 
868  Packet16h lowOut = pldexp(low, exp1);
869  Packet16h highOut = pldexp(high, exp2);
870 
871  return combine2Packet16h(lowOut, highOut);
872 }

References a, combine2Packet16h(), Eigen::bfloat16_impl::exp2(), extract2Packet16h(), and pldexp().

◆ pldexp< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pldexp< Packet4d > ( const Packet4d a,
const Packet4d exponent 
)
1911  {
1912  // Clamp exponent to [-2099, 2099]
1913  const Packet4d max_exponent = pset1<Packet4d>(2099.0);
1914  const Packet4i e = _mm256_cvtpd_epi32(pmin(pmax(exponent, pnegate(max_exponent)), max_exponent));
1915 
1916  // Split 2^e into four factors and multiply.
1917  const Packet4i bias = pset1<Packet4i>(1023);
1918  Packet4i b = parithmetic_shift_right<2>(e); // floor(e/4)
1919 
1920  // 2^b
1921  Packet4i hi = vec4i_swizzle1(padd(b, bias), 0, 2, 1, 3);
1922  Packet4i lo = _mm_slli_epi64(hi, 52);
1923  hi = _mm_slli_epi64(_mm_srli_epi64(hi, 32), 52);
1924  Packet4d c = _mm256_castsi256_pd(_mm256_insertf128_si256(_mm256_castsi128_si256(lo), hi, 1));
1925  Packet4d out = pmul(pmul(pmul(a, c), c), c); // a * 2^(3b)
1926 
1927  // 2^(e - 3b)
1928  b = psub(psub(psub(e, b), b), b); // e - 3b
1929  hi = vec4i_swizzle1(padd(b, bias), 0, 2, 1, 3);
1930  lo = _mm_slli_epi64(hi, 52);
1931  hi = _mm_slli_epi64(_mm_srli_epi64(hi, 32), 52);
1932  c = _mm256_castsi256_pd(_mm256_insertf128_si256(_mm256_castsi128_si256(lo), hi, 1));
1933  out = pmul(out, c); // a * 2^e
1934  return out;
1935 }
EIGEN_STRONG_INLINE Packet4d pset1< Packet4d >(const double &from)
Definition: AVX/PacketMath.h:752
EIGEN_STRONG_INLINE Packet8bf pnegate(const Packet8bf &a)
Definition: AVX/PacketMath.h:2763

References a, b, calibrate::c, e(), out(), padd(), pmax(), pmin(), pmul(), pnegate(), pset1< Packet4d >(), pset1< Packet4i >(), psub(), and vec4i_swizzle1.

◆ pldexp< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pldexp< Packet4f > ( const Packet4f a,
const Packet4f exponent 
)
2319  {
2320  return pldexp_generic(a, exponent);
2321 }

References a, and pldexp_generic().

Referenced by pldexp(), and pldexp< Packet8bf >().

◆ pldexp< Packet8bf >()

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pldexp< Packet8bf > ( const Packet8bf a,
const Packet8bf exponent 
)

◆ pldexp< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pldexp< Packet8d > ( const Packet8d a,
const Packet8d exponent 
)
1382  {
1383  // Clamp exponent to [-2099, 2099]
1384  const Packet8d max_exponent = pset1<Packet8d>(2099.0);
1385  const Packet8i e = _mm512_cvtpd_epi32(pmin(pmax(exponent, pnegate(max_exponent)), max_exponent));
1386 
1387  // Split 2^e into four factors and multiply.
1388  const Packet8i bias = pset1<Packet8i>(1023);
1389  Packet8i b = parithmetic_shift_right<2>(e); // floor(e/4)
1390 
1391  // 2^b
1392  const Packet8i permute_idx = _mm256_setr_epi32(0, 4, 1, 5, 2, 6, 3, 7);
1393  Packet8i hi = _mm256_permutevar8x32_epi32(padd(b, bias), permute_idx);
1394  Packet8i lo = _mm256_slli_epi64(hi, 52);
1395  hi = _mm256_slli_epi64(_mm256_srli_epi64(hi, 32), 52);
1396  Packet8d c = _mm512_castsi512_pd(_mm512_inserti64x4(_mm512_castsi256_si512(lo), hi, 1));
1397  Packet8d out = pmul(pmul(pmul(a, c), c), c); // a * 2^(3b)
1398 
1399  // 2^(e - 3b)
1400  b = psub(psub(psub(e, b), b), b); // e - 3b
1401  hi = _mm256_permutevar8x32_epi32(padd(b, bias), permute_idx);
1402  lo = _mm256_slli_epi64(hi, 52);
1403  hi = _mm256_slli_epi64(_mm256_srli_epi64(hi, 32), 52);
1404  c = _mm512_castsi512_pd(_mm512_inserti64x4(_mm512_castsi256_si512(lo), hi, 1));
1405  out = pmul(out, c); // a * 2^e
1406  return out;
1407 }
EIGEN_STRONG_INLINE Packet8i pset1< Packet8i >(const int &from)
Definition: AVX/PacketMath.h:756
EIGEN_STRONG_INLINE Packet8d pset1< Packet8d >(const double &from)
Definition: AVX512/PacketMath.h:256
EIGEN_STRONG_INLINE Packet16bf pnegate(const Packet16bf &a)
Definition: AVX512/PacketMath.h:2864

References a, b, calibrate::c, e(), out(), padd(), pmax(), pmin(), pmul(), pnegate(), pset1< Packet8d >(), pset1< Packet8i >(), and psub().

◆ pldexp< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pldexp< Packet8f > ( const Packet8f a,
const Packet8f exponent 
)
1906  {
1907  return pldexp_generic(a, exponent);
1908 }

References a, and pldexp_generic().

Referenced by pldexp().

◆ pldexp< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pldexp< PacketXf > ( const PacketXf &  a,
const PacketXf &  exponent 
)
660  {
661  return pldexp_generic(a, exponent);
662 }

References a, and pldexp_generic().

◆ pldexp_fast()

template<typename Packet >
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet Eigen::internal::pldexp_fast ( const Packet a,
const Packet exponent 
)
277  {
278  typedef typename unpacket_traits<Packet>::integer_packet PacketI;
279  typedef typename unpacket_traits<Packet>::type Scalar;
280  typedef typename unpacket_traits<PacketI>::type ScalarI;
281  static constexpr int TotalBits = sizeof(Scalar) * CHAR_BIT, MantissaBits = numext::numeric_limits<Scalar>::digits - 1,
282  ExponentBits = TotalBits - MantissaBits - 1;
283 
284  const Packet bias = pset1<Packet>(Scalar((ScalarI(1) << (ExponentBits - 1)) - ScalarI(1))); // 127
285  const Packet limit = pset1<Packet>(Scalar((ScalarI(1) << ExponentBits) - ScalarI(1))); // 255
286  // restrict biased exponent between 0 and 255 for float.
287  const PacketI e = pcast<Packet, PacketI>(pmin(pmax(padd(exponent, bias), pzero(limit)), limit)); // exponent + 127
288  // return a * (2^e)
289  return pmul(a, preinterpret<Packet>(plogical_shift_left<MantissaBits>(e)));
290 }

References a, e(), padd(), pmax(), pmin(), pmul(), and pzero().

Referenced by generic_pow_impl(), Eigen::internal::scalar_logistic_op< float >::packetOp(), pexp_double(), and pexp_float().

◆ pldexp_fast< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pldexp_fast< Packet2d > ( const Packet2d a,
const Packet2d exponent 
)
1793  {
1794  // Clamp exponent to [-1023, 1024]
1795  const Packet2d min_exponent = pset1<Packet2d>(-1023.0);
1796  const Packet2d max_exponent = pset1<Packet2d>(1024.0);
1797  const Packet2d e = pmin(pmax(exponent, min_exponent), max_exponent);
1798 
1799  // Convert e to integer and swizzle to low-order bits.
1800  const Packet4i ei = vec4i_swizzle1(_mm_cvtpd_epi32(e), 0, 3, 1, 3);
1801 
1802  // Compute 2^e multiply:
1803  const Packet4i bias = _mm_set_epi32(0, 1023, 0, 1023);
1804  const Packet2d c = _mm_castsi128_pd(_mm_slli_epi64(padd(ei, bias), 52)); // 2^e
1805  return pmul(a, c);
1806 }
EIGEN_STRONG_INLINE Packet2d pset1< Packet2d >(const double &from)
Definition: LSX/PacketMath.h:503

References a, calibrate::c, e(), padd(), pmax(), pmin(), pmul(), pset1< Packet2d >(), and vec4i_swizzle1.

◆ pldexp_fast< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pldexp_fast< Packet4d > ( const Packet4d a,
const Packet4d exponent 
)
1938  {
1939  // Clamp exponent to [-1024, 1024]
1940  const Packet4d min_exponent = pset1<Packet4d>(-1023.0);
1941  const Packet4d max_exponent = pset1<Packet4d>(1024.0);
1942  const Packet4i e = _mm256_cvtpd_epi32(pmin(pmax(exponent, min_exponent), max_exponent));
1943  const Packet4i bias = pset1<Packet4i>(1023);
1944 
1945  // 2^e
1946  Packet4i hi = vec4i_swizzle1(padd(e, bias), 0, 2, 1, 3);
1947  const Packet4i lo = _mm_slli_epi64(hi, 52);
1948  hi = _mm_slli_epi64(_mm_srli_epi64(hi, 32), 52);
1949  const Packet4d c = _mm256_castsi256_pd(_mm256_insertf128_si256(_mm256_castsi128_si256(lo), hi, 1));
1950  return pmul(a, c); // a * 2^e
1951 }

References a, calibrate::c, e(), padd(), pmax(), pmin(), pmul(), pset1< Packet4d >(), pset1< Packet4i >(), and vec4i_swizzle1.

◆ pldexp_generic()

template<typename Packet >
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Packet Eigen::internal::pldexp_generic ( const Packet a,
const Packet exponent 
)

Default implementation of pldexp. It is expected to be called by implementers of template<> pldexp.

226  {
227  // We want to return a * 2^exponent, allowing for all possible integer
228  // exponents without overflowing or underflowing in intermediate
229  // computations.
230  //
231  // Since 'a' and the output can be denormal, the maximum range of 'exponent'
232  // to consider for a float is:
233  // -255-23 -> 255+23
234  // Below -278 any finite float 'a' will become zero, and above +278 any
235  // finite float will become inf, including when 'a' is the smallest possible
236  // denormal.
237  //
238  // Unfortunately, 2^(278) cannot be represented using either one or two
239  // finite normal floats, so we must split the scale factor into at least
240  // three parts. It turns out to be faster to split 'exponent' into four
241  // factors, since [exponent>>2] is much faster to compute that [exponent/3].
242  //
243  // Set e = min(max(exponent, -278), 278);
244  // b = floor(e/4);
245  // out = ((((a * 2^(b)) * 2^(b)) * 2^(b)) * 2^(e-3*b))
246  //
247  // This will avoid any intermediate overflows and correctly handle 0, inf,
248  // NaN cases.
249  typedef typename unpacket_traits<Packet>::integer_packet PacketI;
250  typedef typename unpacket_traits<Packet>::type Scalar;
251  typedef typename unpacket_traits<PacketI>::type ScalarI;
252  static constexpr int TotalBits = sizeof(Scalar) * CHAR_BIT, MantissaBits = numext::numeric_limits<Scalar>::digits - 1,
253  ExponentBits = TotalBits - MantissaBits - 1;
254 
255  const Packet max_exponent = pset1<Packet>(Scalar((ScalarI(1) << ExponentBits) + ScalarI(MantissaBits - 1))); // 278
256  const PacketI bias = pset1<PacketI>((ScalarI(1) << (ExponentBits - 1)) - ScalarI(1)); // 127
257  const PacketI e = pcast<Packet, PacketI>(pmin(pmax(exponent, pnegate(max_exponent)), max_exponent));
258  PacketI b = parithmetic_shift_right<2>(e); // floor(e/4);
259  Packet c = preinterpret<Packet>(plogical_shift_left<MantissaBits>(padd(b, bias))); // 2^b
260  Packet out = pmul(pmul(pmul(a, c), c), c); // a * 2^(3b)
261  b = pnmadd(pset1<PacketI>(3), b, e); // e - 3b
262  c = preinterpret<Packet>(plogical_shift_left<MantissaBits>(padd(b, bias))); // 2^(e-3*b)
263  out = pmul(out, c);
264  return out;
265 }

References a, b, calibrate::c, e(), out(), padd(), pmax(), pmin(), pmul(), pnegate(), and pnmadd().

Referenced by pldexp< Packet16f >(), pldexp< Packet2d >(), pldexp< Packet2f >(), pldexp< Packet4f >(), pldexp< Packet8f >(), and pldexp< PacketXf >().

◆ plgamma()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plgamma ( const Packet a)
Returns
the ln(|gamma(a)|) (coeff-wise)
22  {
23  using numext::lgamma;
24  return lgamma(a);
25 }

References a.

Referenced by packetmath_real(), and Eigen::internal::scalar_lgamma_op< Scalar >::packetOp().

◆ pload()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pload ( const typename unpacket_traits< Packet >::type *  from)
inline
Returns
a packet version of *from, from must be properly aligned
752  {
753  return *from;
754 }

◆ pload1()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pload1 ( const typename unpacket_traits< Packet >::type *  a)
inline
Returns
a packet with constant coefficients a[0], e.g.: (a[0],a[0],a[0],a[0])
814  {
815  return pset1<Packet>(*a);
816 }

References a.

◆ pload1< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pload1< Packet16f > ( const float *  from)
314  {
315 #if (EIGEN_COMP_GNUC != 0) || (EIGEN_COMP_CLANG != 0)
316  // Inline asm here helps reduce some register spilling in TRSM kernels.
317  // See note in unrolls::gemm::microKernel in TrsmKernel.h
318  Packet16f ret;
319  __asm__("vbroadcastss %[mem], %[dst]" : [dst] "=v"(ret) : [mem] "m"(*from));
320  return ret;
321 #else
322  return _mm512_broadcastss_ps(_mm_load_ps1(from));
323 #endif
324 }

References ret.

◆ pload1< Packet4d >()

812  {
813  return _mm256_broadcast_sd(from);
814 }

◆ pload1< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pload1< Packet4f > ( const float *  from)
154  {
156 
157  float f = *from;
158  Packet4f v = {f, f, f, f};
159  return v;
160 }

References EIGEN_MSA_DEBUG, f(), and v.

Referenced by ploadquad< Packet16b >().

◆ pload1< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pload1< Packet4i > ( const int32_t *  from)
163  {
165 
166  return __builtin_msa_fill_w(*from);
167 }

References EIGEN_MSA_DEBUG.

◆ pload1< Packet8d >()

326  {
327 #if (EIGEN_COMP_GNUC != 0) || (EIGEN_COMP_CLANG != 0)
328  Packet8d ret;
329  __asm__("vbroadcastsd %[mem], %[dst]" : [dst] "=v"(ret) : [mem] "m"(*from));
330  return ret;
331 #else
332  return _mm512_set1_pd(*from);
333 #endif
334 }

References ret.

Referenced by Eigen::internal::gemm_class< Scalar, is_unit_inc >::a_load().

◆ pload1< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pload1< Packet8f > ( const float *  from)
808  {
809  return _mm256_broadcast_ss(from);
810 }

◆ pload2()

EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pload2 ( const std::complex< float > &  from0,
const std::complex< float > &  from1 
)
185  {
186  Packet4f res0, res1;
187 #ifdef EIGEN_VECTORIZE_VSX
188  // Load two std::complex<float> from memory and combine
189  __asm__("lxsdx %x0,%y1" : "=wa"(res0) : "Z"(from0));
190  __asm__("lxsdx %x0,%y1" : "=wa"(res1) : "Z"(from1));
191 #ifdef _BIG_ENDIAN
192  __asm__("xxpermdi %x0, %x1, %x2, 0" : "=wa"(res0) : "wa"(res0), "wa"(res1));
193 #else
194  __asm__("xxpermdi %x0, %x2, %x1, 0" : "=wa"(res0) : "wa"(res0), "wa"(res1));
195 #endif
196 #else
197  *reinterpret_cast<std::complex<float>*>(&res0) = from0;
198  *reinterpret_cast<std::complex<float>*>(&res1) = from1;
199  res0 = vec_perm(res0, res1, p16uc_TRANSPOSE64_HI);
200 #endif
201  return Packet2cf(res0);
202 }
static Packet16uc p16uc_TRANSPOSE64_HI
Definition: AltiVec/PacketMath.h:143

References p16uc_TRANSPOSE64_HI.

Referenced by Eigen::internal::dhs_cpack< Scalar, DataMapper, Packet, PacketC, StorageOrder, Conjugate, PanelMode, UseLhs >::operator()().

◆ pload< Packet16b >()

1337  {
1338  EIGEN_DEBUG_ALIGNED_LOAD return _mm_load_si128(reinterpret_cast<const __m128i*>(from));
1339 }
#define EIGEN_DEBUG_ALIGNED_LOAD
Definition: GenericPacketMath.h:30

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet16bf >()

2706  {
2707  return _mm256_load_si256(reinterpret_cast<const __m256i*>(from));
2708 }

◆ pload< Packet16c >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pload< Packet16c > ( const int8_t *  from)
1411  {
1412  EIGEN_DEBUG_ALIGNED_LOAD return __lsx_vld(from, 0);
1413 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet16c >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pload< Packet16c > ( const signed char from)
512  {
513  return pload_common<Packet16c>(from);
514 }

Referenced by ploaddup< Packet16c >(), and ploadquad< Packet16c >().

◆ pload< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pload< Packet16f > ( const float *  from)
969  {
970  EIGEN_DEBUG_ALIGNED_LOAD return _mm512_load_ps(from);
971 }

References EIGEN_DEBUG_ALIGNED_LOAD.

Referenced by pload< Packet8cf >().

◆ pload< Packet16h >()

2213  {
2214  return _mm256_load_si256(reinterpret_cast<const __m256i*>(from));
2215 }

Referenced by ptranspose().

◆ pload< Packet16i >()

977  {
978  EIGEN_DEBUG_ALIGNED_LOAD return _mm512_load_epi64(from);
979 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet16uc >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pload< Packet16uc > ( const uint8_t *  from)
1427  {
1428  EIGEN_DEBUG_ALIGNED_LOAD return __lsx_vld(from, 0);
1429 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet16uc >() [2/2]

517  {
518  return pload_common<Packet16uc>(from);
519 }

Referenced by ploaddup< Packet16uc >(), and ploadquad< Packet16uc >().

◆ pload< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pload< Packet1cd > ( const std::complex< double > *  from)
369  {
370  EIGEN_DEBUG_ALIGNED_LOAD return Packet1cd(pload<Packet2d>((const double*)from));
371 }

References EIGEN_DEBUG_ALIGNED_LOAD, and pload< Packet2d >().

Referenced by pgather< std::complex< double >, Packet1cd >().

◆ pload< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pload< Packet1cf > ( const std::complex< float > *  from)
299  {
300  EIGEN_DEBUG_ALIGNED_LOAD return Packet1cf(pload<Packet2f>((const float*)from));
301 }

References EIGEN_DEBUG_ALIGNED_LOAD, and pload< Packet2f >().

◆ pload< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::pload< Packet2cd > ( const std::complex< double > *  from)
329  {
330  EIGEN_DEBUG_ALIGNED_LOAD return Packet2cd(_mm256_load_pd((const double*)from));
331 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pload< Packet2cf > ( const std::complex< float > *  from)
144  {
145  return Packet2cf(pload<Packet4f>((const float*)from));
146 }
EIGEN_STRONG_INLINE Packet4f pload< Packet4f >(const float *from)
Definition: AltiVec/PacketMath.h:492

References pload< Packet4f >().

◆ pload< Packet2d >()

◆ pload< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pload< Packet2f > ( const float *  from)
2386  {
2387  EIGEN_DEBUG_ALIGNED_LOAD return vld1_f32(from);
2388 }

References EIGEN_DEBUG_ALIGNED_LOAD.

Referenced by pcast< Packet2l, Packet2f >(), pcast< Packet2ul, Packet2f >(), and pload< Packet1cf >().

◆ pload< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pload< Packet2i > ( const int32_t *  from)
2438  {
2439  EIGEN_DEBUG_ALIGNED_LOAD return vld1_s32(from);
2440 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pload< Packet2l > ( const int64_t *  from)
1423  {
1424  EIGEN_DEBUG_ALIGNED_LOAD return __lsx_vld(from, 0);
1425 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pload< Packet2ui > ( const uint32_t *  from)
2446  {
2447  EIGEN_DEBUG_ALIGNED_LOAD return vld1_u32(from);
2448 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pload< Packet2ul > ( const uint64_t *  from)
1439  {
1440  EIGEN_DEBUG_ALIGNED_LOAD return __lsx_vld(from, 0);
1441 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet32h >()

144  {
145  EIGEN_DEBUG_ALIGNED_LOAD return _mm512_load_ph(from);
146 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet4bf >()

4835  {
4836  return Packet4bf(pload<Packet4us>(reinterpret_cast<const uint16_t*>(from)));
4837 }
EIGEN_STRONG_INLINE Packet4us pload< Packet4us >(const uint16_t *from)
Definition: NEON/PacketMath.h:2430

References pload< Packet4us >().

◆ pload< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pload< Packet4c > ( const int8_t *  from)
2394  {
2395  Packet4c res;
2396  memcpy(&res, from, sizeof(Packet4c));
2397  return res;
2398 }

References res.

Referenced by ploaddup< Packet4c >().

◆ pload< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::pload< Packet4cd > ( const std::complex< double > *  from)
307  {
308  EIGEN_DEBUG_ALIGNED_LOAD return Packet4cd(pload<Packet8d>((const double*)from));
309 }
EIGEN_STRONG_INLINE Packet8d pload< Packet8d >(const double *from)
Definition: AVX512/PacketMath.h:973

References EIGEN_DEBUG_ALIGNED_LOAD, and pload< Packet8d >().

◆ pload< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::pload< Packet4cf > ( const std::complex< float > *  from)
127  {
128  EIGEN_DEBUG_ALIGNED_LOAD return Packet4cf(_mm256_load_ps(&numext::real_ref(*from)));
129 }

References EIGEN_DEBUG_ALIGNED_LOAD, and Eigen::numext::real_ref().

◆ pload< Packet4d >()

1494  {
1495  EIGEN_DEBUG_ALIGNED_LOAD return _mm256_load_pd(from);
1496 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet4f >()

◆ pload< Packet4i >() [1/2]

497  {
498  return pload_common<Packet4i>(from);
499 }

Referenced by ploaddup< Packet4i >().

◆ pload< Packet4i >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pload< Packet4i > ( const int32_t *  from)
1419  {
1420  EIGEN_DEBUG_ALIGNED_LOAD return __lsx_vld(from, 0);
1421 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pload< Packet4s > ( const int16_t *  from)
2422  {
2423  EIGEN_DEBUG_ALIGNED_LOAD return vld1_s16(from);
2424 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pload< Packet4uc > ( const uint8_t *  from)
2408  {
2409  Packet4uc res;
2410  memcpy(&res, from, sizeof(Packet4uc));
2411  return res;
2412 }

References res.

Referenced by ploaddup< Packet4uc >().

◆ pload< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pload< Packet4ui > ( const uint32_t *  from)
1435  {
1436  EIGEN_DEBUG_ALIGNED_LOAD return __lsx_vld(from, 0);
1437 }

References EIGEN_DEBUG_ALIGNED_LOAD.

Referenced by ploaddup< Packet4ui >().

◆ pload< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pload< Packet4us > ( const uint16_t *  from)
2430  {
2431  EIGEN_DEBUG_ALIGNED_LOAD return vld1_u16(from);
2432 }

References EIGEN_DEBUG_ALIGNED_LOAD.

Referenced by pload< Packet4bf >().

◆ pload< Packet8bf >()

522  {
523  return pload_common<Packet8us>(reinterpret_cast<const unsigned short int*>(from));
524 }

Referenced by plset< Packet8bf >(), and loadColData_impl< RhsMapper, linear >::run().

◆ pload< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pload< Packet8c > ( const int8_t *  from)
2400  {
2401  EIGEN_DEBUG_ALIGNED_LOAD return vld1_s8(from);
2402 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::pload< Packet8cf > ( const std::complex< float > *  from)
120  {
122 }
EIGEN_STRONG_INLINE Packet16f pload< Packet16f >(const float *from)
Definition: AVX512/PacketMath.h:969

References EIGEN_DEBUG_ALIGNED_LOAD, pload< Packet16f >(), and Eigen::numext::real_ref().

◆ pload< Packet8d >()

973  {
974  EIGEN_DEBUG_ALIGNED_LOAD return _mm512_load_pd(from);
975 }

References EIGEN_DEBUG_ALIGNED_LOAD.

Referenced by pload< Packet4cd >().

◆ pload< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pload< Packet8f > ( const float *  from)
1490  {
1491  EIGEN_DEBUG_ALIGNED_LOAD return _mm256_load_ps(from);
1492 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet8h >()

2227  {
2228  return _mm_load_si128(reinterpret_cast<const __m128i*>(from));
2229 }

Referenced by ptranspose().

◆ pload< Packet8i >()

1498  {
1499  EIGEN_DEBUG_ALIGNED_LOAD return _mm256_load_si256(reinterpret_cast<const __m256i*>(from));
1500 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pload< Packet8l > ( const int64_t *  from)
981  {
982  EIGEN_DEBUG_ALIGNED_LOAD return _mm512_load_epi64(from);
983 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet8s >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pload< Packet8s > ( const int16_t *  from)
1415  {
1416  EIGEN_DEBUG_ALIGNED_LOAD return __lsx_vld(from, 0);
1417 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet8s >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pload< Packet8s > ( const short int from)
502  {
503  return pload_common<Packet8s>(from);
504 }

Referenced by ploaddup< Packet8s >(), and ploadquad< Packet8s >().

◆ pload< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pload< Packet8uc > ( const uint8_t *  from)
2414  {
2415  EIGEN_DEBUG_ALIGNED_LOAD return vld1_u8(from);
2416 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pload< Packet8ui > ( const uint32_t *  from)
1502  {
1503  EIGEN_DEBUG_ALIGNED_LOAD return _mm256_load_si256(reinterpret_cast<const __m256i*>(from));
1504 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet8us >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pload< Packet8us > ( const uint16_t *  from)
1431  {
1432  EIGEN_DEBUG_ALIGNED_LOAD return __lsx_vld(from, 0);
1433 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< Packet8us >() [2/2]

507  {
508  return pload_common<Packet8us>(from);
509 }

Referenced by ploaddup< Packet8us >(), and ploadquad< Packet8us >().

◆ pload< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pload< PacketXf > ( const float *  from)
522  {
523  EIGEN_DEBUG_ALIGNED_LOAD return svld1_f32(svptrue_b32(), from);
524 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pload< PacketXi > ( const numext::int32_t from)
198  {
199  EIGEN_DEBUG_ALIGNED_LOAD return svld1_s32(svptrue_b32(), from);
200 }

References EIGEN_DEBUG_ALIGNED_LOAD.

◆ pload_common()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::pload_common ( const __UNPACK_TYPE__(Packet) *  from)
478  {
479  // some versions of GCC throw "unused-but-set-parameter".
480  // ignoring these warnings for now.
481  EIGEN_UNUSED_VARIABLE(from);
483 #ifdef EIGEN_VECTORIZE_VSX
484  return vec_xl(0, const_cast<__UNPACK_TYPE__(Packet)*>(from));
485 #else
486  return vec_ld(0, from);
487 #endif
488 }

References __UNPACK_TYPE__(), EIGEN_DEBUG_ALIGNED_LOAD, and EIGEN_UNUSED_VARIABLE.

◆ pload_ignore()

template<typename Packet >
EIGEN_ALWAYS_INLINE Packet Eigen::internal::pload_ignore ( const __UNPACK_TYPE__(Packet) *  from)
527  {
528  // some versions of GCC throw "unused-but-set-parameter".
529  // ignoring these warnings for now.
530  EIGEN_UNUSED_VARIABLE(from);
532  // Ignore partial input memory initialized
533 #if !EIGEN_COMP_LLVM
534 #pragma GCC diagnostic push
535 #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
536 #endif
537 #ifdef EIGEN_VECTORIZE_VSX
538  return vec_xl(0, const_cast<__UNPACK_TYPE__(Packet)*>(from));
539 #else
540  return vec_ld(0, from);
541 #endif
542 #if !EIGEN_COMP_LLVM
543 #pragma GCC diagnostic pop
544 #endif
545 }

References __UNPACK_TYPE__(), EIGEN_DEBUG_ALIGNED_LOAD, and EIGEN_UNUSED_VARIABLE.

◆ pload_ignore< Packet2cf >()

template<>
EIGEN_ALWAYS_INLINE Packet2cf Eigen::internal::pload_ignore< Packet2cf > ( const std::complex< float > *  from)
205  {
206  Packet2cf res;
207  res.v = pload_ignore<Packet4f>(reinterpret_cast<const float*>(from));
208  return res;
209 }

References res.

◆ pload_ignore< Packet8bf >()

548  {
549  return pload_ignore<Packet8us>(reinterpret_cast<const unsigned short int*>(from));
550 }

◆ pload_partial()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pload_partial ( const typename unpacket_traits< Packet >::type *  from,
const Index  n,
const Index  offset = 0 
)
inline
Returns
n elements of a packet version of *from, from must be properly aligned offset indicates the starting element in which to load and offset + n <= unpacket_traits::size All elements before offset and after the last element loaded will initialized with zero
762  {
763  const Index packet_size = unpacket_traits<Packet>::size;
764  eigen_assert(n + offset <= packet_size && "number of elements plus offset will read past end of packet");
765  typedef typename unpacket_traits<Packet>::type Scalar;
766  EIGEN_ALIGN_MAX Scalar elements[packet_size] = {Scalar(0)};
767  for (Index i = offset; i < numext::mini(n + offset, packet_size); i++) {
768  elements[i] = from[i - offset];
769  }
770  return pload<Packet>(elements);
771 }

References EIGEN_ALIGN_MAX, eigen_assert, i, Eigen::numext::mini(), and n.

◆ pload_partial< Packet16c >()

template<>
EIGEN_ALWAYS_INLINE Packet16c Eigen::internal::pload_partial< Packet16c > ( const signed char from,
const Index  n,
const Index  offset 
)
619  {
620  return pload_partial_common<Packet16c>(from, n, offset);
621 }

References n.

◆ pload_partial< Packet16uc >()

template<>
EIGEN_ALWAYS_INLINE Packet16uc Eigen::internal::pload_partial< Packet16uc > ( const unsigned char from,
const Index  n,
const Index  offset 
)
624  {
625  return pload_partial_common<Packet16uc>(from, n, offset);
626 }

References n.

◆ pload_partial< Packet2cf >()

template<>
EIGEN_ALWAYS_INLINE Packet2cf Eigen::internal::pload_partial< Packet2cf > ( const std::complex< float > *  from,
const Index  n,
const Index  offset 
)
153  {
154  return Packet2cf(pload_partial<Packet4f>((const float*)from, n * 2, offset * 2));
155 }
EIGEN_ALWAYS_INLINE Packet4f pload_partial< Packet4f >(const float *from, const Index n, const Index offset)
Definition: AltiVec/PacketMath.h:593

References n, and pload_partial< Packet4f >().

◆ pload_partial< Packet4f >()

template<>
EIGEN_ALWAYS_INLINE Packet4f Eigen::internal::pload_partial< Packet4f > ( const float *  from,
const Index  n,
const Index  offset 
)
593  {
594  return pload_partial_common<Packet4f>(from, n, offset);
595 }

References n.

Referenced by pload_partial< Packet2cf >().

◆ pload_partial< Packet4i >()

template<>
EIGEN_ALWAYS_INLINE Packet4i Eigen::internal::pload_partial< Packet4i > ( const int from,
const Index  n,
const Index  offset 
)
598  {
599  return pload_partial_common<Packet4i>(from, n, offset);
600 }

References n.

◆ pload_partial< Packet8bf >()

template<>
EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::pload_partial< Packet8bf > ( const bfloat16 from,
const Index  n,
const Index  offset 
)
614  {
615  return pload_partial_common<Packet8us>(reinterpret_cast<const unsigned short int*>(from), n, offset);
616 }

References n.

◆ pload_partial< Packet8s >()

template<>
EIGEN_ALWAYS_INLINE Packet8s Eigen::internal::pload_partial< Packet8s > ( const short int from,
const Index  n,
const Index  offset 
)
603  {
604  return pload_partial_common<Packet8s>(from, n, offset);
605 }

References n.

◆ pload_partial< Packet8us >()

template<>
EIGEN_ALWAYS_INLINE Packet8us Eigen::internal::pload_partial< Packet8us > ( const unsigned short int from,
const Index  n,
const Index  offset 
)
609  {
610  return pload_partial_common<Packet8us>(from, n, offset);
611 }

References n.

◆ pload_partial_common()

template<typename Packet >
EIGEN_ALWAYS_INLINE Packet Eigen::internal::pload_partial_common ( const __UNPACK_TYPE__(Packet) *  from,
const Index  n,
const Index  offset 
)
554  {
555  // some versions of GCC throw "unused-but-set-parameter".
556  // ignoring these warnings for now.
557  const Index packet_size = unpacket_traits<Packet>::size;
558  eigen_internal_assert(n + offset <= packet_size && "number of elements plus offset will read past end of packet");
559  const Index size = sizeof(__UNPACK_TYPE__(Packet));
560 #ifdef _ARCH_PWR9
561  EIGEN_UNUSED_VARIABLE(packet_size);
563  EIGEN_UNUSED_VARIABLE(from);
564  Packet load = vec_xl_len(const_cast<__UNPACK_TYPE__(Packet)*>(from), n * size);
565  if (offset) {
566  Packet16uc shift = pset1<Packet16uc>(offset * 8 * size);
567 #ifdef _BIG_ENDIAN
568  load = Packet(vec_sro(Packet16uc(load), shift));
569 #else
570  load = Packet(vec_slo(Packet16uc(load), shift));
571 #endif
572  }
573  return load;
574 #else
575  if (n) {
577  unsigned char* load2 = reinterpret_cast<unsigned char*>(load + offset);
578  unsigned char* from2 = reinterpret_cast<unsigned char*>(const_cast<__UNPACK_TYPE__(Packet)*>(from));
579  Index n2 = n * size;
580  if (16 <= n2) {
581  pstoreu(load2, ploadu<Packet16uc>(from2));
582  } else {
583  memcpy((void*)load2, (void*)from2, n2);
584  }
585  return pload_ignore<Packet>(load);
586  } else {
587  return Packet(pset1<Packet16uc>(0));
588  }
589 #endif
590 }
void load(Archive &ar, ParticleHandler &handl)
Definition: Particles.h:21
EIGEN_STRONG_INLINE Packet16uc ploadu< Packet16uc >(const unsigned char *from)
Definition: AltiVec/PacketMath.h:1557
EIGEN_STRONG_INLINE Packet16uc pset1< Packet16uc >(const unsigned char &from)
Definition: AltiVec/PacketMath.h:798

References __UNPACK_TYPE__(), EIGEN_ALIGN16, EIGEN_DEBUG_ALIGNED_LOAD, eigen_internal_assert, EIGEN_UNUSED_VARIABLE, load(), n, ploadu< Packet16uc >(), pset1< Packet16uc >(), pstoreu(), and size.

◆ ploaddup()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::ploaddup ( const typename unpacket_traits< Packet >::type *  from)
Returns
a packet with elements of *from duplicated. For instance, for a packet of 8 elements, 4 scalars will be read from *from and duplicated to form: {from[0],from[0],from[1],from[1],from[2],from[2],from[3],from[3]} Currently, this function is only used for scalar * complex products.
824  {
825  return *from;
826 }

◆ ploaddup< Packet16b >()

1435  {
1436  __m128i tmp = _mm_castpd_si128(pload1<Packet2d>(reinterpret_cast<const double*>(from)));
1437  return _mm_unpacklo_epi8(tmp, tmp);
1438 }

References tmp.

◆ ploaddup< Packet16bf >()

2726  {
2727  unsigned short a = from[0].value;
2728  unsigned short b = from[1].value;
2729  unsigned short c = from[2].value;
2730  unsigned short d = from[3].value;
2731  unsigned short e = from[4].value;
2732  unsigned short f = from[5].value;
2733  unsigned short g = from[6].value;
2734  unsigned short h = from[7].value;
2735  return _mm256_set_epi16(h, h, g, g, f, f, e, e, d, d, c, c, b, b, a, a);
2736 }

References a, b, calibrate::c, e(), f(), and Eigen::bfloat16_impl::__bfloat16_raw::value.

◆ ploaddup< Packet16c >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::ploaddup< Packet16c > ( const int8_t *  from)
1494  {
1495  Packet16c tmp = pload<Packet16c>(from);
1496  return __lsx_vilvl_b(tmp, tmp);
1497 }
EIGEN_STRONG_INLINE Packet16c pload< Packet16c >(const int8_t *from)
Definition: LSX/PacketMath.h:1411

References pload< Packet16c >(), and tmp.

◆ ploaddup< Packet16c >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::ploaddup< Packet16c > ( const signed char from)
1694  {
1695  Packet16c p;
1696  if ((std::ptrdiff_t(from) % 16) == 0)
1697  p = pload<Packet16c>(from);
1698  else
1699  p = ploadu<Packet16c>(from);
1700  return vec_mergeh(p, p);
1701 }
EIGEN_STRONG_INLINE Packet16c pload< Packet16c >(const signed char *from)
Definition: AltiVec/PacketMath.h:512
EIGEN_STRONG_INLINE Packet16c ploadu< Packet16c >(const signed char *from)
Definition: AltiVec/PacketMath.h:1553

References p, pload< Packet16c >(), and ploadu< Packet16c >().

◆ ploaddup< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::ploaddup< Packet16f > ( const float *  from)
1016  {
1017  // an unaligned load is required here as there is no requirement
1018  // on the alignment of input pointer 'from'
1019  __m256i low_half = _mm256_castps_si256(_mm256_loadu_ps(from));
1020  __m512 even_elements = _mm512_castsi512_ps(_mm512_cvtepu32_epi64(low_half));
1021  __m512 pairs = _mm512_permute_ps(even_elements, _MM_SHUFFLE(2, 2, 0, 0));
1022  return pairs;
1023 }

◆ ploaddup< Packet16h >()

2237  {
2238  unsigned short a = from[0].x;
2239  unsigned short b = from[1].x;
2240  unsigned short c = from[2].x;
2241  unsigned short d = from[3].x;
2242  unsigned short e = from[4].x;
2243  unsigned short f = from[5].x;
2244  unsigned short g = from[6].x;
2245  unsigned short h = from[7].x;
2246  return _mm256_set_epi16(h, h, g, g, f, f, e, e, d, d, c, c, b, b, a, a);
2247 }
numext::uint16_t x
Definition: Half.h:101

References a, b, calibrate::c, e(), f(), and Eigen::half_impl::__half_raw::x.

◆ ploaddup< Packet16i >()

1046  {
1047  __m256i low_half = _mm256_load_si256(reinterpret_cast<const __m256i*>(from));
1048  __m512 even_elements = _mm512_castsi512_ps(_mm512_cvtepu32_epi64(low_half));
1049  __m512 pairs = _mm512_permute_ps(even_elements, _MM_SHUFFLE(2, 2, 0, 0));
1050  return _mm512_castps_si512(pairs);
1051 }

◆ ploaddup< Packet16uc >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::ploaddup< Packet16uc > ( const uint8_t *  from)
1513  {
1515  return __lsx_vilvl_b(tmp, tmp);
1516 }
EIGEN_STRONG_INLINE Packet16uc pload< Packet16uc >(const uint8_t *from)
Definition: LSX/PacketMath.h:1427

References pload< Packet16uc >(), and tmp.

◆ ploaddup< Packet16uc >() [2/2]

1704  {
1705  Packet16uc p;
1706  if ((std::ptrdiff_t(from) % 16) == 0)
1707  p = pload<Packet16uc>(from);
1708  else
1709  p = ploadu<Packet16uc>(from);
1710  return vec_mergeh(p, p);
1711 }
EIGEN_STRONG_INLINE Packet16uc pload< Packet16uc >(const unsigned char *from)
Definition: AltiVec/PacketMath.h:517

References p, pload< Packet16uc >(), and ploadu< Packet16uc >().

◆ ploaddup< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::ploaddup< Packet1cd > ( const std::complex< double > *  from)
383  {
384  return pset1<Packet1cd>(*from);
385 }
EIGEN_STRONG_INLINE Packet1cd pset1< Packet1cd >(const std::complex< double > &from)
Definition: LSX/Complex.h:378

References pset1< Packet1cd >().

◆ ploaddup< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::ploaddup< Packet1cf > ( const std::complex< float > *  from)
317  {
318  return pset1<Packet1cf>(*from);
319 }
EIGEN_STRONG_INLINE Packet1cf pset1< Packet1cf >(const std::complex< float > &from)
Definition: NEON/Complex.h:122

References pset1< Packet1cf >().

◆ ploaddup< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::ploaddup< Packet2cd > ( const std::complex< double > *  from)
345  {
346  return pset1<Packet2cd>(*from);
347 }
EIGEN_STRONG_INLINE Packet2cd pset1< Packet2cd >(const std::complex< double > &from)
Definition: AVX/Complex.h:338

References pset1< Packet2cd >().

Referenced by ploaddup< Packet4cd >().

◆ ploaddup< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::ploaddup< Packet2cf > ( const std::complex< float > *  from)
162  {
163  return pset1<Packet2cf>(*from);
164 }
EIGEN_STRONG_INLINE Packet2cf pset1< Packet2cf >(const std::complex< float > &from)
Definition: AltiVec/Complex.h:125

References pset1< Packet2cf >().

Referenced by ploaddup< Packet4cf >().

◆ ploaddup< Packet2d >()

1490  {
1491  return pset1<Packet2d>(from[0]);
1492 }

References pset1< Packet2d >().

Referenced by pload_complex_full(), and pload_realimag_combine().

◆ ploaddup< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::ploaddup< Packet2f > ( const float *  from)
2540  {
2541  return vld1_dup_f32(from);
2542 }

◆ ploaddup< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::ploaddup< Packet2i > ( const int32_t *  from)
2602  {
2603  return vld1_dup_s32(from);
2604 }

◆ ploaddup< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::ploaddup< Packet2l > ( const int64_t *  from)
1509  {
1510  return pset1<Packet2l>(from[0]);
1511 }
EIGEN_STRONG_INLINE Packet2l pset1< Packet2l >(const int64_t &from)
Definition: LSX/PacketMath.h:478

References pset1< Packet2l >().

◆ ploaddup< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::ploaddup< Packet2ui > ( const uint32_t *  from)
2610  {
2611  return vld1_dup_u32(from);
2612 }

◆ ploaddup< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::ploaddup< Packet2ul > ( const uint64_t *  from)
1528  {
1529  return pset1<Packet2ul>(from[0]);
1530 }
EIGEN_STRONG_INLINE Packet2ul pset1< Packet2ul >(const uint64_t &from)
Definition: LSX/PacketMath.h:494

References pset1< Packet2ul >().

◆ ploaddup< Packet32h >()

171  {
172  __m512h a = _mm512_castph256_ph512(_mm256_loadu_ph(from));
173  return _mm512_permutexvar_ph(_mm512_set_epi16(15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6,
174  5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0),
175  a);
176 }

References a.

◆ ploaddup< Packet4bf >()

4855  {
4856  return Packet4bf(ploaddup<Packet4us>(reinterpret_cast<const uint16_t*>(from)));
4857 }
EIGEN_STRONG_INLINE Packet4us ploaddup< Packet4us >(const uint16_t *from)
Definition: NEON/PacketMath.h:2591

References ploaddup< Packet4us >().

◆ ploaddup< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::ploaddup< Packet4c > ( const int8_t *  from)
2548  {
2549  const int8x8_t a = vreinterpret_s8_s32(vdup_n_s32(pload<Packet4c>(from)));
2550  return vget_lane_s32(vreinterpret_s32_s8(vzip_s8(a, a).val[0]), 0);
2551 }
EIGEN_STRONG_INLINE Packet4c pload< Packet4c >(const int8_t *from)
Definition: NEON/PacketMath.h:2394

References a, pload< Packet4c >(), and calibrate::val.

◆ ploaddup< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::ploaddup< Packet4cd > ( const std::complex< double > *  from)
321  {
322  return Packet4cd(
323  _mm512_insertf64x4(_mm512_castpd256_pd512(ploaddup<Packet2cd>(from).v), ploaddup<Packet2cd>(from + 1).v, 1));
324 }
EIGEN_STRONG_INLINE Packet2cd ploaddup< Packet2cd >(const std::complex< double > *from)
Definition: AVX/Complex.h:345

References ploaddup< Packet2cd >(), and v.

◆ ploaddup< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::ploaddup< Packet4cf > ( const std::complex< float > *  from)
143  {
144  // FIXME The following might be optimized using _mm256_movedup_pd
145  Packet2cf a = ploaddup<Packet2cf>(from);
146  Packet2cf b = ploaddup<Packet2cf>(from + 1);
147  return Packet4cf(_mm256_insertf128_ps(_mm256_castps128_ps256(a.v), b.v, 1));
148 }
EIGEN_STRONG_INLINE Packet2cf ploaddup< Packet2cf >(const std::complex< float > *from)
Definition: AltiVec/Complex.h:162

References a, b, and ploaddup< Packet2cf >().

◆ ploaddup< Packet4d >()

1556  {
1557  Packet4d tmp = _mm256_broadcast_pd((const __m128d*)(const void*)from);
1558  return _mm256_permute_pd(tmp, 3 << 2);
1559 }

References tmp.

◆ ploaddup< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::ploaddup< Packet4f > ( const float *  from)
1640  {
1641  return ploaddup_common<Packet4f>(from);
1642 }

◆ ploaddup< Packet4i >() [1/2]

1644  {
1645  return ploaddup_common<Packet4i>(from);
1646 }

◆ ploaddup< Packet4i >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::ploaddup< Packet4i > ( const int32_t *  from)
1504  {
1505  Packet4i tmp = pload<Packet4i>(from);
1506  return __lsx_vilvl_w(tmp, tmp);
1507 }
EIGEN_STRONG_INLINE Packet4i pload< Packet4i >(const int32_t *from)
Definition: LSX/PacketMath.h:1419

References pload< Packet4i >(), and tmp.

◆ ploaddup< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::ploaddup< Packet4s > ( const int16_t *  from)
2580  {
2581  return vreinterpret_s16_u32(
2582  vzip_u32(vreinterpret_u32_s16(vld1_dup_s16(from)), vreinterpret_u32_s16(vld1_dup_s16(from + 1))).val[0]);
2583 }

References calibrate::val.

◆ ploaddup< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::ploaddup< Packet4uc > ( const uint8_t *  from)
2564  {
2565  const uint8x8_t a = vreinterpret_u8_u32(vdup_n_u32(pload<Packet4uc>(from)));
2566  return vget_lane_u32(vreinterpret_u32_u8(vzip_u8(a, a).val[0]), 0);
2567 }
EIGEN_STRONG_INLINE Packet4uc pload< Packet4uc >(const uint8_t *from)
Definition: NEON/PacketMath.h:2408

References a, pload< Packet4uc >(), and calibrate::val.

◆ ploaddup< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::ploaddup< Packet4ui > ( const uint32_t *  from)
1523  {
1524  Packet4ui tmp = pload<Packet4ui>(from);
1525  return __lsx_vilvl_w(tmp, tmp);
1526 }
EIGEN_STRONG_INLINE Packet4ui pload< Packet4ui >(const uint32_t *from)
Definition: LSX/PacketMath.h:1435

References pload< Packet4ui >(), and tmp.

◆ ploaddup< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::ploaddup< Packet4us > ( const uint16_t *  from)
2591  {
2592  return vreinterpret_u16_u32(
2593  vzip_u32(vreinterpret_u32_u16(vld1_dup_u16(from)), vreinterpret_u32_u16(vld1_dup_u16(from + 1))).val[0]);
2594 }

References calibrate::val.

Referenced by ploaddup< Packet4bf >().

◆ ploaddup< Packet8bf >()

2423  {
2424  return ploaddup<Packet8us>(reinterpret_cast<const unsigned short int*>(from));
2425 }
EIGEN_STRONG_INLINE Packet8us ploaddup< Packet8us >(const unsigned short int *from)
Definition: AltiVec/PacketMath.h:1659

References ploaddup< Packet8us >().

◆ ploaddup< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::ploaddup< Packet8c > ( const int8_t *  from)
2553  {
2554  const int8x8_t a = vld1_s8(from);
2555  return vzip_s8(a, a).val[0];
2556 }

References a.

◆ ploaddup< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::ploaddup< Packet8cf > ( const std::complex< float > *  from)
136  {
137  return Packet8cf(_mm512_castpd_ps(ploaddup<Packet8d>((const double*)(const void*)from)));
138 }
EIGEN_STRONG_INLINE Packet8d ploaddup< Packet8d >(const double *from)
Definition: AVX512/PacketMath.h:1028

References ploaddup< Packet8d >().

◆ ploaddup< Packet8d >()

1028  {
1029  Packet8d tmp = _mm512_castpd256_pd512(ploadu<Packet4d>(from));
1030  const Packet8l scatter_mask = _mm512_set_epi64(3, 3, 2, 2, 1, 1, 0, 0);
1031  return _mm512_permutexvar_pd(scatter_mask, tmp);
1032 }
EIGEN_STRONG_INLINE Packet4d ploadu< Packet4d >(const double *from)
Definition: AVX/PacketMath.h:1511
eigen_packet_wrapper< __m512i, 1 > Packet8l
Definition: AVX512/PacketMath.h:37

References ploadu< Packet4d >(), and tmp.

Referenced by ploaddup< Packet8cf >().

◆ ploaddup< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::ploaddup< Packet8f > ( const float *  from)
1540  {
1541  // TODO try to find a way to avoid the need of a temporary register
1542  // Packet8f tmp = _mm256_castps128_ps256(_mm_loadu_ps(from));
1543  // tmp = _mm256_insertf128_ps(tmp, _mm_movehl_ps(_mm256_castps256_ps128(tmp),_mm256_castps256_ps128(tmp)), 1);
1544  // return _mm256_unpacklo_ps(tmp,tmp);
1545 
1546  // _mm256_insertf128_ps is very slow on Haswell, thus:
1547  Packet8f tmp = _mm256_broadcast_ps((const __m128*)(const void*)from);
1548  // mimic an "inplace" permutation of the lower 128bits using a blend
1549  tmp = _mm256_blend_ps(
1550  tmp, _mm256_castps128_ps256(_mm_permute_ps(_mm256_castps256_ps128(tmp), _MM_SHUFFLE(1, 0, 1, 0))), 15);
1551  // then we can perform a consistent permutation on the global register to get everything in shape:
1552  return _mm256_permute_ps(tmp, _MM_SHUFFLE(3, 3, 2, 2));
1553 }

References tmp.

◆ ploaddup< Packet8h >()

2247  {
2248  const numext::uint16_t a = numext::bit_cast<numext::uint16_t>(from[0]);
2249  const numext::uint16_t b = numext::bit_cast<numext::uint16_t>(from[1]);
2250  const numext::uint16_t c = numext::bit_cast<numext::uint16_t>(from[2]);
2251  const numext::uint16_t d = numext::bit_cast<numext::uint16_t>(from[3]);
2252  return _mm_set_epi16(d, d, c, c, b, b, a, a);
2253 }

References a, b, and calibrate::c.

◆ ploaddup< Packet8i >()

1562  {
1563 #ifdef EIGEN_VECTORIZE_AVX2
1564  const Packet8i a = _mm256_castsi128_si256(ploadu<Packet4i>(from));
1565  return _mm256_permutevar8x32_epi32(a, _mm256_setr_epi32(0, 0, 1, 1, 2, 2, 3, 3));
1566 #else
1567  __m256 tmp = _mm256_broadcast_ps((const __m128*)(const void*)from);
1568  // mimic an "inplace" permutation of the lower 128bits using a blend
1569  tmp = _mm256_blend_ps(
1570  tmp, _mm256_castps128_ps256(_mm_permute_ps(_mm256_castps256_ps128(tmp), _MM_SHUFFLE(1, 0, 1, 0))), 15);
1571  // then we can perform a consistent permutation on the global register to get everything in shape:
1572  return _mm256_castps_si256(_mm256_permute_ps(tmp, _MM_SHUFFLE(3, 3, 2, 2)));
1573 #endif
1574 }
EIGEN_STRONG_INLINE Packet4i ploadu< Packet4i >(const int *from)
Definition: AltiVec/PacketMath.h:1537

References a, ploadu< Packet4i >(), and tmp.

◆ ploaddup< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::ploaddup< Packet8l > ( const int64_t *  from)
1037  {
1038  Packet8l tmp = _mm512_castsi256_si512(ploadu<Packet4l>(from));
1039  const Packet8l scatter_mask = _mm512_set_epi64(3, 3, 2, 2, 1, 1, 0, 0);
1040  return _mm512_permutexvar_epi64(scatter_mask, tmp);
1041 }

References tmp.

◆ ploaddup< Packet8s >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::ploaddup< Packet8s > ( const int16_t *  from)
1499  {
1500  Packet8s tmp = pload<Packet8s>(from);
1501  return __lsx_vilvl_h(tmp, tmp);
1502 }
EIGEN_STRONG_INLINE Packet8s pload< Packet8s >(const int16_t *from)
Definition: LSX/PacketMath.h:1415

References pload< Packet8s >(), and tmp.

◆ ploaddup< Packet8s >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::ploaddup< Packet8s > ( const short int from)
1649  {
1650  Packet8s p;
1651  if ((std::ptrdiff_t(from) % 16) == 0)
1652  p = pload<Packet8s>(from);
1653  else
1654  p = ploadu<Packet8s>(from);
1655  return vec_mergeh(p, p);
1656 }
EIGEN_STRONG_INLINE Packet8s ploadu< Packet8s >(const short int *from)
Definition: AltiVec/PacketMath.h:1541
EIGEN_STRONG_INLINE Packet8s pload< Packet8s >(const short int *from)
Definition: AltiVec/PacketMath.h:502

References p, pload< Packet8s >(), and ploadu< Packet8s >().

◆ ploaddup< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::ploaddup< Packet8uc > ( const uint8_t *  from)
2569  {
2570  const uint8x8_t a = vld1_u8(from);
2571  return vzip_u8(a, a).val[0];
2572 }

References a.

◆ ploaddup< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::ploaddup< Packet8ui > ( const uint32_t *  from)
1576  {
1577 #ifdef EIGEN_VECTORIZE_AVX2
1578  const Packet8ui a = _mm256_castsi128_si256(ploadu<Packet4ui>(from));
1579  return _mm256_permutevar8x32_epi32(a, _mm256_setr_epi32(0, 0, 1, 1, 2, 2, 3, 3));
1580 #else
1581  __m256 tmp = _mm256_broadcast_ps((const __m128*)(const void*)from);
1582  // mimic an "inplace" permutation of the lower 128bits using a blend
1583  tmp = _mm256_blend_ps(
1584  tmp, _mm256_castps128_ps256(_mm_permute_ps(_mm256_castps256_ps128(tmp), _MM_SHUFFLE(1, 0, 1, 0))), 15);
1585  // then we can perform a consistent permutation on the global register to get
1586  // everything in shape:
1587  return _mm256_castps_si256(_mm256_permute_ps(tmp, _MM_SHUFFLE(3, 3, 2, 2)));
1588 #endif
1589 }
EIGEN_STRONG_INLINE Packet4ui ploadu< Packet4ui >(const uint32_t *from)
Definition: LSX/PacketMath.h:1476

References a, ploadu< Packet4ui >(), and tmp.

◆ ploaddup< Packet8us >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::ploaddup< Packet8us > ( const uint16_t *  from)
1518  {
1519  Packet8us tmp = pload<Packet8us>(from);
1520  return __lsx_vilvl_h(tmp, tmp);
1521 }
EIGEN_STRONG_INLINE Packet8us pload< Packet8us >(const uint16_t *from)
Definition: LSX/PacketMath.h:1431

References pload< Packet8us >(), and tmp.

◆ ploaddup< Packet8us >() [2/2]

1659  {
1660  Packet8us p;
1661  if ((std::ptrdiff_t(from) % 16) == 0)
1662  p = pload<Packet8us>(from);
1663  else
1664  p = ploadu<Packet8us>(from);
1665  return vec_mergeh(p, p);
1666 }
EIGEN_STRONG_INLINE Packet8us ploadu< Packet8us >(const unsigned short int *from)
Definition: AltiVec/PacketMath.h:1545
EIGEN_STRONG_INLINE Packet8us pload< Packet8us >(const unsigned short int *from)
Definition: AltiVec/PacketMath.h:507

References p, pload< Packet8us >(), and ploadu< Packet8us >().

Referenced by ploaddup< Packet8bf >().

◆ ploaddup< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::ploaddup< PacketXf > ( const float *  from)
532  {
533  svuint32_t indices = svindex_u32(0, 1); // index {base=0, base+step=1, base+step*2, ...}
534  indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a1, a1, a2, a2, ...}
535  return svld1_gather_u32index_f32(svptrue_b32(), from, indices);
536 }

◆ ploaddup< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::ploaddup< PacketXi > ( const numext::int32_t from)
208  {
209  svuint32_t indices = svindex_u32(0, 1); // index {base=0, base+step=1, base+step*2, ...}
210  indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a1, a1, a2, a2, ...}
211  return svld1_gather_u32index_s32(svptrue_b32(), from, indices);
212 }

◆ ploaddup_common()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::ploaddup_common ( const __UNPACK_TYPE__(Packet) *  from)
1631  {
1632  Packet p;
1633  if ((std::ptrdiff_t(from) % 16) == 0)
1634  p = pload<Packet>(from);
1635  else
1636  p = ploadu<Packet>(from);
1637  return vec_mergeh(p, p);
1638 }

References p.

◆ ploadl()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::ploadl ( const typename unpacket_traits< Packet >::type *  from)

◆ ploadl< Packet2d >()

1391  {
1392  EIGEN_DEBUG_UNALIGNED_LOAD return _mm_load_sd(from);
1393 }
#define EIGEN_DEBUG_UNALIGNED_LOAD
Definition: GenericPacketMath.h:34

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadl< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::ploadl< Packet4f > ( const float *  from)
1387  {
1388  EIGEN_DEBUG_UNALIGNED_LOAD return _mm_castpd_ps(_mm_load_sd(reinterpret_cast<const double*>(from)));
1389 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadLhs()

template<typename Packet >
EIGEN_ALWAYS_INLINE Packet Eigen::internal::ploadLhs ( const __UNPACK_TYPE__(Packet) *  lhs)
1545  {
1546  return ploadu<Packet>(lhs);
1547 }

◆ ploadLhsMMA()

EIGEN_ALWAYS_INLINE void Eigen::internal::ploadLhsMMA ( const double lhs,
__vector_pair &  lhsV 
)
144 { ploadRhsMMA(lhs, lhsV); }
EIGEN_ALWAYS_INLINE void ploadRhsMMA(const double *rhs, __vector_pair &rhsV)
Definition: MatrixProductMMA.h:134

References ploadRhsMMA().

◆ ploadquad() [1/3]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::ploadquad ( const bfloat16 from)
2739  {
2740  unsigned short a = from[0].value;
2741  unsigned short b = from[1].value;
2742  unsigned short c = from[2].value;
2743  unsigned short d = from[3].value;
2744  return _mm256_set_epi16(d, d, d, d, c, c, c, c, b, b, b, b, a, a, a, a);
2745 }

References a, b, calibrate::c, and Eigen::bfloat16_impl::__bfloat16_raw::value.

◆ ploadquad() [2/3]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::ploadquad ( const Eigen::half from)
2250  {
2251  unsigned short a = from[0].x;
2252  unsigned short b = from[1].x;
2253  unsigned short c = from[2].x;
2254  unsigned short d = from[3].x;
2255  return _mm256_set_epi16(d, d, d, d, c, c, c, c, b, b, b, b, a, a, a, a);
2256 }

References a, b, calibrate::c, and Eigen::half_impl::__half_raw::x.

◆ ploadquad() [3/3]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::ploadquad ( const typename unpacket_traits< Packet >::type *  from)
inline
Returns
a packet with elements of *from quadrupled. For instance, for a packet of 8 elements, 2 scalars will be read from *from and replicated to form: {from[0],from[0],from[0],from[0],from[1],from[1],from[1],from[1]} Currently, this function is only used in matrix products. For packet-size smaller or equal to 4, this function is equivalent to pload1
835  {
836  return pload1<Packet>(from);
837 }

◆ ploadquad< Packet16b >()

1443  {
1444  __m128i tmp = _mm_castps_si128(pload1<Packet4f>(reinterpret_cast<const float*>(from)));
1445  tmp = _mm_unpacklo_epi8(tmp, tmp);
1446  return _mm_unpacklo_epi16(tmp, tmp);
1447 }
EIGEN_STRONG_INLINE Packet4f pload1< Packet4f >(const float *from)
Definition: MSA/PacketMath.h:154

References pload1< Packet4f >(), and tmp.

◆ ploadquad< Packet16c >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::ploadquad< Packet16c > ( const int8_t *  from)
2577  {
2578  int8_t tmp[16] = {*from, *from, *from, *from, *(from + 1), *(from + 1),
2579  *(from + 1), *(from + 1), *(from + 2), *(from + 2), *(from + 2), *(from + 2),
2580  *(from + 3), *(from + 3), *(from + 3), *(from + 3)};
2581  return __lsx_vld(tmp, 0);
2582 }

References tmp.

◆ ploadquad< Packet16c >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::ploadquad< Packet16c > ( const signed char from)
1714  {
1715  Packet16c p;
1716  if ((std::ptrdiff_t(from) % 16) == 0)
1717  p = pload<Packet16c>(from);
1718  else
1719  p = ploadu<Packet16c>(from);
1720  return vec_perm(p, p, p16uc_QUADRUPLICATE16);
1721 }
static Packet16uc p16uc_QUADRUPLICATE16
Definition: AltiVec/PacketMath.h:106

References p, p16uc_QUADRUPLICATE16, pload< Packet16c >(), and ploadu< Packet16c >().

◆ ploadquad< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::ploadquad< Packet16f > ( const float *  from)
1056  {
1057  Packet16f tmp = _mm512_castps128_ps512(ploadu<Packet4f>(from));
1058  const Packet16i scatter_mask = _mm512_set_epi32(3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0);
1059  return _mm512_permutexvar_ps(scatter_mask, tmp);
1060 }

References ploadu< Packet4f >(), and tmp.

◆ ploadquad< Packet16i >()

1087  {
1088  Packet16i tmp = _mm512_castsi128_si512(ploadu<Packet4i>(from));
1089  const Packet16i scatter_mask = _mm512_set_epi32(3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0);
1090  return _mm512_permutexvar_epi32(scatter_mask, tmp);
1091 }

References ploadu< Packet4i >(), and tmp.

◆ ploadquad< Packet16uc >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::ploadquad< Packet16uc > ( const uint8_t *  from)
2584  {
2585  uint8_t tmp[16] = {*from, *from, *from, *from, *(from + 1), *(from + 1),
2586  *(from + 1), *(from + 1), *(from + 2), *(from + 2), *(from + 2), *(from + 2),
2587  *(from + 3), *(from + 3), *(from + 3), *(from + 3)};
2588  return __lsx_vld(tmp, 0);
2589 }

References tmp.

◆ ploadquad< Packet16uc >() [2/2]

1724  {
1725  Packet16uc p;
1726  if ((std::ptrdiff_t(from) % 16) == 0)
1727  p = pload<Packet16uc>(from);
1728  else
1729  p = ploadu<Packet16uc>(from);
1730  return vec_perm(p, p, p16uc_QUADRUPLICATE16);
1731 }

References p, p16uc_QUADRUPLICATE16, pload< Packet16uc >(), and ploadu< Packet16uc >().

◆ ploadquad< Packet32h >()

180  {
181  __m512h a = _mm512_castph128_ph512(_mm_loadu_ph(from));
182  return _mm512_permutexvar_ph(
183  _mm512_set_epi16(7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0),
184  a);
185 }

References a.

◆ ploadquad< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::ploadquad< Packet4c > ( const int8_t *  from)
2631  {
2632  return vget_lane_s32(vreinterpret_s32_s8(vld1_dup_s8(from)), 0);
2633 }

◆ ploadquad< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::ploadquad< Packet4f > ( const float *  from)
2703  {
2704  return (__m128)__lsx_vldrepl_w(from, 0);
2705 }

◆ ploadquad< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::ploadquad< Packet4i > ( const int32_t *  from)
2601  {
2602  int32_t tmp[4] = {*from, *from, *from, *from};
2603  return __lsx_vld(tmp, 0);
2604 }

References tmp.

◆ ploadquad< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::ploadquad< Packet4uc > ( const uint8_t *  from)
2648  {
2649  return vget_lane_u32(vreinterpret_u32_u8(vld1_dup_u8(from)), 0);
2650 }

◆ ploadquad< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::ploadquad< Packet4ui > ( const uint32_t *  from)
2606  {
2607  uint32_t tmp[4] = {*from, *from, *from, *from};
2608  return __lsx_vld(tmp, 0);
2609 }

References tmp.

◆ ploadquad< Packet8bf >()

1689  {
1690  return ploadquad<Packet8us>(reinterpret_cast<const unsigned short int*>(from));
1691 }
EIGEN_STRONG_INLINE Packet8us ploadquad< Packet8us >(const unsigned short int *from)
Definition: AltiVec/PacketMath.h:1679

References ploadquad< Packet8us >().

◆ ploadquad< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::ploadquad< Packet8c > ( const int8_t *  from)
2635  {
2636  return vreinterpret_s8_u32(
2637  vzip_u32(vreinterpret_u32_s8(vld1_dup_s8(from)), vreinterpret_u32_s8(vld1_dup_s8(from + 1))).val[0]);
2638 }

References calibrate::val.

◆ ploadquad< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::ploadquad< Packet8cf > ( const std::complex< float > *  from)
140  {
141  return Packet8cf(_mm512_castpd_ps(ploadquad<Packet8d>((const double*)(const void*)from)));
142 }
EIGEN_STRONG_INLINE Packet8d ploadquad< Packet8d >(const double *from)
Definition: AVX512/PacketMath.h:1065

References ploadquad< Packet8d >().

◆ ploadquad< Packet8d >()

1065  {
1066  __m256d lane0 = _mm256_set1_pd(*from);
1067  __m256d lane1 = _mm256_set1_pd(*(from + 1));
1068  __m512d tmp = _mm512_undefined_pd();
1069  tmp = _mm512_insertf64x4(tmp, lane0, 0);
1070  return _mm512_insertf64x4(tmp, lane1, 1);
1071 }

References tmp.

Referenced by ploadquad< Packet8cf >().

◆ ploadquad< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::ploadquad< Packet8f > ( const float *  from)
1593  {
1594  Packet8f tmp = _mm256_castps128_ps256(_mm_broadcast_ss(from));
1595  return _mm256_insertf128_ps(tmp, _mm_broadcast_ss(from + 1), 1);
1596 }

References tmp.

◆ ploadquad< Packet8h >()

2256  {
2257  const numext::uint16_t a = numext::bit_cast<numext::uint16_t>(from[0]);
2258  const numext::uint16_t b = numext::bit_cast<numext::uint16_t>(from[1]);
2259  return _mm_set_epi16(b, b, b, b, a, a, a, a);
2260 }

References a, and b.

◆ ploadquad< Packet8i >()

1598  {
1599  return _mm256_insertf128_si256(_mm256_set1_epi32(*from), _mm_set1_epi32(*(from + 1)), 1);
1600 }

◆ ploadquad< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::ploadquad< Packet8l > ( const int64_t *  from)
1076  {
1077  __m256i lane0 = _mm256_set1_epi64x(*from);
1078  __m256i lane1 = _mm256_set1_epi64x(*(from + 1));
1079  __m512i tmp = _mm512_undefined_epi32();
1080  tmp = _mm512_inserti64x4(tmp, lane0, 0);
1081  return _mm512_inserti64x4(tmp, lane1, 1);
1082 }

References tmp.

◆ ploadquad< Packet8s >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::ploadquad< Packet8s > ( const int16_t *  from)
2591  {
2592  int16_t tmp[8] = {*from, *from, *from, *from, *(from + 1), *(from + 1), *(from + 1), *(from + 1)};
2593  return __lsx_vld(tmp, 0);
2594 }

References tmp.

◆ ploadquad< Packet8s >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::ploadquad< Packet8s > ( const short int from)
1669  {
1670  Packet8s p;
1671  if ((std::ptrdiff_t(from) % 16) == 0)
1672  p = pload<Packet8s>(from);
1673  else
1674  p = ploadu<Packet8s>(from);
1675  return vec_perm(p, p, p16uc_QUADRUPLICATE16_HI);
1676 }
static Packet16uc p16uc_QUADRUPLICATE16_HI
Definition: AltiVec/PacketMath.h:105

References p, p16uc_QUADRUPLICATE16_HI, pload< Packet8s >(), and ploadu< Packet8s >().

◆ ploadquad< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::ploadquad< Packet8uc > ( const uint8_t *  from)
2652  {
2653  return vreinterpret_u8_u32(
2654  vzip_u32(vreinterpret_u32_u8(vld1_dup_u8(from)), vreinterpret_u32_u8(vld1_dup_u8(from + 1))).val[0]);
2655 }

References calibrate::val.

◆ ploadquad< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::ploadquad< Packet8ui > ( const uint32_t *  from)
1602  {
1603  return _mm256_insertf128_si256(_mm256_set1_epi32(*from), _mm_set1_epi32(*(from + 1)), 1);
1604 }

◆ ploadquad< Packet8us >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::ploadquad< Packet8us > ( const uint16_t *  from)
2596  {
2597  uint16_t tmp[8] = {*from, *from, *from, *from, *(from + 1), *(from + 1), *(from + 1), *(from + 1)};
2598  return __lsx_vld(tmp, 0);
2599 }

References tmp.

◆ ploadquad< Packet8us >() [2/2]

1679  {
1680  Packet8us p;
1681  if ((std::ptrdiff_t(from) % 16) == 0)
1682  p = pload<Packet8us>(from);
1683  else
1684  p = ploadu<Packet8us>(from);
1685  return vec_perm(p, p, p16uc_QUADRUPLICATE16_HI);
1686 }

References p, p16uc_QUADRUPLICATE16_HI, pload< Packet8us >(), and ploadu< Packet8us >().

Referenced by ploadquad< Packet8bf >().

◆ ploadquad< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::ploadquad< PacketXf > ( const float *  from)
539  {
540  svuint32_t indices = svindex_u32(0, 1); // index {base=0, base+step=1, base+step*2, ...}
541  indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a1, a1, a2, a2, ...}
542  indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a0, a0, a1, a1, a1, a1, ...}
543  return svld1_gather_u32index_f32(svptrue_b32(), from, indices);
544 }

◆ ploadquad< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::ploadquad< PacketXi > ( const numext::int32_t from)
215  {
216  svuint32_t indices = svindex_u32(0, 1); // index {base=0, base+step=1, base+step*2, ...}
217  indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a1, a1, a2, a2, ...}
218  indices = svzip1_u32(indices, indices); // index in the format {a0, a0, a0, a0, a1, a1, a1, a1, ...}
219  return svld1_gather_u32index_s32(svptrue_b32(), from, indices);
220 }

◆ ploadRhs()

template<typename Packet >
EIGEN_ALWAYS_INLINE Packet Eigen::internal::ploadRhs ( const __UNPACK_TYPE__(Packet) *  rhs)
124  {
125  return ploadu<Packet>(rhs);
126 }

◆ ploadRhsMMA() [1/2]

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::ploadRhsMMA ( const double rhs,
__vector_pair &  rhsV 
)
134  {
135 #if EIGEN_COMP_LLVM
136  __builtin_vsx_assemble_pair(
137  &rhsV, reinterpret_cast<__vector unsigned char>(ploadRhs<Packet2d>(rhs + (sizeof(Packet2d) / sizeof(double)))),
138  reinterpret_cast<__vector unsigned char>(ploadRhs<Packet2d>(rhs)));
139 #else
140  rhsV = *reinterpret_cast<__vector_pair*>(const_cast<double*>(rhs));
141 #endif
142 }

◆ ploadRhsMMA() [2/2]

template<typename Scalar , typename Packet >
EIGEN_ALWAYS_INLINE void Eigen::internal::ploadRhsMMA ( const Scalar rhs,
Packet rhsV 
)
129  {
130  rhsV = ploadRhs<Packet>(rhs);
131 }

Referenced by ploadLhsMMA().

◆ ploads()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::ploads ( const typename unpacket_traits< Packet >::type *  from)

◆ ploads< Packet2d >()

1403  {
1404  EIGEN_DEBUG_UNALIGNED_LOAD return _mm_load_sd(from);
1405 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploads< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::ploads< Packet4f > ( const float *  from)
1399  {
1400  EIGEN_DEBUG_UNALIGNED_LOAD return _mm_load_ss(from);
1401 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadt()

template<typename Packet , int Alignment>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet Eigen::internal::ploadt ( const typename unpacket_traits< Packet >::type *  from)
Returns
a packet version of *from. The pointer from must be aligned on a Alignment bytes boundary.
1334  {
1335  if (Alignment >= unpacket_traits<Packet>::alignment)
1336  return pload<Packet>(from);
1337  else
1338  return ploadu<Packet>(from);
1339 }

◆ ploadt_partial()

template<typename Packet , int Alignment>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet Eigen::internal::ploadt_partial ( const typename unpacket_traits< Packet >::type *  from,
const Index  n,
const Index  offset = 0 
)
Returns
n elements of a packet version of *from. The pointer from must be aligned on a Alignment bytes boundary.
1345  {
1346  if (Alignment >= unpacket_traits<Packet>::alignment)
1347  return pload_partial<Packet>(from, n, offset);
1348  else
1349  return ploadu_partial<Packet>(from, n, offset);
1350 }

References n.

◆ ploadt_ro()

template<typename Packet , int LoadMode>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet Eigen::internal::ploadt_ro ( const typename unpacket_traits< Packet >::type *  from)
Returns
a packet version of *from. Unlike ploadt, ploadt_ro takes advantage of the read-only memory path on the hardware if available to speedup the loading of data that won't be modified by the current computation.
1379  {
1380  return ploadt<Packet, LoadMode>(from);
1381 }

◆ ploadu() [1/2]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::ploadu ( const typename unpacket_traits< Packet >::type *  from)
inline
Returns
a packet version of *from, (un-aligned load)
775  {
776  return *from;
777 }

Referenced by benchVec().

◆ ploadu() [2/2]

template<typename Packet >
EIGEN_DEVICE_FUNC std::enable_if_t<unpacket_traits<Packet>::masked_load_available, Packet> Eigen::internal::ploadu ( const typename unpacket_traits< Packet >::type *  from,
typename unpacket_traits< Packet >::mask_t  umask 
)
inline
Returns
a packet version of *from, (un-aligned masked load) There is no generic implementation. We only have implementations for specialized cases. Generic case should not be called.

◆ ploadu< Packet16b >()

1378  {
1380  return _mm_loadu_si128(reinterpret_cast<const __m128i*>(from));
1381 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet16bf >()

2711  {
2712  return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(from));
2713 }

◆ ploadu< Packet16c >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::ploadu< Packet16c > ( const int8_t *  from)
1452  {
1453  EIGEN_DEBUG_UNALIGNED_LOAD return __lsx_vld(from, 0);
1454 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet16c >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::ploadu< Packet16c > ( const signed char from)
1553  {
1554  return ploadu_common<Packet16c>(from);
1555 }

Referenced by ploaddup< Packet16c >(), and ploadquad< Packet16c >().

◆ ploadu< Packet16f >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::ploadu< Packet16f > ( const float *  from)
986  {
987  EIGEN_DEBUG_UNALIGNED_LOAD return _mm512_loadu_ps(from);
988 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

Referenced by ploadu< Packet8cf >().

◆ ploadu< Packet16f >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::ploadu< Packet16f > ( const float *  from,
uint16_t  umask 
)
1003  {
1004  __mmask16 mask = static_cast<__mmask16>(umask);
1005  EIGEN_DEBUG_UNALIGNED_LOAD return _mm512_maskz_loadu_ps(mask, from);
1006 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet16h >()

2218  {
2219  return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(from));
2220 }

◆ ploadu< Packet16i >()

994  {
995  EIGEN_DEBUG_UNALIGNED_LOAD return _mm512_loadu_epi32(from);
996 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet16uc >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::ploadu< Packet16uc > ( const uint8_t *  from)
1468  {
1469  EIGEN_DEBUG_UNALIGNED_LOAD return __lsx_vld(from, 0);
1470 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet16uc >() [2/2]

◆ ploadu< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::ploadu< Packet1cd > ( const std::complex< double > *  from)
373  {
374  EIGEN_DEBUG_UNALIGNED_LOAD return Packet1cd(ploadu<Packet2d>((const double*)from));
375 }
EIGEN_STRONG_INLINE Packet2d ploadu< Packet2d >(const double *from)
Definition: LSX/PacketMath.h:1448

References EIGEN_DEBUG_UNALIGNED_LOAD, and ploadu< Packet2d >().

Referenced by pgather< std::complex< double >, Packet4cd >(), pload_complex_full(), pload_realimag_combine(), pload_realimag_combine_row(), and pset1< Packet1cd >().

◆ ploadu< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::ploadu< Packet1cf > ( const std::complex< float > *  from)
308  {
309  EIGEN_DEBUG_UNALIGNED_LOAD return Packet1cf(ploadu<Packet2f>((const float*)from));
310 }
EIGEN_STRONG_INLINE Packet2f ploadu< Packet2f >(const float *from)
Definition: NEON/PacketMath.h:2463

References EIGEN_DEBUG_UNALIGNED_LOAD, and ploadu< Packet2f >().

◆ ploadu< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::ploadu< Packet2cd > ( const std::complex< double > *  from)
333  {
334  EIGEN_DEBUG_UNALIGNED_LOAD return Packet2cd(_mm256_loadu_pd((const double*)from));
335 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::ploadu< Packet2cf > ( const std::complex< float > *  from)
148  {
149  return Packet2cf(ploadu<Packet4f>((const float*)from));
150 }

References ploadu< Packet4f >().

Referenced by pload_complex_full_row(), and pload_realimag_combine_row().

◆ ploadu< Packet2d >()

1448  {
1449  EIGEN_DEBUG_UNALIGNED_LOAD return (Packet2d)__lsx_vld(from, 0);
1450 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

Referenced by pload_complex(), pload_realimag(), and ploadu< Packet1cd >().

◆ ploadu< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::ploadu< Packet2f > ( const float *  from)
2463  {
2464  EIGEN_DEBUG_UNALIGNED_LOAD return vld1_f32(from);
2465 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

Referenced by ploadu< Packet1cf >().

◆ ploadu< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::ploadu< Packet2i > ( const int32_t *  from)
2515  {
2516  EIGEN_DEBUG_UNALIGNED_LOAD return vld1_s32(from);
2517 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::ploadu< Packet2l > ( const int64_t *  from)
1464  {
1465  EIGEN_DEBUG_UNALIGNED_LOAD return __lsx_vld(from, 0);
1466 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::ploadu< Packet2ui > ( const uint32_t *  from)
2523  {
2524  EIGEN_DEBUG_UNALIGNED_LOAD return vld1_u32(from);
2525 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::ploadu< Packet2ul > ( const uint64_t *  from)
1480  {
1481  EIGEN_DEBUG_UNALIGNED_LOAD return __lsx_vld(from, 0);
1482 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet32h >()

151  {
152  EIGEN_DEBUG_UNALIGNED_LOAD return _mm512_loadu_ph(from);
153 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet4bf >()

4840  {
4841  return Packet4bf(ploadu<Packet4us>(reinterpret_cast<const uint16_t*>(from)));
4842 }
EIGEN_STRONG_INLINE Packet4us ploadu< Packet4us >(const uint16_t *from)
Definition: NEON/PacketMath.h:2507

References ploadu< Packet4us >().

◆ ploadu< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::ploadu< Packet4c > ( const int8_t *  from)
2471  {
2472  Packet4c res;
2473  memcpy(&res, from, sizeof(Packet4c));
2474  return res;
2475 }

References res.

◆ ploadu< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::ploadu< Packet4cd > ( const std::complex< double > *  from)
311  {
312  EIGEN_DEBUG_UNALIGNED_LOAD return Packet4cd(ploadu<Packet8d>((const double*)from));
313 }
EIGEN_STRONG_INLINE Packet8d ploadu< Packet8d >(const double *from)
Definition: AVX512/PacketMath.h:990

References EIGEN_DEBUG_UNALIGNED_LOAD, and ploadu< Packet8d >().

◆ ploadu< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::ploadu< Packet4cf > ( const std::complex< float > *  from)
131  {
132  EIGEN_DEBUG_UNALIGNED_LOAD return Packet4cf(_mm256_loadu_ps(&numext::real_ref(*from)));
133 }

References EIGEN_DEBUG_UNALIGNED_LOAD, and Eigen::numext::real_ref().

◆ ploadu< Packet4d >()

◆ ploadu< Packet4f >()

◆ ploadu< Packet4i >() [1/2]

1537  {
1538  return ploadu_common<Packet4i>(from);
1539 }

Referenced by ploaddup< Packet8i >(), and ploadquad< Packet16i >().

◆ ploadu< Packet4i >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::ploadu< Packet4i > ( const int32_t *  from)
1460  {
1461  EIGEN_DEBUG_UNALIGNED_LOAD return __lsx_vld(from, 0);
1462 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::ploadu< Packet4s > ( const int16_t *  from)
2499  {
2500  EIGEN_DEBUG_UNALIGNED_LOAD return vld1_s16(from);
2501 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::ploadu< Packet4uc > ( const uint8_t *  from)
2485  {
2486  Packet4uc res;
2487  memcpy(&res, from, sizeof(Packet4uc));
2488  return res;
2489 }

References res.

◆ ploadu< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::ploadu< Packet4ui > ( const uint32_t *  from)
1476  {
1477  EIGEN_DEBUG_UNALIGNED_LOAD return __lsx_vld(from, 0);
1478 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

Referenced by ploaddup< Packet8ui >().

◆ ploadu< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::ploadu< Packet4us > ( const uint16_t *  from)
2507  {
2508  EIGEN_DEBUG_UNALIGNED_LOAD return vld1_u16(from);
2509 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

Referenced by ploadu< Packet4bf >().

◆ ploadu< Packet8bf >()

1549  {
1550  return ploadu_common<Packet8us>(reinterpret_cast<const unsigned short int*>(from));
1551 }

Referenced by convertArrayPointerBF16toF32DupOne(), KLoop(), loadBF16fromResult(), and loadBfloat16().

◆ ploadu< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::ploadu< Packet8c > ( const int8_t *  from)
2477  {
2478  EIGEN_DEBUG_UNALIGNED_LOAD return vld1_s8(from);
2479 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::ploadu< Packet8cf > ( const std::complex< float > *  from)
124  {
126 }
EIGEN_STRONG_INLINE Packet16f ploadu< Packet16f >(const float *from)
Definition: AVX512/PacketMath.h:986

References EIGEN_DEBUG_UNALIGNED_LOAD, ploadu< Packet16f >(), and Eigen::numext::real_ref().

◆ ploadu< Packet8d >() [1/2]

990  {
991  EIGEN_DEBUG_UNALIGNED_LOAD return _mm512_loadu_pd(from);
992 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

Referenced by ploadu< Packet4cd >().

◆ ploadu< Packet8d >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::ploadu< Packet8d > ( const double from,
uint8_t  umask 
)
1008  {
1009  __mmask8 mask = static_cast<__mmask8>(umask);
1010  EIGEN_DEBUG_UNALIGNED_LOAD return _mm512_maskz_loadu_pd(mask, from);
1011 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet8f >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::ploadu< Packet8f > ( const float *  from)
1507  {
1508  EIGEN_DEBUG_UNALIGNED_LOAD return _mm256_loadu_ps(from);
1509 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet8f >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::ploadu< Packet8f > ( const float *  from,
uint8_t  umask 
)
1524  {
1525 #ifdef EIGEN_VECTORIZE_AVX512
1526  __mmask16 mask = static_cast<__mmask16>(umask & 0x00FF);
1527  EIGEN_DEBUG_UNALIGNED_LOAD return _mm512_castps512_ps256(_mm512_maskz_loadu_ps(mask, from));
1528 #else
1529  Packet8i mask = _mm256_set1_epi8(static_cast<char>(umask));
1530  const Packet8i bit_mask =
1531  _mm256_set_epi32(0xffffff7f, 0xffffffbf, 0xffffffdf, 0xffffffef, 0xfffffff7, 0xfffffffb, 0xfffffffd, 0xfffffffe);
1532  mask = por<Packet8i>(mask, bit_mask);
1533  mask = pcmp_eq<Packet8i>(mask, _mm256_set1_epi32(0xffffffff));
1534  EIGEN_DEBUG_UNALIGNED_LOAD return _mm256_maskload_ps(from, mask);
1535 #endif
1536 }
EIGEN_STRONG_INLINE Packet8i por< Packet8i >(const Packet8i &a, const Packet8i &b)
Definition: AVX/PacketMath.h:1335

References EIGEN_DEBUG_UNALIGNED_LOAD, and por< Packet8i >().

◆ ploadu< Packet8h >()

2232  {
2233  return _mm_loadu_si128(reinterpret_cast<const __m128i*>(from));
2234 }

◆ ploadu< Packet8i >()

1515  {
1516  EIGEN_DEBUG_UNALIGNED_LOAD return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(from));
1517 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::ploadu< Packet8l > ( const int64_t *  from)
998  {
999  EIGEN_DEBUG_UNALIGNED_LOAD return _mm512_loadu_epi64(from);
1000 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet8s >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::ploadu< Packet8s > ( const int16_t *  from)
1456  {
1457  EIGEN_DEBUG_UNALIGNED_LOAD return __lsx_vld(from, 0);
1458 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet8s >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::ploadu< Packet8s > ( const short int from)
1541  {
1542  return ploadu_common<Packet8s>(from);
1543 }

Referenced by ploaddup< Packet8s >(), and ploadquad< Packet8s >().

◆ ploadu< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::ploadu< Packet8uc > ( const uint8_t *  from)
2491  {
2492  EIGEN_DEBUG_UNALIGNED_LOAD return vld1_u8(from);
2493 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::ploadu< Packet8ui > ( const uint32_t *  from)
1519  {
1520  EIGEN_DEBUG_UNALIGNED_LOAD return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(from));
1521 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet8us >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::ploadu< Packet8us > ( const uint16_t *  from)
1472  {
1473  EIGEN_DEBUG_UNALIGNED_LOAD return __lsx_vld(from, 0);
1474 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< Packet8us >() [2/2]

1545  {
1546  return ploadu_common<Packet8us>(from);
1547 }

Referenced by ploaddup< Packet8us >(), and ploadquad< Packet8us >().

◆ ploadu< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::ploadu< PacketXf > ( const float *  from)
527  {
528  EIGEN_DEBUG_UNALIGNED_LOAD return svld1_f32(svptrue_b32(), from);
529 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::ploadu< PacketXi > ( const numext::int32_t from)
203  {
204  EIGEN_DEBUG_UNALIGNED_LOAD return svld1_s32(svptrue_b32(), from);
205 }

References EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu_common()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::ploadu_common ( const __UNPACK_TYPE__(Packet) *  from)
1516  {
1518 #if defined(EIGEN_VECTORIZE_VSX) || !defined(_BIG_ENDIAN)
1520  return vec_xl(0, const_cast<__UNPACK_TYPE__(Packet)*>(from));
1521 #else
1522  Packet16uc MSQ, LSQ;
1523  Packet16uc mask;
1524  MSQ = vec_ld(0, (unsigned char*)from); // most significant quadword
1525  LSQ = vec_ld(15, (unsigned char*)from); // least significant quadword
1526  mask = vec_lvsl(0, from); // create the permute mask
1527  // TODO: Add static_cast here
1528  return (Packet)vec_perm(MSQ, LSQ, mask); // align the data
1529 #endif
1530 }

References __UNPACK_TYPE__(), EIGEN_DEBUG_ALIGNED_LOAD, and EIGEN_DEBUG_UNALIGNED_LOAD.

◆ ploadu_partial()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::ploadu_partial ( const typename unpacket_traits< Packet >::type *  from,
const Index  n,
const Index  offset = 0 
)
inline
Returns
n elements of a packet version of *from, (un-aligned load) All elements after the last element loaded will initialized with zero
783  {
784  const Index packet_size = unpacket_traits<Packet>::size;
785  eigen_assert(n + offset <= packet_size && "number of elements plus offset will read past end of packet");
786  typedef typename unpacket_traits<Packet>::type Scalar;
787  EIGEN_ALIGN_MAX Scalar elements[packet_size] = {Scalar(0)};
788  for (Index i = offset; i < numext::mini(n + offset, packet_size); i++) {
789  elements[i] = from[i - offset];
790  }
791  return pload<Packet>(elements);
792 }

References EIGEN_ALIGN_MAX, eigen_assert, i, Eigen::numext::mini(), and n.

◆ ploadu_partial< Packet16c >()

template<>
EIGEN_ALWAYS_INLINE Packet16c Eigen::internal::ploadu_partial< Packet16c > ( const signed char from,
const Index  n,
const Index  offset 
)
1621  {
1622  return ploadu_partial_common<Packet16c>(from, n, offset);
1623 }

References n.

◆ ploadu_partial< Packet16uc >()

template<>
EIGEN_ALWAYS_INLINE Packet16uc Eigen::internal::ploadu_partial< Packet16uc > ( const unsigned char from,
const Index  n,
const Index  offset 
)
1626  {
1627  return ploadu_partial_common<Packet16uc>(from, n, offset);
1628 }

References n.

◆ ploadu_partial< Packet2cf >()

template<>
EIGEN_ALWAYS_INLINE Packet2cf Eigen::internal::ploadu_partial< Packet2cf > ( const std::complex< float > *  from,
const Index  n,
const Index  offset 
)
158  {
159  return Packet2cf(ploadu_partial<Packet4f>((const float*)from, n * 2, offset * 2));
160 }
EIGEN_ALWAYS_INLINE Packet4f ploadu_partial< Packet4f >(const float *from, const Index n, const Index offset)
Definition: AltiVec/PacketMath.h:1600

References n, and ploadu_partial< Packet4f >().

◆ ploadu_partial< Packet4f >()

template<>
EIGEN_ALWAYS_INLINE Packet4f Eigen::internal::ploadu_partial< Packet4f > ( const float *  from,
const Index  n,
const Index  offset 
)
1600  {
1601  return ploadu_partial_common<Packet4f>(from, n, offset);
1602 }

References n.

Referenced by ploadu_partial< Packet2cf >().

◆ ploadu_partial< Packet4i >()

template<>
EIGEN_ALWAYS_INLINE Packet4i Eigen::internal::ploadu_partial< Packet4i > ( const int from,
const Index  n,
const Index  offset 
)
1604  {
1605  return ploadu_partial_common<Packet4i>(from, n, offset);
1606 }

References n.

◆ ploadu_partial< Packet8bf >()

template<>
EIGEN_ALWAYS_INLINE Packet8bf Eigen::internal::ploadu_partial< Packet8bf > ( const bfloat16 from,
const Index  n,
const Index  offset 
)
1617  {
1618  return ploadu_partial_common<Packet8us>(reinterpret_cast<const unsigned short int*>(from), n, offset);
1619 }

References n.

◆ ploadu_partial< Packet8s >()

template<>
EIGEN_ALWAYS_INLINE Packet8s Eigen::internal::ploadu_partial< Packet8s > ( const short int from,
const Index  n,
const Index  offset 
)
1608  {
1609  return ploadu_partial_common<Packet8s>(from, n, offset);
1610 }

References n.

◆ ploadu_partial< Packet8us >()

template<>
EIGEN_ALWAYS_INLINE Packet8us Eigen::internal::ploadu_partial< Packet8us > ( const unsigned short int from,
const Index  n,
const Index  offset 
)
1613  {
1614  return ploadu_partial_common<Packet8us>(from, n, offset);
1615 }

References n.

◆ ploadu_partial_common()

template<typename Packet >
EIGEN_ALWAYS_INLINE Packet Eigen::internal::ploadu_partial_common ( const __UNPACK_TYPE__(Packet) *  from,
const Index  n,
const Index  offset 
)
1563  {
1564  const Index packet_size = unpacket_traits<Packet>::size;
1565  eigen_internal_assert(n + offset <= packet_size && "number of elements plus offset will read past end of packet");
1566  const Index size = sizeof(__UNPACK_TYPE__(Packet));
1567 #ifdef _ARCH_PWR9
1568  EIGEN_UNUSED_VARIABLE(packet_size);
1571  Packet load = vec_xl_len(const_cast<__UNPACK_TYPE__(Packet)*>(from), n * size);
1572  if (offset) {
1573  Packet16uc shift = pset1<Packet16uc>(offset * 8 * size);
1574 #ifdef _BIG_ENDIAN
1575  load = Packet(vec_sro(Packet16uc(load), shift));
1576 #else
1577  load = Packet(vec_slo(Packet16uc(load), shift));
1578 #endif
1579  }
1580  return load;
1581 #else
1582  if (n) {
1583  EIGEN_ALIGN16 __UNPACK_TYPE__(Packet) load[packet_size];
1584  unsigned char* load2 = reinterpret_cast<unsigned char*>(load + offset);
1585  unsigned char* from2 = reinterpret_cast<unsigned char*>(const_cast<__UNPACK_TYPE__(Packet)*>(from));
1586  Index n2 = n * size;
1587  if (16 <= n2) {
1588  pstoreu(load2, ploadu<Packet16uc>(from2));
1589  } else {
1590  memcpy((void*)load2, (void*)from2, n2);
1591  }
1592  return pload_ignore<Packet>(load);
1593  } else {
1594  return Packet(pset1<Packet16uc>(0));
1595  }
1596 #endif
1597 }

References __UNPACK_TYPE__(), EIGEN_ALIGN16, EIGEN_DEBUG_ALIGNED_LOAD, EIGEN_DEBUG_UNALIGNED_LOAD, eigen_internal_assert, EIGEN_UNUSED_VARIABLE, load(), n, ploadu< Packet16uc >(), pset1< Packet16uc >(), pstoreu(), and size.

◆ plog()

◆ plog10()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog10 ( const Packet a)
Returns
the log10 of a (coeff-wise)
1116  {
1118  return log10(a);
1119 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 log10(const bfloat16 &a)
Definition: BFloat16.h:620

References a, EIGEN_USING_STD, and Eigen::bfloat16_impl::log10().

Referenced by Eigen::internal::scalar_log10_op< Scalar >::packetOp().

◆ plog1p()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog1p ( const Packet a)
Returns
the log1p of a (coeff-wise)
1110  {
1111  return numext::log1p(a);
1112 }

References a, and Eigen::bfloat16_impl::log1p().

Referenced by packetmath_real(), Eigen::internal::scalar_log1p_op< Scalar >::packetOp(), and plog1p< Packet32h >().

◆ plog1p< Packet16h >()

◆ plog1p< Packet32h >()

789  {
790  Packet16h low;
791  Packet16h high;
792  extract2Packet16h(a, low, high);
793 
794  Packet16h lowOut = plog1p(low);
795  Packet16h highOut = plog1p(high);
796 
797  return combine2Packet16h(lowOut, highOut);
798 }
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog1p(const Packet &a)
Definition: GenericPacketMath.h:1110

References a, combine2Packet16h(), extract2Packet16h(), and plog1p().

◆ plog2()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog2 ( const Packet a)
Returns
the log2 of a (coeff-wise)
1123  {
1125  using RealScalar = typename NumTraits<Scalar>::Real;
1126  return pmul(pset1<Packet>(Scalar(RealScalar(EIGEN_LOG2E))), plog(a));
1127 }
#define EIGEN_LOG2E
Definition: MathFunctions.h:17
std::complex< double > pmul(const std::complex< double > &a, const std::complex< double > &b)
Definition: GenericPacketMath.h:1396

References a, EIGEN_LOG2E, plog(), and pmul().

Referenced by Eigen::internal::accurate_log2< Scalar >::operator()(), packetmath_real(), Eigen::internal::scalar_log2_op< Scalar >::packetOp(), and plog2< Packet32h >().

◆ plog2< Packet16h >()

◆ plog2< Packet32h >()

776  {
777  Packet16h low;
778  Packet16h high;
779  extract2Packet16h(a, low, high);
780 
781  Packet16h lowOut = plog2(low);
782  Packet16h highOut = plog2(high);
783 
784  return combine2Packet16h(lowOut, highOut);
785 }
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2(const Packet &a)
Definition: GenericPacketMath.h:1123

References a, combine2Packet16h(), extract2Packet16h(), and plog2().

◆ plog2_double()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog2_double ( const Packet  _x)
Returns
log2(x) for single precision float
462  {
463  return plog_impl_double<Packet, /* base2 */ true>(_x);
464 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_impl_double(const Packet _x)
Definition: GenericPacketMathFunctions.h:371

References plog_impl_double().

◆ plog2_float()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog2_float ( const Packet  _x)
Returns
log2(x) for single precision float
357  {
358  return plog_impl_float<Packet, /* base2 */ true>(_x);
359 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_impl_float(const Packet _x)
Definition: GenericPacketMathFunctions.h:299

References plog_impl_float().

◆ plog< Packet16h >()

◆ plog< Packet1cd >() [1/2]

472  {
473  return plog_complex(a);
474 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_complex(const Packet &x)
Definition: GenericPacketMathFunctions.h:1338

References a, and plog_complex().

◆ plog< Packet1cd >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::plog< Packet1cd > ( const Packet1cd a,
const Packet1cd b 
)
255  {
256  return plog_complex(a, b);
257 }

References a, b, and plog_complex().

◆ plog< Packet1cf >()

483  {
484  return plog_complex(a);
485 }

References a, and plog_complex().

◆ plog< Packet2cd >()

444  {
445  return plog_complex<Packet2cd>(a);
446 }

References a.

◆ plog< Packet2cf >() [1/2]

375  {
376  return plog_complex<Packet2cf>(a);
377 }

References a.

◆ plog< Packet2cf >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::plog< Packet2cf > ( const Packet2cf a,
const Packet2cf b 
)
436  {
437  return plog_complex(a, b);
438 }

References a, b, and plog_complex().

◆ plog< Packet32h >()

763  {
764  Packet16h low;
765  Packet16h high;
766  extract2Packet16h(a, low, high);
767 
768  Packet16h lowOut = plog(low);
769  Packet16h highOut = plog(high);
770 
771  return combine2Packet16h(lowOut, highOut);
772 }

References a, combine2Packet16h(), extract2Packet16h(), and plog().

◆ plog< Packet4cd >()

455  {
456  return plog_complex<Packet4cd>(a);
457 }

References a.

◆ plog< Packet4cf >()

449  {
450  return plog_complex<Packet4cf>(a);
451 }

References a.

◆ plog< Packet4f >()

37  {
38  static EIGEN_DECLARE_CONST_Packet4f(cephes_SQRTHF, 0.707106781186547524f);
39  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_p0, 7.0376836292e-2f);
40  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_p1, -1.1514610310e-1f);
41  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_p2, 1.1676998740e-1f);
42  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_p3, -1.2420140846e-1f);
43  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_p4, +1.4249322787e-1f);
44  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_p5, -1.6668057665e-1f);
45  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_p6, +2.0000714765e-1f);
46  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_p7, -2.4999993993e-1f);
47  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_p8, +3.3333331174e-1f);
48  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_q1, -2.12194440e-4f);
49  static EIGEN_DECLARE_CONST_Packet4f(cephes_log_q2, 0.693359375f);
50  static EIGEN_DECLARE_CONST_Packet4f(half, 0.5f);
51  static EIGEN_DECLARE_CONST_Packet4f(1, 1.0f);
52 
53  // Convert negative argument into NAN (quiet negative, to be specific).
54  Packet4f zero = (Packet4f)__builtin_msa_ldi_w(0);
55  Packet4i neg_mask = __builtin_msa_fclt_w(_x, zero);
56  Packet4i zero_mask = __builtin_msa_fceq_w(_x, zero);
57  Packet4f non_neg_x_or_nan = padd(_x, (Packet4f)neg_mask); // Add 0.0 or NAN.
58  Packet4f x = non_neg_x_or_nan;
59 
60  // Extract exponent from x = mantissa * 2**exponent, where 1.0 <= mantissa < 2.0.
61  // N.B. the exponent is one less of what frexpf() would return.
62  Packet4i e_int = __builtin_msa_ftint_s_w(__builtin_msa_flog2_w(x));
63  // Multiply x by 2**(-exponent-1) to get 0.5 <= x < 1.0 as from frexpf().
64  x = __builtin_msa_fexp2_w(x, (Packet4i)__builtin_msa_nori_b((v16u8)e_int, 0));
65 
66  /*
67  if (x < SQRTHF) {
68  x = x + x - 1.0;
69  } else {
70  e += 1;
71  x = x - 1.0;
72  }
73  */
74  Packet4f xx = padd(x, x);
75  Packet4i ge_mask = __builtin_msa_fcle_w(p4f_cephes_SQRTHF, x);
76  e_int = psub(e_int, ge_mask);
77  x = (Packet4f)__builtin_msa_bsel_v((v16u8)ge_mask, (v16u8)xx, (v16u8)x);
78  x = psub(x, p4f_1);
79  Packet4f e = __builtin_msa_ffint_s_w(e_int);
80 
81  Packet4f x2 = pmul(x, x);
82  Packet4f x3 = pmul(x2, x);
83 
84  Packet4f y, y1, y2;
85  y = pmadd(p4f_cephes_log_p0, x, p4f_cephes_log_p1);
86  y1 = pmadd(p4f_cephes_log_p3, x, p4f_cephes_log_p4);
87  y2 = pmadd(p4f_cephes_log_p6, x, p4f_cephes_log_p7);
88  y = pmadd(y, x, p4f_cephes_log_p2);
89  y1 = pmadd(y1, x, p4f_cephes_log_p5);
90  y2 = pmadd(y2, x, p4f_cephes_log_p8);
91  y = pmadd(y, x3, y1);
92  y = pmadd(y, x3, y2);
93  y = pmul(y, x3);
94 
95  y = pmadd(e, p4f_cephes_log_q1, y);
96  x = __builtin_msa_fmsub_w(x, x2, p4f_half);
97  x = padd(x, y);
98  x = pmadd(e, p4f_cephes_log_q2, x);
99 
100  // x is now the logarithm result candidate. We still need to handle the
101  // extreme arguments of zero and positive infinity, though.
102  // N.B. if the argument is +INFINITY, x is NAN because the polynomial terms
103  // contain infinities of both signs (see the coefficients and code above).
104  // INFINITY - INFINITY is NAN.
105 
106  // If the argument is +INFINITY, make it the new result candidate.
107  // To achieve that we choose the smaller of the result candidate and the
108  // argument.
109  // This is correct for all finite pairs of values (the logarithm is smaller
110  // than the argument).
111  // This is also correct in the special case when the argument is +INFINITY
112  // and the result candidate is NAN. This is because the fmin.df instruction
113  // prefers non-NANs to NANs.
114  x = __builtin_msa_fmin_w(x, non_neg_x_or_nan);
115 
116  // If the argument is zero (including -0.0), the result becomes -INFINITY.
117  Packet4i neg_infs = __builtin_msa_slli_w(zero_mask, 23);
118  x = (Packet4f)__builtin_msa_bsel_v((v16u8)zero_mask, (v16u8)x, (v16u8)neg_infs);
119 
120  return x;
121 }

References e(), EIGEN_DECLARE_CONST_Packet4f(), padd(), pmadd(), pmul(), psub(), plotDoE::x, Global_parameters::x2(), y, and zero().

◆ plog< Packet8bf >()

2352  {
2354 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog_float(const Packet _x)
Definition: GenericPacketMathFunctions.h:352

References a, BF16_TO_F32_UNARY_OP_WRAPPER, and plog_float().

◆ plog< Packet8cf >()

460  {
461  return plog_complex<Packet8cf>(a);
462 }

References a.

◆ plog< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::plog< PacketXf > ( const PacketXf &  x)
25  {
26  return plog_float(x);
27 }

References plog_float(), and plotDoE::x.

◆ plog_complex()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog_complex ( const Packet x)
Returns
log(x) for complex types
1338  {
1339  typedef typename unpacket_traits<Packet>::type Scalar;
1340  typedef typename Scalar::value_type RealScalar;
1341  typedef typename unpacket_traits<Packet>::as_real RealPacket;
1342 
1343  RealPacket real_mask_rp = peven_mask(x.v);
1344  Packet real_mask(real_mask_rp);
1345 
1346  // Real part
1347  RealPacket x_flip = pcplxflip(x).v; // b, a
1348  Packet x_norm = phypot_complex(x); // sqrt(a^2 + b^2), sqrt(a^2 + b^2)
1349  RealPacket xlogr = plog(x_norm.v); // log(sqrt(a^2 + b^2)), log(sqrt(a^2 + b^2))
1350 
1351  // Imag part
1352  RealPacket ximg = patan2(x.v, x_flip); // atan2(a, b), atan2(b, a)
1353 
1354  const RealPacket cst_pos_inf = pset1<RealPacket>(NumTraits<RealScalar>::infinity());
1355  RealPacket x_abs = pabs(x.v);
1356  RealPacket is_x_pos_inf = pcmp_eq(x_abs, cst_pos_inf);
1357  RealPacket is_y_pos_inf = pcplxflip(Packet(is_x_pos_inf)).v;
1358  RealPacket is_any_inf = por(is_x_pos_inf, is_y_pos_inf);
1359  RealPacket xreal = pselect(is_any_inf, cst_pos_inf, xlogr);
1360 
1361  Packet xres = pselect(real_mask, Packet(xreal), Packet(ximg)); // log(sqrt(a^2 + b^2)), atan2(b, a)
1362  return xres;
1363 }
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet patan2(const Packet &y, const Packet &x)
Definition: GenericPacketMath.h:1475
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet phypot_complex(const Packet &a)
Definition: GenericPacketMathFunctions.h:1523

References pabs(), patan2(), pcmp_eq(), pcplxflip(), peven_mask(), phypot_complex(), plog(), por(), pselect(), Eigen::internal::Packet2cf::v, and plotDoE::x.

Referenced by plog< Packet1cd >(), plog< Packet1cf >(), and plog< Packet2cf >().

◆ plog_double()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog_double ( const Packet  _x)
Returns
log(x) for single precision float
457  {
458  return plog_impl_double<Packet, /* base2 */ false>(_x);
459 }

References plog_impl_double().

◆ plog_float()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog_float ( const Packet  _x)
Returns
log(x) for single precision float
352  {
353  return plog_impl_float<Packet, /* base2 */ false>(_x);
354 }

References plog_impl_float().

Referenced by plog< Packet8bf >(), and plog< PacketXf >().

◆ plog_impl_double()

template<typename Packet , bool base2>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog_impl_double ( const Packet  _x)
371  {
372  Packet x = _x;
373 
374  const Packet cst_1 = pset1<Packet>(1.0);
375  const Packet cst_neg_half = pset1<Packet>(-0.5);
376  const Packet cst_minus_inf = pset1frombits<Packet>(static_cast<uint64_t>(0xfff0000000000000ull));
377  const Packet cst_pos_inf = pset1frombits<Packet>(static_cast<uint64_t>(0x7ff0000000000000ull));
378 
379  // Polynomial Coefficients for log(1+x) = x - x**2/2 + x**3 P(x)/Q(x)
380  // 1/sqrt(2) <= x < sqrt(2)
381  const Packet cst_cephes_SQRTHF = pset1<Packet>(0.70710678118654752440E0);
382  const Packet cst_cephes_log_p0 = pset1<Packet>(1.01875663804580931796E-4);
383  const Packet cst_cephes_log_p1 = pset1<Packet>(4.97494994976747001425E-1);
384  const Packet cst_cephes_log_p2 = pset1<Packet>(4.70579119878881725854E0);
385  const Packet cst_cephes_log_p3 = pset1<Packet>(1.44989225341610930846E1);
386  const Packet cst_cephes_log_p4 = pset1<Packet>(1.79368678507819816313E1);
387  const Packet cst_cephes_log_p5 = pset1<Packet>(7.70838733755885391666E0);
388 
389  const Packet cst_cephes_log_q0 = pset1<Packet>(1.0);
390  const Packet cst_cephes_log_q1 = pset1<Packet>(1.12873587189167450590E1);
391  const Packet cst_cephes_log_q2 = pset1<Packet>(4.52279145837532221105E1);
392  const Packet cst_cephes_log_q3 = pset1<Packet>(8.29875266912776603211E1);
393  const Packet cst_cephes_log_q4 = pset1<Packet>(7.11544750618563894466E1);
394  const Packet cst_cephes_log_q5 = pset1<Packet>(2.31251620126765340583E1);
395 
396  Packet e;
397  // extract significant in the range [0.5,1) and exponent
398  x = pfrexp(x, e);
399 
400  // Shift the inputs from the range [0.5,1) to [sqrt(1/2),sqrt(2))
401  // and shift by -1. The values are then centered around 0, which improves
402  // the stability of the polynomial evaluation.
403  // if( x < SQRTHF ) {
404  // e -= 1;
405  // x = x + x - 1.0;
406  // } else { x = x - 1.0; }
407  Packet mask = pcmp_lt(x, cst_cephes_SQRTHF);
408  Packet tmp = pand(x, mask);
409  x = psub(x, cst_1);
410  e = psub(e, pand(cst_1, mask));
411  x = padd(x, tmp);
412 
413  Packet x2 = pmul(x, x);
414  Packet x3 = pmul(x2, x);
415 
416  // Evaluate the polynomial approximant , probably to improve instruction-level parallelism.
417  // y = x - 0.5*x^2 + x^3 * polevl( x, P, 5 ) / p1evl( x, Q, 5 ) );
418  Packet y, y1, y_;
419  y = pmadd(cst_cephes_log_p0, x, cst_cephes_log_p1);
420  y1 = pmadd(cst_cephes_log_p3, x, cst_cephes_log_p4);
421  y = pmadd(y, x, cst_cephes_log_p2);
422  y1 = pmadd(y1, x, cst_cephes_log_p5);
423  y_ = pmadd(y, x3, y1);
424 
425  y = pmadd(cst_cephes_log_q0, x, cst_cephes_log_q1);
426  y1 = pmadd(cst_cephes_log_q3, x, cst_cephes_log_q4);
427  y = pmadd(y, x, cst_cephes_log_q2);
428  y1 = pmadd(y1, x, cst_cephes_log_q5);
429  y = pmadd(y, x3, y1);
430 
431  y_ = pmul(y_, x3);
432  y = pdiv(y_, y);
433 
434  y = pmadd(cst_neg_half, x2, y);
435  x = padd(x, y);
436 
437  // Add the logarithm of the exponent back to the result of the interpolation.
438  if (base2) {
439  const Packet cst_log2e = pset1<Packet>(static_cast<double>(EIGEN_LOG2E));
440  x = pmadd(x, cst_log2e, e);
441  } else {
442  const Packet cst_ln2 = pset1<Packet>(static_cast<double>(EIGEN_LN2));
443  x = pmadd(e, cst_ln2, x);
444  }
445 
446  Packet invalid_mask = pcmp_lt_or_nan(_x, pzero(_x));
447  Packet iszero_mask = pcmp_eq(_x, pzero(_x));
448  Packet pos_inf_mask = pcmp_eq(_x, cst_pos_inf);
449  // Filter out invalid inputs, i.e.:
450  // - negative arg will be NAN
451  // - 0 will be -INF
452  // - +INF will be +INF
453  return pselect(iszero_mask, cst_minus_inf, por(pselect(pos_inf_mask, cst_pos_inf, x), invalid_mask));
454 }
EIGEN_STRONG_INLINE Packet4f pcmp_lt_or_nan(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1329

References e(), EIGEN_LN2, EIGEN_LOG2E, padd(), pand(), pcmp_eq(), pcmp_lt(), pcmp_lt_or_nan(), pdiv(), pfrexp(), pmadd(), pmul(), por(), pselect(), psub(), pzero(), tmp, plotDoE::x, Global_parameters::x2(), and y.

Referenced by plog2_double(), and plog_double().

◆ plog_impl_float()

template<typename Packet , bool base2>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::plog_impl_float ( const Packet  _x)
299  {
300  const Packet cst_1 = pset1<Packet>(1.0f);
301  const Packet cst_minus_inf = pset1frombits<Packet>(static_cast<Eigen::numext::uint32_t>(0xff800000u));
302  const Packet cst_pos_inf = pset1frombits<Packet>(static_cast<Eigen::numext::uint32_t>(0x7f800000u));
303 
304  const Packet cst_cephes_SQRTHF = pset1<Packet>(0.707106781186547524f);
305  Packet e, x;
306  // extract significant in the range [0.5,1) and exponent
307  x = pfrexp(_x, e);
308 
309  // part2: Shift the inputs from the range [0.5,1) to [sqrt(1/2),sqrt(2))
310  // and shift by -1. The values are then centered around 0, which improves
311  // the stability of the polynomial evaluation.
312  // if( x < SQRTHF ) {
313  // e -= 1;
314  // x = x + x - 1.0;
315  // } else { x = x - 1.0; }
316  Packet mask = pcmp_lt(x, cst_cephes_SQRTHF);
317  Packet tmp = pand(x, mask);
318  x = psub(x, cst_1);
319  e = psub(e, pand(cst_1, mask));
320  x = padd(x, tmp);
321 
322  // Polynomial coefficients for rational r(x) = p(x)/q(x)
323  // approximating log(1+x) on [sqrt(0.5)-1;sqrt(2)-1].
324  constexpr float alpha[] = {0.18256296349849254f, 1.0000000190281063f, 1.0000000190281136f};
325  constexpr float beta[] = {0.049616247954120038f, 0.59923249590823520f, 1.4999999999999927f, 1.0f};
326 
328  p = pmul(x, p);
330  x = pdiv(p, q);
331 
332  // Add the logarithm of the exponent back to the result of the interpolation.
333  if (base2) {
334  const Packet cst_log2e = pset1<Packet>(static_cast<float>(EIGEN_LOG2E));
335  x = pmadd(x, cst_log2e, e);
336  } else {
337  const Packet cst_ln2 = pset1<Packet>(static_cast<float>(EIGEN_LN2));
338  x = pmadd(e, cst_ln2, x);
339  }
340 
341  Packet invalid_mask = pcmp_lt_or_nan(_x, pzero(_x));
342  Packet iszero_mask = pcmp_eq(_x, pzero(_x));
343  Packet pos_inf_mask = pcmp_eq(_x, cst_pos_inf);
344  // Filter out invalid inputs, i.e.:
345  // - negative arg will be NAN
346  // - 0 will be -INF
347  // - +INF will be +INF
348  return pselect(iszero_mask, cst_minus_inf, por(pselect(pos_inf_mask, cst_pos_inf, x), invalid_mask));
349 }

References alpha, beta, e(), EIGEN_LN2, EIGEN_LOG2E, p, padd(), pand(), pcmp_eq(), pcmp_lt(), pcmp_lt_or_nan(), pdiv(), pfrexp(), pmadd(), pmul(), por(), pselect(), psub(), pzero(), Eigen::numext::q, Eigen::internal::ppolevl< Packet, N >::run(), tmp, and plotDoE::x.

Referenced by plog2_float(), and plog_float().

◆ plogical_shift_left() [1/31]

template<int N>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::plogical_shift_left ( const Packet16c a)
1329  {
1330  return __lsx_vslli_b((__m128i)a, N);
1331 }

References a, and N.

◆ plogical_shift_left() [2/31]

template<int N>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::plogical_shift_left ( const Packet16uc a)
1345  {
1346  return __lsx_vslli_b((__m128i)a, N);
1347 }

References a, and N.

◆ plogical_shift_left() [3/31]

template<int N>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::plogical_shift_left ( const Packet2l a)
1341  {
1342  return __lsx_vslli_d((__m128i)a, N);
1343 }

References a, and N.

◆ plogical_shift_left() [4/31]

template<int N>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::plogical_shift_left ( const Packet2ul a)
1357  {
1358  return __lsx_vslli_d((__m128i)a, N);
1359 }

References a, and N.

◆ plogical_shift_left() [5/31]

template<int N>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::plogical_shift_left ( const Packet4f a)
1987  {
1989  Packet4ui r = vec_sl(reinterpret_cast<Packet4ui>(a), p4ui_mask);
1990  return reinterpret_cast<Packet4f>(r);
1991 }

References a, EIGEN_DECLARE_CONST_FAST_Packet4ui(), N, and UniformPSDSelfTest::r.

◆ plogical_shift_left() [6/31]

template<int N>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::plogical_shift_left ( const Packet4i a)
1983  {
1984  return vec_sl(a, reinterpret_cast<Packet4ui>(pset1<Packet4i>(N)));
1985 }

References a, N, and pset1< Packet4i >().

◆ plogical_shift_left() [7/31]

template<int N>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::plogical_shift_left ( const Packet4ui a)
2007  {
2009  return vec_sl(a, p4ui_mask);
2010 }

References a, EIGEN_DECLARE_CONST_FAST_Packet4ui(), and N.

◆ plogical_shift_left() [8/31]

template<int N>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::plogical_shift_left ( const Packet8s a)
1333  {
1334  return __lsx_vslli_h((__m128i)a, N);
1335 }

References a, and N.

◆ plogical_shift_left() [9/31]

template<int N>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::plogical_shift_left ( const Packet8us a)
2013  {
2015  return vec_sl(a, p8us_mask);
2016 }

References a, EIGEN_DECLARE_CONST_FAST_Packet8us(), and N.

◆ plogical_shift_left() [10/31]

template<int N, typename T >
EIGEN_DEVICE_FUNC T Eigen::internal::plogical_shift_left ( const T a)
inline
Returns
a shifted by N bits to the left
719  {
720  return numext::logical_shift_left(a, N);
721 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar logical_shift_left(const Scalar &a, int n)
Definition: MathFunctions.h:1827

References a, Eigen::numext::logical_shift_left(), and N.

◆ plogical_shift_left() [11/31]

template<int N>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::plogical_shift_left ( Packet16c  a)
2329  {
2330  return vshlq_n_s8(a, N);
2331 }

References a, and N.

◆ plogical_shift_left() [12/31]

template<int N>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::plogical_shift_left ( Packet16i  a)
949  {
950  return _mm512_slli_epi32(a, N);
951 }

References a, and N.

◆ plogical_shift_left() [13/31]

template<int N>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::plogical_shift_left ( Packet16uc  a)
2341  {
2342  return vshlq_n_u8(a, N);
2343 }

References a, and N.

◆ plogical_shift_left() [14/31]

template<int N>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::plogical_shift_left ( Packet2i  a)
2361  {
2362  return vshl_n_s32(a, N);
2363 }

References a, and N.

◆ plogical_shift_left() [15/31]

template<int N>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::plogical_shift_left ( Packet2l  a)
2377  {
2378  return vshlq_n_s64(a, N);
2379 }

References a, and N.

◆ plogical_shift_left() [16/31]

template<int N>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::plogical_shift_left ( Packet2ui  a)
2369  {
2370  return vshl_n_u32(a, N);
2371 }

References a, and N.

◆ plogical_shift_left() [17/31]

template<int N>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::plogical_shift_left ( Packet2ul  a)
2381  {
2382  return vshlq_n_u64(a, N);
2383 }

References a, and N.

◆ plogical_shift_left() [18/31]

template<int N>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::plogical_shift_left ( Packet4c a)
2321  {
2322  return vget_lane_s32(vreinterpret_s32_s8(vshl_n_s8(vreinterpret_s8_s32(vdup_n_s32(a)), N)), 0);
2323 }

References a, and N.

◆ plogical_shift_left() [19/31]

template<int N>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::plogical_shift_left ( Packet4i  a)
2365  {
2366  return vshlq_n_s32(a, N);
2367 }

References a, and N.

◆ plogical_shift_left() [20/31]

template<int N>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::plogical_shift_left ( Packet4s  a)
2345  {
2346  return vshl_n_s16(a, N);
2347 }

References a, and N.

◆ plogical_shift_left() [21/31]

template<int N>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::plogical_shift_left ( Packet4uc a)
2333  {
2334  return vget_lane_u32(vreinterpret_u32_u8(vshl_n_u8(vreinterpret_u8_u32(vdup_n_u32(a)), N)), 0);
2335 }

References a, and N.

◆ plogical_shift_left() [22/31]

template<int N>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::plogical_shift_left ( Packet4ui  a)
2373  {
2374  return vshlq_n_u32(a, N);
2375 }

References a, and N.

◆ plogical_shift_left() [23/31]

template<int N>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::plogical_shift_left ( Packet4us  a)
2353  {
2354  return vshl_n_u16(a, N);
2355 }

References a, and N.

◆ plogical_shift_left() [24/31]

template<int N>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::plogical_shift_left ( Packet8c  a)
2325  {
2326  return vshl_n_s8(a, N);
2327 }

References a, and N.

◆ plogical_shift_left() [25/31]

template<int N>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::plogical_shift_left ( Packet8i  a)
1466  {
1467 #ifdef EIGEN_VECTORIZE_AVX2
1468  return _mm256_slli_epi32(a, N);
1469 #else
1470  __m128i lo = _mm_slli_epi32(_mm256_extractf128_si256(a, 0), N);
1471  __m128i hi = _mm_slli_epi32(_mm256_extractf128_si256(a, 1), N);
1472  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1473 #endif
1474 }

References a, and N.

◆ plogical_shift_left() [26/31]

template<int N>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::plogical_shift_left ( Packet8l  a)
964  {
965  return _mm512_slli_epi64(a, N);
966 }

References a, and N.

◆ plogical_shift_left() [27/31]

template<int N>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::plogical_shift_left ( Packet8s  a)
2349  {
2350  return vshlq_n_s16(a, N);
2351 }

References a, and N.

◆ plogical_shift_left() [28/31]

template<int N>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::plogical_shift_left ( Packet8uc  a)
2337  {
2338  return vshl_n_u8(a, N);
2339 }

References a, and N.

◆ plogical_shift_left() [29/31]

template<int N>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::plogical_shift_left ( Packet8ui  a)
1485  {
1486  return (Packet8ui)plogical_shift_left<N>((Packet8i)a);
1487 }

References a.

◆ plogical_shift_left() [30/31]

template<int N>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::plogical_shift_left ( Packet8us  a)
2357  {
2358  return vshlq_n_u16(a, N);
2359 }

References a, and N.

◆ plogical_shift_left() [31/31]

template<int N>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::plogical_shift_left ( PacketXi  a)
193  {
194  return svlsl_n_s32_x(svptrue_b32(), a, N);
195 }

References a, and N.

◆ plogical_shift_right() [1/31]

template<int N>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::plogical_shift_right ( const Packet16c a)
1296  {
1297  return __lsx_vsrli_b((__m128i)a, N);
1298 }

References a, and N.

◆ plogical_shift_right() [2/31]

template<int N>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::plogical_shift_right ( const Packet16uc a)
1312  {
1313  return __lsx_vsrli_b((__m128i)a, N);
1314 }

References a, and N.

◆ plogical_shift_right() [3/31]

template<int N>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::plogical_shift_right ( const Packet2l a)
1308  {
1309  return __lsx_vsrli_d((__m128i)a, N);
1310 }

References a, and N.

◆ plogical_shift_right() [4/31]

template<int N>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::plogical_shift_right ( const Packet2ul a)
1324  {
1325  return __lsx_vsrli_d((__m128i)a, N);
1326 }

References a, and N.

◆ plogical_shift_right() [5/31]

template<int N>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::plogical_shift_right ( const Packet4f a)
1994  {
1996  Packet4ui r = vec_sr(reinterpret_cast<Packet4ui>(a), p4ui_mask);
1997  return reinterpret_cast<Packet4f>(r);
1998 }

References a, EIGEN_DECLARE_CONST_FAST_Packet4ui(), N, and UniformPSDSelfTest::r.

◆ plogical_shift_right() [6/31]

template<int N>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::plogical_shift_right ( const Packet4i a)
1979  {
1980  return vec_sr(a, reinterpret_cast<Packet4ui>(pset1<Packet4i>(N)));
1981 }

References a, N, and pset1< Packet4i >().

◆ plogical_shift_right() [7/31]

template<int N>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::plogical_shift_right ( const Packet4ui a)
2001  {
2003  return vec_sr(a, p4ui_mask);
2004 }

References a, EIGEN_DECLARE_CONST_FAST_Packet4ui(), and N.

◆ plogical_shift_right() [8/31]

template<int N>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::plogical_shift_right ( const Packet8s a)
1300  {
1301  return __lsx_vsrli_h((__m128i)a, N);
1302 }

References a, and N.

◆ plogical_shift_right() [9/31]

template<int N>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::plogical_shift_right ( const Packet8us a)
2018  {
2020  return vec_sr(a, p8us_mask);
2021 }

References a, EIGEN_DECLARE_CONST_FAST_Packet8us(), and N.

◆ plogical_shift_right() [10/31]

template<int N, typename T >
EIGEN_DEVICE_FUNC T Eigen::internal::plogical_shift_right ( const T a)
inline
Returns
a logically shifted by N bits to the right
713  {
715 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar logical_shift_right(const Scalar &a, int n)
Definition: MathFunctions.h:1832

References a, Eigen::numext::logical_shift_right(), and N.

◆ plogical_shift_right() [11/31]

template<int N>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::plogical_shift_right ( Packet16c  a)
2264  {
2265  return vreinterpretq_s8_u8(vshrq_n_u8(vreinterpretq_u8_s8(a), N));
2266 }

References a, and N.

◆ plogical_shift_right() [12/31]

template<int N>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::plogical_shift_right ( Packet16i  a)
944  {
945  return _mm512_srli_epi32(a, N);
946 }

References a, and N.

◆ plogical_shift_right() [13/31]

template<int N>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::plogical_shift_right ( Packet16uc  a)
2276  {
2277  return vshrq_n_u8(a, N);
2278 }

References a, and N.

◆ plogical_shift_right() [14/31]

template<int N>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::plogical_shift_right ( Packet2i  a)
2296  {
2297  return vreinterpret_s32_u32(vshr_n_u32(vreinterpret_u32_s32(a), N));
2298 }

References a, and N.

◆ plogical_shift_right() [15/31]

template<int N>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::plogical_shift_right ( Packet2l  a)
2312  {
2313  return vreinterpretq_s64_u64(vshrq_n_u64(vreinterpretq_u64_s64(a), N));
2314 }

References a, and N.

◆ plogical_shift_right() [16/31]

template<int N>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::plogical_shift_right ( Packet2ui  a)
2304  {
2305  return vshr_n_u32(a, N);
2306 }

References a, and N.

◆ plogical_shift_right() [17/31]

template<int N>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::plogical_shift_right ( Packet2ul  a)
2316  {
2317  return vshrq_n_u64(a, N);
2318 }

References a, and N.

◆ plogical_shift_right() [18/31]

template<int N>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::plogical_shift_right ( Packet4c a)
2256  {
2257  return vget_lane_s32(vreinterpret_s32_u8(vshr_n_u8(vreinterpret_u8_s32(vdup_n_s32(a)), N)), 0);
2258 }

References a, and N.

◆ plogical_shift_right() [19/31]

template<int N>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::plogical_shift_right ( Packet4i  a)
2300  {
2301  return vreinterpretq_s32_u32(vshrq_n_u32(vreinterpretq_u32_s32(a), N));
2302 }

References a, and N.

◆ plogical_shift_right() [20/31]

template<int N>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::plogical_shift_right ( Packet4s  a)
2280  {
2281  return vreinterpret_s16_u16(vshr_n_u16(vreinterpret_u16_s16(a), N));
2282 }

References a, and N.

◆ plogical_shift_right() [21/31]

template<int N>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::plogical_shift_right ( Packet4uc a)
2268  {
2269  return vget_lane_u32(vreinterpret_u32_s8(vshr_n_s8(vreinterpret_s8_u32(vdup_n_u32(a)), N)), 0);
2270 }

References a, and N.

◆ plogical_shift_right() [22/31]

template<int N>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::plogical_shift_right ( Packet4ui  a)
2308  {
2309  return vshrq_n_u32(a, N);
2310 }

References a, and N.

◆ plogical_shift_right() [23/31]

template<int N>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::plogical_shift_right ( Packet4us  a)
2288  {
2289  return vshr_n_u16(a, N);
2290 }

References a, and N.

◆ plogical_shift_right() [24/31]

template<int N>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::plogical_shift_right ( Packet8c  a)
2260  {
2261  return vreinterpret_s8_u8(vshr_n_u8(vreinterpret_u8_s8(a), N));
2262 }

References a, and N.

◆ plogical_shift_right() [25/31]

template<int N>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::plogical_shift_right ( Packet8i  a)
1455  {
1456 #ifdef EIGEN_VECTORIZE_AVX2
1457  return _mm256_srli_epi32(a, N);
1458 #else
1459  __m128i lo = _mm_srli_epi32(_mm256_extractf128_si256(a, 0), N);
1460  __m128i hi = _mm_srli_epi32(_mm256_extractf128_si256(a, 1), N);
1461  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1462 #endif
1463 }

References a, and N.

◆ plogical_shift_right() [26/31]

template<int N>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::plogical_shift_right ( Packet8l  a)
959  {
960  return _mm512_srli_epi64(a, N);
961 }

References a, and N.

◆ plogical_shift_right() [27/31]

template<int N>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::plogical_shift_right ( Packet8s  a)
2284  {
2285  return vreinterpretq_s16_u16(vshrq_n_u16(vreinterpretq_u16_s16(a), N));
2286 }

References a, and N.

◆ plogical_shift_right() [28/31]

template<int N>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::plogical_shift_right ( Packet8uc  a)
2272  {
2273  return vshr_n_u8(a, N);
2274 }

References a, and N.

◆ plogical_shift_right() [29/31]

template<int N>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::plogical_shift_right ( Packet8ui  a)
1481  {
1482  return (Packet8ui)plogical_shift_right<N>((Packet8i)a);
1483 }

References a.

◆ plogical_shift_right() [30/31]

template<int N>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::plogical_shift_right ( Packet8us  a)
2292  {
2293  return vshrq_n_u16(a, N);
2294 }

References a, and N.

◆ plogical_shift_right() [31/31]

template<int N>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::plogical_shift_right ( PacketXi  a)
188  {
189  return svreinterpret_s32_u32(svlsr_n_u32_x(svptrue_b32(), svreinterpret_u32_s32(a), N));
190 }

References a, and N.

◆ plset()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::plset ( const typename unpacket_traits< Packet >::type &  a)

Returns a packet with coefficients (a,a+1,...,a+packet_size-1).

872  {
873  return a;
874 }

References a.

◆ plset< Packet16bf >()

2911  {
2912  return F32ToBf16(plset<Packet16f>(static_cast<float>(a)));
2913 }
EIGEN_STRONG_INLINE Packet16f plset< Packet16f >(const float &a)
Definition: AVX512/PacketMath.h:337

References a, F32ToBf16(), and plset< Packet16f >().

◆ plset< Packet16c >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::plset< Packet16c > ( const int8_t &  a)
518  {
519  const int8_t countdown[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
520  return __lsx_vadd_b(pset1<Packet16c>(a), __lsx_vld(countdown, 0));
521 }
EIGEN_STRONG_INLINE Packet16c pset1< Packet16c >(const int8_t &from)
Definition: LSX/PacketMath.h:466

References a, and pset1< Packet16c >().

◆ plset< Packet16c >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::plset< Packet16c > ( const signed char a)
1057  {
1058  return pset1<Packet16c>(a) + p16c_COUNTDOWN;
1059 }
static Packet16c p16c_COUNTDOWN
Definition: AltiVec/PacketMath.h:92

References a, p16c_COUNTDOWN, and pset1< Packet16c >().

◆ plset< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::plset< Packet16f > ( const float &  a)
337  {
338  return _mm512_add_ps(_mm512_set1_ps(a), _mm512_set_ps(15.0f, 14.0f, 13.0f, 12.0f, 11.0f, 10.0f, 9.0f, 8.0f, 7.0f,
339  6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f, 0.0f));
340 }

References a.

Referenced by plset< Packet16bf >(), and plset< Packet16h >().

◆ plset< Packet16h >()

2286  {
2287  return float2half(plset<Packet16f>(static_cast<float>(a)));
2288 }

References a, float2half(), and plset< Packet16f >().

◆ plset< Packet16i >()

346  {
347  return _mm512_add_epi32(_mm512_set1_epi32(a), _mm512_set_epi32(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0));
348 }

References a.

◆ plset< Packet16uc >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::plset< Packet16uc > ( const uint8_t &  a)
538  {
539  const uint8_t countdown[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
540  return __lsx_vadd_b(pset1<Packet16uc>(a), __lsx_vld(countdown, 0));
541 }
EIGEN_STRONG_INLINE Packet16uc pset1< Packet16uc >(const uint8_t &from)
Definition: LSX/PacketMath.h:482

References a, and pset1< Packet16uc >().

◆ plset< Packet16uc >() [2/2]

1061  {
1063 }
static Packet16uc p16uc_COUNTDOWN
Definition: AltiVec/PacketMath.h:93

References a, p16uc_COUNTDOWN, and pset1< Packet16uc >().

◆ plset< Packet2d >()

563  {
564  static const Packet2d countdown = {0.0f, 1.0f};
565  return __lsx_vfadd_d(pset1<Packet2d>(a), countdown);
566 }

References a, and pset1< Packet2d >().

◆ plset< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::plset< Packet2f > ( const float &  a)
751  {
752  const float c[] = {0.0f, 1.0f};
753  return vadd_f32(pset1<Packet2f>(a), vld1_f32(c));
754 }
EIGEN_STRONG_INLINE Packet2f pset1< Packet2f >(const float &from)
Definition: NEON/PacketMath.h:669

References a, calibrate::c, and pset1< Packet2f >().

◆ plset< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::plset< Packet2i > ( const int32_t &  a)
809  {
810  const int32_t c[] = {0, 1};
811  return vadd_s32(pset1<Packet2i>(a), vld1_s32(c));
812 }

References a, calibrate::c, and pset1< Packet2i >().

◆ plset< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::plset< Packet2l > ( const int64_t &  a)
533  {
534  const int64_t countdown[] = {0, 1};
535  return __lsx_vadd_d(pset1<Packet2l>(a), __lsx_vld(countdown, 0));
536 }

References a, and pset1< Packet2l >().

◆ plset< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::plset< Packet2ui > ( const uint32_t &  a)
819  {
820  const uint32_t c[] = {0, 1};
821  return vadd_u32(pset1<Packet2ui>(a), vld1_u32(c));
822 }

References a, calibrate::c, and pset1< Packet2ui >().

◆ plset< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::plset< Packet2ul > ( const uint64_t &  a)
553  {
554  const uint64_t countdown[] = {0, 1};
555  return __lsx_vadd_d(pset1<Packet2ul>(a), __lsx_vld(countdown, 0));
556 }

References a, and pset1< Packet2ul >().

◆ plset< Packet32h >()

217  {
218  return _mm512_add_ph(pset1<Packet32h>(a), _mm512_set_ph(31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
219  16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0));
220 }
EIGEN_STRONG_INLINE Packet32h pset1< Packet32h >(const Eigen::half &from)
Definition: PacketMathFP16.h:111

References a, and pset1< Packet32h >().

◆ plset< Packet4bf >()

4893  {
4894  return F32ToBf16(plset<Packet4f>(static_cast<float>(a)));
4895 }
EIGEN_STRONG_INLINE Packet4f plset< Packet4f >(const float &a)
Definition: AltiVec/PacketMath.h:1041

References a, F32ToBf16(), and plset< Packet4f >().

◆ plset< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::plset< Packet4c > ( const int8_t &  a)
761  {
762  return vget_lane_s32(vreinterpret_s32_s8(vadd_s8(vreinterpret_s8_u32(vdup_n_u32(0x03020100)), vdup_n_s8(a))), 0);
763 }

References a.

◆ plset< Packet4d >()

857  {
858  return padd(pset1<Packet4d>(a), _mm256_set_pd(3.0, 2.0, 1.0, 0.0));
859 }

References a, padd(), and pset1< Packet4d >().

◆ plset< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::plset< Packet4f > ( const float &  a)
1041  {
1042  return pset1<Packet4f>(a) + p4f_COUNTDOWN;
1043 }
static Packet4f p4f_COUNTDOWN
Definition: AltiVec/PacketMath.h:87

References a, p4f_COUNTDOWN, and pset1< Packet4f >().

Referenced by plset< Packet4bf >().

◆ plset< Packet4i >() [1/2]

1045  {
1046  return pset1<Packet4i>(a) + p4i_COUNTDOWN;
1047 }
static Packet4i p4i_COUNTDOWN
Definition: AltiVec/PacketMath.h:88

References a, p4i_COUNTDOWN, and pset1< Packet4i >().

◆ plset< Packet4i >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::plset< Packet4i > ( const int32_t &  a)
528  {
529  const int32_t countdown[] = {0, 1, 2, 3};
530  return __lsx_vadd_w(pset1<Packet4i>(a), __lsx_vld(countdown, 0));
531 }
EIGEN_STRONG_INLINE Packet4i pset1< Packet4i >(const int32_t &from)
Definition: LSX/PacketMath.h:474

References a, and pset1< Packet4i >().

◆ plset< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::plset< Packet4s > ( const int16_t &  a)
789  {
790  const int16_t c[] = {0, 1, 2, 3};
791  return vadd_s16(pset1<Packet4s>(a), vld1_s16(c));
792 }

References a, calibrate::c, and pset1< Packet4s >().

◆ plset< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::plset< Packet4uc > ( const uint8_t &  a)
775  {
776  return vget_lane_u32(vreinterpret_u32_u8(vadd_u8(vreinterpret_u8_u32(vdup_n_u32(0x03020100)), vdup_n_u8(a))), 0);
777 }

References a.

◆ plset< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::plset< Packet4ui > ( const uint32_t &  a)
548  {
549  const uint32_t countdown[] = {0, 1, 2, 3};
550  return __lsx_vadd_w(pset1<Packet4ui>(a), __lsx_vld(countdown, 0));
551 }

References a, and pset1< Packet4ui >().

◆ plset< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::plset< Packet4us > ( const uint16_t &  a)
794  {
795  const uint16_t c[] = {0, 1, 2, 3};
796  return vadd_u16(pset1<Packet4us>(a), vld1_u16(c));
797 }

References a, calibrate::c, and pset1< Packet4us >().

◆ plset< Packet8bf >()

2428  {
2429  bfloat16 countdown[8] = {bfloat16(0), bfloat16(1), bfloat16(2), bfloat16(3),
2430  bfloat16(4), bfloat16(5), bfloat16(6), bfloat16(7)};
2431  return padd<Packet8bf>(pset1<Packet8bf>(a), pload<Packet8bf>(countdown));
2432 }
EIGEN_STRONG_INLINE Packet8bf padd< Packet8bf >(const Packet8bf &a, const Packet8bf &b)
Definition: AltiVec/PacketMath.h:2283
EIGEN_STRONG_INLINE Packet8bf pload< Packet8bf >(const bfloat16 *from)
Definition: AltiVec/PacketMath.h:522

References a, padd< Packet8bf >(), pload< Packet8bf >(), and pset1< Packet8bf >().

◆ plset< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::plset< Packet8c > ( const int8_t &  a)
765  {
766  const int8_t c[] = {0, 1, 2, 3, 4, 5, 6, 7};
767  return vadd_s8(pset1<Packet8c>(a), vld1_s8(c));
768 }

References a, calibrate::c, and pset1< Packet8c >().

◆ plset< Packet8d >()

342  {
343  return _mm512_add_pd(_mm512_set1_pd(a), _mm512_set_pd(7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0));
344 }

References a.

◆ plset< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::plset< Packet8f > ( const float &  a)
853  {
854  return padd(pset1<Packet8f>(a), _mm256_set_ps(7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0, 0.0));
855 }
EIGEN_STRONG_INLINE Packet8f pset1< Packet8f >(const float &from)
Definition: AVX/PacketMath.h:748

References a, padd(), and pset1< Packet8f >().

Referenced by plset< Packet8h >().

◆ plset< Packet8h >()

2304  {
2305  return float2half(plset<Packet8f>(static_cast<float>(a)));
2306 }
EIGEN_STRONG_INLINE Packet8f plset< Packet8f >(const float &a)
Definition: AVX/PacketMath.h:853

References a, float2half(), and plset< Packet8f >().

◆ plset< Packet8i >()

861  {
862  return padd(pset1<Packet8i>(a), (Packet8i)_mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0));
863 }

References a, padd(), and pset1< Packet8i >().

◆ plset< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::plset< Packet8l > ( const int64_t &  a)
350  {
351  return _mm512_add_epi64(_mm512_set1_epi64(a), _mm512_set_epi64(7, 6, 5, 4, 3, 2, 1, 0));
352 }

References a.

◆ plset< Packet8s >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::plset< Packet8s > ( const int16_t &  a)
523  {
524  const int16_t countdown[] = {0, 1, 2, 3, 4, 5, 6, 7};
525  return __lsx_vadd_h(pset1<Packet8s>(a), __lsx_vld(countdown, 0));
526 }
EIGEN_STRONG_INLINE Packet8s pset1< Packet8s >(const int16_t &from)
Definition: LSX/PacketMath.h:470

References a, and pset1< Packet8s >().

◆ plset< Packet8s >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::plset< Packet8s > ( const short int a)
1049  {
1050  return pset1<Packet8s>(a) + p8s_COUNTDOWN;
1051 }
static Packet8s p8s_COUNTDOWN
Definition: AltiVec/PacketMath.h:89
EIGEN_STRONG_INLINE Packet8s pset1< Packet8s >(const short int &from)
Definition: AltiVec/PacketMath.h:783

References a, p8s_COUNTDOWN, and pset1< Packet8s >().

◆ plset< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::plset< Packet8uc > ( const uint8_t &  a)
779  {
780  const uint8_t c[] = {0, 1, 2, 3, 4, 5, 6, 7};
781  return vadd_u8(pset1<Packet8uc>(a), vld1_u8(c));
782 }

References a, calibrate::c, and pset1< Packet8uc >().

◆ plset< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::plset< Packet8ui > ( const uint32_t &  a)
865  {
866  return padd(pset1<Packet8ui>(a), (Packet8ui)_mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0));
867 }
EIGEN_STRONG_INLINE Packet8ui pset1< Packet8ui >(const uint32_t &from)
Definition: AVX/PacketMath.h:760

References a, padd(), and pset1< Packet8ui >().

◆ plset< Packet8us >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::plset< Packet8us > ( const uint16_t &  a)
543  {
544  const uint16_t countdown[] = {0, 1, 2, 3, 4, 5, 6, 7};
545  return __lsx_vadd_h(pset1<Packet8us>(a), __lsx_vld(countdown, 0));
546 }
EIGEN_STRONG_INLINE Packet8us pset1< Packet8us >(const uint16_t &from)
Definition: LSX/PacketMath.h:486

References a, and pset1< Packet8us >().

◆ plset< Packet8us >() [2/2]

1053  {
1054  return pset1<Packet8us>(a) + p8us_COUNTDOWN;
1055 }
static Packet8us p8us_COUNTDOWN
Definition: AltiVec/PacketMath.h:90

References a, p8us_COUNTDOWN, and pset1< Packet8us >().

◆ plset< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::plset< PacketXf > ( const float &  a)
394  {
396  for (int i = 0; i < packet_traits<float>::size; i++) c[i] = i;
397  return svadd_f32_x(svptrue_b32(), pset1<PacketXf>(a), svld1_f32(svptrue_b32(), c));
398 }
EIGEN_STRONG_INLINE PacketXf pset1< PacketXf >(const float &from)
Definition: SVE/PacketMath.h:384

References a, calibrate::c, i, pset1< PacketXf >(), and size.

◆ plset< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::plset< PacketXi > ( const numext::int32_t a)
86  {
88  for (int i = 0; i < packet_traits<numext::int32_t>::size; i++) c[i] = i;
89  return svadd_s32_x(svptrue_b32(), pset1<PacketXi>(a), svld1_s32(svptrue_b32(), c));
90 }
EIGEN_STRONG_INLINE PacketXi pset1< PacketXi >(const numext::int32_t &from)
Definition: SVE/PacketMath.h:81

References a, calibrate::c, i, pset1< PacketXi >(), and size.

◆ pmadd() [1/23]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pmadd ( const Packet a,
const Packet b,
const Packet c 
)
inline
Returns
a * b + c (coeff-wise)
1300  {
1301  return padd(pmul(a, b), c);
1302 }

References a, b, calibrate::c, padd(), and pmul().

◆ pmadd() [2/23]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pmadd ( const Packet16c a,
const Packet16c b,
const Packet16c c 
)
843  {
844  return __lsx_vmadd_b(c, a, b);
845 }

References a, b, and calibrate::c.

◆ pmadd() [3/23]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pmadd ( const Packet16uc a,
const Packet16uc b,
const Packet16uc c 
)
859  {
860  return __lsx_vmadd_b(c, a, b);
861 }

References a, b, and calibrate::c.

◆ pmadd() [4/23]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pmadd ( const Packet2d a,
const Packet2d b,
const Packet2d c 
)
815  {
816  return __lsx_vfmadd_d(a, b, c);
817 }

References a, b, and calibrate::c.

◆ pmadd() [5/23]

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pmadd ( const Packet2f a,
const Packet2f b,
const Packet2f c 
)
1295  {
1296  return vmla_f32(c, a, b);
1297 }

References a, b, and calibrate::c.

◆ pmadd() [6/23]

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pmadd ( const Packet2i a,
const Packet2i b,
const Packet2i c 
)
1348  {
1349  return vmla_s32(c, a, b);
1350 }

References a, b, and calibrate::c.

◆ pmadd() [7/23]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pmadd ( const Packet2l a,
const Packet2l b,
const Packet2l c 
)
855  {
856  return __lsx_vmadd_d(c, a, b);
857 }

References a, b, and calibrate::c.

◆ pmadd() [8/23]

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pmadd ( const Packet2ui a,
const Packet2ui b,
const Packet2ui c 
)
1356  {
1357  return vmla_u32(c, a, b);
1358 }

References a, b, and calibrate::c.

◆ pmadd() [9/23]

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pmadd ( const Packet2ul a,
const Packet2ul b,
const Packet2ul c 
)
871  {
872  return __lsx_vmadd_d(c, a, b);
873 }

References a, b, and calibrate::c.

◆ pmadd() [10/23]

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pmadd ( const Packet4c a,
const Packet4c b,
const Packet4c c 
)
1302  {
1303  return vget_lane_s32(
1304  vreinterpret_s32_s8(vmla_s8(vreinterpret_s8_s32(vdup_n_s32(c)), vreinterpret_s8_s32(vdup_n_s32(a)),
1305  vreinterpret_s8_s32(vdup_n_s32(b)))),
1306  0);
1307 }

References a, b, and calibrate::c.

◆ pmadd() [11/23]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pmadd ( const Packet4f a,
const Packet4f b,
const Packet4f c 
)
1218  {
1219  return vec_madd(a, b, c);
1220 }

References a, b, and calibrate::c.

Referenced by Eigen::internal::gebp_traits< LhsScalar_, RhsScalar_, ConjLhs_, ConjRhs_, Arch, PacketSize_ >::acc(), Eigen::internal::gebp_traits< std::complex< RealScalar >, std::complex< RealScalar >, ConjLhs_, ConjRhs_, Arch, PacketSize_ >::acc(), Eigen::internal::scalar_inner_product_op< Scalar, Scalar, Conj >::coeff(), Eigen::TensorSycl::internal::TensorContractionKernel< OutScalar, LhsScalar, RhsScalar, OutAccessor, LhsMapper, RhsMapper, StorageIndex, Properties, TripleDim, Vectorizable, input_mapper_properties, IsFinal, contraction_tp >::compute_block_per_tile(), Eigen::TensorSycl::internal::GeneralVectorTensor< OutScalar, OutAccessor, VectorMapper, TensorMapper, StorageIndex, Properties, KFactor, Vectorizable, is_lhs_vec, IsFinal >::compute_panel(), Eigen::internal::determinant_impl< Derived, 4 >::det3(), erfc_double_large(), generic_ndtri_gt_exp_neg_two(), KLoop(), loadAndMultiplyF32(), Eigen::internal::gebp_traits< std::complex< RealScalar >, std::complex< RealScalar >, ConjLhs_, ConjRhs_, Arch, PacketSize_ >::madd(), Eigen::internal::gebp_traits< std::complex< RealScalar >, RealScalar, ConjLhs_, false, Arch, PacketSize_ >::madd_impl(), Eigen::internal::gebp_traits< RealScalar, std::complex< RealScalar >, false, ConjRhs_, Arch, PacketSize_ >::madd_impl(), multVecVSX(), Eigen::TensorSycl::internal::GeneralScalarContraction< OutScalar, LhsScalar, RhsScalar, OutAccessor, LhsMapper, RhsMapper, StorageIndex, Vectorizable >::operator()(), Eigen::internal::accurate_log2< double >::operator()(), outputVecCol(), outputVecResults(), Eigen::internal::scalar_inner_product_op< Scalar, Scalar, Conj >::packet(), packetmath(), Eigen::internal::scalar_logistic_op< float >::packetOp(), Eigen::internal::equalspaced_op< Scalar >::packetOp(), pacos_float(), patanh_double(), patanh_float(), pexp< Packet2d >(), pexp< Packet4f >(), pexp_double(), pexp_float(), phypot_complex(), plog< Packet4f >(), plog_impl_double(), plog_impl_float(), Eigen::internal::conj_helper< Packet, Packet, ConjLhs, ConjRhs >::pmadd(), Eigen::internal::conj_helper< Packet, Packet, true, true >::pmadd(), pmadd_complex(), pnmsub(), psincos_double(), psincos_float(), psincos_inner_msa_float(), ptanh< Packet4f >(), ptanh_double(), ptanh_float(), Eigen::internal::determinant_impl< Derived, 4 >::run(), Eigen::internal::generic_rsqrt_newton_step< Packet, Steps >::run(), Eigen::internal::generic_sqrt_newton_step< Packet, Steps >::run(), Eigen::internal::ppolevl< Packet, N >::run(), Eigen::internal::generic_i0e< T, float >::run(), Eigen::internal::generic_i0e< T, double >::run(), Eigen::internal::generic_i1e< T, float >::run(), Eigen::internal::generic_i1e< T, double >::run(), Eigen::internal::generic_k0e< T, float >::run(), Eigen::internal::generic_k0e< T, double >::run(), Eigen::internal::generic_k0< T, float >::run(), Eigen::internal::generic_k0< T, double >::run(), Eigen::internal::generic_k1e< T, float >::run(), Eigen::internal::generic_k1e< T, double >::run(), Eigen::internal::generic_k1< T, float >::run(), Eigen::internal::generic_k1< T, double >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_y0< T, float >::run(), Eigen::internal::generic_y0< T, double >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), Eigen::internal::generic_y1< T, float >::run(), Eigen::internal::generic_y1< T, double >::run(), Eigen::internal::generic_fast_erfc< Scalar >::run(), Eigen::internal::etor_product_packet_impl< RowMajor, UnrollingIndex, Lhs, Rhs, Packet, LoadMode >::run(), Eigen::internal::etor_product_packet_impl< ColMajor, UnrollingIndex, Lhs, Rhs, Packet, LoadMode >::run(), Eigen::internal::etor_product_packet_impl< RowMajor, Dynamic, Lhs, Rhs, Packet, LoadMode >::run(), Eigen::internal::etor_product_packet_impl< ColMajor, Dynamic, Lhs, Rhs, Packet, LoadMode >::run(), Eigen::internal::general_matrix_vector_product< Index, LhsScalar, LhsMapper, ColMajor, ConjugateLhs, RhsScalar, RhsMapper, ConjugateRhs, Version >::run(), Eigen::internal::pchebevl< Packet, N >::run(), storeMaddData(), trig_reduce_medium_double(), trig_reduce_small_double(), twoprod(), twoprod_low(), Eigen::internal::gemm_class< Scalar, is_unit_inc >::vfmadd(), and Eigen::internal::gemm_class< Scalar, is_unit_inc >::vfmaddm().

◆ pmadd() [12/23]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pmadd ( const Packet4i a,
const Packet4i b,
const Packet4i c 
)
1222  {
1223  return a * b + c;
1224 }

References a, b, and calibrate::c.

◆ pmadd() [13/23]

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pmadd ( const Packet4s a,
const Packet4s b,
const Packet4s c 
)
1332  {
1333  return vmla_s16(c, a, b);
1334 }

References a, b, and calibrate::c.

◆ pmadd() [14/23]

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pmadd ( const Packet4uc a,
const Packet4uc b,
const Packet4uc c 
)
1317  {
1318  return vget_lane_u32(
1319  vreinterpret_u32_u8(vmla_u8(vreinterpret_u8_u32(vdup_n_u32(c)), vreinterpret_u8_u32(vdup_n_u32(a)),
1320  vreinterpret_u8_u32(vdup_n_u32(b)))),
1321  0);
1322 }

References a, b, and calibrate::c.

◆ pmadd() [15/23]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pmadd ( const Packet4ui a,
const Packet4ui b,
const Packet4ui c 
)
867  {
868  return __lsx_vmadd_w(c, a, b);
869 }

References a, b, and calibrate::c.

◆ pmadd() [16/23]

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pmadd ( const Packet4us a,
const Packet4us b,
const Packet4us c 
)
1340  {
1341  return vmla_u16(c, a, b);
1342 }

References a, b, and calibrate::c.

◆ pmadd() [17/23]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pmadd ( const Packet8bf a,
const Packet8bf b,
const Packet8bf c 
)
2378  {
2379  Packet4f a_even = Bf16ToF32Even(a);
2380  Packet4f a_odd = Bf16ToF32Odd(a);
2381  Packet4f b_even = Bf16ToF32Even(b);
2382  Packet4f b_odd = Bf16ToF32Odd(b);
2383  Packet4f c_even = Bf16ToF32Even(c);
2384  Packet4f c_odd = Bf16ToF32Odd(c);
2385  Packet4f pmadd_even = pmadd<Packet4f>(a_even, b_even, c_even);
2386  Packet4f pmadd_odd = pmadd<Packet4f>(a_odd, b_odd, c_odd);
2387  return F32ToBf16(pmadd_even, pmadd_odd);
2388 }

References a, b, Bf16ToF32Even(), Bf16ToF32Odd(), calibrate::c, and F32ToBf16().

◆ pmadd() [18/23]

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pmadd ( const Packet8c a,
const Packet8c b,
const Packet8c c 
)
1309  {
1310  return vmla_s8(c, a, b);
1311 }

References a, b, and calibrate::c.

◆ pmadd() [19/23]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pmadd ( const Packet8s a,
const Packet8s b,
const Packet8s c 
)
1226  {
1227  return vec_madd(a, b, c);
1228 }

References a, b, and calibrate::c.

◆ pmadd() [20/23]

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pmadd ( const Packet8uc a,
const Packet8uc b,
const Packet8uc c 
)
1324  {
1325  return vmla_u8(c, a, b);
1326 }

References a, b, and calibrate::c.

◆ pmadd() [21/23]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pmadd ( const Packet8us a,
const Packet8us b,
const Packet8us c 
)
1230  {
1231  return vec_madd(a, b, c);
1232 }

References a, b, and calibrate::c.

◆ pmadd() [22/23]

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pmadd ( const PacketXf &  a,
const PacketXf &  b,
const PacketXf &  c 
)
431  {
432  return svmla_f32_x(svptrue_b32(), c, a, b);
433 }

References a, b, and calibrate::c.

◆ pmadd() [23/23]

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pmadd ( const PacketXi &  a,
const PacketXi &  b,
const PacketXi &  c 
)
123  {
124  return svmla_s32_x(svptrue_b32(), c, a, b);
125 }

References a, b, and calibrate::c.

◆ pmadd< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pmadd< Packet1cd > ( const Packet1cd a,
const Packet1cd b,
const Packet1cd c 
)
483  {
484  Packet1cd result, t0, t1, t2;
485  t1 = pzero(t1);
486  t0.v = (__m128d)__lsx_vpackev_d((__m128i)a.v, (__m128i)a.v);
487  t2.v = __lsx_vfmadd_d(t0.v, b.v, c.v);
488  result.v = __lsx_vfadd_d(t2.v, t1.v);
489  t1.v = __lsx_vfsub_d(t1.v, a.v);
490  t1.v = (__m128d)__lsx_vpackod_d((__m128i)a.v, (__m128i)t1.v);
491  t2.v = (__m128d)__lsx_vshuf4i_d((__m128i)t2.v, (__m128i)b.v, 0xb);
492  result.v = __lsx_vfmadd_d(t1.v, t2.v, result.v);
493  return result;
494 }
EIGEN_STRONG_INLINE Packet2cf pzero(const Packet2cf &)
Definition: LSX/Complex.h:235

References a, b, calibrate::c, pzero(), and Eigen::internal::Packet1cd::v.

◆ pmadd< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pmadd< Packet2cf > ( const Packet2cf a,
const Packet2cf b,
const Packet2cf c 
)
241  {
242  Packet2cf result, t0, t1, t2;
243  t1 = pzero(t1);
244  t0.v = (__m128)__lsx_vpackev_w((__m128i)a.v, (__m128i)a.v);
245  t2.v = __lsx_vfmadd_s(t0.v, b.v, c.v);
246  result.v = __lsx_vfadd_s(t2.v, t1.v);
247  t1.v = __lsx_vfsub_s(t1.v, a.v);
248  t1.v = (__m128)__lsx_vpackod_w((__m128i)a.v, (__m128i)t1.v);
249  t2.v = (__m128)__lsx_vshuf4i_w((__m128i)b.v, 0xb1);
250  result.v = __lsx_vfmadd_s(t1.v, t2.v, result.v);
251  return result;
252 }

References a, b, calibrate::c, and pzero().

◆ pmax() [1/2]

◆ pmax() [2/2]

template<int NaNPropagation, typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pmax ( const Packet a,
const Packet b 
)
inline
Returns
the max of a and b (coeff-wise). NaNPropagation determines the NaN propagation semantics.
670  {
672 }
#define EIGEN_BINARY_OP_NAN_PROPAGATION(Type, Func)
Definition: GenericPacketMath.h:644

References a, b, EIGEN_BINARY_OP_NAN_PROPAGATION, and Eigen::internal::pminmax_impl< NaNPropagation >::run().

◆ pmax< Packet16bf >()

2906  {
2908 }
EIGEN_STRONG_INLINE Packet16f pmax< Packet16f >(const Packet16f &a, const Packet16f &b)
Definition: AVX512/PacketMath.h:562

References a, b, Bf16ToF32(), F32ToBf16(), and pmax< Packet16f >().

◆ pmax< Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pmax< Packet16c > ( const Packet16c a,
const Packet16c b 
)
1305  {
1306  return vec_max(a, b);
1307 }

References a, and b.

◆ pmax< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pmax< Packet16f > ( const Packet16f a,
const Packet16f b 
)
562  {
563  // Arguments are reversed to match NaN propagation behavior of std::max.
564  return _mm512_max_ps(b, a);
565 }

References a, and b.

Referenced by pmax< Packet16bf >(), pmax< Packet16h >(), pmax< PropagateNaN, Packet16f >(), and pmax< PropagateNumbers, Packet16f >().

◆ pmax< Packet16h >()

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pmax< Packet16h > ( const Packet16h a,
const Packet16h b 
)
2281  {
2283 }

References a, b, float2half(), half2float(), and pmax< Packet16f >().

◆ pmax< Packet16i >()

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pmax< Packet16i > ( const Packet16i a,
const Packet16i b 
)
572  {
573  return _mm512_max_epi32(b, a);
574 }

References a, and b.

◆ pmax< Packet16uc >()

1309  {
1310  return vec_max(a, b);
1311 }

References a, and b.

◆ pmax< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pmax< Packet2d > ( const Packet2d a,
const Packet2d b 
)
1256  {
1257  Packet2l aNaN = __lsx_vfcmp_cun_d(a, a);
1258  Packet2l aMaxOrNaN = por<Packet2l>(__lsx_vfcmp_clt_d(b, a), aNaN);
1259  return (Packet2d)__lsx_vbitsel_v((__m128i)b, (__m128i)a, aMaxOrNaN);
1260 }
EIGEN_STRONG_INLINE Packet2l por< Packet2l >(const Packet2l &a, const Packet2l &b)
Definition: LSX/PacketMath.h:937

References a, b, and por< Packet2l >().

Referenced by pmax< PropagateNaN, Packet2d >(), and pmax< PropagateNumbers, Packet2d >().

◆ pmax< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pmax< Packet2f > ( const Packet2f a,
const Packet2f b 
)
1533  {
1534  return vmax_f32(a, b);
1535 }

References a, and b.

Referenced by pmax< PropagateNaN, Packet2f >().

◆ pmax< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pmax< Packet2i > ( const Packet2i a,
const Packet2i b 
)
1607  {
1608  return vmax_s32(a, b);
1609 }

References a, and b.

◆ pmax< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pmax< Packet2l > ( const Packet2l a,
const Packet2l b 
)
1217  {
1218  return __lsx_vmax_d(a, b);
1219 }

References a, and b.

◆ pmax< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pmax< Packet2ui > ( const Packet2ui a,
const Packet2ui b 
)
1615  {
1616  return vmax_u32(a, b);
1617 }

References a, and b.

◆ pmax< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pmax< Packet2ul > ( const Packet2ul a,
const Packet2ul b 
)
1233  {
1234  return __lsx_vmax_du(a, b);
1235 }

References a, and b.

◆ pmax< Packet32h >()

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pmax< Packet32h > ( const Packet32h a,
const Packet32h b 
)
211  {
212  return _mm512_max_ph(a, b);
213 }

References a, and b.

◆ pmax< Packet4bf >()

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pmax< Packet4bf > ( const Packet4bf a,
const Packet4bf b 
)
4888  {
4890 }
EIGEN_STRONG_INLINE Packet4f pmax< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1282

References a, b, Bf16ToF32(), F32ToBf16(), and pmax< Packet4f >().

◆ pmax< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pmax< Packet4c > ( const Packet4c a,
const Packet4c b 
)
1565  {
1566  return vget_lane_s32(
1567  vreinterpret_s32_s8(vmax_s8(vreinterpret_s8_s32(vdup_n_s32(a)), vreinterpret_s8_s32(vdup_n_s32(b)))), 0);
1568 }

References a, and b.

◆ pmax< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pmax< Packet4d > ( const Packet4d a,
const Packet4d b 
)
1159  {
1160 #if EIGEN_GNUC_STRICT_LESS_THAN(6, 3, 0)
1161  // See pmin above
1162  Packet4d res;
1163  asm("vmaxpd %[a], %[b], %[res]" : [res] "=x"(res) : [a] "x"(a), [b] "x"(b));
1164  return res;
1165 #else
1166  // Arguments are swapped to match NaN propagation behavior of std::max.
1167  return _mm256_max_pd(b, a);
1168 #endif
1169 }

References a, b, and res.

Referenced by pmax< PropagateNaN, Packet4d >(), and pmax< PropagateNumbers, Packet4d >().

◆ pmax< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pmax< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1282  {
1283 #ifdef EIGEN_VECTORIZE_VSX
1284  // NOTE: about 10% slower than vec_max, but consistent with std::max and SSE regarding NaN
1285  Packet4f ret;
1286  __asm__("xvcmpgtsp %x0,%x2,%x1\n\txxsel %x0,%x1,%x2,%x0" : "=&wa"(ret) : "wa"(a), "wa"(b));
1287  return ret;
1288 #else
1289  return vec_max(a, b);
1290 #endif
1291 }

References a, b, and ret.

Referenced by pmax< Packet4bf >(), pmax< Packet8bf >(), pmax< PropagateNaN, Packet4f >(), and pmax< PropagateNumbers, Packet4f >().

◆ pmax< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pmax< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1293  {
1294  return vec_max(a, b);
1295 }

References a, and b.

◆ pmax< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pmax< Packet4s > ( const Packet4s a,
const Packet4s b 
)
1591  {
1592  return vmax_s16(a, b);
1593 }

References a, and b.

◆ pmax< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pmax< Packet4uc > ( const Packet4uc a,
const Packet4uc b 
)
1578  {
1579  return vget_lane_u32(
1580  vreinterpret_u32_u8(vmax_u8(vreinterpret_u8_u32(vdup_n_u32(a)), vreinterpret_u8_u32(vdup_n_u32(b)))), 0);
1581 }

References a, and b.

◆ pmax< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pmax< Packet4ui > ( const Packet4ui a,
const Packet4ui b 
)
1229  {
1230  return __lsx_vmax_wu(a, b);
1231 }

References a, and b.

◆ pmax< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pmax< Packet4us > ( const Packet4us a,
const Packet4us b 
)
1599  {
1600  return vmax_u16(a, b);
1601 }

References a, and b.

◆ pmax< Packet8bf >()

◆ pmax< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pmax< Packet8c > ( const Packet8c a,
const Packet8c b 
)
1570  {
1571  return vmax_s8(a, b);
1572 }

References a, and b.

◆ pmax< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pmax< Packet8d > ( const Packet8d a,
const Packet8d b 
)
567  {
568  // Arguments are reversed to match NaN propagation behavior of std::max.
569  return _mm512_max_pd(b, a);
570 }

References a, and b.

Referenced by pmax< PropagateNaN, Packet8d >(), and pmax< PropagateNumbers, Packet8d >().

◆ pmax< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pmax< Packet8f > ( const Packet8f a,
const Packet8f b 
)
1147  {
1148 #if EIGEN_GNUC_STRICT_LESS_THAN(6, 3, 0)
1149  // See pmin above
1150  Packet8f res;
1151  asm("vmaxps %[a], %[b], %[res]" : [res] "=x"(res) : [a] "x"(a), [b] "x"(b));
1152  return res;
1153 #else
1154  // Arguments are swapped to match NaN propagation behavior of std::max.
1155  return _mm256_max_ps(b, a);
1156 #endif
1157 }

References a, b, and res.

Referenced by pmax< Packet8h >(), pmax< PropagateNaN, Packet8f >(), and pmax< PropagateNumbers, Packet8f >().

◆ pmax< Packet8h >()

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pmax< Packet8h > ( const Packet8h a,
const Packet8h b 
)
2299  {
2301 }
EIGEN_STRONG_INLINE Packet8f pmax< Packet8f >(const Packet8f &a, const Packet8f &b)
Definition: AVX/PacketMath.h:1147

References a, b, float2half(), half2float(), and pmax< Packet8f >().

◆ pmax< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pmax< Packet8i > ( const Packet8i a,
const Packet8i b 
)
1171  {
1172 #ifdef EIGEN_VECTORIZE_AVX2
1173  return _mm256_max_epi32(a, b);
1174 #else
1175  __m128i lo = _mm_max_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
1176  __m128i hi = _mm_max_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
1177  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1178 #endif
1179 }

References a, and b.

◆ pmax< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pmax< Packet8l > ( const Packet8l a,
const Packet8l b 
)
576  {
577  return _mm512_max_epi64(b, a);
578 }

References a, and b.

◆ pmax< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pmax< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1297  {
1298  return vec_max(a, b);
1299 }

References a, and b.

◆ pmax< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pmax< Packet8uc > ( const Packet8uc a,
const Packet8uc b 
)
1583  {
1584  return vmax_u8(a, b);
1585 }

References a, and b.

◆ pmax< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pmax< Packet8ui > ( const Packet8ui a,
const Packet8ui b 
)
1181  {
1182 #ifdef EIGEN_VECTORIZE_AVX2
1183  return _mm256_max_epu32(a, b);
1184 #else
1185  __m128i lo = _mm_max_epu32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
1186  __m128i hi = _mm_max_epu32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
1187  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1188 #endif
1189 }

References a, and b.

◆ pmax< Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pmax< Packet8us > ( const Packet8us a,
const Packet8us b 
)
1301  {
1302  return vec_max(a, b);
1303 }

References a, and b.

◆ pmax< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pmax< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
451  {
452  return svmax_f32_x(svptrue_b32(), a, b);
453 }

References a, and b.

Referenced by pmax< PropagateNaN, PacketXf >().

◆ pmax< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pmax< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
133  {
134  return svmax_s32_x(svptrue_b32(), a, b);
135 }

References a, and b.

◆ pmax< PropagateNaN, Packet16f >()

606  {
608 }
EIGEN_STRONG_INLINE Packet pminmax_propagate_nan(const Packet &a, const Packet &b, Op op)
Definition: SSE/PacketMath.h:1127

References a, b, pmax< Packet16f >(), and pminmax_propagate_nan().

◆ pmax< PropagateNaN, Packet2d >()

2733  {
2734  return pmax<Packet2d>(a, b);
2735 }
EIGEN_STRONG_INLINE Packet2d pmax< Packet2d >(const Packet2d &a, const Packet2d &b)
Definition: LSX/PacketMath.h:1256

References a, b, and pmax< Packet2d >().

◆ pmax< PropagateNaN, Packet2f >()

1560  {
1561  return pmax<Packet2f>(a, b);
1562 }
EIGEN_STRONG_INLINE Packet2f pmax< Packet2f >(const Packet2f &a, const Packet2f &b)
Definition: NEON/PacketMath.h:1533

References a, b, and pmax< Packet2f >().

◆ pmax< PropagateNaN, Packet4bf >()

4883  {
4885 }
EIGEN_STRONG_INLINE Packet4f pmax< PropagateNaN, Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:2699

References a, b, Bf16ToF32(), F32ToBf16(), and pmax< PropagateNaN, Packet4f >().

◆ pmax< PropagateNaN, Packet4d >()

1228  {
1230 }
EIGEN_STRONG_INLINE Packet4d pmax< Packet4d >(const Packet4d &a, const Packet4d &b)
Definition: AVX/PacketMath.h:1159

References a, b, pmax< Packet4d >(), and pminmax_propagate_nan().

◆ pmax< PropagateNaN, Packet4f >()

2699  {
2700  return pmax<Packet4f>(a, b);
2701 }

References a, b, and pmax< Packet4f >().

Referenced by pmax< PropagateNaN, Packet4bf >().

◆ pmax< PropagateNaN, Packet8d >()

610  {
612 }
EIGEN_STRONG_INLINE Packet8d pmax< Packet8d >(const Packet8d &a, const Packet8d &b)
Definition: AVX512/PacketMath.h:567

References a, b, pmax< Packet8d >(), and pminmax_propagate_nan().

◆ pmax< PropagateNaN, Packet8f >()

1224  {
1226 }

References a, b, pmax< Packet8f >(), and pminmax_propagate_nan().

◆ pmax< PropagateNaN, PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pmax< PropagateNaN, PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
456  {
457  return pmax<PacketXf>(a, b);
458 }
EIGEN_STRONG_INLINE PacketXf pmax< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition: SVE/PacketMath.h:451

References a, b, and pmax< PacketXf >().

◆ pmax< PropagateNumbers, Packet16f >()

590  {
592 }
EIGEN_STRONG_INLINE Packet pminmax_propagate_numbers(const Packet &a, const Packet &b, Op op)
Definition: SSE/PacketMath.h:1118

References a, b, pmax< Packet16f >(), and pminmax_propagate_numbers().

◆ pmax< PropagateNumbers, Packet2d >()

◆ pmax< PropagateNumbers, Packet4bf >()

4879  {
4881 }
EIGEN_STRONG_INLINE Packet4f pmax< PropagateNumbers, Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: SSE/PacketMath.h:1145

References a, b, Bf16ToF32(), F32ToBf16(), and pmax< PropagateNumbers, Packet4f >().

◆ pmax< PropagateNumbers, Packet4d >()

◆ pmax< PropagateNumbers, Packet4f >()

◆ pmax< PropagateNumbers, Packet8d >()

◆ pmax< PropagateNumbers, Packet8f >()

◆ pmax< PropagateNumbers, PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pmax< PropagateNumbers, PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
461  {
462  return svmaxnm_f32_x(svptrue_b32(), a, b);
463 }

References a, and b.

◆ pmerge()

EIGEN_ALWAYS_INLINE Packet8us Eigen::internal::pmerge ( Packet4ui  even,
Packet4ui  odd 
)
2032  {
2033 #ifdef _BIG_ENDIAN
2034  return vec_perm(reinterpret_cast<Packet8us>(odd), reinterpret_cast<Packet8us>(even), p16uc_MERGEO16);
2035 #else
2036  return vec_perm(reinterpret_cast<Packet8us>(even), reinterpret_cast<Packet8us>(odd), p16uc_MERGEE16);
2037 #endif
2038 }

References p16uc_MERGEE16, and p16uc_MERGEO16.

Referenced by F32ToBf16(), F32ToBf16Bool(), and pcast< Packet8bf, Packet8us >().

◆ pmin() [1/2]

◆ pmin() [2/2]

template<int NaNPropagation, typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pmin ( const Packet a,
const Packet b 
)
inline
Returns
the min of a and b (coeff-wise). NaNPropagation determines the NaN propagation semantics.
656  {
658 }

References a, b, EIGEN_BINARY_OP_NAN_PROPAGATION, and Eigen::internal::pminmax_impl< NaNPropagation >::run().

◆ pmin< Packet16bf >()

2901  {
2903 }
EIGEN_STRONG_INLINE Packet16f pmin< Packet16f >(const Packet16f &a, const Packet16f &b)
Definition: AVX512/PacketMath.h:543

References a, b, Bf16ToF32(), F32ToBf16(), and pmin< Packet16f >().

◆ pmin< Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pmin< Packet16c > ( const Packet16c a,
const Packet16c b 
)
1273  {
1274  return vec_min(a, b);
1275 }

References a, and b.

◆ pmin< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pmin< Packet16f > ( const Packet16f a,
const Packet16f b 
)
543  {
544  // Arguments are reversed to match NaN propagation behavior of std::min.
545  return _mm512_min_ps(b, a);
546 }

References a, and b.

Referenced by pmin< Packet16bf >(), pmin< Packet16h >(), pmin< PropagateNaN, Packet16f >(), and pmin< PropagateNumbers, Packet16f >().

◆ pmin< Packet16h >()

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pmin< Packet16h > ( const Packet16h a,
const Packet16h b 
)
2276  {
2278 }

References a, b, float2half(), half2float(), and pmin< Packet16f >().

◆ pmin< Packet16i >()

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pmin< Packet16i > ( const Packet16i a,
const Packet16i b 
)
553  {
554  return _mm512_min_epi32(b, a);
555 }

References a, and b.

◆ pmin< Packet16uc >()

1277  {
1278  return vec_min(a, b);
1279 }

References a, and b.

◆ pmin< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pmin< Packet2d > ( const Packet2d a,
const Packet2d b 
)
1244  {
1245  Packet2l aNaN = __lsx_vfcmp_cun_d(a, a);
1246  Packet2l aMinOrNaN = por<Packet2l>(__lsx_vfcmp_clt_d(a, b), aNaN);
1247  return (Packet2d)__lsx_vbitsel_v((__m128i)b, (__m128i)a, aMinOrNaN);
1248 }

References a, b, and por< Packet2l >().

Referenced by pmin< PropagateNaN, Packet2d >(), and pmin< PropagateNumbers, Packet2d >().

◆ pmin< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pmin< Packet2f > ( const Packet2f a,
const Packet2f b 
)
1432  {
1433  return vmin_f32(a, b);
1434 }

References a, and b.

Referenced by pmin< PropagateNaN, Packet2f >().

◆ pmin< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pmin< Packet2i > ( const Packet2i a,
const Packet2i b 
)
1506  {
1507  return vmin_s32(a, b);
1508 }

References a, and b.

◆ pmin< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pmin< Packet2l > ( const Packet2l a,
const Packet2l b 
)
1184  {
1185  return __lsx_vmin_d(a, b);
1186 }

References a, and b.

◆ pmin< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pmin< Packet2ui > ( const Packet2ui a,
const Packet2ui b 
)
1514  {
1515  return vmin_u32(a, b);
1516 }

References a, and b.

◆ pmin< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pmin< Packet2ul > ( const Packet2ul a,
const Packet2ul b 
)
1200  {
1201  return __lsx_vmin_du(a, b);
1202 }

References a, and b.

◆ pmin< Packet32h >()

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pmin< Packet32h > ( const Packet32h a,
const Packet32h b 
)
204  {
205  return _mm512_min_ph(a, b);
206 }

References a, and b.

◆ pmin< Packet4bf >()

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pmin< Packet4bf > ( const Packet4bf a,
const Packet4bf b 
)
4874  {
4876 }
EIGEN_STRONG_INLINE Packet4f pmin< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1250

References a, b, Bf16ToF32(), F32ToBf16(), and pmin< Packet4f >().

◆ pmin< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pmin< Packet4c > ( const Packet4c a,
const Packet4c b 
)
1464  {
1465  return vget_lane_s32(
1466  vreinterpret_s32_s8(vmin_s8(vreinterpret_s8_s32(vdup_n_s32(a)), vreinterpret_s8_s32(vdup_n_s32(b)))), 0);
1467 }

References a, and b.

◆ pmin< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pmin< Packet4d > ( const Packet4d a,
const Packet4d b 
)
1114  {
1115 #if EIGEN_GNUC_STRICT_LESS_THAN(6, 3, 0)
1116  // See pmin above
1117  Packet4d res;
1118  asm("vminpd %[a], %[b], %[res]" : [res] "=x"(res) : [a] "x"(a), [b] "x"(b));
1119  return res;
1120 #else
1121  // Arguments are swapped to match NaN propagation behavior of std::min.
1122  return _mm256_min_pd(b, a);
1123 #endif
1124 }

References a, b, and res.

Referenced by pmin< PropagateNaN, Packet4d >(), and pmin< PropagateNumbers, Packet4d >().

◆ pmin< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pmin< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1250  {
1251 #ifdef EIGEN_VECTORIZE_VSX
1252  // NOTE: about 10% slower than vec_min, but consistent with std::min and SSE regarding NaN
1253  Packet4f ret;
1254  __asm__("xvcmpgesp %x0,%x1,%x2\n\txxsel %x0,%x1,%x2,%x0" : "=&wa"(ret) : "wa"(a), "wa"(b));
1255  return ret;
1256 #else
1257  return vec_min(a, b);
1258 #endif
1259 }

References a, b, and ret.

Referenced by pmin< Packet4bf >(), pmin< Packet8bf >(), pmin< PropagateNaN, Packet4f >(), and pmin< PropagateNumbers, Packet4f >().

◆ pmin< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pmin< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1261  {
1262  return vec_min(a, b);
1263 }

References a, and b.

◆ pmin< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pmin< Packet4s > ( const Packet4s a,
const Packet4s b 
)
1490  {
1491  return vmin_s16(a, b);
1492 }

References a, and b.

◆ pmin< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pmin< Packet4uc > ( const Packet4uc a,
const Packet4uc b 
)
1477  {
1478  return vget_lane_u32(
1479  vreinterpret_u32_u8(vmin_u8(vreinterpret_u8_u32(vdup_n_u32(a)), vreinterpret_u8_u32(vdup_n_u32(b)))), 0);
1480 }

References a, and b.

◆ pmin< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pmin< Packet4ui > ( const Packet4ui a,
const Packet4ui b 
)
1196  {
1197  return __lsx_vmin_wu(a, b);
1198 }

References a, and b.

◆ pmin< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pmin< Packet4us > ( const Packet4us a,
const Packet4us b 
)
1498  {
1499  return vmin_u16(a, b);
1500 }

References a, and b.

◆ pmin< Packet8bf >()

◆ pmin< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pmin< Packet8c > ( const Packet8c a,
const Packet8c b 
)
1469  {
1470  return vmin_s8(a, b);
1471 }

References a, and b.

◆ pmin< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pmin< Packet8d > ( const Packet8d a,
const Packet8d b 
)
548  {
549  // Arguments are reversed to match NaN propagation behavior of std::min.
550  return _mm512_min_pd(b, a);
551 }

References a, and b.

Referenced by pmin< PropagateNaN, Packet8d >(), and pmin< PropagateNumbers, Packet8d >().

◆ pmin< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pmin< Packet8f > ( const Packet8f a,
const Packet8f b 
)
1099  {
1100 #if EIGEN_GNUC_STRICT_LESS_THAN(6, 3, 0)
1101  // There appears to be a bug in GCC, by which the optimizer may flip
1102  // the argument order in calls to _mm_min_ps/_mm_max_ps, so we have to
1103  // resort to inline ASM here. This is supposed to be fixed in gcc6.3,
1104  // see also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72867
1105  Packet8f res;
1106  asm("vminps %[a], %[b], %[res]" : [res] "=x"(res) : [a] "x"(a), [b] "x"(b));
1107  return res;
1108 #else
1109  // Arguments are swapped to match NaN propagation behavior of std::min.
1110  return _mm256_min_ps(b, a);
1111 #endif
1112 }

References a, b, and res.

Referenced by pmin< Packet8h >(), pmin< PropagateNaN, Packet8f >(), and pmin< PropagateNumbers, Packet8f >().

◆ pmin< Packet8h >()

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pmin< Packet8h > ( const Packet8h a,
const Packet8h b 
)
2294  {
2296 }
EIGEN_STRONG_INLINE Packet8f pmin< Packet8f >(const Packet8f &a, const Packet8f &b)
Definition: AVX/PacketMath.h:1099

References a, b, float2half(), half2float(), and pmin< Packet8f >().

◆ pmin< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pmin< Packet8i > ( const Packet8i a,
const Packet8i b 
)
1126  {
1127 #ifdef EIGEN_VECTORIZE_AVX2
1128  return _mm256_min_epi32(a, b);
1129 #else
1130  __m128i lo = _mm_min_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
1131  __m128i hi = _mm_min_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
1132  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1133 #endif
1134 }

References a, and b.

◆ pmin< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pmin< Packet8l > ( const Packet8l a,
const Packet8l b 
)
557  {
558  return _mm512_min_epi64(b, a);
559 }

References a, and b.

◆ pmin< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pmin< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1265  {
1266  return vec_min(a, b);
1267 }

References a, and b.

◆ pmin< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pmin< Packet8uc > ( const Packet8uc a,
const Packet8uc b 
)
1482  {
1483  return vmin_u8(a, b);
1484 }

References a, and b.

◆ pmin< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pmin< Packet8ui > ( const Packet8ui a,
const Packet8ui b 
)
1136  {
1137 #ifdef EIGEN_VECTORIZE_AVX2
1138  return _mm256_min_epu32(a, b);
1139 #else
1140  __m128i lo = _mm_min_epu32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
1141  __m128i hi = _mm_min_epu32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
1142  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
1143 #endif
1144 }

References a, and b.

◆ pmin< Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pmin< Packet8us > ( const Packet8us a,
const Packet8us b 
)
1269  {
1270  return vec_min(a, b);
1271 }

References a, and b.

◆ pmin< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pmin< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
436  {
437  return svmin_f32_x(svptrue_b32(), a, b);
438 }

References a, and b.

Referenced by pmin< PropagateNaN, PacketXf >().

◆ pmin< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pmin< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
128  {
129  return svmin_s32_x(svptrue_b32(), a, b);
130 }

References a, and b.

◆ pmin< PropagateNaN, Packet16f >()

◆ pmin< PropagateNaN, Packet2d >()

2729  {
2730  return pmin<Packet2d>(a, b);
2731 }
EIGEN_STRONG_INLINE Packet2d pmin< Packet2d >(const Packet2d &a, const Packet2d &b)
Definition: LSX/PacketMath.h:1244

References a, b, and pmin< Packet2d >().

◆ pmin< PropagateNaN, Packet2f >()

1459  {
1460  return pmin<Packet2f>(a, b);
1461 }
EIGEN_STRONG_INLINE Packet2f pmin< Packet2f >(const Packet2f &a, const Packet2f &b)
Definition: NEON/PacketMath.h:1432

References a, b, and pmin< Packet2f >().

◆ pmin< PropagateNaN, Packet4bf >()

4869  {
4871 }
EIGEN_STRONG_INLINE Packet4f pmin< PropagateNaN, Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: LSX/PacketMath.h:2695

References a, b, Bf16ToF32(), F32ToBf16(), and pmin< PropagateNaN, Packet4f >().

◆ pmin< PropagateNaN, Packet4d >()

1220  {
1222 }
EIGEN_STRONG_INLINE Packet4d pmin< Packet4d >(const Packet4d &a, const Packet4d &b)
Definition: AVX/PacketMath.h:1114

References a, b, pmin< Packet4d >(), and pminmax_propagate_nan().

◆ pmin< PropagateNaN, Packet4f >()

2695  {
2696  return pmin<Packet4f>(a, b);
2697 }

References a, b, and pmin< Packet4f >().

Referenced by pmin< PropagateNaN, Packet4bf >().

◆ pmin< PropagateNaN, Packet8d >()

602  {
604 }
EIGEN_STRONG_INLINE Packet8d pmin< Packet8d >(const Packet8d &a, const Packet8d &b)
Definition: AVX512/PacketMath.h:548

References a, b, pmin< Packet8d >(), and pminmax_propagate_nan().

◆ pmin< PropagateNaN, Packet8f >()

1216  {
1218 }

References a, b, pmin< Packet8f >(), and pminmax_propagate_nan().

◆ pmin< PropagateNaN, PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pmin< PropagateNaN, PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
441  {
442  return pmin<PacketXf>(a, b);
443 }
EIGEN_STRONG_INLINE PacketXf pmin< PacketXf >(const PacketXf &a, const PacketXf &b)
Definition: SVE/PacketMath.h:436

References a, b, and pmin< PacketXf >().

◆ pmin< PropagateNumbers, Packet16f >()

◆ pmin< PropagateNumbers, Packet2d >()

◆ pmin< PropagateNumbers, Packet4bf >()

4865  {
4867 }
EIGEN_STRONG_INLINE Packet4f pmin< PropagateNumbers, Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: SSE/PacketMath.h:1137

References a, b, Bf16ToF32(), F32ToBf16(), and pmin< PropagateNumbers, Packet4f >().

◆ pmin< PropagateNumbers, Packet4d >()

◆ pmin< PropagateNumbers, Packet4f >()

◆ pmin< PropagateNumbers, Packet8d >()

◆ pmin< PropagateNumbers, Packet8f >()

◆ pmin< PropagateNumbers, PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pmin< PropagateNumbers, PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
446  {
447  return svminnm_f32_x(svptrue_b32(), a, b);
448 }

References a, and b.

◆ pminmax_propagate_nan()

template<typename Packet , typename Op >
EIGEN_STRONG_INLINE Packet Eigen::internal::pminmax_propagate_nan ( const Packet a,
const Packet b,
Op  op 
)
1127  {
1128  // In this implementation, we take advantage of the fact that pmin/pmax for SSE
1129  // always return a if either a or b is NaN.
1130  Packet not_nan_mask_a = pcmp_eq(a, a);
1131  Packet m = op(b, a);
1132  return pselect<Packet>(not_nan_mask_a, m, a);
1133 }

References a, b, m, op, and pcmp_eq().

Referenced by pmax< PropagateNaN, Packet16f >(), pmax< PropagateNaN, Packet4d >(), pmax< PropagateNaN, Packet8d >(), pmax< PropagateNaN, Packet8f >(), pmin< PropagateNaN, Packet16f >(), pmin< PropagateNaN, Packet4d >(), pmin< PropagateNaN, Packet8d >(), and pmin< PropagateNaN, Packet8f >().

◆ pminmax_propagate_numbers()

template<typename Packet , typename Op >
EIGEN_STRONG_INLINE Packet Eigen::internal::pminmax_propagate_numbers ( const Packet a,
const Packet b,
Op  op 
)
1118  {
1119  // In this implementation, we take advantage of the fact that pmin/pmax for SSE
1120  // always return a if either a or b is NaN.
1121  Packet not_nan_mask_a = pcmp_eq(a, a);
1122  Packet m = op(a, b);
1123  return pselect<Packet>(not_nan_mask_a, m, b);
1124 }

References a, b, m, op, and pcmp_eq().

Referenced by pmax< PropagateNumbers, Packet16f >(), pmax< PropagateNumbers, Packet2d >(), pmax< PropagateNumbers, Packet4d >(), pmax< PropagateNumbers, Packet4f >(), pmax< PropagateNumbers, Packet8d >(), pmax< PropagateNumbers, Packet8f >(), pmin< PropagateNumbers, Packet16f >(), pmin< PropagateNumbers, Packet2d >(), pmin< PropagateNumbers, Packet4d >(), pmin< PropagateNumbers, Packet4f >(), pmin< PropagateNumbers, Packet8d >(), and pmin< PropagateNumbers, Packet8f >().

◆ pmsub() [1/7]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pmsub ( const Packet a,
const Packet b,
const Packet c 
)
inline
Returns
a * b - c (coeff-wise)
1306  {
1307  return psub(pmul(a, b), c);
1308 }

References a, b, calibrate::c, pmul(), and psub().

◆ pmsub() [2/7]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pmsub ( const Packet16c a,
const Packet16c b,
const Packet16c c 
)
2629  {
2630  return __lsx_vmadd_b(pnegate(c), a, b);
2631 }
EIGEN_STRONG_INLINE Packet2l pnegate(const Packet2l &a)
Definition: LSX/PacketMath.h:691

References a, b, calibrate::c, and pnegate().

◆ pmsub() [3/7]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pmsub ( const Packet2d a,
const Packet2d b,
const Packet2d c 
)
823  {
824  return __lsx_vfmsub_d(a, b, c);
825 }

References a, b, and calibrate::c.

◆ pmsub() [4/7]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pmsub ( const Packet2l a,
const Packet2l b,
const Packet2l c 
)
2641  {
2642  return __lsx_vmadd_d(pnegate(c), a, b);
2643 }

References a, b, calibrate::c, and pnegate().

◆ pmsub() [5/7]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pmsub ( const Packet4f a,
const Packet4f b,
const Packet4f c 
)
819  {
820  return __lsx_vfmsub_s(a, b, c);
821 }

References a, b, and calibrate::c.

Referenced by packetmath().

◆ pmsub() [6/7]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pmsub ( const Packet4i a,
const Packet4i b,
const Packet4i c 
)
2637  {
2638  return __lsx_vmadd_w(pnegate(c), a, b);
2639 }

References a, b, calibrate::c, and pnegate().

◆ pmsub() [7/7]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pmsub ( const Packet8s a,
const Packet8s b,
const Packet8s c 
)
2633  {
2634  return __lsx_vmadd_h(pnegate(c), a, b);
2635 }

References a, b, calibrate::c, and pnegate().

◆ pmul() [1/8]

template<>
EIGEN_DEVICE_FUNC bool Eigen::internal::pmul ( const bool a,
const bool b 
)
inline
362  {
363  return a && b;
364 }

References a, and b.

◆ pmul() [2/8]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pmul ( const Packet a,
const Packet b 
)
inline
Returns
a * b (coeff-wise)
357  {
358  return a * b;
359 }

References a, and b.

◆ pmul() [3/8]

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pmul ( const Packet1cd a,
const Packet1cd b 
)
286  {
287  __m128d tmp1 = _mm_mul_pd(_mm_unpackhi_pd(a.v, a.v), vec2d_swizzle1(b.v, 1, 0));
288 #ifdef EIGEN_VECTORIZE_SSE3
289  __m128d tmp2 = _mm_movedup_pd(a.v);
290 #else
291  __m128d tmp2 = _mm_unpacklo_pd(a.v, a.v);
292 #endif
293 #ifdef EIGEN_VECTORIZE_FMA
294  __m128d result = _mm_fmaddsub_pd(tmp2, b.v, tmp1);
295 #else
296 #ifdef EIGEN_VECTORIZE_SSE3
297  __m128d result = _mm_addsub_pd(_mm_mul_pd(tmp2, b.v), tmp1);
298 #else
299  const __m128d mask = _mm_setr_pd(-0.0, 0.0);
300  __m128d result = _mm_add_pd(_mm_mul_pd(tmp2, b.v), _mm_xor_pd(tmp1, mask));
301 #endif
302 #endif
303  return Packet1cd(result);
304 }

References a, b, and vec2d_swizzle1.

◆ pmul() [4/8]

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::pmul ( const Packet2cd a,
const Packet2cd b 
)
290  {
291  __m256d tmp1 = _mm256_mul_pd(_mm256_permute_pd(a.v, 0xF), _mm256_permute_pd(b.v, 0x5));
292  __m256d tmp2 = _mm256_movedup_pd(a.v);
293 #ifdef EIGEN_VECTORIZE_FMA
294  __m256d result = _mm256_fmaddsub_pd(tmp2, b.v, tmp1);
295 #else
296  __m256d result = _mm256_addsub_pd(_mm256_mul_pd(tmp2, b.v), tmp1);
297 #endif
298  return Packet2cd(result);
299 }

References a, and b.

◆ pmul() [5/8]

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pmul ( const Packet2cf a,
const Packet2cf b 
)
92  {
93 #ifdef EIGEN_VECTORIZE_SSE3
94  __m128 tmp1 = _mm_mul_ps(_mm_movehdup_ps(a.v), vec4f_swizzle1(b.v, 1, 0, 3, 2));
95  __m128 tmp2 = _mm_moveldup_ps(a.v);
96 #else
97  __m128 tmp1 = _mm_mul_ps(vec4f_swizzle1(a.v, 1, 1, 3, 3), vec4f_swizzle1(b.v, 1, 0, 3, 2));
98  __m128 tmp2 = vec4f_swizzle1(a.v, 0, 0, 2, 2);
99 #endif
100 #ifdef EIGEN_VECTORIZE_FMA
101  __m128 result = _mm_fmaddsub_ps(tmp2, b.v, tmp1);
102 #else
103 #ifdef EIGEN_VECTORIZE_SSE3
104  __m128 result = _mm_addsub_ps(_mm_mul_ps(tmp2, b.v), tmp1);
105 #else
106  const __m128 mask = _mm_setr_ps(-0.0f, 0.0f, -0.0f, 0.0f);
107  __m128 result = _mm_add_ps(_mm_mul_ps(tmp2, b.v), _mm_xor_ps(tmp1, mask));
108 #endif
109 #endif
110  return Packet2cf(result);
111 }

References a, b, and vec4f_swizzle1().

◆ pmul() [6/8]

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::pmul ( const Packet4cf a,
const Packet4cf b 
)
88  {
89  __m256 tmp1 = _mm256_mul_ps(_mm256_movehdup_ps(a.v), _mm256_permute_ps(b.v, _MM_SHUFFLE(2, 3, 0, 1)));
90  __m256 tmp2 = _mm256_moveldup_ps(a.v);
91 #ifdef EIGEN_VECTORIZE_FMA
92  __m256 result = _mm256_fmaddsub_ps(tmp2, b.v, tmp1);
93 #else
94  __m256 result = _mm256_addsub_ps(_mm256_mul_ps(tmp2, b.v), tmp1);
95 #endif
96  return Packet4cf(result);
97 }

References a, and b.

Referenced by Eigen::internal::mul_assign_op< DstScalar, SrcScalar >::assignPacket(), Eigen::internal::scalar_inner_product_op< Scalar, Scalar, Conj >::coeff(), erfc_double_large(), generic_exp2(), generic_expm1(), generic_log1p(), generic_ndtri_gt_exp_neg_two(), generic_ndtri_lt_exp_neg_two(), generic_pow(), generic_pow_impl(), Eigen::internal::unary_pow::int_pow(), Eigen::internal::gebp_traits< std::complex< RealScalar >, RealScalar, ConjLhs_, false, Arch, PacketSize_ >::madd_impl(), Eigen::internal::gebp_traits< RealScalar, std::complex< RealScalar >, false, ConjRhs_, Arch, PacketSize_ >::madd_impl(), Eigen::internal::Packet1cd::operator*=(), Eigen::internal::scalar_inner_product_op< Scalar, Scalar, Conj >::packet(), Eigen::internal::diagonal_product_evaluator_base< MatrixType, DiagonalType, Derived, ProductOrder >::packet_impl(), packetmath(), Eigen::internal::scalar_logistic_op< float >::packetOp(), Eigen::internal::scalar_abs2_op< Scalar >::packetOp(), Eigen::internal::squared_norm_functor< Scalar, IsComplex >::packetOp(), Eigen::internal::scalar_square_op< Scalar >::packetOp(), Eigen::internal::scalar_cube_op< Scalar >::packetOp(), Eigen::internal::scalar_product_op< LhsScalar, RhsScalar >::packetOp(), Eigen::internal::linspaced_op_impl< Scalar, false >::packetOp(), pacos_float(), pasin_float(), patanh_double(), patanh_float(), pblueNorm(), pdiv_complex(), pdiv_float_common(), pexp< Packet2d >(), pexp< Packet4f >(), pexp_complex(), pexp_double(), pexp_float(), pfrexp_generic(), phypot_complex(), pldexp< Packet4d >(), pldexp< Packet8d >(), pldexp_fast(), pldexp_fast< Packet2d >(), pldexp_fast< Packet4d >(), pldexp_generic(), plog2(), plog< Packet4f >(), plog_impl_double(), plog_impl_float(), pmadd(), pmsub(), Eigen::internal::conj_helper< Packet, Packet, ConjLhs, ConjRhs >::pmul(), Eigen::internal::conj_helper< Packet, Packet, true, true >::pmul(), pmul< Packet16h >(), pmul< Packet8h >(), pnmadd(), predux_mul< Packet16f >(), predux_mul< Packet2cd >(), predux_mul< Packet4cd >(), predux_mul< Packet4cf >(), predux_mul< Packet4f >(), predux_mul< Packet8cf >(), predux_mul< Packet8d >(), psincos_double(), psincos_float(), psincos_inner_msa_float(), psqrt_complex(), psqrt_float_common(), ptanh< Packet4f >(), ptanh_double(), ptanh_float(), Eigen::internal::compute_inverse_size4< Architecture::Target, float, MatrixType, ResultType >::run(), Eigen::internal::compute_inverse_size4< Architecture::Target, double, MatrixType, ResultType >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t< NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&unpacket_traits< Packet >::vectorizable > >::run(), Eigen::internal::generic_reciprocal_newton_step< Packet, Steps >::run(), Eigen::internal::generic_rsqrt_newton_step< Packet, Steps >::run(), Eigen::internal::generic_sqrt_newton_step< Packet, Steps >::run(), Eigen::internal::patan_reduced< Scalar >::run(), Eigen::internal::quat_product< Architecture::Target, Derived, OtherDerived, float >::run(), Eigen::internal::generic_i0e< T, float >::run(), Eigen::internal::generic_i0e< T, double >::run(), Eigen::internal::generic_i0< T, ScalarType >::run(), Eigen::internal::generic_i1e< T, float >::run(), Eigen::internal::generic_i1e< T, double >::run(), Eigen::internal::generic_i1< T, ScalarType >::run(), Eigen::internal::generic_k0e< T, float >::run(), Eigen::internal::generic_k0e< T, double >::run(), Eigen::internal::generic_k0< T, float >::run(), Eigen::internal::generic_k0< T, double >::run(), Eigen::internal::generic_k1e< T, float >::run(), Eigen::internal::generic_k1e< T, double >::run(), Eigen::internal::generic_k1< T, float >::run(), Eigen::internal::generic_k1< T, double >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_y0< T, float >::run(), Eigen::internal::generic_y0< T, double >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), Eigen::internal::generic_y1< T, float >::run(), Eigen::internal::generic_y1< T, double >::run(), Eigen::internal::generic_fast_erf< Scalar >::run(), Eigen::internal::generic_fast_erfc< Scalar >::run(), Eigen::internal::cross3_impl< Architecture::Target, VectorLhs, VectorRhs, float, true >::run(), Eigen::internal::etor_product_packet_impl< RowMajor, 1, Lhs, Rhs, Packet, LoadMode >::run(), Eigen::internal::etor_product_packet_impl< ColMajor, 1, Lhs, Rhs, Packet, LoadMode >::run(), Eigen::internal::pchebevl< Packet, N >::run(), Eigen::internal::gemm_class< Scalar, is_unit_inc >::scale_load_c(), twoprod(), and veltkamp_splitting().

◆ pmul() [7/8]

template<>
std::complex<double> Eigen::internal::pmul ( const std::complex< double > &  a,
const std::complex< double > &  b 
)
inline
1396  {
1397  return std::complex<double>(a.real() * b.real() - a.imag() * b.imag(), a.imag() * b.real() + a.real() * b.imag());
1398 }

References a, and b.

◆ pmul() [8/8]

template<>
std::complex<float> Eigen::internal::pmul ( const std::complex< float > &  a,
const std::complex< float > &  b 
)
inline
1391  {
1392  return std::complex<float>(a.real() * b.real() - a.imag() * b.imag(), a.imag() * b.real() + a.real() * b.imag());
1393 }

References a, and b.

◆ pmul< Packet16b >()

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::pmul< Packet16b > ( const Packet16b a,
const Packet16b b 
)
666  {
667  return _mm_and_si128(a, b);
668 }

References a, and b.

◆ pmul< Packet16bf >()

2891  {
2893 }
EIGEN_STRONG_INLINE Packet16f pmul< Packet16f >(const Packet16f &a, const Packet16f &b)
Definition: AVX512/PacketMath.h:443

References a, b, Bf16ToF32(), F32ToBf16(), and pmul< Packet16f >().

◆ pmul< Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pmul< Packet16c > ( const Packet16c a,
const Packet16c b 
)
1178  {
1179  return vec_mul(a, b);
1180 }

References a, and b.

◆ pmul< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pmul< Packet16f > ( const Packet16f a,
const Packet16f b 
)
443  {
444  return _mm512_mul_ps(a, b);
445 }

References a, and b.

Referenced by pmul< Packet16bf >().

◆ pmul< Packet16h >()

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pmul< Packet16h > ( const Packet16h a,
const Packet16h b 
)
2390  {
2391  Packet16f af = half2float(a);
2392  Packet16f bf = half2float(b);
2393  Packet16f rf = pmul(af, bf);
2394  return float2half(rf);
2395 }

References a, b, float2half(), half2float(), and pmul().

◆ pmul< Packet16i >()

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pmul< Packet16i > ( const Packet16i a,
const Packet16i b 
)
451  {
452  return _mm512_mullo_epi32(a, b);
453 }

References a, and b.

◆ pmul< Packet16uc >()

1182  {
1183  return vec_mul(a, b);
1184 }

References a, and b.

◆ pmul< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pmul< Packet1cd > ( const Packet1cd a,
const Packet1cd b 
)
327  {
328  Packet2d tmp_real = __lsx_vfmul_d(a.v, b.v);
329  Packet2d real = __lsx_vfsub_d(tmp_real, preverse(tmp_real));
330 
331  Packet2d tmp_imag = __lsx_vfmul_d(preverse(a.v), b.v);
332  Packet2d imag = (__m128d)__lsx_vfadd_d((__m128d)tmp_imag, preverse(tmp_imag));
333  Packet1cd res;
334  res.v = (__m128d)__lsx_vilvl_d((__m128i)imag, (__m128i)real);
335  return res;
336 }
Definition: main.h:116
Definition: main.h:115

References a, b, Eigen::imag(), preverse(), and res.

◆ pmul< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pmul< Packet1cf > ( const Packet1cf a,
const Packet1cf b 
)
184  {
185  Packet2f v1, v2;
186 
187  // Get the real values of a | a1_re | a1_re |
188  v1 = vdup_lane_f32(a.v, 0);
189  // Get the imag values of a | a1_im | a1_im |
190  v2 = vdup_lane_f32(a.v, 1);
191  // Multiply the real a with b
192  v1 = vmul_f32(v1, b.v);
193  // Multiply the imag a with b
194  v2 = vmul_f32(v2, b.v);
195  // Conjugate v2
196  v2 = vreinterpret_f32_u32(veor_u32(vreinterpret_u32_f32(v2), p2ui_CONJ_XOR()));
197  // Swap real/imag elements in v2.
198  v2 = vrev64_f32(v2);
199  // Add and return the result
200  return Packet1cf(vadd_f32(v1, v2));
201 }
Map< RowVectorXf > v2(M2.data(), M2.size())
M1<< 1, 2, 3, 4, 5, 6, 7, 8, 9;Map< RowVectorXf > v1(M1.data(), M1.size())

References a, b, p2ui_CONJ_XOR(), v1(), and v2().

◆ pmul< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pmul< Packet2cf > ( const Packet2cf a,
const Packet2cf b 
)
95  {
96  Packet4f part0_tmp = (Packet4f)__lsx_vfmul_s(a.v, b.v);
97  Packet4f part0 = __lsx_vfsub_s(part0_tmp, (__m128)__lsx_vshuf4i_w(part0_tmp, 0x31));
98  Packet4f part1_tmp = __lsx_vfmul_s((__m128)__lsx_vshuf4i_w(a.v, 0xb1), b.v);
99  Packet4f part1 = __lsx_vfadd_s(part1_tmp, (__m128)__lsx_vshuf4i_w(part1_tmp, 0x31));
100  Packet2cf res;
101  res.v = (Packet4f)__lsx_vpackev_w((__m128i)part1, (__m128i)part0);
102  return res;
103 }

References a, b, and res.

Referenced by predux_mul< Packet2cf >().

◆ pmul< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pmul< Packet2d > ( const Packet2d a,
const Packet2d b 
)
741  {
742  return __lsx_vfmul_d(a, b);
743 }

References a, and b.

Referenced by Eigen::internal::Packet1cd::operator/=().

◆ pmul< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pmul< Packet2f > ( const Packet2f a,
const Packet2f b 
)
1123  {
1124  return vmul_f32(a, b);
1125 }

References a, and b.

◆ pmul< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pmul< Packet2i > ( const Packet2i a,
const Packet2i b 
)
1173  {
1174  return vmul_s32(a, b);
1175 }

References a, and b.

◆ pmul< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pmul< Packet2l > ( const Packet2l a,
const Packet2l b 
)
757  {
758  return __lsx_vmul_d(a, b);
759 }

References a, and b.

◆ pmul< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pmul< Packet2ui > ( const Packet2ui a,
const Packet2ui b 
)
1181  {
1182  return vmul_u32(a, b);
1183 }

References a, and b.

◆ pmul< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pmul< Packet2ul > ( const Packet2ul a,
const Packet2ul b 
)
773  {
774  return __lsx_vmul_d(a, b);
775 }

References a, and b.

◆ pmul< Packet32h >()

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pmul< Packet32h > ( const Packet32h a,
const Packet32h b 
)
327  {
328  return _mm512_mul_ph(a, b);
329 }

References a, and b.

◆ pmul< Packet4bf >()

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pmul< Packet4bf > ( const Packet4bf a,
const Packet4bf b 
)
4963  {
4965 }
EIGEN_STRONG_INLINE Packet4f pmul< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1162

References a, b, Bf16ToF32(), F32ToBf16(), and pmul< Packet4f >().

◆ pmul< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pmul< Packet4c > ( const Packet4c a,
const Packet4c b 
)
1131  {
1132  return vget_lane_s32(
1133  vreinterpret_s32_s8(vmul_s8(vreinterpret_s8_s32(vdup_n_s32(a)), vreinterpret_s8_s32(vdup_n_s32(b)))), 0);
1134 }

References a, and b.

◆ pmul< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::pmul< Packet4cd > ( const Packet4cd a,
const Packet4cd b 
)
271  {
272  __m512d tmp1 = _mm512_shuffle_pd(a.v, a.v, 0x0);
273  __m512d tmp2 = _mm512_shuffle_pd(a.v, a.v, 0xFF);
274  __m512d tmp3 = _mm512_shuffle_pd(b.v, b.v, 0x55);
275  __m512d odd = _mm512_mul_pd(tmp2, tmp3);
276  return Packet4cd(_mm512_fmaddsub_pd(tmp1, b.v, odd));
277 }

References a, and b.

◆ pmul< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pmul< Packet4d > ( const Packet4d a,
const Packet4d b 
)
931  {
932  return _mm256_mul_pd(a, b);
933 }

References a, and b.

◆ pmul< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pmul< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1162  {
1163  return vec_madd(a, b, p4f_MZERO);
1164 }

References a, b, and p4f_MZERO.

Referenced by pmul< Packet4bf >(), and pmul< Packet8bf >().

◆ pmul< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pmul< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1166  {
1167  return a * b;
1168 }

References a, and b.

◆ pmul< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pmul< Packet4s > ( const Packet4s a,
const Packet4s b 
)
1157  {
1158  return vmul_s16(a, b);
1159 }

References a, and b.

◆ pmul< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pmul< Packet4uc > ( const Packet4uc a,
const Packet4uc b 
)
1144  {
1145  return vget_lane_u32(
1146  vreinterpret_u32_u8(vmul_u8(vreinterpret_u8_u32(vdup_n_u32(a)), vreinterpret_u8_u32(vdup_n_u32(b)))), 0);
1147 }

References a, and b.

◆ pmul< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pmul< Packet4ui > ( const Packet4ui a,
const Packet4ui b 
)
769  {
770  return __lsx_vmul_w(a, b);
771 }

References a, and b.

◆ pmul< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pmul< Packet4us > ( const Packet4us a,
const Packet4us b 
)
1165  {
1166  return vmul_u16(a, b);
1167 }

References a, and b.

◆ pmul< Packet8bf >()

◆ pmul< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pmul< Packet8c > ( const Packet8c a,
const Packet8c b 
)
1136  {
1137  return vmul_s8(a, b);
1138 }

References a, and b.

◆ pmul< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::pmul< Packet8cf > ( const Packet8cf a,
const Packet8cf b 
)
91  {
92  __m512 tmp2 = _mm512_mul_ps(_mm512_movehdup_ps(a.v), _mm512_permute_ps(b.v, _MM_SHUFFLE(2, 3, 0, 1)));
93  return Packet8cf(_mm512_fmaddsub_ps(_mm512_moveldup_ps(a.v), b.v, tmp2));
94 }

References a, and b.

◆ pmul< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pmul< Packet8d > ( const Packet8d a,
const Packet8d b 
)
447  {
448  return _mm512_mul_pd(a, b);
449 }

References a, and b.

◆ pmul< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pmul< Packet8f > ( const Packet8f a,
const Packet8f b 
)
927  {
928  return _mm256_mul_ps(a, b);
929 }

References a, and b.

◆ pmul< Packet8h >()

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pmul< Packet8h > ( const Packet8h a,
const Packet8h b 
)
2406  {
2407  Packet8f af = half2float(a);
2408  Packet8f bf = half2float(b);
2409  Packet8f rf = pmul(af, bf);
2410  return float2half(rf);
2411 }

References a, b, float2half(), half2float(), and pmul().

◆ pmul< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pmul< Packet8i > ( const Packet8i a,
const Packet8i b 
)
935  {
936 #ifdef EIGEN_VECTORIZE_AVX2
937  return _mm256_mullo_epi32(a, b);
938 #else
939  const __m128i lo = _mm_mullo_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
940  const __m128i hi = _mm_mullo_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
941  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
942 #endif
943 }

References a, and b.

◆ pmul< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pmul< Packet8l > ( const Packet8l a,
const Packet8l b 
)
455  {
456 #ifdef EIGEN_VECTORIZE_AVX512DQ
457  return _mm512_mullo_epi64(a, b);
458 #else
459  return _mm512_mullox_epi64(a, b);
460 #endif
461 }

References a, and b.

◆ pmul< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pmul< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1170  {
1171  return vec_mul(a, b);
1172 }

References a, and b.

◆ pmul< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pmul< Packet8uc > ( const Packet8uc a,
const Packet8uc b 
)
1149  {
1150  return vmul_u8(a, b);
1151 }

References a, and b.

◆ pmul< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pmul< Packet8ui > ( const Packet8ui a,
const Packet8ui b 
)
945  {
946 #ifdef EIGEN_VECTORIZE_AVX2
947  return _mm256_mullo_epi32(a, b);
948 #else
949  const __m128i lo = _mm_mullo_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
950  const __m128i hi = _mm_mullo_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
951  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
952 #endif
953 }

References a, and b.

◆ pmul< Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pmul< Packet8us > ( const Packet8us a,
const Packet8us b 
)
1174  {
1175  return vec_mul(a, b);
1176 }

References a, and b.

◆ pmul< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pmul< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
421  {
422  return svmul_f32_x(svptrue_b32(), a, b);
423 }

References a, and b.

◆ pmul< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pmul< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
113  {
114  return svmul_s32_x(svptrue_b32(), a, b);
115 }

References a, and b.

◆ pndtri()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pndtri ( const Packet a)
Returns
the ndtri(a) (coeff-wise)
64  {
65  typedef typename unpacket_traits<Packet>::type ScalarType;
67  return generic_ndtri<Packet, ScalarType>(a);
68 }
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T generic_ndtri(const T &a)
Definition: SpecialFunctionsImpl.h:711

References a, and generic_ndtri().

Referenced by packetmath_real(), and Eigen::internal::scalar_ndtri_op< Scalar >::packetOp().

◆ pnegate() [1/32]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pnegate ( const Packet a)
inline
Returns
-a (coeff-wise)
343  {
344  EIGEN_STATIC_ASSERT((!is_same<typename unpacket_traits<Packet>::type, bool>::value),
345  NEGATE IS NOT DEFINED FOR BOOLEAN TYPES)
346  return numext::negate(a);
347 }
T negate(const T &x)
Definition: packetmath_test_shared.h:26

References a, EIGEN_STATIC_ASSERT, Eigen::test::negate(), and Eigen::value.

◆ pnegate() [2/32]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pnegate ( const Packet16bf a)
2864  {
2865  Packet16bf sign_mask = _mm256_set1_epi16(static_cast<unsigned short>(0x8000));
2866  return _mm256_xor_si256(a, sign_mask);
2867 }

References a.

◆ pnegate() [3/32]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pnegate ( const Packet16c a)
1128  {
1129 #ifdef __POWER8_VECTOR__
1130  return vec_neg(a);
1131 #else
1132  return reinterpret_cast<Packet16c>(p4i_ZERO) - a;
1133 #endif
1134 }

References a.

◆ pnegate() [4/32]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pnegate ( const Packet16f a)
400  {
401  // NOTE: MSVC seems to struggle with _mm512_set1_epi32, leading to random results.
402  // The intel docs give it a relatively high latency as well, so we're probably
403  // better off with using _mm512_set_epi32 directly anyways.
404  const __m512i mask =
405  _mm512_set_epi32(0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000,
406  0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000, 0x80000000);
407  return _mm512_castsi512_ps(_mm512_xor_epi32(_mm512_castps_si512(a), mask));
408 }

References a.

◆ pnegate() [5/32]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pnegate ( const Packet16h a)
2367  {
2368  Packet16h sign_mask = _mm256_set1_epi16(static_cast<unsigned short>(0x8000));
2369  return _mm256_xor_si256(a, sign_mask);
2370 }

References a.

◆ pnegate() [6/32]

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pnegate ( const Packet16i a)
417  {
418  return _mm512_sub_epi32(_mm512_setzero_si512(), a);
419 }

References a.

◆ pnegate() [7/32]

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pnegate ( const Packet1cd a)
313  {
314  return Packet1cd(pnegate(Packet2d(a.v)));
315 }
EIGEN_STRONG_INLINE Packet1cd pnegate(const Packet1cd &a)
Definition: LSX/Complex.h:313

References a, and pnegate().

◆ pnegate() [8/32]

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pnegate ( const Packet1cf a)
150  {
151  return Packet1cf(pnegate<Packet2f>(a.v));
152 }

References a.

◆ pnegate() [9/32]

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::pnegate ( const Packet2cd a)
280  {
281  return Packet2cd(pnegate(a.v));
282 }
EIGEN_STRONG_INLINE Packet2cd pnegate(const Packet2cd &a)
Definition: AVX/Complex.h:280

References a, and pnegate().

◆ pnegate() [10/32]

◆ pnegate() [11/32]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pnegate ( const Packet2d a)
673  {
674  Packet2d mask =
675  make_packet2d(numext::bit_cast<double>(0x8000000000000000), numext::bit_cast<double>(0x8000000000000000));
676  return (Packet2d)__lsx_vxor_v(numext::bit_cast<__m128i>(mask), numext::bit_cast<__m128i>(a));
677 }

References a, and make_packet2d().

◆ pnegate() [12/32]

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pnegate ( const Packet2f a)
1005  {
1006  return vneg_f32(a);
1007 }

References a.

◆ pnegate() [13/32]

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pnegate ( const Packet2i a)
1033  {
1034  return vneg_s32(a);
1035 }

References a.

◆ pnegate() [14/32]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pnegate ( const Packet2l a)
691  {
692  return __lsx_vneg_d(a);
693 }

References a.

◆ pnegate() [15/32]

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pnegate ( const Packet4c a)
1013  {
1014  return vget_lane_s32(vreinterpret_s32_s8(vneg_s8(vreinterpret_s8_s32(vdup_n_s32(a)))), 0);
1015 }

References a.

◆ pnegate() [16/32]

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::pnegate ( const Packet4cd a)
260  {
261  return Packet4cd(pnegate(a.v));
262 }
EIGEN_STRONG_INLINE Packet4cd pnegate(const Packet4cd &a)
Definition: AVX512/Complex.h:260

References a, and pnegate().

◆ pnegate() [17/32]

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::pnegate ( const Packet4cf a)
77  {
78  return Packet4cf(pnegate(a.v));
79 }

References a, and pnegate().

◆ pnegate() [18/32]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pnegate ( const Packet4d a)
904  {
905  const Packet4d mask = _mm256_castsi256_pd(_mm256_set1_epi64x(0x8000000000000000ULL));
906  return _mm256_xor_pd(a, mask);
907 }

References a.

◆ pnegate() [19/32]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pnegate ( const Packet4f a)
1120  {
1121 #ifdef __POWER8_VECTOR__
1122  return vec_neg(a);
1123 #else
1124  return vec_xor(a, p4f_MZERO);
1125 #endif
1126 }

References a, and p4f_MZERO.

◆ pnegate() [20/32]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pnegate ( const Packet4i a)
1144  {
1145 #ifdef __POWER8_VECTOR__
1146  return vec_neg(a);
1147 #else
1148  return p4i_ZERO - a;
1149 #endif
1150 }

References a.

◆ pnegate() [21/32]

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pnegate ( const Packet4s a)
1025  {
1026  return vneg_s16(a);
1027 }

References a.

◆ pnegate() [22/32]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pnegate ( const Packet8bf a)
2763  {
2764  Packet8bf sign_mask = _mm_set1_epi16(static_cast<numext::uint16_t>(0x8000));
2765  return _mm_xor_si128(a, sign_mask);
2766 }

References a.

◆ pnegate() [23/32]

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pnegate ( const Packet8c a)
1017  {
1018  return vneg_s8(a);
1019 }

References a.

◆ pnegate() [24/32]

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::pnegate ( const Packet8cf a)
79  {
80  return Packet8cf(pnegate(a.v));
81 }

References a, and pnegate().

◆ pnegate() [25/32]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pnegate ( const Packet8d a)
410  {
411  const __m512i mask =
412  _mm512_set_epi64(0x8000000000000000ULL, 0x8000000000000000ULL, 0x8000000000000000ULL, 0x8000000000000000ULL,
413  0x8000000000000000ULL, 0x8000000000000000ULL, 0x8000000000000000ULL, 0x8000000000000000ULL);
414  return _mm512_castsi512_pd(_mm512_xor_epi64(_mm512_castpd_si512(a), mask));
415 }

References a.

◆ pnegate() [26/32]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pnegate ( const Packet8f a)
899  {
900  const Packet8f mask = _mm256_castsi256_ps(_mm256_set1_epi32(0x80000000));
901  return _mm256_xor_ps(a, mask);
902 }

References a.

◆ pnegate() [27/32]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pnegate ( const Packet8h a)
2383  {
2384  Packet8h sign_mask = _mm_set1_epi16(static_cast<numext::uint16_t>(0x8000));
2385  return _mm_xor_si128(a, sign_mask);
2386 }

References a.

◆ pnegate() [28/32]

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pnegate ( const Packet8i a)
909  {
910  return psub(pzero(a), a);
911 }
EIGEN_STRONG_INLINE Packet8ui pzero(const Packet8ui &)
Definition: AVX/PacketMath.h:786

References a, psub(), and pzero().

◆ pnegate() [29/32]

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pnegate ( const Packet8l a)
421  {
422  return _mm512_sub_epi64(_mm512_setzero_si512(), a);
423 }

References a.

◆ pnegate() [30/32]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pnegate ( const Packet8s a)
1136  {
1137 #ifdef __POWER8_VECTOR__
1138  return vec_neg(a);
1139 #else
1140  return reinterpret_cast<Packet8s>(p4i_ZERO) - a;
1141 #endif
1142 }

References a.

◆ pnegate() [31/32]

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pnegate ( const PacketXf &  a)
411  {
412  return svneg_f32_x(svptrue_b32(), a);
413 }

References a.

◆ pnegate() [32/32]

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pnegate ( const PacketXi &  a)
103  {
104  return svneg_s32_x(svptrue_b32(), a);
105 }

References a.

◆ pnegate< Packet32h >()

516  {
517  return psub(pzero(a), a);
518 }
EIGEN_STRONG_INLINE Packet32h pzero(const Packet32h &)
Definition: PacketMathFP16.h:117

References a, psub(), and pzero().

◆ pnegate< Packet4bf >()

5037  {
5038  return Packet4bf(pxor<Packet4us>(Packet4us(a), pset1<Packet4us>(static_cast<uint16_t>(0x8000))));
5039 }
EIGEN_STRONG_INLINE Packet4us pxor< Packet4us >(const Packet4us &a, const Packet4us &b)
Definition: NEON/PacketMath.h:2085

References a, pset1< Packet4us >(), and pxor< Packet4us >().

◆ pnegate< Packet8bf >()

2298  {
2299  EIGEN_DECLARE_CONST_FAST_Packet8us(neg_mask, 0x8000);
2300  return pxor<Packet8us>(p8us_neg_mask, a);
2301 }
EIGEN_STRONG_INLINE Packet8us pxor< Packet8us >(const Packet8us &a, const Packet8us &b)
Definition: AltiVec/PacketMath.h:1456

References a, EIGEN_DECLARE_CONST_FAST_Packet8us(), and pxor< Packet8us >().

◆ pnmadd() [1/7]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pnmadd ( const Packet a,
const Packet b,
const Packet c 
)
inline
Returns
-(a * b) + c (coeff-wise)
1312  {
1313  return psub(c, pmul(a, b));
1314 }

References a, b, calibrate::c, pmul(), and psub().

◆ pnmadd() [2/7]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pnmadd ( const Packet16c a,
const Packet16c b,
const Packet16c c 
)
2646  {
2647  return __lsx_vmsub_b(c, a, b);
2648 }

References a, b, and calibrate::c.

◆ pnmadd() [3/7]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pnmadd ( const Packet2d a,
const Packet2d b,
const Packet2d c 
)
831  {
832  return __lsx_vfnmsub_d(a, b, c);
833 }

References a, b, and calibrate::c.

◆ pnmadd() [4/7]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pnmadd ( const Packet2l a,
const Packet2l b,
const Packet2l c 
)
2658  {
2659  return __lsx_vmsub_d(c, a, b);
2660 }

References a, b, and calibrate::c.

◆ pnmadd() [5/7]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pnmadd ( const Packet4f a,
const Packet4f b,
const Packet4f c 
)

◆ pnmadd() [6/7]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pnmadd ( const Packet4i a,
const Packet4i b,
const Packet4i c 
)
2654  {
2655  return __lsx_vmsub_w(c, a, b);
2656 }

References a, b, and calibrate::c.

◆ pnmadd() [7/7]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pnmadd ( const Packet8s a,
const Packet8s b,
const Packet8s c 
)
2650  {
2651  return __lsx_vmsub_h(c, a, b);
2652 }

References a, b, and calibrate::c.

◆ pnmsub() [1/7]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pnmsub ( const Packet a,
const Packet b,
const Packet c 
)
inline
Returns
-((a * b + c) (coeff-wise)
1318  {
1319  return pnegate(pmadd(a, b, c));
1320 }
EIGEN_DEVICE_FUNC Packet pmadd(const Packet &a, const Packet &b, const Packet &c)
Definition: GenericPacketMath.h:1300
EIGEN_DEVICE_FUNC Packet pnegate(const Packet &a)
Definition: GenericPacketMath.h:343

References a, b, calibrate::c, pmadd(), and pnegate().

◆ pnmsub() [2/7]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pnmsub ( const Packet16c a,
const Packet16c b,
const Packet16c c 
)
2612  {
2613  return __lsx_vmsub_b(pnegate(c), a, b);
2614 }

References a, b, calibrate::c, and pnegate().

◆ pnmsub() [3/7]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pnmsub ( const Packet2d a,
const Packet2d b,
const Packet2d c 
)
839  {
840  return __lsx_vfnmadd_d(a, b, c);
841 }

References a, b, and calibrate::c.

◆ pnmsub() [4/7]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pnmsub ( const Packet2l a,
const Packet2l b,
const Packet2l c 
)
2624  {
2625  return __lsx_vmsub_d(pnegate(c), a, b);
2626 }

References a, b, calibrate::c, and pnegate().

◆ pnmsub() [5/7]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pnmsub ( const Packet4f a,
const Packet4f b,
const Packet4f c 
)
835  {
836  return __lsx_vfnmadd_s(a, b, c);
837 }

References a, b, and calibrate::c.

Referenced by negate_test_impl< Scalar, Packet, HasNegate >::run_nmsub().

◆ pnmsub() [6/7]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pnmsub ( const Packet4i a,
const Packet4i b,
const Packet4i c 
)
2620  {
2621  return __lsx_vmsub_w(pnegate(c), a, b);
2622 }

References a, b, calibrate::c, and pnegate().

◆ pnmsub() [7/7]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pnmsub ( const Packet8s a,
const Packet8s b,
const Packet8s c 
)
2616  {
2617  return __lsx_vmsub_h(pnegate(c), a, b);
2618 }

References a, b, calibrate::c, and pnegate().

◆ pnot()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pnot ( const Packet a)
inline

◆ por() [1/7]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::por ( const Packet a,
const Packet b 
)
inline
Returns
the bitwise or of a and b
560  {
561  return bitwise_helper<Packet>::bitwise_or(a, b);
562 }

References a, b, and Eigen::internal::bytewise_bitwise_helper< T >::bitwise_or().

◆ por() [2/7]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::por ( const Packet16bf a,
const Packet16bf b 
)
2792  {
2794 }

References a, b, and por< Packet8i >().

◆ por() [3/7]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::por ( const Packet16h a,
const Packet16h b 
)
2291  {
2292  // in some cases Packet8i is a wrapper around __m256i, so we need to
2293  // cast to Packet8i to call the correct overload.
2294  return Packet16h(por(Packet8i(a), Packet8i(b)));
2295 }
EIGEN_STRONG_INLINE Packet16bf por(const Packet16bf &a, const Packet16bf &b)
Definition: AVX512/PacketMath.h:2792

References a, b, and por().

◆ por() [4/7]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::por ( const Packet32h a,
const Packet32h b 
)
225  {
226  return _mm512_castsi512_ph(_mm512_or_si512(_mm512_castph_si512(a), _mm512_castph_si512(b)));
227 }

References a, and b.

◆ por() [5/7]

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::por ( const Packet4bf a,
const Packet4bf b 
)
4898  {
4900 }
EIGEN_STRONG_INLINE Packet4us por< Packet4us >(const Packet4us &a, const Packet4us &b)
Definition: NEON/PacketMath.h:2012

References a, b, and por< Packet4us >().

◆ por() [6/7]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::por ( const Packet8bf a,
const Packet8bf b 
)
2691  {
2692  return _mm_or_si128(a, b);
2693 }

References a, and b.

◆ por() [7/7]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::por ( const Packet8h a,
const Packet8h b 
)
2309  {
2310  // in some cases Packet4i is a wrapper around __m128i, so we either need to
2311  // cast to Packet4i to directly call the intrinsics as below:
2312  return _mm_or_si128(a, b);
2313 }

References a, and b.

Referenced by generic_ceil(), generic_log1p(), generic_pow(), generic_rint(), generic_round(), generic_trunc(), Eigen::internal::unary_pow::handle_nonint_nonint_errors(), packetmath(), Eigen::internal::scalar_cmp_op< LhsScalar, RhsScalar, cmp_UNORD, UseTypedComparators >::packetOp(), Eigen::internal::scalar_boolean_and_op< Scalar >::packetOp(), Eigen::internal::scalar_boolean_or_op< Scalar >::packetOp(), Eigen::internal::scalar_bitwise_or_op< Scalar >::packetOp(), pasin_float(), patanh_double(), patanh_float(), pcmp_le(), pcmp_lt(), pexp_complex(), pfrexp_generic(), phypot_complex(), plog_complex(), plog_impl_double(), plog_impl_float(), por(), por< Packet16f >(), por< Packet4cd >(), por< Packet8cf >(), por< Packet8d >(), pround(), pround< Packet16f >(), pround< Packet32h >(), pround< Packet4d >(), pround< Packet8d >(), pround< Packet8f >(), prsqrt_float_common(), psqrt_complex(), psqrt_float_common(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&NumTraits< typename unpacket_traits< Packet >::type >::IsSigned &&NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psignbit_impl< Packet, false, false >::run(), Eigen::internal::generic_sqrt_newton_step< Packet, Steps >::run(), and Eigen::internal::pselect_impl< Packet, EnableIf >::run().

◆ por< Packet16b >()

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::por< Packet16b > ( const Packet16b a,
const Packet16b b 
)
833  {
834  return _mm_or_si128(a, b);
835 }

References a, and b.

◆ por< Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::por< Packet16c > ( const Packet16c a,
const Packet16c b 
)
925  {
926  return __lsx_vor_v(a, b);
927 }

References a, and b.

◆ por< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::por< Packet16f > ( const Packet16f a,
const Packet16f b 
)
851  {
852 #ifdef EIGEN_VECTORIZE_AVX512DQ
853  return _mm512_or_ps(a, b);
854 #else
855  return _mm512_castsi512_ps(por(_mm512_castps_si512(a), _mm512_castps_si512(b)));
856 #endif
857 }

References a, b, and por().

◆ por< Packet16i >()

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::por< Packet16i > ( const Packet16i a,
const Packet16i b 
)
841  {
842  return _mm512_or_si512(a, b);
843 }

References a, and b.

◆ por< Packet16uc >()

941  {
942  return __lsx_vor_v(a, b);
943 }

References a, and b.

◆ por< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::por< Packet1cd > ( const Packet1cd a,
const Packet1cd b 
)
349  {
350  Packet1cd res;
351  res.v = (Packet2d)__lsx_vor_v((__m128i)a.v, (__m128i)b.v);
352  return res;
353 }

References a, b, and res.

◆ por< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::por< Packet1cf > ( const Packet1cf a,
const Packet1cf b 
)
272  {
273  return Packet1cf(vreinterpret_f32_u32(vorr_u32(vreinterpret_u32_f32(a.v), vreinterpret_u32_f32(b.v))));
274 }

References a, and b.

◆ por< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::por< Packet2cd > ( const Packet2cd a,
const Packet2cd b 
)
316  {
317  return Packet2cd(_mm256_or_pd(a.v, b.v));
318 }

References a, and b.

◆ por< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::por< Packet2cf > ( const Packet2cf a,
const Packet2cf b 
)
277  {
278  return Packet2cf(por<Packet4f>(a.v, b.v));
279 }
EIGEN_STRONG_INLINE Packet4f por< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1427

References a, b, and por< Packet4f >().

◆ por< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::por< Packet2d > ( const Packet2d a,
const Packet2d b 
)
921  {
922  return (Packet2d)__lsx_vor_v((__m128i)a, (__m128i)b);
923 }

References a, and b.

◆ por< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::por< Packet2f > ( const Packet2f a,
const Packet2f b 
)
1972  {
1973  return vreinterpret_f32_u32(vorr_u32(vreinterpret_u32_f32(a), vreinterpret_u32_f32(b)));
1974 }

References a, and b.

◆ por< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::por< Packet2i > ( const Packet2i a,
const Packet2i b 
)
2020  {
2021  return vorr_s32(a, b);
2022 }

References a, and b.

◆ por< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::por< Packet2l > ( const Packet2l a,
const Packet2l b 
)
937  {
938  return __lsx_vor_v(a, b);
939 }

References a, and b.

Referenced by pmax< Packet2d >(), and pmin< Packet2d >().

◆ por< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::por< Packet2ui > ( const Packet2ui a,
const Packet2ui b 
)
2028  {
2029  return vorr_u32(a, b);
2030 }

References a, and b.

◆ por< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::por< Packet2ul > ( const Packet2ul a,
const Packet2ul b 
)
953  {
954  return __lsx_vor_v(a, b);
955 }

References a, and b.

◆ por< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::por< Packet4c > ( const Packet4c a,
const Packet4c b 
)
1980  {
1981  return a | b;
1982 }

References a, and b.

◆ por< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::por< Packet4cd > ( const Packet4cd a,
const Packet4cd b 
)
288  {
289  return Packet4cd(por(a.v, b.v));
290 }

References a, b, and por().

◆ por< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::por< Packet4cf > ( const Packet4cf a,
const Packet4cf b 
)
114  {
115  return Packet4cf(_mm256_or_ps(a.v, b.v));
116 }

References a, and b.

◆ por< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::por< Packet4d > ( const Packet4d a,
const Packet4d b 
)
1331  {
1332  return _mm256_or_pd(a, b);
1333 }

References a, and b.

◆ por< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::por< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1427  {
1428  return vec_or(a, b);
1429 }

References a, and b.

Referenced by por< Packet2cf >().

◆ por< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::por< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1431  {
1432  return vec_or(a, b);
1433 }

References a, and b.

◆ por< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::por< Packet4s > ( const Packet4s a,
const Packet4s b 
)
2004  {
2005  return vorr_s16(a, b);
2006 }

References a, and b.

◆ por< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::por< Packet4uc > ( const Packet4uc a,
const Packet4uc b 
)
1992  {
1993  return a | b;
1994 }

References a, and b.

◆ por< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::por< Packet4ui > ( const Packet4ui a,
const Packet4ui b 
)
949  {
950  return __lsx_vor_v(a, b);
951 }

References a, and b.

◆ por< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::por< Packet4us > ( const Packet4us a,
const Packet4us b 
)
2012  {
2013  return vorr_u16(a, b);
2014 }

References a, and b.

Referenced by por().

◆ por< Packet8bf >()

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::por< Packet8bf > ( const Packet8bf a,
const Packet8bf b 
)
1443  {
1444  return por<Packet8us>(a, b);
1445 }
EIGEN_STRONG_INLINE Packet8us por< Packet8us >(const Packet8us &a, const Packet8us &b)
Definition: AltiVec/PacketMath.h:1439

References a, b, and por< Packet8us >().

◆ por< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::por< Packet8c > ( const Packet8c a,
const Packet8c b 
)
1984  {
1985  return vorr_s8(a, b);
1986 }

References a, and b.

◆ por< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::por< Packet8cf > ( const Packet8cf a,
const Packet8cf b 
)
101  {
102  return Packet8cf(por(a.v, b.v));
103 }

References a, b, and por().

◆ por< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::por< Packet8d > ( const Packet8d a,
const Packet8d b 
)
860  {
861 #ifdef EIGEN_VECTORIZE_AVX512DQ
862  return _mm512_or_pd(a, b);
863 #else
864  return _mm512_castsi512_pd(por(_mm512_castpd_si512(a), _mm512_castpd_si512(b)));
865 #endif
866 }

References a, b, and por().

◆ por< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::por< Packet8f > ( const Packet8f a,
const Packet8f b 
)
1327  {
1328  return _mm256_or_ps(a, b);
1329 }

References a, and b.

◆ por< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::por< Packet8i > ( const Packet8i a,
const Packet8i b 
)
1335  {
1336 #ifdef EIGEN_VECTORIZE_AVX2
1337  return _mm256_or_si256(a, b);
1338 #else
1339  return _mm256_castps_si256(_mm256_or_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
1340 #endif
1341 }

References a, and b.

Referenced by ploadu< Packet8f >(), por(), and pstoreu< float >().

◆ por< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::por< Packet8l > ( const Packet8l a,
const Packet8l b 
)
846  {
847  return _mm512_or_si512(a, b);
848 }

References a, and b.

◆ por< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::por< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1435  {
1436  return vec_or(a, b);
1437 }

References a, and b.

◆ por< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::por< Packet8uc > ( const Packet8uc a,
const Packet8uc b 
)
1996  {
1997  return vorr_u8(a, b);
1998 }

References a, and b.

◆ por< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::por< Packet8ui > ( const Packet8ui a,
const Packet8ui b 
)
1343  {
1344 #ifdef EIGEN_VECTORIZE_AVX2
1345  return _mm256_or_si256(a, b);
1346 #else
1347  return _mm256_castps_si256(_mm256_or_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
1348 #endif
1349 }

References a, and b.

◆ por< Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::por< Packet8us > ( const Packet8us a,
const Packet8us b 
)
1439  {
1440  return vec_or(a, b);
1441 }

References a, and b.

Referenced by por< Packet8bf >().

◆ por< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::por< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
507  {
508  return svreinterpret_f32_u32(svorr_u32_x(svptrue_b32(), svreinterpret_u32_f32(a), svreinterpret_u32_f32(b)));
509 }

References a, and b.

◆ por< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::por< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
168  {
169  return svorr_s32_x(svptrue_b32(), a, b);
170 }

References a, and b.

◆ positive_real_hypot()

template<typename RealScalar >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE RealScalar Eigen::internal::positive_real_hypot ( const RealScalar x,
const RealScalar y 
)
150  {
151  // IEEE IEC 6059 special cases.
152  if ((numext::isinf)(x) || (numext::isinf)(y)) return NumTraits<RealScalar>::infinity();
153  if ((numext::isnan)(x) || (numext::isnan)(y)) return NumTraits<RealScalar>::quiet_NaN();
154 
156  RealScalar p, qp;
157  p = numext::maxi(x, y);
158  if (numext::is_exactly_zero(p)) return RealScalar(0);
159  qp = numext::mini(y, x) / p;
160  return p * sqrt(RealScalar(1) + qp * qp);
161 }

References EIGEN_USING_STD, Eigen::numext::is_exactly_zero(), Eigen::numext::isinf(), Eigen::numext::isnan(), Eigen::numext::maxi(), Eigen::numext::mini(), p, sqrt(), plotDoE::x, and y.

Referenced by Eigen::internal::scalar_hypot_op< Scalar, Scalar >::operator()().

◆ ppolygamma()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::ppolygamma ( const Packet n,
const Packet x 
)
Returns
the polygamma function (coeff-wise)
43  {
44  using numext::polygamma;
45  return polygamma(n, x);
46 }
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_polygamma_op< typename DerivedX::Scalar >, const DerivedN, const DerivedX > polygamma(const Eigen::ArrayBase< DerivedN > &n, const Eigen::ArrayBase< DerivedX > &x)
Definition: SpecialFunctionsArrayAPI.h:113

References n, Eigen::polygamma(), and plotDoE::x.

Referenced by Eigen::internal::scalar_polygamma_op< Scalar >::packetOp().

◆ preciprocal()

◆ preciprocal< Packet2f >()

4641  {
4642  // Compute approximate reciprocal.
4643  float32x2_t result = vrecpe_f32(a);
4644  result = vmul_f32(vrecps_f32(a, result), result);
4645  result = vmul_f32(vrecps_f32(a, result), result);
4646  return result;
4647 }

References a.

◆ preciprocal< Packet32h >()

544  {
545  return _mm512_rcp_ph(a);
546 }

References a.

◆ preciprocal< Packet4f >()

2719  {
2720  return __lsx_vfrecip_s(a);
2721 }

References a.

◆ predux()

◆ predux< Packet16b >()

1898  {
1899  Packet4i tmp = _mm_or_si128(a, _mm_unpackhi_epi64(a, a));
1900  return (pfirst(tmp) != 0) || (pfirst<Packet4i>(_mm_shuffle_epi32(tmp, 1)) != 0);
1901 }
EIGEN_STRONG_INLINE int pfirst< Packet4i >(const Packet4i &a)
Definition: AltiVec/PacketMath.h:1869

References a, pfirst(), pfirst< Packet4i >(), and tmp.

◆ predux< Packet16bf >()

2923  {
2924  return static_cast<bfloat16>(predux<Packet16f>(Bf16ToF32(p)));
2925 }
EIGEN_STRONG_INLINE float predux< Packet16f >(const Packet16f &a)
Definition: AVX512/PacketMath.h:1456

References Bf16ToF32(), p, and predux< Packet16f >().

◆ predux< Packet16c >()

template<>
EIGEN_STRONG_INLINE int8_t Eigen::internal::predux< Packet16c > ( const Packet16c a)
2510  {
2511  return predux_size16<Packet16c>(a);
2512 }

References a.

◆ predux< Packet16f >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::predux< Packet16f > ( const Packet16f a)
1456  {
1457 #ifdef EIGEN_VECTORIZE_AVX512DQ
1458  __m256 lane0 = _mm512_extractf32x8_ps(a, 0);
1459  __m256 lane1 = _mm512_extractf32x8_ps(a, 1);
1460  Packet8f x = _mm256_add_ps(lane0, lane1);
1461  return predux<Packet8f>(x);
1462 #else
1463  __m128 lane0 = _mm512_extractf32x4_ps(a, 0);
1464  __m128 lane1 = _mm512_extractf32x4_ps(a, 1);
1465  __m128 lane2 = _mm512_extractf32x4_ps(a, 2);
1466  __m128 lane3 = _mm512_extractf32x4_ps(a, 3);
1467  __m128 sum = _mm_add_ps(_mm_add_ps(lane0, lane1), _mm_add_ps(lane2, lane3));
1468  return predux<Packet4f>(sum);
1469 #endif
1470 }
EIGEN_STRONG_INLINE float predux< Packet8f >(const Packet8f &a)
Definition: AVX/PacketMath.h:1954
EIGEN_STRONG_INLINE float predux< Packet4f >(const Packet4f &a)
Definition: AltiVec/PacketMath.h:2435

References a, predux< Packet4f >(), predux< Packet8f >(), and plotDoE::x.

Referenced by predux< Packet16bf >().

◆ predux< Packet16h >()

2406  {
2407  Packet16f from_float = half2float(from);
2408  return half(predux(from_float));
2409 }
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux(const Packet &a)
Definition: GenericPacketMath.h:1232

References half2float(), and predux().

◆ predux< Packet16i >()

1485  {
1486  return _mm512_reduce_add_epi32(a);
1487 }

References a.

◆ predux< Packet16uc >()

template<>
EIGEN_STRONG_INLINE uint8_t Eigen::internal::predux< Packet16uc > ( const Packet16uc a)
2515  {
2516  return predux_size16<Packet16uc>(a);
2517 }

References a.

◆ predux< Packet1cd >()

template<>
EIGEN_STRONG_INLINE std::complex< double > Eigen::internal::predux< Packet1cd > ( const Packet1cd a)
415  {
416  return pfirst(a);
417 }

References a, and pfirst().

◆ predux< Packet1cf >()

template<>
EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::predux< Packet1cf > ( const Packet1cf a)
408  {
409  std::complex<float> s;
410  vst1_f32((float*)&s, a.v);
411  return s;
412 }

References a, and s.

◆ predux< Packet2cd >()

template<>
EIGEN_STRONG_INLINE std::complex<double> Eigen::internal::predux< Packet2cd > ( const Packet2cd a)
389  {
390  return predux(padd(Packet1cd(_mm256_extractf128_pd(a.v, 0)), Packet1cd(_mm256_extractf128_pd(a.v, 1))));
391 }

References a, padd(), and predux().

◆ predux< Packet2cf >()

template<>
EIGEN_STRONG_INLINE std::complex< float > Eigen::internal::predux< Packet2cf > ( const Packet2cf a)
310  {
311  Packet4f b;
312  b = vec_sld(a.v, a.v, 8);
313  b = padd<Packet4f>(a.v, b);
314  return pfirst<Packet2cf>(Packet2cf(b));
315 }
EIGEN_STRONG_INLINE std::complex< float > pfirst< Packet2cf >(const Packet2cf &a)
Definition: AltiVec/Complex.h:295

References a, b, padd< Packet4f >(), and pfirst< Packet2cf >().

◆ predux< Packet2d >()

1965  {
1966  return pfirst<Packet2d>(__lsx_vfadd_d(a, preverse(a)));
1967 }
EIGEN_STRONG_INLINE Packet2ul preverse(const Packet2ul &a)
Definition: LSX/PacketMath.h:1955
EIGEN_STRONG_INLINE double pfirst< Packet2d >(const Packet2d &a)
Definition: LSX/PacketMath.h:1879

References a, pfirst< Packet2d >(), and preverse().

◆ predux< Packet2f >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::predux< Packet2f > ( const Packet2f a)
3468  {
3469  return vget_lane_f32(vpadd_f32(a, a), 0);
3470 }

References a.

◆ predux< Packet2i >()

template<>
EIGEN_STRONG_INLINE int32_t Eigen::internal::predux< Packet2i > ( const Packet2i a)
3607  {
3608  return vget_lane_s32(vpadd_s32(a, a), 0);
3609 }

References a.

◆ predux< Packet2l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::predux< Packet2l > ( const Packet2l a)
1987  {
1988  return (int64_t)__lsx_vpickve2gr_d(__lsx_vhaddw_q_d(a, a), 0);
1989 }

References a.

◆ predux< Packet2ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::predux< Packet2ui > ( const Packet2ui a)
3616  {
3617  return vget_lane_u32(vpadd_u32(a, a), 0);
3618 }

References a.

◆ predux< Packet2ul >()

template<>
EIGEN_STRONG_INLINE uint64_t Eigen::internal::predux< Packet2ul > ( const Packet2ul a)
2009  {
2010  return (uint64_t)__lsx_vpickve2gr_d(__lsx_vhaddw_qu_du(a, a), 0);
2011 }

References a.

◆ predux< Packet32h >()

402  {
403  return (half)_mm512_reduce_add_ph(a);
404 }

References a.

◆ predux< Packet4bf >()

4983  {
4984  return static_cast<bfloat16>(predux<Packet4f>(Bf16ToF32(a)));
4985 }

References a, Bf16ToF32(), and predux< Packet4f >().

◆ predux< Packet4c >()

template<>
EIGEN_STRONG_INLINE int8_t Eigen::internal::predux< Packet4c > ( const Packet4c a)
3478  {
3479  const int8x8_t a_dup = vreinterpret_s8_s32(vdup_n_s32(a));
3480  int8x8_t sum = vpadd_s8(a_dup, a_dup);
3481  sum = vpadd_s8(sum, sum);
3482  return vget_lane_s8(sum, 0);
3483 }

References a.

◆ predux< Packet4cd >()

template<>
EIGEN_STRONG_INLINE std::complex<double> Eigen::internal::predux< Packet4cd > ( const Packet4cd a)
371  {
372  return predux(padd(Packet2cd(_mm512_extractf64x4_pd(a.v, 0)), Packet2cd(_mm512_extractf64x4_pd(a.v, 1))));
373 }

References a, padd(), and predux().

◆ predux< Packet4cf >()

template<>
EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::predux< Packet4cf > ( const Packet4cf a)
203  {
204  return predux(padd(Packet2cf(_mm256_extractf128_ps(a.v, 0)), Packet2cf(_mm256_extractf128_ps(a.v, 1))));
205 }

References a, padd(), and predux().

◆ predux< Packet4d >()

1958  {
1959  return predux(Packet2d(_mm_add_pd(_mm256_castpd256_pd128(a), _mm256_extractf128_pd(a, 1))));
1960 }

References a, and predux().

Referenced by predux< Packet8d >().

◆ predux< Packet4f >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::predux< Packet4f > ( const Packet4f a)
2435  {
2436  Packet4f b, sum;
2437  b = vec_sld(a, a, 8);
2438  sum = a + b;
2439  b = vec_sld(sum, sum, 4);
2440  sum += b;
2441  return pfirst(sum);
2442 }

References a, b, and pfirst().

Referenced by predux< Packet16f >(), predux< Packet4bf >(), and predux< Packet8bf >().

◆ predux< Packet4i >()

2445  {
2446  Packet4i b, sum;
2447  b = vec_sld(a, a, 8);
2448  sum = a + b;
2449  b = vec_sld(sum, sum, 4);
2450  sum += b;
2451  return pfirst(sum);
2452 }

References a, b, and pfirst().

◆ predux< Packet4s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::predux< Packet4s > ( const Packet4s a)
3583  {
3584  const int16x4_t sum = vpadd_s16(a, a);
3585  return vget_lane_s16(vpadd_s16(sum, sum), 0);
3586 }

References a.

◆ predux< Packet4uc >()

template<>
EIGEN_STRONG_INLINE uint8_t Eigen::internal::predux< Packet4uc > ( const Packet4uc a)
3511  {
3512  const uint8x8_t a_dup = vreinterpret_u8_u32(vdup_n_u32(a));
3513  uint8x8_t sum = vpadd_u8(a_dup, a_dup);
3514  sum = vpadd_u8(sum, sum);
3515  return vget_lane_u8(sum, 0);
3516 }

References a.

◆ predux< Packet4ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::predux< Packet4ui > ( const Packet4ui a)
2004  {
2005  Packet2ul tmp = __lsx_vhaddw_du_wu(a, a);
2006  return (uint32_t)__lsx_vpickve2gr_d(__lsx_vhaddw_qu_du(tmp, tmp), 0);
2007 }

References a, and tmp.

◆ predux< Packet4us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::predux< Packet4us > ( const Packet4us a)
3595  {
3596  const uint16x4_t sum = vpadd_u16(a, a);
3597  return vget_lane_u16(vpadd_u16(sum, sum), 0);
3598 }

References a.

◆ predux< Packet8bf >()

2455  {
2456  float redux_even = predux<Packet4f>(Bf16ToF32Even(a));
2457  float redux_odd = predux<Packet4f>(Bf16ToF32Odd(a));
2458  float f32_result = redux_even + redux_odd;
2459  return bfloat16(f32_result);
2460 }

References a, Bf16ToF32Even(), Bf16ToF32Odd(), and predux< Packet4f >().

◆ predux< Packet8c >()

template<>
EIGEN_STRONG_INLINE int8_t Eigen::internal::predux< Packet8c > ( const Packet8c a)
3495  {
3496  int8x8_t sum = vpadd_s8(a, a);
3497  sum = vpadd_s8(sum, sum);
3498  sum = vpadd_s8(sum, sum);
3499  return vget_lane_s8(sum, 0);
3500 }

References a.

◆ predux< Packet8cf >()

template<>
EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::predux< Packet8cf > ( const Packet8cf a)
177  {
178  return predux(padd(Packet4cf(extract256<0>(a.v)), Packet4cf(extract256<1>(a.v))));
179 }

References a, padd(), and predux().

◆ predux< Packet8d >()

1472  {
1473  __m256d lane0 = _mm512_extractf64x4_pd(a, 0);
1474  __m256d lane1 = _mm512_extractf64x4_pd(a, 1);
1475  __m256d sum = _mm256_add_pd(lane0, lane1);
1476  return predux<Packet4d>(sum);
1477 }
EIGEN_STRONG_INLINE double predux< Packet4d >(const Packet4d &a)
Definition: AVX/PacketMath.h:1958

References a, and predux< Packet4d >().

◆ predux< Packet8f >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::predux< Packet8f > ( const Packet8f a)
1954  {
1955  return predux(Packet4f(_mm_add_ps(_mm256_castps256_ps128(a), _mm256_extractf128_ps(a, 1))));
1956 }

References a, and predux().

Referenced by predux< Packet16f >(), and predux< Packet8h >().

◆ predux< Packet8h >()

2451  {
2452  Packet8f af = half2float(a);
2453  float reduced = predux<Packet8f>(af);
2454  return Eigen::half(reduced);
2455 }

References a, half2float(), and predux< Packet8f >().

◆ predux< Packet8i >()

1962  {
1963  return predux(Packet4i(_mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1))));
1964 }

References a, and predux().

◆ predux< Packet8l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::predux< Packet8l > ( const Packet8l a)
1480  {
1481  return _mm512_reduce_add_epi64(a);
1482 }

References a.

◆ predux< Packet8s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::predux< Packet8s > ( const Packet8s a)
2478  {
2479  return predux_size8<Packet8s>(a);
2480 }

References a.

◆ predux< Packet8uc >()

template<>
EIGEN_STRONG_INLINE uint8_t Eigen::internal::predux< Packet8uc > ( const Packet8uc a)
3568  {
3569  uint8x8_t sum = vpadd_u8(a, a);
3570  sum = vpadd_u8(sum, sum);
3571  sum = vpadd_u8(sum, sum);
3572  return vget_lane_u8(sum, 0);
3573 }

References a.

◆ predux< Packet8ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::predux< Packet8ui > ( const Packet8ui a)
1966  {
1967  return predux(Packet4ui(_mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1))));
1968 }

References a, and predux().

◆ predux< Packet8us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::predux< Packet8us > ( const Packet8us a)
2483  {
2484  return predux_size8<Packet8us>(a);
2485 }

References a.

◆ predux< PacketXf >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::predux< PacketXf > ( const PacketXf &  a)
594  {
595  return svaddv_f32(svptrue_b32(), a);
596 }

References a.

◆ predux< PacketXi >()

template<>
EIGEN_STRONG_INLINE numext::int32_t Eigen::internal::predux< PacketXi > ( const PacketXi &  a)
264  {
265  return static_cast<numext::int32_t>(svaddv_s32(svptrue_b32(), a));
266 }

References a.

◆ predux_any() [1/16]

template<typename Packet >
EIGEN_DEVICE_FUNC bool Eigen::internal::predux_any ( const Packet a)
inline
Returns
true if all coeffs of a means "true" It is supposed to be called on values returned by pcmp_*.
Returns
true if any coeffs of a means "true" It is supposed to be called on values returned by pcmp_*.
1282  {
1283  // Dirty but generic implementation where "true" is assumed to be non 0 and all the sames.
1284  // It is expected that "true" is either:
1285  // - Scalar(1)
1286  // - bits full of ones (NaN for floats),
1287  // - or first bit equals to 1 (1 for ints, smallest denormal for floats).
1288  // For all these cases, taking the sum is just fine, and this boils down to a no-op for scalars.
1289  typedef typename unpacket_traits<Packet>::type Scalar;
1290  return numext::not_equal_strict(predux(a), Scalar(0));
1291 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool not_equal_strict(const X &x, const Y &y)
Definition: Meta.h:606

References a, Eigen::numext::not_equal_strict(), and predux().

◆ predux_any() [2/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet16f a)
1646  {
1647  return _mm512_reduce_or_epi32(_mm512_castps_si512(a)) != 0;
1648 }

References a.

◆ predux_any() [3/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet16i a)
1651  {
1652  return _mm512_reduce_or_epi32(a) != 0;
1653 }

References a.

◆ predux_any() [4/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet2d x)
2035  {
2036  return _mm_movemask_pd(x) != 0x0;
2037 }

References plotDoE::x.

◆ predux_any() [5/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet2l x)
2045  {
2046  return _mm_movemask_pd(_mm_castsi128_pd(x)) != 0x0;
2047 }

References plotDoE::x.

◆ predux_any() [6/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet4d x)
2034  {
2035  return _mm256_movemask_pd(x) != 0;
2036 }

References plotDoE::x.

◆ predux_any() [7/16]

◆ predux_any() [8/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet4i x)
2050  {
2051  return _mm_movemask_ps(_mm_castsi128_ps(x)) != 0x0;
2052 }

References plotDoE::x.

◆ predux_any() [9/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet4ui x)
2054  {
2055  return _mm_movemask_ps(_mm_castsi128_ps(x)) != 0x0;
2056 }

References plotDoE::x.

◆ predux_any() [10/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet8bf x)
2052  {
2053  return _mm_movemask_epi8(x) != 0;
2054 }

References plotDoE::x.

◆ predux_any() [11/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet8d a)
1656  {
1657  return _mm512_reduce_or_epi64(_mm512_castpd_si512(a)) != 0;
1658 }

References a.

◆ predux_any() [12/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet8f x)
2029  {
2030  return _mm256_movemask_ps(x) != 0;
2031 }

References plotDoE::x.

◆ predux_any() [13/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet8h x)
2048  {
2049  return _mm_movemask_epi8(x) != 0;
2050 }

References plotDoE::x.

◆ predux_any() [14/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet8i x)
2039  {
2040  return _mm256_movemask_ps(_mm256_castsi256_ps(x)) != 0;
2041 }

References plotDoE::x.

◆ predux_any() [15/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet8l a)
1661  {
1662  return _mm512_reduce_or_epi64(a) != 0;
1663 }

References a.

◆ predux_any() [16/16]

template<>
EIGEN_STRONG_INLINE bool Eigen::internal::predux_any ( const Packet8ui x)
2043  {
2044  return _mm256_movemask_ps(_mm256_castsi256_ps(x)) != 0;
2045 }

References plotDoE::x.

◆ predux_half_dowto4() [1/9]

template<typename Packet >
const DoublePacket<Packet>& Eigen::internal::predux_half_dowto4 ( const DoublePacket< Packet > &  a)
650  {
651  return a;
652 }

References a.

◆ predux_half_dowto4() [2/9]

template<typename Packet >
DoublePacket<typename unpacket_traits<Packet>::half> Eigen::internal::predux_half_dowto4 ( const DoublePacket< Packet > &  a,
std::enable_if_t< unpacket_traits< Packet >::size==16 > *  = 0 
)
656  {
657  // yes, that's pretty hackish :(
658  DoublePacket<typename unpacket_traits<Packet>::half> res;
660  typedef typename packet_traits<Cplx>::type CplxPacket;
661  res.first = predux_half_dowto4(CplxPacket(a.first)).v;
662  res.second = predux_half_dowto4(CplxPacket(a.second)).v;
663  return res;
664 }
DoublePacket< typename unpacket_traits< Packet >::half > predux_half_dowto4(const DoublePacket< Packet > &a, std::enable_if_t< unpacket_traits< Packet >::size==16 > *=0)
Definition: products/GeneralBlockPanelKernel.h:655

References a, predux_half_dowto4(), res, and compute_granudrum_aor::type.

◆ predux_half_dowto4() [3/9]

template<typename Packet >
EIGEN_DEVICE_FUNC std::conditional_t<(unpacket_traits<Packet>::size % 8) == 0, typename unpacket_traits<Packet>::half, Packet> Eigen::internal::predux_half_dowto4 ( const Packet a)
inline
Returns
the sum of the elements of upper and lower half of a if a is larger than 4. For a packet {a0, a1, a2, a3, a4, a5, a6, a7}, it returns a half packet {a0+a4, a1+a5, a2+a6, a3+a7} For packet-size smaller or equal to 4, this boils down to a noop.
1211  {
1212  return a;
1213 }

References a.

◆ predux_half_dowto4() [4/9]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8c Eigen::internal::predux_half_dowto4 ( const Packet16c a)
3639  {
3640  return vadd_s8(vget_high_s8(a), vget_low_s8(a));
3641 }

References a.

◆ predux_half_dowto4() [5/9]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8uc Eigen::internal::predux_half_dowto4 ( const Packet16uc a)
3647  {
3648  return vadd_u8(vget_high_u8(a), vget_low_u8(a));
3649 }

References a.

◆ predux_half_dowto4() [6/9]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4c Eigen::internal::predux_half_dowto4 ( const Packet8c a)

◆ predux_half_dowto4() [7/9]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4s Eigen::internal::predux_half_dowto4 ( const Packet8s a)
3651  {
3652  return vadd_s16(vget_high_s16(a), vget_low_s16(a));
3653 }

References a.

◆ predux_half_dowto4() [8/9]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4uc Eigen::internal::predux_half_dowto4 ( const Packet8uc a)
3643  {
3644  return vget_lane_u32(vreinterpret_u32_u8(vadd_u8(a, vreinterpret_u8_u32(vrev64_u32(vreinterpret_u32_u8(a))))), 0);
3645 }

References a.

◆ predux_half_dowto4() [9/9]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4us Eigen::internal::predux_half_dowto4 ( const Packet8us a)
3655  {
3656  return vadd_u16(vget_high_u16(a), vget_low_u16(a));
3657 }

References a.

◆ predux_half_dowto4< Packet16bf >()

2916  {
2917  Packet8bf lane0 = _mm256_extractf128_si256(a, 0);
2918  Packet8bf lane1 = _mm256_extractf128_si256(a, 1);
2919  return padd<Packet8bf>(lane0, lane1);
2920 }

References a, and padd< Packet8bf >().

◆ predux_half_dowto4< Packet16f >()

1490  {
1491 #ifdef EIGEN_VECTORIZE_AVX512DQ
1492  __m256 lane0 = _mm512_extractf32x8_ps(a, 0);
1493  __m256 lane1 = _mm512_extractf32x8_ps(a, 1);
1494  return _mm256_add_ps(lane0, lane1);
1495 #else
1496  __m128 lane0 = _mm512_extractf32x4_ps(a, 0);
1497  __m128 lane1 = _mm512_extractf32x4_ps(a, 1);
1498  __m128 lane2 = _mm512_extractf32x4_ps(a, 2);
1499  __m128 lane3 = _mm512_extractf32x4_ps(a, 3);
1500  __m128 sum0 = _mm_add_ps(lane0, lane2);
1501  __m128 sum1 = _mm_add_ps(lane1, lane3);
1502  return _mm256_insertf128_ps(_mm256_castps128_ps256(sum0), sum1, 1);
1503 #endif
1504 }

References a.

◆ predux_half_dowto4< Packet16h >()

2414  {
2415  Packet8h lane0 = _mm256_extractf128_si256(a, 0);
2416  Packet8h lane1 = _mm256_extractf128_si256(a, 1);
2417  return padd<Packet8h>(lane0, lane1);
2418 }
EIGEN_STRONG_INLINE Packet8h padd< Packet8h >(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2390

References a, and padd< Packet8h >().

◆ predux_half_dowto4< Packet16i >()

1512  {
1513 #ifdef EIGEN_VECTORIZE_AVX512DQ
1514  __m256i lane0 = _mm512_extracti32x8_epi32(a, 0);
1515  __m256i lane1 = _mm512_extracti32x8_epi32(a, 1);
1516  return _mm256_add_epi32(lane0, lane1);
1517 #else
1518  __m128i lane0 = _mm512_extracti32x4_epi32(a, 0);
1519  __m128i lane1 = _mm512_extracti32x4_epi32(a, 1);
1520  __m128i lane2 = _mm512_extracti32x4_epi32(a, 2);
1521  __m128i lane3 = _mm512_extracti32x4_epi32(a, 3);
1522  __m128i sum0 = _mm_add_epi32(lane0, lane2);
1523  __m128i sum1 = _mm_add_epi32(lane1, lane3);
1524  return _mm256_inserti128_si256(_mm256_castsi128_si256(sum0), sum1, 1);
1525 #endif
1526 }

References a.

◆ predux_half_dowto4< Packet32h >()

418  {
419 #ifdef EIGEN_VECTORIZE_AVX512DQ
420  __m256i lowHalf = _mm256_castps_si256(_mm512_extractf32x8_ps(_mm512_castph_ps(a), 0));
421  __m256i highHalf = _mm256_castps_si256(_mm512_extractf32x8_ps(_mm512_castph_ps(a), 1));
422 
423  return Packet16h(padd<Packet16h>(lowHalf, highHalf));
424 #else
425  Eigen::half data[32];
426  _mm512_storeu_ph(data, a);
427 
428  __m256i lowHalf = _mm256_castph_si256(_mm256_loadu_ph(data));
429  __m256i highHalf = _mm256_castph_si256(_mm256_loadu_ph(data + 16));
430 
431  return Packet16h(padd<Packet16h>(lowHalf, highHalf));
432 #endif
433 }
EIGEN_STRONG_INLINE Packet16h padd< Packet16h >(const Packet16h &a, const Packet16h &b)
Definition: AVX512/PacketMath.h:2374

References a, data, and padd< Packet16h >().

◆ predux_half_dowto4< Packet8cf >()

187  {
188  __m256 lane0 = extract256<0>(a.v);
189  __m256 lane1 = extract256<1>(a.v);
190  __m256 res = _mm256_add_ps(lane0, lane1);
191  return Packet4cf(res);
192 }

References a, and res.

◆ predux_half_dowto4< Packet8d >()

1506  {
1507  __m256d lane0 = _mm512_extractf64x4_pd(a, 0);
1508  __m256d lane1 = _mm512_extractf64x4_pd(a, 1);
1509  return _mm256_add_pd(lane0, lane1);
1510 }

References a.

◆ predux_half_dowto4< Packet8f >()

1971  {
1972  return _mm_add_ps(_mm256_castps256_ps128(a), _mm256_extractf128_ps(a, 1));
1973 }

References a.

◆ predux_half_dowto4< Packet8i >()

1975  {
1976  return _mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1));
1977 }

References a.

◆ predux_half_dowto4< Packet8l >()

1529  {
1530  __m256i lane0 = _mm512_extracti64x4_epi64(a, 0);
1531  __m256i lane1 = _mm512_extracti64x4_epi64(a, 1);
1532  return _mm256_add_epi64(lane0, lane1);
1533 }

References a.

◆ predux_half_dowto4< Packet8ui >()

1979  {
1980  return _mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1));
1981 }

References a.

◆ predux_helper()

template<typename Packet , typename Op >
EIGEN_DEVICE_FUNC unpacket_traits<Packet>::type Eigen::internal::predux_helper ( const Packet a,
Op  op 
)
inline
1217  {
1218  typedef typename unpacket_traits<Packet>::type Scalar;
1219  const size_t n = unpacket_traits<Packet>::size;
1220  EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) Scalar elements[n];
1221  pstoreu<Scalar>(elements, a);
1222  for (size_t k = n / 2; k > 0; k /= 2) {
1223  for (size_t i = 0; i < k; ++i) {
1224  elements[i] = op(elements[i], elements[i + k]);
1225  }
1226  }
1227  return elements[0];
1228 }

References a, EIGEN_ALIGN_TO_BOUNDARY, i, k, n, and op.

Referenced by predux_max(), predux_min(), and predux_mul().

◆ predux_max() [1/2]

◆ predux_max() [2/2]

template<int NaNPropagation, typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits<Packet>::type Eigen::internal::predux_max ( const Packet a)
inline
1264  {
1265  typedef typename unpacket_traits<Packet>::type Scalar;
1266  return predux_helper(a, EIGEN_BINARY_OP_NAN_PROPAGATION(Scalar, (pmax<NaNPropagation, Scalar>)));
1267 }

References a, EIGEN_BINARY_OP_NAN_PROPAGATION, and predux_helper().

◆ predux_max< Packet16bf >()

2938  {
2939  return static_cast<bfloat16>(predux_max<Packet16f>(Bf16ToF32(from)));
2940 }
EIGEN_STRONG_INLINE float predux_max< Packet16f >(const Packet16f &a)
Definition: AVX512/PacketMath.h:1618

References Bf16ToF32(), and predux_max< Packet16f >().

◆ predux_max< Packet16c >()

2727  {
2728  Packet16c pair, quad, octo, result;
2729 
2730  pair = vec_max(a, vec_sld(a, a, 8));
2731  quad = vec_max(pair, vec_sld(pair, pair, 4));
2732  octo = vec_max(quad, vec_sld(quad, quad, 2));
2733  result = vec_max(octo, vec_sld(octo, octo, 1));
2734 
2735  return pfirst(result);
2736 }

References a, and pfirst().

◆ predux_max< Packet16f >()

1618  {
1619  __m128 lane0 = _mm512_extractf32x4_ps(a, 0);
1620  __m128 lane1 = _mm512_extractf32x4_ps(a, 1);
1621  __m128 lane2 = _mm512_extractf32x4_ps(a, 2);
1622  __m128 lane3 = _mm512_extractf32x4_ps(a, 3);
1623  __m128 res = _mm_max_ps(_mm_max_ps(lane0, lane1), _mm_max_ps(lane2, lane3));
1624  res = _mm_max_ps(res, _mm_permute_ps(res, _MM_SHUFFLE(0, 0, 3, 2)));
1625  return pfirst(_mm_max_ps(res, _mm_permute_ps(res, _MM_SHUFFLE(0, 0, 0, 1))));
1626 }

References a, pfirst(), and res.

Referenced by predux_max< Packet16bf >(), and predux_max< Packet16h >().

◆ predux_max< Packet16h >()

2421  {
2422  Packet16f af = half2float(a);
2423  float reduced = predux_max<Packet16f>(af);
2424  return Eigen::half(reduced);
2425 }

References a, half2float(), and predux_max< Packet16f >().

◆ predux_max< Packet16i >()

1637  {
1638  return _mm512_reduce_max_epi32(a);
1639 }

References a.

◆ predux_max< Packet16uc >()

2739  {
2740  Packet16uc pair, quad, octo, result;
2741 
2742  pair = vec_max(a, vec_sld(a, a, 8));
2743  quad = vec_max(pair, vec_sld(pair, pair, 4));
2744  octo = vec_max(quad, vec_sld(quad, quad, 2));
2745  result = vec_max(octo, vec_sld(octo, octo, 1));
2746 
2747  return pfirst(result);
2748 }

References a, and pfirst().

◆ predux_max< Packet2d >()

2127  {
2128  return pfirst(__lsx_vfmax_d(a, preverse(a)));
2129 }

References a, pfirst(), and preverse().

◆ predux_max< Packet2f >()

3940  {
3941  return vget_lane_f32(vpmax_f32(a, a), 0);
3942 }

References a.

◆ predux_max< Packet2i >()

template<>
EIGEN_STRONG_INLINE int32_t Eigen::internal::predux_max< Packet2i > ( const Packet2i a)
4071  {
4072  return vget_lane_s32(vpmax_s32(a, a), 0);
4073 }

References a.

◆ predux_max< Packet2l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::predux_max< Packet2l > ( const Packet2l a)
2149  {
2150  return pfirst((Packet2l)__lsx_vmax_d(a, preverse(a)));
2151 }

References a, pfirst(), and preverse().

◆ predux_max< Packet2ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::predux_max< Packet2ui > ( const Packet2ui a)
4080  {
4081  return vget_lane_u32(vpmax_u32(a, a), 0);
4082 }

References a.

◆ predux_max< Packet2ul >()

template<>
EIGEN_STRONG_INLINE uint64_t Eigen::internal::predux_max< Packet2ul > ( const Packet2ul a)
2171  {
2172  return pfirst((Packet2ul)__lsx_vmax_du(a, preverse(a)));
2173 }

References a, pfirst(), and preverse().

◆ predux_max< Packet4bf >()

4988  {
4989  return static_cast<bfloat16>(predux_max<Packet4f>(Bf16ToF32(a)));
4990 }
EIGEN_STRONG_INLINE float predux_max< Packet4f >(const Packet4f &a)
Definition: AltiVec/PacketMath.h:2679

References a, Bf16ToF32(), and predux_max< Packet4f >().

◆ predux_max< Packet4c >()

3950  {
3951  const int8x8_t a_dup = vreinterpret_s8_s32(vdup_n_s32(a));
3952  int8x8_t max = vpmax_s8(a_dup, a_dup);
3953  max = vpmax_s8(max, max);
3954  return vget_lane_s8(max, 0);
3955 }

References a, and Eigen::max().

◆ predux_max< Packet4d >()

2017  {
2018  Packet4d tmp = _mm256_max_pd(a, _mm256_permute2f128_pd(a, a, 1));
2019  return pfirst(_mm256_max_pd(tmp, _mm256_shuffle_pd(tmp, tmp, 1)));
2020 }

References a, pfirst(), and tmp.

◆ predux_max< Packet4f >()

2679  {
2680  return predux_max4<Packet4f>(a);
2681 }

References a.

Referenced by predux_max< Packet4bf >(), and predux_max< Packet8bf >().

◆ predux_max< Packet4i >()

2684  {
2685  return predux_max4<Packet4i>(a);
2686 }

References a.

◆ predux_max< Packet4s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::predux_max< Packet4s > ( const Packet4s a)
4047  {
4048  const int16x4_t max = vpmax_s16(a, a);
4049  return vget_lane_s16(vpmax_s16(max, max), 0);
4050 }

References a, and Eigen::max().

◆ predux_max< Packet4uc >()

3983  {
3984  const uint8x8_t a_dup = vreinterpret_u8_u32(vdup_n_u32(a));
3985  uint8x8_t max = vpmax_u8(a_dup, a_dup);
3986  max = vpmax_u8(max, max);
3987  return vget_lane_u8(max, 0);
3988 }

References a, and Eigen::max().

◆ predux_max< Packet4ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::predux_max< Packet4ui > ( const Packet4ui a)
2166  {
2167  Packet4ui tmp = __lsx_vmax_wu(a, __lsx_vshuf4i_w((__m128i)a, 0x4E));
2168  return pfirst((Packet4ui)__lsx_vmax_wu(tmp, __lsx_vshuf4i_w((__m128i)tmp, 0xB1)));
2169 }

References a, pfirst(), and tmp.

◆ predux_max< Packet4us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::predux_max< Packet4us > ( const Packet4us a)
4059  {
4060  const uint16x4_t max = vpmax_u16(a, a);
4061  return vget_lane_u16(vpmax_u16(max, max), 0);
4062 }

References a, and Eigen::max().

◆ predux_max< Packet8bf >()

2689  {
2690  float redux_even = predux_max<Packet4f>(Bf16ToF32Even(a));
2691  float redux_odd = predux_max<Packet4f>(Bf16ToF32Odd(a));
2692  float f32_result = (std::max)(redux_even, redux_odd);
2693  return bfloat16(f32_result);
2694 }

References a, Bf16ToF32Even(), Bf16ToF32Odd(), max, and predux_max< Packet4f >().

◆ predux_max< Packet8c >()

3967  {
3968  int8x8_t max = vpmax_s8(a, a);
3969  max = vpmax_s8(max, max);
3970  max = vpmax_s8(max, max);
3971  return vget_lane_s8(max, 0);
3972 }

References a, and Eigen::max().

◆ predux_max< Packet8d >()

1629  {
1630  __m256d lane0 = _mm512_extractf64x4_pd(a, 0);
1631  __m256d lane1 = _mm512_extractf64x4_pd(a, 1);
1632  __m256d res = _mm256_max_pd(lane0, lane1);
1633  res = _mm256_max_pd(res, _mm256_permute2f128_pd(res, res, 1));
1634  return pfirst(_mm256_max_pd(res, _mm256_shuffle_pd(res, res, 1)));
1635 }

References a, pfirst(), and res.

◆ predux_max< Packet8f >()

2010  {
2011  Packet8f tmp = _mm256_max_ps(a, _mm256_permute2f128_ps(a, a, 1));
2012  tmp = _mm256_max_ps(tmp, _mm256_shuffle_ps(tmp, tmp, _MM_SHUFFLE(1, 0, 3, 2)));
2013  return pfirst(_mm256_max_ps(tmp, _mm256_shuffle_ps(tmp, tmp, 1)));
2014 }

References a, pfirst(), and tmp.

Referenced by predux_max< Packet8h >().

◆ predux_max< Packet8h >()

2459  {
2460  Packet8f af = half2float(a);
2461  float reduced = predux_max<Packet8f>(af);
2462  return Eigen::half(reduced);
2463 }
EIGEN_STRONG_INLINE float predux_max< Packet8f >(const Packet8f &a)
Definition: AVX/PacketMath.h:2010

References a, half2float(), and predux_max< Packet8f >().

◆ predux_max< Packet8l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::predux_max< Packet8l > ( const Packet8l a)
1641  {
1642  return _mm512_reduce_max_epi64(a);
1643 }

References a.

◆ predux_max< Packet8s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::predux_max< Packet8s > ( const Packet8s a)
2697  {
2698  Packet8s pair, quad, octo;
2699 
2700  // pair = { Max(a0,a4), Max(a1,a5), Max(a2,a6), Max(a3,a7) }
2701  pair = vec_max(a, vec_sld(a, a, 8));
2702 
2703  // quad = { Max(a0, a4, a2, a6), Max(a1, a5, a3, a7) }
2704  quad = vec_max(pair, vec_sld(pair, pair, 4));
2705 
2706  // octo = { Max(a0, a4, a2, a6, a1, a5, a3, a7) }
2707  octo = vec_max(quad, vec_sld(quad, quad, 2));
2708  return pfirst(octo);
2709 }

References a, and pfirst().

◆ predux_max< Packet8uc >()

4032  {
4033  uint8x8_t max = vpmax_u8(a, a);
4034  max = vpmax_u8(max, max);
4035  max = vpmax_u8(max, max);
4036  return vget_lane_u8(max, 0);
4037 }

References a, and Eigen::max().

◆ predux_max< Packet8us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::predux_max< Packet8us > ( const Packet8us a)
2712  {
2713  Packet8us pair, quad, octo;
2714 
2715  // pair = { Max(a0,a4), Max(a1,a5), Max(a2,a6), Max(a3,a7) }
2716  pair = vec_max(a, vec_sld(a, a, 8));
2717 
2718  // quad = { Max(a0, a4, a2, a6), Max(a1, a5, a3, a7) }
2719  quad = vec_max(pair, vec_sld(pair, pair, 4));
2720 
2721  // octo = { Max(a0, a4, a2, a6, a1, a5, a3, a7) }
2722  octo = vec_max(quad, vec_sld(quad, quad, 2));
2723  return pfirst(octo);
2724 }

References a, and pfirst().

◆ predux_max< PacketXf >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::predux_max< PacketXf > ( const PacketXf &  a)
639  {
640  return svmaxv_f32(svptrue_b32(), a);
641 }

References a.

◆ predux_max< PacketXi >()

template<>
EIGEN_STRONG_INLINE numext::int32_t Eigen::internal::predux_max< PacketXi > ( const PacketXi &  a)
307  {
308  return svmaxv_s32(svptrue_b32(), a);
309 }

References a.

◆ predux_min() [1/2]

template<typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits<Packet>::type Eigen::internal::predux_min ( const Packet a)
inline
Returns
the min of the elements of a
1245  {
1246  typedef typename unpacket_traits<Packet>::type Scalar;
1247  return predux_helper(a, EIGEN_BINARY_OP_NAN_PROPAGATION(Scalar, (pmin<PropagateFast, Scalar>)));
1248 }

References a, EIGEN_BINARY_OP_NAN_PROPAGATION, and predux_helper().

Referenced by packetmath_notcomplex().

◆ predux_min() [2/2]

template<int NaNPropagation, typename Packet >
EIGEN_DEVICE_FUNC unpacket_traits<Packet>::type Eigen::internal::predux_min ( const Packet a)
inline
1251  {
1252  typedef typename unpacket_traits<Packet>::type Scalar;
1253  return predux_helper(a, EIGEN_BINARY_OP_NAN_PROPAGATION(Scalar, (pmin<NaNPropagation, Scalar>)));
1254 }

References a, EIGEN_BINARY_OP_NAN_PROPAGATION, and predux_helper().

◆ predux_min< Packet16bf >()

2933  {
2934  return static_cast<bfloat16>(predux_min<Packet16f>(Bf16ToF32(from)));
2935 }
EIGEN_STRONG_INLINE float predux_min< Packet16f >(const Packet16f &a)
Definition: AVX512/PacketMath.h:1591

References Bf16ToF32(), and predux_min< Packet16f >().

◆ predux_min< Packet16c >()

2647  {
2648  Packet16c pair, quad, octo, result;
2649 
2650  pair = vec_min(a, vec_sld(a, a, 8));
2651  quad = vec_min(pair, vec_sld(pair, pair, 4));
2652  octo = vec_min(quad, vec_sld(quad, quad, 2));
2653  result = vec_min(octo, vec_sld(octo, octo, 1));
2654 
2655  return pfirst(result);
2656 }

References a, and pfirst().

◆ predux_min< Packet16f >()

1591  {
1592  __m128 lane0 = _mm512_extractf32x4_ps(a, 0);
1593  __m128 lane1 = _mm512_extractf32x4_ps(a, 1);
1594  __m128 lane2 = _mm512_extractf32x4_ps(a, 2);
1595  __m128 lane3 = _mm512_extractf32x4_ps(a, 3);
1596  __m128 res = _mm_min_ps(_mm_min_ps(lane0, lane1), _mm_min_ps(lane2, lane3));
1597  res = _mm_min_ps(res, _mm_permute_ps(res, _MM_SHUFFLE(0, 0, 3, 2)));
1598  return pfirst(_mm_min_ps(res, _mm_permute_ps(res, _MM_SHUFFLE(0, 0, 0, 1))));
1599 }

References a, pfirst(), and res.

Referenced by predux_min< Packet16bf >(), and predux_min< Packet16h >().

◆ predux_min< Packet16h >()

2428  {
2429  Packet16f af = half2float(a);
2430  float reduced = predux_min<Packet16f>(af);
2431  return Eigen::half(reduced);
2432 }

References a, half2float(), and predux_min< Packet16f >().

◆ predux_min< Packet16i >()

1609  {
1610  return _mm512_reduce_min_epi32(a);
1611 }

References a.

◆ predux_min< Packet16uc >()

2659  {
2660  Packet16uc pair, quad, octo, result;
2661 
2662  pair = vec_min(a, vec_sld(a, a, 8));
2663  quad = vec_min(pair, vec_sld(pair, pair, 4));
2664  octo = vec_min(quad, vec_sld(quad, quad, 2));
2665  result = vec_min(octo, vec_sld(octo, octo, 1));
2666 
2667  return pfirst(result);
2668 }

References a, and pfirst().

◆ predux_min< Packet2d >()

2073  {
2074  return pfirst(__lsx_vfmin_d(a, preverse(a)));
2075 }

References a, pfirst(), and preverse().

◆ predux_min< Packet2f >()

3770  {
3771  return vget_lane_f32(vpmin_f32(a, a), 0);
3772 }

References a.

◆ predux_min< Packet2i >()

template<>
EIGEN_STRONG_INLINE int32_t Eigen::internal::predux_min< Packet2i > ( const Packet2i a)
3901  {
3902  return vget_lane_s32(vpmin_s32(a, a), 0);
3903 }

References a.

◆ predux_min< Packet2l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::predux_min< Packet2l > ( const Packet2l a)
2095  {
2096  return pfirst((Packet2l)__lsx_vmin_d(a, preverse(a)));
2097 }

References a, pfirst(), and preverse().

◆ predux_min< Packet2ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::predux_min< Packet2ui > ( const Packet2ui a)
3910  {
3911  return vget_lane_u32(vpmin_u32(a, a), 0);
3912 }

References a.

◆ predux_min< Packet2ul >()

template<>
EIGEN_STRONG_INLINE uint64_t Eigen::internal::predux_min< Packet2ul > ( const Packet2ul a)
2117  {
2118  return pfirst((Packet2ul)__lsx_vmin_du(a, preverse(a)));
2119 }

References a, pfirst(), and preverse().

◆ predux_min< Packet4bf >()

4993  {
4994  return static_cast<bfloat16>(predux_min<Packet4f>(Bf16ToF32(a)));
4995 }
EIGEN_STRONG_INLINE float predux_min< Packet4f >(const Packet4f &a)
Definition: AltiVec/PacketMath.h:2599

References a, Bf16ToF32(), and predux_min< Packet4f >().

◆ predux_min< Packet4c >()

3780  {
3781  const int8x8_t a_dup = vreinterpret_s8_s32(vdup_n_s32(a));
3782  int8x8_t min = vpmin_s8(a_dup, a_dup);
3783  min = vpmin_s8(min, min);
3784  return vget_lane_s8(min, 0);
3785 }

References a, and Eigen::min().

◆ predux_min< Packet4d >()

2004  {
2005  Packet4d tmp = _mm256_min_pd(a, _mm256_permute2f128_pd(a, a, 1));
2006  return pfirst(_mm256_min_pd(tmp, _mm256_shuffle_pd(tmp, tmp, 1)));
2007 }

References a, pfirst(), and tmp.

◆ predux_min< Packet4f >()

2599  {
2600  return predux_min4<Packet4f>(a);
2601 }

References a.

Referenced by predux_min< Packet4bf >(), and predux_min< Packet8bf >().

◆ predux_min< Packet4i >()

2604  {
2605  return predux_min4<Packet4i>(a);
2606 }

References a.

◆ predux_min< Packet4s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::predux_min< Packet4s > ( const Packet4s a)
3877  {
3878  const int16x4_t min = vpmin_s16(a, a);
3879  return vget_lane_s16(vpmin_s16(min, min), 0);
3880 }

References a, and Eigen::min().

◆ predux_min< Packet4uc >()

3813  {
3814  const uint8x8_t a_dup = vreinterpret_u8_u32(vdup_n_u32(a));
3815  uint8x8_t min = vpmin_u8(a_dup, a_dup);
3816  min = vpmin_u8(min, min);
3817  return vget_lane_u8(min, 0);
3818 }

References a, and Eigen::min().

◆ predux_min< Packet4ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::predux_min< Packet4ui > ( const Packet4ui a)
2112  {
2113  Packet4ui tmp = __lsx_vmin_wu(a, __lsx_vshuf4i_w((__m128i)a, 0x4E));
2114  return pfirst((Packet4ui)__lsx_vmin_wu(tmp, __lsx_vshuf4i_w((__m128i)tmp, 0xB1)));
2115 }

References a, pfirst(), and tmp.

◆ predux_min< Packet4us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::predux_min< Packet4us > ( const Packet4us a)
3889  {
3890  const uint16x4_t min = vpmin_u16(a, a);
3891  return vget_lane_u16(vpmin_u16(min, min), 0);
3892 }

References a, and Eigen::min().

◆ predux_min< Packet8bf >()

2609  {
2610  float redux_even = predux_min<Packet4f>(Bf16ToF32Even(a));
2611  float redux_odd = predux_min<Packet4f>(Bf16ToF32Odd(a));
2612  float f32_result = (std::min)(redux_even, redux_odd);
2613  return bfloat16(f32_result);
2614 }

References a, Bf16ToF32Even(), Bf16ToF32Odd(), min, and predux_min< Packet4f >().

◆ predux_min< Packet8c >()

3797  {
3798  int8x8_t min = vpmin_s8(a, a);
3799  min = vpmin_s8(min, min);
3800  min = vpmin_s8(min, min);
3801  return vget_lane_s8(min, 0);
3802 }

References a, and Eigen::min().

◆ predux_min< Packet8d >()

1601  {
1602  __m256d lane0 = _mm512_extractf64x4_pd(a, 0);
1603  __m256d lane1 = _mm512_extractf64x4_pd(a, 1);
1604  __m256d res = _mm256_min_pd(lane0, lane1);
1605  res = _mm256_min_pd(res, _mm256_permute2f128_pd(res, res, 1));
1606  return pfirst(_mm256_min_pd(res, _mm256_shuffle_pd(res, res, 1)));
1607 }

References a, pfirst(), and res.

◆ predux_min< Packet8f >()

1998  {
1999  Packet8f tmp = _mm256_min_ps(a, _mm256_permute2f128_ps(a, a, 1));
2000  tmp = _mm256_min_ps(tmp, _mm256_shuffle_ps(tmp, tmp, _MM_SHUFFLE(1, 0, 3, 2)));
2001  return pfirst(_mm256_min_ps(tmp, _mm256_shuffle_ps(tmp, tmp, 1)));
2002 }

References a, pfirst(), and tmp.

Referenced by predux_min< Packet8h >().

◆ predux_min< Packet8h >()

2466  {
2467  Packet8f af = half2float(a);
2468  float reduced = predux_min<Packet8f>(af);
2469  return Eigen::half(reduced);
2470 }
EIGEN_STRONG_INLINE float predux_min< Packet8f >(const Packet8f &a)
Definition: AVX/PacketMath.h:1998

References a, half2float(), and predux_min< Packet8f >().

◆ predux_min< Packet8l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::predux_min< Packet8l > ( const Packet8l a)
1613  {
1614  return _mm512_reduce_min_epi64(a);
1615 }

References a.

◆ predux_min< Packet8s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::predux_min< Packet8s > ( const Packet8s a)
2617  {
2618  Packet8s pair, quad, octo;
2619 
2620  // pair = { Min(a0,a4), Min(a1,a5), Min(a2,a6), Min(a3,a7) }
2621  pair = vec_min(a, vec_sld(a, a, 8));
2622 
2623  // quad = { Min(a0, a4, a2, a6), Min(a1, a5, a3, a7) }
2624  quad = vec_min(pair, vec_sld(pair, pair, 4));
2625 
2626  // octo = { Min(a0, a4, a2, a6, a1, a5, a3, a7) }
2627  octo = vec_min(quad, vec_sld(quad, quad, 2));
2628  return pfirst(octo);
2629 }

References a, and pfirst().

◆ predux_min< Packet8uc >()

3862  {
3863  uint8x8_t min = vpmin_u8(a, a);
3864  min = vpmin_u8(min, min);
3865  min = vpmin_u8(min, min);
3866  return vget_lane_u8(min, 0);
3867 }

References a, and Eigen::min().

◆ predux_min< Packet8us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::predux_min< Packet8us > ( const Packet8us a)
2632  {
2633  Packet8us pair, quad, octo;
2634 
2635  // pair = { Min(a0,a4), Min(a1,a5), Min(a2,a6), Min(a3,a7) }
2636  pair = vec_min(a, vec_sld(a, a, 8));
2637 
2638  // quad = { Min(a0, a4, a2, a6), Min(a1, a5, a3, a7) }
2639  quad = vec_min(pair, vec_sld(pair, pair, 4));
2640 
2641  // octo = { Min(a0, a4, a2, a6, a1, a5, a3, a7) }
2642  octo = vec_min(quad, vec_sld(quad, quad, 2));
2643  return pfirst(octo);
2644 }

References a, and pfirst().

◆ predux_min< PacketXf >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::predux_min< PacketXf > ( const PacketXf &  a)
634  {
635  return svminv_f32(svptrue_b32(), a);
636 }

References a.

◆ predux_min< PacketXi >()

template<>
EIGEN_STRONG_INLINE numext::int32_t Eigen::internal::predux_min< PacketXi > ( const PacketXi &  a)
302  {
303  return svminv_s32(svptrue_b32(), a);
304 }

References a.

◆ predux_mul()

◆ predux_mul< Packet16b >()

1941  {
1942  Packet4i tmp = _mm_and_si128(a, _mm_unpackhi_epi64(a, a));
1943  return ((pfirst<Packet4i>(tmp) == 0x01010101) && (pfirst<Packet4i>(_mm_shuffle_epi32(tmp, 1)) == 0x01010101));
1944 }

References a, pfirst< Packet4i >(), and tmp.

◆ predux_mul< Packet16bf >()

2928  {
2929  return static_cast<bfloat16>(predux_mul<Packet16f>(Bf16ToF32(from)));
2930 }
EIGEN_STRONG_INLINE float predux_mul< Packet16f >(const Packet16f &a)
Definition: AVX512/PacketMath.h:1536

References Bf16ToF32(), and predux_mul< Packet16f >().

◆ predux_mul< Packet16c >()

2566  {
2567  Packet16c pair, quad, octo, result;
2568 
2569  pair = vec_mul(a, vec_sld(a, a, 8));
2570  quad = vec_mul(pair, vec_sld(pair, pair, 4));
2571  octo = vec_mul(quad, vec_sld(quad, quad, 2));
2572  result = vec_mul(octo, vec_sld(octo, octo, 1));
2573 
2574  return pfirst(result);
2575 }

References a, and pfirst().

◆ predux_mul< Packet16f >()

1536  {
1537 // #ifdef EIGEN_VECTORIZE_AVX512DQ
1538 #if 0
1539  Packet8f lane0 = _mm512_extractf32x8_ps(a, 0);
1540  Packet8f lane1 = _mm512_extractf32x8_ps(a, 1);
1541  Packet8f res = pmul(lane0, lane1);
1542  res = pmul(res, _mm256_permute2f128_ps(res, res, 1));
1543  res = pmul(res, _mm_permute_ps(res, _MM_SHUFFLE(0, 0, 3, 2)));
1544  return pfirst(pmul(res, _mm_permute_ps(res, _MM_SHUFFLE(0, 0, 0, 1))));
1545 #else
1546  __m128 lane0 = _mm512_extractf32x4_ps(a, 0);
1547  __m128 lane1 = _mm512_extractf32x4_ps(a, 1);
1548  __m128 lane2 = _mm512_extractf32x4_ps(a, 2);
1549  __m128 lane3 = _mm512_extractf32x4_ps(a, 3);
1550  __m128 res = pmul(pmul(lane0, lane1), pmul(lane2, lane3));
1551  res = pmul(res, _mm_permute_ps(res, _MM_SHUFFLE(0, 0, 3, 2)));
1552  return pfirst(pmul(res, _mm_permute_ps(res, _MM_SHUFFLE(0, 0, 0, 1))));
1553 #endif
1554 }

References a, pfirst(), pmul(), and res.

Referenced by predux_mul< Packet16bf >().

◆ predux_mul< Packet16h >()

2435  {
2436  Packet16f from_float = half2float(from);
2437  return half(predux_mul(from_float));
2438 }
EIGEN_DEVICE_FUNC unpacket_traits< Packet >::type predux_mul(const Packet &a)
Definition: GenericPacketMath.h:1238

References half2float(), and predux_mul().

◆ predux_mul< Packet16i >()

1564  {
1565  return _mm512_reduce_mul_epi32(a);
1566 }

References a.

◆ predux_mul< Packet16uc >()

2578  {
2579  Packet16uc pair, quad, octo, result;
2580 
2581  pair = vec_mul(a, vec_sld(a, a, 8));
2582  quad = vec_mul(pair, vec_sld(pair, pair, 4));
2583  octo = vec_mul(quad, vec_sld(quad, quad, 2));
2584  result = vec_mul(octo, vec_sld(octo, octo, 1));
2585 
2586  return pfirst(result);
2587 }

References a, and pfirst().

◆ predux_mul< Packet1cd >()

template<>
EIGEN_STRONG_INLINE std::complex< double > Eigen::internal::predux_mul< Packet1cd > ( const Packet1cd a)
420  {
421  return pfirst(a);
422 }

References a, and pfirst().

◆ predux_mul< Packet1cf >()

template<>
EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::predux_mul< Packet1cf > ( const Packet1cf a)
421  {
422  std::complex<float> s;
423  vst1_f32((float*)&s, a.v);
424  return s;
425 }

References a, and s.

◆ predux_mul< Packet2cd >()

template<>
EIGEN_STRONG_INLINE std::complex<double> Eigen::internal::predux_mul< Packet2cd > ( const Packet2cd a)
394  {
395  return predux(pmul(Packet1cd(_mm256_extractf128_pd(a.v, 0)), Packet1cd(_mm256_extractf128_pd(a.v, 1))));
396 }
EIGEN_STRONG_INLINE Packet2cd pmul(const Packet2cd &a, const Packet2cd &b)
Definition: AVX/Complex.h:290

References a, pmul(), and predux().

◆ predux_mul< Packet2cf >()

template<>
EIGEN_STRONG_INLINE std::complex< float > Eigen::internal::predux_mul< Packet2cf > ( const Packet2cf a)
318  {
319  Packet4f b;
320  Packet2cf prod;
321  b = vec_sld(a.v, a.v, 8);
322  prod = pmul<Packet2cf>(a, Packet2cf(b));
323 
324  return pfirst<Packet2cf>(prod);
325 }
EIGEN_STRONG_INLINE Packet2cf pmul< Packet2cf >(const Packet2cf &a, const Packet2cf &b)
Definition: LSX/Complex.h:95

References a, b, pfirst< Packet2cf >(), pmul< Packet2cf >(), and Eigen::prod().

◆ predux_mul< Packet2d >()

2019  {
2020  return pfirst<Packet2d>(__lsx_vfmul_d(a, preverse(a)));
2021 }

References a, pfirst< Packet2d >(), and preverse().

◆ predux_mul< Packet2f >()

3662  {
3663  return vget_lane_f32(a, 0) * vget_lane_f32(a, 1);
3664 }

References a.

◆ predux_mul< Packet2i >()

template<>
EIGEN_STRONG_INLINE int32_t Eigen::internal::predux_mul< Packet2i > ( const Packet2i a)
3734  {
3735  return vget_lane_s32(a, 0) * vget_lane_s32(a, 1);
3736 }

References a.

◆ predux_mul< Packet2l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::predux_mul< Packet2l > ( const Packet2l a)
2041  {
2042  return (int64_t)__lsx_vpickve2gr_d(__lsx_vmulwev_q_d(a, preverse(a)), 0);
2043 }

References a, and preverse().

◆ predux_mul< Packet2ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::predux_mul< Packet2ui > ( const Packet2ui a)
3742  {
3743  return vget_lane_u32(a, 0) * vget_lane_u32(a, 1);
3744 }

References a.

◆ predux_mul< Packet2ul >()

template<>
EIGEN_STRONG_INLINE uint64_t Eigen::internal::predux_mul< Packet2ul > ( const Packet2ul a)
2063  {
2064  return (uint64_t)__lsx_vpickve2gr_d(__lsx_vmulwev_q_du(a, preverse(a)), 0);
2065 }

References a, and preverse().

◆ predux_mul< Packet4bf >()

4998  {
4999  return static_cast<bfloat16>(predux_mul<Packet4f>(Bf16ToF32(a)));
5000 }
EIGEN_STRONG_INLINE float predux_mul< Packet4f >(const Packet4f &a)
Definition: AltiVec/PacketMath.h:2522

References a, Bf16ToF32(), and predux_mul< Packet4f >().

◆ predux_mul< Packet4c >()

3670  {
3671  int8x8_t prod = vreinterpret_s8_s32(vdup_n_s32(a));
3672  prod = vmul_s8(prod, vrev16_s8(prod));
3673  return vget_lane_s8(prod, 0) * vget_lane_s8(prod, 2);
3674 }

References a, and Eigen::prod().

◆ predux_mul< Packet4cd >()

template<>
EIGEN_STRONG_INLINE std::complex<double> Eigen::internal::predux_mul< Packet4cd > ( const Packet4cd a)
376  {
377  return predux_mul(pmul(Packet2cd(_mm512_extractf64x4_pd(a.v, 0)), Packet2cd(_mm512_extractf64x4_pd(a.v, 1))));
378 }

References a, pmul(), and predux_mul().

◆ predux_mul< Packet4cf >()

template<>
EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::predux_mul< Packet4cf > ( const Packet4cf a)
208  {
209  return predux_mul(pmul(Packet2cf(_mm256_extractf128_ps(a.v, 0)), Packet2cf(_mm256_extractf128_ps(a.v, 1))));
210 }

References a, pmul(), and predux_mul().

◆ predux_mul< Packet4d >()

1991  {
1992  Packet4d tmp;
1993  tmp = _mm256_mul_pd(a, _mm256_permute2f128_pd(a, a, 1));
1994  return pfirst(_mm256_mul_pd(tmp, _mm256_shuffle_pd(tmp, tmp, 1)));
1995 }

References a, pfirst(), and tmp.

◆ predux_mul< Packet4f >()

2522  {
2523  Packet4f prod;
2524  prod = pmul(a, vec_sld(a, a, 8));
2525  return pfirst(pmul(prod, vec_sld(prod, prod, 4)));
2526 }

References a, pfirst(), pmul(), and Eigen::prod().

Referenced by predux_mul< Packet4bf >(), and predux_mul< Packet8bf >().

◆ predux_mul< Packet4i >()

2529  {
2530  EIGEN_ALIGN16 int aux[4];
2531  pstore(aux, a);
2532  return aux[0] * aux[1] * aux[2] * aux[3];
2533 }

References a, EIGEN_ALIGN16, and pstore().

◆ predux_mul< Packet4s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::predux_mul< Packet4s > ( const Packet4s a)
3702  {
3703  const int16x4_t prod = vmul_s16(a, vrev32_s16(a));
3704  return vget_lane_s16(prod, 0) * vget_lane_s16(prod, 2);
3705 }

References a, and Eigen::prod().

◆ predux_mul< Packet4uc >()

3686  {
3687  uint8x8_t prod = vreinterpret_u8_u32(vdup_n_u32(a));
3688  prod = vmul_u8(prod, vrev16_u8(prod));
3689  return vget_lane_u8(prod, 0) * vget_lane_u8(prod, 2);
3690 }

References a, and Eigen::prod().

◆ predux_mul< Packet4ui >()

template<>
EIGEN_STRONG_INLINE uint32_t Eigen::internal::predux_mul< Packet4ui > ( const Packet4ui a)
2058  {
2059  Packet2ul tmp = __lsx_vmulwev_d_wu(a, preverse(a));
2060  return (uint32_t)__lsx_vpickve2gr_d(__lsx_vmulwev_q_d(tmp, preverse(tmp)), 0);
2061 }

References a, preverse(), and tmp.

◆ predux_mul< Packet4us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::predux_mul< Packet4us > ( const Packet4us a)
3718  {
3719  const uint16x4_t prod = vmul_u16(a, vrev32_u16(a));
3720  return vget_lane_u16(prod, 0) * vget_lane_u16(prod, 2);
3721 }

References a, and Eigen::prod().

◆ predux_mul< Packet8bf >()

2558  {
2559  float redux_even = predux_mul<Packet4f>(Bf16ToF32Even(a));
2560  float redux_odd = predux_mul<Packet4f>(Bf16ToF32Odd(a));
2561  float f32_result = redux_even * redux_odd;
2562  return bfloat16(f32_result);
2563 }

References a, Bf16ToF32Even(), Bf16ToF32Odd(), and predux_mul< Packet4f >().

◆ predux_mul< Packet8c >()

3676  {
3677  int8x8_t prod = vmul_s8(a, vrev16_s8(a));
3678  prod = vmul_s8(prod, vrev32_s8(prod));
3679  return vget_lane_s8(prod, 0) * vget_lane_s8(prod, 4);
3680 }

References a, and Eigen::prod().

◆ predux_mul< Packet8cf >()

template<>
EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::predux_mul< Packet8cf > ( const Packet8cf a)
182  {
183  return predux_mul(pmul(Packet4cf(extract256<0>(a.v)), Packet4cf(extract256<1>(a.v))));
184 }

References a, pmul(), and predux_mul().

◆ predux_mul< Packet8d >()

1556  {
1557  __m256d lane0 = _mm512_extractf64x4_pd(a, 0);
1558  __m256d lane1 = _mm512_extractf64x4_pd(a, 1);
1559  __m256d res = pmul(lane0, lane1);
1560  res = pmul(res, _mm256_permute2f128_pd(res, res, 1));
1561  return pfirst(pmul(res, _mm256_shuffle_pd(res, res, 1)));
1562 }

References a, pfirst(), pmul(), and res.

◆ predux_mul< Packet8f >()

1984  {
1985  Packet8f tmp;
1986  tmp = _mm256_mul_ps(a, _mm256_permute2f128_ps(a, a, 1));
1987  tmp = _mm256_mul_ps(tmp, _mm256_shuffle_ps(tmp, tmp, _MM_SHUFFLE(1, 0, 3, 2)));
1988  return pfirst(_mm256_mul_ps(tmp, _mm256_shuffle_ps(tmp, tmp, 1)));
1989 }

References a, pfirst(), and tmp.

Referenced by predux_mul< Packet8h >().

◆ predux_mul< Packet8h >()

2473  {
2474  Packet8f af = half2float(a);
2475  float reduced = predux_mul<Packet8f>(af);
2476  return Eigen::half(reduced);
2477 }
EIGEN_STRONG_INLINE float predux_mul< Packet8f >(const Packet8f &a)
Definition: AVX/PacketMath.h:1984

References a, half2float(), and predux_mul< Packet8f >().

◆ predux_mul< Packet8l >()

template<>
EIGEN_STRONG_INLINE int64_t Eigen::internal::predux_mul< Packet8l > ( const Packet8l a)
1585  {
1586  return _mm512_reduce_mul_epi64(a);
1587 }

References a.

◆ predux_mul< Packet8s >()

template<>
EIGEN_STRONG_INLINE int16_t Eigen::internal::predux_mul< Packet8s > ( const Packet8s a)
2536  {
2537  Packet8s pair, quad, octo;
2538 
2539  pair = vec_mul(a, vec_sld(a, a, 8));
2540  quad = vec_mul(pair, vec_sld(pair, pair, 4));
2541  octo = vec_mul(quad, vec_sld(quad, quad, 2));
2542 
2543  return pfirst(octo);
2544 }

References a, and pfirst().

◆ predux_mul< Packet8uc >()

3692  {
3693  uint8x8_t prod = vmul_u8(a, vrev16_u8(a));
3694  prod = vmul_u8(prod, vrev32_u8(prod));
3695  return vget_lane_u8(prod, 0) * vget_lane_u8(prod, 4);
3696 }

References a, and Eigen::prod().

◆ predux_mul< Packet8us >()

template<>
EIGEN_STRONG_INLINE uint16_t Eigen::internal::predux_mul< Packet8us > ( const Packet8us a)
2547  {
2548  Packet8us pair, quad, octo;
2549 
2550  pair = vec_mul(a, vec_sld(a, a, 8));
2551  quad = vec_mul(pair, vec_sld(pair, pair, 4));
2552  octo = vec_mul(quad, vec_sld(quad, quad, 2));
2553 
2554  return pfirst(octo);
2555 }

References a, and pfirst().

◆ predux_mul< PacketXf >()

template<>
EIGEN_STRONG_INLINE float Eigen::internal::predux_mul< PacketXf > ( const PacketXf &  a)
602  {
603  EIGEN_STATIC_ASSERT((EIGEN_ARM64_SVE_VL % 128 == 0), EIGEN_INTERNAL_ERROR_PLEASE_FILE_A_BUG_REPORT);
604  // Multiply the vector by its reverse
605  svfloat32_t prod = svmul_f32_x(svptrue_b32(), a, svrev_f32(a));
606  svfloat32_t half_prod;
607 
608  // Extract the high half of the vector. Depending on the VL more reductions need to be done
609  if (EIGEN_ARM64_SVE_VL >= 2048) {
610  half_prod = svtbl_f32(prod, svindex_u32(32, 1));
611  prod = svmul_f32_x(svptrue_b32(), prod, half_prod);
612  }
613  if (EIGEN_ARM64_SVE_VL >= 1024) {
614  half_prod = svtbl_f32(prod, svindex_u32(16, 1));
615  prod = svmul_f32_x(svptrue_b32(), prod, half_prod);
616  }
617  if (EIGEN_ARM64_SVE_VL >= 512) {
618  half_prod = svtbl_f32(prod, svindex_u32(8, 1));
619  prod = svmul_f32_x(svptrue_b32(), prod, half_prod);
620  }
621  if (EIGEN_ARM64_SVE_VL >= 256) {
622  half_prod = svtbl_f32(prod, svindex_u32(4, 1));
623  prod = svmul_f32_x(svptrue_b32(), prod, half_prod);
624  }
625  // Last reduction
626  half_prod = svtbl_f32(prod, svindex_u32(2, 1));
627  prod = svmul_f32_x(svptrue_b32(), prod, half_prod);
628 
629  // The reduction is done to the first element.
630  return pfirst<PacketXf>(prod);
631 }
EIGEN_STRONG_INLINE float pfirst< PacketXf >(const PacketXf &a)
Definition: SVE/PacketMath.h:571

References a, EIGEN_STATIC_ASSERT, pfirst< PacketXf >(), and Eigen::prod().

◆ predux_mul< PacketXi >()

template<>
EIGEN_STRONG_INLINE numext::int32_t Eigen::internal::predux_mul< PacketXi > ( const PacketXi &  a)
269  {
270  EIGEN_STATIC_ASSERT((EIGEN_ARM64_SVE_VL % 128 == 0), EIGEN_INTERNAL_ERROR_PLEASE_FILE_A_BUG_REPORT);
271 
272  // Multiply the vector by its reverse
273  svint32_t prod = svmul_s32_x(svptrue_b32(), a, svrev_s32(a));
274  svint32_t half_prod;
275 
276  // Extract the high half of the vector. Depending on the VL more reductions need to be done
277  if (EIGEN_ARM64_SVE_VL >= 2048) {
278  half_prod = svtbl_s32(prod, svindex_u32(32, 1));
279  prod = svmul_s32_x(svptrue_b32(), prod, half_prod);
280  }
281  if (EIGEN_ARM64_SVE_VL >= 1024) {
282  half_prod = svtbl_s32(prod, svindex_u32(16, 1));
283  prod = svmul_s32_x(svptrue_b32(), prod, half_prod);
284  }
285  if (EIGEN_ARM64_SVE_VL >= 512) {
286  half_prod = svtbl_s32(prod, svindex_u32(8, 1));
287  prod = svmul_s32_x(svptrue_b32(), prod, half_prod);
288  }
289  if (EIGEN_ARM64_SVE_VL >= 256) {
290  half_prod = svtbl_s32(prod, svindex_u32(4, 1));
291  prod = svmul_s32_x(svptrue_b32(), prod, half_prod);
292  }
293  // Last reduction
294  half_prod = svtbl_s32(prod, svindex_u32(2, 1));
295  prod = svmul_s32_x(svptrue_b32(), prod, half_prod);
296 
297  // The reduction is done to the first element.
298  return pfirst<PacketXi>(prod);
299 }
EIGEN_STRONG_INLINE numext::int32_t pfirst< PacketXi >(const PacketXi &a)
Definition: SVE/PacketMath.h:248

References a, EIGEN_STATIC_ASSERT, pfirst< PacketXi >(), and Eigen::prod().

◆ preduxVecResults()

template<Index num_acc>
EIGEN_ALWAYS_INLINE void Eigen::internal::preduxVecResults ( Packet4f(&)  acc[num_acc][4])
586  {
588  for (Index k = 0; k < num_acc; k += 4) {
589  preduxVecResults2<num_acc>(acc, k + 0);
590  if (num_acc > (k + 2)) {
591  preduxVecResults2<num_acc>(acc, k + 2);
592  acc[k + 0][0] = reinterpret_cast<Packet4f>(
593  vec_mergeh(reinterpret_cast<Packet2ul>(acc[k + 0][0]), reinterpret_cast<Packet2ul>(acc[k + 2][0])));
594  }
595  }
596 }

References BFLOAT16_UNROLL, and k.

◆ preduxVecResults2()

template<Index num_acc>
EIGEN_ALWAYS_INLINE void Eigen::internal::preduxVecResults2 ( Packet4f(&)  acc[num_acc][4],
Index  k 
)
566  {
567  if (num_acc > (k + 1)) {
568  acc[k][0] = vec_mergeh(acc[k][0], acc[k + 1][0]);
569  acc[k][1] = vec_mergeo(acc[k][1], acc[k + 1][1]);
570  acc[k][2] = vec_mergel(acc[k][2], acc[k + 1][2]);
571  acc[k][3] = vec_perm(acc[k][3], acc[k + 1][3], p16uc_ELEMENT_VEC3);
572 
573  acc[k][0] = (acc[k][0] + acc[k][2]) + (acc[k][1] + acc[k][3]);
574  } else {
575  acc[k][0] = vec_mergeh(acc[k][0], acc[k][1]);
576  acc[k][0] += vec_mergel(acc[k][2], acc[k][3]);
577 #ifdef _BIG_ENDIAN
578  acc[k][0] += vec_sld(acc[k][0], acc[k][0], 12);
579 #else
580  acc[k][0] += vec_sld(acc[k][0], acc[k][0], 4);
581 #endif
582  }
583 }
static Packet16uc p16uc_ELEMENT_VEC3
Definition: MatrixProductMMAbfloat16.h:562

References k, and p16uc_ELEMENT_VEC3.

◆ prefetch()

template<typename Scalar >
EIGEN_DEVICE_FUNC void Eigen::internal::prefetch ( const Scalar addr)
inline

tries to do cache prefetching of addr

967  {
968 #if defined(EIGEN_HIP_DEVICE_COMPILE)
969  // do nothing
970 #elif defined(EIGEN_CUDA_ARCH)
971 #if defined(__LP64__) || EIGEN_OS_WIN64
972  // 64-bit pointer operand constraint for inlined asm
973  asm(" prefetch.L1 [ %1 ];" : "=l"(addr) : "l"(addr));
974 #else
975  // 32-bit pointer operand constraint for inlined asm
976  asm(" prefetch.L1 [ %1 ];" : "=r"(addr) : "r"(addr));
977 #endif
978 #elif (!EIGEN_COMP_MSVC) && (EIGEN_COMP_GNUC || EIGEN_COMP_CLANG || EIGEN_COMP_ICC)
979  __builtin_prefetch(addr);
980 #endif
981 }

Referenced by Eigen::internal::gebp_kernel< LhsScalar, RhsScalar, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::lhs_process_one_packet< nr, LhsProgress, RhsProgress, LhsScalar, RhsScalar, ResScalar, AccPacket, LhsPacket, RhsPacket, ResPacket, GEBPTraits, LinearMapper, DataMapper >::operator()(), Eigen::internal::BlasLinearMapper< Scalar, Index, AlignmentType >::prefetch(), Eigen::internal::blas_data_mapper< Scalar, Index, StorageOrder, AlignmentType, 1 >::prefetch(), Eigen::internal::blas_data_mapper< Scalar, Index, StorageOrder, AlignmentType, Incr >::prefetch(), and Eigen::internal::BlasLinearMapper< Scalar, Index, AlignmentType, Incr >::prefetch().

◆ prefetch< double >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< double > ( const double addr)
1750  {
1751  _mm_prefetch((SsePrefetchPtrType)(addr), _MM_HINT_T0);
1752 }
const char * SsePrefetchPtrType
Definition: SSE/PacketMath.h:1719

◆ prefetch< float >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< float > ( const float *  addr)
1854  {
1855  EIGEN_PPC_PREFETCH(addr);
1856 }
#define EIGEN_PPC_PREFETCH(ADDR)
Definition: AltiVec/PacketMath.h:154

References EIGEN_PPC_PREFETCH.

◆ prefetch< int >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< int > ( const int addr)
1858  {
1859  EIGEN_PPC_PREFETCH(addr);
1860 }

References EIGEN_PPC_PREFETCH.

◆ prefetch< int16_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< int16_t > ( const int16_t *  addr)
1844  {
1845  __builtin_prefetch(addr);
1846 }

◆ prefetch< int32_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< int32_t > ( const int32_t *  addr)
1848  {
1849  __builtin_prefetch(addr);
1850 }

◆ prefetch< int64_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< int64_t > ( const int64_t *  addr)
1852  {
1853  __builtin_prefetch(addr);
1854 }

◆ prefetch< int8_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< int8_t > ( const int8_t *  addr)
1840  {
1841  __builtin_prefetch(addr);
1842 }

◆ prefetch< numext::int32_t >()

76  {
77  svprfw(svptrue_b32(), addr, SV_PLDL1KEEP);
78 }

◆ prefetch< std::complex< double > >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< std::complex< double > > ( const std::complex< double > *  addr)
398  {
399  __builtin_prefetch(addr);
400 }

◆ prefetch< std::complex< float > >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< std::complex< float > > ( const std::complex< float > *  addr)
290  {
291  EIGEN_PPC_PREFETCH(addr);
292 }

References EIGEN_PPC_PREFETCH.

◆ prefetch< uint16_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< uint16_t > ( const uint16_t *  addr)
1860  {
1861  __builtin_prefetch(addr);
1862 }

◆ prefetch< uint32_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< uint32_t > ( const uint32_t *  addr)
1758  {
1759  _mm_prefetch((SsePrefetchPtrType)(addr), _MM_HINT_T0);
1760 }

◆ prefetch< uint64_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< uint64_t > ( const uint64_t *  addr)
1868  {
1869  __builtin_prefetch(addr);
1870 }

◆ prefetch< uint8_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::prefetch< uint8_t > ( const uint8_t *  addr)
1856  {
1857  __builtin_prefetch(addr);
1858 }

◆ preinterpret()

template<typename Target , typename Packet >
EIGEN_DEVICE_FUNC Target Eigen::internal::preinterpret ( const Packet a)
inline
Returns
reinterpret_cast<Target>(a)
257  {
259 }

References a, and run().

◆ preinterpret< Packet16c, Packet16uc >()

45  {
46  return (__m128i)a;
47 }

References a.

◆ preinterpret< Packet16f, Packet16i >()

167  {
168  return _mm512_castsi512_ps(a);
169 }

References a.

◆ preinterpret< Packet16f, Packet4f >()

217  {
218  return _mm512_castps128_ps512(a);
219 }

References a.

◆ preinterpret< Packet16f, Packet8d >()

187  {
188  return _mm512_castpd_ps(a);
189 }

References a.

◆ preinterpret< Packet16f, Packet8f >()

212  {
213  return _mm512_castps256_ps512(a);
214 }

References a.

◆ preinterpret< Packet16i, Packet16f >()

162  {
163  return _mm512_castps_si512(a);
164 }

References a.

◆ preinterpret< Packet16uc, Packet16c >()

69  {
70  return (__m128i)a;
71 }

References a.

◆ preinterpret< Packet2d, Packet2l >()

33  {
34  return (__m128d)((__m128i)a);
35 }

References a.

◆ preinterpret< Packet2d, Packet2ul >()

37  {
38  return (__m128d)((__m128i)a);
39 }

References a.

◆ preinterpret< Packet2d, Packet4d >()

183  {
184  return _mm256_castpd256_pd128(a);
185 }

References a.

◆ preinterpret< Packet2d, Packet4f >()

128  {
129  return _mm_castps_pd(a);
130 }

References a.

◆ preinterpret< Packet2d, Packet4i >()

41  {
42  return (__m128d)((__m128i)a);
43 }

References a.

◆ preinterpret< Packet2d, Packet8d >()

207  {
208  return _mm512_castpd512_pd128(a);
209 }

References a.

◆ preinterpret< Packet2f, Packet2i >()

79  {
80  return Packet2f(vreinterpret_f32_s32(a));
81 }

References a.

◆ preinterpret< Packet2f, Packet2ui >()

83  {
84  return Packet2f(vreinterpret_f32_u32(a));
85 }

References a.

◆ preinterpret< Packet2f, Packet4f >()

71  {
72  return Packet2f(vget_low_f32(a));
73 }

References a.

◆ preinterpret< Packet2i, Packet2f >()

139  {
140  return Packet2i(vreinterpret_s32_f32(a));
141 }

References a.

◆ preinterpret< Packet2i, Packet2ui >()

143  {
144  return Packet2i(vreinterpret_s32_u32(a));
145 }

References a.

◆ preinterpret< Packet2i, Packet4i >()

62  {
63  return Packet2i(vget_low_s32(a));
64 }

References a.

◆ preinterpret< Packet2l, Packet2d >()

65  {
66  return (__m128i)a;
67 }

References a.

◆ preinterpret< Packet2l, Packet2ul >()

173  {
174  return Packet2l(vreinterpretq_s64_u64(a));
175 }

References a.

◆ preinterpret< Packet2ui, Packet2f >()

156  {
157  return Packet2ui(vreinterpret_u32_f32(a));
158 }

References a.

◆ preinterpret< Packet2ui, Packet2i >()

160  {
161  return Packet2ui(vreinterpret_u32_s32(a));
162 }

References a.

◆ preinterpret< Packet2ui, Packet4ui >()

66  {
67  return Packet2ui(vget_low_u32(a));
68 }

References a.

◆ preinterpret< Packet2ul, Packet2d >()

85  {
86  return (__m128i)a;
87 }

References a.

◆ preinterpret< Packet2ul, Packet2l >()

89  {
90  return (__m128i)a;
91 }

References a.

◆ preinterpret< Packet4c, Packet16c >()

34  {
35  return preinterpret<Packet4c>(preinterpret<Packet8c>(a));
36 }

References a.

◆ preinterpret< Packet4c, Packet4uc >()

96  {
97  return static_cast<Packet4c>(a);
98 }

References a.

◆ preinterpret< Packet4c, Packet8c >()

30  {
31  return Packet4c(vget_lane_s32(vreinterpret_s32_s8(a), 0));
32 }

References a.

◆ preinterpret< Packet4d, Packet8d >()

202  {
203  return _mm512_castpd512_pd256(a);
204 }

References a.

◆ preinterpret< Packet4f, Packet16f >()

197  {
198  return _mm512_castps512_ps128(a);
199 }

References a.

◆ preinterpret< Packet4f, Packet2d >()

133  {
134  return _mm_castpd_ps(a);
135 }

References a.

◆ preinterpret< Packet4f, Packet4i >()

127  {
128  return reinterpret_cast<Packet4f>(a);
129 }

References a.

◆ preinterpret< Packet4f, Packet4ui >()

29  {
30  return (__m128)((__m128i)a);
31 }

References a.

◆ preinterpret< Packet4f, Packet8f >()

178  {
179  return _mm256_castps256_ps128(a);
180 }

References a.

◆ preinterpret< Packet4i, Packet16i >()

236  {
237  return _mm512_castsi512_si128(a);
238 }

References a.

◆ preinterpret< Packet4i, Packet2d >()

61  {
62  return (__m128i)a;
63 }

References a.

◆ preinterpret< Packet4i, Packet4f >()

122  {
123  return reinterpret_cast<Packet4i>(a);
124 }

References a.

◆ preinterpret< Packet4i, Packet4ui >()

57  {
58  return (__m128i)a;
59 }

References a.

◆ preinterpret< Packet4i, Packet8i >()

188  {
189  return _mm256_castsi256_si128(a);
190 }

References a.

◆ preinterpret< Packet4s, Packet4us >()

122  {
123  return Packet4s(vreinterpret_s16_u16(a));
124 }

References a.

◆ preinterpret< Packet4s, Packet8s >()

52  {
53  return Packet4s(vget_low_s16(a));
54 }

References a.

◆ preinterpret< Packet4uc, Packet16uc >()

47  {
48  return preinterpret<Packet4uc>(preinterpret<Packet8uc>(a));
49 }

References a.

◆ preinterpret< Packet4uc, Packet4c >()

109  {
110  return static_cast<Packet4uc>(a);
111 }

References a.

◆ preinterpret< Packet4uc, Packet8uc >()

43  {
44  return Packet4uc(vget_lane_u32(vreinterpret_u32_u8(a), 0));
45 }

References a.

◆ preinterpret< Packet4ui, Packet4f >()

77  {
78  return (__m128i)a;
79 }

References a.

◆ preinterpret< Packet4ui, Packet4i >()

81  {
82  return (__m128i)a;
83 }

References a.

◆ preinterpret< Packet4ui, Packet8ui >()

193  {
194  return _mm256_castsi256_si128(a);
195 }

References a.

◆ preinterpret< Packet4us, Packet4s >()

130  {
131  return Packet4us(vreinterpret_u16_s16(a));
132 }

References a.

◆ preinterpret< Packet4us, Packet8us >()

57  {
58  return Packet4us(vget_low_u16(a));
59 }

References a.

◆ preinterpret< Packet8bf, Packet16bf >()

246  {
247  return _mm256_castsi256_si128(a);
248 }

References a.

◆ preinterpret< Packet8c, Packet16c >()

26  {
27  return Packet8c(vget_low_s8(a));
28 }

References a.

◆ preinterpret< Packet8c, Packet8uc >()

100  {
101  return Packet8c(vreinterpret_s8_u8(a));
102 }

References a.

◆ preinterpret< Packet8d, Packet16f >()

172  {
173  return _mm512_castps_pd(a);
174 }

References a.

◆ preinterpret< Packet8d, Packet2d >()

227  {
228  return _mm512_castpd128_pd512(a);
229 }

References a.

◆ preinterpret< Packet8d, Packet4d >()

222  {
223  return _mm512_castpd256_pd512(a);
224 }

References a.

◆ preinterpret< Packet8d, Packet8l >()

177  {
178  return _mm512_castsi512_pd(a);
179 }

References a.

◆ preinterpret< Packet8f, Packet16f >()

192  {
193  return _mm512_castps512_ps256(a);
194 }

References a.

◆ preinterpret< Packet8f, Packet8i >()

161  {
162  return _mm256_castsi256_ps(a);
163 }

References a.

◆ preinterpret< Packet8h, Packet16h >()

241  {
242  return _mm256_castsi256_si128(a);
243 }

References a.

◆ preinterpret< Packet8i, Packet16i >()

232  {
233  return _mm512_castsi512_si256(a);
234 }

References a.

◆ preinterpret< Packet8i, Packet8f >()

156  {
157  return _mm256_castps_si256(a);
158 }

References a.

◆ preinterpret< Packet8i, Packet8ui >()

171  {
172  return Packet8i(a);
173 }

References a.

◆ preinterpret< Packet8l, Packet8d >()

182  {
183  return _mm512_castpd_si512(a);
184 }

References a.

◆ preinterpret< Packet8s, Packet8us >()

49  {
50  return (__m128i)a;
51 }

References a.

◆ preinterpret< Packet8uc, Packet16uc >()

39  {
40  return Packet8uc(vget_low_u8(a));
41 }

References a.

◆ preinterpret< Packet8uc, Packet8c >()

113  {
114  return Packet8uc(vreinterpret_u8_s8(a));
115 }

References a.

◆ preinterpret< Packet8ui, Packet8i >()

166  {
167  return Packet8ui(a);
168 }

References a.

◆ preinterpret< Packet8us, Packet8s >()

73  {
74  return (__m128i)a;
75 }

References a.

◆ preinterpret< PacketXf, PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::preinterpret< PacketXf, PacketXi > ( const PacketXi &  a)
40  {
41  return svreinterpret_f32_s32(a);
42 }

References a.

◆ preinterpret< PacketXi, PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::preinterpret< PacketXi, PacketXf > ( const PacketXf &  a)
45  {
46  return svreinterpret_s32_f32(a);
47 }

References a.

◆ preverse() [1/43]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::preverse ( const Packet a)
inline
Returns
the reversed elements of a
985  {
986  return a;
987 }

References a.

◆ preverse() [2/43]

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::preverse ( const Packet16b a)
1542  {
1543 #ifdef EIGEN_VECTORIZE_SSSE3
1544  __m128i mask = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
1545  return _mm_shuffle_epi8(a, mask);
1546 #else
1547  Packet16b tmp = _mm_shuffle_epi32(a, _MM_SHUFFLE(0, 1, 2, 3));
1548  tmp = _mm_shufflehi_epi16(_mm_shufflelo_epi16(tmp, _MM_SHUFFLE(2, 3, 0, 1)), _MM_SHUFFLE(2, 3, 0, 1));
1549  return _mm_or_si128(_mm_slli_epi16(tmp, 8), _mm_srli_epi16(tmp, 8));
1550 #endif
1551 }

References a, and tmp.

◆ preverse() [3/43]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::preverse ( const Packet16bf a)
2943  {
2944  __m256i m = _mm256_setr_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7,
2945  4, 5, 2, 3, 0, 1);
2946 
2947  Packet16bf res;
2948  // Swap hi and lo first because shuffle is in 128-bit lanes.
2949  res = _mm256_permute2x128_si256(a, a, 1);
2950  // Shuffle 8-bit values in src within 2*128-bit lanes.
2951  return _mm256_shuffle_epi8(res, m);
2952 }

References a, m, and res.

◆ preverse() [4/43]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::preverse ( const Packet16c a)
1923  {
1924  return vec_perm(a, a, p16uc_REVERSE8);
1925 }
static Packet16uc p16uc_REVERSE8
Definition: AltiVec/PacketMath.h:97

References a, and p16uc_REVERSE8.

◆ preverse() [5/43]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::preverse ( const Packet16f a)
1300  {
1301  return _mm512_permutexvar_ps(_mm512_set_epi32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), a);
1302 }

References a.

◆ preverse() [6/43]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::preverse ( const Packet16h a)
2441  {
2442  __m128i m = _mm_setr_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1);
2443  return _mm256_insertf128_si256(_mm256_castsi128_si256(_mm_shuffle_epi8(_mm256_extractf128_si256(a, 1), m)),
2444  _mm_shuffle_epi8(_mm256_extractf128_si256(a, 0), m), 1);
2445 }

References a, and m.

◆ preverse() [7/43]

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::preverse ( const Packet16i a)
1310  {
1311  return _mm512_permutexvar_epi32(_mm512_set_epi32(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), a);
1312 }

References a.

◆ preverse() [8/43]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::preverse ( const Packet16uc a)
1927  {
1928  return vec_perm(a, a, p16uc_REVERSE8);
1929 }

References a, and p16uc_REVERSE8.

◆ preverse() [9/43]

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::preverse ( const Packet1cd a)
410  {
411  return a;
412 }

References a.

◆ preverse() [10/43]

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::preverse ( const Packet1cf a)
390  {
391  return a;
392 }

References a.

◆ preverse() [11/43]

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::preverse ( const Packet2cd a)
383  {
384  __m256d result = _mm256_permute2f128_pd(a.v, a.v, 1);
385  return Packet2cd(result);
386 }

References a.

◆ preverse() [12/43]

◆ preverse() [13/43]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::preverse ( const Packet2d a)
1923  {
1924  return (Packet2d)__lsx_vshuf4i_d(a, a, 0x1);
1925 }

References a.

◆ preverse() [14/43]

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::preverse ( const Packet2f a)
3274  {
3275  return vrev64_f32(a);
3276 }

References a.

◆ preverse() [15/43]

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::preverse ( const Packet2i a)
3327  {
3328  return vrev64_s32(a);
3329 }

References a.

◆ preverse() [16/43]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::preverse ( const Packet2l a)
1939  {
1940  return __lsx_vshuf4i_d((__m128i)a, (__m128i)a, 0x1);
1941 }

References a.

◆ preverse() [17/43]

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::preverse ( const Packet2ui a)
3336  {
3337  return vrev64_u32(a);
3338 }

References a.

◆ preverse() [18/43]

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::preverse ( const Packet2ul a)
1955  {
1956  return __lsx_vshuf4i_d((__m128i)a, (__m128i)a, 0x1);
1957 }

References a.

◆ preverse() [19/43]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::preverse ( const Packet32h a)
669  {
670  return _mm512_permutexvar_ph(_mm512_set_epi16(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
671  20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31),
672  a);
673 }

References a.

◆ preverse() [20/43]

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::preverse ( const Packet4c a)
3283  {
3284  return vget_lane_s32(vreinterpret_s32_s8(vrev64_s8(vreinterpret_s8_s32(vdup_n_s32(a)))), 0);
3285 }

References a.

◆ preverse() [21/43]

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::preverse ( const Packet4cd a)
366  {
367  return Packet4cd(_mm512_shuffle_f64x2(a.v, a.v, (shuffle_mask<3, 2, 1, 0>::mask)));
368 }

References a.

◆ preverse() [22/43]

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::preverse ( const Packet4cf a)
189  {
190  __m128 low = _mm256_extractf128_ps(a.v, 0);
191  __m128 high = _mm256_extractf128_ps(a.v, 1);
192  __m128d lowd = _mm_castps_pd(low);
193  __m128d highd = _mm_castps_pd(high);
194  low = _mm_castpd_ps(_mm_shuffle_pd(lowd, lowd, 0x1));
195  high = _mm_castpd_ps(_mm_shuffle_pd(highd, highd, 0x1));
196  __m256 result = _mm256_setzero_ps();
197  result = _mm256_insertf128_ps(result, low, 1);
198  result = _mm256_insertf128_ps(result, high, 0);
199  return Packet4cf(result);
200 }

References a.

◆ preverse() [23/43]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::preverse ( const Packet4d a)
1786  {
1787  __m256d tmp = _mm256_shuffle_pd(a, a, 5);
1788  return _mm256_permute2f128_pd(tmp, tmp, 1);
1789 #if 0
1790  // This version is unlikely to be faster as _mm256_shuffle_ps and _mm256_permute_pd
1791  // exhibit the same latency/throughput, but it is here for future reference/benchmarking...
1792  __m256d swap_halves = _mm256_permute2f128_pd(a,a,1);
1793  return _mm256_permute_pd(swap_halves,5);
1794 #endif
1795 }

References a, and tmp.

◆ preverse() [24/43]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::preverse ( const Packet4f a)
1903  {
1904  return reinterpret_cast<Packet4f>(
1905  vec_perm(reinterpret_cast<Packet16uc>(a), reinterpret_cast<Packet16uc>(a), p16uc_REVERSE32));
1906 }
static Packet16uc p16uc_REVERSE32
Definition: AltiVec/PacketMath.h:95

References a, and p16uc_REVERSE32.

◆ preverse() [25/43]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::preverse ( const Packet4i a)
1908  {
1909  return reinterpret_cast<Packet4i>(
1910  vec_perm(reinterpret_cast<Packet16uc>(a), reinterpret_cast<Packet16uc>(a), p16uc_REVERSE32));
1911 }

References a, and p16uc_REVERSE32.

◆ preverse() [26/43]

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::preverse ( const Packet4s a)
3309  {
3310  return vrev64_s16(a);
3311 }

References a.

◆ preverse() [27/43]

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::preverse ( const Packet4uc a)
3296  {
3297  return vget_lane_u32(vreinterpret_u32_u8(vrev64_u8(vreinterpret_u8_u32(vdup_n_u32(a)))), 0);
3298 }

References a.

◆ preverse() [28/43]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::preverse ( const Packet4ui a)
1951  {
1952  return __lsx_vshuf4i_w((__m128i)a, 0x1B);
1953 }

References a.

◆ preverse() [29/43]

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::preverse ( const Packet4us a)
3318  {
3319  return vrev64_u16(a);
3320 }

References a.

◆ preverse() [30/43]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::preverse ( const Packet8bf a)
1931  {
1932  return preverse<Packet8us>(a);
1933 }

References a.

◆ preverse() [31/43]

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::preverse ( const Packet8c a)
3287  {
3288  return vrev64_s8(a);
3289 }

References a.

◆ preverse() [32/43]

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::preverse ( const Packet8cf a)
171  {
172  return Packet8cf(_mm512_castsi512_ps(_mm512_permutexvar_epi64(
173  _mm512_set_epi32(0, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7), _mm512_castps_si512(a.v))));
174 }

References a.

◆ preverse() [33/43]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::preverse ( const Packet8d a)
1305  {
1306  return _mm512_permutexvar_pd(_mm512_set_epi32(0, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7), a);
1307 }

References a.

◆ preverse() [34/43]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::preverse ( const Packet8f a)
1781  {
1782  __m256 tmp = _mm256_shuffle_ps(a, a, 0x1b);
1783  return _mm256_permute2f128_ps(tmp, tmp, 1);
1784 }

References a, and tmp.

◆ preverse() [35/43]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::preverse ( const Packet8h a)
2480  {
2481  __m128i m = _mm_setr_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1);
2482  return _mm_shuffle_epi8(a, m);
2483 }

References a, and m.

◆ preverse() [36/43]

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::preverse ( const Packet8i a)
1797  {
1798  return _mm256_castps_si256(preverse(_mm256_castsi256_ps(a)));
1799 }
EIGEN_STRONG_INLINE Packet8h preverse(const Packet8h &a)
Definition: AVX/PacketMath.h:2480

References a, and preverse().

◆ preverse() [37/43]

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::preverse ( const Packet8l a)
1315  {
1316  return _mm512_permutexvar_epi64(_mm512_set_epi64(0, 1, 2, 3, 4, 5, 6, 7), a);
1317 }

References a.

◆ preverse() [38/43]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::preverse ( const Packet8s a)
1913  {
1914  return reinterpret_cast<Packet8s>(
1915  vec_perm(reinterpret_cast<Packet16uc>(a), reinterpret_cast<Packet16uc>(a), p16uc_REVERSE16));
1916 }
static Packet16uc p16uc_REVERSE16
Definition: AltiVec/PacketMath.h:96

References a, and p16uc_REVERSE16.

◆ preverse() [39/43]

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::preverse ( const Packet8uc a)
3300  {
3301  return vrev64_u8(a);
3302 }

References a.

◆ preverse() [40/43]

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::preverse ( const Packet8ui a)
1801  {
1802  return _mm256_castps_si256(preverse(_mm256_castsi256_ps(a)));
1803 }

References a, and preverse().

◆ preverse() [41/43]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::preverse ( const Packet8us a)
1918  {
1919  return reinterpret_cast<Packet8us>(
1920  vec_perm(reinterpret_cast<Packet16uc>(a), reinterpret_cast<Packet16uc>(a), p16uc_REVERSE16));
1921 }

References a, and p16uc_REVERSE16.

◆ preverse() [42/43]

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::preverse ( const PacketXf &  a)
577  {
578  return svrev_f32(a);
579 }

References a.

◆ preverse() [43/43]

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::preverse ( const PacketXi &  a)
254  {
255  return svrev_s32(a);
256 }

References a.

◆ preverse< Packet4bf >()

5003  {
5004  return Packet4bf(preverse<Packet4us>(Packet4us(a)));
5005 }

References a.

◆ print()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::print ( const Packet a)
Returns
the rounded value of a (coeff-wise) with current rounding mode
1166  {
1167  return nearest_integer_packetop_impl<Packet>::run_rint(a);
1168 }

References a, and Eigen::internal::nearest_integer_packetop_impl< Packet, IsScalar, IsInteger >::run_rint().

Referenced by blacs.Blacs::__init__(), blas.Blas::__init__(), lapack.Lapack::__init__(), scalapack.Scalapack::__init__(), framework.Frame::__init__(), smc.smc::__init__(), parallel_self_test::build_fail_message(), blacs.Blacs::check_blacs(), blas.Blas::check_blas(), parallel_self_test::check_fail_message(), lapack.Lapack::check_lapack(), framework.Frame::check_linking(), check-makefile-subdirs::check_makefileam(), framework.Frame::check_mpicc(), framework.Frame::check_mpif77(), parallel_self_test::check_success_message(), framework.Frame::cleanup(), compute_granudrum_aor::compute_granudrum_aor(), InertiaComputationsMesh::ComputeInertiaFromMesh(), InertiaComputationsPebbles::ComputeInertiaFromPebbles(), InertiaComputationsVoxelGrid::ComputeInertiaFromVoxelGrid(), InertiaComputationsVoxelGridNonumba::ComputeInertiaFromVoxelGrid(), InertiaComputationsMixed::ComputeInertiaMixed(), framework.Frame::detect_compilers(), scalapack.Scalapack::down_install(), blacs.Blacs::down_install_blacs(), blas.Blas::down_install_blas(), lapack.Lapack::down_install_lapack(), utils::downloader(), Loadstatistics::get_momentum_equation(), parallel_self_test::get_oomph_root(), smc.smc::getDPMData(), smc.smc::getInitParams(), smc.smc::getObsDataFromFile(), smc.smc::getParamsFromTable(), MClump::import_or_install_modules(), StlSpheresGenerator::ImportOrInstallModules(), smc.smc::initialize(), Loadstatistics::load_file(), Loadstatistics::load_stat_file(), InputData::LoadPebbles(), framework.Frame::look_for_mpibinaries(), framework.Frame::look_for_mpih(), check-makefile-subdirs::main(), parallel_self_test::main(), MultiOpt::main(), SingleRun::main(), CombineParallelOutFiles::main(), CombineParallelRestartFiles::main(), ComputeWallTorque::main(), MClump::main(), PlotEnergies::main(), StlSpheresGenerator::main(), RemoveSubnormals::main(), BatchRun::main(), SimpleOpt::main(), parallel_self_test::make_check_in_dir(), make_index::make_index(), Loadstatistics::make_readable(), read_mercury_cg::mercury_cg(), simulate::mergeOutputFiles(), simulateAWS::mergeOutputFiles(), parallel_self_test::missing_feature_message(), Loadstatistics::nabla(), Loadstatistics::nablaCenter(), make_index::nested_output(), parallel_self_test::no_check_message(), OutputData::OutputClumpData(), packetmath_real(), Eigen::internal::scalar_rint_op< Scalar >::packetOp(), framework.Frame::parse_args(), Particles2023AnalysisHung::predict_model(), make_index::print_key(), parallel_self_test::print_results_summary(), fix_broken_doxygen_formulae::process_file(), Particles2023AnalysisHung::random_forest(), Loadstatistics::read_ene(), Loadstatistics::read_restart(), MultiOpt::RealFun(), SingleRun::RealFun(), tools::resampledParamsTable(), smc.smc::resampleParams(), framework.Frame::resume(), smc.smc::run(), fix_broken_doxygen_formulae::run(), simulate::runSimulations(), simulateAWS::runSimulations(), SaveToStl::SavePebblesStl(), SaveToStl::SaveStlSequence(), SaveToStl::SaveStlSnap(), framework.Frame::set_download(), lapack.Lapack::set_etime(), framework.Frame::set_mangling(), framework.Frame::set_ranlib(), blacs.Blacs::set_transcomm(), simulateAWS::startAndWaitForSimulationsToFinish(), framework.Frame::usage(), blacs.Blacs::write_bmake(), lapack.Lapack::write_makeinc(), scalapack.Scalapack::write_slmakeinc(), compute_granudrum_aor::write_to_file(), and utils::ynask().

◆ print< Packet16bf >()

2824  {
2826 }
EIGEN_STRONG_INLINE Packet16f print< Packet16f >(const Packet16f &a)
Definition: AVX512/PacketMath.h:751

References a, Bf16ToF32(), F32ToBf16(), and print< Packet16f >().

◆ print< Packet16f >()

751  {
752  return _mm512_roundscale_ps(a, _MM_FROUND_CUR_DIRECTION);
753 }

References a.

Referenced by print< Packet16bf >(), and print< Packet16h >().

◆ print< Packet16h >()

◆ print< Packet2d >()

2745  {
2746  return __lsx_vfrintrne_d(a);
2747 }

References a.

◆ print< Packet32h >()

375  {
376  return _mm512_roundscale_ph(a, _MM_FROUND_CUR_DIRECTION);
377 }

References a.

◆ print< Packet4bf >()

4923  {
4925 }
EIGEN_STRONG_INLINE Packet4f print< Packet4f >(const Packet4f &a)
Definition: LSX/PacketMath.h:2711

References a, Bf16ToF32(), F32ToBf16(), and print< Packet4f >().

◆ print< Packet4d >()

1237  {
1238  return _mm256_round_pd(a, _MM_FROUND_CUR_DIRECTION);
1239 }

References a.

◆ print< Packet4f >()

2711  {
2712  return __lsx_vfrintrne_s(a);
2713 }

References a.

Referenced by print< Packet4bf >().

◆ print< Packet8bf >()

2718  {
2720 }
EIGEN_STRONG_INLINE Packet8bf F32ToBf16(const Packet8f &a)
Definition: AVX/PacketMath.h:2572
EIGEN_STRONG_INLINE Packet8f print< Packet8f >(const Packet8f &a)
Definition: AVX/PacketMath.h:1233

References a, Bf16ToF32(), F32ToBf16(), and print< Packet8f >().

◆ print< Packet8d >()

755  {
756  return _mm512_roundscale_pd(a, _MM_FROUND_CUR_DIRECTION);
757 }

References a.

◆ print< Packet8f >()

1233  {
1234  return _mm256_round_ps(a, _MM_FROUND_CUR_DIRECTION);
1235 }

References a.

Referenced by print< Packet8bf >(), and print< Packet8h >().

◆ print< Packet8h >()

2338  {
2340 }

References a, float2half(), half2float(), and print< Packet8f >().

◆ print_matrix()

template<typename Derived >
std::ostream & Eigen::internal::print_matrix ( std::ostream &  s,
const Derived &  _m,
const IOFormat fmt 
)

print the matrix _m to the output stream s using the output format fmt

127  {
128  using internal::is_same;
129 
130  if (_m.size() == 0) {
131  s << fmt.matPrefix << fmt.matSuffix;
132  return s;
133  }
134 
135  typename Derived::Nested m = _m;
136  typedef typename Derived::Scalar Scalar;
139  int,
140  std::conditional_t<is_same<Scalar, std::complex<char> >::value ||
141  is_same<Scalar, std::complex<unsigned char> >::value ||
142  is_same<Scalar, std::complex<numext::int8_t> >::value ||
143  is_same<Scalar, std::complex<numext::uint8_t> >::value,
144  std::complex<int>, const Scalar&> >
145  PrintType;
146 
147  Index width = 0;
148 
149  std::streamsize explicit_precision;
150  if (fmt.precision == StreamPrecision) {
151  explicit_precision = 0;
152  } else if (fmt.precision == FullPrecision) {
154  explicit_precision = 0;
155  } else {
156  explicit_precision = significant_decimals_impl<Scalar>::run();
157  }
158  } else {
159  explicit_precision = fmt.precision;
160  }
161 
162  std::streamsize old_precision = 0;
163  if (explicit_precision) old_precision = s.precision(explicit_precision);
164 
165  bool align_cols = !(fmt.flags & DontAlignCols);
166  if (align_cols) {
167  // compute the largest width
168  for (Index j = 0; j < m.cols(); ++j)
169  for (Index i = 0; i < m.rows(); ++i) {
170  std::stringstream sstr;
171  sstr.copyfmt(s);
172  sstr << static_cast<PrintType>(m.coeff(i, j));
173  width = std::max<Index>(width, Index(sstr.str().length()));
174  }
175  }
176  std::streamsize old_width = s.width();
177  char old_fill_character = s.fill();
178  s << fmt.matPrefix;
179  for (Index i = 0; i < m.rows(); ++i) {
180  if (i) s << fmt.rowSpacer;
181  s << fmt.rowPrefix;
182  if (width) {
183  s.fill(fmt.fill);
184  s.width(width);
185  }
186  s << static_cast<PrintType>(m.coeff(i, 0));
187  for (Index j = 1; j < m.cols(); ++j) {
188  s << fmt.coeffSeparator;
189  if (width) {
190  s.fill(fmt.fill);
191  s.width(width);
192  }
193  s << static_cast<PrintType>(m.coeff(i, j));
194  }
195  s << fmt.rowSuffix;
196  if (i < m.rows() - 1) s << fmt.rowSeparator;
197  }
198  s << fmt.matSuffix;
199  if (explicit_precision) s.precision(old_precision);
200  if (width) {
201  s.fill(old_fill_character);
202  s.width(old_width);
203  }
204  return s;
205 }
@ StreamPrecision
Definition: IO.h:20
@ FullPrecision
Definition: IO.h:20
@ DontAlignCols
Definition: IO.h:19
@ IsInteger
Definition: NumTraits.h:174

References Eigen::IOFormat::coeffSeparator, Eigen::DontAlignCols, Eigen::IOFormat::fill, Eigen::IOFormat::flags, Eigen::FullPrecision, i, int(), j, m, Eigen::IOFormat::matPrefix, Eigen::IOFormat::matSuffix, Eigen::IOFormat::precision, Eigen::IOFormat::rowPrefix, Eigen::IOFormat::rowSeparator, Eigen::IOFormat::rowSpacer, Eigen::IOFormat::rowSuffix, Eigen::internal::significant_decimals_impl< Scalar >::run(), s, Eigen::StreamPrecision, and Eigen::value.

Referenced by Eigen::DenseBase< Derived >::operator<<(), and Eigen::operator<<().

◆ pround() [1/3]

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::pround ( const Packet a)
Returns
the rounded value of a (coeff-wise)
1153  {
1154  return nearest_integer_packetop_impl<Packet>::run_round(a);
1155 }

References a, and Eigen::internal::nearest_integer_packetop_impl< Packet, IsScalar, IsInteger >::run_round().

◆ pround() [2/3]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pround ( const Packet2d a)
2561  {
2562  const Packet2d mask = pset1frombits<Packet2d>(static_cast<numext::uint64_t>(0x8000000000000000ull));
2563  const Packet2d prev0dot5 = pset1frombits<Packet2d>(static_cast<numext::uint64_t>(0x3FDFFFFFFFFFFFFFull));
2564  return __lsx_vfrintrz_d(padd(por(pand(a, mask), prev0dot5), a));
2565 }

References a, padd(), pand(), por(), and pset1frombits< Packet2d >().

◆ pround() [3/3]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pround ( const Packet4f a)
2555  {
2556  const Packet4f mask = pset1frombits<Packet4f>(static_cast<numext::uint32_t>(0x80000000u));
2557  const Packet4f prev0dot5 = pset1frombits<Packet4f>(static_cast<numext::uint32_t>(0x3EFFFFFFu));
2558  return __lsx_vfrintrz_s(padd(pxor(pand(a, mask), prev0dot5), a));
2559 }
EIGEN_STRONG_INLINE Packet4f pset1frombits< Packet4f >(uint32_t from)
Definition: LSX/PacketMath.h:509

References a, padd(), pand(), pset1frombits< Packet4f >(), and pxor().

Referenced by absolute_split(), generic_pow(), packetmath_real(), and Eigen::internal::scalar_round_op< Scalar >::packetOp().

◆ pround< Packet16bf >()

2819  {
2821 }
EIGEN_STRONG_INLINE Packet16f pround< Packet16f >(const Packet16f &a)
Definition: AVX512/PacketMath.h:924

References a, Bf16ToF32(), F32ToBf16(), and pround< Packet16f >().

◆ pround< Packet16f >()

924  {
925  // Work-around for default std::round rounding mode.
926  const Packet16f mask = pset1frombits<Packet16f>(static_cast<numext::uint32_t>(0x80000000u));
927  const Packet16f prev0dot5 = pset1frombits<Packet16f>(static_cast<numext::uint32_t>(0x3EFFFFFFu));
928  return _mm512_roundscale_ps(padd(por(pand(a, mask), prev0dot5), a), _MM_FROUND_TO_ZERO);
929 }
EIGEN_STRONG_INLINE Packet16f pset1frombits< Packet16f >(unsigned int from)
Definition: AVX512/PacketMath.h:269

References a, padd(), pand(), por(), and pset1frombits< Packet16f >().

Referenced by pround< Packet16bf >(), and pround< Packet16h >().

◆ pround< Packet16h >()

◆ pround< Packet2d >()

1206  {
1207  Packet2d v = a;
1208  int32_t old_mode, new_mode;
1209  asm volatile(
1210  "cfcmsa %[old_mode], $1\n"
1211  "ori %[new_mode], %[old_mode], 3\n"
1212  "xori %[new_mode], %[new_mode], 3\n" // 0 = round to nearest, ties to even.
1213  "ctcmsa $1, %[new_mode]\n"
1214  "frint.d %w[v], %w[v]\n"
1215  "ctcmsa $1, %[old_mode]\n"
1216  : // outputs
1217  [old_mode] "=r"(old_mode), [new_mode] "=r"(new_mode),
1218  [v] "+f"(v)
1219  : // inputs
1220  : // clobbers
1221  );
1222  return v;
1223 }

References a, and v.

◆ pround< Packet32h >()

361  {
362  // Work-around for default std::round rounding mode.
363 
364  // Mask for the sign bit
365  const Packet32h signMask = pset1frombits<Packet32h>(static_cast<numext::uint16_t>(0x8000u));
366  // The largest half-preicision float less than 0.5
367  const Packet32h prev0dot5 = pset1frombits<Packet32h>(static_cast<numext::uint16_t>(0x37FFu));
368 
369  return _mm512_roundscale_ph(padd(por(pand(a, signMask), prev0dot5), a), _MM_FROUND_TO_ZERO);
370 }
EIGEN_STRONG_INLINE Packet32h pset1frombits< Packet32h >(unsigned short from)
Definition: PacketMathFP16.h:123
EIGEN_STRONG_INLINE Packet32h pand(const Packet32h &a, const Packet32h &b)
Definition: PacketMathFP16.h:239
__m512h Packet32h
Definition: PacketMathFP16.h:20
EIGEN_STRONG_INLINE Packet32h por(const Packet32h &a, const Packet32h &b)
Definition: PacketMathFP16.h:225

References a, padd(), pand(), por(), and pset1frombits< Packet32h >().

◆ pround< Packet4bf >()

4938  {
4940 }
EIGEN_STRONG_INLINE Packet4f pround< Packet4f >(const Packet4f &a)
Definition: AltiVec/PacketMath.h:1479

References a, Bf16ToF32(), F32ToBf16(), and pround< Packet4f >().

◆ pround< Packet4d >()

1417  {
1418  const Packet4d mask = pset1frombits<Packet4d>(static_cast<numext::uint64_t>(0x8000000000000000ull));
1419  const Packet4d prev0dot5 = pset1frombits<Packet4d>(static_cast<numext::uint64_t>(0x3FDFFFFFFFFFFFFFull));
1420  return _mm256_round_pd(padd(por(pand(a, mask), prev0dot5), a), _MM_FROUND_TO_ZERO);
1421 }
EIGEN_STRONG_INLINE Packet8bf por(const Packet8bf &a, const Packet8bf &b)
Definition: AVX/PacketMath.h:2691

References a, padd(), pand(), por(), and pset1frombits< Packet4d >().

◆ pround< Packet4f >()

1479  {
1480  Packet4f t = vec_add(
1481  reinterpret_cast<Packet4f>(vec_or(vec_and(reinterpret_cast<Packet4ui>(a), p4ui_SIGN), p4ui_PREV0DOT5)), a);
1482  Packet4f res;
1483 
1484 #ifdef EIGEN_VECTORIZE_VSX
1485  __asm__("xvrspiz %x0, %x1\n\t" : "=&wa"(res) : "wa"(t));
1486 #else
1487  __asm__("vrfiz %0, %1\n\t" : "=v"(res) : "v"(t));
1488 #endif
1489 
1490  return res;
1491 }

References a, res, and plotPSD::t.

Referenced by pround< Packet4bf >(), and pround< Packet8bf >().

◆ pround< Packet8bf >()

◆ pround< Packet8d >()

931  {
932  // Work-around for default std::round rounding mode.
933  const Packet8d mask = pset1frombits<Packet8d>(static_cast<numext::uint64_t>(0x8000000000000000ull));
934  const Packet8d prev0dot5 = pset1frombits<Packet8d>(static_cast<numext::uint64_t>(0x3FDFFFFFFFFFFFFFull));
935  return _mm512_roundscale_pd(padd(por(pand(a, mask), prev0dot5), a), _MM_FROUND_TO_ZERO);
936 }

References a, padd(), pand(), por(), and pset1frombits< Packet8d >().

◆ pround< Packet8f >()

1411  {
1412  const Packet8f mask = pset1frombits<Packet8f>(static_cast<numext::uint32_t>(0x80000000u));
1413  const Packet8f prev0dot5 = pset1frombits<Packet8f>(static_cast<numext::uint32_t>(0x3EFFFFFFu));
1414  return _mm256_round_ps(padd(por(pand(a, mask), prev0dot5), a), _MM_FROUND_TO_ZERO);
1415 }
EIGEN_STRONG_INLINE Packet8f pset1frombits< Packet8f >(unsigned int from)
Definition: AVX/PacketMath.h:765

References a, padd(), pand(), por(), and pset1frombits< Packet8f >().

Referenced by pround< Packet8h >().

◆ pround< Packet8h >()

2333  {
2335 }
EIGEN_STRONG_INLINE Packet8f pround< Packet8f >(const Packet8f &a)
Definition: AVX/PacketMath.h:1411

References a, float2half(), half2float(), and pround< Packet8f >().

◆ prsqrt() [1/4]

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::prsqrt ( const Packet a)
Returns
the reciprocal square-root of a (coeff-wise)
1440  {
1441  return preciprocal<Packet>(psqrt(a));
1442 }
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psqrt(const Packet &a)
Definition: GenericPacketMath.h:1131

References a, and psqrt().

◆ prsqrt() [2/4]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::prsqrt ( const Packet2d a)
2532  {
2533  return __lsx_vfrsqrt_d(a);
2534 }

References a.

◆ prsqrt() [3/4]

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::prsqrt ( const Packet2f a)
4627  {
4628  return prsqrt_float_common(a);
4629 }
Packet prsqrt_float_common(const Packet &a)
Definition: NEON/PacketMath.h:4610

References a, and prsqrt_float_common().

◆ prsqrt() [4/4]

◆ prsqrt< Packet2d >()

204  {
205  return pset1<Packet2d>(1.0) / psqrt<Packet2d>(x);
206 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet2d psqrt< Packet2d >(const Packet2d &x)
Definition: arch/SSE/MathFunctions.h:37

References pset1< Packet2d >(), psqrt< Packet2d >(), and plotDoE::x.

Referenced by prsqrt< Packet4f >().

◆ prsqrt< Packet32h >()

537  {
538  return _mm512_rsqrt_ph(a);
539 }

References a.

◆ prsqrt< Packet4f >()

209  {
210  Packet4f res;
211 #if !defined(__ARCH__) || (defined(__ARCH__) && __ARCH__ >= 12)
213 #else
214  res.v4f[0] = prsqrt<Packet2d>(x.v4f[0]);
215  res.v4f[1] = prsqrt<Packet2d>(x.v4f[1]);
216 #endif
217  return res;
218 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet4f psqrt< Packet4f >(const Packet4f &x)
Definition: arch/AltiVec/MathFunctions.h:68
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet2d prsqrt< Packet2d >(const Packet2d &x)
Definition: arch/ZVector/MathFunctions.h:204

References prsqrt< Packet2d >(), pset1< Packet4f >(), psqrt< Packet4f >(), res, and plotDoE::x.

◆ prsqrt_float_common()

template<typename Packet >
Packet Eigen::internal::prsqrt_float_common ( const Packet a)
4610  {
4611  const Packet cst_zero = pzero(a);
4612  const Packet cst_inf = pset1<Packet>(NumTraits<float>::infinity());
4613  Packet return_zero = pcmp_eq(a, cst_inf);
4614  Packet return_inf = pcmp_eq(a, cst_zero);
4615  Packet result = prsqrt_float_unsafe(a);
4616  result = pselect(return_inf, por(cst_inf, a), result);
4617  result = pandnot(result, return_zero);
4618  return result;
4619 }
EIGEN_STRONG_INLINE Packet2f prsqrt_float_unsafe(const Packet2f &a)
Definition: NEON/PacketMath.h:4600
EIGEN_STRONG_INLINE Packet4bf por(const Packet4bf &a, const Packet4bf &b)
Definition: NEON/PacketMath.h:4898
EIGEN_STRONG_INLINE Packet4bf pandnot(const Packet4bf &a, const Packet4bf &b)
Definition: NEON/PacketMath.h:4913
EIGEN_STRONG_INLINE Packet2f pzero(const Packet2f &)
Definition: NEON/PacketMath.h:659

References a, pandnot(), pcmp_eq(), por(), prsqrt_float_unsafe(), pselect(), and pzero().

Referenced by prsqrt().

◆ prsqrt_float_unsafe() [1/2]

EIGEN_STRONG_INLINE Packet2f Eigen::internal::prsqrt_float_unsafe ( const Packet2f a)
4600  {
4601  // Compute approximate reciprocal sqrt.
4602  // Does not correctly handle +/- 0 or +inf
4603  float32x2_t result = vrsqrte_f32(a);
4604  result = vmul_f32(vrsqrts_f32(vmul_f32(a, result), result), result);
4605  result = vmul_f32(vrsqrts_f32(vmul_f32(a, result), result), result);
4606  return result;
4607 }

References a.

◆ prsqrt_float_unsafe() [2/2]

EIGEN_STRONG_INLINE Packet4f Eigen::internal::prsqrt_float_unsafe ( const Packet4f a)
4591  {
4592  // Compute approximate reciprocal sqrt.
4593  // Does not correctly handle +/- 0 or +inf
4594  float32x4_t result = vrsqrteq_f32(a);
4595  result = vmulq_f32(vrsqrtsq_f32(vmulq_f32(a, result), result), result);
4596  result = vmulq_f32(vrsqrtsq_f32(vmulq_f32(a, result), result), result);
4597  return result;
4598 }

References a.

Referenced by prsqrt_float_common(), and psqrt_float_common().

◆ pscatter() [1/2]

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter ( Scalar to,
const Packet from,
Index  stride,
typename unpacket_traits< Packet >::mask_t  umask 
)
inline

◆ pscatter() [2/2]

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter ( Scalar to,
const Packet from,
Index   
)
inline
951  {
952  pstore(to, from);
953 }

References pstore().

◆ pscatter< bfloat16, Packet16bf >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pscatter< bfloat16, Packet16bf > ( bfloat16 to,
const Packet16bf from,
Index  stride 
)
2964  {
2965  EIGEN_ALIGN64 bfloat16 aux[16];
2966  pstore(aux, from);
2967  to[stride * 0] = aux[0];
2968  to[stride * 1] = aux[1];
2969  to[stride * 2] = aux[2];
2970  to[stride * 3] = aux[3];
2971  to[stride * 4] = aux[4];
2972  to[stride * 5] = aux[5];
2973  to[stride * 6] = aux[6];
2974  to[stride * 7] = aux[7];
2975  to[stride * 8] = aux[8];
2976  to[stride * 9] = aux[9];
2977  to[stride * 10] = aux[10];
2978  to[stride * 11] = aux[11];
2979  to[stride * 12] = aux[12];
2980  to[stride * 13] = aux[13];
2981  to[stride * 14] = aux[14];
2982  to[stride * 15] = aux[15];
2983 }

References EIGEN_ALIGN64, and pstore().

◆ pscatter< bfloat16, Packet4bf >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pscatter< bfloat16, Packet4bf > ( bfloat16 to,
const Packet4bf from,
Index  stride 
)
4978  {
4979  pscatter<uint16_t, Packet4us>(reinterpret_cast<uint16_t*>(to), Packet4us(from), stride);
4980 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void pscatter< uint16_t, Packet4us >(uint16_t *to, const Packet4us &from, Index stride)
Definition: NEON/PacketMath.h:3103

References pscatter< uint16_t, Packet4us >().

◆ pscatter< bfloat16, Packet8bf >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pscatter< bfloat16, Packet8bf > ( bfloat16 to,
const Packet8bf from,
Index  stride 
)
978  {
979  pscatter_common<Packet8bf>(to, from, stride);
980 }

◆ pscatter< bool, Packet16b >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pscatter< bool, Packet16b > ( bool to,
const Packet16b from,
Index  stride 
)
1696  {
1697  to[4 * stride * 0] = _mm_cvtsi128_si32(from);
1698  to[4 * stride * 1] = _mm_cvtsi128_si32(_mm_shuffle_epi32(from, 1));
1699  to[4 * stride * 2] = _mm_cvtsi128_si32(_mm_shuffle_epi32(from, 2));
1700  to[4 * stride * 3] = _mm_cvtsi128_si32(_mm_shuffle_epi32(from, 3));
1701 }

◆ pscatter< double, Packet2d >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< double, Packet2d > ( double to,
const Packet2d from,
Index  stride 
)
inline
1734  {
1735  __lsx_vstelm_d(from, to, 0, 0);
1736  __lsx_vstelm_d(from, to + stride, 0, 1);
1737 }

◆ pscatter< double, Packet4d >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< double, Packet4d > ( double to,
const Packet4d from,
Index  stride 
)
inline
1701  {
1702  __m128d low = _mm256_extractf128_pd(from, 0);
1703  to[stride * 0] = _mm_cvtsd_f64(low);
1704  to[stride * 1] = _mm_cvtsd_f64(_mm_shuffle_pd(low, low, 1));
1705  __m128d high = _mm256_extractf128_pd(from, 1);
1706  to[stride * 2] = _mm_cvtsd_f64(high);
1707  to[stride * 3] = _mm_cvtsd_f64(_mm_shuffle_pd(high, high, 1));
1708 }

◆ pscatter< double, Packet8d >() [1/2]

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< double, Packet8d > ( double to,
const Packet8d from,
Index  stride 
)
inline
1222  {
1223  Packet8i stride_vector = _mm256_set1_epi32(convert_index<int>(stride));
1224  Packet8i stride_multiplier = _mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0);
1225  Packet8i indices = _mm256_mullo_epi32(stride_vector, stride_multiplier);
1226  _mm512_i32scatter_pd(to, indices, from, 8);
1227 }

◆ pscatter< double, Packet8d >() [2/2]

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< double, Packet8d > ( double to,
const Packet8d from,
Index  stride,
uint8_t  umask 
)
inline
1207  {
1208  Packet8i stride_vector = _mm256_set1_epi32(convert_index<int>(stride));
1209  Packet8i stride_multiplier = _mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0);
1210  Packet8i indices = _mm256_mullo_epi32(stride_vector, stride_multiplier);
1211  __mmask8 mask = static_cast<__mmask8>(umask);
1212  _mm512_mask_i32scatter_pd(to, mask, indices, from, 8);
1213 }

◆ pscatter< Eigen::half, Packet8h >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pscatter< Eigen::half, Packet8h > ( Eigen::half to,
const Packet8h from,
Index  stride 
)
2436  {
2437  EIGEN_ALIGN32 Eigen::half aux[8];
2438  pstore(aux, from);
2439  to[stride * 0] = aux[0];
2440  to[stride * 1] = aux[1];
2441  to[stride * 2] = aux[2];
2442  to[stride * 3] = aux[3];
2443  to[stride * 4] = aux[4];
2444  to[stride * 5] = aux[5];
2445  to[stride * 6] = aux[6];
2446  to[stride * 7] = aux[7];
2447 }
#define EIGEN_ALIGN32
Definition: ConfigureVectorization.h:143

References EIGEN_ALIGN32, and pstore().

◆ pscatter< float, Packet16f >() [1/2]

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< float, Packet16f > ( float *  to,
const Packet16f from,
Index  stride 
)
inline
1215  {
1216  Packet16i stride_vector = _mm512_set1_epi32(convert_index<int>(stride));
1217  Packet16i stride_multiplier = _mm512_set_epi32(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
1218  Packet16i indices = _mm512_mullo_epi32(stride_vector, stride_multiplier);
1219  _mm512_i32scatter_ps(to, indices, from, 4);
1220 }

◆ pscatter< float, Packet16f >() [2/2]

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< float, Packet16f > ( float *  to,
const Packet16f from,
Index  stride,
uint16_t  umask 
)
inline
1198  {
1199  Packet16i stride_vector = _mm512_set1_epi32(convert_index<int>(stride));
1200  Packet16i stride_multiplier = _mm512_set_epi32(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
1201  Packet16i indices = _mm512_mullo_epi32(stride_vector, stride_multiplier);
1202  __mmask16 mask = static_cast<__mmask16>(umask);
1203  _mm512_mask_i32scatter_ps(to, mask, indices, from, 4);
1204 }

◆ pscatter< float, Packet2f >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< float, Packet2f > ( float *  to,
const Packet2f from,
Index  stride 
)
2999  {
3000  vst1_lane_f32(to + stride * 0, from, 0);
3001  vst1_lane_f32(to + stride * 1, from, 1);
3002 }

◆ pscatter< float, Packet4f >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< float, Packet4f > ( float *  to,
const Packet4f from,
Index  stride 
)
inline
954  {
955  pscatter_common<Packet4f>(to, from, stride);
956 }

◆ pscatter< float, Packet8f >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< float, Packet8f > ( float *  to,
const Packet8f from,
Index  stride 
)
inline
1687  {
1688  __m128 low = _mm256_extractf128_ps(from, 0);
1689  to[stride * 0] = _mm_cvtss_f32(low);
1690  to[stride * 1] = _mm_cvtss_f32(_mm_shuffle_ps(low, low, 1));
1691  to[stride * 2] = _mm_cvtss_f32(_mm_shuffle_ps(low, low, 2));
1692  to[stride * 3] = _mm_cvtss_f32(_mm_shuffle_ps(low, low, 3));
1693 
1694  __m128 high = _mm256_extractf128_ps(from, 1);
1695  to[stride * 4] = _mm_cvtss_f32(high);
1696  to[stride * 5] = _mm_cvtss_f32(_mm_shuffle_ps(high, high, 1));
1697  to[stride * 6] = _mm_cvtss_f32(_mm_shuffle_ps(high, high, 2));
1698  to[stride * 7] = _mm_cvtss_f32(_mm_shuffle_ps(high, high, 3));
1699 }

◆ pscatter< float, PacketXf >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< float, PacketXf > ( float *  to,
const PacketXf &  from,
Index  stride 
)
inline
564  {
565  // Indice format: {base=0, base+stride, base+stride*2, base+stride*3, ...}
566  svint32_t indices = svindex_s32(0, stride);
567  svst1_scatter_s32index_f32(svptrue_b32(), to, indices, from);
568 }

◆ pscatter< half, Packet16h >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pscatter< half, Packet16h > ( half to,
const Packet16h from,
Index  stride 
)
2456  {
2457  EIGEN_ALIGN64 half aux[16];
2458  pstore(aux, from);
2459  to[stride * 0] = aux[0];
2460  to[stride * 1] = aux[1];
2461  to[stride * 2] = aux[2];
2462  to[stride * 3] = aux[3];
2463  to[stride * 4] = aux[4];
2464  to[stride * 5] = aux[5];
2465  to[stride * 6] = aux[6];
2466  to[stride * 7] = aux[7];
2467  to[stride * 8] = aux[8];
2468  to[stride * 9] = aux[9];
2469  to[stride * 10] = aux[10];
2470  to[stride * 11] = aux[11];
2471  to[stride * 12] = aux[12];
2472  to[stride * 13] = aux[13];
2473  to[stride * 14] = aux[14];
2474  to[stride * 15] = aux[15];
2475 }

References EIGEN_ALIGN64, and pstore().

◆ pscatter< half, Packet32h >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pscatter< half, Packet32h > ( half to,
const Packet32h from,
Index  stride 
)
678  {
679  EIGEN_ALIGN64 half aux[32];
680  pstore(aux, from);
681 
683  for (int i = 0; i < 32; i++) {
684  to[stride * i] = aux[i];
685  }
686 }

References EIGEN_ALIGN64, EIGEN_UNROLL_LOOP, i, and pstore().

◆ pscatter< int, Packet16i >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< int, Packet16i > ( int to,
const Packet16i from,
Index  stride 
)
inline
1236  {
1237  Packet16i stride_vector = _mm512_set1_epi32(convert_index<int>(stride));
1238  Packet16i stride_multiplier = _mm512_set_epi32(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
1239  Packet16i indices = _mm512_mullo_epi32(stride_vector, stride_multiplier);
1240  _mm512_i32scatter_epi32(to, indices, from, 4);
1241 }

◆ pscatter< int, Packet4i >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< int, Packet4i > ( int to,
const Packet4i from,
Index  stride 
)
inline
959  {
960  pscatter_common<Packet4i>(to, from, stride);
961 }

◆ pscatter< int, Packet8i >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< int, Packet8i > ( int to,
const Packet8i from,
Index  stride 
)
inline
1710  {
1711  __m128i low = _mm256_extractf128_si256(from, 0);
1712  to[stride * 0] = _mm_extract_epi32(low, 0);
1713  to[stride * 1] = _mm_extract_epi32(low, 1);
1714  to[stride * 2] = _mm_extract_epi32(low, 2);
1715  to[stride * 3] = _mm_extract_epi32(low, 3);
1716 
1717  __m128i high = _mm256_extractf128_si256(from, 1);
1718  to[stride * 4] = _mm_extract_epi32(high, 0);
1719  to[stride * 5] = _mm_extract_epi32(high, 1);
1720  to[stride * 6] = _mm_extract_epi32(high, 2);
1721  to[stride * 7] = _mm_extract_epi32(high, 3);
1722 }

Referenced by pscatter< uint32_t, Packet8ui >().

◆ pscatter< int16_t, Packet4s >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< int16_t, Packet4s > ( int16_t *  to,
const Packet4s from,
Index  stride 
)
3084  {
3085  vst1_lane_s16(to + stride * 0, from, 0);
3086  vst1_lane_s16(to + stride * 1, from, 1);
3087  vst1_lane_s16(to + stride * 2, from, 2);
3088  vst1_lane_s16(to + stride * 3, from, 3);
3089 }

◆ pscatter< int16_t, Packet8s >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< int16_t, Packet8s > ( int16_t *  to,
const Packet8s from,
Index  stride 
)
1760  {
1761  __lsx_vstelm_h((__m128i)from, to, 0, 0);
1762  __lsx_vstelm_h((__m128i)from, to + stride * 1, 0, 1);
1763  __lsx_vstelm_h((__m128i)from, to + stride * 2, 0, 2);
1764  __lsx_vstelm_h((__m128i)from, to + stride * 3, 0, 3);
1765  __lsx_vstelm_h((__m128i)from, to + stride * 4, 0, 4);
1766  __lsx_vstelm_h((__m128i)from, to + stride * 5, 0, 5);
1767  __lsx_vstelm_h((__m128i)from, to + stride * 6, 0, 6);
1768  __lsx_vstelm_h((__m128i)from, to + stride * 7, 0, 7);
1769 }

◆ pscatter< int32_t, Packet2i >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< int32_t, Packet2i > ( int32_t *  to,
const Packet2i from,
Index  stride 
)
3124  {
3125  vst1_lane_s32(to + stride * 0, from, 0);
3126  vst1_lane_s32(to + stride * 1, from, 1);
3127 }

◆ pscatter< int32_t, Packet4i >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< int32_t, Packet4i > ( int32_t *  to,
const Packet4i from,
Index  stride 
)
inline
1772  {
1773  __lsx_vstelm_w((__m128i)from, to, 0, 0);
1774  __lsx_vstelm_w((__m128i)from, to + stride * 1, 0, 1);
1775  __lsx_vstelm_w((__m128i)from, to + stride * 2, 0, 2);
1776  __lsx_vstelm_w((__m128i)from, to + stride * 3, 0, 3);
1777 }

◆ pscatter< int64_t, Packet2l >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pscatter< int64_t, Packet2l > ( int64_t *  to,
const Packet2l from,
Index  stride 
)
1780  {
1781  __lsx_vstelm_d((__m128i)from, to, 0, 0);
1782  __lsx_vstelm_d((__m128i)from, to + stride * 1, 0, 1);
1783 }

◆ pscatter< int64_t, Packet8l >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< int64_t, Packet8l > ( int64_t *  to,
const Packet8l from,
Index  stride 
)
inline
1229  {
1230  Packet8i stride_vector = _mm256_set1_epi32(convert_index<int>(stride));
1231  Packet8i stride_multiplier = _mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0);
1232  Packet8i indices = _mm256_mullo_epi32(stride_vector, stride_multiplier);
1233  _mm512_i32scatter_epi64(to, indices, from, 8);
1234 }

◆ pscatter< int8_t, Packet16c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< int8_t, Packet16c > ( int8_t *  to,
const Packet16c from,
Index  stride 
)
1740  {
1741  __lsx_vstelm_b((__m128i)from, to, 0, 0);
1742  __lsx_vstelm_b((__m128i)from, to + stride * 1, 0, 1);
1743  __lsx_vstelm_b((__m128i)from, to + stride * 2, 0, 2);
1744  __lsx_vstelm_b((__m128i)from, to + stride * 3, 0, 3);
1745  __lsx_vstelm_b((__m128i)from, to + stride * 4, 0, 4);
1746  __lsx_vstelm_b((__m128i)from, to + stride * 5, 0, 5);
1747  __lsx_vstelm_b((__m128i)from, to + stride * 6, 0, 6);
1748  __lsx_vstelm_b((__m128i)from, to + stride * 7, 0, 7);
1749  __lsx_vstelm_b((__m128i)from, to + stride * 8, 0, 8);
1750  __lsx_vstelm_b((__m128i)from, to + stride * 9, 0, 9);
1751  __lsx_vstelm_b((__m128i)from, to + stride * 10, 0, 10);
1752  __lsx_vstelm_b((__m128i)from, to + stride * 11, 0, 11);
1753  __lsx_vstelm_b((__m128i)from, to + stride * 12, 0, 12);
1754  __lsx_vstelm_b((__m128i)from, to + stride * 13, 0, 13);
1755  __lsx_vstelm_b((__m128i)from, to + stride * 14, 0, 14);
1756  __lsx_vstelm_b((__m128i)from, to + stride * 15, 0, 15);
1757 }

◆ pscatter< int8_t, Packet4c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< int8_t, Packet4c > ( int8_t *  to,
const Packet4c from,
Index  stride 
)
3011  {
3012  for (int i = 0; i != 4; i++) *(to + i * stride) = reinterpret_cast<const int8_t*>(&from)[i];
3013 }

References i.

◆ pscatter< int8_t, Packet8c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< int8_t, Packet8c > ( int8_t *  to,
const Packet8c from,
Index  stride 
)
3015  {
3016  vst1_lane_s8(to + stride * 0, from, 0);
3017  vst1_lane_s8(to + stride * 1, from, 1);
3018  vst1_lane_s8(to + stride * 2, from, 2);
3019  vst1_lane_s8(to + stride * 3, from, 3);
3020  vst1_lane_s8(to + stride * 4, from, 4);
3021  vst1_lane_s8(to + stride * 5, from, 5);
3022  vst1_lane_s8(to + stride * 6, from, 6);
3023  vst1_lane_s8(to + stride * 7, from, 7);
3024 }

◆ pscatter< numext::int32_t, PacketXi >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< numext::int32_t, PacketXi > ( numext::int32_t to,
const PacketXi &  from,
Index  stride 
)
inline
241  {
242  // Indice format: {base=0, base+stride, base+stride*2, base+stride*3, ...}
243  svint32_t indices = svindex_s32(0, stride);
244  svst1_scatter_s32index_s32(svptrue_b32(), to, indices, from);
245 }

◆ pscatter< short int, Packet8s >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter< short int, Packet8s > ( short int to,
const Packet8s from,
Index  stride 
)
965  {
966  pscatter_common<Packet8s>(to, from, stride);
967 }

◆ pscatter< signed char, Packet16c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter< signed char, Packet16c > ( signed char to,
const Packet16c from,
Index  stride 
)
984  {
985  pscatter_common<Packet16c>(to, from, stride);
986 }

◆ pscatter< std::complex< double >, Packet1cd >() [1/3]

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< std::complex< double >, Packet1cd > ( std::complex< double > *  to,
const Packet1cd from,
Index stride   __attribute__(unused) 
)
inline
549  {
551 
552  pstore(to, from);
553 }

References EIGEN_MSA_DEBUG, and pstore().

◆ pscatter< std::complex< double >, Packet1cd >() [2/3]

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< std::complex< double >, Packet1cd > ( std::complex< double > *  to,
const Packet1cd from,
Index stride  EIGEN_UNUSED 
)
inline
159  {
160  pstore<std::complex<double> >(to, from);
161 }

◆ pscatter< std::complex< double >, Packet1cd >() [3/3]

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< std::complex< double >, Packet1cd > ( std::complex< double > *  to,
const Packet1cd from,
Index    
)
inline
507  {
508  __lsx_vst((__m128i)from.v, (void*)to, 0);
509 }

◆ pscatter< std::complex< double >, Packet2cd >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< std::complex< double >, Packet2cd > ( std::complex< double > *  to,
const Packet2cd from,
Index  stride 
)
inline
367  {
368  __m128d low = _mm256_extractf128_pd(from.v, 0);
369  to[stride * 0] = std::complex<double>(_mm_cvtsd_f64(low), _mm_cvtsd_f64(_mm_shuffle_pd(low, low, 1)));
370  __m128d high = _mm256_extractf128_pd(from.v, 1);
371  to[stride * 1] = std::complex<double>(_mm_cvtsd_f64(high), _mm_cvtsd_f64(_mm_shuffle_pd(high, high, 1)));
372 }

◆ pscatter< std::complex< double >, Packet4cd >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< std::complex< double >, Packet4cd > ( std::complex< double > *  to,
const Packet4cd from,
Index  stride 
)
inline
348  {
349  __m512i fromi = _mm512_castpd_si512(from.v);
350  double* tod = (double*)(void*)to;
351  _mm_storeu_pd(tod + 0 * stride, _mm_castsi128_pd(_mm512_extracti32x4_epi32(fromi, 0)));
352  _mm_storeu_pd(tod + 2 * stride, _mm_castsi128_pd(_mm512_extracti32x4_epi32(fromi, 1)));
353  _mm_storeu_pd(tod + 4 * stride, _mm_castsi128_pd(_mm512_extracti32x4_epi32(fromi, 2)));
354  _mm_storeu_pd(tod + 6 * stride, _mm_castsi128_pd(_mm512_extracti32x4_epi32(fromi, 3)));
355 }

◆ pscatter< std::complex< float >, Packet1cf >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< std::complex< float >, Packet1cf > ( std::complex< float > *  to,
const Packet1cf from,
Index  stride 
)
inline
361  {
362  to[stride * 0] = std::complex<float>(vget_lane_f32(from.v, 0), vget_lane_f32(from.v, 1));
363 }

◆ pscatter< std::complex< float >, Packet2cf >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< std::complex< float >, Packet2cf > ( std::complex< float > *  to,
const Packet2cf from,
Index  stride 
)
inline
244  {
245  pscatter_complex_size2<std::complex<float>, Packet2cf>(to, from, stride);
246 }

◆ pscatter< std::complex< float >, Packet4cf >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< std::complex< float >, Packet4cf > ( std::complex< float > *  to,
const Packet4cf from,
Index  stride 
)
inline
169  {
170  __m128 low = _mm256_extractf128_ps(from.v, 0);
171  to[stride * 0] =
172  std::complex<float>(_mm_cvtss_f32(_mm_shuffle_ps(low, low, 0)), _mm_cvtss_f32(_mm_shuffle_ps(low, low, 1)));
173  to[stride * 1] =
174  std::complex<float>(_mm_cvtss_f32(_mm_shuffle_ps(low, low, 2)), _mm_cvtss_f32(_mm_shuffle_ps(low, low, 3)));
175 
176  __m128 high = _mm256_extractf128_ps(from.v, 1);
177  to[stride * 2] =
178  std::complex<float>(_mm_cvtss_f32(_mm_shuffle_ps(high, high, 0)), _mm_cvtss_f32(_mm_shuffle_ps(high, high, 1)));
179  to[stride * 3] =
180  std::complex<float>(_mm_cvtss_f32(_mm_shuffle_ps(high, high, 2)), _mm_cvtss_f32(_mm_shuffle_ps(high, high, 3)));
181 }

◆ pscatter< std::complex< float >, Packet8cf >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< std::complex< float >, Packet8cf > ( std::complex< float > *  to,
const Packet8cf from,
Index  stride 
)
inline
161  {
162  pscatter((double*)(void*)to, _mm512_castps_pd(from.v), stride);
163 }
EIGEN_DEVICE_FUNC void pscatter(Scalar *to, const Packet &from, Index stride, typename unpacket_traits< Packet >::mask_t umask)

References pscatter().

◆ pscatter< uint16_t, Packet4us >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< uint16_t, Packet4us > ( uint16_t *  to,
const Packet4us from,
Index  stride 
)
3104  {
3105  vst1_lane_u16(to + stride * 0, from, 0);
3106  vst1_lane_u16(to + stride * 1, from, 1);
3107  vst1_lane_u16(to + stride * 2, from, 2);
3108  vst1_lane_u16(to + stride * 3, from, 3);
3109 }

Referenced by pscatter< bfloat16, Packet4bf >().

◆ pscatter< uint16_t, Packet8us >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< uint16_t, Packet8us > ( uint16_t *  to,
const Packet8us from,
Index  stride 
)
1806  {
1807  __lsx_vstelm_h((__m128i)from, to, 0, 0);
1808  __lsx_vstelm_h((__m128i)from, to + stride * 1, 0, 1);
1809  __lsx_vstelm_h((__m128i)from, to + stride * 2, 0, 2);
1810  __lsx_vstelm_h((__m128i)from, to + stride * 3, 0, 3);
1811  __lsx_vstelm_h((__m128i)from, to + stride * 4, 0, 4);
1812  __lsx_vstelm_h((__m128i)from, to + stride * 5, 0, 5);
1813  __lsx_vstelm_h((__m128i)from, to + stride * 6, 0, 6);
1814  __lsx_vstelm_h((__m128i)from, to + stride * 7, 0, 7);
1815 }

◆ pscatter< uint32_t, Packet2ui >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< uint32_t, Packet2ui > ( uint32_t *  to,
const Packet2ui from,
Index  stride 
)
3138  {
3139  vst1_lane_u32(to + stride * 0, from, 0);
3140  vst1_lane_u32(to + stride * 1, from, 1);
3141 }

◆ pscatter< uint32_t, Packet4ui >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pscatter< uint32_t, Packet4ui > ( uint32_t *  to,
const Packet4ui from,
Index  stride 
)
1818  {
1819  __lsx_vstelm_w((__m128i)from, to, 0, 0);
1820  __lsx_vstelm_w((__m128i)from, to + stride * 1, 0, 1);
1821  __lsx_vstelm_w((__m128i)from, to + stride * 2, 0, 2);
1822  __lsx_vstelm_w((__m128i)from, to + stride * 3, 0, 3);
1823 }

◆ pscatter< uint32_t, Packet8ui >()

template<>
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter< uint32_t, Packet8ui > ( uint32_t *  to,
const Packet8ui from,
Index  stride 
)
inline
1724  {
1725  pscatter<int, Packet8i>((int*)to, (Packet8i)from, stride);
1726 }
EIGEN_DEVICE_FUNC void pscatter< int, Packet8i >(int *to, const Packet8i &from, Index stride)
Definition: AVX/PacketMath.h:1710

References pscatter< int, Packet8i >().

◆ pscatter< uint64_t, Packet2ul >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< uint64_t, Packet2ul > ( uint64_t *  to,
const Packet2ul from,
Index  stride 
)
1826  {
1827  __lsx_vstelm_d((__m128i)from, to, 0, 0);
1828  __lsx_vstelm_d((__m128i)from, to + stride * 1, 0, 1);
1829 }

◆ pscatter< uint8_t, Packet16uc >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< uint8_t, Packet16uc > ( uint8_t *  to,
const Packet16uc from,
Index  stride 
)
1786  {
1787  __lsx_vstelm_b((__m128i)from, to, 0, 0);
1788  __lsx_vstelm_b((__m128i)from, to + stride * 1, 0, 1);
1789  __lsx_vstelm_b((__m128i)from, to + stride * 2, 0, 2);
1790  __lsx_vstelm_b((__m128i)from, to + stride * 3, 0, 3);
1791  __lsx_vstelm_b((__m128i)from, to + stride * 4, 0, 4);
1792  __lsx_vstelm_b((__m128i)from, to + stride * 5, 0, 5);
1793  __lsx_vstelm_b((__m128i)from, to + stride * 6, 0, 6);
1794  __lsx_vstelm_b((__m128i)from, to + stride * 7, 0, 7);
1795  __lsx_vstelm_b((__m128i)from, to + stride * 8, 0, 8);
1796  __lsx_vstelm_b((__m128i)from, to + stride * 9, 0, 9);
1797  __lsx_vstelm_b((__m128i)from, to + stride * 10, 0, 10);
1798  __lsx_vstelm_b((__m128i)from, to + stride * 11, 0, 11);
1799  __lsx_vstelm_b((__m128i)from, to + stride * 12, 0, 12);
1800  __lsx_vstelm_b((__m128i)from, to + stride * 13, 0, 13);
1801  __lsx_vstelm_b((__m128i)from, to + stride * 14, 0, 14);
1802  __lsx_vstelm_b((__m128i)from, to + stride * 15, 0, 15);
1803 }

◆ pscatter< uint8_t, Packet4uc >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< uint8_t, Packet4uc > ( uint8_t *  to,
const Packet4uc from,
Index  stride 
)
3047  {
3048  for (int i = 0; i != 4; i++) *(to + i * stride) = reinterpret_cast<const uint8_t*>(&from)[i];
3049 }

References i.

◆ pscatter< uint8_t, Packet8uc >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::pscatter< uint8_t, Packet8uc > ( uint8_t *  to,
const Packet8uc from,
Index  stride 
)
3052  {
3053  vst1_lane_u8(to + stride * 0, from, 0);
3054  vst1_lane_u8(to + stride * 1, from, 1);
3055  vst1_lane_u8(to + stride * 2, from, 2);
3056  vst1_lane_u8(to + stride * 3, from, 3);
3057  vst1_lane_u8(to + stride * 4, from, 4);
3058  vst1_lane_u8(to + stride * 5, from, 5);
3059  vst1_lane_u8(to + stride * 6, from, 6);
3060  vst1_lane_u8(to + stride * 7, from, 7);
3061 }

◆ pscatter< unsigned char, Packet16uc >()

990  {
991  pscatter_common<Packet16uc>(to, from, stride);
992 }

◆ pscatter< unsigned short int, Packet8us >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter< unsigned short int, Packet8us > ( unsigned short int to,
const Packet8us from,
Index  stride 
)
972  {
973  pscatter_common<Packet8us>(to, from, stride);
974 }

◆ pscatter_common()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_common ( __UNPACK_TYPE__(Packet) *  to,
const Packet from,
Index  stride,
const Index  n = unpacket_traits<Packet>::size 
)
935  {
937  eigen_internal_assert(n <= unpacket_traits<Packet>::size && "number of elements will scatter past end of packet");
938  if (stride == 1) {
940  return pstoreu(to, from);
941  } else {
942  return pstoreu_partial(to, from, n);
943  }
944  } else {
945  pstore<__UNPACK_TYPE__(Packet)>(a, from);
947  for (Index i = 0; i < n; i++) {
948  to[i * stride] = a[i];
949  }
950  }
951 }
EIGEN_DEVICE_FUNC void pstoreu_partial(Scalar *to, const Packet &from, const Index n, const Index offset=0)
Definition: GenericPacketMath.h:917

References __UNPACK_TYPE__(), a, EIGEN_ALIGN16, eigen_internal_assert, i, LOAD_STORE_UNROLL_16, n, pstoreu(), and pstoreu_partial().

◆ pscatter_complex_size2()

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_complex_size2 ( Scalar to,
const Packet from,
Index  stride,
const Index  n = 2 
)
233  {
234  eigen_internal_assert(n <= unpacket_traits<Packet>::size && "number of elements will scatter past end of packet");
235  EIGEN_ALIGN16 Scalar af[2];
236  pstore<Scalar>((Scalar*)af, from);
237  for (Index i = 0; i < n; i++) {
238  to[i * stride] = af[i];
239  }
240 }

References EIGEN_ALIGN16, eigen_internal_assert, i, and n.

◆ pscatter_partial()

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::pscatter_partial ( Scalar to,
const Packet from,
Index  stride,
const Index  n 
)
inline
956  {
957  const Index packet_size = unpacket_traits<Packet>::size;
958  EIGEN_ALIGN_MAX Scalar elements[packet_size];
959  pstore<Scalar>(elements, from);
960  for (Index i = 0; i < numext::mini(n, packet_size); i++) {
961  to[i * stride] = elements[i];
962  }
963 }

References EIGEN_ALIGN_MAX, i, Eigen::numext::mini(), and n.

Referenced by storeBF16fromResult().

◆ pscatter_partial< bfloat16, Packet8bf >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_partial< bfloat16, Packet8bf > ( bfloat16 to,
const Packet8bf from,
Index  stride,
const Index  n 
)
1022  {
1023  pscatter_common<Packet8bf>(to, from, stride, n);
1024 }

References n.

◆ pscatter_partial< float, Packet4f >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_partial< float, Packet4f > ( float *  to,
const Packet4f from,
Index  stride,
const Index  n 
)
996  {
997  pscatter_common<Packet4f>(to, from, stride, n);
998 }

References n.

◆ pscatter_partial< int, Packet4i >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_partial< int, Packet4i > ( int to,
const Packet4i from,
Index  stride,
const Index  n 
)
1002  {
1003  pscatter_common<Packet4i>(to, from, stride, n);
1004 }

References n.

◆ pscatter_partial< short int, Packet8s >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_partial< short int, Packet8s > ( short int to,
const Packet8s from,
Index  stride,
const Index  n 
)
1008  {
1009  pscatter_common<Packet8s>(to, from, stride, n);
1010 }

References n.

◆ pscatter_partial< signed char, Packet16c >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_partial< signed char, Packet16c > ( signed char to,
const Packet16c from,
Index  stride,
const Index  n 
)
1029  {
1030  pscatter_common<Packet16c>(to, from, stride, n);
1031 }

References n.

◆ pscatter_partial< std::complex< float >, Packet2cf >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_partial< std::complex< float >, Packet2cf > ( std::complex< float > *  to,
const Packet2cf from,
Index  stride,
const Index  n 
)
251  {
252  pscatter_complex_size2<std::complex<float>, Packet2cf>(to, from, stride, n);
253 }

References n.

◆ pscatter_partial< unsigned char, Packet16uc >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_partial< unsigned char, Packet16uc > ( unsigned char to,
const Packet16uc from,
Index  stride,
const Index  n 
)
1036  {
1037  pscatter_common<Packet16uc>(to, from, stride, n);
1038 }

References n.

◆ pscatter_partial< unsigned short int, Packet8us >()

template<>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pscatter_partial< unsigned short int, Packet8us > ( unsigned short int to,
const Packet8us from,
Index  stride,
const Index  n 
)
1016  {
1017  pscatter_common<Packet8us>(to, from, stride, n);
1018 }

References n.

◆ pselect() [1/29]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pselect ( const Packet mask,
const Packet a,
const Packet b 
)
inline
Returns
or for each field in packet according to \mask
600  {
601  return pselect_impl<Packet>::run(mask, a, b);
602 }

References a, b, and Eigen::internal::pselect_impl< Packet, EnableIf >::run().

◆ pselect() [2/29]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pselect ( const Packet16bf mask,
const Packet16bf a,
const Packet16bf b 
)
2812  {
2813  // Input mask is expected to be all 0/1, handle it with 8-bit
2814  // intrinsic for performance.
2815  return _mm256_blendv_epi8(b, a, mask);
2816 }

References a, and b.

◆ pselect() [3/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet16c Eigen::internal::pselect ( const Packet16c mask,
const Packet16c a,
const Packet16c b 
)
2572  {
2573  return (Packet16c)__lsx_vbitsel_v((__m128i)b, (__m128i)a, (__m128i)mask);
2574 }

References a, and b.

◆ pselect() [4/29]

template<>
EIGEN_DEVICE_FUNC Packet16f Eigen::internal::pselect ( const Packet16f mask,
const Packet16f a,
const Packet16f b 
)
inline
519  {
520  __mmask16 mask16 = _mm512_cmpeq_epi32_mask(_mm512_castps_si512(mask), _mm512_setzero_epi32());
521  return _mm512_mask_blend_ps(mask16, a, b);
522 }

References a, and b.

◆ pselect() [5/29]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pselect ( const Packet16h mask,
const Packet16h a,
const Packet16h b 
)
2310  {
2311  return _mm256_blendv_epi8(b, a, mask);
2312 }

References a, and b.

◆ pselect() [6/29]

template<>
EIGEN_DEVICE_FUNC Packet16i Eigen::internal::pselect ( const Packet16i mask,
const Packet16i a,
const Packet16i b 
)
inline
525  {
526  __mmask16 mask16 = _mm512_cmpeq_epi32_mask(mask, _mm512_setzero_epi32());
527  return _mm512_mask_blend_epi32(mask16, a, b);
528 }

References a, and b.

◆ pselect() [7/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pselect ( const Packet16uc mask,
const Packet16uc a,
const Packet16uc b 
)
2799  {
2800  return __lsx_vbitsel_v(b, a, mask);
2801 }

References a, and b.

◆ pselect() [8/29]

template<>
EIGEN_DEVICE_FUNC Packet2cf Eigen::internal::pselect ( const Packet2cf mask,
const Packet2cf a,
const Packet2cf b 
)
inline
455  {
456  Packet2cf res;
457  res.v = (Packet4f)__lsx_vbitsel_v((__m128i)b.v, (__m128i)a.v, (__m128i)mask.v);
458  return res;
459 }

References a, b, and res.

◆ pselect() [9/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2d Eigen::internal::pselect ( const Packet2d mask,
const Packet2d a,
const Packet2d b 
)
2741  {
2742  return (Packet2d)__lsx_vbitsel_v((__m128i)b, (__m128i)a, (__m128i)mask);
2743 }

References a, and b.

◆ pselect() [10/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2f Eigen::internal::pselect ( const Packet2f mask,
const Packet2f a,
const Packet2f b 
)
4382  {
4383  return vbsl_f32(vreinterpret_u32_f32(mask), a, b);
4384 }

References a, and b.

◆ pselect() [11/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2i Eigen::internal::pselect ( const Packet2i mask,
const Packet2i a,
const Packet2i b 
)
4423  {
4424  return vbsl_s32(vreinterpret_u32_s32(mask), a, b);
4425 }

References a, and b.

◆ pselect() [12/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2l Eigen::internal::pselect ( const Packet2l mask,
const Packet2l a,
const Packet2l b 
)
2784  {
2785  return __lsx_vbitsel_v(b, a, mask);
2786 }

References a, and b.

◆ pselect() [13/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pselect ( const Packet2ui mask,
const Packet2ui a,
const Packet2ui b 
)
4431  {
4432  return vbsl_u32(mask, a, b);
4433 }

References a, and b.

◆ pselect() [14/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pselect ( const Packet2ul mask,
const Packet2ul a,
const Packet2ul b 
)
2860  {
2861  return __lsx_vbitsel_v(b, a, mask);
2862 }

References a, and b.

◆ pselect() [15/29]

template<>
EIGEN_DEVICE_FUNC Packet32h Eigen::internal::pselect ( const Packet32h mask,
const Packet32h a,
const Packet32h b 
)
inline
253  {
254  __mmask32 mask32 = _mm512_cmp_epi16_mask(_mm512_castph_si512(mask), _mm512_setzero_epi32(), _MM_CMPINT_EQ);
255  return _mm512_mask_blend_ph(mask32, a, b);
256 }

References a, and b.

◆ pselect() [16/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pselect ( const Packet4bf mask,
const Packet4bf a,
const Packet4bf b 
)
4918  {
4919  return Packet4bf(pselect<Packet4us>(Packet4us(mask), Packet4us(a), Packet4us(b)));
4920 }

References a, and b.

◆ pselect() [17/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4f Eigen::internal::pselect ( const Packet4f mask,
const Packet4f a,
const Packet4f b 
)
1474  {
1475  return vec_sel(b, a, reinterpret_cast<Packet4ui>(mask));
1476 }

References a, and b.

Referenced by generic_atan(), generic_expm1(), generic_log1p(), generic_ndtri(), generic_ndtri_lt_exp_neg_two(), generic_pow(), generic_pow_impl(), generic_rint(), Eigen::internal::unary_pow::handle_negative_exponent(), Eigen::internal::unary_pow::handle_nonint_nonint_errors(), pabsdiff(), packetmath(), Eigen::internal::scalar_logistic_op< float >::packetOp(), Eigen::internal::scalar_boolean_select_op< ThenScalar, ElseScalar, ConditionScalar >::packetOp(), Eigen::internal::scalar_logistic_op_impl< T, EnableIf >::packetOp(), pacos_float(), paddsub(), pasin_float(), patanh_double(), patanh_float(), pdiv_float_common(), pexp_complex(), pexp_double(), pexp_float(), pfrexp_generic(), phypot_complex(), plog_complex(), plog_impl_double(), plog_impl_float(), prsqrt_float_common(), psincos_double(), psincos_float(), psqrt_complex(), psqrt_float_common(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t< NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&unpacket_traits< Packet >::vectorizable > >::run(), Eigen::internal::generic_reciprocal_newton_step< Packet, Steps >::run(), Eigen::internal::generic_rsqrt_newton_step< Packet, Steps >::run(), Eigen::internal::generic_sqrt_newton_step< Packet, Steps >::run(), Eigen::internal::pminmax_impl< PropagateNaN >::run(), Eigen::internal::pminmax_impl< PropagateNumbers >::run(), Eigen::internal::generic_i0e< T, float >::run(), Eigen::internal::generic_i0e< T, double >::run(), Eigen::internal::generic_i1e< T, float >::run(), Eigen::internal::generic_i1e< T, double >::run(), Eigen::internal::generic_k0e< T, float >::run(), Eigen::internal::generic_k0e< T, double >::run(), Eigen::internal::generic_k0< T, float >::run(), Eigen::internal::generic_k0< T, double >::run(), Eigen::internal::generic_k1e< T, float >::run(), Eigen::internal::generic_k1e< T, double >::run(), Eigen::internal::generic_k1< T, float >::run(), Eigen::internal::generic_k1< T, double >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_y0< T, float >::run(), Eigen::internal::generic_y0< T, double >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), Eigen::internal::generic_y1< T, float >::run(), Eigen::internal::generic_y1< T, double >::run(), Eigen::internal::generic_fast_erf< Scalar >::run(), Eigen::internal::generic_fast_erfc< Scalar >::run(), and twosum().

◆ pselect() [18/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4i Eigen::internal::pselect ( const Packet4i mask,
const Packet4i a,
const Packet4i b 
)
2779  {
2780  return __lsx_vbitsel_v(b, a, mask);
2781 }

References a, and b.

◆ pselect() [19/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4s Eigen::internal::pselect ( const Packet4s mask,
const Packet4s a,
const Packet4s b 
)
4407  {
4408  return vbsl_s16(vreinterpret_u16_s16(mask), a, b);
4409 }

References a, and b.

◆ pselect() [20/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pselect ( const Packet4ui mask,
const Packet4ui a,
const Packet4ui b 
)
2843  {
2844  return __lsx_vbitsel_v(b, a, mask);
2845 }

References a, and b.

◆ pselect() [21/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4us Eigen::internal::pselect ( const Packet4us mask,
const Packet4us a,
const Packet4us b 
)
4415  {
4416  return vbsl_u16(mask, a, b);
4417 }

References a, and b.

◆ pselect() [22/29]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pselect ( const Packet8bf mask,
const Packet8bf a,
const Packet8bf b 
)
2708  {
2709  return _mm_blendv_epi8(b, a, mask);
2710 }

References a, and b.

◆ pselect() [23/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8c Eigen::internal::pselect ( const Packet8c mask,
const Packet8c a,
const Packet8c b 
)
4390  {
4391  return vbsl_s8(vreinterpret_u8_s8(mask), a, b);
4392 }

References a, and b.

◆ pselect() [24/29]

template<>
EIGEN_DEVICE_FUNC Packet8d Eigen::internal::pselect ( const Packet8d mask,
const Packet8d a,
const Packet8d b 
)
inline
537  {
538  __mmask8 mask8 = _mm512_cmp_epi64_mask(_mm512_castpd_si512(mask), _mm512_setzero_epi32(), _MM_CMPINT_EQ);
539  return _mm512_mask_blend_pd(mask8, a, b);
540 }

References a, and b.

◆ pselect() [25/29]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::pselect ( const Packet8h mask,
const Packet8h a,
const Packet8h b 
)
2328  {
2329  return _mm_blendv_epi8(b, a, mask);
2330 }

References a, and b.

◆ pselect() [26/29]

template<>
EIGEN_DEVICE_FUNC Packet8l Eigen::internal::pselect ( const Packet8l mask,
const Packet8l a,
const Packet8l b 
)
inline
531  {
532  __mmask8 mask8 = _mm512_cmpeq_epi64_mask(mask, _mm512_setzero_si512());
533  return _mm512_mask_blend_epi64(mask8, a, b);
534 }

References a, and b.

◆ pselect() [27/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8s Eigen::internal::pselect ( const Packet8s mask,
const Packet8s a,
const Packet8s b 
)
2769  {
2770  return __lsx_vbitsel_v(b, a, mask);
2771 }

References a, and b.

◆ pselect() [28/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pselect ( const Packet8uc mask,
const Packet8uc a,
const Packet8uc b 
)
4398  {
4399  return vbsl_u8(mask, a, b);
4400 }

References a, and b.

◆ pselect() [29/29]

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet8us Eigen::internal::pselect ( const Packet8us mask,
const Packet8us a,
const Packet8us b 
)
2821  {
2822  return __lsx_vbitsel_v(b, a, mask);
2823 }

References a, and b.

◆ pselect< bool >()

template<>
EIGEN_DEVICE_FUNC bool Eigen::internal::pselect< bool > ( const bool cond,
const bool a,
const bool b 
)
inline
605  {
606  return cond ? a : b;
607 }

References a, and b.

◆ pselect< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pselect< Packet4d > ( const Packet4d mask,
const Packet4d a,
const Packet4d b 
)
1439  {
1440  return _mm256_blendv_pd(b, a, mask);
1441 }

References a, and b.

Referenced by pblend().

◆ pselect< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pselect< Packet8f > ( const Packet8f mask,
const Packet8f a,
const Packet8f b 
)
1424  {
1425  return _mm256_blendv_ps(b, a, mask);
1426 }

References a, and b.

Referenced by pblend().

◆ pselect< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pselect< Packet8i > ( const Packet8i mask,
const Packet8i a,
const Packet8i b 
)
1428  {
1429  return _mm256_castps_si256(
1430  _mm256_blendv_ps(_mm256_castsi256_ps(b), _mm256_castsi256_ps(a), _mm256_castsi256_ps(mask)));
1431 }

References a, and b.

◆ pselect< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pselect< Packet8ui > ( const Packet8ui mask,
const Packet8ui a,
const Packet8ui b 
)
1433  {
1434  return _mm256_castps_si256(
1435  _mm256_blendv_ps(_mm256_castsi256_ps(b), _mm256_castsi256_ps(a), _mm256_castsi256_ps(mask)));
1436 }

References a, and b.

◆ pset1()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pset1 ( const typename unpacket_traits< Packet >::type &  a)
inline
Returns
a packet with constant coefficients a, e.g.: (a,a,a,a)
804  {
805  return a;
806 }

References a.

◆ pset1< Packet16b >()

406  {
407  return _mm_set1_epi8(static_cast<char>(from));
408 }

Referenced by pcmp_eq(), and ptrue< Packet16b >().

◆ pset1< Packet16bf >()

2694  {
2695  return _mm256_set1_epi16(from.value);
2696 }

References Eigen::bfloat16_impl::__bfloat16_raw::value.

◆ pset1< Packet16c >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pset1< Packet16c > ( const int8_t &  from)
466  {
467  return __lsx_vreplgr2vr_b(from);
468 }

◆ pset1< Packet16c >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pset1< Packet16c > ( const signed char from)
793  {
794  return pset1_size16<Packet16c>(from);
795 }

Referenced by pdiv< Packet16c >(), and plset< Packet16c >().

◆ pset1< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pset1< Packet16f > ( const float &  from)
252  {
253  return _mm512_set1_ps(from);
254 }

Referenced by pstore1< Packet16f >().

◆ pset1< Packet16h >()

2203  {
2204  return _mm256_set1_epi16(from.x);
2205 }

References Eigen::half_impl::__half_raw::x.

◆ pset1< Packet16i >()

260  {
261  return _mm512_set1_epi32(from);
262 }

Referenced by pstore1< Packet16i >().

◆ pset1< Packet16uc >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::pset1< Packet16uc > ( const uint8_t &  from)
482  {
483  return __lsx_vreplgr2vr_b(from);
484 }

◆ pset1< Packet16uc >() [2/2]

◆ pset1< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pset1< Packet1cd > ( const std::complex< double > &  from)
378  { /* here we really have to use unaligned loads :( */
379  return ploadu<Packet1cd>(&from);
380 }

References ploadu< Packet1cd >().

Referenced by ploaddup< Packet1cd >(), and pset1< Packet4cd >().

◆ pset1< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pset1< Packet1cf > ( const std::complex< float > &  from)
122  {
123  return Packet1cf(vld1_f32(reinterpret_cast<const float*>(&from)));
124 }

Referenced by ploaddup< Packet1cf >().

◆ pset1< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::pset1< Packet2cd > ( const std::complex< double > &  from)
338  {
339  // in case casting to a __m128d* is really not safe, then we can still fallback to this version: (much slower though)
340  // return Packet2cd(_mm256_loadu2_m128d((const double*)&from,(const double*)&from));
341  return Packet2cd(_mm256_broadcast_pd((const __m128d*)(const void*)&from));
342 }

Referenced by ploaddup< Packet2cd >().

◆ pset1< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pset1< Packet2cf > ( const std::complex< float > &  from)
125  {
126  Packet2cf res;
127 #ifdef EIGEN_VECTORIZE_VSX
128  // Load a single std::complex<float> from memory and duplicate
129  //
130  // Using pload would read past the end of the reference in this case
131  // Using vec_xl_len + vec_splat, generates poor assembly
132  __asm__("lxvdsx %x0,%y1" : "=wa"(res.v) : "Z"(from));
133 #else
134  if ((std::ptrdiff_t(&from) % 16) == 0)
135  res.v = pload<Packet4f>((const float*)&from);
136  else
137  res.v = ploadu<Packet4f>((const float*)&from);
138  res.v = vec_perm(res.v, res.v, p16uc_PSET64_HI);
139 #endif
140  return res;
141 }
static Packet16uc p16uc_PSET64_HI
Definition: AltiVec/PacketMath.h:139

References p16uc_PSET64_HI, pload< Packet4f >(), ploadu< Packet4f >(), and res.

Referenced by ploaddup< Packet2cf >().

◆ pset1< Packet2d >()

◆ pset1< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pset1< Packet2f > ( const float &  from)
669  {
670  return vdup_n_f32(from);
671 }

Referenced by plset< Packet2f >().

◆ pset1< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pset1< Packet2i > ( const int32_t &  from)
717  {
718  return vdup_n_s32(from);
719 }

Referenced by pdiv< Packet2i >(), and plset< Packet2i >().

◆ pset1< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pset1< Packet2l > ( const int64_t &  from)
478  {
479  return __lsx_vreplgr2vr_d(from);
480 }

Referenced by ploaddup< Packet2l >(), and plset< Packet2l >().

◆ pset1< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pset1< Packet2ui > ( const uint32_t &  from)
725  {
726  return vdup_n_u32(from);
727 }

Referenced by pdiv< Packet2ui >(), and plset< Packet2ui >().

◆ pset1< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pset1< Packet2ul > ( const uint64_t &  from)
494  {
495  return __lsx_vreplgr2vr_d(from);
496 }

Referenced by ploaddup< Packet2ul >(), plset< Packet2ul >(), and pset1frombits< Packet2d >().

◆ pset1< Packet32h >()

111  {
112  // half/half_raw is bit compatible
113  return _mm512_set1_ph(numext::bit_cast<_Float16>(from));
114 }

Referenced by plset< Packet32h >().

◆ pset1< Packet4bf >()

4825  {
4826  return Packet4bf(pset1<Packet4us>(from.value));
4827 }

References pset1< Packet4us >(), and Eigen::bfloat16_impl::__bfloat16_raw::value.

◆ pset1< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pset1< Packet4c > ( const int8_t &  from)
677  {
678  return vget_lane_s32(vreinterpret_s32_s8(vdup_n_s8(from)), 0);
679 }

Referenced by pdiv< Packet4c >().

◆ pset1< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::pset1< Packet4cd > ( const std::complex< double > &  from)
316  {
317  return Packet4cd(_mm512_castps_pd(_mm512_broadcast_f32x4(_mm_castpd_ps(pset1<Packet1cd>(from).v))));
318 }

References pset1< Packet1cd >(), and v.

◆ pset1< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::pset1< Packet4cf > ( const std::complex< float > &  from)
136  {
137  const float re = std::real(from);
138  const float im = std::imag(from);
139  return Packet4cf(_mm256_set_ps(im, re, im, re, im, re, im, re));
140 }

References imag().

◆ pset1< Packet4d >()

752  {
753  return _mm256_set1_pd(from);
754 }

Referenced by pldexp< Packet4d >(), pldexp_fast< Packet4d >(), plset< Packet4d >(), and pstore1< Packet4d >().

◆ pset1< Packet4f >()

◆ pset1< Packet4i >() [1/2]

◆ pset1< Packet4i >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pset1< Packet4i > ( const int32_t &  from)
474  {
475  return __lsx_vreplgr2vr_w(from);
476 }

◆ pset1< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pset1< Packet4s > ( const int16_t &  from)
701  {
702  return vdup_n_s16(from);
703 }

Referenced by pdiv< Packet4s >(), and plset< Packet4s >().

◆ pset1< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pset1< Packet4uc > ( const uint8_t &  from)
689  {
690  return vget_lane_u32(vreinterpret_u32_u8(vdup_n_u8(from)), 0);
691 }

Referenced by pdiv< Packet4uc >().

◆ pset1< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pset1< Packet4ui > ( const uint32_t &  from)
490  {
491  return __lsx_vreplgr2vr_w(from);
492 }

Referenced by pcmp_le(), pcmp_lt(), plset< Packet4ui >(), and pset1frombits< Packet4f >().

◆ pset1< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pset1< Packet4us > ( const uint16_t &  from)
709  {
710  return vdup_n_u16(from);
711 }

Referenced by pdiv< Packet4us >(), plset< Packet4us >(), pnegate< Packet4bf >(), and pset1< Packet4bf >().

◆ pset1< Packet8bf >()

808  {
809  return pset1_size8<Packet8us>(reinterpret_cast<const unsigned short int&>(from));
810 }

Referenced by KLoop(), loadBfloat16(), plset< Packet8bf >(), and vecColLoop().

◆ pset1< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pset1< Packet8c > ( const int8_t &  from)
681  {
682  return vdup_n_s8(from);
683 }

Referenced by pdiv< Packet8c >(), and plset< Packet8c >().

◆ pset1< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::pset1< Packet8cf > ( const std::complex< float > &  from)
129  {
130  const float re = std::real(from);
131  const float im = std::imag(from);
132  return Packet8cf(_mm512_set_ps(im, re, im, re, im, re, im, re, im, re, im, re, im, re, im, re));
133 }

References imag().

◆ pset1< Packet8d >()

256  {
257  return _mm512_set1_pd(from);
258 }

Referenced by pldexp< Packet8d >(), and pstore1< Packet8d >().

◆ pset1< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pset1< Packet8f > ( const float &  from)
748  {
749  return _mm256_set1_ps(from);
750 }

Referenced by plset< Packet8f >(), and pstore1< Packet8f >().

◆ pset1< Packet8h >()

2217  {
2218  return _mm_set1_epi16(numext::bit_cast<numext::uint16_t>(from));
2219 }

◆ pset1< Packet8i >()

756  {
757  return _mm256_set1_epi32(from);
758 }

Referenced by pldexp< Packet8d >(), plset< Packet8i >(), pset1frombits< Packet8f >(), and pstore1< Packet8i >().

◆ pset1< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pset1< Packet8l > ( const int64_t &  from)
264  {
265  return _mm512_set1_epi64(from);
266 }

Referenced by pstore1< Packet8l >().

◆ pset1< Packet8s >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pset1< Packet8s > ( const int16_t &  from)
470  {
471  return __lsx_vreplgr2vr_h(from);
472 }

◆ pset1< Packet8s >() [2/2]

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pset1< Packet8s > ( const short int from)
783  {
784  return pset1_size8<Packet8s>(from);
785 }

Referenced by plset< Packet8s >().

◆ pset1< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pset1< Packet8uc > ( const uint8_t &  from)
693  {
694  return vdup_n_u8(from);
695 }

Referenced by pdiv< Packet8uc >(), and plset< Packet8uc >().

◆ pset1< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pset1< Packet8ui > ( const uint32_t &  from)
760  {
761  return _mm256_set1_epi32(from);
762 }

Referenced by plset< Packet8ui >().

◆ pset1< Packet8us >() [1/2]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pset1< Packet8us > ( const uint16_t &  from)
486  {
487  return __lsx_vreplgr2vr_h(from);
488 }

◆ pset1< Packet8us >() [2/2]

788  {
789  return pset1_size8<Packet8us>(from);
790 }

Referenced by oneConvertBF16Hi(), oneConvertBF16Lo(), oneConvertBF16Perm(), pcast< Packet8bf, Packet4f >(), and plset< Packet8us >().

◆ pset1< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pset1< PacketXf > ( const float &  from)
384  {
385  return svdup_n_f32(from);
386 }

Referenced by plset< PacketXf >().

◆ pset1< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pset1< PacketXi > ( const numext::int32_t from)
81  {
82  return svdup_n_s32(from);
83 }

Referenced by plset< PacketXi >().

◆ pset1_size16()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::pset1_size16 ( const __UNPACK_TYPE__(Packet) &  from)
767  {
768  Packet v = {from, from, from, from, from, from, from, from, from, from, from, from, from, from, from, from};
769  return v;
770 }

References v.

◆ pset1_size4()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::pset1_size4 ( const __UNPACK_TYPE__(Packet) &  from)
755  {
756  Packet v = {from, from, from, from};
757  return v;
758 }

References v.

◆ pset1_size8()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::pset1_size8 ( const __UNPACK_TYPE__(Packet) &  from)
761  {
762  Packet v = {from, from, from, from, from, from, from, from};
763  return v;
764 }

References v.

◆ pset1frombits()

template<typename Packet , typename BitsType >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pset1frombits ( BitsType  a)
inline
Returns
a packet with constant coefficients set from bits

◆ pset1frombits< Packet16f >()

269  {
270  return _mm512_castsi512_ps(_mm512_set1_epi32(from));
271 }

Referenced by pround< Packet16f >().

◆ pset1frombits< Packet2d >()

513  {
514  return reinterpret_cast<__m128d>((__m128i)pset1<Packet2ul>(from));
515 }

References pset1< Packet2ul >().

Referenced by pfrexp_generic_get_biased_exponent(), and pround().

◆ pset1frombits< Packet2f >()

742  {
743  return vreinterpret_f32_u32(vdup_n_u32(from));
744 }

◆ pset1frombits< Packet32h >()

123  {
124  return _mm512_castsi512_ph(_mm512_set1_epi16(from));
125 }

Referenced by pround< Packet32h >().

◆ pset1frombits< Packet4d >()

769  {
770  return _mm256_castsi256_pd(_mm256_set1_epi64x(from));
771 }

Referenced by pfrexp_generic_get_biased_exponent(), and pround< Packet4d >().

◆ pset1frombits< Packet4f >() [1/2]

509  {
510  return reinterpret_cast<__m128>((__m128i)pset1<Packet4ui>(from));
511 }

References pset1< Packet4ui >().

◆ pset1frombits< Packet4f >() [2/2]

803  {
804  return reinterpret_cast<Packet4f>(pset1<Packet4i>(from));
805 }

References pset1< Packet4i >().

Referenced by pround().

◆ pset1frombits< Packet8d >()

274  {
275  return _mm512_castsi512_pd(_mm512_set1_epi64(from));
276 }

Referenced by pfrexp_generic_get_biased_exponent(), and pround< Packet8d >().

◆ pset1frombits< Packet8f >()

765  {
766  return _mm256_castsi256_ps(pset1<Packet8i>(from));
767 }

References pset1< Packet8i >().

Referenced by pround< Packet8f >().

◆ pset1frombits< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pset1frombits< PacketXf > ( numext::uint32_t  from)
389  {
390  return svreinterpret_f32_u32(svdup_n_u32_x(svptrue_b32(), from));
391 }

◆ psign() [1/2]

template<>
EIGEN_DEVICE_FUNC bool Eigen::internal::psign ( const bool a)
inline
1194  {
1195  return a;
1196 }

References a.

◆ psign() [2/2]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::psign ( const Packet a)
inline

◆ psignbit() [1/15]

template<typename Packet >
EIGEN_DEVICE_FUNC constexpr EIGEN_ALWAYS_INLINE Packet Eigen::internal::psignbit ( const Packet a)
constexpr
Returns
the sign bit of a as a bitmask
1469  {
1470  return psignbit_impl<Packet>::run(a);
1471 }

References a, and run().

◆ psignbit() [2/15]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::psignbit ( const Packet16bf a)
1343  {
1344  return _mm256_srai_epi16(a, 15);
1345 }

References a.

◆ psignbit() [3/15]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::psignbit ( const Packet16f a)
1347  {
1348  return _mm512_castsi512_ps(_mm512_srai_epi32(_mm512_castps_si512(a), 31));
1349 }

References a.

◆ psignbit() [4/15]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::psignbit ( const Packet16h a)
1339  {
1340  return _mm256_srai_epi16(a, 15);
1341 }

References a.

◆ psignbit() [5/15]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::psignbit ( const Packet2d a)
2737  {
2738  return (__m128d)(__lsx_vsrai_d((__m128i)a, 63));
2739 }

References a.

◆ psignbit() [6/15]

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::psignbit ( const Packet2f a)
3431  {
3432  return vreinterpret_f32_s32(vshr_n_s32(vreinterpret_s32_f32(a), 31));
3433 }

References a.

◆ psignbit() [7/15]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::psignbit ( const Packet2l a)
1191  {
1192  Packet4i tmp = psignbit<Packet4i>(Packet4i(a));
1193  return Packet2l(_mm_shuffle_epi32(tmp, (shuffle_mask<1, 1, 3, 3>::mask)));
1194 }

References a, and tmp.

◆ psignbit() [8/15]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::psignbit ( const Packet4f a)
1970  {
1971  return (Packet4f)vec_sra((Packet4i)a, vec_splats((unsigned int)(31)));
1972 }

References a.

◆ psignbit() [9/15]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::psignbit ( const Packet4i a)
1183  {
1184  return _mm_srai_epi32(a, 31);
1185 }

References a.

◆ psignbit() [10/15]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::psignbit ( const Packet4ui a)
1187  {
1188  return pzero(a);
1189 }
EIGEN_STRONG_INLINE Packet4ui pzero(const Packet4ui &)
Definition: SSE/PacketMath.h:457

References a, and pzero().

◆ psignbit() [11/15]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::psignbit ( const Packet8bf a)
1966  {
1967  return vec_sra(a.m_val, vec_splat_u16(15));
1968 }

References a.

Referenced by generic_pow(), Eigen::internal::test_signbit_op< Scalar >::packetOp(), and pacos_float().

◆ psignbit() [12/15]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::psignbit ( const Packet8d a)
1351  {
1352  return _mm512_castsi512_pd(_mm512_srai_epi64(_mm512_castpd_si512(a), 63));
1353 }

References a.

◆ psignbit() [13/15]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::psignbit ( const Packet8f a)
1851  {
1852 #ifdef EIGEN_VECTORIZE_AVX2
1853  return _mm256_castsi256_ps(_mm256_cmpgt_epi32(_mm256_setzero_si256(), _mm256_castps_si256(a)));
1854 #else
1855  return _mm256_castsi256_ps(parithmetic_shift_right<31>(Packet8i(_mm256_castps_si256(a))));
1856 #endif
1857 }

References a.

◆ psignbit() [14/15]

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::psignbit ( const Packet8h a)
1843  {
1844  return _mm_cmpgt_epi16(_mm_setzero_si128(), a);
1845 }

References a.

◆ psignbit() [15/15]

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::psignbit ( const Packet8ui )
1859  {
1860  return _mm256_setzero_si256();
1861 }

◆ psignbit< Packet32h >()

197  {
198  return _mm512_castsi512_ph(_mm512_srai_epi16(_mm512_castph_si512(a), 15));
199 }

References a.

◆ psin()

◆ psin< Packet16h >()

◆ psin< Packet32h >()

737  {
738  Packet16h low;
739  Packet16h high;
740  extract2Packet16h(a, low, high);
741 
742  Packet16h lowOut = psin(low);
743  Packet16h highOut = psin(high);
744 
745  return combine2Packet16h(lowOut, highOut);
746 }
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin(const Packet &a)
Definition: GenericPacketMath.h:1015

References a, combine2Packet16h(), extract2Packet16h(), and psin().

◆ psin< Packet4f >()

◆ psin< Packet8bf >()

2344  {
2346 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin_float(const Packet &x)
Definition: GenericPacketMathFunctions.h:820

References a, BF16_TO_F32_UNARY_OP_WRAPPER, and psin_float().

◆ psin< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::psin< PacketXf > ( const PacketXf &  x)
30  {
31  return psin_float(x);
32 }

References psin_float(), and plotDoE::x.

◆ psin_double()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::psin_double ( const Packet x)
Returns
sin(x) for double precision float
988  {
989  return psincos_double<true>(x);
990 }

References plotDoE::x.

◆ psin_float()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::psin_float ( const Packet x)
Returns
sin(x) for single precision float
820  {
821  return psincos_float<true>(x);
822 }

References plotDoE::x.

Referenced by psin< Packet8bf >(), and psin< PacketXf >().

◆ psincos_double()

template<bool ComputeSine, typename Packet , bool ComputeBoth = false>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::psincos_double ( const Packet x)
872  {
873  typedef typename unpacket_traits<Packet>::integer_packet PacketI;
874  typedef typename unpacket_traits<PacketI>::type ScalarI;
875 
876  const Packet cst_sign_mask = pset1frombits<Packet>(static_cast<Eigen::numext::uint64_t>(0x8000000000000000u));
877 
878  // If the argument is smaller than this value, use a simpler argument reduction
879  const double small_th = 15;
880  // If the argument is bigger than this value, use the non-vectorized std version
881  const double huge_th = 1e14;
882 
883  const Packet cst_2oPI = pset1<Packet>(0.63661977236758134307553505349006); // 2/PI
884  // Integer Packet constants
885  const PacketI cst_one = pset1<PacketI>(ScalarI(1));
886  // Constant for splitting
887  const Packet cst_split = pset1<Packet>(1 << 24);
888 
889  Packet x_abs = pabs(x);
890 
891  // Scale x by 2/Pi
892  PacketI q_int;
893  Packet s;
894 
895  // TODO Implement huge angle argument reduction
896  if (EIGEN_PREDICT_FALSE(predux_any(pcmp_le(pset1<Packet>(small_th), x_abs)))) {
897  Packet q_high = pmul(pfloor(pmul(x_abs, pdiv(cst_2oPI, cst_split))), cst_split);
898  Packet q_low_noround = psub(pmul(x_abs, cst_2oPI), q_high);
899  q_int = pcast<Packet, PacketI>(padd(q_low_noround, pset1<Packet>(0.5)));
900  Packet q_low = pcast<PacketI, Packet>(q_int);
901  s = trig_reduce_medium_double(x_abs, q_high, q_low);
902  } else {
903  Packet qval_noround = pmul(x_abs, cst_2oPI);
904  q_int = pcast<Packet, PacketI>(padd(qval_noround, pset1<Packet>(0.5)));
905  Packet q = pcast<PacketI, Packet>(q_int);
906  s = trig_reduce_small_double(x_abs, q);
907  }
908 
909  // All the upcoming approximating polynomials have even exponents
910  Packet ss = pmul(s, s);
911 
912  // Padé approximant of cos(x)
913  // Assuring < 1 ULP error on the interval [-pi/4, pi/4]
914  // cos(x) ~= (80737373*x^8 - 13853547000*x^6 + 727718024880*x^4 - 11275015752000*x^2 + 23594700729600)/(147173*x^8 +
915  // 39328920*x^6 + 5772800880*x^4 + 522334612800*x^2 + 23594700729600)
916  // MATLAB code to compute those coefficients:
917  // syms x;
918  // cosf = @(x) cos(x);
919  // pade_cosf = pade(cosf(x), x, 0, 'Order', 8)
920  Packet sc1_num = pmadd(ss, pset1<Packet>(80737373), pset1<Packet>(-13853547000));
921  Packet sc2_num = pmadd(sc1_num, ss, pset1<Packet>(727718024880));
922  Packet sc3_num = pmadd(sc2_num, ss, pset1<Packet>(-11275015752000));
923  Packet sc4_num = pmadd(sc3_num, ss, pset1<Packet>(23594700729600));
924  Packet sc1_denum = pmadd(ss, pset1<Packet>(147173), pset1<Packet>(39328920));
925  Packet sc2_denum = pmadd(sc1_denum, ss, pset1<Packet>(5772800880));
926  Packet sc3_denum = pmadd(sc2_denum, ss, pset1<Packet>(522334612800));
927  Packet sc4_denum = pmadd(sc3_denum, ss, pset1<Packet>(23594700729600));
928  Packet scos = pdiv(sc4_num, sc4_denum);
929 
930  // Padé approximant of sin(x)
931  // Assuring < 1 ULP error on the interval [-pi/4, pi/4]
932  // sin(x) ~= (x*(4585922449*x^8 - 1066023933480*x^6 + 83284044283440*x^4 - 2303682236856000*x^2 +
933  // 15605159573203200))/(45*(1029037*x^8 + 345207016*x^6 + 61570292784*x^4 + 6603948711360*x^2 + 346781323848960))
934  // MATLAB code to compute those coefficients:
935  // syms x;
936  // sinf = @(x) sin(x);
937  // pade_sinf = pade(sinf(x), x, 0, 'Order', 8, 'OrderMode', 'relative')
938  Packet ss1_num = pmadd(ss, pset1<Packet>(4585922449), pset1<Packet>(-1066023933480));
939  Packet ss2_num = pmadd(ss1_num, ss, pset1<Packet>(83284044283440));
940  Packet ss3_num = pmadd(ss2_num, ss, pset1<Packet>(-2303682236856000));
941  Packet ss4_num = pmadd(ss3_num, ss, pset1<Packet>(15605159573203200));
942  Packet ss1_denum = pmadd(ss, pset1<Packet>(1029037), pset1<Packet>(345207016));
943  Packet ss2_denum = pmadd(ss1_denum, ss, pset1<Packet>(61570292784));
944  Packet ss3_denum = pmadd(ss2_denum, ss, pset1<Packet>(6603948711360));
945  Packet ss4_denum = pmadd(ss3_denum, ss, pset1<Packet>(346781323848960));
946  Packet ssin = pdiv(pmul(s, ss4_num), pmul(pset1<Packet>(45), ss4_denum));
947 
948  Packet poly_mask = preinterpret<Packet>(pcmp_eq(pand(q_int, cst_one), pzero(q_int)));
949 
950  Packet sign_sin = pxor(x, preinterpret<Packet>(plogical_shift_left<62>(q_int)));
951  Packet sign_cos = preinterpret<Packet>(plogical_shift_left<62>(padd(q_int, cst_one)));
952  Packet sign_bit, sFinalRes;
953  if (ComputeBoth) {
954  Packet peven = peven_mask(x);
955  sign_bit = pselect((s), sign_sin, sign_cos);
956  sFinalRes = pselect(pxor(peven, poly_mask), ssin, scos);
957  } else {
958  sign_bit = ComputeSine ? sign_sin : sign_cos;
959  sFinalRes = ComputeSine ? pselect(poly_mask, ssin, scos) : pselect(poly_mask, scos, ssin);
960  }
961  sign_bit = pand(sign_bit, cst_sign_mask); // clear all but left most bit
962  sFinalRes = pxor(sFinalRes, sign_bit);
963 
964  // If the inputs values are higher than that a value that the argument reduction can currently address, compute them
965  // using std::sin and std::cos
966  // TODO Remove it when huge angle argument reduction is implemented
967  if (EIGEN_PREDICT_FALSE(predux_any(pcmp_le(pset1<Packet>(huge_th), x_abs)))) {
968  const int PacketSize = unpacket_traits<Packet>::size;
969  EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) double sincos_vals[PacketSize];
970  EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) double x_cpy[PacketSize];
971  pstoreu(x_cpy, x);
972  pstoreu(sincos_vals, sFinalRes);
973  for (int k = 0; k < PacketSize; ++k) {
974  double val = x_cpy[k];
975  if (std::abs(val) > huge_th && (numext::isfinite)(val)) {
976  if (ComputeBoth)
977  sincos_vals[k] = k % 2 == 0 ? std::sin(val) : std::cos(val);
978  else
979  sincos_vals[k] = ComputeSine ? std::sin(val) : std::cos(val);
980  }
981  }
982  sFinalRes = ploadu<Packet>(sincos_vals);
983  }
984  return sFinalRes;
985 }
#define EIGEN_PREDICT_FALSE(x)
Definition: Macros.h:1179
Scalar * x_cpy
Definition: level2_cplx_impl.h:177
Packet trig_reduce_medium_double(const Packet &x, const Packet &q_high, const Packet &q_low)
Definition: GenericPacketMathFunctions.h:848
Packet trig_reduce_small_double(const Packet &x, const Packet &q)
Definition: GenericPacketMathFunctions.h:833

References abs(), cos(), EIGEN_ALIGN_TO_BOUNDARY, EIGEN_PREDICT_FALSE, Eigen::numext::isfinite(), k, pabs(), padd(), pand(), pcmp_eq(), pcmp_le(), pdiv(), peven_mask(), pfloor(), pmadd(), pmul(), predux_any(), pselect(), pstoreu(), psub(), pxor(), pzero(), Eigen::numext::q, s, sin(), trig_reduce_medium_double(), trig_reduce_small_double(), calibrate::val, plotDoE::x, and x_cpy.

◆ psincos_float()

template<bool ComputeSine, typename Packet , bool ComputeBoth = false>
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::psincos_float ( const Packet _x)
694  {
695  typedef typename unpacket_traits<Packet>::integer_packet PacketI;
696 
697  const Packet cst_2oPI = pset1<Packet>(0.636619746685028076171875f); // 2/PI
698  const Packet cst_rounding_magic = pset1<Packet>(12582912); // 2^23 for rounding
699  const PacketI csti_1 = pset1<PacketI>(1);
700  const Packet cst_sign_mask = pset1frombits<Packet>(static_cast<Eigen::numext::uint32_t>(0x80000000u));
701 
702  Packet x = pabs(_x);
703 
704  // Scale x by 2/Pi to find x's octant.
705  Packet y = pmul(x, cst_2oPI);
706 
707  // Rounding trick to find nearest integer:
708  Packet y_round = padd(y, cst_rounding_magic);
710  PacketI y_int = preinterpret<PacketI>(y_round); // last 23 digits represent integer (if abs(x)<2^24)
711  y = psub(y_round, cst_rounding_magic); // nearest integer to x * (2/pi)
712 
713 // Subtract y * Pi/2 to reduce x to the interval -Pi/4 <= x <= +Pi/4
714 // using "Extended precision modular arithmetic"
715 #if defined(EIGEN_VECTORIZE_FMA)
716  // This version requires true FMA for high accuracy.
717  // It provides a max error of 1ULP up to (with absolute_error < 5.9605e-08):
718  const float huge_th = ComputeSine ? 117435.992f : 71476.0625f;
719  x = pmadd(y, pset1<Packet>(-1.57079601287841796875f), x);
720  x = pmadd(y, pset1<Packet>(-3.1391647326017846353352069854736328125e-07f), x);
721  x = pmadd(y, pset1<Packet>(-5.390302529957764765544681040410068817436695098876953125e-15f), x);
722 #else
723  // Without true FMA, the previous set of coefficients maintain 1ULP accuracy
724  // up to x<15.7 (for sin), but accuracy is immediately lost for x>15.7.
725  // We thus use one more iteration to maintain 2ULPs up to reasonably large inputs.
726 
727  // The following set of coefficients maintain 1ULP up to 9.43 and 14.16 for sin and cos respectively.
728  // and 2 ULP up to:
729  const float huge_th = ComputeSine ? 25966.f : 18838.f;
730  x = pmadd(y, pset1<Packet>(-1.5703125), x); // = 0xbfc90000
732  x = pmadd(y, pset1<Packet>(-0.000483989715576171875), x); // = 0xb9fdc000
734  x = pmadd(y, pset1<Packet>(1.62865035235881805419921875e-07), x); // = 0x342ee000
735  x = pmadd(y, pset1<Packet>(5.5644315544167710640977020375430583953857421875e-11), x); // = 0x2e74b9ee
736 
737 // For the record, the following set of coefficients maintain 2ULP up
738 // to a slightly larger range:
739 // const float huge_th = ComputeSine ? 51981.f : 39086.125f;
740 // but it slightly fails to maintain 1ULP for two values of sin below pi.
741 // x = pmadd(y, pset1<Packet>(-3.140625/2.), x);
742 // x = pmadd(y, pset1<Packet>(-0.00048351287841796875), x);
743 // x = pmadd(y, pset1<Packet>(-3.13855707645416259765625e-07), x);
744 // x = pmadd(y, pset1<Packet>(-6.0771006282767103812147979624569416046142578125e-11), x);
745 
746 // For the record, with only 3 iterations it is possible to maintain
747 // 1 ULP up to 3PI (maybe more) and 2ULP up to 255.
748 // The coefficients are: 0xbfc90f80, 0xb7354480, 0x2e74b9ee
749 #endif
750 
751  if (predux_any(pcmp_le(pset1<Packet>(huge_th), pabs(_x)))) {
752  const int PacketSize = unpacket_traits<Packet>::size;
753  EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) float vals[PacketSize];
754  EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) float x_cpy[PacketSize];
755  EIGEN_ALIGN_TO_BOUNDARY(sizeof(Packet)) Eigen::numext::int32_t y_int2[PacketSize];
756  pstoreu(vals, pabs(_x));
757  pstoreu(x_cpy, x);
758  pstoreu(y_int2, y_int);
759  for (int k = 0; k < PacketSize; ++k) {
760  float val = vals[k];
761  if (val >= huge_th && (numext::isfinite)(val)) x_cpy[k] = trig_reduce_huge(val, &y_int2[k]);
762  }
763  x = ploadu<Packet>(x_cpy);
764  y_int = ploadu<PacketI>(y_int2);
765  }
766 
767  // Compute the sign to apply to the polynomial.
768  // sin: sign = second_bit(y_int) xor signbit(_x)
769  // cos: sign = second_bit(y_int+1)
770  Packet sign_bit = ComputeSine ? pxor(_x, preinterpret<Packet>(plogical_shift_left<30>(y_int)))
771  : preinterpret<Packet>(plogical_shift_left<30>(padd(y_int, csti_1)));
772  sign_bit = pand(sign_bit, cst_sign_mask); // clear all but left most bit
773 
774  // Get the polynomial selection mask from the second bit of y_int
775  // We'll calculate both (sin and cos) polynomials and then select from the two.
776  Packet poly_mask = preinterpret<Packet>(pcmp_eq(pand(y_int, csti_1), pzero(y_int)));
777 
778  Packet x2 = pmul(x, x);
779 
780  // Evaluate the cos(x) polynomial. (-Pi/4 <= x <= Pi/4)
781  Packet y1 = pset1<Packet>(2.4372266125283204019069671630859375e-05f);
782  y1 = pmadd(y1, x2, pset1<Packet>(-0.00138865201734006404876708984375f));
783  y1 = pmadd(y1, x2, pset1<Packet>(0.041666619479656219482421875f));
784  y1 = pmadd(y1, x2, pset1<Packet>(-0.5f));
785  y1 = pmadd(y1, x2, pset1<Packet>(1.f));
786 
787  // Evaluate the sin(x) polynomial. (Pi/4 <= x <= Pi/4)
788  // octave/matlab code to compute those coefficients:
789  // x = (0:0.0001:pi/4)';
790  // A = [x.^3 x.^5 x.^7];
791  // w = ((1.-(x/(pi/4)).^2).^5)*2000+1; # weights trading relative accuracy
792  // c = (A'*diag(w)*A)\‍(A'*diag(w)*(sin(x)-x)); # weighted LS, linear coeff forced to 1
793  // printf('%.64f\n %.64f\n%.64f\n', c(3), c(2), c(1))
794  //
795  Packet y2 = pset1<Packet>(-0.0001959234114083702898469196984621021329076029360294342041015625f);
796  y2 = pmadd(y2, x2, pset1<Packet>(0.0083326873655616851693794799871284340042620897293090820312500000f));
797  y2 = pmadd(y2, x2, pset1<Packet>(-0.1666666203982298255503735617821803316473960876464843750000000000f));
798  y2 = pmul(y2, x2);
799  y2 = pmadd(y2, x, x);
800 
801  // Select the correct result from the two polynomials.
802  if (ComputeBoth) {
803  Packet peven = peven_mask(x);
804  Packet ysin = pselect(poly_mask, y2, y1);
805  Packet ycos = pselect(poly_mask, y1, y2);
806  Packet sign_bit_sin = pxor(_x, preinterpret<Packet>(plogical_shift_left<30>(y_int)));
807  Packet sign_bit_cos = preinterpret<Packet>(plogical_shift_left<30>(padd(y_int, csti_1)));
808  sign_bit_sin = pand(sign_bit_sin, cst_sign_mask); // clear all but left most bit
809  sign_bit_cos = pand(sign_bit_cos, cst_sign_mask); // clear all but left most bit
810  y = pselect(peven, pxor(ysin, sign_bit_sin), pxor(ycos, sign_bit_cos));
811  } else {
812  y = ComputeSine ? pselect(poly_mask, y2, y1) : pselect(poly_mask, y1, y2);
813  y = pxor(y, sign_bit);
814  }
815  // Update the sign and filter huge inputs
816  return y;
817 }
float trig_reduce_huge(float xf, Eigen::numext::int32_t *quadrant)
Definition: GenericPacketMathFunctions.h:641
EIGEN_STRONG_INLINE Packet4i plogical_shift_left(const Packet4i &a)
Definition: AltiVec/PacketMath.h:1983
EIGEN_DEVICE_FUNC Target preinterpret(const Packet &a)
Definition: GenericPacketMath.h:257

References EIGEN_ALIGN_TO_BOUNDARY, EIGEN_OPTIMIZATION_BARRIER, Eigen::numext::isfinite(), k, pabs(), padd(), pand(), pcmp_eq(), pcmp_le(), peven_mask(), pmadd(), pmul(), predux_any(), pselect(), pstoreu(), psub(), pxor(), pzero(), trig_reduce_huge(), calibrate::val, plotDoE::x, Global_parameters::x2(), x_cpy, and y.

◆ psincos_inner_msa_float()

template<bool sine>
Packet4f Eigen::internal::psincos_inner_msa_float ( const Packet4f _x)
228  {
229  static EIGEN_DECLARE_CONST_Packet4f(sincos_max_arg, 13176795.0f); // Approx. (2**24) / (4/Pi).
230  static EIGEN_DECLARE_CONST_Packet4f(minus_cephes_DP1, -0.78515625f);
231  static EIGEN_DECLARE_CONST_Packet4f(minus_cephes_DP2, -2.4187564849853515625e-4f);
232  static EIGEN_DECLARE_CONST_Packet4f(minus_cephes_DP3, -3.77489497744594108e-8f);
233  static EIGEN_DECLARE_CONST_Packet4f(sincof_p0, -1.9515295891e-4f);
234  static EIGEN_DECLARE_CONST_Packet4f(sincof_p1, 8.3321608736e-3f);
235  static EIGEN_DECLARE_CONST_Packet4f(sincof_p2, -1.6666654611e-1f);
236  static EIGEN_DECLARE_CONST_Packet4f(coscof_p0, 2.443315711809948e-5f);
237  static EIGEN_DECLARE_CONST_Packet4f(coscof_p1, -1.388731625493765e-3f);
238  static EIGEN_DECLARE_CONST_Packet4f(coscof_p2, 4.166664568298827e-2f);
239  static EIGEN_DECLARE_CONST_Packet4f(cephes_FOPI, 1.27323954473516f); // 4/Pi.
240  static EIGEN_DECLARE_CONST_Packet4f(half, 0.5f);
241  static EIGEN_DECLARE_CONST_Packet4f(1, 1.0f);
242 
243  Packet4f x = pabs(_x);
244 
245  // Translate infinite arguments into NANs.
246  Packet4f zero_or_nan_if_inf = psub(_x, _x);
247  x = padd(x, zero_or_nan_if_inf);
248  // Prevent sin/cos from generating values larger than 1.0 in magnitude
249  // for very large arguments by setting x to 0.0.
250  Packet4i small_or_nan_mask = __builtin_msa_fcult_w(x, p4f_sincos_max_arg);
251  x = pand(x, (Packet4f)small_or_nan_mask);
252 
253  // Scale x by 4/Pi to find x's octant.
254  Packet4f y = pmul(x, p4f_cephes_FOPI);
255  // Get the octant. We'll reduce x by this number of octants or by one more than it.
256  Packet4i y_int = __builtin_msa_ftrunc_s_w(y);
257  // x's from even-numbered octants will translate to octant 0: [0, +Pi/4].
258  // x's from odd-numbered octants will translate to octant -1: [-Pi/4, 0].
259  // Adjustment for odd-numbered octants: octant = (octant + 1) & (~1).
260  Packet4i y_int1 = __builtin_msa_addvi_w(y_int, 1);
261  Packet4i y_int2 = (Packet4i)__builtin_msa_bclri_w((Packet4ui)y_int1, 0); // bclri = bit-clear
262  y = __builtin_msa_ffint_s_w(y_int2);
263 
264  // Compute the sign to apply to the polynomial.
265  Packet4i sign_mask = sine ? pxor(__builtin_msa_slli_w(y_int1, 29), (Packet4i)_x)
266  : __builtin_msa_slli_w(__builtin_msa_addvi_w(y_int, 3), 29);
267 
268  // Get the polynomial selection mask.
269  // We'll calculate both (sin and cos) polynomials and then select from the two.
270  Packet4i poly_mask = __builtin_msa_ceqi_w(__builtin_msa_slli_w(y_int2, 30), 0);
271 
272  // Reduce x by y octants to get: -Pi/4 <= x <= +Pi/4.
273  // The magic pass: "Extended precision modular arithmetic"
274  // x = ((x - y * DP1) - y * DP2) - y * DP3
275  Packet4f tmp1 = pmul(y, p4f_minus_cephes_DP1);
276  Packet4f tmp2 = pmul(y, p4f_minus_cephes_DP2);
277  Packet4f tmp3 = pmul(y, p4f_minus_cephes_DP3);
278  x = padd(x, tmp1);
279  x = padd(x, tmp2);
280  x = padd(x, tmp3);
281 
282  // Evaluate the cos(x) polynomial.
283  y = p4f_coscof_p0;
284  Packet4f z = pmul(x, x);
285  y = pmadd(y, z, p4f_coscof_p1);
286  y = pmadd(y, z, p4f_coscof_p2);
287  y = pmul(y, z);
288  y = pmul(y, z);
289  y = __builtin_msa_fmsub_w(y, z, p4f_half);
290  y = padd(y, p4f_1);
291 
292  // Evaluate the sin(x) polynomial.
293  Packet4f y2 = p4f_sincof_p0;
294  y2 = pmadd(y2, z, p4f_sincof_p1);
295  y2 = pmadd(y2, z, p4f_sincof_p2);
296  y2 = pmul(y2, z);
297  y2 = pmadd(y2, x, x);
298 
299  // Select the correct result from the two polynomials.
300  y = sine ? (Packet4f)__builtin_msa_bsel_v((v16u8)poly_mask, (v16u8)y, (v16u8)y2)
301  : (Packet4f)__builtin_msa_bsel_v((v16u8)poly_mask, (v16u8)y2, (v16u8)y);
302 
303  // Update the sign.
304  sign_mask = pxor(sign_mask, (Packet4i)y);
305  y = (Packet4f)__builtin_msa_binsli_w((v4u32)y, (v4u32)sign_mask, 0); // binsli = bit-insert-left
306  return y;
307 }

References EIGEN_DECLARE_CONST_Packet4f(), pabs(), padd(), pand(), pmadd(), pmul(), psub(), pxor(), plotDoE::x, and y.

Referenced by pcos< Packet4f >(), and psin< Packet4f >().

◆ psinh()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::psinh ( const Packet a)
Returns
the hyperbolic sine of a (coeff-wise)
1050  {
1052  return sinh(a);
1053 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 sinh(const bfloat16 &a)
Definition: BFloat16.h:637

References a, EIGEN_USING_STD, and Eigen::bfloat16_impl::sinh().

Referenced by Eigen::internal::scalar_sinh_op< Scalar >::packetOp().

◆ psqrt() [1/11]

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::psqrt ( const Packet a)
Returns
the square-root of a (coeff-wise)
1131  {
1132  return numext::sqrt(a);
1133 }

References a, and Eigen::numext::sqrt().

◆ psqrt() [2/11]

template<>
EIGEN_STRONG_INLINE Packet16uc Eigen::internal::psqrt ( const Packet16uc a)

Computes the integer square root

Remarks
The calculation is performed using an algorithm which iterates through each binary digit of the result and tests whether setting that digit to 1 would cause the square of the value to be greater than the argument value. The algorithm is described in detail here: http://ww1.microchip.com/downloads/en/AppNotes/91040a.pdf .
2803  {
2804  __m128i res = {0, 0};
2805  __m128i add = {0x0808080808080808, 0x0808080808080808};
2806  for (int i = 0; i < 4; i++) {
2807  const __m128i temp = __lsx_vor_v(res, add);
2808  const __m128i tmul = __lsx_vpackev_b(__lsx_vmulwod_h_bu(temp, temp), __lsx_vmulwev_h_bu(temp, temp));
2809  res = __lsx_vbitsel_v(res, temp, __lsx_vsle_bu(tmul, a));
2810  add = __lsx_vsrli_b(add, 1);
2811  }
2812  return res;
2813 }

References a, i, and res.

◆ psqrt() [3/11]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::psqrt ( const Packet2d a)
2180  {
2181  return __lsx_vfsqrt_d(a);
2182 }

References a.

◆ psqrt() [4/11]

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::psqrt ( const Packet2f a)
4691  {
4692  return psqrt_float_common(a);
4693 }
EIGEN_STRONG_INLINE Packet psqrt_float_common(const Packet &a)
Definition: NEON/PacketMath.h:4672

References a, and psqrt_float_common().

◆ psqrt() [5/11]

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::psqrt ( const Packet2ui a)

Computes the integer square root

Remarks
The calculation is performed using an algorithm which iterates through each binary digit of the result and tests whether setting that digit to 1 would cause the square of the value to be greater than the argument value. The algorithm is described in detail here: http://ww1.microchip.com/downloads/en/AppNotes/91040a.pdf .
4568  {
4569  uint32x2_t res = vdup_n_u32(0);
4570  uint32x2_t add = vdup_n_u32(0x8000);
4571  for (int i = 0; i < 16; i++) {
4572  const uint32x2_t temp = vorr_u32(res, add);
4573  res = vbsl_u32(vcge_u32(a, vmul_u32(temp, temp)), temp, res);
4574  add = vshr_n_u32(add, 1);
4575  }
4576  return res;
4577 }

References a, i, and res.

◆ psqrt() [6/11]

◆ psqrt() [7/11]

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::psqrt ( const Packet4uc a)

Computes the integer square root

Remarks
The calculation is performed using an algorithm which iterates through each binary digit of the result and tests whether setting that digit to 1 would cause the square of the value to be greater than the argument value. The algorithm is described in detail here: http://ww1.microchip.com/downloads/en/AppNotes/91040a.pdf .
4507  {
4508  uint8x8_t x = vreinterpret_u8_u32(vdup_n_u32(a));
4509  uint8x8_t res = vdup_n_u8(0);
4510  uint8x8_t add = vdup_n_u8(0x8);
4511  for (int i = 0; i < 4; i++) {
4512  const uint8x8_t temp = vorr_u8(res, add);
4513  res = vbsl_u8(vcge_u8(x, vmul_u8(temp, temp)), temp, res);
4514  add = vshr_n_u8(add, 1);
4515  }
4516  return vget_lane_u32(vreinterpret_u32_u8(res), 0);
4517 }

References a, i, res, and plotDoE::x.

◆ psqrt() [8/11]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::psqrt ( const Packet4ui a)

Computes the integer square root

Remarks
The calculation is performed using an algorithm which iterates through each binary digit of the result and tests whether setting that digit to 1 would cause the square of the value to be greater than the argument value. The algorithm is described in detail here: http://ww1.microchip.com/downloads/en/AppNotes/91040a.pdf .
2847  {
2848  __m128i res = {0, 0};
2849  __m128i add = {0x0000800000008000, 0x0000800000008000};
2850  for (int i = 0; i < 4; i++) {
2851  const __m128i temp = __lsx_vor_v(res, add);
2852  const __m128i tmul = __lsx_vpackev_w(__lsx_vmulwod_d_wu(temp, temp), __lsx_vmulwev_d_wu(temp, temp));
2853  res = __lsx_vbitsel_v(res, temp, __lsx_vsle_wu(tmul, a));
2854  add = __lsx_vsrli_w(add, 1);
2855  }
2856  return res;
2857 }

References a, i, and res.

◆ psqrt() [9/11]

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::psqrt ( const Packet4us a)

Computes the integer square root

Remarks
The calculation is performed using an algorithm which iterates through each binary digit of the result and tests whether setting that digit to 1 would cause the square of the value to be greater than the argument value. The algorithm is described in detail here: http://ww1.microchip.com/downloads/en/AppNotes/91040a.pdf .
4544  {
4545  uint16x4_t res = vdup_n_u16(0);
4546  uint16x4_t add = vdup_n_u16(0x80);
4547  for (int i = 0; i < 8; i++) {
4548  const uint16x4_t temp = vorr_u16(res, add);
4549  res = vbsl_u16(vcge_u16(a, vmul_u16(temp, temp)), temp, res);
4550  add = vshr_n_u16(add, 1);
4551  }
4552  return res;
4553 }

References a, i, and res.

◆ psqrt() [10/11]

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::psqrt ( const Packet8uc a)

Computes the integer square root

Remarks
The calculation is performed using an algorithm which iterates through each binary digit of the result and tests whether setting that digit to 1 would cause the square of the value to be greater than the argument value. The algorithm is described in detail here: http://ww1.microchip.com/downloads/en/AppNotes/91040a.pdf .
4520  {
4521  uint8x8_t res = vdup_n_u8(0);
4522  uint8x8_t add = vdup_n_u8(0x8);
4523  for (int i = 0; i < 4; i++) {
4524  const uint8x8_t temp = vorr_u8(res, add);
4525  res = vbsl_u8(vcge_u8(a, vmul_u8(temp, temp)), temp, res);
4526  add = vshr_n_u8(add, 1);
4527  }
4528  return res;
4529 }

References a, i, and res.

◆ psqrt() [11/11]

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::psqrt ( const Packet8us a)

Computes the integer square root

Remarks
The calculation is performed using an algorithm which iterates through each binary digit of the result and tests whether setting that digit to 1 would cause the square of the value to be greater than the argument value. The algorithm is described in detail here: http://ww1.microchip.com/downloads/en/AppNotes/91040a.pdf .
2825  {
2826  __m128i res = {0, 0};
2827  __m128i add = {0x0080008000800080, 0x0080008000800080};
2828  for (int i = 0; i < 4; i++) {
2829  const __m128i temp = __lsx_vor_v(res, add);
2830  const __m128i tmul = __lsx_vpackev_h(__lsx_vmulwod_w_hu(temp, temp), __lsx_vmulwev_w_hu(temp, temp));
2831  res = __lsx_vbitsel_v(res, temp, __lsx_vsle_hu(tmul, a));
2832  add = __lsx_vsrli_h(add, 1);
2833  }
2834  return res;
2835 }

References a, i, and res.

◆ psqrt< Packet16b >()

41  {
42  return x;
43 }

References plotDoE::x.

◆ psqrt< Packet16f >()

64  {
65  return _mm512_sqrt_ps(x);
66 }

References plotDoE::x.

◆ psqrt< Packet1cd >()

462  {
463  return psqrt_complex<Packet1cd>(a);
464 }

References a.

◆ psqrt< Packet1cf >()

473  {
474  return psqrt_complex<Packet1cf>(a);
475 }

References a.

◆ psqrt< Packet2cd >()

434  {
435  return psqrt_complex<Packet2cd>(a);
436 }

References a.

◆ psqrt< Packet2cf >()

370  {
371  return psqrt_complex<Packet2cf>(a);
372 }

References a.

◆ psqrt< Packet2d >()

37  {
38  return _mm_sqrt_pd(x);
39 }

References plotDoE::x.

Referenced by prsqrt< Packet2d >().

◆ psqrt< Packet32h >()

530  {
531  return _mm512_sqrt_ph(a);
532 }

References a.

◆ psqrt< Packet4cd >()

445  {
446  return psqrt_complex<Packet4cd>(a);
447 }

References a.

◆ psqrt< Packet4cf >()

439  {
440  return psqrt_complex<Packet4cf>(a);
441 }

References a.

◆ psqrt< Packet4d >()

47  {
48  return _mm256_sqrt_pd(_x);
49 }

◆ psqrt< Packet4f >()

68  {
69  Packet4f a;
70  for (Index i = 0; i < packet_traits<float>::size; i++) {
71  a[i] = numext::sqrt(x[i]);
72  }
73  return a;
74 }

References a, i, size, Eigen::numext::sqrt(), and plotDoE::x.

Referenced by prsqrt< Packet4f >().

◆ psqrt< Packet8cf >()

450  {
451  return psqrt_complex<Packet8cf>(a);
452 }

References a.

◆ psqrt< Packet8d >()

69  {
70  return _mm512_sqrt_pd(x);
71 }

References plotDoE::x.

◆ psqrt< Packet8f >()

43  {
44  return _mm256_sqrt_ps(_x);
45 }

◆ psqrt< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::psqrt< PacketXf > ( const PacketXf &  a)
665  {
666  return svsqrt_f32_x(svptrue_b32(), a);
667 }

References a.

◆ psqrt_complex()

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::psqrt_complex ( const Packet a)
Returns
sqrt(x) for complex types
1409  {
1410  typedef typename unpacket_traits<Packet>::type Scalar;
1411  typedef typename Scalar::value_type RealScalar;
1412  typedef typename unpacket_traits<Packet>::as_real RealPacket;
1413 
1414  // Computes the principal sqrt of the complex numbers in the input.
1415  //
1416  // For example, for packets containing 2 complex numbers stored in interleaved format
1417  // a = [a0, a1] = [x0, y0, x1, y1],
1418  // where x0 = real(a0), y0 = imag(a0) etc., this function returns
1419  // b = [b0, b1] = [u0, v0, u1, v1],
1420  // such that b0^2 = a0, b1^2 = a1.
1421  //
1422  // To derive the formula for the complex square roots, let's consider the equation for
1423  // a single complex square root of the number x + i*y. We want to find real numbers
1424  // u and v such that
1425  // (u + i*v)^2 = x + i*y <=>
1426  // u^2 - v^2 + i*2*u*v = x + i*v.
1427  // By equating the real and imaginary parts we get:
1428  // u^2 - v^2 = x
1429  // 2*u*v = y.
1430  //
1431  // For x >= 0, this has the numerically stable solution
1432  // u = sqrt(0.5 * (x + sqrt(x^2 + y^2)))
1433  // v = 0.5 * (y / u)
1434  // and for x < 0,
1435  // v = sign(y) * sqrt(0.5 * (-x + sqrt(x^2 + y^2)))
1436  // u = 0.5 * (y / v)
1437  //
1438  // To avoid unnecessary over- and underflow, we compute sqrt(x^2 + y^2) as
1439  // l = max(|x|, |y|) * sqrt(1 + (min(|x|, |y|) / max(|x|, |y|))^2) ,
1440 
1441  // In the following, without lack of generality, we have annotated the code, assuming
1442  // that the input is a packet of 2 complex numbers.
1443  //
1444  // Step 1. Compute l = [l0, l0, l1, l1], where
1445  // l0 = sqrt(x0^2 + y0^2), l1 = sqrt(x1^2 + y1^2)
1446  // To avoid over- and underflow, we use the stable formula for each hypotenuse
1447  // l0 = (min0 == 0 ? max0 : max0 * sqrt(1 + (min0/max0)**2)),
1448  // where max0 = max(|x0|, |y0|), min0 = min(|x0|, |y0|), and similarly for l1.
1449 
1450  RealPacket a_abs = pabs(a.v); // [|x0|, |y0|, |x1|, |y1|]
1451  RealPacket a_abs_flip = pcplxflip(Packet(a_abs)).v; // [|y0|, |x0|, |y1|, |x1|]
1452  RealPacket a_max = pmax(a_abs, a_abs_flip);
1453  RealPacket a_min = pmin(a_abs, a_abs_flip);
1454  RealPacket a_min_zero_mask = pcmp_eq(a_min, pzero(a_min));
1455  RealPacket a_max_zero_mask = pcmp_eq(a_max, pzero(a_max));
1456  RealPacket r = pdiv(a_min, a_max);
1457  const RealPacket cst_one = pset1<RealPacket>(RealScalar(1));
1458  RealPacket l = pmul(a_max, psqrt(padd(cst_one, pmul(r, r)))); // [l0, l0, l1, l1]
1459  // Set l to a_max if a_min is zero.
1460  l = pselect(a_min_zero_mask, a_max, l);
1461 
1462  // Step 2. Compute [rho0, *, rho1, *], where
1463  // rho0 = sqrt(0.5 * (l0 + |x0|)), rho1 = sqrt(0.5 * (l1 + |x1|))
1464  // We don't care about the imaginary parts computed here. They will be overwritten later.
1465  const RealPacket cst_half = pset1<RealPacket>(RealScalar(0.5));
1466  Packet rho;
1467  rho.v = psqrt(pmul(cst_half, padd(a_abs, l)));
1468 
1469  // Step 3. Compute [rho0, eta0, rho1, eta1], where
1470  // eta0 = (y0 / l0) / 2, and eta1 = (y1 / l1) / 2.
1471  // set eta = 0 of input is 0 + i0.
1472  RealPacket eta = pandnot(pmul(cst_half, pdiv(a.v, pcplxflip(rho).v)), a_max_zero_mask);
1473  RealPacket real_mask = peven_mask(a.v);
1474  Packet positive_real_result;
1475  // Compute result for inputs with positive real part.
1476  positive_real_result.v = pselect(real_mask, rho.v, eta);
1477 
1478  // Step 4. Compute solution for inputs with negative real part:
1479  // [|eta0|, sign(y0)*rho0, |eta1|, sign(y1)*rho1]
1480  const RealPacket cst_imag_sign_mask = pset1<Packet>(Scalar(RealScalar(0.0), RealScalar(-0.0))).v;
1481  RealPacket imag_signs = pand(a.v, cst_imag_sign_mask);
1482  Packet negative_real_result;
1483  // Notice that rho is positive, so taking it's absolute value is a noop.
1484  negative_real_result.v = por(pabs(pcplxflip(positive_real_result).v), imag_signs);
1485 
1486  // Step 5. Select solution branch based on the sign of the real parts.
1487  Packet negative_real_mask;
1488  negative_real_mask.v = pcmp_lt(pand(real_mask, a.v), pzero(a.v));
1489  negative_real_mask.v = por(negative_real_mask.v, pcplxflip(negative_real_mask).v);
1490  Packet result = pselect(negative_real_mask, negative_real_result, positive_real_result);
1491 
1492  // Step 6. Handle special cases for infinities:
1493  // * If z is (x,+∞), the result is (+∞,+∞) even if x is NaN
1494  // * If z is (x,-∞), the result is (+∞,-∞) even if x is NaN
1495  // * If z is (-∞,y), the result is (0*|y|,+∞) for finite or NaN y
1496  // * If z is (+∞,y), the result is (+∞,0*|y|) for finite or NaN y
1497  const RealPacket cst_pos_inf = pset1<RealPacket>(NumTraits<RealScalar>::infinity());
1498  Packet is_inf;
1499  is_inf.v = pcmp_eq(a_abs, cst_pos_inf);
1500  Packet is_real_inf;
1501  is_real_inf.v = pand(is_inf.v, real_mask);
1502  is_real_inf = por(is_real_inf, pcplxflip(is_real_inf));
1503  // prepare packet of (+∞,0*|y|) or (0*|y|,+∞), depending on the sign of the infinite real part.
1504  Packet real_inf_result;
1505  real_inf_result.v = pmul(a_abs, pset1<Packet>(Scalar(RealScalar(1.0), RealScalar(0.0))).v);
1506  real_inf_result.v = pselect(negative_real_mask.v, pcplxflip(real_inf_result).v, real_inf_result.v);
1507  // prepare packet of (+∞,+∞) or (+∞,-∞), depending on the sign of the infinite imaginary part.
1508  Packet is_imag_inf;
1509  is_imag_inf.v = pandnot(is_inf.v, real_mask);
1510  is_imag_inf = por(is_imag_inf, pcplxflip(is_imag_inf));
1511  Packet imag_inf_result;
1512  imag_inf_result.v = por(pand(cst_pos_inf, real_mask), pandnot(a.v, real_mask));
1513  // unless otherwise specified, if either the real or imaginary component is nan, the entire result is nan
1514  Packet result_is_nan = pisnan(result);
1515  result = por(result_is_nan, result);
1516 
1517  return pselect(is_imag_inf, imag_inf_result, pselect(is_real_inf, real_inf_result, result));
1518 }

References a, TestSoln::eta, pabs(), padd(), pand(), pandnot(), pcmp_eq(), pcmp_lt(), pcplxflip(), pdiv(), peven_mask(), pisnan(), pmax(), pmin(), pmul(), por(), pselect(), psqrt(), pzero(), UniformPSDSelfTest::r, v, and Eigen::internal::Packet2cf::v.

◆ psqrt_float_common()

template<typename Packet >
EIGEN_STRONG_INLINE Packet Eigen::internal::psqrt_float_common ( const Packet a)
4672  {
4673  const Packet cst_zero = pzero(a);
4674  const Packet cst_inf = pset1<Packet>(NumTraits<float>::infinity());
4675 
4676  Packet result = pmul(a, prsqrt_float_unsafe(a));
4677  Packet a_is_zero = pcmp_eq(a, cst_zero);
4678  Packet a_is_inf = pcmp_eq(a, cst_inf);
4679  Packet return_a = por(a_is_zero, a_is_inf);
4680 
4681  result = pselect(return_a, a, result);
4682  return result;
4683 }

References a, pcmp_eq(), pmul(), por(), prsqrt_float_unsafe(), pselect(), and pzero().

Referenced by psqrt().

◆ pstore()

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::pstore ( Scalar to,
const Packet from 
)
inline

◆ pstore1()

template<typename Packet >
void Eigen::internal::pstore1 ( typename unpacket_traits< Packet >::type *  to,
const typename unpacket_traits< Packet >::type &  a 
)
inline

copy a packet with constant coefficient a (e.g., [a,a,a,a]) to *to. to must be 16 bytes aligned

1327  {
1328  pstore(to, pset1<Packet>(a));
1329 }

References a, and pstore().

◆ pstore1< Packet16f >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore1< Packet16f > ( float *  to,
const float &  a 
)
1244  {
1246  pstore(to, pa);
1247 }
const char const int const RealScalar const RealScalar * pa
Definition: level2_cplx_impl.h:20
EIGEN_STRONG_INLINE Packet16f pset1< Packet16f >(const float &from)
Definition: AVX512/PacketMath.h:252

References a, pa, pset1< Packet16f >(), and pstore().

◆ pstore1< Packet16i >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore1< Packet16i > ( int to,
const int a 
)
1254  {
1256  pstore(to, pa);
1257 }
EIGEN_STRONG_INLINE Packet16i pset1< Packet16i >(const int &from)
Definition: AVX512/PacketMath.h:260

References a, pa, pset1< Packet16i >(), and pstore().

◆ pstore1< Packet2d >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore1< Packet2d > ( double to,
const double a 
)
1711  {
1712  Packet2d pa = _mm_set_sd(a);
1713  pstore(to, Packet2d(vec2d_swizzle1(pa, 0, 0)));
1714 }

References a, pa, pstore(), and vec2d_swizzle1.

◆ pstore1< Packet4d >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore1< Packet4d > ( double to,
const double a 
)
1734  {
1736  pstore(to, pa);
1737 }

References a, pa, pset1< Packet4d >(), and pstore().

◆ pstore1< Packet4f >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore1< Packet4f > ( float *  to,
const float &  a 
)
1705  {
1706  Packet4f pa = _mm_set_ss(a);
1707  pstore(to, Packet4f(vec4f_swizzle1(pa, 0, 0, 0, 0)));
1708 }

References a, pa, pstore(), and vec4f_swizzle1().

◆ pstore1< Packet8d >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore1< Packet8d > ( double to,
const double a 
)
1249  {
1251  pstore(to, pa);
1252 }

References a, pa, pset1< Packet8d >(), and pstore().

◆ pstore1< Packet8f >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore1< Packet8f > ( float *  to,
const float &  a 
)
1729  {
1731  pstore(to, pa);
1732 }

References a, pa, pset1< Packet8f >(), and pstore().

◆ pstore1< Packet8i >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore1< Packet8i > ( int to,
const int a 
)
1739  {
1741  pstore(to, pa);
1742 }

References a, pa, pset1< Packet8i >(), and pstore().

◆ pstore1< Packet8l >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore1< Packet8l > ( int64_t *  to,
const int64_t &  a 
)
1259  {
1261  pstore(to, pa);
1262 }
EIGEN_STRONG_INLINE Packet8l pset1< Packet8l >(const int64_t &from)
Definition: AVX512/PacketMath.h:264

References a, pa, pset1< Packet8l >(), and pstore().

◆ pstore< bfloat16 >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< bfloat16 > ( bfloat16 to,
const Packet16bf from 
)
2716  {
2717  _mm256_store_si256(reinterpret_cast<__m256i*>(to), from);
2718 }

◆ pstore< bfloat16 >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< bfloat16 > ( bfloat16 to,
const Packet4bf from 
)
4845  {
4846  EIGEN_DEBUG_ALIGNED_STORE vst1_u16(reinterpret_cast<uint16_t*>(to), from);
4847 }
#define EIGEN_DEBUG_ALIGNED_STORE
Definition: GenericPacketMath.h:38

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< bfloat16 >() [3/3]

◆ pstore< bool >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< bool > ( bool to,
const Packet16b from 
)
1470  {
1471  EIGEN_DEBUG_ALIGNED_STORE _mm_store_si128(reinterpret_cast<__m128i*>(to), from);
1472 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< double >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< double > ( double to,
const Packet2d from 
)
1537  {
1538  EIGEN_DEBUG_ALIGNED_STORE __lsx_vst(from, to, 0);
1539 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< double >() [2/3]

◆ pstore< double >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< double > ( double to,
const Packet8d from 
)
1098  {
1099  EIGEN_DEBUG_ALIGNED_STORE _mm512_store_pd(to, from);
1100 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< Eigen::half >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< Eigen::half > ( Eigen::half to,
const Packet8h from 
)
2237  {
2238  _mm_store_si128(reinterpret_cast<__m128i*>(to), from);
2239 }

◆ pstore< float >() [1/5]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< float > ( float *  to,
const Packet16f from 
)
1094  {
1095  EIGEN_DEBUG_ALIGNED_STORE _mm512_store_ps(to, from);
1096 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< float >() [2/5]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< float > ( float *  to,
const Packet2f from 
)
2682  {
2683  EIGEN_DEBUG_ALIGNED_STORE vst1_f32(to, from);
2684 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< float >() [3/5]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< float > ( float *  to,
const Packet4f from 
)
642  {
643  pstore_common<Packet4f>(to, from);
644 }

◆ pstore< float >() [4/5]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< float > ( float *  to,
const Packet8f from 
)
1607  {
1608  EIGEN_DEBUG_ALIGNED_STORE _mm256_store_ps(to, from);
1609 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< float >() [5/5]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< float > ( float *  to,
const PacketXf &  from 
)
547  {
548  EIGEN_DEBUG_ALIGNED_STORE svst1_f32(svptrue_b32(), to, from);
549 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< half >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< half > ( Eigen::half to,
const Packet16h from 
)
2223  {
2224  // (void*) -> workaround clang warning:
2225  // cast from 'Eigen::half *' to '__m256i *' increases required alignment from 2 to 32
2226  _mm256_store_si256((__m256i*)(void*)to, from);
2227 }

Referenced by ptranspose().

◆ pstore< half >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< half > ( Eigen::half to,
const Packet32h from 
)
158  {
159  EIGEN_DEBUG_ALIGNED_STORE _mm512_store_ph(to, from);
160 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int > ( int to,
const Packet16i from 
)
1102  {
1103  EIGEN_DEBUG_ALIGNED_STORE _mm512_store_epi32(to, from);
1104 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int > ( int to,
const Packet4i from 
)
647  {
648  pstore_common<Packet4i>(to, from);
649 }

◆ pstore< int >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int > ( int to,
const Packet8i from 
)
1615  {
1616  EIGEN_DEBUG_ALIGNED_STORE _mm256_store_si256(reinterpret_cast<__m256i*>(to), from);
1617 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int16_t >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int16_t > ( int16_t *  to,
const Packet4s from 
)
2714  {
2715  EIGEN_DEBUG_ALIGNED_STORE vst1_s16(to, from);
2716 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int16_t >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int16_t > ( int16_t *  to,
const Packet8s from 
)
1545  {
1546  EIGEN_DEBUG_ALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1547 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int32_t >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int32_t > ( int32_t *  to,
const Packet2i from 
)
2730  {
2731  EIGEN_DEBUG_ALIGNED_STORE vst1_s32(to, from);
2732 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int32_t >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int32_t > ( int32_t *  to,
const Packet4i from 
)
1549  {
1550  EIGEN_DEBUG_ALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1551 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int64_t >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int64_t > ( int64_t *  to,
const Packet2l from 
)
1553  {
1554  EIGEN_DEBUG_ALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1555 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int64_t >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int64_t > ( int64_t *  to,
const Packet8l from 
)
1106  {
1107  EIGEN_DEBUG_ALIGNED_STORE _mm512_store_epi64(to, from);
1108 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int8_t >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int8_t > ( int8_t *  to,
const Packet16c from 
)
1541  {
1542  EIGEN_DEBUG_ALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1543 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< int8_t >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int8_t > ( int8_t *  to,
const Packet4c from 
)
2690  {
2691  memcpy(to, &from, sizeof(from));
2692 }

◆ pstore< int8_t >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< int8_t > ( int8_t *  to,
const Packet8c from 
)
2694  {
2695  EIGEN_DEBUG_ALIGNED_STORE vst1_s8(to, from);
2696 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< numext::int32_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< numext::int32_t > ( numext::int32_t to,
const PacketXi &  from 
)
223  {
224  EIGEN_DEBUG_ALIGNED_STORE svst1_s32(svptrue_b32(), to, from);
225 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< short int >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< short int > ( short int to,
const Packet8s from 
)
652  {
653  pstore_common<Packet8s>(to, from);
654 }

◆ pstore< signed char >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< signed char > ( signed char to,
const Packet16c from 
)
667  {
668  pstore_common<Packet16c>(to, from);
669 }

◆ pstore< std::complex< double > >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< std::complex< double > > ( std::complex< double > *  to,
const Packet1cd from 
)
389  {
390  EIGEN_DEBUG_ALIGNED_STORE pstore((double*)to, Packet2d(from.v));
391 }

References EIGEN_DEBUG_ALIGNED_STORE, and pstore().

◆ pstore< std::complex< double > >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< std::complex< double > > ( std::complex< double > *  to,
const Packet2cd from 
)
350  {
351  EIGEN_DEBUG_ALIGNED_STORE _mm256_store_pd((double*)to, from.v);
352 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< std::complex< double > >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< std::complex< double > > ( std::complex< double > *  to,
const Packet4cd from 
)
327  {
328  EIGEN_DEBUG_ALIGNED_STORE pstore((double*)to, from.v);
329 }

References EIGEN_DEBUG_ALIGNED_STORE, and pstore().

◆ pstore< std::complex< float > >() [1/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< std::complex< float > > ( std::complex< float > *  to,
const Packet1cf from 
)
326  {
327  EIGEN_DEBUG_ALIGNED_STORE pstore((float*)to, from.v);
328 }

References EIGEN_DEBUG_ALIGNED_STORE, and pstore().

◆ pstore< std::complex< float > >() [2/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< std::complex< float > > ( std::complex< float > *  to,
const Packet2cf from 
)
167  {
168  pstore((float*)to, from.v);
169 }

References pstore().

◆ pstore< std::complex< float > >() [3/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< std::complex< float > > ( std::complex< float > *  to,
const Packet4cf from 
)
151  {
152  EIGEN_DEBUG_ALIGNED_STORE _mm256_store_ps(&numext::real_ref(*to), from.v);
153 }

References EIGEN_DEBUG_ALIGNED_STORE, and Eigen::numext::real_ref().

◆ pstore< std::complex< float > >() [4/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< std::complex< float > > ( std::complex< float > *  to,
const Packet8cf from 
)

◆ pstore< uint16_t >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< uint16_t > ( uint16_t *  to,
const Packet4us from 
)
2722  {
2723  EIGEN_DEBUG_ALIGNED_STORE vst1_u16(to, from);
2724 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< uint16_t >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< uint16_t > ( uint16_t *  to,
const Packet8us from 
)
1561  {
1562  EIGEN_DEBUG_ALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1563 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< uint32_t >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< uint32_t > ( uint32_t *  to,
const Packet2ui from 
)
2738  {
2739  EIGEN_DEBUG_ALIGNED_STORE vst1_u32(to, from);
2740 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< uint32_t >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< uint32_t > ( uint32_t *  to,
const Packet4ui from 
)
1565  {
1566  EIGEN_DEBUG_ALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1567 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< uint32_t >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< uint32_t > ( uint32_t *  to,
const Packet8ui from 
)
1619  {
1620  EIGEN_DEBUG_ALIGNED_STORE _mm256_store_si256(reinterpret_cast<__m256i*>(to), from);
1621 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< uint64_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< uint64_t > ( uint64_t *  to,
const Packet2ul from 
)
1569  {
1570  EIGEN_DEBUG_ALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1571 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< uint8_t >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< uint8_t > ( uint8_t *  to,
const Packet16uc from 
)
1557  {
1558  EIGEN_DEBUG_ALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1559 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< uint8_t >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< uint8_t > ( uint8_t *  to,
const Packet4uc from 
)
2702  {
2703  memcpy(to, &from, sizeof(from));
2704 }

◆ pstore< uint8_t >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< uint8_t > ( uint8_t *  to,
const Packet8uc from 
)
2706  {
2707  EIGEN_DEBUG_ALIGNED_STORE vst1_u8(to, from);
2708 }

References EIGEN_DEBUG_ALIGNED_STORE.

◆ pstore< unsigned char >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< unsigned char > ( unsigned char to,
const Packet16uc from 
)
672  {
673  pstore_common<Packet16uc>(to, from);
674 }

◆ pstore< unsigned short int >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstore< unsigned short int > ( unsigned short int to,
const Packet8us from 
)
657  {
658  pstore_common<Packet8us>(to, from);
659 }

◆ pstore_common()

template<typename Packet >
EIGEN_STRONG_INLINE void Eigen::internal::pstore_common ( __UNPACK_TYPE__(Packet) *  to,
const Packet from 
)
629  {
630  // some versions of GCC throw "unused-but-set-parameter" (float *to).
631  // ignoring these warnings for now.
634 #ifdef EIGEN_VECTORIZE_VSX
635  vec_xst(from, 0, to);
636 #else
637  vec_st(from, 0, to);
638 #endif
639 }

References EIGEN_DEBUG_ALIGNED_STORE, and EIGEN_UNUSED_VARIABLE.

◆ pstore_partial()

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::pstore_partial ( Scalar to,
const Packet from,
const Index  n,
const Index  offset = 0 
)
inline

copy n elements of the packet from to *to, to must be properly aligned offset indicates the starting element in which to store and offset + n <= unpacket_traits::size

899  {
900  const Index packet_size = unpacket_traits<Packet>::size;
901  eigen_assert(n + offset <= packet_size && "number of elements plus offset will write past end of packet");
902  EIGEN_ALIGN_MAX Scalar elements[packet_size];
903  pstore<Scalar>(elements, from);
904  for (Index i = 0; i < numext::mini(n, packet_size - offset); i++) {
905  to[i] = elements[i + offset];
906  }
907 }

References EIGEN_ALIGN_MAX, eigen_assert, i, Eigen::numext::mini(), and n.

Referenced by packetmath(), packetmath_scatter_gather(), pstore_partial< std::complex< float > >(), and pstoret_partial().

◆ pstore_partial< bfloat16 >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstore_partial< bfloat16 > ( bfloat16 to,
const Packet8bf from,
const Index  n,
const Index  offset 
)
738  {
739  pstore_partial_common<Packet8us>(reinterpret_cast<unsigned short int*>(to), from.m_val, n, offset);
740 }

References Eigen::internal::eigen_packet_wrapper< T, unique_id >::m_val, and n.

Referenced by Eigen::internal::dhs_pack< bfloat16, DataMapper, Packet8bf, StorageOrder, PanelMode, true >::operator()().

◆ pstore_partial< float >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstore_partial< float > ( float *  to,
const Packet4f from,
const Index  n,
const Index  offset 
)
715  {
716  pstore_partial_common<Packet4f>(to, from, n, offset);
717 }

References n.

◆ pstore_partial< int >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstore_partial< int > ( int to,
const Packet4i from,
const Index  n,
const Index  offset 
)
720  {
721  pstore_partial_common<Packet4i>(to, from, n, offset);
722 }

References n.

◆ pstore_partial< short int >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstore_partial< short int > ( short int to,
const Packet8s from,
const Index  n,
const Index  offset 
)
726  {
727  pstore_partial_common<Packet8s>(to, from, n, offset);
728 }

References n.

◆ pstore_partial< signed char >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstore_partial< signed char > ( signed char to,
const Packet16c from,
const Index  n,
const Index  offset 
)
744  {
745  pstore_partial_common<Packet16c>(to, from, n, offset);
746 }

References n.

◆ pstore_partial< std::complex< float > >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstore_partial< std::complex< float > > ( std::complex< float > *  to,
const Packet2cf from,
const Index  n,
const Index  offset 
)
176  {
177  pstore_partial((float*)to, from.v, n * 2, offset * 2);
178 }
EIGEN_DEVICE_FUNC void pstore_partial(Scalar *to, const Packet &from, const Index n, const Index offset=0)
Definition: GenericPacketMath.h:899

References n, and pstore_partial().

◆ pstore_partial< unsigned char >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstore_partial< unsigned char > ( unsigned char to,
const Packet16uc from,
const Index  n,
const Index  offset 
)
750  {
751  pstore_partial_common<Packet16uc>(to, from, n, offset);
752 }

References n.

◆ pstore_partial< unsigned short int >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstore_partial< unsigned short int > ( unsigned short int to,
const Packet8us from,
const Index  n,
const Index  offset 
)
732  {
733  pstore_partial_common<Packet8us>(to, from, n, offset);
734 }

References n.

◆ pstore_partial_common()

template<typename Packet >
EIGEN_ALWAYS_INLINE void Eigen::internal::pstore_partial_common ( __UNPACK_TYPE__(Packet) *  to,
const Packet from,
const Index  n,
const Index  offset 
)
678  {
679  // some versions of GCC throw "unused-but-set-parameter" (float *to).
680  // ignoring these warnings for now.
681  const Index packet_size = unpacket_traits<Packet>::size;
682  eigen_internal_assert(n + offset <= packet_size && "number of elements plus offset will write past end of packet");
683  const Index size = sizeof(__UNPACK_TYPE__(Packet));
684 #ifdef _ARCH_PWR9
685  EIGEN_UNUSED_VARIABLE(packet_size);
688  Packet store = from;
689  if (offset) {
690  Packet16uc shift = pset1<Packet16uc>(offset * 8 * size);
691 #ifdef _BIG_ENDIAN
692  store = Packet(vec_slo(Packet16uc(store), shift));
693 #else
694  store = Packet(vec_sro(Packet16uc(store), shift));
695 #endif
696  }
697  vec_xst_len(store, to, n * size);
698 #else
699  if (n) {
700  EIGEN_ALIGN16 __UNPACK_TYPE__(Packet) store[packet_size];
701  pstore(store, from);
702  unsigned char* store2 = reinterpret_cast<unsigned char*>(store + offset);
703  unsigned char* to2 = reinterpret_cast<unsigned char*>(to);
704  Index n2 = n * size;
705  if (16 <= n2) {
706  pstore(to2, ploadu<Packet16uc>(store2));
707  } else {
708  memcpy((void*)to2, (void*)store2, n2);
709  }
710  }
711 #endif
712 }

References __UNPACK_TYPE__(), EIGEN_ALIGN16, EIGEN_DEBUG_ALIGNED_STORE, eigen_internal_assert, EIGEN_UNUSED_VARIABLE, n, ploadu< Packet16uc >(), pset1< Packet16uc >(), pstore(), and size.

◆ pstorel() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstorel ( double to,
const Packet2d from 
)
1506  {
1507  EIGEN_DEBUG_UNALIGNED_STORE _mm_storel_pd(to, from);
1508 }
#define EIGEN_DEBUG_UNALIGNED_STORE
Definition: GenericPacketMath.h:42

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstorel() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstorel ( float *  to,
const Packet4f from 
)
1502  {
1503  EIGEN_DEBUG_UNALIGNED_STORE _mm_storel_pi(reinterpret_cast<__m64*>(to), from);
1504 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstorel() [3/3]

template<typename Scalar , typename Packet >
EIGEN_STRONG_INLINE void Eigen::internal::pstorel ( Scalar to,
const Packet from 
)

◆ pstores() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstores ( double to,
const Packet2d from 
)
1517  {
1518  EIGEN_DEBUG_UNALIGNED_STORE _mm_store_sd(to, from);
1519 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstores() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstores ( float *  to,
const Packet4f from 
)
1513  {
1514  EIGEN_DEBUG_UNALIGNED_STORE _mm_store_ss(to, from);
1515 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstores() [3/3]

template<typename Scalar , typename Packet >
EIGEN_STRONG_INLINE void Eigen::internal::pstores ( Scalar to,
const Packet from 
)

◆ pstoret()

template<typename Scalar , typename Packet , int Alignment>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pstoret ( Scalar to,
const Packet from 
)

copy the packet from to *to. The pointer from must be aligned on a Alignment bytes boundary.

1355  {
1356  if (Alignment >= unpacket_traits<Packet>::alignment)
1357  pstore(to, from);
1358  else
1359  pstoreu(to, from);
1360 }
EIGEN_DEVICE_FUNC std::enable_if_t< unpacket_traits< Packet >::masked_store_available, void > pstoreu(Scalar *to, const Packet &from, typename unpacket_traits< Packet >::mask_t umask)

References pstore(), and pstoreu().

◆ pstoret_partial()

template<typename Scalar , typename Packet , int Alignment>
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void Eigen::internal::pstoret_partial ( Scalar to,
const Packet from,
const Index  n,
const Index  offset = 0 
)

copy n elements of the packet from to *to. The pointer from must be aligned on a Alignment bytes boundary.

1366  {
1367  if (Alignment >= unpacket_traits<Packet>::alignment)
1368  pstore_partial(to, from, n, offset);
1369  else
1370  pstoreu_partial(to, from, n, offset);
1371 }

References n, pstore_partial(), and pstoreu_partial().

◆ pstoreu() [1/2]

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::pstoreu ( Scalar to,
const Packet from 
)
inline

copy the packet from to *to, (un-aligned store)

911  {
912  (*to) = from;
913 }

Referenced by Eigen::internal::gemm_class< Scalar, is_unit_inc >::c_store(), pcast_array< SrcPacket, TgtPacket, 1, TgtCoeffRatio >::cast(), pcast_array< SrcPacket, TgtPacket, 2, 1 >::cast(), pcast_array< SrcPacket, TgtPacket, 4, 1 >::cast(), pcast_array< SrcPacket, TgtPacket, 8, 1 >::cast(), convertArrayPointerBF16toF32DupOne(), Eigen::internal::gemm_pack_lhs< Scalar, Index, DataMapper, Pack1, Pack2, Packet, ColMajor, Conjugate, PanelMode >::operator()(), Eigen::internal::gemm_pack_rhs< Scalar, Index, DataMapper, 8, ColMajor, Conjugate, PanelMode >::operator()(), Eigen::internal::gemm_pack_rhs< Scalar, Index, DataMapper, 8, RowMajor, Conjugate, PanelMode >::operator()(), Eigen::internal::gemm_pack_rhs< Scalar, Index, DataMapper, nr, ColMajor, Conjugate, PanelMode >::operator()(), Eigen::internal::gemm_pack_rhs< Scalar, Index, DataMapper, nr, RowMajor, Conjugate, PanelMode >::operator()(), operator<<(), outputVecCol(), outputVecResults(), packetmath(), pload_partial_common(), ploadu_partial_common(), pscatter_common(), psincos_double(), psincos_float(), pstoret(), pstoreu< std::complex< double > >(), pstoreu< std::complex< float > >(), pstoreu_partial_common(), pstoreu_pmadd_complex(), Eigen::internal::general_matrix_vector_product< Index, LhsScalar, LhsMapper, ColMajor, ConjugateLhs, RhsScalar, RhsMapper, ConjugateRhs, Version >::run(), Eigen::internal::apply_rotation_in_the_plane_selector< Scalar, OtherScalar, SizeAtCompileTime, MinAlignment, true >::run(), Eigen::test::packet_helper< Cond, Packet >::store(), storeBF16fromResult(), storeConvertTwoBF16(), storeF32(), and storeMaddData().

◆ pstoreu() [2/2]

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC std::enable_if_t<unpacket_traits<Packet>::masked_store_available, void> Eigen::internal::pstoreu ( Scalar to,
const Packet from,
typename unpacket_traits< Packet >::mask_t  umask 
)
inline

copy the packet from to *to, (un-aligned store with a mask) There is no generic implementation. We only have implementations for specialized cases. Generic case should not be called.

◆ pstoreu< bfloat16 >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< bfloat16 > ( bfloat16 to,
const Packet16bf from 
)
2721  {
2722  _mm256_storeu_si256(reinterpret_cast<__m256i*>(to), from);
2723 }

◆ pstoreu< bfloat16 >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< bfloat16 > ( bfloat16 to,
const Packet4bf from 
)
4850  {
4851  EIGEN_DEBUG_UNALIGNED_STORE vst1_u16(reinterpret_cast<uint16_t*>(to), from);
4852 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< bfloat16 >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< bfloat16 > ( bfloat16 to,
const Packet8bf from 
)
1772  {
1773  pstoreu_common<Packet8us>(reinterpret_cast<unsigned short int*>(to), from.m_val);
1774 }

References Eigen::internal::eigen_packet_wrapper< T, unique_id >::m_val.

◆ pstoreu< bool >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< bool > ( bool to,
const Packet16b from 
)
1495  {
1496  EIGEN_DEBUG_UNALIGNED_STORE _mm_storeu_si128(reinterpret_cast<__m128i*>(to), from);
1497 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< double >() [1/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< double > ( double to,
const Packet2d from 
)
1578  {
1579  EIGEN_DEBUG_UNALIGNED_STORE __lsx_vst(from, to, 0);
1580 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< double >() [2/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< double > ( double to,
const Packet4d from 
)
1628  {
1629  EIGEN_DEBUG_UNALIGNED_STORE _mm256_storeu_pd(to, from);
1630 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< double >() [3/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< double > ( double to,
const Packet8d from 
)
1115  {
1116  EIGEN_DEBUG_UNALIGNED_STORE _mm512_storeu_pd(to, from);
1117 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< double >() [4/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< double > ( double to,
const Packet8d from,
uint8_t  umask 
)
1132  {
1133  __mmask8 mask = static_cast<__mmask8>(umask);
1134  EIGEN_DEBUG_UNALIGNED_STORE return _mm512_mask_storeu_pd(to, mask, from);
1135 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< Eigen::half >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< Eigen::half > ( Eigen::half to,
const Packet8h from 
)
2242  {
2243  _mm_storeu_si128(reinterpret_cast<__m128i*>(to), from);
2244 }

◆ pstoreu< float >() [1/7]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< float > ( float *  to,
const Packet16f from 
)
1111  {
1112  EIGEN_DEBUG_UNALIGNED_STORE _mm512_storeu_ps(to, from);
1113 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< float >() [2/7]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< float > ( float *  to,
const Packet16f from,
uint16_t  umask 
)
1127  {
1128  __mmask16 mask = static_cast<__mmask16>(umask);
1129  EIGEN_DEBUG_UNALIGNED_STORE return _mm512_mask_storeu_ps(to, mask, from);
1130 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< float >() [3/7]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< float > ( float *  to,
const Packet2f from 
)
2755  {
2756  EIGEN_DEBUG_UNALIGNED_STORE vst1_f32(to, from);
2757 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< float >() [4/7]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< float > ( float *  to,
const Packet4f from 
)
1756  {
1757  pstoreu_common<Packet4f>(to, from);
1758 }

◆ pstoreu< float >() [5/7]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< float > ( float *  to,
const Packet8f from 
)
1624  {
1625  EIGEN_DEBUG_UNALIGNED_STORE _mm256_storeu_ps(to, from);
1626 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< float >() [6/7]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< float > ( float *  to,
const Packet8f from,
uint8_t  umask 
)
1641  {
1642 #ifdef EIGEN_VECTORIZE_AVX512
1643  __mmask16 mask = static_cast<__mmask16>(umask & 0x00FF);
1644  EIGEN_DEBUG_UNALIGNED_STORE _mm512_mask_storeu_ps(to, mask, _mm512_castps256_ps512(from));
1645 #else
1646  Packet8i mask = _mm256_set1_epi8(static_cast<char>(umask));
1647  const Packet8i bit_mask =
1648  _mm256_set_epi32(0x7f7f7f7f, 0xbfbfbfbf, 0xdfdfdfdf, 0xefefefef, 0xf7f7f7f7, 0xfbfbfbfb, 0xfdfdfdfd, 0xfefefefe);
1649  mask = por<Packet8i>(mask, bit_mask);
1650  mask = pcmp_eq<Packet8i>(mask, _mm256_set1_epi32(0xffffffff));
1651 #if EIGEN_COMP_MSVC
1652  // MSVC sometimes seems to use a bogus mask with maskstore.
1653  const __m256i ifrom = _mm256_castps_si256(from);
1654  EIGEN_DEBUG_UNALIGNED_STORE _mm_maskmoveu_si128(_mm256_extractf128_si256(ifrom, 0), _mm256_extractf128_si256(mask, 0),
1655  reinterpret_cast<char*>(to));
1656  EIGEN_DEBUG_UNALIGNED_STORE _mm_maskmoveu_si128(_mm256_extractf128_si256(ifrom, 1), _mm256_extractf128_si256(mask, 1),
1657  reinterpret_cast<char*>(to + 4));
1658 #else
1659  EIGEN_DEBUG_UNALIGNED_STORE _mm256_maskstore_ps(to, mask, from);
1660 #endif
1661 #endif
1662 }

References EIGEN_DEBUG_UNALIGNED_STORE, and por< Packet8i >().

◆ pstoreu< float >() [7/7]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< float > ( float *  to,
const PacketXf &  from 
)
552  {
553  EIGEN_DEBUG_UNALIGNED_STORE svst1_f32(svptrue_b32(), to, from);
554 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< half >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< half > ( Eigen::half to,
const Packet16h from 
)
2230  {
2231  // (void*) -> workaround clang warning:
2232  // cast from 'Eigen::half *' to '__m256i *' increases required alignment from 2 to 32
2233  _mm256_storeu_si256((__m256i*)(void*)to, from);
2234 }

◆ pstoreu< half >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< half > ( Eigen::half to,
const Packet32h from 
)
165  {
166  EIGEN_DEBUG_UNALIGNED_STORE _mm512_storeu_ph(to, from);
167 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int > ( int to,
const Packet16i from 
)
1119  {
1120  EIGEN_DEBUG_UNALIGNED_STORE _mm512_storeu_epi32(to, from);
1121 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int > ( int to,
const Packet4i from 
)
1760  {
1761  pstoreu_common<Packet4i>(to, from);
1762 }

◆ pstoreu< int >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int > ( int to,
const Packet8i from 
)
1632  {
1633  EIGEN_DEBUG_UNALIGNED_STORE _mm256_storeu_si256(reinterpret_cast<__m256i*>(to), from);
1634 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int16_t >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int16_t > ( int16_t *  to,
const Packet4s from 
)
2787  {
2788  EIGEN_DEBUG_UNALIGNED_STORE vst1_s16(to, from);
2789 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int16_t >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int16_t > ( int16_t *  to,
const Packet8s from 
)
1587  {
1588  EIGEN_DEBUG_UNALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1589 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int32_t >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int32_t > ( int32_t *  to,
const Packet2i from 
)
2803  {
2804  EIGEN_DEBUG_UNALIGNED_STORE vst1_s32(to, from);
2805 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int32_t >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int32_t > ( int32_t *  to,
const Packet4i from 
)
1591  {
1592  EIGEN_DEBUG_UNALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1593 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int64_t >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int64_t > ( int64_t *  to,
const Packet2l from 
)
1595  {
1596  EIGEN_DEBUG_UNALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1597 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int64_t >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int64_t > ( int64_t *  to,
const Packet8l from 
)
1123  {
1124  EIGEN_DEBUG_UNALIGNED_STORE _mm512_storeu_epi64(to, from);
1125 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int8_t >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int8_t > ( int8_t *  to,
const Packet16c from 
)
1583  {
1584  EIGEN_DEBUG_UNALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1585 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< int8_t >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int8_t > ( int8_t *  to,
const Packet4c from 
)
2763  {
2764  memcpy(to, &from, sizeof(from));
2765 }

◆ pstoreu< int8_t >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< int8_t > ( int8_t *  to,
const Packet8c from 
)
2767  {
2768  EIGEN_DEBUG_UNALIGNED_STORE vst1_s8(to, from);
2769 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< numext::int32_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< numext::int32_t > ( numext::int32_t to,
const PacketXi &  from 
)
228  {
229  EIGEN_DEBUG_UNALIGNED_STORE svst1_s32(svptrue_b32(), to, from);
230 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< short int >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< short int > ( short int to,
const Packet8s from 
)
1764  {
1765  pstoreu_common<Packet8s>(to, from);
1766 }

◆ pstoreu< signed char >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< signed char > ( signed char to,
const Packet16c from 
)
1776  {
1777  pstoreu_common<Packet16c>(to, from);
1778 }

◆ pstoreu< std::complex< double > >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< std::complex< double > > ( std::complex< double > *  to,
const Packet1cd from 
)
393  {
394  EIGEN_DEBUG_UNALIGNED_STORE pstoreu((double*)to, Packet2d(from.v));
395 }

References EIGEN_DEBUG_UNALIGNED_STORE, and pstoreu().

◆ pstoreu< std::complex< double > >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< std::complex< double > > ( std::complex< double > *  to,
const Packet2cd from 
)
354  {
355  EIGEN_DEBUG_UNALIGNED_STORE _mm256_storeu_pd((double*)to, from.v);
356 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< std::complex< double > >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< std::complex< double > > ( std::complex< double > *  to,
const Packet4cd from 
)
331  {
332  EIGEN_DEBUG_UNALIGNED_STORE pstoreu((double*)to, from.v);
333 }

References EIGEN_DEBUG_UNALIGNED_STORE, and pstoreu().

◆ pstoreu< std::complex< float > >() [1/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< std::complex< float > > ( std::complex< float > *  to,
const Packet1cf from 
)
335  {
336  EIGEN_DEBUG_UNALIGNED_STORE pstoreu((float*)to, from.v);
337 }

References EIGEN_DEBUG_UNALIGNED_STORE, and pstoreu().

◆ pstoreu< std::complex< float > >() [2/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< std::complex< float > > ( std::complex< float > *  to,
const Packet2cf from 
)
171  {
172  pstoreu((float*)to, from.v);
173 }

References pstoreu().

◆ pstoreu< std::complex< float > >() [3/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< std::complex< float > > ( std::complex< float > *  to,
const Packet4cf from 
)
155  {
156  EIGEN_DEBUG_UNALIGNED_STORE _mm256_storeu_ps(&numext::real_ref(*to), from.v);
157 }

References EIGEN_DEBUG_UNALIGNED_STORE, and Eigen::numext::real_ref().

◆ pstoreu< std::complex< float > >() [4/4]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< std::complex< float > > ( std::complex< float > *  to,
const Packet8cf from 
)

◆ pstoreu< uint16_t >() [1/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< uint16_t > ( uint16_t *  to,
const Packet4us from 
)
2795  {
2796  EIGEN_DEBUG_UNALIGNED_STORE vst1_u16(to, from);
2797 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< uint16_t >() [2/2]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< uint16_t > ( uint16_t *  to,
const Packet8us from 
)
1603  {
1604  EIGEN_DEBUG_UNALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1605 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< uint32_t >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< uint32_t > ( uint32_t *  to,
const Packet2ui from 
)
2811  {
2812  EIGEN_DEBUG_UNALIGNED_STORE vst1_u32(to, from);
2813 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< uint32_t >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< uint32_t > ( uint32_t *  to,
const Packet4ui from 
)
1607  {
1608  EIGEN_DEBUG_UNALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1609 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< uint32_t >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< uint32_t > ( uint32_t *  to,
const Packet8ui from 
)
1636  {
1637  EIGEN_DEBUG_UNALIGNED_STORE _mm256_storeu_si256(reinterpret_cast<__m256i*>(to), from);
1638 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< uint64_t >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< uint64_t > ( uint64_t *  to,
const Packet2ul from 
)
1611  {
1612  EIGEN_DEBUG_UNALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1613 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< uint8_t >() [1/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< uint8_t > ( uint8_t *  to,
const Packet16uc from 
)
1599  {
1600  EIGEN_DEBUG_UNALIGNED_STORE __lsx_vst((__m128i)from, to, 0);
1601 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< uint8_t >() [2/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< uint8_t > ( uint8_t *  to,
const Packet4uc from 
)
2775  {
2776  memcpy(to, &from, sizeof(from));
2777 }

◆ pstoreu< uint8_t >() [3/3]

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< uint8_t > ( uint8_t *  to,
const Packet8uc from 
)
2779  {
2780  EIGEN_DEBUG_UNALIGNED_STORE vst1_u8(to, from);
2781 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu< unsigned char >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< unsigned char > ( unsigned char to,
const Packet16uc from 
)
1780  {
1781  pstoreu_common<Packet16uc>(to, from);
1782 }

◆ pstoreu< unsigned short int >()

template<>
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu< unsigned short int > ( unsigned short int to,
const Packet8us from 
)
1768  {
1769  pstoreu_common<Packet8us>(to, from);
1770 }

◆ pstoreu_common()

template<typename Packet >
EIGEN_STRONG_INLINE void Eigen::internal::pstoreu_common ( __UNPACK_TYPE__(Packet) *  to,
const Packet from 
)
1734  {
1736 #if defined(EIGEN_VECTORIZE_VSX) || !defined(_BIG_ENDIAN)
1737  vec_xst(from, 0, to);
1738 #else
1739  // Taken from http://developer.apple.com/hardwaredrivers/ve/alignment.html
1740  // Warning: not thread safe!
1741  Packet16uc MSQ, LSQ, edges;
1742  Packet16uc edgeAlign, align;
1743 
1744  MSQ = vec_ld(0, (unsigned char*)to); // most significant quadword
1745  LSQ = vec_ld(15, (unsigned char*)to); // least significant quadword
1746  edgeAlign = vec_lvsl(0, to); // permute map to extract edges
1747  edges = vec_perm(LSQ, MSQ, edgeAlign); // extract the edges
1748  align = vec_lvsr(0, to); // permute map to misalign data
1749  MSQ = vec_perm(edges, (Packet16uc)from, align); // misalign the data (MSQ)
1750  LSQ = vec_perm((Packet16uc)from, edges, align); // misalign the data (LSQ)
1751  vec_st(LSQ, 15, (unsigned char*)to); // Store the LSQ part first
1752  vec_st(MSQ, 0, (unsigned char*)to); // Store the MSQ part second
1753 #endif
1754 }

References EIGEN_DEBUG_UNALIGNED_STORE.

◆ pstoreu_partial()

template<typename Scalar , typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::pstoreu_partial ( Scalar to,
const Packet from,
const Index  n,
const Index  offset = 0 
)
inline

copy n elements of the packet from to *to, (un-aligned store)

917  {
918  const Index packet_size = unpacket_traits<Packet>::size;
919  eigen_assert(n + offset <= packet_size && "number of elements plus offset will write past end of packet");
920  EIGEN_ALIGN_MAX Scalar elements[packet_size];
921  pstore<Scalar>(elements, from);
922  for (Index i = 0; i < numext::mini(n, packet_size - offset); i++) {
923  to[i] = elements[i + offset];
924  }
925 }

References EIGEN_ALIGN_MAX, eigen_assert, i, Eigen::numext::mini(), and n.

Referenced by outputVecCol(), outputVecResults(), packetmath(), pscatter_common(), pstoret_partial(), pstoreu_partial< std::complex< float > >(), storeBF16fromResult(), storeConvertTwoBF16(), and storeF32().

◆ pstoreu_partial< bfloat16 >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstoreu_partial< bfloat16 > ( bfloat16 to,
const Packet8bf from,
const Index  n,
const Index  offset 
)
1839  {
1840  pstoreu_partial_common<Packet8us>(reinterpret_cast<unsigned short int*>(to), from, n, offset);
1841 }

References n.

◆ pstoreu_partial< float >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstoreu_partial< float > ( float *  to,
const Packet4f from,
const Index  n,
const Index  offset 
)
1820  {
1821  pstoreu_partial_common<Packet4f>(to, from, n, offset);
1822 }

References n.

◆ pstoreu_partial< int >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstoreu_partial< int > ( int to,
const Packet4i from,
const Index  n,
const Index  offset 
)
1824  {
1825  pstoreu_partial_common<Packet4i>(to, from, n, offset);
1826 }

References n.

◆ pstoreu_partial< short int >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstoreu_partial< short int > ( short int to,
const Packet8s from,
const Index  n,
const Index  offset 
)
1829  {
1830  pstoreu_partial_common<Packet8s>(to, from, n, offset);
1831 }

References n.

◆ pstoreu_partial< signed char >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstoreu_partial< signed char > ( signed char to,
const Packet16c from,
const Index  n,
const Index  offset 
)
1844  {
1845  pstoreu_partial_common<Packet16c>(to, from, n, offset);
1846 }

References n.

◆ pstoreu_partial< std::complex< float > >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstoreu_partial< std::complex< float > > ( std::complex< float > *  to,
const Packet2cf from,
const Index  n,
const Index  offset 
)
181  {
182  pstoreu_partial((float*)to, from.v, n * 2, offset * 2);
183 }

References n, and pstoreu_partial().

◆ pstoreu_partial< unsigned char >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstoreu_partial< unsigned char > ( unsigned char to,
const Packet16uc from,
const Index  n,
const Index  offset 
)
1849  {
1850  pstoreu_partial_common<Packet16uc>(to, from, n, offset);
1851 }

References n.

◆ pstoreu_partial< unsigned short int >()

template<>
EIGEN_ALWAYS_INLINE void Eigen::internal::pstoreu_partial< unsigned short int > ( unsigned short int to,
const Packet8us from,
const Index  n,
const Index  offset 
)
1834  {
1835  pstoreu_partial_common<Packet8us>(to, from, n, offset);
1836 }

References n.

◆ pstoreu_partial_common()

template<typename Packet >
EIGEN_ALWAYS_INLINE void Eigen::internal::pstoreu_partial_common ( __UNPACK_TYPE__(Packet) *  to,
const Packet from,
const Index  n,
const Index  offset 
)
1786  {
1787  const Index packet_size = unpacket_traits<Packet>::size;
1788  eigen_internal_assert(n + offset <= packet_size && "number of elements plus offset will write past end of packet");
1789  const Index size = sizeof(__UNPACK_TYPE__(Packet));
1790 #ifdef _ARCH_PWR9
1791  EIGEN_UNUSED_VARIABLE(packet_size);
1793  Packet store = from;
1794  if (offset) {
1795  Packet16uc shift = pset1<Packet16uc>(offset * 8 * size);
1796 #ifdef _BIG_ENDIAN
1797  store = Packet(vec_slo(Packet16uc(store), shift));
1798 #else
1799  store = Packet(vec_sro(Packet16uc(store), shift));
1800 #endif
1801  }
1802  vec_xst_len(store, to, n * size);
1803 #else
1804  if (n) {
1805  EIGEN_ALIGN16 __UNPACK_TYPE__(Packet) store[packet_size];
1806  pstore(store, from);
1807  unsigned char* store2 = reinterpret_cast<unsigned char*>(store + offset);
1808  unsigned char* to2 = reinterpret_cast<unsigned char*>(to);
1809  Index n2 = n * size;
1810  if (16 <= n2) {
1811  pstoreu(to2, ploadu<Packet16uc>(store2));
1812  } else {
1813  memcpy((void*)to2, (void*)store2, n2);
1814  }
1815  }
1816 #endif
1817 }

References __UNPACK_TYPE__(), EIGEN_ALIGN16, EIGEN_DEBUG_UNALIGNED_STORE, eigen_internal_assert, EIGEN_UNUSED_VARIABLE, n, ploadu< Packet16uc >(), pset1< Packet16uc >(), pstore(), pstoreu(), and size.

◆ psub()

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::psub ( const Packet a,
const Packet b 
)
inline
Returns
a - b (coeff-wise)
337  {
338  return a - b;
339 }

References a, and b.

Referenced by absolute_split(), Eigen::internal::gebp_traits< std::complex< RealScalar >, std::complex< RealScalar >, ConjLhs_, ConjRhs_, Arch, PacketSize_ >::acc(), Eigen::internal::sub_assign_op< DstScalar, SrcScalar >::assignPacket(), doubleword_div_fp(), fast_twosum(), generic_atan(), generic_expm1(), generic_floor(), generic_log1p(), generic_ndtri(), generic_ndtri_gt_exp_neg_two(), generic_ndtri_lt_exp_neg_two(), generic_pow_impl(), generic_rint(), generic_round(), Eigen::internal::accurate_log2< double >::operator()(), Eigen::internal::accurate_log2< float >::operator()(), Eigen::internal::Packet1cd::operator-=(), Eigen::internal::Packet2cf::operator-=(), pabsdiff(), pabsdiff< Packet16c >(), pabsdiff< Packet16uc >(), pabsdiff< Packet4f >(), pabsdiff< Packet4i >(), pabsdiff< Packet4ui >(), pabsdiff< Packet8s >(), pabsdiff< Packet8us >(), packetmath(), Eigen::internal::scalar_difference_op< LhsScalar, RhsScalar >::packetOp(), pacos_float(), paddsub(), patanh_double(), patanh_float(), pcmp_le(), pcmp_lt(), pexp< Packet2d >(), pexp_double(), phypot_complex(), pldexp< Packet4d >(), pldexp< Packet8d >(), plog< Packet4f >(), plog_impl_double(), plog_impl_float(), pmsub(), pnegate(), pnegate< Packet32h >(), pnmadd(), psincos_double(), psincos_float(), psincos_inner_msa_float(), psub< Packet16h >(), psub< Packet8h >(), Eigen::internal::compute_inverse_size4< Architecture::Target, float, MatrixType, ResultType >::run(), Eigen::internal::compute_inverse_size4< Architecture::Target, double, MatrixType, ResultType >::run(), Eigen::internal::quat_product< Architecture::Target, Derived, OtherDerived, float >::run(), Eigen::internal::generic_i0e< T, float >::run(), Eigen::internal::generic_i0e< T, double >::run(), Eigen::internal::generic_i1e< T, float >::run(), Eigen::internal::generic_i1e< T, double >::run(), Eigen::internal::generic_k0e< T, float >::run(), Eigen::internal::generic_k0e< T, double >::run(), Eigen::internal::generic_k0< T, float >::run(), Eigen::internal::generic_k0< T, double >::run(), Eigen::internal::generic_k1e< T, float >::run(), Eigen::internal::generic_k1e< T, double >::run(), Eigen::internal::generic_k1< T, float >::run(), Eigen::internal::generic_k1< T, double >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_y0< T, float >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), Eigen::internal::generic_y1< T, float >::run(), Eigen::internal::generic_fast_erf< Scalar >::run(), Eigen::internal::cross3_impl< Architecture::Target, VectorLhs, VectorRhs, float, true >::run(), Eigen::internal::pchebevl< Packet, N >::run(), Eigen::internal::apply_rotation_in_the_plane_selector< Scalar, OtherScalar, SizeAtCompileTime, MinAlignment, true >::run(), and veltkamp_splitting().

◆ psub< Packet16b >()

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::psub< Packet16b > ( const Packet16b a,
const Packet16b b 
)
552  {
553  return _mm_xor_si128(a, b);
554 }

References a, and b.

◆ psub< Packet16bf >()

2886  {
2888 }
EIGEN_STRONG_INLINE Packet16f psub< Packet16f >(const Packet16f &a, const Packet16f &b)
Definition: AVX512/PacketMath.h:383

References a, b, Bf16ToF32(), F32ToBf16(), and psub< Packet16f >().

◆ psub< Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::psub< Packet16c > ( const Packet16c a,
const Packet16c b 
)
1111  {
1112  return a - b;
1113 }

References a, and b.

◆ psub< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::psub< Packet16f > ( const Packet16f a,
const Packet16f b 
)
383  {
384  return _mm512_sub_ps(a, b);
385 }

References a, and b.

Referenced by psub< Packet16bf >().

◆ psub< Packet16h >()

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::psub< Packet16h > ( const Packet16h a,
const Packet16h b 
)
2382  {
2383  Packet16f af = half2float(a);
2384  Packet16f bf = half2float(b);
2385  Packet16f rf = psub(af, bf);
2386  return float2half(rf);
2387 }

References a, b, float2half(), half2float(), and psub().

◆ psub< Packet16i >()

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::psub< Packet16i > ( const Packet16i a,
const Packet16i b 
)
391  {
392  return _mm512_sub_epi32(a, b);
393 }

References a, and b.

◆ psub< Packet16uc >()

1115  {
1116  return a - b;
1117 }

References a, and b.

◆ psub< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::psub< Packet1cd > ( const Packet1cd a,
const Packet1cd b 
)
309  {
310  return Packet1cd(__lsx_vfsub_d(a.v, b.v));
311 }

References a, and b.

◆ psub< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::psub< Packet1cf > ( const Packet1cf a,
const Packet1cf b 
)
141  {
142  return Packet1cf(psub<Packet2f>(a.v, b.v));
143 }
EIGEN_STRONG_INLINE Packet2f psub< Packet2f >(const Packet2f &a, const Packet2f &b)
Definition: NEON/PacketMath.h:915

References a, b, and psub< Packet2f >().

◆ psub< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::psub< Packet2cd > ( const Packet2cd a,
const Packet2cd b 
)
276  {
277  return Packet2cd(_mm256_sub_pd(a.v, b.v));
278 }

References a, and b.

◆ psub< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::psub< Packet2cf > ( const Packet2cf a,
const Packet2cf b 
)
260  {
261  return Packet2cf(a.v - b.v);
262 }

References a, and b.

◆ psub< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::psub< Packet2d > ( const Packet2d a,
const Packet2d b 
)
646  {
647  return __lsx_vfsub_d(a, b);
648 }

References a, and b.

◆ psub< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::psub< Packet2f > ( const Packet2f a,
const Packet2f b 
)
915  {
916  return vsub_f32(a, b);
917 }

References a, and b.

Referenced by psub< Packet1cf >().

◆ psub< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::psub< Packet2i > ( const Packet2i a,
const Packet2i b 
)
965  {
966  return vsub_s32(a, b);
967 }

References a, and b.

◆ psub< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::psub< Packet2l > ( const Packet2l a,
const Packet2l b 
)
622  {
623  return __lsx_vsub_d(a, b);
624 }

References a, and b.

◆ psub< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::psub< Packet2ui > ( const Packet2ui a,
const Packet2ui b 
)
973  {
974  return vsub_u32(a, b);
975 }

References a, and b.

◆ psub< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::psub< Packet2ul > ( const Packet2ul a,
const Packet2ul b 
)
638  {
639  return __lsx_vsub_d(a, b);
640 }

References a, and b.

◆ psub< Packet32h >()

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::psub< Packet32h > ( const Packet32h a,
const Packet32h b 
)
310  {
311  return _mm512_sub_ph(a, b);
312 }

References a, and b.

◆ psub< Packet4bf >()

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::psub< Packet4bf > ( const Packet4bf a,
const Packet4bf b 
)
4958  {
4960 }
EIGEN_STRONG_INLINE Packet4f psub< Packet4f >(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1095

References a, b, Bf16ToF32(), F32ToBf16(), and psub< Packet4f >().

◆ psub< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::psub< Packet4c > ( const Packet4c a,
const Packet4c b 
)
923  {
924  return vget_lane_s32(
925  vreinterpret_s32_s8(vsub_s8(vreinterpret_s8_s32(vdup_n_s32(a)), vreinterpret_s8_s32(vdup_n_s32(b)))), 0);
926 }

References a, and b.

◆ psub< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::psub< Packet4cd > ( const Packet4cd a,
const Packet4cd b 
)
256  {
257  return Packet4cd(_mm512_sub_pd(a.v, b.v));
258 }

References a, and b.

◆ psub< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::psub< Packet4cf > ( const Packet4cf a,
const Packet4cf b 
)
73  {
74  return Packet4cf(_mm256_sub_ps(a.v, b.v));
75 }

References a, and b.

◆ psub< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::psub< Packet4d > ( const Packet4d a,
const Packet4d b 
)
874  {
875  return _mm256_sub_pd(a, b);
876 }

References a, and b.

◆ psub< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::psub< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1095  {
1096  return a - b;
1097 }

References a, and b.

Referenced by psub< Packet4bf >(), and psub< Packet8bf >().

◆ psub< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::psub< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1099  {
1100  return a - b;
1101 }

References a, and b.

◆ psub< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::psub< Packet4s > ( const Packet4s a,
const Packet4s b 
)
949  {
950  return vsub_s16(a, b);
951 }

References a, and b.

◆ psub< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::psub< Packet4uc > ( const Packet4uc a,
const Packet4uc b 
)
936  {
937  return vget_lane_u32(
938  vreinterpret_u32_u8(vsub_u8(vreinterpret_u8_u32(vdup_n_u32(a)), vreinterpret_u8_u32(vdup_n_u32(b)))), 0);
939 }

References a, and b.

◆ psub< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::psub< Packet4ui > ( const Packet4ui a,
const Packet4ui b 
)
634  {
635  return __lsx_vsub_w(a, b);
636 }

References a, and b.

◆ psub< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::psub< Packet4us > ( const Packet4us a,
const Packet4us b 
)
957  {
958  return vsub_u16(a, b);
959 }

References a, and b.

◆ psub< Packet8bf >()

◆ psub< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::psub< Packet8c > ( const Packet8c a,
const Packet8c b 
)
928  {
929  return vsub_s8(a, b);
930 }

References a, and b.

◆ psub< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::psub< Packet8cf > ( const Packet8cf a,
const Packet8cf b 
)
75  {
76  return Packet8cf(_mm512_sub_ps(a.v, b.v));
77 }

References a, and b.

◆ psub< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::psub< Packet8d > ( const Packet8d a,
const Packet8d b 
)
387  {
388  return _mm512_sub_pd(a, b);
389 }

References a, and b.

◆ psub< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::psub< Packet8f > ( const Packet8f a,
const Packet8f b 
)
870  {
871  return _mm256_sub_ps(a, b);
872 }

References a, and b.

◆ psub< Packet8h >()

template<>
EIGEN_STRONG_INLINE Packet8h Eigen::internal::psub< Packet8h > ( const Packet8h a,
const Packet8h b 
)
2398  {
2399  Packet8f af = half2float(a);
2400  Packet8f bf = half2float(b);
2401  Packet8f rf = psub(af, bf);
2402  return float2half(rf);
2403 }

References a, b, float2half(), half2float(), and psub().

◆ psub< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::psub< Packet8i > ( const Packet8i a,
const Packet8i b 
)
878  {
879 #ifdef EIGEN_VECTORIZE_AVX2
880  return _mm256_sub_epi32(a, b);
881 #else
882  __m128i lo = _mm_sub_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
883  __m128i hi = _mm_sub_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
884  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
885 #endif
886 }

References a, and b.

◆ psub< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::psub< Packet8l > ( const Packet8l a,
const Packet8l b 
)
395  {
396  return _mm512_sub_epi64(a, b);
397 }

References a, and b.

◆ psub< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::psub< Packet8s > ( const Packet8s a,
const Packet8s b 
)
1103  {
1104  return a - b;
1105 }

References a, and b.

◆ psub< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::psub< Packet8uc > ( const Packet8uc a,
const Packet8uc b 
)
941  {
942  return vsub_u8(a, b);
943 }

References a, and b.

◆ psub< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::psub< Packet8ui > ( const Packet8ui a,
const Packet8ui b 
)
888  {
889 #ifdef EIGEN_VECTORIZE_AVX2
890  return _mm256_sub_epi32(a, b);
891 #else
892  __m128i lo = _mm_sub_epi32(_mm256_extractf128_si256(a, 0), _mm256_extractf128_si256(b, 0));
893  __m128i hi = _mm_sub_epi32(_mm256_extractf128_si256(a, 1), _mm256_extractf128_si256(b, 1));
894  return _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1);
895 #endif
896 }

References a, and b.

◆ psub< Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::psub< Packet8us > ( const Packet8us a,
const Packet8us b 
)
1107  {
1108  return a - b;
1109 }

References a, and b.

Referenced by F32ToBf16Two().

◆ psub< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::psub< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
406  {
407  return svsub_f32_x(svptrue_b32(), a, b);
408 }

References a, and b.

◆ psub< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::psub< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
98  {
99  return svsub_s32_x(svptrue_b32(), a, b);
100 }

References a, and b.

◆ ptan()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::ptan ( const Packet a)
Returns
the tan of a (coeff-wise)
1029  {
1031  return tan(a);
1032 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 tan(const bfloat16 &a)
Definition: BFloat16.h:633

References a, EIGEN_USING_STD, and Eigen::bfloat16_impl::tan().

Referenced by packetmath_real(), and Eigen::internal::scalar_tan_op< Scalar >::packetOp().

◆ ptanh()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::ptanh ( const Packet a)
Returns
the hyperbolic tan of a (coeff-wise)
1071  {
1073  return tanh(a);
1074 }
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 tanh(const bfloat16 &a)
Definition: BFloat16.h:639

References a, EIGEN_USING_STD, and Eigen::bfloat16_impl::tanh().

Referenced by packetmath_real(), Eigen::internal::scalar_tanh_op< Scalar >::packetOp(), and ptanh< Packet32h >().

◆ ptanh< Packet16h >()

◆ ptanh< Packet32h >()

828  {
829  Packet16h low;
830  Packet16h high;
831  extract2Packet16h(a, low, high);
832 
833  Packet16h lowOut = ptanh(low);
834  Packet16h highOut = ptanh(high);
835 
836  return combine2Packet16h(lowOut, highOut);
837 }
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptanh(const Packet &a)
Definition: GenericPacketMath.h:1071

References a, combine2Packet16h(), extract2Packet16h(), and ptanh().

◆ ptanh< Packet4f >()

174  {
175  static EIGEN_DECLARE_CONST_Packet4f(tanh_tiny, 1e-4f);
176  static EIGEN_DECLARE_CONST_Packet4f(tanh_hi, 9.0f);
177  // The monomial coefficients of the numerator polynomial (odd).
178  static EIGEN_DECLARE_CONST_Packet4f(alpha_1, 4.89352455891786e-3f);
179  static EIGEN_DECLARE_CONST_Packet4f(alpha_3, 6.37261928875436e-4f);
180  static EIGEN_DECLARE_CONST_Packet4f(alpha_5, 1.48572235717979e-5f);
181  static EIGEN_DECLARE_CONST_Packet4f(alpha_7, 5.12229709037114e-8f);
182  static EIGEN_DECLARE_CONST_Packet4f(alpha_9, -8.60467152213735e-11f);
183  static EIGEN_DECLARE_CONST_Packet4f(alpha_11, 2.00018790482477e-13f);
184  static EIGEN_DECLARE_CONST_Packet4f(alpha_13, -2.76076847742355e-16f);
185  // The monomial coefficients of the denominator polynomial (even).
186  static EIGEN_DECLARE_CONST_Packet4f(beta_0, 4.89352518554385e-3f);
187  static EIGEN_DECLARE_CONST_Packet4f(beta_2, 2.26843463243900e-3f);
188  static EIGEN_DECLARE_CONST_Packet4f(beta_4, 1.18534705686654e-4f);
189  static EIGEN_DECLARE_CONST_Packet4f(beta_6, 1.19825839466702e-6f);
190 
191  Packet4f x = pabs(_x);
192  Packet4i tiny_mask = __builtin_msa_fclt_w(x, p4f_tanh_tiny);
193 
194  // Clamp the inputs to the range [-9, 9] since anything outside
195  // this range is -/+1.0f in single-precision.
196  x = (Packet4f)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_w(p4f_tanh_hi, x), (v16u8)x, (v16u8)p4f_tanh_hi);
197 
198  // Since the polynomials are odd/even, we need x**2.
199  Packet4f x2 = pmul(x, x);
200 
201  // Evaluate the numerator polynomial p.
202  Packet4f p = pmadd(x2, p4f_alpha_13, p4f_alpha_11);
203  p = pmadd(x2, p, p4f_alpha_9);
204  p = pmadd(x2, p, p4f_alpha_7);
205  p = pmadd(x2, p, p4f_alpha_5);
206  p = pmadd(x2, p, p4f_alpha_3);
207  p = pmadd(x2, p, p4f_alpha_1);
208  p = pmul(x, p);
209 
210  // Evaluate the denominator polynomial q.
211  Packet4f q = pmadd(x2, p4f_beta_6, p4f_beta_4);
212  q = pmadd(x2, q, p4f_beta_2);
213  q = pmadd(x2, q, p4f_beta_0);
214 
215  // Divide the numerator by the denominator.
216  p = pdiv(p, q);
217 
218  // Reinstate the sign.
219  p = (Packet4f)__builtin_msa_binsli_w((v4u32)p, (v4u32)_x, 0);
220 
221  // When the argument is very small in magnitude it's more accurate to just return it.
222  p = (Packet4f)__builtin_msa_bsel_v((v16u8)tiny_mask, (v16u8)p, (v16u8)_x);
223 
224  return p;
225 }

References EIGEN_DECLARE_CONST_Packet4f(), p, pabs(), pdiv(), pmadd(), pmul(), Eigen::numext::q, plotDoE::x, and Global_parameters::x2().

◆ ptanh< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::ptanh< PacketXf > ( const PacketXf &  x)
41  {
42  return ptanh_float(x);
43 }
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS T ptanh_float(const T &a_x)
Definition: GenericPacketMathFunctions.h:1155

References ptanh_float(), and plotDoE::x.

◆ ptanh_double() [1/2]

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::ptanh_double ( const Packet x)
Returns
tanh(x) for double precision float

◆ ptanh_double() [2/2]

template<typename T >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS T Eigen::internal::ptanh_double ( const T a_x)
Returns
the hyperbolic tan of a (coeff-wise) This uses a 19/18-degree rational interpolant which is accurate up to a couple of ulps in the (approximate) range [-18.7, 18.7], outside of which tanh(x) = +/-1 in single precision. The input is clamped to the range [-c, c]. The value c is chosen as the smallest value where the approximation evaluates to exactly 1.

This implementation works on both scalars and packets.

1206  {
1207  // Clamp the inputs to the range [-c, c] and set everything
1208  // outside that range to 1.0. The value c is chosen as the smallest
1209  // floating point argument such that the approximation is exactly 1.
1210  // This saves clamping the value at the end.
1211 #ifdef EIGEN_VECTORIZE_FMA
1212  const T plus_clamp = pset1<T>(17.6610191624600077);
1213  const T minus_clamp = pset1<T>(-17.6610191624600077);
1214 #else
1215  const T plus_clamp = pset1<T>(17.714196154005176);
1216  const T minus_clamp = pset1<T>(-17.714196154005176);
1217 #endif
1218  const T x = pmax(pmin(a_x, plus_clamp), minus_clamp);
1219 
1220  // The following rational approximation was generated by rminimax
1221  // (https://gitlab.inria.fr/sfilip/rminimax) using the following
1222  // command:
1223  // $ ./ratapprox --function="tanh(x)" --dom='[-18.72,18.72]'
1224  // --num="odd" --den="even" --type="[19,18]" --numF="[D]"
1225  // --denF="[D]" --log --output=tanh.sollya --dispCoeff="dec"
1226 
1227  // The monomial coefficients of the numerator polynomial (odd).
1228  constexpr double alpha[] = {2.6158007860482230e-23, 7.6534862268749319e-19, 3.1309488231386680e-15,
1229  4.2303918148209176e-12, 2.4618379131293676e-09, 6.8644367682497074e-07,
1230  9.3839087674268880e-05, 5.9809711724441161e-03, 1.5184719640284322e-01};
1231 
1232  // The monomial coefficients of the denominator polynomial (even).
1233  constexpr double beta[] = {6.463747022670968018e-21, 5.782506856739003571e-17,
1234  1.293019623712687916e-13, 1.123643448069621992e-10,
1235  4.492975677839633985e-08, 8.785185266237658698e-06,
1236  8.295161192716231542e-04, 3.437448108450402717e-02,
1237  4.851805297361760360e-01, 1.0};
1238 
1239  // Since the polynomials are odd/even, we need x^2.
1240  const T x2 = pmul(x, x);
1241  const T x3 = pmul(x2, x);
1242 
1243  // Interleave the evaluation of the numerator polynomial p and
1244  // denominator polynomial q.
1247  // Take advantage of the fact that the constant term in p is 1 to compute
1248  // x*(x^2*p + 1) = x^3 * p + x.
1249  p = pmadd(x3, p, x);
1250 
1251  // Divide the numerator by the denominator.
1252  return pdiv(p, q);
1253 }

References alpha, beta, p, pdiv(), pmadd(), pmax(), pmin(), pmul(), Eigen::numext::q, Eigen::internal::ppolevl< Packet, N >::run(), plotDoE::x, and Global_parameters::x2().

◆ ptanh_float() [1/2]

template<typename Packet >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::ptanh_float ( const Packet x)
Returns
tanh(x) for single precision float

◆ ptanh_float() [2/2]

template<typename T >
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS T Eigen::internal::ptanh_float ( const T a_x)
Returns
the hyperbolic tan of a (coeff-wise) Doesn't do anything fancy, just a 9/8-degree rational interpolant which is accurate up to a couple of ulps in the (approximate) range [-8, 8], outside of which tanh(x) = +/-1 in single precision. The input is clamped to the range [-c, c]. The value c is chosen as the smallest value where the approximation evaluates to exactly 1.

This implementation works on both scalars and packets.

1155  {
1156  // Clamp the inputs to the range [-c, c] and set everything
1157  // outside that range to 1.0. The value c is chosen as the smallest
1158  // floating point argument such that the approximation is exactly 1.
1159  // This saves clamping the value at the end.
1160 #ifdef EIGEN_VECTORIZE_FMA
1161  const T plus_clamp = pset1<T>(8.01773357391357422f);
1162  const T minus_clamp = pset1<T>(-8.01773357391357422f);
1163 #else
1164  const T plus_clamp = pset1<T>(7.90738964080810547f);
1165  const T minus_clamp = pset1<T>(-7.90738964080810547f);
1166 #endif
1167  const T x = pmax(pmin(a_x, plus_clamp), minus_clamp);
1168 
1169  // The following rational approximation was generated by rminimax
1170  // (https://gitlab.inria.fr/sfilip/rminimax) using the following
1171  // command:
1172  // $ ratapprox --function="tanh(x)" --dom='[-8.67,8.67]' --num="odd"
1173  // --den="even" --type="[9,8]" --numF="[SG]" --denF="[SG]" --log
1174  // --output=tanhf.sollya --dispCoeff="dec"
1175 
1176  // The monomial coefficients of the numerator polynomial (odd).
1177  constexpr float alpha[] = {1.394553628e-8f, 2.102733560e-5f, 3.520756727e-3f, 1.340216100e-1f};
1178 
1179  // The monomial coefficients of the denominator polynomial (even).
1180  constexpr float beta[] = {8.015776984e-7f, 3.326951409e-4f, 2.597254514e-2f, 4.673548340e-1f, 1.0f};
1181 
1182  // Since the polynomials are odd/even, we need x^2.
1183  const T x2 = pmul(x, x);
1184  const T x3 = pmul(x2, x);
1185 
1188  // Take advantage of the fact that the constant term in p is 1 to compute
1189  // x*(x^2*p + 1) = x^3 * p + x.
1190  p = pmadd(x3, p, x);
1191 
1192  // Divide the numerator by the denominator.
1193  return pdiv(p, q);
1194 }

References alpha, beta, p, pdiv(), pmadd(), pmax(), pmin(), pmul(), Eigen::numext::q, Eigen::internal::ppolevl< Packet, N >::run(), plotDoE::x, and Global_parameters::x2().

Referenced by ptanh< PacketXf >().

◆ ptranpose_common()

template<typename T >
EIGEN_DEVICE_FUNC void Eigen::internal::ptranpose_common ( PacketBlock< T, 4 > &  kernel)
inline
2756  {
2757  T t0, t1, t2, t3;
2758  t0 = vec_mergeh(kernel.packet[0], kernel.packet[2]);
2759  t1 = vec_mergel(kernel.packet[0], kernel.packet[2]);
2760  t2 = vec_mergeh(kernel.packet[1], kernel.packet[3]);
2761  t3 = vec_mergel(kernel.packet[1], kernel.packet[3]);
2762  kernel.packet[0] = vec_mergeh(t0, t2);
2763  kernel.packet[1] = vec_mergel(t0, t2);
2764  kernel.packet[2] = vec_mergeh(t1, t3);
2765  kernel.packet[3] = vec_mergel(t1, t3);
2766 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [1/68]

template<typename Packet >
EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet, 1 > &  )
inline
1412  {
1413  // Nothing to do in the scalar case, i.e. a 1x1 matrix.
1414 }

◆ ptranspose() [2/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16b, 16 > &  kernel)
2100  {
2101  // If we number the elements in the input thus:
2102  // kernel.packet[ 0] = {00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 0a, 0b, 0c, 0d, 0e, 0f}
2103  // kernel.packet[ 1] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1a, 1b, 1c, 1d, 1e, 1f}
2104  // ...
2105  // kernel.packet[15] = {f0, f1, f2, f3, f4, f5, f6, f7, f8, f9, fa, fb, fc, fd, fe, ff},
2106  //
2107  // the desired output is:
2108  // kernel.packet[ 0] = {00, 10, 20, 30, 40, 50, 60, 70, 80, 90, a0, b0, c0, d0, e0, f0}
2109  // kernel.packet[ 1] = {01, 11, 21, 31, 41, 51, 61, 71, 81, 91, a1, b1, c1, d1, e1, f1}
2110  // ...
2111  // kernel.packet[15] = {0f, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, af, bf, cf, df, ef, ff},
2112  __m128i t0 =
2113  _mm_unpacklo_epi8(kernel.packet[0], kernel.packet[1]); // 00 10 01 11 02 12 03 13 04 14 05 15 06 16 07 17
2114  __m128i t1 =
2115  _mm_unpackhi_epi8(kernel.packet[0], kernel.packet[1]); // 08 18 09 19 0a 1a 0b 1b 0c 1c 0d 1d 0e 1e 0f 1f
2116  __m128i t2 =
2117  _mm_unpacklo_epi8(kernel.packet[2], kernel.packet[3]); // 20 30 21 31 22 32 ... 27 37
2118  __m128i t3 =
2119  _mm_unpackhi_epi8(kernel.packet[2], kernel.packet[3]); // 28 38 29 39 2a 3a ... 2f 3f
2120  __m128i t4 =
2121  _mm_unpacklo_epi8(kernel.packet[4], kernel.packet[5]); // 40 50 41 51 42 52 47 57
2122  __m128i t5 = _mm_unpackhi_epi8(kernel.packet[4], kernel.packet[5]); // 48 58 49 59 4a 5a
2123  __m128i t6 = _mm_unpacklo_epi8(kernel.packet[6], kernel.packet[7]);
2124  __m128i t7 = _mm_unpackhi_epi8(kernel.packet[6], kernel.packet[7]);
2125  __m128i t8 = _mm_unpacklo_epi8(kernel.packet[8], kernel.packet[9]);
2126  __m128i t9 = _mm_unpackhi_epi8(kernel.packet[8], kernel.packet[9]);
2127  __m128i ta = _mm_unpacklo_epi8(kernel.packet[10], kernel.packet[11]);
2128  __m128i tb = _mm_unpackhi_epi8(kernel.packet[10], kernel.packet[11]);
2129  __m128i tc = _mm_unpacklo_epi8(kernel.packet[12], kernel.packet[13]);
2130  __m128i td = _mm_unpackhi_epi8(kernel.packet[12], kernel.packet[13]);
2131  __m128i te = _mm_unpacklo_epi8(kernel.packet[14], kernel.packet[15]);
2132  __m128i tf = _mm_unpackhi_epi8(kernel.packet[14], kernel.packet[15]);
2133 
2134  __m128i s0 = _mm_unpacklo_epi16(t0, t2); // 00 10 20 30 01 11 21 31 02 12 22 32 03 13 23 33
2135  __m128i s1 = _mm_unpackhi_epi16(t0, t2); // 04 14 24 34
2136  __m128i s2 = _mm_unpacklo_epi16(t1, t3); // 08 18 28 38 ...
2137  __m128i s3 = _mm_unpackhi_epi16(t1, t3); // 0c 1c 2c 3c ...
2138  __m128i s4 = _mm_unpacklo_epi16(t4, t6); // 40 50 60 70 41 51 61 71 42 52 62 72 43 53 63 73
2139  __m128i s5 = _mm_unpackhi_epi16(t4, t6); // 44 54 64 74 ...
2140  __m128i s6 = _mm_unpacklo_epi16(t5, t7);
2141  __m128i s7 = _mm_unpackhi_epi16(t5, t7);
2142  __m128i s8 = _mm_unpacklo_epi16(t8, ta);
2143  __m128i s9 = _mm_unpackhi_epi16(t8, ta);
2144  __m128i sa = _mm_unpacklo_epi16(t9, tb);
2145  __m128i sb = _mm_unpackhi_epi16(t9, tb);
2146  __m128i sc = _mm_unpacklo_epi16(tc, te);
2147  __m128i sd = _mm_unpackhi_epi16(tc, te);
2148  __m128i se = _mm_unpacklo_epi16(td, tf);
2149  __m128i sf = _mm_unpackhi_epi16(td, tf);
2150 
2151  __m128i u0 = _mm_unpacklo_epi32(s0, s4); // 00 10 20 30 40 50 60 70 01 11 21 31 41 51 61 71
2152  __m128i u1 = _mm_unpackhi_epi32(s0, s4); // 02 12 22 32 42 52 62 72 03 13 23 33 43 53 63 73
2153  __m128i u2 = _mm_unpacklo_epi32(s1, s5);
2154  __m128i u3 = _mm_unpackhi_epi32(s1, s5);
2155  __m128i u4 = _mm_unpacklo_epi32(s2, s6);
2156  __m128i u5 = _mm_unpackhi_epi32(s2, s6);
2157  __m128i u6 = _mm_unpacklo_epi32(s3, s7);
2158  __m128i u7 = _mm_unpackhi_epi32(s3, s7);
2159  __m128i u8 = _mm_unpacklo_epi32(s8, sc);
2160  __m128i u9 = _mm_unpackhi_epi32(s8, sc);
2161  __m128i ua = _mm_unpacklo_epi32(s9, sd);
2162  __m128i ub = _mm_unpackhi_epi32(s9, sd);
2163  __m128i uc = _mm_unpacklo_epi32(sa, se);
2164  __m128i ud = _mm_unpackhi_epi32(sa, se);
2165  __m128i ue = _mm_unpacklo_epi32(sb, sf);
2166  __m128i uf = _mm_unpackhi_epi32(sb, sf);
2167 
2168  kernel.packet[0] = _mm_unpacklo_epi64(u0, u8);
2169  kernel.packet[1] = _mm_unpackhi_epi64(u0, u8);
2170  kernel.packet[2] = _mm_unpacklo_epi64(u1, u9);
2171  kernel.packet[3] = _mm_unpackhi_epi64(u1, u9);
2172  kernel.packet[4] = _mm_unpacklo_epi64(u2, ua);
2173  kernel.packet[5] = _mm_unpackhi_epi64(u2, ua);
2174  kernel.packet[6] = _mm_unpacklo_epi64(u3, ub);
2175  kernel.packet[7] = _mm_unpackhi_epi64(u3, ub);
2176  kernel.packet[8] = _mm_unpacklo_epi64(u4, uc);
2177  kernel.packet[9] = _mm_unpackhi_epi64(u4, uc);
2178  kernel.packet[10] = _mm_unpacklo_epi64(u5, ud);
2179  kernel.packet[11] = _mm_unpackhi_epi64(u5, ud);
2180  kernel.packet[12] = _mm_unpacklo_epi64(u6, ue);
2181  kernel.packet[13] = _mm_unpackhi_epi64(u6, ue);
2182  kernel.packet[14] = _mm_unpacklo_epi64(u7, uf);
2183  kernel.packet[15] = _mm_unpackhi_epi64(u7, uf);
2184 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [3/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16b, 4 > &  kernel)
2089  {
2090  __m128i T0 = _mm_unpacklo_epi8(kernel.packet[0], kernel.packet[1]);
2091  __m128i T1 = _mm_unpackhi_epi8(kernel.packet[0], kernel.packet[1]);
2092  __m128i T2 = _mm_unpacklo_epi8(kernel.packet[2], kernel.packet[3]);
2093  __m128i T3 = _mm_unpackhi_epi8(kernel.packet[2], kernel.packet[3]);
2094  kernel.packet[0] = _mm_unpacklo_epi16(T0, T2);
2095  kernel.packet[1] = _mm_unpackhi_epi16(T0, T2);
2096  kernel.packet[2] = _mm_unpacklo_epi16(T1, T3);
2097  kernel.packet[3] = _mm_unpackhi_epi16(T1, T3);
2098 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [4/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16bf, 16 > &  kernel)
2985  {
2986  __m256i a = kernel.packet[0];
2987  __m256i b = kernel.packet[1];
2988  __m256i c = kernel.packet[2];
2989  __m256i d = kernel.packet[3];
2990  __m256i e = kernel.packet[4];
2991  __m256i f = kernel.packet[5];
2992  __m256i g = kernel.packet[6];
2993  __m256i h = kernel.packet[7];
2994  __m256i i = kernel.packet[8];
2995  __m256i j = kernel.packet[9];
2996  __m256i k = kernel.packet[10];
2997  __m256i l = kernel.packet[11];
2998  __m256i m = kernel.packet[12];
2999  __m256i n = kernel.packet[13];
3000  __m256i o = kernel.packet[14];
3001  __m256i p = kernel.packet[15];
3002 
3003  __m256i ab_07 = _mm256_unpacklo_epi16(a, b);
3004  __m256i cd_07 = _mm256_unpacklo_epi16(c, d);
3005  __m256i ef_07 = _mm256_unpacklo_epi16(e, f);
3006  __m256i gh_07 = _mm256_unpacklo_epi16(g, h);
3007  __m256i ij_07 = _mm256_unpacklo_epi16(i, j);
3008  __m256i kl_07 = _mm256_unpacklo_epi16(k, l);
3009  __m256i mn_07 = _mm256_unpacklo_epi16(m, n);
3010  __m256i op_07 = _mm256_unpacklo_epi16(o, p);
3011 
3012  __m256i ab_8f = _mm256_unpackhi_epi16(a, b);
3013  __m256i cd_8f = _mm256_unpackhi_epi16(c, d);
3014  __m256i ef_8f = _mm256_unpackhi_epi16(e, f);
3015  __m256i gh_8f = _mm256_unpackhi_epi16(g, h);
3016  __m256i ij_8f = _mm256_unpackhi_epi16(i, j);
3017  __m256i kl_8f = _mm256_unpackhi_epi16(k, l);
3018  __m256i mn_8f = _mm256_unpackhi_epi16(m, n);
3019  __m256i op_8f = _mm256_unpackhi_epi16(o, p);
3020 
3021  __m256i abcd_03 = _mm256_unpacklo_epi32(ab_07, cd_07);
3022  __m256i abcd_47 = _mm256_unpackhi_epi32(ab_07, cd_07);
3023  __m256i efgh_03 = _mm256_unpacklo_epi32(ef_07, gh_07);
3024  __m256i efgh_47 = _mm256_unpackhi_epi32(ef_07, gh_07);
3025  __m256i ijkl_03 = _mm256_unpacklo_epi32(ij_07, kl_07);
3026  __m256i ijkl_47 = _mm256_unpackhi_epi32(ij_07, kl_07);
3027  __m256i mnop_03 = _mm256_unpacklo_epi32(mn_07, op_07);
3028  __m256i mnop_47 = _mm256_unpackhi_epi32(mn_07, op_07);
3029 
3030  __m256i abcd_8b = _mm256_unpacklo_epi32(ab_8f, cd_8f);
3031  __m256i abcd_cf = _mm256_unpackhi_epi32(ab_8f, cd_8f);
3032  __m256i efgh_8b = _mm256_unpacklo_epi32(ef_8f, gh_8f);
3033  __m256i efgh_cf = _mm256_unpackhi_epi32(ef_8f, gh_8f);
3034  __m256i ijkl_8b = _mm256_unpacklo_epi32(ij_8f, kl_8f);
3035  __m256i ijkl_cf = _mm256_unpackhi_epi32(ij_8f, kl_8f);
3036  __m256i mnop_8b = _mm256_unpacklo_epi32(mn_8f, op_8f);
3037  __m256i mnop_cf = _mm256_unpackhi_epi32(mn_8f, op_8f);
3038 
3039  __m256i abcdefgh_01 = _mm256_unpacklo_epi64(abcd_03, efgh_03);
3040  __m256i abcdefgh_23 = _mm256_unpackhi_epi64(abcd_03, efgh_03);
3041  __m256i ijklmnop_01 = _mm256_unpacklo_epi64(ijkl_03, mnop_03);
3042  __m256i ijklmnop_23 = _mm256_unpackhi_epi64(ijkl_03, mnop_03);
3043  __m256i abcdefgh_45 = _mm256_unpacklo_epi64(abcd_47, efgh_47);
3044  __m256i abcdefgh_67 = _mm256_unpackhi_epi64(abcd_47, efgh_47);
3045  __m256i ijklmnop_45 = _mm256_unpacklo_epi64(ijkl_47, mnop_47);
3046  __m256i ijklmnop_67 = _mm256_unpackhi_epi64(ijkl_47, mnop_47);
3047  __m256i abcdefgh_89 = _mm256_unpacklo_epi64(abcd_8b, efgh_8b);
3048  __m256i abcdefgh_ab = _mm256_unpackhi_epi64(abcd_8b, efgh_8b);
3049  __m256i ijklmnop_89 = _mm256_unpacklo_epi64(ijkl_8b, mnop_8b);
3050  __m256i ijklmnop_ab = _mm256_unpackhi_epi64(ijkl_8b, mnop_8b);
3051  __m256i abcdefgh_cd = _mm256_unpacklo_epi64(abcd_cf, efgh_cf);
3052  __m256i abcdefgh_ef = _mm256_unpackhi_epi64(abcd_cf, efgh_cf);
3053  __m256i ijklmnop_cd = _mm256_unpacklo_epi64(ijkl_cf, mnop_cf);
3054  __m256i ijklmnop_ef = _mm256_unpackhi_epi64(ijkl_cf, mnop_cf);
3055 
3056  // NOTE: no unpacklo/hi instr in this case, so using permute instr.
3057  kernel.packet[0] = _mm256_permute2x128_si256(abcdefgh_01, ijklmnop_01, 0x20);
3058  kernel.packet[1] = _mm256_permute2x128_si256(abcdefgh_23, ijklmnop_23, 0x20);
3059  kernel.packet[2] = _mm256_permute2x128_si256(abcdefgh_45, ijklmnop_45, 0x20);
3060  kernel.packet[3] = _mm256_permute2x128_si256(abcdefgh_67, ijklmnop_67, 0x20);
3061  kernel.packet[4] = _mm256_permute2x128_si256(abcdefgh_89, ijklmnop_89, 0x20);
3062  kernel.packet[5] = _mm256_permute2x128_si256(abcdefgh_ab, ijklmnop_ab, 0x20);
3063  kernel.packet[6] = _mm256_permute2x128_si256(abcdefgh_cd, ijklmnop_cd, 0x20);
3064  kernel.packet[7] = _mm256_permute2x128_si256(abcdefgh_ef, ijklmnop_ef, 0x20);
3065  kernel.packet[8] = _mm256_permute2x128_si256(abcdefgh_01, ijklmnop_01, 0x31);
3066  kernel.packet[9] = _mm256_permute2x128_si256(abcdefgh_23, ijklmnop_23, 0x31);
3067  kernel.packet[10] = _mm256_permute2x128_si256(abcdefgh_45, ijklmnop_45, 0x31);
3068  kernel.packet[11] = _mm256_permute2x128_si256(abcdefgh_67, ijklmnop_67, 0x31);
3069  kernel.packet[12] = _mm256_permute2x128_si256(abcdefgh_89, ijklmnop_89, 0x31);
3070  kernel.packet[13] = _mm256_permute2x128_si256(abcdefgh_ab, ijklmnop_ab, 0x31);
3071  kernel.packet[14] = _mm256_permute2x128_si256(abcdefgh_cd, ijklmnop_cd, 0x31);
3072  kernel.packet[15] = _mm256_permute2x128_si256(abcdefgh_ef, ijklmnop_ef, 0x31);
3073 }

References a, b, calibrate::c, e(), f(), i, j, k, m, n, p, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [5/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16bf, 4 > &  kernel)
3075  {
3076  __m256i a = kernel.packet[0];
3077  __m256i b = kernel.packet[1];
3078  __m256i c = kernel.packet[2];
3079  __m256i d = kernel.packet[3];
3080 
3081  __m256i ab_07 = _mm256_unpacklo_epi16(a, b);
3082  __m256i cd_07 = _mm256_unpacklo_epi16(c, d);
3083  __m256i ab_8f = _mm256_unpackhi_epi16(a, b);
3084  __m256i cd_8f = _mm256_unpackhi_epi16(c, d);
3085 
3086  __m256i abcd_03 = _mm256_unpacklo_epi32(ab_07, cd_07);
3087  __m256i abcd_47 = _mm256_unpackhi_epi32(ab_07, cd_07);
3088  __m256i abcd_8b = _mm256_unpacklo_epi32(ab_8f, cd_8f);
3089  __m256i abcd_cf = _mm256_unpackhi_epi32(ab_8f, cd_8f);
3090 
3091  // NOTE: no unpacklo/hi instr in this case, so using permute instr.
3092  kernel.packet[0] = _mm256_permute2x128_si256(abcd_03, abcd_47, 0x20);
3093  kernel.packet[1] = _mm256_permute2x128_si256(abcd_8b, abcd_cf, 0x20);
3094  kernel.packet[2] = _mm256_permute2x128_si256(abcd_03, abcd_47, 0x31);
3095  kernel.packet[3] = _mm256_permute2x128_si256(abcd_8b, abcd_cf, 0x31);
3096 }

References a, b, calibrate::c, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [6/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16c, 16 > &  kernel)
inline
2923  {
2924  Packet16c step1[16], step2[16], step3[16];
2925 
2926  step1[0] = vec_mergeh(kernel.packet[0], kernel.packet[8]);
2927  step1[1] = vec_mergel(kernel.packet[0], kernel.packet[8]);
2928  step1[2] = vec_mergeh(kernel.packet[1], kernel.packet[9]);
2929  step1[3] = vec_mergel(kernel.packet[1], kernel.packet[9]);
2930  step1[4] = vec_mergeh(kernel.packet[2], kernel.packet[10]);
2931  step1[5] = vec_mergel(kernel.packet[2], kernel.packet[10]);
2932  step1[6] = vec_mergeh(kernel.packet[3], kernel.packet[11]);
2933  step1[7] = vec_mergel(kernel.packet[3], kernel.packet[11]);
2934  step1[8] = vec_mergeh(kernel.packet[4], kernel.packet[12]);
2935  step1[9] = vec_mergel(kernel.packet[4], kernel.packet[12]);
2936  step1[10] = vec_mergeh(kernel.packet[5], kernel.packet[13]);
2937  step1[11] = vec_mergel(kernel.packet[5], kernel.packet[13]);
2938  step1[12] = vec_mergeh(kernel.packet[6], kernel.packet[14]);
2939  step1[13] = vec_mergel(kernel.packet[6], kernel.packet[14]);
2940  step1[14] = vec_mergeh(kernel.packet[7], kernel.packet[15]);
2941  step1[15] = vec_mergel(kernel.packet[7], kernel.packet[15]);
2942 
2943  step2[0] = vec_mergeh(step1[0], step1[8]);
2944  step2[1] = vec_mergel(step1[0], step1[8]);
2945  step2[2] = vec_mergeh(step1[1], step1[9]);
2946  step2[3] = vec_mergel(step1[1], step1[9]);
2947  step2[4] = vec_mergeh(step1[2], step1[10]);
2948  step2[5] = vec_mergel(step1[2], step1[10]);
2949  step2[6] = vec_mergeh(step1[3], step1[11]);
2950  step2[7] = vec_mergel(step1[3], step1[11]);
2951  step2[8] = vec_mergeh(step1[4], step1[12]);
2952  step2[9] = vec_mergel(step1[4], step1[12]);
2953  step2[10] = vec_mergeh(step1[5], step1[13]);
2954  step2[11] = vec_mergel(step1[5], step1[13]);
2955  step2[12] = vec_mergeh(step1[6], step1[14]);
2956  step2[13] = vec_mergel(step1[6], step1[14]);
2957  step2[14] = vec_mergeh(step1[7], step1[15]);
2958  step2[15] = vec_mergel(step1[7], step1[15]);
2959 
2960  step3[0] = vec_mergeh(step2[0], step2[8]);
2961  step3[1] = vec_mergel(step2[0], step2[8]);
2962  step3[2] = vec_mergeh(step2[1], step2[9]);
2963  step3[3] = vec_mergel(step2[1], step2[9]);
2964  step3[4] = vec_mergeh(step2[2], step2[10]);
2965  step3[5] = vec_mergel(step2[2], step2[10]);
2966  step3[6] = vec_mergeh(step2[3], step2[11]);
2967  step3[7] = vec_mergel(step2[3], step2[11]);
2968  step3[8] = vec_mergeh(step2[4], step2[12]);
2969  step3[9] = vec_mergel(step2[4], step2[12]);
2970  step3[10] = vec_mergeh(step2[5], step2[13]);
2971  step3[11] = vec_mergel(step2[5], step2[13]);
2972  step3[12] = vec_mergeh(step2[6], step2[14]);
2973  step3[13] = vec_mergel(step2[6], step2[14]);
2974  step3[14] = vec_mergeh(step2[7], step2[15]);
2975  step3[15] = vec_mergel(step2[7], step2[15]);
2976 
2977  kernel.packet[0] = vec_mergeh(step3[0], step3[8]);
2978  kernel.packet[1] = vec_mergel(step3[0], step3[8]);
2979  kernel.packet[2] = vec_mergeh(step3[1], step3[9]);
2980  kernel.packet[3] = vec_mergel(step3[1], step3[9]);
2981  kernel.packet[4] = vec_mergeh(step3[2], step3[10]);
2982  kernel.packet[5] = vec_mergel(step3[2], step3[10]);
2983  kernel.packet[6] = vec_mergeh(step3[3], step3[11]);
2984  kernel.packet[7] = vec_mergel(step3[3], step3[11]);
2985  kernel.packet[8] = vec_mergeh(step3[4], step3[12]);
2986  kernel.packet[9] = vec_mergel(step3[4], step3[12]);
2987  kernel.packet[10] = vec_mergeh(step3[5], step3[13]);
2988  kernel.packet[11] = vec_mergel(step3[5], step3[13]);
2989  kernel.packet[12] = vec_mergeh(step3[6], step3[14]);
2990  kernel.packet[13] = vec_mergel(step3[6], step3[14]);
2991  kernel.packet[14] = vec_mergeh(step3[7], step3[15]);
2992  kernel.packet[15] = vec_mergel(step3[7], step3[15]);
2993 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [7/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16c, 4 > &  kernel)
inline
2809  {
2810  Packet16c t0, t1, t2, t3;
2811  t0 = vec_mergeh(kernel.packet[0], kernel.packet[2]);
2812  t1 = vec_mergel(kernel.packet[0], kernel.packet[2]);
2813  t2 = vec_mergeh(kernel.packet[1], kernel.packet[3]);
2814  t3 = vec_mergel(kernel.packet[1], kernel.packet[3]);
2815  kernel.packet[0] = vec_mergeh(t0, t2);
2816  kernel.packet[1] = vec_mergel(t0, t2);
2817  kernel.packet[2] = vec_mergeh(t1, t3);
2818  kernel.packet[3] = vec_mergel(t1, t3);
2819 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [8/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16c, 8 > &  kernel)
2269  {
2270  __m128i t0 = __lsx_vilvl_b(kernel.packet[1], kernel.packet[0]);
2271  __m128i t1 = __lsx_vilvh_b(kernel.packet[1], kernel.packet[0]);
2272  __m128i t2 = __lsx_vilvl_b(kernel.packet[3], kernel.packet[2]);
2273  __m128i t3 = __lsx_vilvh_b(kernel.packet[3], kernel.packet[2]);
2274  __m128i t4 = __lsx_vilvl_b(kernel.packet[5], kernel.packet[4]);
2275  __m128i t5 = __lsx_vilvh_b(kernel.packet[5], kernel.packet[4]);
2276  __m128i t6 = __lsx_vilvl_b(kernel.packet[7], kernel.packet[6]);
2277  __m128i t7 = __lsx_vilvh_b(kernel.packet[7], kernel.packet[6]);
2278 
2279  __m128i s0 = __lsx_vilvl_h(t2, t0);
2280  __m128i s1 = __lsx_vilvh_h(t2, t0);
2281  __m128i s2 = __lsx_vilvl_h(t3, t1);
2282  __m128i s3 = __lsx_vilvh_h(t3, t1);
2283  __m128i s4 = __lsx_vilvl_h(t6, t4);
2284  __m128i s5 = __lsx_vilvh_h(t6, t4);
2285  __m128i s6 = __lsx_vilvl_h(t7, t5);
2286  __m128i s7 = __lsx_vilvh_h(t7, t5);
2287 
2288  kernel.packet[0] = __lsx_vilvl_w(s4, s0);
2289  kernel.packet[1] = __lsx_vilvh_w(s4, s0);
2290  kernel.packet[2] = __lsx_vilvl_w(s5, s1);
2291  kernel.packet[3] = __lsx_vilvh_w(s5, s1);
2292  kernel.packet[4] = __lsx_vilvl_w(s6, s2);
2293  kernel.packet[5] = __lsx_vilvh_w(s6, s2);
2294  kernel.packet[6] = __lsx_vilvl_w(s7, s3);
2295  kernel.packet[7] = __lsx_vilvh_w(s7, s3);
2296 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [9/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet16f, 16 > &  kernel)
inline
1668  {
1669  __m512 T0 = _mm512_unpacklo_ps(kernel.packet[0], kernel.packet[1]);
1670  __m512 T1 = _mm512_unpackhi_ps(kernel.packet[0], kernel.packet[1]);
1671  __m512 T2 = _mm512_unpacklo_ps(kernel.packet[2], kernel.packet[3]);
1672  __m512 T3 = _mm512_unpackhi_ps(kernel.packet[2], kernel.packet[3]);
1673  __m512 T4 = _mm512_unpacklo_ps(kernel.packet[4], kernel.packet[5]);
1674  __m512 T5 = _mm512_unpackhi_ps(kernel.packet[4], kernel.packet[5]);
1675  __m512 T6 = _mm512_unpacklo_ps(kernel.packet[6], kernel.packet[7]);
1676  __m512 T7 = _mm512_unpackhi_ps(kernel.packet[6], kernel.packet[7]);
1677  __m512 T8 = _mm512_unpacklo_ps(kernel.packet[8], kernel.packet[9]);
1678  __m512 T9 = _mm512_unpackhi_ps(kernel.packet[8], kernel.packet[9]);
1679  __m512 T10 = _mm512_unpacklo_ps(kernel.packet[10], kernel.packet[11]);
1680  __m512 T11 = _mm512_unpackhi_ps(kernel.packet[10], kernel.packet[11]);
1681  __m512 T12 = _mm512_unpacklo_ps(kernel.packet[12], kernel.packet[13]);
1682  __m512 T13 = _mm512_unpackhi_ps(kernel.packet[12], kernel.packet[13]);
1683  __m512 T14 = _mm512_unpacklo_ps(kernel.packet[14], kernel.packet[15]);
1684  __m512 T15 = _mm512_unpackhi_ps(kernel.packet[14], kernel.packet[15]);
1685  __m512 S0 = _mm512_shuffle_ps(T0, T2, _MM_SHUFFLE(1, 0, 1, 0));
1686  __m512 S1 = _mm512_shuffle_ps(T0, T2, _MM_SHUFFLE(3, 2, 3, 2));
1687  __m512 S2 = _mm512_shuffle_ps(T1, T3, _MM_SHUFFLE(1, 0, 1, 0));
1688  __m512 S3 = _mm512_shuffle_ps(T1, T3, _MM_SHUFFLE(3, 2, 3, 2));
1689  __m512 S4 = _mm512_shuffle_ps(T4, T6, _MM_SHUFFLE(1, 0, 1, 0));
1690  __m512 S5 = _mm512_shuffle_ps(T4, T6, _MM_SHUFFLE(3, 2, 3, 2));
1691  __m512 S6 = _mm512_shuffle_ps(T5, T7, _MM_SHUFFLE(1, 0, 1, 0));
1692  __m512 S7 = _mm512_shuffle_ps(T5, T7, _MM_SHUFFLE(3, 2, 3, 2));
1693  __m512 S8 = _mm512_shuffle_ps(T8, T10, _MM_SHUFFLE(1, 0, 1, 0));
1694  __m512 S9 = _mm512_shuffle_ps(T8, T10, _MM_SHUFFLE(3, 2, 3, 2));
1695  __m512 S10 = _mm512_shuffle_ps(T9, T11, _MM_SHUFFLE(1, 0, 1, 0));
1696  __m512 S11 = _mm512_shuffle_ps(T9, T11, _MM_SHUFFLE(3, 2, 3, 2));
1697  __m512 S12 = _mm512_shuffle_ps(T12, T14, _MM_SHUFFLE(1, 0, 1, 0));
1698  __m512 S13 = _mm512_shuffle_ps(T12, T14, _MM_SHUFFLE(3, 2, 3, 2));
1699  __m512 S14 = _mm512_shuffle_ps(T13, T15, _MM_SHUFFLE(1, 0, 1, 0));
1700  __m512 S15 = _mm512_shuffle_ps(T13, T15, _MM_SHUFFLE(3, 2, 3, 2));
1701 
1704  EIGEN_EXTRACT_8f_FROM_16f(S2, S2);
1705  EIGEN_EXTRACT_8f_FROM_16f(S3, S3);
1706  EIGEN_EXTRACT_8f_FROM_16f(S4, S4);
1707  EIGEN_EXTRACT_8f_FROM_16f(S5, S5);
1708  EIGEN_EXTRACT_8f_FROM_16f(S6, S6);
1709  EIGEN_EXTRACT_8f_FROM_16f(S7, S7);
1710  EIGEN_EXTRACT_8f_FROM_16f(S8, S8);
1711  EIGEN_EXTRACT_8f_FROM_16f(S9, S9);
1712  EIGEN_EXTRACT_8f_FROM_16f(S10, S10);
1713  EIGEN_EXTRACT_8f_FROM_16f(S11, S11);
1714  EIGEN_EXTRACT_8f_FROM_16f(S12, S12);
1715  EIGEN_EXTRACT_8f_FROM_16f(S13, S13);
1716  EIGEN_EXTRACT_8f_FROM_16f(S14, S14);
1717  EIGEN_EXTRACT_8f_FROM_16f(S15, S15);
1718 
1719  PacketBlock<Packet8f, 32> tmp;
1720 
1721  tmp.packet[0] = _mm256_permute2f128_ps(S0_0, S4_0, 0x20);
1722  tmp.packet[1] = _mm256_permute2f128_ps(S1_0, S5_0, 0x20);
1723  tmp.packet[2] = _mm256_permute2f128_ps(S2_0, S6_0, 0x20);
1724  tmp.packet[3] = _mm256_permute2f128_ps(S3_0, S7_0, 0x20);
1725  tmp.packet[4] = _mm256_permute2f128_ps(S0_0, S4_0, 0x31);
1726  tmp.packet[5] = _mm256_permute2f128_ps(S1_0, S5_0, 0x31);
1727  tmp.packet[6] = _mm256_permute2f128_ps(S2_0, S6_0, 0x31);
1728  tmp.packet[7] = _mm256_permute2f128_ps(S3_0, S7_0, 0x31);
1729 
1730  tmp.packet[8] = _mm256_permute2f128_ps(S0_1, S4_1, 0x20);
1731  tmp.packet[9] = _mm256_permute2f128_ps(S1_1, S5_1, 0x20);
1732  tmp.packet[10] = _mm256_permute2f128_ps(S2_1, S6_1, 0x20);
1733  tmp.packet[11] = _mm256_permute2f128_ps(S3_1, S7_1, 0x20);
1734  tmp.packet[12] = _mm256_permute2f128_ps(S0_1, S4_1, 0x31);
1735  tmp.packet[13] = _mm256_permute2f128_ps(S1_1, S5_1, 0x31);
1736  tmp.packet[14] = _mm256_permute2f128_ps(S2_1, S6_1, 0x31);
1737  tmp.packet[15] = _mm256_permute2f128_ps(S3_1, S7_1, 0x31);
1738 
1739  // Second set of _m256 outputs
1740  tmp.packet[16] = _mm256_permute2f128_ps(S8_0, S12_0, 0x20);
1741  tmp.packet[17] = _mm256_permute2f128_ps(S9_0, S13_0, 0x20);
1742  tmp.packet[18] = _mm256_permute2f128_ps(S10_0, S14_0, 0x20);
1743  tmp.packet[19] = _mm256_permute2f128_ps(S11_0, S15_0, 0x20);
1744  tmp.packet[20] = _mm256_permute2f128_ps(S8_0, S12_0, 0x31);
1745  tmp.packet[21] = _mm256_permute2f128_ps(S9_0, S13_0, 0x31);
1746  tmp.packet[22] = _mm256_permute2f128_ps(S10_0, S14_0, 0x31);
1747  tmp.packet[23] = _mm256_permute2f128_ps(S11_0, S15_0, 0x31);
1748 
1749  tmp.packet[24] = _mm256_permute2f128_ps(S8_1, S12_1, 0x20);
1750  tmp.packet[25] = _mm256_permute2f128_ps(S9_1, S13_1, 0x20);
1751  tmp.packet[26] = _mm256_permute2f128_ps(S10_1, S14_1, 0x20);
1752  tmp.packet[27] = _mm256_permute2f128_ps(S11_1, S15_1, 0x20);
1753  tmp.packet[28] = _mm256_permute2f128_ps(S8_1, S12_1, 0x31);
1754  tmp.packet[29] = _mm256_permute2f128_ps(S9_1, S13_1, 0x31);
1755  tmp.packet[30] = _mm256_permute2f128_ps(S10_1, S14_1, 0x31);
1756  tmp.packet[31] = _mm256_permute2f128_ps(S11_1, S15_1, 0x31);
1757 
1758  // Pack them into the output
1759  PACK_OUTPUT(kernel.packet, tmp.packet, 0, 16);
1760  PACK_OUTPUT(kernel.packet, tmp.packet, 1, 16);
1761  PACK_OUTPUT(kernel.packet, tmp.packet, 2, 16);
1762  PACK_OUTPUT(kernel.packet, tmp.packet, 3, 16);
1763 
1764  PACK_OUTPUT(kernel.packet, tmp.packet, 4, 16);
1765  PACK_OUTPUT(kernel.packet, tmp.packet, 5, 16);
1766  PACK_OUTPUT(kernel.packet, tmp.packet, 6, 16);
1767  PACK_OUTPUT(kernel.packet, tmp.packet, 7, 16);
1768 
1769  PACK_OUTPUT(kernel.packet, tmp.packet, 8, 16);
1770  PACK_OUTPUT(kernel.packet, tmp.packet, 9, 16);
1771  PACK_OUTPUT(kernel.packet, tmp.packet, 10, 16);
1772  PACK_OUTPUT(kernel.packet, tmp.packet, 11, 16);
1773 
1774  PACK_OUTPUT(kernel.packet, tmp.packet, 12, 16);
1775  PACK_OUTPUT(kernel.packet, tmp.packet, 13, 16);
1776  PACK_OUTPUT(kernel.packet, tmp.packet, 14, 16);
1777  PACK_OUTPUT(kernel.packet, tmp.packet, 15, 16);
1778 }
#define EIGEN_EXTRACT_8f_FROM_16f(INPUT, OUTPUT)
Definition: AVX512/PacketMath.h:1420
#define PACK_OUTPUT(OUTPUT, INPUT, INDEX, STRIDE)
Definition: AVX512/PacketMath.h:1665
double S0
Strength of source function in inner region.
Definition: stefan_boltzmann.cc:148
double S1
Strength of source function in outer region.
Definition: stefan_boltzmann.cc:151

References EIGEN_EXTRACT_8f_FROM_16f, PACK_OUTPUT, Eigen::PlainObjectBase< Derived >::packet(), Eigen::internal::PacketBlock< Packet, N >::packet, GlobalParameters::S0, GlobalParameters::S1, and tmp.

◆ ptranspose() [10/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet16f, 4 > &  kernel)
inline
1820  {
1821  __m512 T0 = _mm512_unpacklo_ps(kernel.packet[0], kernel.packet[1]);
1822  __m512 T1 = _mm512_unpackhi_ps(kernel.packet[0], kernel.packet[1]);
1823  __m512 T2 = _mm512_unpacklo_ps(kernel.packet[2], kernel.packet[3]);
1824  __m512 T3 = _mm512_unpackhi_ps(kernel.packet[2], kernel.packet[3]);
1825 
1826  __m512 S0 = _mm512_shuffle_ps(T0, T2, _MM_SHUFFLE(1, 0, 1, 0));
1827  __m512 S1 = _mm512_shuffle_ps(T0, T2, _MM_SHUFFLE(3, 2, 3, 2));
1828  __m512 S2 = _mm512_shuffle_ps(T1, T3, _MM_SHUFFLE(1, 0, 1, 0));
1829  __m512 S3 = _mm512_shuffle_ps(T1, T3, _MM_SHUFFLE(3, 2, 3, 2));
1830 
1833  EIGEN_EXTRACT_8f_FROM_16f(S2, S2);
1834  EIGEN_EXTRACT_8f_FROM_16f(S3, S3);
1835 
1836  PacketBlock<Packet8f, 8> tmp;
1837 
1838  tmp.packet[0] = _mm256_permute2f128_ps(S0_0, S1_0, 0x20);
1839  tmp.packet[1] = _mm256_permute2f128_ps(S2_0, S3_0, 0x20);
1840  tmp.packet[2] = _mm256_permute2f128_ps(S0_0, S1_0, 0x31);
1841  tmp.packet[3] = _mm256_permute2f128_ps(S2_0, S3_0, 0x31);
1842 
1843  tmp.packet[4] = _mm256_permute2f128_ps(S0_1, S1_1, 0x20);
1844  tmp.packet[5] = _mm256_permute2f128_ps(S2_1, S3_1, 0x20);
1845  tmp.packet[6] = _mm256_permute2f128_ps(S0_1, S1_1, 0x31);
1846  tmp.packet[7] = _mm256_permute2f128_ps(S2_1, S3_1, 0x31);
1847 
1848  PACK_OUTPUT_2(kernel.packet, tmp.packet, 0, 1);
1849  PACK_OUTPUT_2(kernel.packet, tmp.packet, 1, 1);
1850  PACK_OUTPUT_2(kernel.packet, tmp.packet, 2, 1);
1851  PACK_OUTPUT_2(kernel.packet, tmp.packet, 3, 1);
1852 }
#define PACK_OUTPUT_2(OUTPUT, INPUT, INDEX, STRIDE)
Definition: AVX512/PacketMath.h:1779

References EIGEN_EXTRACT_8f_FROM_16f, PACK_OUTPUT_2, Eigen::PlainObjectBase< Derived >::packet(), Eigen::internal::PacketBlock< Packet, N >::packet, GlobalParameters::S0, GlobalParameters::S1, and tmp.

◆ ptranspose() [11/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet16f, 8 > &  kernel)
inline
1782  {
1783  __m512 T0 = _mm512_unpacklo_ps(kernel.packet[0], kernel.packet[1]);
1784  __m512 T1 = _mm512_unpackhi_ps(kernel.packet[0], kernel.packet[1]);
1785  __m512 T2 = _mm512_unpacklo_ps(kernel.packet[2], kernel.packet[3]);
1786  __m512 T3 = _mm512_unpackhi_ps(kernel.packet[2], kernel.packet[3]);
1787  __m512 T4 = _mm512_unpacklo_ps(kernel.packet[4], kernel.packet[5]);
1788  __m512 T5 = _mm512_unpackhi_ps(kernel.packet[4], kernel.packet[5]);
1789  __m512 T6 = _mm512_unpacklo_ps(kernel.packet[6], kernel.packet[7]);
1790  __m512 T7 = _mm512_unpackhi_ps(kernel.packet[6], kernel.packet[7]);
1791 
1792  kernel.packet[0] = _mm512_castpd_ps(_mm512_unpacklo_pd(_mm512_castps_pd(T0), _mm512_castps_pd(T2)));
1793  kernel.packet[1] = _mm512_castpd_ps(_mm512_unpackhi_pd(_mm512_castps_pd(T0), _mm512_castps_pd(T2)));
1794  kernel.packet[2] = _mm512_castpd_ps(_mm512_unpacklo_pd(_mm512_castps_pd(T1), _mm512_castps_pd(T3)));
1795  kernel.packet[3] = _mm512_castpd_ps(_mm512_unpackhi_pd(_mm512_castps_pd(T1), _mm512_castps_pd(T3)));
1796  kernel.packet[4] = _mm512_castpd_ps(_mm512_unpacklo_pd(_mm512_castps_pd(T4), _mm512_castps_pd(T6)));
1797  kernel.packet[5] = _mm512_castpd_ps(_mm512_unpackhi_pd(_mm512_castps_pd(T4), _mm512_castps_pd(T6)));
1798  kernel.packet[6] = _mm512_castpd_ps(_mm512_unpacklo_pd(_mm512_castps_pd(T5), _mm512_castps_pd(T7)));
1799  kernel.packet[7] = _mm512_castpd_ps(_mm512_unpackhi_pd(_mm512_castps_pd(T5), _mm512_castps_pd(T7)));
1800 
1801  T0 = _mm512_shuffle_f32x4(kernel.packet[0], kernel.packet[4], 0x44);
1802  T1 = _mm512_shuffle_f32x4(kernel.packet[0], kernel.packet[4], 0xee);
1803  T2 = _mm512_shuffle_f32x4(kernel.packet[1], kernel.packet[5], 0x44);
1804  T3 = _mm512_shuffle_f32x4(kernel.packet[1], kernel.packet[5], 0xee);
1805  T4 = _mm512_shuffle_f32x4(kernel.packet[2], kernel.packet[6], 0x44);
1806  T5 = _mm512_shuffle_f32x4(kernel.packet[2], kernel.packet[6], 0xee);
1807  T6 = _mm512_shuffle_f32x4(kernel.packet[3], kernel.packet[7], 0x44);
1808  T7 = _mm512_shuffle_f32x4(kernel.packet[3], kernel.packet[7], 0xee);
1809 
1810  kernel.packet[0] = _mm512_shuffle_f32x4(T0, T2, 0x88);
1811  kernel.packet[2] = _mm512_shuffle_f32x4(T0, T2, 0xdd);
1812  kernel.packet[1] = _mm512_shuffle_f32x4(T4, T6, 0x88);
1813  kernel.packet[3] = _mm512_shuffle_f32x4(T4, T6, 0xdd);
1814  kernel.packet[4] = _mm512_shuffle_f32x4(T1, T3, 0x88);
1815  kernel.packet[6] = _mm512_shuffle_f32x4(T1, T3, 0xdd);
1816  kernel.packet[5] = _mm512_shuffle_f32x4(T5, T7, 0x88);
1817  kernel.packet[7] = _mm512_shuffle_f32x4(T5, T7, 0xdd);
1818 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [12/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16h, 16 > &  kernel)
2477  {
2478  __m256i a = kernel.packet[0];
2479  __m256i b = kernel.packet[1];
2480  __m256i c = kernel.packet[2];
2481  __m256i d = kernel.packet[3];
2482  __m256i e = kernel.packet[4];
2483  __m256i f = kernel.packet[5];
2484  __m256i g = kernel.packet[6];
2485  __m256i h = kernel.packet[7];
2486  __m256i i = kernel.packet[8];
2487  __m256i j = kernel.packet[9];
2488  __m256i k = kernel.packet[10];
2489  __m256i l = kernel.packet[11];
2490  __m256i m = kernel.packet[12];
2491  __m256i n = kernel.packet[13];
2492  __m256i o = kernel.packet[14];
2493  __m256i p = kernel.packet[15];
2494 
2495  __m256i ab_07 = _mm256_unpacklo_epi16(a, b);
2496  __m256i cd_07 = _mm256_unpacklo_epi16(c, d);
2497  __m256i ef_07 = _mm256_unpacklo_epi16(e, f);
2498  __m256i gh_07 = _mm256_unpacklo_epi16(g, h);
2499  __m256i ij_07 = _mm256_unpacklo_epi16(i, j);
2500  __m256i kl_07 = _mm256_unpacklo_epi16(k, l);
2501  __m256i mn_07 = _mm256_unpacklo_epi16(m, n);
2502  __m256i op_07 = _mm256_unpacklo_epi16(o, p);
2503 
2504  __m256i ab_8f = _mm256_unpackhi_epi16(a, b);
2505  __m256i cd_8f = _mm256_unpackhi_epi16(c, d);
2506  __m256i ef_8f = _mm256_unpackhi_epi16(e, f);
2507  __m256i gh_8f = _mm256_unpackhi_epi16(g, h);
2508  __m256i ij_8f = _mm256_unpackhi_epi16(i, j);
2509  __m256i kl_8f = _mm256_unpackhi_epi16(k, l);
2510  __m256i mn_8f = _mm256_unpackhi_epi16(m, n);
2511  __m256i op_8f = _mm256_unpackhi_epi16(o, p);
2512 
2513  __m256i abcd_03 = _mm256_unpacklo_epi32(ab_07, cd_07);
2514  __m256i abcd_47 = _mm256_unpackhi_epi32(ab_07, cd_07);
2515  __m256i efgh_03 = _mm256_unpacklo_epi32(ef_07, gh_07);
2516  __m256i efgh_47 = _mm256_unpackhi_epi32(ef_07, gh_07);
2517  __m256i ijkl_03 = _mm256_unpacklo_epi32(ij_07, kl_07);
2518  __m256i ijkl_47 = _mm256_unpackhi_epi32(ij_07, kl_07);
2519  __m256i mnop_03 = _mm256_unpacklo_epi32(mn_07, op_07);
2520  __m256i mnop_47 = _mm256_unpackhi_epi32(mn_07, op_07);
2521 
2522  __m256i abcd_8b = _mm256_unpacklo_epi32(ab_8f, cd_8f);
2523  __m256i abcd_cf = _mm256_unpackhi_epi32(ab_8f, cd_8f);
2524  __m256i efgh_8b = _mm256_unpacklo_epi32(ef_8f, gh_8f);
2525  __m256i efgh_cf = _mm256_unpackhi_epi32(ef_8f, gh_8f);
2526  __m256i ijkl_8b = _mm256_unpacklo_epi32(ij_8f, kl_8f);
2527  __m256i ijkl_cf = _mm256_unpackhi_epi32(ij_8f, kl_8f);
2528  __m256i mnop_8b = _mm256_unpacklo_epi32(mn_8f, op_8f);
2529  __m256i mnop_cf = _mm256_unpackhi_epi32(mn_8f, op_8f);
2530 
2531  __m256i abcdefgh_01 = _mm256_unpacklo_epi64(abcd_03, efgh_03);
2532  __m256i abcdefgh_23 = _mm256_unpackhi_epi64(abcd_03, efgh_03);
2533  __m256i ijklmnop_01 = _mm256_unpacklo_epi64(ijkl_03, mnop_03);
2534  __m256i ijklmnop_23 = _mm256_unpackhi_epi64(ijkl_03, mnop_03);
2535  __m256i abcdefgh_45 = _mm256_unpacklo_epi64(abcd_47, efgh_47);
2536  __m256i abcdefgh_67 = _mm256_unpackhi_epi64(abcd_47, efgh_47);
2537  __m256i ijklmnop_45 = _mm256_unpacklo_epi64(ijkl_47, mnop_47);
2538  __m256i ijklmnop_67 = _mm256_unpackhi_epi64(ijkl_47, mnop_47);
2539  __m256i abcdefgh_89 = _mm256_unpacklo_epi64(abcd_8b, efgh_8b);
2540  __m256i abcdefgh_ab = _mm256_unpackhi_epi64(abcd_8b, efgh_8b);
2541  __m256i ijklmnop_89 = _mm256_unpacklo_epi64(ijkl_8b, mnop_8b);
2542  __m256i ijklmnop_ab = _mm256_unpackhi_epi64(ijkl_8b, mnop_8b);
2543  __m256i abcdefgh_cd = _mm256_unpacklo_epi64(abcd_cf, efgh_cf);
2544  __m256i abcdefgh_ef = _mm256_unpackhi_epi64(abcd_cf, efgh_cf);
2545  __m256i ijklmnop_cd = _mm256_unpacklo_epi64(ijkl_cf, mnop_cf);
2546  __m256i ijklmnop_ef = _mm256_unpackhi_epi64(ijkl_cf, mnop_cf);
2547 
2548  // NOTE: no unpacklo/hi instr in this case, so using permute instr.
2549  __m256i a_p_0 = _mm256_permute2x128_si256(abcdefgh_01, ijklmnop_01, 0x20);
2550  __m256i a_p_1 = _mm256_permute2x128_si256(abcdefgh_23, ijklmnop_23, 0x20);
2551  __m256i a_p_2 = _mm256_permute2x128_si256(abcdefgh_45, ijklmnop_45, 0x20);
2552  __m256i a_p_3 = _mm256_permute2x128_si256(abcdefgh_67, ijklmnop_67, 0x20);
2553  __m256i a_p_4 = _mm256_permute2x128_si256(abcdefgh_89, ijklmnop_89, 0x20);
2554  __m256i a_p_5 = _mm256_permute2x128_si256(abcdefgh_ab, ijklmnop_ab, 0x20);
2555  __m256i a_p_6 = _mm256_permute2x128_si256(abcdefgh_cd, ijklmnop_cd, 0x20);
2556  __m256i a_p_7 = _mm256_permute2x128_si256(abcdefgh_ef, ijklmnop_ef, 0x20);
2557  __m256i a_p_8 = _mm256_permute2x128_si256(abcdefgh_01, ijklmnop_01, 0x31);
2558  __m256i a_p_9 = _mm256_permute2x128_si256(abcdefgh_23, ijklmnop_23, 0x31);
2559  __m256i a_p_a = _mm256_permute2x128_si256(abcdefgh_45, ijklmnop_45, 0x31);
2560  __m256i a_p_b = _mm256_permute2x128_si256(abcdefgh_67, ijklmnop_67, 0x31);
2561  __m256i a_p_c = _mm256_permute2x128_si256(abcdefgh_89, ijklmnop_89, 0x31);
2562  __m256i a_p_d = _mm256_permute2x128_si256(abcdefgh_ab, ijklmnop_ab, 0x31);
2563  __m256i a_p_e = _mm256_permute2x128_si256(abcdefgh_cd, ijklmnop_cd, 0x31);
2564  __m256i a_p_f = _mm256_permute2x128_si256(abcdefgh_ef, ijklmnop_ef, 0x31);
2565 
2566  kernel.packet[0] = a_p_0;
2567  kernel.packet[1] = a_p_1;
2568  kernel.packet[2] = a_p_2;
2569  kernel.packet[3] = a_p_3;
2570  kernel.packet[4] = a_p_4;
2571  kernel.packet[5] = a_p_5;
2572  kernel.packet[6] = a_p_6;
2573  kernel.packet[7] = a_p_7;
2574  kernel.packet[8] = a_p_8;
2575  kernel.packet[9] = a_p_9;
2576  kernel.packet[10] = a_p_a;
2577  kernel.packet[11] = a_p_b;
2578  kernel.packet[12] = a_p_c;
2579  kernel.packet[13] = a_p_d;
2580  kernel.packet[14] = a_p_e;
2581  kernel.packet[15] = a_p_f;
2582 }

References a, b, calibrate::c, e(), f(), i, j, k, m, n, p, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [13/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16h, 4 > &  kernel)
2616  {
2617  EIGEN_ALIGN64 half in[4][16];
2618  pstore<half>(in[0], kernel.packet[0]);
2619  pstore<half>(in[1], kernel.packet[1]);
2620  pstore<half>(in[2], kernel.packet[2]);
2621  pstore<half>(in[3], kernel.packet[3]);
2622 
2623  EIGEN_ALIGN64 half out[4][16];
2624 
2625  for (int i = 0; i < 4; ++i) {
2626  for (int j = 0; j < 4; ++j) {
2627  out[i][j] = in[j][4 * i];
2628  }
2629  for (int j = 0; j < 4; ++j) {
2630  out[i][j + 4] = in[j][4 * i + 1];
2631  }
2632  for (int j = 0; j < 4; ++j) {
2633  out[i][j + 8] = in[j][4 * i + 2];
2634  }
2635  for (int j = 0; j < 4; ++j) {
2636  out[i][j + 12] = in[j][4 * i + 3];
2637  }
2638  }
2639 
2640  kernel.packet[0] = pload<Packet16h>(out[0]);
2641  kernel.packet[1] = pload<Packet16h>(out[1]);
2642  kernel.packet[2] = pload<Packet16h>(out[2]);
2643  kernel.packet[3] = pload<Packet16h>(out[3]);
2644 }
EIGEN_STRONG_INLINE Packet16h pload< Packet16h >(const Eigen::half *from)
Definition: AVX512/PacketMath.h:2213
EIGEN_STRONG_INLINE void pstore< half >(Eigen::half *to, const Packet16h &from)
Definition: AVX512/PacketMath.h:2223

References EIGEN_ALIGN64, i, j, out(), Eigen::internal::PacketBlock< Packet, N >::packet, pload< Packet16h >(), and pstore< half >().

◆ ptranspose() [14/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16h, 8 > &  kernel)
2584  {
2585  EIGEN_ALIGN64 half in[8][16];
2586  pstore<half>(in[0], kernel.packet[0]);
2587  pstore<half>(in[1], kernel.packet[1]);
2588  pstore<half>(in[2], kernel.packet[2]);
2589  pstore<half>(in[3], kernel.packet[3]);
2590  pstore<half>(in[4], kernel.packet[4]);
2591  pstore<half>(in[5], kernel.packet[5]);
2592  pstore<half>(in[6], kernel.packet[6]);
2593  pstore<half>(in[7], kernel.packet[7]);
2594 
2595  EIGEN_ALIGN64 half out[8][16];
2596 
2597  for (int i = 0; i < 8; ++i) {
2598  for (int j = 0; j < 8; ++j) {
2599  out[i][j] = in[j][2 * i];
2600  }
2601  for (int j = 0; j < 8; ++j) {
2602  out[i][j + 8] = in[j][2 * i + 1];
2603  }
2604  }
2605 
2606  kernel.packet[0] = pload<Packet16h>(out[0]);
2607  kernel.packet[1] = pload<Packet16h>(out[1]);
2608  kernel.packet[2] = pload<Packet16h>(out[2]);
2609  kernel.packet[3] = pload<Packet16h>(out[3]);
2610  kernel.packet[4] = pload<Packet16h>(out[4]);
2611  kernel.packet[5] = pload<Packet16h>(out[5]);
2612  kernel.packet[6] = pload<Packet16h>(out[6]);
2613  kernel.packet[7] = pload<Packet16h>(out[7]);
2614 }

References EIGEN_ALIGN64, i, j, out(), Eigen::internal::PacketBlock< Packet, N >::packet, pload< Packet16h >(), and pstore< half >().

◆ ptranspose() [15/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet16i, 16 > &  kernel)
inline
2034  {
2035  __m512i T0 = _mm512_unpacklo_epi32(kernel.packet[0], kernel.packet[1]);
2036  __m512i T1 = _mm512_unpackhi_epi32(kernel.packet[0], kernel.packet[1]);
2037  __m512i T2 = _mm512_unpacklo_epi32(kernel.packet[2], kernel.packet[3]);
2038  __m512i T3 = _mm512_unpackhi_epi32(kernel.packet[2], kernel.packet[3]);
2039  __m512i T4 = _mm512_unpacklo_epi32(kernel.packet[4], kernel.packet[5]);
2040  __m512i T5 = _mm512_unpackhi_epi32(kernel.packet[4], kernel.packet[5]);
2041  __m512i T6 = _mm512_unpacklo_epi32(kernel.packet[6], kernel.packet[7]);
2042  __m512i T7 = _mm512_unpackhi_epi32(kernel.packet[6], kernel.packet[7]);
2043  __m512i T8 = _mm512_unpacklo_epi32(kernel.packet[8], kernel.packet[9]);
2044  __m512i T9 = _mm512_unpackhi_epi32(kernel.packet[8], kernel.packet[9]);
2045  __m512i T10 = _mm512_unpacklo_epi32(kernel.packet[10], kernel.packet[11]);
2046  __m512i T11 = _mm512_unpackhi_epi32(kernel.packet[10], kernel.packet[11]);
2047  __m512i T12 = _mm512_unpacklo_epi32(kernel.packet[12], kernel.packet[13]);
2048  __m512i T13 = _mm512_unpackhi_epi32(kernel.packet[12], kernel.packet[13]);
2049  __m512i T14 = _mm512_unpacklo_epi32(kernel.packet[14], kernel.packet[15]);
2050  __m512i T15 = _mm512_unpackhi_epi32(kernel.packet[14], kernel.packet[15]);
2051  __m512i S0 = SHUFFLE_EPI32(T0, T2, _MM_SHUFFLE(1, 0, 1, 0));
2052  __m512i S1 = SHUFFLE_EPI32(T0, T2, _MM_SHUFFLE(3, 2, 3, 2));
2053  __m512i S2 = SHUFFLE_EPI32(T1, T3, _MM_SHUFFLE(1, 0, 1, 0));
2054  __m512i S3 = SHUFFLE_EPI32(T1, T3, _MM_SHUFFLE(3, 2, 3, 2));
2055  __m512i S4 = SHUFFLE_EPI32(T4, T6, _MM_SHUFFLE(1, 0, 1, 0));
2056  __m512i S5 = SHUFFLE_EPI32(T4, T6, _MM_SHUFFLE(3, 2, 3, 2));
2057  __m512i S6 = SHUFFLE_EPI32(T5, T7, _MM_SHUFFLE(1, 0, 1, 0));
2058  __m512i S7 = SHUFFLE_EPI32(T5, T7, _MM_SHUFFLE(3, 2, 3, 2));
2059  __m512i S8 = SHUFFLE_EPI32(T8, T10, _MM_SHUFFLE(1, 0, 1, 0));
2060  __m512i S9 = SHUFFLE_EPI32(T8, T10, _MM_SHUFFLE(3, 2, 3, 2));
2061  __m512i S10 = SHUFFLE_EPI32(T9, T11, _MM_SHUFFLE(1, 0, 1, 0));
2062  __m512i S11 = SHUFFLE_EPI32(T9, T11, _MM_SHUFFLE(3, 2, 3, 2));
2063  __m512i S12 = SHUFFLE_EPI32(T12, T14, _MM_SHUFFLE(1, 0, 1, 0));
2064  __m512i S13 = SHUFFLE_EPI32(T12, T14, _MM_SHUFFLE(3, 2, 3, 2));
2065  __m512i S14 = SHUFFLE_EPI32(T13, T15, _MM_SHUFFLE(1, 0, 1, 0));
2066  __m512i S15 = SHUFFLE_EPI32(T13, T15, _MM_SHUFFLE(3, 2, 3, 2));
2067 
2070  EIGEN_EXTRACT_8i_FROM_16i(S2, S2);
2071  EIGEN_EXTRACT_8i_FROM_16i(S3, S3);
2072  EIGEN_EXTRACT_8i_FROM_16i(S4, S4);
2073  EIGEN_EXTRACT_8i_FROM_16i(S5, S5);
2074  EIGEN_EXTRACT_8i_FROM_16i(S6, S6);
2075  EIGEN_EXTRACT_8i_FROM_16i(S7, S7);
2076  EIGEN_EXTRACT_8i_FROM_16i(S8, S8);
2077  EIGEN_EXTRACT_8i_FROM_16i(S9, S9);
2078  EIGEN_EXTRACT_8i_FROM_16i(S10, S10);
2079  EIGEN_EXTRACT_8i_FROM_16i(S11, S11);
2080  EIGEN_EXTRACT_8i_FROM_16i(S12, S12);
2081  EIGEN_EXTRACT_8i_FROM_16i(S13, S13);
2082  EIGEN_EXTRACT_8i_FROM_16i(S14, S14);
2083  EIGEN_EXTRACT_8i_FROM_16i(S15, S15);
2084 
2085  PacketBlock<Packet8i, 32> tmp;
2086 
2087  tmp.packet[0] = _mm256_permute2f128_si256(S0_0, S4_0, 0x20);
2088  tmp.packet[1] = _mm256_permute2f128_si256(S1_0, S5_0, 0x20);
2089  tmp.packet[2] = _mm256_permute2f128_si256(S2_0, S6_0, 0x20);
2090  tmp.packet[3] = _mm256_permute2f128_si256(S3_0, S7_0, 0x20);
2091  tmp.packet[4] = _mm256_permute2f128_si256(S0_0, S4_0, 0x31);
2092  tmp.packet[5] = _mm256_permute2f128_si256(S1_0, S5_0, 0x31);
2093  tmp.packet[6] = _mm256_permute2f128_si256(S2_0, S6_0, 0x31);
2094  tmp.packet[7] = _mm256_permute2f128_si256(S3_0, S7_0, 0x31);
2095 
2096  tmp.packet[8] = _mm256_permute2f128_si256(S0_1, S4_1, 0x20);
2097  tmp.packet[9] = _mm256_permute2f128_si256(S1_1, S5_1, 0x20);
2098  tmp.packet[10] = _mm256_permute2f128_si256(S2_1, S6_1, 0x20);
2099  tmp.packet[11] = _mm256_permute2f128_si256(S3_1, S7_1, 0x20);
2100  tmp.packet[12] = _mm256_permute2f128_si256(S0_1, S4_1, 0x31);
2101  tmp.packet[13] = _mm256_permute2f128_si256(S1_1, S5_1, 0x31);
2102  tmp.packet[14] = _mm256_permute2f128_si256(S2_1, S6_1, 0x31);
2103  tmp.packet[15] = _mm256_permute2f128_si256(S3_1, S7_1, 0x31);
2104 
2105  // Second set of _m256 outputs
2106  tmp.packet[16] = _mm256_permute2f128_si256(S8_0, S12_0, 0x20);
2107  tmp.packet[17] = _mm256_permute2f128_si256(S9_0, S13_0, 0x20);
2108  tmp.packet[18] = _mm256_permute2f128_si256(S10_0, S14_0, 0x20);
2109  tmp.packet[19] = _mm256_permute2f128_si256(S11_0, S15_0, 0x20);
2110  tmp.packet[20] = _mm256_permute2f128_si256(S8_0, S12_0, 0x31);
2111  tmp.packet[21] = _mm256_permute2f128_si256(S9_0, S13_0, 0x31);
2112  tmp.packet[22] = _mm256_permute2f128_si256(S10_0, S14_0, 0x31);
2113  tmp.packet[23] = _mm256_permute2f128_si256(S11_0, S15_0, 0x31);
2114 
2115  tmp.packet[24] = _mm256_permute2f128_si256(S8_1, S12_1, 0x20);
2116  tmp.packet[25] = _mm256_permute2f128_si256(S9_1, S13_1, 0x20);
2117  tmp.packet[26] = _mm256_permute2f128_si256(S10_1, S14_1, 0x20);
2118  tmp.packet[27] = _mm256_permute2f128_si256(S11_1, S15_1, 0x20);
2119  tmp.packet[28] = _mm256_permute2f128_si256(S8_1, S12_1, 0x31);
2120  tmp.packet[29] = _mm256_permute2f128_si256(S9_1, S13_1, 0x31);
2121  tmp.packet[30] = _mm256_permute2f128_si256(S10_1, S14_1, 0x31);
2122  tmp.packet[31] = _mm256_permute2f128_si256(S11_1, S15_1, 0x31);
2123 
2124  // Pack them into the output
2125  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 0, 16);
2126  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 1, 16);
2127  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 2, 16);
2128  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 3, 16);
2129 
2130  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 4, 16);
2131  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 5, 16);
2132  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 6, 16);
2133  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 7, 16);
2134 
2135  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 8, 16);
2136  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 9, 16);
2137  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 10, 16);
2138  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 11, 16);
2139 
2140  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 12, 16);
2141  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 13, 16);
2142  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 14, 16);
2143  PACK_OUTPUT_I32(kernel.packet, tmp.packet, 15, 16);
2144 }
#define EIGEN_EXTRACT_8i_FROM_16i(INPUT, OUTPUT)
Definition: AVX512/PacketMath.h:1426
#define SHUFFLE_EPI32(A, B, M)
Definition: AVX512/PacketMath.h:2032
#define PACK_OUTPUT_I32(OUTPUT, INPUT, INDEX, STRIDE)
Definition: AVX512/PacketMath.h:2026

References EIGEN_EXTRACT_8i_FROM_16i, PACK_OUTPUT_I32, Eigen::PlainObjectBase< Derived >::packet(), Eigen::internal::PacketBlock< Packet, N >::packet, GlobalParameters::S0, GlobalParameters::S1, SHUFFLE_EPI32, and tmp.

◆ ptranspose() [16/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet16i, 4 > &  kernel)
inline
2146  {
2147  __m512i T0 = _mm512_unpacklo_epi32(kernel.packet[0], kernel.packet[1]);
2148  __m512i T1 = _mm512_unpackhi_epi32(kernel.packet[0], kernel.packet[1]);
2149  __m512i T2 = _mm512_unpacklo_epi32(kernel.packet[2], kernel.packet[3]);
2150  __m512i T3 = _mm512_unpackhi_epi32(kernel.packet[2], kernel.packet[3]);
2151 
2152  __m512i S0 = SHUFFLE_EPI32(T0, T2, _MM_SHUFFLE(1, 0, 1, 0));
2153  __m512i S1 = SHUFFLE_EPI32(T0, T2, _MM_SHUFFLE(3, 2, 3, 2));
2154  __m512i S2 = SHUFFLE_EPI32(T1, T3, _MM_SHUFFLE(1, 0, 1, 0));
2155  __m512i S3 = SHUFFLE_EPI32(T1, T3, _MM_SHUFFLE(3, 2, 3, 2));
2156 
2159  EIGEN_EXTRACT_8i_FROM_16i(S2, S2);
2160  EIGEN_EXTRACT_8i_FROM_16i(S3, S3);
2161 
2162  PacketBlock<Packet8i, 8> tmp;
2163 
2164  tmp.packet[0] = _mm256_permute2f128_si256(S0_0, S1_0, 0x20);
2165  tmp.packet[1] = _mm256_permute2f128_si256(S2_0, S3_0, 0x20);
2166  tmp.packet[2] = _mm256_permute2f128_si256(S0_0, S1_0, 0x31);
2167  tmp.packet[3] = _mm256_permute2f128_si256(S2_0, S3_0, 0x31);
2168 
2169  tmp.packet[4] = _mm256_permute2f128_si256(S0_1, S1_1, 0x20);
2170  tmp.packet[5] = _mm256_permute2f128_si256(S2_1, S3_1, 0x20);
2171  tmp.packet[6] = _mm256_permute2f128_si256(S0_1, S1_1, 0x31);
2172  tmp.packet[7] = _mm256_permute2f128_si256(S2_1, S3_1, 0x31);
2173 
2174  PACK_OUTPUT_I32_2(kernel.packet, tmp.packet, 0, 1);
2175  PACK_OUTPUT_I32_2(kernel.packet, tmp.packet, 1, 1);
2176  PACK_OUTPUT_I32_2(kernel.packet, tmp.packet, 2, 1);
2177  PACK_OUTPUT_I32_2(kernel.packet, tmp.packet, 3, 1);
2178 }
#define PACK_OUTPUT_I32_2(OUTPUT, INPUT, INDEX, STRIDE)
Definition: AVX512/PacketMath.h:2029

References EIGEN_EXTRACT_8i_FROM_16i, PACK_OUTPUT_I32_2, Eigen::PlainObjectBase< Derived >::packet(), Eigen::internal::PacketBlock< Packet, N >::packet, GlobalParameters::S0, GlobalParameters::S1, SHUFFLE_EPI32, and tmp.

◆ ptranspose() [17/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16uc, 16 > &  kernel)
inline
2995  {
2996  Packet16uc step1[16], step2[16], step3[16];
2997 
2998  step1[0] = vec_mergeh(kernel.packet[0], kernel.packet[8]);
2999  step1[1] = vec_mergel(kernel.packet[0], kernel.packet[8]);
3000  step1[2] = vec_mergeh(kernel.packet[1], kernel.packet[9]);
3001  step1[3] = vec_mergel(kernel.packet[1], kernel.packet[9]);
3002  step1[4] = vec_mergeh(kernel.packet[2], kernel.packet[10]);
3003  step1[5] = vec_mergel(kernel.packet[2], kernel.packet[10]);
3004  step1[6] = vec_mergeh(kernel.packet[3], kernel.packet[11]);
3005  step1[7] = vec_mergel(kernel.packet[3], kernel.packet[11]);
3006  step1[8] = vec_mergeh(kernel.packet[4], kernel.packet[12]);
3007  step1[9] = vec_mergel(kernel.packet[4], kernel.packet[12]);
3008  step1[10] = vec_mergeh(kernel.packet[5], kernel.packet[13]);
3009  step1[11] = vec_mergel(kernel.packet[5], kernel.packet[13]);
3010  step1[12] = vec_mergeh(kernel.packet[6], kernel.packet[14]);
3011  step1[13] = vec_mergel(kernel.packet[6], kernel.packet[14]);
3012  step1[14] = vec_mergeh(kernel.packet[7], kernel.packet[15]);
3013  step1[15] = vec_mergel(kernel.packet[7], kernel.packet[15]);
3014 
3015  step2[0] = vec_mergeh(step1[0], step1[8]);
3016  step2[1] = vec_mergel(step1[0], step1[8]);
3017  step2[2] = vec_mergeh(step1[1], step1[9]);
3018  step2[3] = vec_mergel(step1[1], step1[9]);
3019  step2[4] = vec_mergeh(step1[2], step1[10]);
3020  step2[5] = vec_mergel(step1[2], step1[10]);
3021  step2[6] = vec_mergeh(step1[3], step1[11]);
3022  step2[7] = vec_mergel(step1[3], step1[11]);
3023  step2[8] = vec_mergeh(step1[4], step1[12]);
3024  step2[9] = vec_mergel(step1[4], step1[12]);
3025  step2[10] = vec_mergeh(step1[5], step1[13]);
3026  step2[11] = vec_mergel(step1[5], step1[13]);
3027  step2[12] = vec_mergeh(step1[6], step1[14]);
3028  step2[13] = vec_mergel(step1[6], step1[14]);
3029  step2[14] = vec_mergeh(step1[7], step1[15]);
3030  step2[15] = vec_mergel(step1[7], step1[15]);
3031 
3032  step3[0] = vec_mergeh(step2[0], step2[8]);
3033  step3[1] = vec_mergel(step2[0], step2[8]);
3034  step3[2] = vec_mergeh(step2[1], step2[9]);
3035  step3[3] = vec_mergel(step2[1], step2[9]);
3036  step3[4] = vec_mergeh(step2[2], step2[10]);
3037  step3[5] = vec_mergel(step2[2], step2[10]);
3038  step3[6] = vec_mergeh(step2[3], step2[11]);
3039  step3[7] = vec_mergel(step2[3], step2[11]);
3040  step3[8] = vec_mergeh(step2[4], step2[12]);
3041  step3[9] = vec_mergel(step2[4], step2[12]);
3042  step3[10] = vec_mergeh(step2[5], step2[13]);
3043  step3[11] = vec_mergel(step2[5], step2[13]);
3044  step3[12] = vec_mergeh(step2[6], step2[14]);
3045  step3[13] = vec_mergel(step2[6], step2[14]);
3046  step3[14] = vec_mergeh(step2[7], step2[15]);
3047  step3[15] = vec_mergel(step2[7], step2[15]);
3048 
3049  kernel.packet[0] = vec_mergeh(step3[0], step3[8]);
3050  kernel.packet[1] = vec_mergel(step3[0], step3[8]);
3051  kernel.packet[2] = vec_mergeh(step3[1], step3[9]);
3052  kernel.packet[3] = vec_mergel(step3[1], step3[9]);
3053  kernel.packet[4] = vec_mergeh(step3[2], step3[10]);
3054  kernel.packet[5] = vec_mergel(step3[2], step3[10]);
3055  kernel.packet[6] = vec_mergeh(step3[3], step3[11]);
3056  kernel.packet[7] = vec_mergel(step3[3], step3[11]);
3057  kernel.packet[8] = vec_mergeh(step3[4], step3[12]);
3058  kernel.packet[9] = vec_mergel(step3[4], step3[12]);
3059  kernel.packet[10] = vec_mergeh(step3[5], step3[13]);
3060  kernel.packet[11] = vec_mergel(step3[5], step3[13]);
3061  kernel.packet[12] = vec_mergeh(step3[6], step3[14]);
3062  kernel.packet[13] = vec_mergel(step3[6], step3[14]);
3063  kernel.packet[14] = vec_mergeh(step3[7], step3[15]);
3064  kernel.packet[15] = vec_mergel(step3[7], step3[15]);
3065 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [18/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16uc, 4 > &  kernel)
inline
2821  {
2822  Packet16uc t0, t1, t2, t3;
2823  t0 = vec_mergeh(kernel.packet[0], kernel.packet[2]);
2824  t1 = vec_mergel(kernel.packet[0], kernel.packet[2]);
2825  t2 = vec_mergeh(kernel.packet[1], kernel.packet[3]);
2826  t3 = vec_mergel(kernel.packet[1], kernel.packet[3]);
2827  kernel.packet[0] = vec_mergeh(t0, t2);
2828  kernel.packet[1] = vec_mergel(t0, t2);
2829  kernel.packet[2] = vec_mergeh(t1, t3);
2830  kernel.packet[3] = vec_mergel(t1, t3);
2831 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [19/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet16uc, 8 > &  kernel)
2432  {
2433  __m128i t0 = __lsx_vilvl_b(kernel.packet[1], kernel.packet[0]);
2434  __m128i t1 = __lsx_vilvh_b(kernel.packet[1], kernel.packet[0]);
2435  __m128i t2 = __lsx_vilvl_b(kernel.packet[3], kernel.packet[2]);
2436  __m128i t3 = __lsx_vilvh_b(kernel.packet[3], kernel.packet[2]);
2437  __m128i t4 = __lsx_vilvl_b(kernel.packet[5], kernel.packet[4]);
2438  __m128i t5 = __lsx_vilvh_b(kernel.packet[5], kernel.packet[4]);
2439  __m128i t6 = __lsx_vilvl_b(kernel.packet[7], kernel.packet[6]);
2440  __m128i t7 = __lsx_vilvh_b(kernel.packet[7], kernel.packet[6]);
2441 
2442  __m128i s0 = __lsx_vilvl_h(t2, t0);
2443  __m128i s1 = __lsx_vilvh_h(t2, t0);
2444  __m128i s2 = __lsx_vilvl_h(t3, t1);
2445  __m128i s3 = __lsx_vilvh_h(t3, t1);
2446  __m128i s4 = __lsx_vilvl_h(t6, t4);
2447  __m128i s5 = __lsx_vilvh_h(t6, t4);
2448  __m128i s6 = __lsx_vilvl_h(t7, t5);
2449  __m128i s7 = __lsx_vilvh_h(t7, t5);
2450 
2451  kernel.packet[0] = __lsx_vilvl_w(s4, s0);
2452  kernel.packet[1] = __lsx_vilvh_w(s4, s0);
2453  kernel.packet[2] = __lsx_vilvl_w(s5, s1);
2454  kernel.packet[3] = __lsx_vilvh_w(s5, s1);
2455  kernel.packet[4] = __lsx_vilvl_w(s6, s2);
2456  kernel.packet[5] = __lsx_vilvh_w(s6, s2);
2457  kernel.packet[6] = __lsx_vilvl_w(s7, s3);
2458  kernel.packet[7] = __lsx_vilvh_w(s7, s3);
2459 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [20/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet1cd, 2 > &  kernel)
511  {
512  Packet2d tmp = (__m128d)__lsx_vilvl_d((__m128i)kernel.packet[1].v, (__m128i)kernel.packet[0].v);
513  kernel.packet[1].v = (__m128d)__lsx_vilvh_d((__m128i)kernel.packet[1].v, (__m128i)kernel.packet[0].v);
514  kernel.packet[0].v = tmp;
515 }

References Eigen::internal::PacketBlock< Packet, N >::packet, and tmp.

◆ ptranspose() [21/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet1cf, 1 > &  )
inline
465 {}

◆ ptranspose() [22/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet2cd, 2 > &  kernel)
inline
427  {
428  __m256d tmp = _mm256_permute2f128_pd(kernel.packet[0].v, kernel.packet[1].v, 0 + (2 << 4));
429  kernel.packet[1].v = _mm256_permute2f128_pd(kernel.packet[0].v, kernel.packet[1].v, 1 + (3 << 4));
430  kernel.packet[0].v = tmp;
431 }

References Eigen::internal::PacketBlock< Packet, N >::packet, and tmp.

◆ ptranspose() [23/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet2cf, 2 > &  kernel)
inline
339  {
340 #ifdef EIGEN_VECTORIZE_VSX
341  Packet4f tmp = reinterpret_cast<Packet4f>(
342  vec_mergeh(reinterpret_cast<Packet2d>(kernel.packet[0].v), reinterpret_cast<Packet2d>(kernel.packet[1].v)));
343  kernel.packet[1].v = reinterpret_cast<Packet4f>(
344  vec_mergel(reinterpret_cast<Packet2d>(kernel.packet[0].v), reinterpret_cast<Packet2d>(kernel.packet[1].v)));
345 #else
346  Packet4f tmp = vec_perm(kernel.packet[0].v, kernel.packet[1].v, p16uc_TRANSPOSE64_HI);
347  kernel.packet[1].v = vec_perm(kernel.packet[0].v, kernel.packet[1].v, p16uc_TRANSPOSE64_LO);
348 #endif
349  kernel.packet[0].v = tmp;
350 }
static Packet16uc p16uc_TRANSPOSE64_LO
Definition: AltiVec/PacketMath.h:145

References p16uc_TRANSPOSE64_HI, p16uc_TRANSPOSE64_LO, Eigen::internal::PacketBlock< Packet, N >::packet, and tmp.

Referenced by BlockedInPlaceTranspose(), Eigen::internal::dhs_pack< double, DataMapper, Packet2d, StorageOrder, PanelMode, true >::dhs_copy(), Eigen::internal::dhs_pack< double, DataMapper, Packet2d, StorageOrder, PanelMode, false >::dhs_copy(), Eigen::internal::dhs_pack< Scalar, DataMapper, Packet, StorageOrder, PanelMode, UseLhs >::dhs_copy(), Eigen::internal::gemm_pack_lhs< Scalar, Index, DataMapper, Pack1, Pack2, Packet, RowMajor, Conjugate, PanelMode >::operator()(), Eigen::internal::gemm_pack_rhs< Scalar, Index, DataMapper, 8, ColMajor, Conjugate, PanelMode >::operator()(), Eigen::internal::gemm_pack_rhs< Scalar, Index, DataMapper, nr, ColMajor, Conjugate, PanelMode >::operator()(), packetmath(), ptranspose(), and Eigen::internal::inplace_transpose_selector< MatrixType, true, true >::run().

◆ ptranspose() [24/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet2d, 2 > &  kernel)
inline
2195  {
2196  Packet2d tmp = (Packet2d)__lsx_vilvh_d((__m128i)kernel.packet[1], (__m128i)kernel.packet[0]);
2197  kernel.packet[0] = (Packet2d)__lsx_vilvl_d((__m128i)kernel.packet[1], (__m128i)kernel.packet[0]);
2198  kernel.packet[1] = tmp;
2199 }

References Eigen::internal::PacketBlock< Packet, N >::packet, and tmp.

◆ ptranspose() [25/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet2f, 2 > &  kernel)
4258  {
4259  detail::ptranspose_impl(kernel);
4260 }
EIGEN_ALWAYS_INLINE void ptranspose_impl(PacketBlock< Packet, 16 > &kernel)
Definition: NEON/PacketMath.h:4240

References Eigen::internal::detail::ptranspose_impl().

◆ ptranspose() [26/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet2i, 2 > &  kernel)
4341  {
4342  detail::ptranspose_impl(kernel);
4343 }

References Eigen::internal::detail::ptranspose_impl().

◆ ptranspose() [27/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet2l, 2 > &  kernel)
2358  {
2359  __m128i tmp = __lsx_vilvh_d(kernel.packet[1], kernel.packet[0]);
2360  kernel.packet[0] = __lsx_vilvl_d(kernel.packet[1], kernel.packet[0]);
2361  kernel.packet[1] = tmp;
2362 }

References Eigen::internal::PacketBlock< Packet, N >::packet, and tmp.

◆ ptranspose() [28/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet2ui, 2 > &  kernel)
4347  {
4348  detail::zip_in_place(kernel.packet[0], kernel.packet[1]);
4349 }
void zip_in_place(Packet &p1, Packet &p2)

References Eigen::internal::PacketBlock< Packet, N >::packet, and Eigen::internal::detail::zip_in_place().

◆ ptranspose() [29/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet2ul, 2 > &  kernel)
2521  {
2522  __m128i tmp = __lsx_vilvh_d(kernel.packet[1], kernel.packet[0]);
2523  kernel.packet[0] = __lsx_vilvl_d(kernel.packet[1], kernel.packet[0]);
2524  kernel.packet[1] = tmp;
2525 }

References Eigen::internal::PacketBlock< Packet, N >::packet, and tmp.

◆ ptranspose() [30/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet32h, 32 > &  a)
inline
550  {
551  __m512i t[32];
552 
554  for (int i = 0; i < 16; i++) {
555  t[2 * i] = _mm512_unpacklo_epi16(_mm512_castph_si512(a.packet[2 * i]), _mm512_castph_si512(a.packet[2 * i + 1]));
556  t[2 * i + 1] =
557  _mm512_unpackhi_epi16(_mm512_castph_si512(a.packet[2 * i]), _mm512_castph_si512(a.packet[2 * i + 1]));
558  }
559 
560  __m512i p[32];
561 
563  for (int i = 0; i < 8; i++) {
564  p[4 * i] = _mm512_unpacklo_epi32(t[4 * i], t[4 * i + 2]);
565  p[4 * i + 1] = _mm512_unpackhi_epi32(t[4 * i], t[4 * i + 2]);
566  p[4 * i + 2] = _mm512_unpacklo_epi32(t[4 * i + 1], t[4 * i + 3]);
567  p[4 * i + 3] = _mm512_unpackhi_epi32(t[4 * i + 1], t[4 * i + 3]);
568  }
569 
570  __m512i q[32];
571 
573  for (int i = 0; i < 4; i++) {
574  q[8 * i] = _mm512_unpacklo_epi64(p[8 * i], p[8 * i + 4]);
575  q[8 * i + 1] = _mm512_unpackhi_epi64(p[8 * i], p[8 * i + 4]);
576  q[8 * i + 2] = _mm512_unpacklo_epi64(p[8 * i + 1], p[8 * i + 5]);
577  q[8 * i + 3] = _mm512_unpackhi_epi64(p[8 * i + 1], p[8 * i + 5]);
578  q[8 * i + 4] = _mm512_unpacklo_epi64(p[8 * i + 2], p[8 * i + 6]);
579  q[8 * i + 5] = _mm512_unpackhi_epi64(p[8 * i + 2], p[8 * i + 6]);
580  q[8 * i + 6] = _mm512_unpacklo_epi64(p[8 * i + 3], p[8 * i + 7]);
581  q[8 * i + 7] = _mm512_unpackhi_epi64(p[8 * i + 3], p[8 * i + 7]);
582  }
583 
584  __m512i f[32];
585 
586 #define PACKET32H_TRANSPOSE_HELPER(X, Y) \
587  do { \
588  f[Y * 8] = _mm512_inserti32x4(f[Y * 8], _mm512_extracti32x4_epi32(q[X * 8], Y), X); \
589  f[Y * 8 + 1] = _mm512_inserti32x4(f[Y * 8 + 1], _mm512_extracti32x4_epi32(q[X * 8 + 1], Y), X); \
590  f[Y * 8 + 2] = _mm512_inserti32x4(f[Y * 8 + 2], _mm512_extracti32x4_epi32(q[X * 8 + 2], Y), X); \
591  f[Y * 8 + 3] = _mm512_inserti32x4(f[Y * 8 + 3], _mm512_extracti32x4_epi32(q[X * 8 + 3], Y), X); \
592  f[Y * 8 + 4] = _mm512_inserti32x4(f[Y * 8 + 4], _mm512_extracti32x4_epi32(q[X * 8 + 4], Y), X); \
593  f[Y * 8 + 5] = _mm512_inserti32x4(f[Y * 8 + 5], _mm512_extracti32x4_epi32(q[X * 8 + 5], Y), X); \
594  f[Y * 8 + 6] = _mm512_inserti32x4(f[Y * 8 + 6], _mm512_extracti32x4_epi32(q[X * 8 + 6], Y), X); \
595  f[Y * 8 + 7] = _mm512_inserti32x4(f[Y * 8 + 7], _mm512_extracti32x4_epi32(q[X * 8 + 7], Y), X); \
596  } while (false);
597 
602 
609 
616 
617 #undef PACKET32H_TRANSPOSE_HELPER
618 
620  for (int i = 0; i < 32; i++) {
621  a.packet[i] = _mm512_castsi512_ph(f[i]);
622  }
623 }
#define PACKET32H_TRANSPOSE_HELPER(X, Y)

References a, EIGEN_UNROLL_LOOP, f(), i, p, PACKET32H_TRANSPOSE_HELPER, Eigen::numext::q, and plotPSD::t.

◆ ptranspose() [31/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet32h, 4 > &  a)
inline
625  {
626  __m512i p0, p1, p2, p3, t0, t1, t2, t3, a0, a1, a2, a3;
627  t0 = _mm512_unpacklo_epi16(_mm512_castph_si512(a.packet[0]), _mm512_castph_si512(a.packet[1]));
628  t1 = _mm512_unpackhi_epi16(_mm512_castph_si512(a.packet[0]), _mm512_castph_si512(a.packet[1]));
629  t2 = _mm512_unpacklo_epi16(_mm512_castph_si512(a.packet[2]), _mm512_castph_si512(a.packet[3]));
630  t3 = _mm512_unpackhi_epi16(_mm512_castph_si512(a.packet[2]), _mm512_castph_si512(a.packet[3]));
631 
632  p0 = _mm512_unpacklo_epi32(t0, t2);
633  p1 = _mm512_unpackhi_epi32(t0, t2);
634  p2 = _mm512_unpacklo_epi32(t1, t3);
635  p3 = _mm512_unpackhi_epi32(t1, t3);
636 
637  a0 = p0;
638  a1 = p1;
639  a2 = p2;
640  a3 = p3;
641 
642  a0 = _mm512_inserti32x4(a0, _mm512_extracti32x4_epi32(p1, 0), 1);
643  a1 = _mm512_inserti32x4(a1, _mm512_extracti32x4_epi32(p0, 1), 0);
644 
645  a0 = _mm512_inserti32x4(a0, _mm512_extracti32x4_epi32(p2, 0), 2);
646  a2 = _mm512_inserti32x4(a2, _mm512_extracti32x4_epi32(p0, 2), 0);
647 
648  a0 = _mm512_inserti32x4(a0, _mm512_extracti32x4_epi32(p3, 0), 3);
649  a3 = _mm512_inserti32x4(a3, _mm512_extracti32x4_epi32(p0, 3), 0);
650 
651  a1 = _mm512_inserti32x4(a1, _mm512_extracti32x4_epi32(p2, 1), 2);
652  a2 = _mm512_inserti32x4(a2, _mm512_extracti32x4_epi32(p1, 2), 1);
653 
654  a2 = _mm512_inserti32x4(a2, _mm512_extracti32x4_epi32(p3, 2), 3);
655  a3 = _mm512_inserti32x4(a3, _mm512_extracti32x4_epi32(p2, 3), 2);
656 
657  a1 = _mm512_inserti32x4(a1, _mm512_extracti32x4_epi32(p3, 1), 3);
658  a3 = _mm512_inserti32x4(a3, _mm512_extracti32x4_epi32(p1, 3), 1);
659 
660  a.packet[0] = _mm512_castsi512_ph(a0);
661  a.packet[1] = _mm512_castsi512_ph(a1);
662  a.packet[2] = _mm512_castsi512_ph(a2);
663  a.packet[3] = _mm512_castsi512_ph(a3);
664 }

References a, p0, and p1.

◆ ptranspose() [32/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet4bf, 4 > &  kernel)
5007  {
5008  detail::ptranspose_impl(kernel);
5009 }

References Eigen::internal::detail::ptranspose_impl().

◆ ptranspose() [33/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet4c, 4 > &  kernel)
4265  {
4266  const int8x8_t a = vreinterpret_s8_s32(vset_lane_s32(kernel.packet[2], vdup_n_s32(kernel.packet[0]), 1));
4267  const int8x8_t b = vreinterpret_s8_s32(vset_lane_s32(kernel.packet[3], vdup_n_s32(kernel.packet[1]), 1));
4268 
4269  const int8x8x2_t zip8 = vzip_s8(a, b);
4270  const int16x4x2_t zip16 = vzip_s16(vreinterpret_s16_s8(zip8.val[0]), vreinterpret_s16_s8(zip8.val[1]));
4271 
4272  kernel.packet[0] = vget_lane_s32(vreinterpret_s32_s16(zip16.val[0]), 0);
4273  kernel.packet[1] = vget_lane_s32(vreinterpret_s32_s16(zip16.val[0]), 1);
4274  kernel.packet[2] = vget_lane_s32(vreinterpret_s32_s16(zip16.val[1]), 0);
4275  kernel.packet[3] = vget_lane_s32(vreinterpret_s32_s16(zip16.val[1]), 1);
4276 }

References a, b, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [34/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet4cd, 4 > &  kernel)
inline
428  {
429  __m512d T0 =
430  _mm512_shuffle_f64x2(kernel.packet[0].v, kernel.packet[1].v, (shuffle_mask<0, 1, 0, 1>::mask)); // [a0 a1 b0 b1]
431  __m512d T1 =
432  _mm512_shuffle_f64x2(kernel.packet[0].v, kernel.packet[1].v, (shuffle_mask<2, 3, 2, 3>::mask)); // [a2 a3 b2 b3]
433  __m512d T2 =
434  _mm512_shuffle_f64x2(kernel.packet[2].v, kernel.packet[3].v, (shuffle_mask<0, 1, 0, 1>::mask)); // [c0 c1 d0 d1]
435  __m512d T3 =
436  _mm512_shuffle_f64x2(kernel.packet[2].v, kernel.packet[3].v, (shuffle_mask<2, 3, 2, 3>::mask)); // [c2 c3 d2 d3]
437 
438  kernel.packet[3] = Packet4cd(_mm512_shuffle_f64x2(T1, T3, (shuffle_mask<1, 3, 1, 3>::mask))); // [a3 b3 c3 d3]
439  kernel.packet[2] = Packet4cd(_mm512_shuffle_f64x2(T1, T3, (shuffle_mask<0, 2, 0, 2>::mask))); // [a2 b2 c2 d2]
440  kernel.packet[1] = Packet4cd(_mm512_shuffle_f64x2(T0, T2, (shuffle_mask<1, 3, 1, 3>::mask))); // [a1 b1 c1 d1]
441  kernel.packet[0] = Packet4cd(_mm512_shuffle_f64x2(T0, T2, (shuffle_mask<0, 2, 0, 2>::mask))); // [a0 b0 c0 d0]
442 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [35/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet4cf, 4 > &  kernel)
inline
410  {
411  __m256d P0 = _mm256_castps_pd(kernel.packet[0].v);
412  __m256d P1 = _mm256_castps_pd(kernel.packet[1].v);
413  __m256d P2 = _mm256_castps_pd(kernel.packet[2].v);
414  __m256d P3 = _mm256_castps_pd(kernel.packet[3].v);
415 
416  __m256d T0 = _mm256_shuffle_pd(P0, P1, 15);
417  __m256d T1 = _mm256_shuffle_pd(P0, P1, 0);
418  __m256d T2 = _mm256_shuffle_pd(P2, P3, 15);
419  __m256d T3 = _mm256_shuffle_pd(P2, P3, 0);
420 
421  kernel.packet[1].v = _mm256_castpd_ps(_mm256_permute2f128_pd(T0, T2, 32));
422  kernel.packet[3].v = _mm256_castpd_ps(_mm256_permute2f128_pd(T0, T2, 49));
423  kernel.packet[0].v = _mm256_castpd_ps(_mm256_permute2f128_pd(T1, T3, 32));
424  kernel.packet[2].v = _mm256_castpd_ps(_mm256_permute2f128_pd(T1, T3, 49));
425 }
double P0
Definition: two_dim.cc:101

References Problem_Parameter::P0, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [36/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet4d, 4 > &  kernel)
inline
2163  {
2164  __m256d T0 = _mm256_shuffle_pd(kernel.packet[0], kernel.packet[1], 15);
2165  __m256d T1 = _mm256_shuffle_pd(kernel.packet[0], kernel.packet[1], 0);
2166  __m256d T2 = _mm256_shuffle_pd(kernel.packet[2], kernel.packet[3], 15);
2167  __m256d T3 = _mm256_shuffle_pd(kernel.packet[2], kernel.packet[3], 0);
2168 
2169  kernel.packet[1] = _mm256_permute2f128_pd(T0, T2, 32);
2170  kernel.packet[3] = _mm256_permute2f128_pd(T0, T2, 49);
2171  kernel.packet[0] = _mm256_permute2f128_pd(T1, T3, 32);
2172  kernel.packet[2] = _mm256_permute2f128_pd(T1, T3, 49);
2173 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [37/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet4f, 4 > &  kernel)
inline
2768 { ptranpose_common<Packet4f>(kernel); }

◆ ptranspose() [38/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet4i, 4 > &  kernel)
inline
2770 { ptranpose_common<Packet4i>(kernel); }

◆ ptranspose() [39/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet4s, 4 > &  kernel)
4321  {
4322  detail::ptranspose_impl(kernel);
4323 }

References Eigen::internal::detail::ptranspose_impl().

◆ ptranspose() [40/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet4uc, 4 > &  kernel)
4293  {
4294  const uint8x8_t a = vreinterpret_u8_u32(vset_lane_u32(kernel.packet[2], vdup_n_u32(kernel.packet[0]), 1));
4295  const uint8x8_t b = vreinterpret_u8_u32(vset_lane_u32(kernel.packet[3], vdup_n_u32(kernel.packet[1]), 1));
4296 
4297  const uint8x8x2_t zip8 = vzip_u8(a, b);
4298  const uint16x4x2_t zip16 = vzip_u16(vreinterpret_u16_u8(zip8.val[0]), vreinterpret_u16_u8(zip8.val[1]));
4299 
4300  kernel.packet[0] = vget_lane_u32(vreinterpret_u32_u16(zip16.val[0]), 0);
4301  kernel.packet[1] = vget_lane_u32(vreinterpret_u32_u16(zip16.val[0]), 1);
4302  kernel.packet[2] = vget_lane_u32(vreinterpret_u32_u16(zip16.val[1]), 0);
4303  kernel.packet[3] = vget_lane_u32(vreinterpret_u32_u16(zip16.val[1]), 1);
4304 }

References a, b, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [41/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet4ui, 4 > &  kernel)
2510  {
2511  __m128i T0 = __lsx_vilvl_w(kernel.packet[1], kernel.packet[0]);
2512  __m128i T1 = __lsx_vilvh_w(kernel.packet[1], kernel.packet[0]);
2513  __m128i T2 = __lsx_vilvl_w(kernel.packet[3], kernel.packet[2]);
2514  __m128i T3 = __lsx_vilvh_w(kernel.packet[3], kernel.packet[2]);
2515 
2516  kernel.packet[0] = __lsx_vilvl_d(T2, T0);
2517  kernel.packet[1] = __lsx_vilvh_d(T2, T0);
2518  kernel.packet[2] = __lsx_vilvl_d(T3, T1);
2519  kernel.packet[3] = __lsx_vilvh_d(T3, T1);
2520 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [42/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet4us, 4 > &  kernel)
4331  {
4332  detail::ptranspose_impl(kernel);
4333 }

References Eigen::internal::detail::ptranspose_impl().

◆ ptranspose() [43/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8bf, 4 > &  kernel)
inline
2796  {
2797  Packet8us t0, t1, t2, t3;
2798 
2799  t0 = vec_mergeh(kernel.packet[0].m_val, kernel.packet[2].m_val);
2800  t1 = vec_mergel(kernel.packet[0].m_val, kernel.packet[2].m_val);
2801  t2 = vec_mergeh(kernel.packet[1].m_val, kernel.packet[3].m_val);
2802  t3 = vec_mergel(kernel.packet[1].m_val, kernel.packet[3].m_val);
2803  kernel.packet[0] = vec_mergeh(t0, t2);
2804  kernel.packet[1] = vec_mergel(t0, t2);
2805  kernel.packet[2] = vec_mergeh(t1, t3);
2806  kernel.packet[3] = vec_mergel(t1, t3);
2807 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [44/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8bf, 8 > &  kernel)
inline
2893  {
2894  Packet8bf v[8], sum[8];
2895 
2896  v[0] = vec_mergeh(kernel.packet[0].m_val, kernel.packet[4].m_val);
2897  v[1] = vec_mergel(kernel.packet[0].m_val, kernel.packet[4].m_val);
2898  v[2] = vec_mergeh(kernel.packet[1].m_val, kernel.packet[5].m_val);
2899  v[3] = vec_mergel(kernel.packet[1].m_val, kernel.packet[5].m_val);
2900  v[4] = vec_mergeh(kernel.packet[2].m_val, kernel.packet[6].m_val);
2901  v[5] = vec_mergel(kernel.packet[2].m_val, kernel.packet[6].m_val);
2902  v[6] = vec_mergeh(kernel.packet[3].m_val, kernel.packet[7].m_val);
2903  v[7] = vec_mergel(kernel.packet[3].m_val, kernel.packet[7].m_val);
2904  sum[0] = vec_mergeh(v[0].m_val, v[4].m_val);
2905  sum[1] = vec_mergel(v[0].m_val, v[4].m_val);
2906  sum[2] = vec_mergeh(v[1].m_val, v[5].m_val);
2907  sum[3] = vec_mergel(v[1].m_val, v[5].m_val);
2908  sum[4] = vec_mergeh(v[2].m_val, v[6].m_val);
2909  sum[5] = vec_mergel(v[2].m_val, v[6].m_val);
2910  sum[6] = vec_mergeh(v[3].m_val, v[7].m_val);
2911  sum[7] = vec_mergel(v[3].m_val, v[7].m_val);
2912 
2913  kernel.packet[0] = vec_mergeh(sum[0].m_val, sum[4].m_val);
2914  kernel.packet[1] = vec_mergel(sum[0].m_val, sum[4].m_val);
2915  kernel.packet[2] = vec_mergeh(sum[1].m_val, sum[5].m_val);
2916  kernel.packet[3] = vec_mergel(sum[1].m_val, sum[5].m_val);
2917  kernel.packet[4] = vec_mergeh(sum[2].m_val, sum[6].m_val);
2918  kernel.packet[5] = vec_mergel(sum[2].m_val, sum[6].m_val);
2919  kernel.packet[6] = vec_mergeh(sum[3].m_val, sum[7].m_val);
2920  kernel.packet[7] = vec_mergel(sum[3].m_val, sum[7].m_val);
2921 }

References Eigen::internal::PacketBlock< Packet, N >::packet, and v.

◆ ptranspose() [45/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8c, 4 > &  kernel)
4280  {
4281  detail::ptranspose_impl(kernel);
4282 }

References Eigen::internal::detail::ptranspose_impl().

◆ ptranspose() [46/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8c, 8 > &  kernel)
4277  {
4278  detail::ptranspose_impl(kernel);
4279 }

References Eigen::internal::detail::ptranspose_impl().

◆ ptranspose() [47/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8cf, 4 > &  kernel)
inline
392  {
393  PacketBlock<Packet8d, 4> pb;
394 
395  pb.packet[0] = _mm512_castps_pd(kernel.packet[0].v);
396  pb.packet[1] = _mm512_castps_pd(kernel.packet[1].v);
397  pb.packet[2] = _mm512_castps_pd(kernel.packet[2].v);
398  pb.packet[3] = _mm512_castps_pd(kernel.packet[3].v);
399  ptranspose(pb);
400  kernel.packet[0].v = _mm512_castpd_ps(pb.packet[0]);
401  kernel.packet[1].v = _mm512_castpd_ps(pb.packet[1]);
402  kernel.packet[2].v = _mm512_castpd_ps(pb.packet[2]);
403  kernel.packet[3].v = _mm512_castpd_ps(pb.packet[3]);
404 }
const char const int const int const RealScalar const RealScalar const int const RealScalar * pb
Definition: level2_impl.h:28
EIGEN_DEVICE_FUNC void ptranspose(PacketBlock< Packet4cd, 4 > &kernel)
Definition: AVX512/Complex.h:428

References Eigen::internal::PacketBlock< Packet, N >::packet, pb, and ptranspose().

◆ ptranspose() [48/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8cf, 8 > &  kernel)
inline
406  {
407  PacketBlock<Packet8d, 8> pb;
408 
409  pb.packet[0] = _mm512_castps_pd(kernel.packet[0].v);
410  pb.packet[1] = _mm512_castps_pd(kernel.packet[1].v);
411  pb.packet[2] = _mm512_castps_pd(kernel.packet[2].v);
412  pb.packet[3] = _mm512_castps_pd(kernel.packet[3].v);
413  pb.packet[4] = _mm512_castps_pd(kernel.packet[4].v);
414  pb.packet[5] = _mm512_castps_pd(kernel.packet[5].v);
415  pb.packet[6] = _mm512_castps_pd(kernel.packet[6].v);
416  pb.packet[7] = _mm512_castps_pd(kernel.packet[7].v);
417  ptranspose(pb);
418  kernel.packet[0].v = _mm512_castpd_ps(pb.packet[0]);
419  kernel.packet[1].v = _mm512_castpd_ps(pb.packet[1]);
420  kernel.packet[2].v = _mm512_castpd_ps(pb.packet[2]);
421  kernel.packet[3].v = _mm512_castpd_ps(pb.packet[3]);
422  kernel.packet[4].v = _mm512_castpd_ps(pb.packet[4]);
423  kernel.packet[5].v = _mm512_castpd_ps(pb.packet[5]);
424  kernel.packet[6].v = _mm512_castpd_ps(pb.packet[6]);
425  kernel.packet[7].v = _mm512_castpd_ps(pb.packet[7]);
426 }

References Eigen::internal::PacketBlock< Packet, N >::packet, pb, and ptranspose().

◆ ptranspose() [49/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8d, 4 > &  kernel)
inline
1866  {
1867  __m512d T0 = _mm512_shuffle_pd(kernel.packet[0], kernel.packet[1], 0);
1868  __m512d T1 = _mm512_shuffle_pd(kernel.packet[0], kernel.packet[1], 0xff);
1869  __m512d T2 = _mm512_shuffle_pd(kernel.packet[2], kernel.packet[3], 0);
1870  __m512d T3 = _mm512_shuffle_pd(kernel.packet[2], kernel.packet[3], 0xff);
1871 
1872  PacketBlock<Packet4d, 8> tmp;
1873 
1874  tmp.packet[0] = _mm256_permute2f128_pd(_mm512_extractf64x4_pd(T0, 0), _mm512_extractf64x4_pd(T2, 0), 0x20);
1875  tmp.packet[1] = _mm256_permute2f128_pd(_mm512_extractf64x4_pd(T1, 0), _mm512_extractf64x4_pd(T3, 0), 0x20);
1876  tmp.packet[2] = _mm256_permute2f128_pd(_mm512_extractf64x4_pd(T0, 0), _mm512_extractf64x4_pd(T2, 0), 0x31);
1877  tmp.packet[3] = _mm256_permute2f128_pd(_mm512_extractf64x4_pd(T1, 0), _mm512_extractf64x4_pd(T3, 0), 0x31);
1878 
1879  tmp.packet[4] = _mm256_permute2f128_pd(_mm512_extractf64x4_pd(T0, 1), _mm512_extractf64x4_pd(T2, 1), 0x20);
1880  tmp.packet[5] = _mm256_permute2f128_pd(_mm512_extractf64x4_pd(T1, 1), _mm512_extractf64x4_pd(T3, 1), 0x20);
1881  tmp.packet[6] = _mm256_permute2f128_pd(_mm512_extractf64x4_pd(T0, 1), _mm512_extractf64x4_pd(T2, 1), 0x31);
1882  tmp.packet[7] = _mm256_permute2f128_pd(_mm512_extractf64x4_pd(T1, 1), _mm512_extractf64x4_pd(T3, 1), 0x31);
1883 
1884  PACK_OUTPUT_D(kernel.packet, tmp.packet, 0, 1);
1885  PACK_OUTPUT_D(kernel.packet, tmp.packet, 1, 1);
1886  PACK_OUTPUT_D(kernel.packet, tmp.packet, 2, 1);
1887  PACK_OUTPUT_D(kernel.packet, tmp.packet, 3, 1);
1888 }
#define PACK_OUTPUT_D(OUTPUT, INPUT, INDEX, STRIDE)
Definition: AVX512/PacketMath.h:1858

References PACK_OUTPUT_D, Eigen::PlainObjectBase< Derived >::packet(), Eigen::internal::PacketBlock< Packet, N >::packet, and tmp.

◆ ptranspose() [50/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8d, 8 > &  kernel)
inline
1890  {
1891  __m512d T0 = _mm512_unpacklo_pd(kernel.packet[0], kernel.packet[1]);
1892  __m512d T1 = _mm512_unpackhi_pd(kernel.packet[0], kernel.packet[1]);
1893  __m512d T2 = _mm512_unpacklo_pd(kernel.packet[2], kernel.packet[3]);
1894  __m512d T3 = _mm512_unpackhi_pd(kernel.packet[2], kernel.packet[3]);
1895  __m512d T4 = _mm512_unpacklo_pd(kernel.packet[4], kernel.packet[5]);
1896  __m512d T5 = _mm512_unpackhi_pd(kernel.packet[4], kernel.packet[5]);
1897  __m512d T6 = _mm512_unpacklo_pd(kernel.packet[6], kernel.packet[7]);
1898  __m512d T7 = _mm512_unpackhi_pd(kernel.packet[6], kernel.packet[7]);
1899 
1900  kernel.packet[0] = _mm512_permutex_pd(T2, 0x4E);
1901  kernel.packet[0] = _mm512_mask_blend_pd(0xCC, T0, kernel.packet[0]);
1902  kernel.packet[2] = _mm512_permutex_pd(T0, 0x4E);
1903  kernel.packet[2] = _mm512_mask_blend_pd(0xCC, kernel.packet[2], T2);
1904  kernel.packet[1] = _mm512_permutex_pd(T3, 0x4E);
1905  kernel.packet[1] = _mm512_mask_blend_pd(0xCC, T1, kernel.packet[1]);
1906  kernel.packet[3] = _mm512_permutex_pd(T1, 0x4E);
1907  kernel.packet[3] = _mm512_mask_blend_pd(0xCC, kernel.packet[3], T3);
1908  kernel.packet[4] = _mm512_permutex_pd(T6, 0x4E);
1909  kernel.packet[4] = _mm512_mask_blend_pd(0xCC, T4, kernel.packet[4]);
1910  kernel.packet[6] = _mm512_permutex_pd(T4, 0x4E);
1911  kernel.packet[6] = _mm512_mask_blend_pd(0xCC, kernel.packet[6], T6);
1912  kernel.packet[5] = _mm512_permutex_pd(T7, 0x4E);
1913  kernel.packet[5] = _mm512_mask_blend_pd(0xCC, T5, kernel.packet[5]);
1914  kernel.packet[7] = _mm512_permutex_pd(T5, 0x4E);
1915  kernel.packet[7] = _mm512_mask_blend_pd(0xCC, kernel.packet[7], T7);
1916 
1917  T0 = _mm512_shuffle_f64x2(kernel.packet[4], kernel.packet[4], 0x4E);
1918  T0 = _mm512_mask_blend_pd(0xF0, kernel.packet[0], T0);
1919  T4 = _mm512_shuffle_f64x2(kernel.packet[0], kernel.packet[0], 0x4E);
1920  T4 = _mm512_mask_blend_pd(0xF0, T4, kernel.packet[4]);
1921  T1 = _mm512_shuffle_f64x2(kernel.packet[5], kernel.packet[5], 0x4E);
1922  T1 = _mm512_mask_blend_pd(0xF0, kernel.packet[1], T1);
1923  T5 = _mm512_shuffle_f64x2(kernel.packet[1], kernel.packet[1], 0x4E);
1924  T5 = _mm512_mask_blend_pd(0xF0, T5, kernel.packet[5]);
1925  T2 = _mm512_shuffle_f64x2(kernel.packet[6], kernel.packet[6], 0x4E);
1926  T2 = _mm512_mask_blend_pd(0xF0, kernel.packet[2], T2);
1927  T6 = _mm512_shuffle_f64x2(kernel.packet[2], kernel.packet[2], 0x4E);
1928  T6 = _mm512_mask_blend_pd(0xF0, T6, kernel.packet[6]);
1929  T3 = _mm512_shuffle_f64x2(kernel.packet[7], kernel.packet[7], 0x4E);
1930  T3 = _mm512_mask_blend_pd(0xF0, kernel.packet[3], T3);
1931  T7 = _mm512_shuffle_f64x2(kernel.packet[3], kernel.packet[3], 0x4E);
1932  T7 = _mm512_mask_blend_pd(0xF0, T7, kernel.packet[7]);
1933 
1934  kernel.packet[0] = T0;
1935  kernel.packet[1] = T1;
1936  kernel.packet[2] = T2;
1937  kernel.packet[3] = T3;
1938  kernel.packet[4] = T4;
1939  kernel.packet[5] = T5;
1940  kernel.packet[6] = T6;
1941  kernel.packet[7] = T7;
1942 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [51/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8f, 4 > &  kernel)
inline
2083  {
2084  __m256 T0 = _mm256_unpacklo_ps(kernel.packet[0], kernel.packet[1]);
2085  __m256 T1 = _mm256_unpackhi_ps(kernel.packet[0], kernel.packet[1]);
2086  __m256 T2 = _mm256_unpacklo_ps(kernel.packet[2], kernel.packet[3]);
2087  __m256 T3 = _mm256_unpackhi_ps(kernel.packet[2], kernel.packet[3]);
2088 
2089  __m256 S0 = _mm256_shuffle_ps(T0, T2, _MM_SHUFFLE(1, 0, 1, 0));
2090  __m256 S1 = _mm256_shuffle_ps(T0, T2, _MM_SHUFFLE(3, 2, 3, 2));
2091  __m256 S2 = _mm256_shuffle_ps(T1, T3, _MM_SHUFFLE(1, 0, 1, 0));
2092  __m256 S3 = _mm256_shuffle_ps(T1, T3, _MM_SHUFFLE(3, 2, 3, 2));
2093 
2094  kernel.packet[0] = _mm256_permute2f128_ps(S0, S1, 0x20);
2095  kernel.packet[1] = _mm256_permute2f128_ps(S2, S3, 0x20);
2096  kernel.packet[2] = _mm256_permute2f128_ps(S0, S1, 0x31);
2097  kernel.packet[3] = _mm256_permute2f128_ps(S2, S3, 0x31);
2098 }

References Eigen::internal::PacketBlock< Packet, N >::packet, GlobalParameters::S0, and GlobalParameters::S1.

◆ ptranspose() [52/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8f, 8 > &  kernel)
inline
2056  {
2057  __m256 T0 = _mm256_unpacklo_ps(kernel.packet[0], kernel.packet[1]);
2058  __m256 T1 = _mm256_unpackhi_ps(kernel.packet[0], kernel.packet[1]);
2059  __m256 T2 = _mm256_unpacklo_ps(kernel.packet[2], kernel.packet[3]);
2060  __m256 T3 = _mm256_unpackhi_ps(kernel.packet[2], kernel.packet[3]);
2061  __m256 T4 = _mm256_unpacklo_ps(kernel.packet[4], kernel.packet[5]);
2062  __m256 T5 = _mm256_unpackhi_ps(kernel.packet[4], kernel.packet[5]);
2063  __m256 T6 = _mm256_unpacklo_ps(kernel.packet[6], kernel.packet[7]);
2064  __m256 T7 = _mm256_unpackhi_ps(kernel.packet[6], kernel.packet[7]);
2065  __m256 S0 = _mm256_shuffle_ps(T0, T2, _MM_SHUFFLE(1, 0, 1, 0));
2066  __m256 S1 = _mm256_shuffle_ps(T0, T2, _MM_SHUFFLE(3, 2, 3, 2));
2067  __m256 S2 = _mm256_shuffle_ps(T1, T3, _MM_SHUFFLE(1, 0, 1, 0));
2068  __m256 S3 = _mm256_shuffle_ps(T1, T3, _MM_SHUFFLE(3, 2, 3, 2));
2069  __m256 S4 = _mm256_shuffle_ps(T4, T6, _MM_SHUFFLE(1, 0, 1, 0));
2070  __m256 S5 = _mm256_shuffle_ps(T4, T6, _MM_SHUFFLE(3, 2, 3, 2));
2071  __m256 S6 = _mm256_shuffle_ps(T5, T7, _MM_SHUFFLE(1, 0, 1, 0));
2072  __m256 S7 = _mm256_shuffle_ps(T5, T7, _MM_SHUFFLE(3, 2, 3, 2));
2073  kernel.packet[0] = _mm256_permute2f128_ps(S0, S4, 0x20);
2074  kernel.packet[1] = _mm256_permute2f128_ps(S1, S5, 0x20);
2075  kernel.packet[2] = _mm256_permute2f128_ps(S2, S6, 0x20);
2076  kernel.packet[3] = _mm256_permute2f128_ps(S3, S7, 0x20);
2077  kernel.packet[4] = _mm256_permute2f128_ps(S0, S4, 0x31);
2078  kernel.packet[5] = _mm256_permute2f128_ps(S1, S5, 0x31);
2079  kernel.packet[6] = _mm256_permute2f128_ps(S2, S6, 0x31);
2080  kernel.packet[7] = _mm256_permute2f128_ps(S3, S7, 0x31);
2081 }

References Eigen::internal::PacketBlock< Packet, N >::packet, GlobalParameters::S0, and GlobalParameters::S1.

◆ ptranspose() [53/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8h, 4 > &  kernel)
2532  {
2533  EIGEN_ALIGN32 Eigen::half in[4][8];
2534  pstore<Eigen::half>(in[0], kernel.packet[0]);
2535  pstore<Eigen::half>(in[1], kernel.packet[1]);
2536  pstore<Eigen::half>(in[2], kernel.packet[2]);
2537  pstore<Eigen::half>(in[3], kernel.packet[3]);
2538 
2540 
2541  for (int i = 0; i < 4; ++i) {
2542  for (int j = 0; j < 4; ++j) {
2543  out[i][j] = in[j][2 * i];
2544  }
2545  for (int j = 0; j < 4; ++j) {
2546  out[i][j + 4] = in[j][2 * i + 1];
2547  }
2548  }
2549 
2550  kernel.packet[0] = pload<Packet8h>(out[0]);
2551  kernel.packet[1] = pload<Packet8h>(out[1]);
2552  kernel.packet[2] = pload<Packet8h>(out[2]);
2553  kernel.packet[3] = pload<Packet8h>(out[3]);
2554 }
EIGEN_STRONG_INLINE Packet8h pload< Packet8h >(const Eigen::half *from)
Definition: AVX/PacketMath.h:2227

References EIGEN_ALIGN32, i, j, out(), Eigen::internal::PacketBlock< Packet, N >::packet, and pload< Packet8h >().

◆ ptranspose() [54/68]

EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8h, 8 > &  kernel)
2485  {
2486  __m128i a = kernel.packet[0];
2487  __m128i b = kernel.packet[1];
2488  __m128i c = kernel.packet[2];
2489  __m128i d = kernel.packet[3];
2490  __m128i e = kernel.packet[4];
2491  __m128i f = kernel.packet[5];
2492  __m128i g = kernel.packet[6];
2493  __m128i h = kernel.packet[7];
2494 
2495  __m128i a03b03 = _mm_unpacklo_epi16(a, b);
2496  __m128i c03d03 = _mm_unpacklo_epi16(c, d);
2497  __m128i e03f03 = _mm_unpacklo_epi16(e, f);
2498  __m128i g03h03 = _mm_unpacklo_epi16(g, h);
2499  __m128i a47b47 = _mm_unpackhi_epi16(a, b);
2500  __m128i c47d47 = _mm_unpackhi_epi16(c, d);
2501  __m128i e47f47 = _mm_unpackhi_epi16(e, f);
2502  __m128i g47h47 = _mm_unpackhi_epi16(g, h);
2503 
2504  __m128i a01b01c01d01 = _mm_unpacklo_epi32(a03b03, c03d03);
2505  __m128i a23b23c23d23 = _mm_unpackhi_epi32(a03b03, c03d03);
2506  __m128i e01f01g01h01 = _mm_unpacklo_epi32(e03f03, g03h03);
2507  __m128i e23f23g23h23 = _mm_unpackhi_epi32(e03f03, g03h03);
2508  __m128i a45b45c45d45 = _mm_unpacklo_epi32(a47b47, c47d47);
2509  __m128i a67b67c67d67 = _mm_unpackhi_epi32(a47b47, c47d47);
2510  __m128i e45f45g45h45 = _mm_unpacklo_epi32(e47f47, g47h47);
2511  __m128i e67f67g67h67 = _mm_unpackhi_epi32(e47f47, g47h47);
2512 
2513  __m128i a0b0c0d0e0f0g0h0 = _mm_unpacklo_epi64(a01b01c01d01, e01f01g01h01);
2514  __m128i a1b1c1d1e1f1g1h1 = _mm_unpackhi_epi64(a01b01c01d01, e01f01g01h01);
2515  __m128i a2b2c2d2e2f2g2h2 = _mm_unpacklo_epi64(a23b23c23d23, e23f23g23h23);
2516  __m128i a3b3c3d3e3f3g3h3 = _mm_unpackhi_epi64(a23b23c23d23, e23f23g23h23);
2517  __m128i a4b4c4d4e4f4g4h4 = _mm_unpacklo_epi64(a45b45c45d45, e45f45g45h45);
2518  __m128i a5b5c5d5e5f5g5h5 = _mm_unpackhi_epi64(a45b45c45d45, e45f45g45h45);
2519  __m128i a6b6c6d6e6f6g6h6 = _mm_unpacklo_epi64(a67b67c67d67, e67f67g67h67);
2520  __m128i a7b7c7d7e7f7g7h7 = _mm_unpackhi_epi64(a67b67c67d67, e67f67g67h67);
2521 
2522  kernel.packet[0] = a0b0c0d0e0f0g0h0;
2523  kernel.packet[1] = a1b1c1d1e1f1g1h1;
2524  kernel.packet[2] = a2b2c2d2e2f2g2h2;
2525  kernel.packet[3] = a3b3c3d3e3f3g3h3;
2526  kernel.packet[4] = a4b4c4d4e4f4g4h4;
2527  kernel.packet[5] = a5b5c5d5e5f5g5h5;
2528  kernel.packet[6] = a6b6c6d6e6f6g6h6;
2529  kernel.packet[7] = a7b7c7d7e7f7g7h7;
2530 }

References a, b, calibrate::c, e(), f(), and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [55/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8i, 4 > &  kernel)
inline
2143  {
2144  __m256i T0 = MM256_UNPACKLO_EPI32(kernel.packet[0], kernel.packet[1]);
2145  __m256i T1 = MM256_UNPACKHI_EPI32(kernel.packet[0], kernel.packet[1]);
2146  __m256i T2 = MM256_UNPACKLO_EPI32(kernel.packet[2], kernel.packet[3]);
2147  __m256i T3 = MM256_UNPACKHI_EPI32(kernel.packet[2], kernel.packet[3]);
2148 
2149  __m256i S0 = MM256_SHUFFLE_EPI32(T0, T2, _MM_SHUFFLE(1, 0, 1, 0));
2150  __m256i S1 = MM256_SHUFFLE_EPI32(T0, T2, _MM_SHUFFLE(3, 2, 3, 2));
2151  __m256i S2 = MM256_SHUFFLE_EPI32(T1, T3, _MM_SHUFFLE(1, 0, 1, 0));
2152  __m256i S3 = MM256_SHUFFLE_EPI32(T1, T3, _MM_SHUFFLE(3, 2, 3, 2));
2153 
2154  kernel.packet[0] = _mm256_permute2f128_si256(S0, S1, 0x20);
2155  kernel.packet[1] = _mm256_permute2f128_si256(S2, S3, 0x20);
2156  kernel.packet[2] = _mm256_permute2f128_si256(S0, S1, 0x31);
2157  kernel.packet[3] = _mm256_permute2f128_si256(S2, S3, 0x31);
2158 }
#define MM256_UNPACKLO_EPI32(A, B)
Definition: AVX/PacketMath.h:2104
#define MM256_SHUFFLE_EPI32(A, B, M)
Definition: AVX/PacketMath.h:2100
#define MM256_UNPACKHI_EPI32(A, B)
Definition: AVX/PacketMath.h:2106

References MM256_SHUFFLE_EPI32, MM256_UNPACKHI_EPI32, MM256_UNPACKLO_EPI32, Eigen::internal::PacketBlock< Packet, N >::packet, GlobalParameters::S0, and GlobalParameters::S1.

◆ ptranspose() [56/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8i, 8 > &  kernel)
inline
2113  {
2114  __m256i T0 = MM256_UNPACKLO_EPI32(kernel.packet[0], kernel.packet[1]);
2115  __m256i T1 = MM256_UNPACKHI_EPI32(kernel.packet[0], kernel.packet[1]);
2116  __m256i T2 = MM256_UNPACKLO_EPI32(kernel.packet[2], kernel.packet[3]);
2117  __m256i T3 = MM256_UNPACKHI_EPI32(kernel.packet[2], kernel.packet[3]);
2118  __m256i T4 = MM256_UNPACKLO_EPI32(kernel.packet[4], kernel.packet[5]);
2119  __m256i T5 = MM256_UNPACKHI_EPI32(kernel.packet[4], kernel.packet[5]);
2120  __m256i T6 = MM256_UNPACKLO_EPI32(kernel.packet[6], kernel.packet[7]);
2121  __m256i T7 = MM256_UNPACKHI_EPI32(kernel.packet[6], kernel.packet[7]);
2122  __m256i S0 = MM256_SHUFFLE_EPI32(T0, T2, _MM_SHUFFLE(1, 0, 1, 0));
2123  __m256i S1 = MM256_SHUFFLE_EPI32(T0, T2, _MM_SHUFFLE(3, 2, 3, 2));
2124  __m256i S2 = MM256_SHUFFLE_EPI32(T1, T3, _MM_SHUFFLE(1, 0, 1, 0));
2125  __m256i S3 = MM256_SHUFFLE_EPI32(T1, T3, _MM_SHUFFLE(3, 2, 3, 2));
2126  __m256i S4 = MM256_SHUFFLE_EPI32(T4, T6, _MM_SHUFFLE(1, 0, 1, 0));
2127  __m256i S5 = MM256_SHUFFLE_EPI32(T4, T6, _MM_SHUFFLE(3, 2, 3, 2));
2128  __m256i S6 = MM256_SHUFFLE_EPI32(T5, T7, _MM_SHUFFLE(1, 0, 1, 0));
2129  __m256i S7 = MM256_SHUFFLE_EPI32(T5, T7, _MM_SHUFFLE(3, 2, 3, 2));
2130  kernel.packet[0] = _mm256_permute2f128_si256(S0, S4, 0x20);
2131  kernel.packet[1] = _mm256_permute2f128_si256(S1, S5, 0x20);
2132  kernel.packet[2] = _mm256_permute2f128_si256(S2, S6, 0x20);
2133  kernel.packet[3] = _mm256_permute2f128_si256(S3, S7, 0x20);
2134  kernel.packet[4] = _mm256_permute2f128_si256(S0, S4, 0x31);
2135  kernel.packet[5] = _mm256_permute2f128_si256(S1, S5, 0x31);
2136  kernel.packet[6] = _mm256_permute2f128_si256(S2, S6, 0x31);
2137  kernel.packet[7] = _mm256_permute2f128_si256(S3, S7, 0x31);
2138 }

References MM256_SHUFFLE_EPI32, MM256_UNPACKHI_EPI32, MM256_UNPACKLO_EPI32, Eigen::internal::PacketBlock< Packet, N >::packet, GlobalParameters::S0, and GlobalParameters::S1.

◆ ptranspose() [57/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8l, 4 > &  kernel)
inline
1944  {
1945  __m512i T0 = _mm512_castpd_si512(
1946  _mm512_shuffle_pd(_mm512_castsi512_pd(kernel.packet[0]), _mm512_castsi512_pd(kernel.packet[1]), 0));
1947  __m512i T1 = _mm512_castpd_si512(
1948  _mm512_shuffle_pd(_mm512_castsi512_pd(kernel.packet[0]), _mm512_castsi512_pd(kernel.packet[1]), 0xff));
1949  __m512i T2 = _mm512_castpd_si512(
1950  _mm512_shuffle_pd(_mm512_castsi512_pd(kernel.packet[2]), _mm512_castsi512_pd(kernel.packet[3]), 0));
1951  __m512i T3 = _mm512_castpd_si512(
1952  _mm512_shuffle_pd(_mm512_castsi512_pd(kernel.packet[2]), _mm512_castsi512_pd(kernel.packet[3]), 0xff));
1953 
1954  PacketBlock<Packet4l, 8> tmp;
1955 
1956  tmp.packet[0] = _mm256_permute2x128_si256(_mm512_extracti64x4_epi64(T0, 0), _mm512_extracti64x4_epi64(T2, 0), 0x20);
1957  tmp.packet[1] = _mm256_permute2x128_si256(_mm512_extracti64x4_epi64(T1, 0), _mm512_extracti64x4_epi64(T3, 0), 0x20);
1958  tmp.packet[2] = _mm256_permute2x128_si256(_mm512_extracti64x4_epi64(T0, 0), _mm512_extracti64x4_epi64(T2, 0), 0x31);
1959  tmp.packet[3] = _mm256_permute2x128_si256(_mm512_extracti64x4_epi64(T1, 0), _mm512_extracti64x4_epi64(T3, 0), 0x31);
1960 
1961  tmp.packet[4] = _mm256_permute2x128_si256(_mm512_extracti64x4_epi64(T0, 1), _mm512_extracti64x4_epi64(T2, 1), 0x20);
1962  tmp.packet[5] = _mm256_permute2x128_si256(_mm512_extracti64x4_epi64(T1, 1), _mm512_extracti64x4_epi64(T3, 1), 0x20);
1963  tmp.packet[6] = _mm256_permute2x128_si256(_mm512_extracti64x4_epi64(T0, 1), _mm512_extracti64x4_epi64(T2, 1), 0x31);
1964  tmp.packet[7] = _mm256_permute2x128_si256(_mm512_extracti64x4_epi64(T1, 1), _mm512_extracti64x4_epi64(T3, 1), 0x31);
1965 
1966  PACK_OUTPUT_L(kernel.packet, tmp.packet, 0, 1);
1967  PACK_OUTPUT_L(kernel.packet, tmp.packet, 1, 1);
1968  PACK_OUTPUT_L(kernel.packet, tmp.packet, 2, 1);
1969  PACK_OUTPUT_L(kernel.packet, tmp.packet, 3, 1);
1970 }
#define PACK_OUTPUT_L(OUTPUT, INPUT, INDEX, STRIDE)
Definition: AVX512/PacketMath.h:1862

References PACK_OUTPUT_L, Eigen::PlainObjectBase< Derived >::packet(), Eigen::internal::PacketBlock< Packet, N >::packet, and tmp.

◆ ptranspose() [58/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8l, 8 > &  kernel)
inline
1972  {
1973  __m512i T0 = _mm512_unpacklo_epi64(kernel.packet[0], kernel.packet[1]);
1974  __m512i T1 = _mm512_unpackhi_epi64(kernel.packet[0], kernel.packet[1]);
1975  __m512i T2 = _mm512_unpacklo_epi64(kernel.packet[2], kernel.packet[3]);
1976  __m512i T3 = _mm512_unpackhi_epi64(kernel.packet[2], kernel.packet[3]);
1977  __m512i T4 = _mm512_unpacklo_epi64(kernel.packet[4], kernel.packet[5]);
1978  __m512i T5 = _mm512_unpackhi_epi64(kernel.packet[4], kernel.packet[5]);
1979  __m512i T6 = _mm512_unpacklo_epi64(kernel.packet[6], kernel.packet[7]);
1980  __m512i T7 = _mm512_unpackhi_epi64(kernel.packet[6], kernel.packet[7]);
1981 
1982  kernel.packet[0] = _mm512_permutex_epi64(T2, 0x4E);
1983  kernel.packet[0] = _mm512_mask_blend_epi64(0xCC, T0, kernel.packet[0]);
1984  kernel.packet[2] = _mm512_permutex_epi64(T0, 0x4E);
1985  kernel.packet[2] = _mm512_mask_blend_epi64(0xCC, kernel.packet[2], T2);
1986  kernel.packet[1] = _mm512_permutex_epi64(T3, 0x4E);
1987  kernel.packet[1] = _mm512_mask_blend_epi64(0xCC, T1, kernel.packet[1]);
1988  kernel.packet[3] = _mm512_permutex_epi64(T1, 0x4E);
1989  kernel.packet[3] = _mm512_mask_blend_epi64(0xCC, kernel.packet[3], T3);
1990  kernel.packet[4] = _mm512_permutex_epi64(T6, 0x4E);
1991  kernel.packet[4] = _mm512_mask_blend_epi64(0xCC, T4, kernel.packet[4]);
1992  kernel.packet[6] = _mm512_permutex_epi64(T4, 0x4E);
1993  kernel.packet[6] = _mm512_mask_blend_epi64(0xCC, kernel.packet[6], T6);
1994  kernel.packet[5] = _mm512_permutex_epi64(T7, 0x4E);
1995  kernel.packet[5] = _mm512_mask_blend_epi64(0xCC, T5, kernel.packet[5]);
1996  kernel.packet[7] = _mm512_permutex_epi64(T5, 0x4E);
1997  kernel.packet[7] = _mm512_mask_blend_epi64(0xCC, kernel.packet[7], T7);
1998 
1999  T0 = _mm512_shuffle_i64x2(kernel.packet[4], kernel.packet[4], 0x4E);
2000  T0 = _mm512_mask_blend_epi64(0xF0, kernel.packet[0], T0);
2001  T4 = _mm512_shuffle_i64x2(kernel.packet[0], kernel.packet[0], 0x4E);
2002  T4 = _mm512_mask_blend_epi64(0xF0, T4, kernel.packet[4]);
2003  T1 = _mm512_shuffle_i64x2(kernel.packet[5], kernel.packet[5], 0x4E);
2004  T1 = _mm512_mask_blend_epi64(0xF0, kernel.packet[1], T1);
2005  T5 = _mm512_shuffle_i64x2(kernel.packet[1], kernel.packet[1], 0x4E);
2006  T5 = _mm512_mask_blend_epi64(0xF0, T5, kernel.packet[5]);
2007  T2 = _mm512_shuffle_i64x2(kernel.packet[6], kernel.packet[6], 0x4E);
2008  T2 = _mm512_mask_blend_epi64(0xF0, kernel.packet[2], T2);
2009  T6 = _mm512_shuffle_i64x2(kernel.packet[2], kernel.packet[2], 0x4E);
2010  T6 = _mm512_mask_blend_epi64(0xF0, T6, kernel.packet[6]);
2011  T3 = _mm512_shuffle_i64x2(kernel.packet[7], kernel.packet[7], 0x4E);
2012  T3 = _mm512_mask_blend_epi64(0xF0, kernel.packet[3], T3);
2013  T7 = _mm512_shuffle_i64x2(kernel.packet[3], kernel.packet[3], 0x4E);
2014  T7 = _mm512_mask_blend_epi64(0xF0, T7, kernel.packet[7]);
2015 
2016  kernel.packet[0] = T0;
2017  kernel.packet[1] = T1;
2018  kernel.packet[2] = T2;
2019  kernel.packet[3] = T3;
2020  kernel.packet[4] = T4;
2021  kernel.packet[5] = T5;
2022  kernel.packet[6] = T6;
2023  kernel.packet[7] = T7;
2024 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [59/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8s, 4 > &  kernel)
inline
2772  {
2773  Packet8s t0, t1, t2, t3;
2774  t0 = vec_mergeh(kernel.packet[0], kernel.packet[2]);
2775  t1 = vec_mergel(kernel.packet[0], kernel.packet[2]);
2776  t2 = vec_mergeh(kernel.packet[1], kernel.packet[3]);
2777  t3 = vec_mergel(kernel.packet[1], kernel.packet[3]);
2778  kernel.packet[0] = vec_mergeh(t0, t2);
2779  kernel.packet[1] = vec_mergel(t0, t2);
2780  kernel.packet[2] = vec_mergeh(t1, t3);
2781  kernel.packet[3] = vec_mergel(t1, t3);
2782 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [60/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8s, 8 > &  kernel)
inline
2833  {
2834  Packet8s v[8], sum[8];
2835 
2836  v[0] = vec_mergeh(kernel.packet[0], kernel.packet[4]);
2837  v[1] = vec_mergel(kernel.packet[0], kernel.packet[4]);
2838  v[2] = vec_mergeh(kernel.packet[1], kernel.packet[5]);
2839  v[3] = vec_mergel(kernel.packet[1], kernel.packet[5]);
2840  v[4] = vec_mergeh(kernel.packet[2], kernel.packet[6]);
2841  v[5] = vec_mergel(kernel.packet[2], kernel.packet[6]);
2842  v[6] = vec_mergeh(kernel.packet[3], kernel.packet[7]);
2843  v[7] = vec_mergel(kernel.packet[3], kernel.packet[7]);
2844  sum[0] = vec_mergeh(v[0], v[4]);
2845  sum[1] = vec_mergel(v[0], v[4]);
2846  sum[2] = vec_mergeh(v[1], v[5]);
2847  sum[3] = vec_mergel(v[1], v[5]);
2848  sum[4] = vec_mergeh(v[2], v[6]);
2849  sum[5] = vec_mergel(v[2], v[6]);
2850  sum[6] = vec_mergeh(v[3], v[7]);
2851  sum[7] = vec_mergel(v[3], v[7]);
2852 
2853  kernel.packet[0] = vec_mergeh(sum[0], sum[4]);
2854  kernel.packet[1] = vec_mergel(sum[0], sum[4]);
2855  kernel.packet[2] = vec_mergeh(sum[1], sum[5]);
2856  kernel.packet[3] = vec_mergel(sum[1], sum[5]);
2857  kernel.packet[4] = vec_mergeh(sum[2], sum[6]);
2858  kernel.packet[5] = vec_mergel(sum[2], sum[6]);
2859  kernel.packet[6] = vec_mergeh(sum[3], sum[7]);
2860  kernel.packet[7] = vec_mergel(sum[3], sum[7]);
2861 }

References Eigen::internal::PacketBlock< Packet, N >::packet, and v.

◆ ptranspose() [61/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8uc, 4 > &  kernel)
4308  {
4309  detail::ptranspose_impl(kernel);
4310 }

References Eigen::internal::detail::ptranspose_impl().

◆ ptranspose() [62/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8uc, 8 > &  kernel)
4305  {
4306  detail::ptranspose_impl(kernel);
4307 }

References Eigen::internal::detail::ptranspose_impl().

◆ ptranspose() [63/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8ui, 4 > &  kernel)
inline
2159  {
2160  ptranspose((PacketBlock<Packet8i, 4>&)kernel);
2161 }
EIGEN_STRONG_INLINE void ptranspose(PacketBlock< Packet8h, 4 > &kernel)
Definition: AVX/PacketMath.h:2532

References ptranspose().

◆ ptranspose() [64/68]

EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< Packet8ui, 8 > &  kernel)
inline
2139  {
2140  ptranspose((PacketBlock<Packet8i, 8>&)kernel);
2141 }

References ptranspose().

◆ ptranspose() [65/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8us, 4 > &  kernel)
inline
2784  {
2785  Packet8us t0, t1, t2, t3;
2786  t0 = vec_mergeh(kernel.packet[0], kernel.packet[2]);
2787  t1 = vec_mergel(kernel.packet[0], kernel.packet[2]);
2788  t2 = vec_mergeh(kernel.packet[1], kernel.packet[3]);
2789  t3 = vec_mergel(kernel.packet[1], kernel.packet[3]);
2790  kernel.packet[0] = vec_mergeh(t0, t2);
2791  kernel.packet[1] = vec_mergel(t0, t2);
2792  kernel.packet[2] = vec_mergeh(t1, t3);
2793  kernel.packet[3] = vec_mergel(t1, t3);
2794 }

References Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [66/68]

EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::ptranspose ( PacketBlock< Packet8us, 8 > &  kernel)
inline
2863  {
2864  Packet8us v[8], sum[8];
2865 
2866  v[0] = vec_mergeh(kernel.packet[0], kernel.packet[4]);
2867  v[1] = vec_mergel(kernel.packet[0], kernel.packet[4]);
2868  v[2] = vec_mergeh(kernel.packet[1], kernel.packet[5]);
2869  v[3] = vec_mergel(kernel.packet[1], kernel.packet[5]);
2870  v[4] = vec_mergeh(kernel.packet[2], kernel.packet[6]);
2871  v[5] = vec_mergel(kernel.packet[2], kernel.packet[6]);
2872  v[6] = vec_mergeh(kernel.packet[3], kernel.packet[7]);
2873  v[7] = vec_mergel(kernel.packet[3], kernel.packet[7]);
2874  sum[0] = vec_mergeh(v[0], v[4]);
2875  sum[1] = vec_mergel(v[0], v[4]);
2876  sum[2] = vec_mergeh(v[1], v[5]);
2877  sum[3] = vec_mergel(v[1], v[5]);
2878  sum[4] = vec_mergeh(v[2], v[6]);
2879  sum[5] = vec_mergel(v[2], v[6]);
2880  sum[6] = vec_mergeh(v[3], v[7]);
2881  sum[7] = vec_mergel(v[3], v[7]);
2882 
2883  kernel.packet[0] = vec_mergeh(sum[0], sum[4]);
2884  kernel.packet[1] = vec_mergel(sum[0], sum[4]);
2885  kernel.packet[2] = vec_mergeh(sum[1], sum[5]);
2886  kernel.packet[3] = vec_mergel(sum[1], sum[5]);
2887  kernel.packet[4] = vec_mergeh(sum[2], sum[6]);
2888  kernel.packet[5] = vec_mergel(sum[2], sum[6]);
2889  kernel.packet[6] = vec_mergeh(sum[3], sum[7]);
2890  kernel.packet[7] = vec_mergel(sum[3], sum[7]);
2891 }

References Eigen::internal::PacketBlock< Packet, N >::packet, and v.

◆ ptranspose() [67/68]

template<int N>
EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< PacketXf, N > &  kernel)
inline
644  {
645  float buffer[packet_traits<float>::size * N] = {0};
646  int i = 0;
647 
648  PacketXi stride_index = svindex_s32(0, N);
649 
650  for (i = 0; i < N; i++) {
651  svst1_scatter_s32index_f32(svptrue_b32(), buffer + i, stride_index, kernel.packet[i]);
652  }
653 
654  for (i = 0; i < N; i++) {
655  kernel.packet[i] = svld1_f32(svptrue_b32(), buffer + i * packet_traits<float>::size);
656  }
657 }

References i, N, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptranspose() [68/68]

template<int N>
EIGEN_DEVICE_FUNC void Eigen::internal::ptranspose ( PacketBlock< PacketXi, N > &  kernel)
inline
312  {
313  int buffer[packet_traits<numext::int32_t>::size * N] = {0};
314  int i = 0;
315 
316  PacketXi stride_index = svindex_s32(0, N);
317 
318  for (i = 0; i < N; i++) {
319  svst1_scatter_s32index_s32(svptrue_b32(), buffer + i, stride_index, kernel.packet[i]);
320  }
321  for (i = 0; i < N; i++) {
322  kernel.packet[i] = svld1_s32(svptrue_b32(), buffer + i * packet_traits<numext::int32_t>::size);
323  }
324 }

References i, N, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ ptrue() [1/5]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::ptrue ( const Packet a)
inline
Returns
one bits.
399  {
400  return ptrue_impl<Packet>::run(a);
401 }

References a, and Eigen::internal::ptrue_impl< Packet, EnableIf >::run().

◆ ptrue() [2/5]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::ptrue ( const Packet16bf a)
2787  {
2789 }
EIGEN_STRONG_INLINE Packet8i ptrue< Packet8i >(const Packet8i &a)
Definition: AVX/PacketMath.h:1269

References a, and ptrue< Packet8i >().

◆ ptrue() [3/5]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::ptrue ( const Packet16h a)
2265  {
2266  return Packet16h(ptrue(Packet8i(a)));
2267 }
EIGEN_STRONG_INLINE Packet16bf ptrue(const Packet16bf &a)
Definition: AVX512/PacketMath.h:2787

References a, and ptrue().

◆ ptrue() [4/5]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::ptrue ( const Packet8bf a)
2665  {
2666  return _mm_cmpeq_epi32(a, a);
2667 }

References a.

◆ ptrue() [5/5]

◆ ptrue< Packet16b >()

773  {
774  return pset1<Packet16b>(true);
775 }

References pset1< Packet16b >().

◆ ptrue< Packet16f >()

797  {
798  return _mm512_castsi512_ps(ptrue<Packet16i>(_mm512_castps_si512(a)));
799 }
EIGEN_STRONG_INLINE Packet16i ptrue< Packet16i >(const Packet16i &)
Definition: AVX512/PacketMath.h:787

References a, and ptrue< Packet16i >().

◆ ptrue< Packet16i >()

787  {
788  return _mm512_set1_epi32(int32_t(-1));
789 }

Referenced by ptrue< Packet16f >(), and ptrue< Packet8d >().

◆ ptrue< Packet1cd >()

339  {
340  return Packet1cd(ptrue(Packet2d(a.v)));
341 }

References a, and ptrue().

◆ ptrue< Packet2cd >()

308  {
309  return Packet2cd(ptrue(Packet4d(a.v)));
310 }

References a, and ptrue().

◆ ptrue< Packet2cf >()

106  {
107  return Packet2cf(ptrue(Packet4f(a.v)));
108 }

References a, and ptrue().

◆ ptrue< Packet2d >()

782  {
783  Packet4i b = _mm_castpd_si128(a);
784  return _mm_castsi128_pd(_mm_cmpeq_epi32(b, b));
785 }

References a, and b.

◆ ptrue< Packet2l >()

765  {
766  return _mm_cmpeq_epi32(a, a);
767 }

References a.

◆ ptrue< Packet4cd >()

280  {
281  return Packet4cd(ptrue(Packet8d(a.v)));
282 }

References a, and ptrue().

◆ ptrue< Packet4cf >()

106  {
107  return Packet4cf(ptrue(Packet8f(a.v)));
108 }

References a, and ptrue().

◆ ptrue< Packet4d >()

1291  {
1292 #ifdef EIGEN_VECTORIZE_AVX2
1293  // vpcmpeqq has lower latency than the more general vcmppd
1294  const __m256i b = _mm256_castpd_si256(a);
1295  return _mm256_castsi256_pd(_mm256_cmpeq_epi64(b, b));
1296 #else
1297  return _mm256_cmp_pd(a, a, _CMP_TRUE_UQ);
1298 #endif
1299 }

References a, and b.

◆ ptrue< Packet4f >()

777  {
778  Packet4i b = _mm_castps_si128(a);
779  return _mm_castsi128_ps(_mm_cmpeq_epi32(b, b));
780 }

References a, and b.

◆ ptrue< Packet4i >()

769  {
770  return _mm_cmpeq_epi32(a, a);
771 }

References a.

◆ ptrue< Packet8cf >()

67  {
68  return Packet8cf(ptrue(Packet16f(a.v)));
69 }

References a, and ptrue().

◆ ptrue< Packet8d >()

802  {
803  return _mm512_castsi512_pd(ptrue<Packet16i>(_mm512_castpd_si512(a)));
804 }

References a, and ptrue< Packet16i >().

◆ ptrue< Packet8f >()

1280  {
1281 #ifdef EIGEN_VECTORIZE_AVX2
1282  // vpcmpeqd has lower latency than the more general vcmpps
1283  const __m256i b = _mm256_castps_si256(a);
1284  return _mm256_castsi256_ps(_mm256_cmpeq_epi32(b, b));
1285 #else
1286  return _mm256_cmp_ps(a, a, _CMP_TRUE_UQ);
1287 #endif
1288 }

References a, and b.

◆ ptrue< Packet8i >()

1269  {
1270 #ifdef EIGEN_VECTORIZE_AVX2
1271  // vpcmpeqd has lower latency than the more general vcmpps
1272  return _mm256_cmpeq_epi32(a, a);
1273 #else
1274  const __m256 b = _mm256_castsi256_ps(a);
1275  return _mm256_castps_si256(_mm256_cmp_ps(b, b, _CMP_TRUE_UQ));
1276 #endif
1277 }

References a, and b.

Referenced by ptrue().

◆ ptrue< Packet8l >()

792  {
793  return _mm512_set1_epi64(int64_t(-1));
794 }

◆ ptrue< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::ptrue< PacketXf > ( const PacketXf &  )
496  {
497  return svreinterpret_f32_u32(svdup_n_u32_x(svptrue_b32(), 0xffffffffu));
498 }

◆ ptrue< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::ptrue< PacketXi > ( const PacketXi &  )
153  {
154  return svdup_n_s32_x(svptrue_b32(), 0xffffffffu);
155 }

◆ ptrunc()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::ptrunc ( const Packet a)
Returns
the truncation of a (coeff-wise)
1178  {
1179  return nearest_integer_packetop_impl<Packet>::run_trunc(a);
1180 }

References a, and Eigen::internal::nearest_integer_packetop_impl< Packet, IsScalar, IsInteger >::run_trunc().

Referenced by packetmath_real(), and Eigen::internal::scalar_trunc_op< Scalar >::packetOp().

◆ ptrunc< Packet16bf >()

2839  {
2841 }
EIGEN_STRONG_INLINE Packet16f ptrunc< Packet16f >(const Packet16f &a)
Definition: AVX512/PacketMath.h:778

References a, Bf16ToF32(), F32ToBf16(), and ptrunc< Packet16f >().

◆ ptrunc< Packet16f >()

778  {
779  return _mm512_roundscale_ps(a, _MM_FROUND_TO_ZERO);
780 }

References a.

Referenced by ptrunc< Packet16bf >(), and ptrunc< Packet16h >().

◆ ptrunc< Packet16h >()

◆ ptrunc< Packet2d >()

2749  {
2750  return __lsx_vfrintrz_d(a);
2751 }

References a.

◆ ptrunc< Packet32h >()

396  {
397  return _mm512_roundscale_ph(a, _MM_FROUND_TO_ZERO);
398 }

References a.

◆ ptrunc< Packet4bf >()

4943  {
4945 }
EIGEN_STRONG_INLINE Packet4f ptrunc< Packet4f >(const Packet4f &a)
Definition: AltiVec/PacketMath.h:1501

References a, Bf16ToF32(), F32ToBf16(), and ptrunc< Packet4f >().

◆ ptrunc< Packet4d >()

1264  {
1265  return _mm256_round_pd(a, _MM_FROUND_TRUNC);
1266 }

References a.

◆ ptrunc< Packet4f >()

1501  {
1502  return vec_trunc(a);
1503 }

References a.

Referenced by ptrunc< Packet4bf >(), and ptrunc< Packet8bf >().

◆ ptrunc< Packet8bf >()

◆ ptrunc< Packet8d >()

782  {
783  return _mm512_roundscale_pd(a, _MM_FROUND_TO_ZERO);
784 }

References a.

◆ ptrunc< Packet8f >()

1260  {
1261  return _mm256_round_ps(a, _MM_FROUND_TRUNC);
1262 }

References a.

Referenced by ptrunc< Packet8h >().

◆ ptrunc< Packet8h >()

2353  {
2355 }
EIGEN_STRONG_INLINE Packet8f ptrunc< Packet8f >(const Packet8f &a)
Definition: AVX/PacketMath.h:1260

References a, float2half(), half2float(), and ptrunc< Packet8f >().

◆ punpackp()

EIGEN_STRONG_INLINE void Eigen::internal::punpackp ( Packet4f vecs)
1837  {
1838  vecs[1] = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(vecs[0]), 0x55));
1839  vecs[2] = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(vecs[0]), 0xAA));
1840  vecs[3] = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(vecs[0]), 0xFF));
1841  vecs[0] = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(vecs[0]), 0x00));
1842 }

◆ putDenseElt() [1/2]

template<typename Scalar >
void Eigen::internal::putDenseElt ( Scalar  value,
std::ofstream &  out 
)
inline
102  {
103  out << value << "\n";
104 }

References out(), and Eigen::value.

Referenced by Eigen::saveMarketDense().

◆ putDenseElt() [2/2]

template<typename Scalar >
void Eigen::internal::putDenseElt ( std::complex< Scalar value,
std::ofstream &  out 
)
inline
106  {
107  out << value.real() << " " << value.imag() << "\n";
108 }

References out(), and Eigen::value.

◆ putMarketHeader()

template<typename Scalar >
void Eigen::internal::putMarketHeader ( std::string &  header,
int  sym 
)
inline
72  {
73  header = "%%MatrixMarket matrix coordinate ";
74  if (internal::is_same<Scalar, std::complex<float> >::value ||
75  internal::is_same<Scalar, std::complex<double> >::value) {
76  header += " complex";
77  if (sym == Symmetric)
78  header += " symmetric";
79  else if (sym == SelfAdjoint)
80  header += " Hermitian";
81  else
82  header += " general";
83  } else {
84  header += " real";
85  if (sym == Symmetric)
86  header += " symmetric";
87  else
88  header += " general";
89  }
90 }
@ Symmetric
Definition: Constants.h:229

References Eigen::SelfAdjoint, Eigen::Symmetric, and Eigen::value.

◆ PutMatrixElt() [1/2]

template<typename Scalar , typename StorageIndex >
void Eigen::internal::PutMatrixElt ( Scalar  value,
StorageIndex  row,
StorageIndex  col,
std::ofstream &  out 
)
inline
93  {
94  out << row << " " << col << " " << value << "\n";
95 }

References col(), out(), row(), and Eigen::value.

Referenced by Eigen::saveMarket().

◆ PutMatrixElt() [2/2]

template<typename Scalar , typename StorageIndex >
void Eigen::internal::PutMatrixElt ( std::complex< Scalar value,
StorageIndex  row,
StorageIndex  col,
std::ofstream &  out 
)
inline
97  {
98  out << row << " " << col << " " << value.real() << " " << value.imag() << "\n";
99 }

References col(), out(), row(), and Eigen::value.

◆ pxor() [1/7]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pxor ( const Packet a,
const Packet b 
)
inline
Returns
the bitwise xor of a and b
566  {
567  return bitwise_helper<Packet>::bitwise_xor(a, b);
568 }

References a, b, and Eigen::internal::bytewise_bitwise_helper< T >::bitwise_xor().

◆ pxor() [2/7]

template<>
EIGEN_STRONG_INLINE Packet16bf Eigen::internal::pxor ( const Packet16bf a,
const Packet16bf b 
)
2797  {
2799 }
EIGEN_STRONG_INLINE Packet8i pxor< Packet8i >(const Packet8i &a, const Packet8i &b)
Definition: AVX/PacketMath.h:1360

References a, b, and pxor< Packet8i >().

◆ pxor() [3/7]

template<>
EIGEN_STRONG_INLINE Packet16h Eigen::internal::pxor ( const Packet16h a,
const Packet16h b 
)
2297  {
2298  return Packet16h(pxor(Packet8i(a), Packet8i(b)));
2299 }
EIGEN_STRONG_INLINE Packet16bf pxor(const Packet16bf &a, const Packet16bf &b)
Definition: AVX512/PacketMath.h:2797

References a, b, and pxor().

◆ pxor() [4/7]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pxor ( const Packet32h a,
const Packet32h b 
)
232  {
233  return _mm512_castsi512_ph(_mm512_xor_si512(_mm512_castph_si512(a), _mm512_castph_si512(b)));
234 }

References a, and b.

◆ pxor() [5/7]

template<>
EIGEN_STRONG_INLINE Packet4bf Eigen::internal::pxor ( const Packet4bf a,
const Packet4bf b 
)
4903  {
4905 }

References a, b, and pxor< Packet4us >().

◆ pxor() [6/7]

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pxor ( const Packet8bf a,
const Packet8bf b 
)
2695  {
2696  return _mm_xor_si128(a, b);
2697 }

References a, and b.

◆ pxor() [7/7]

◆ pxor< Packet16b >()

template<>
EIGEN_STRONG_INLINE Packet16b Eigen::internal::pxor< Packet16b > ( const Packet16b a,
const Packet16b b 
)
858  {
859  return _mm_xor_si128(a, b);
860 }

References a, and b.

◆ pxor< Packet16c >()

template<>
EIGEN_STRONG_INLINE Packet16c Eigen::internal::pxor< Packet16c > ( const Packet16c a,
const Packet16c b 
)
966  {
967  return __lsx_vxor_v(a, b);
968 }

References a, and b.

◆ pxor< Packet16f >()

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pxor< Packet16f > ( const Packet16f a,
const Packet16f b 
)
879  {
880 #ifdef EIGEN_VECTORIZE_AVX512DQ
881  return _mm512_xor_ps(a, b);
882 #else
883  return _mm512_castsi512_ps(pxor(_mm512_castps_si512(a), _mm512_castps_si512(b)));
884 #endif
885 }

References a, b, and pxor().

◆ pxor< Packet16i >()

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pxor< Packet16i > ( const Packet16i a,
const Packet16i b 
)
869  {
870  return _mm512_xor_si512(a, b);
871 }

References a, and b.

◆ pxor< Packet16uc >()

982  {
983  return __lsx_vxor_v(a, b);
984 }

References a, and b.

◆ pxor< Packet1cd >()

template<>
EIGEN_STRONG_INLINE Packet1cd Eigen::internal::pxor< Packet1cd > ( const Packet1cd a,
const Packet1cd b 
)
355  {
356  Packet1cd res;
357  res.v = (Packet2d)__lsx_vxor_v((__m128i)a.v, (__m128i)b.v);
358  return res;
359 }

References a, b, and res.

◆ pxor< Packet1cf >()

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pxor< Packet1cf > ( const Packet1cf a,
const Packet1cf b 
)
281  {
282  return Packet1cf(vreinterpret_f32_u32(veor_u32(vreinterpret_u32_f32(a.v), vreinterpret_u32_f32(b.v))));
283 }

References a, and b.

◆ pxor< Packet2cd >()

template<>
EIGEN_STRONG_INLINE Packet2cd Eigen::internal::pxor< Packet2cd > ( const Packet2cd a,
const Packet2cd b 
)
320  {
321  return Packet2cd(_mm256_xor_pd(a.v, b.v));
322 }

References a, and b.

◆ pxor< Packet2cf >()

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pxor< Packet2cf > ( const Packet2cf a,
const Packet2cf b 
)
281  {
282  return Packet2cf(pxor<Packet4f>(a.v, b.v));
283 }

References a, b, and pxor< Packet4f >().

◆ pxor< Packet2d >()

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pxor< Packet2d > ( const Packet2d a,
const Packet2d b 
)
962  {
963  return (Packet2d)__lsx_vxor_v((__m128i)a, (__m128i)b);
964 }

References a, and b.

◆ pxor< Packet2f >()

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pxor< Packet2f > ( const Packet2f a,
const Packet2f b 
)
2045  {
2046  return vreinterpret_f32_u32(veor_u32(vreinterpret_u32_f32(a), vreinterpret_u32_f32(b)));
2047 }

References a, and b.

◆ pxor< Packet2i >()

template<>
EIGEN_STRONG_INLINE Packet2i Eigen::internal::pxor< Packet2i > ( const Packet2i a,
const Packet2i b 
)
2093  {
2094  return veor_s32(a, b);
2095 }

References a, and b.

◆ pxor< Packet2l >()

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pxor< Packet2l > ( const Packet2l a,
const Packet2l b 
)
978  {
979  return __lsx_vxor_v(a, b);
980 }

References a, and b.

◆ pxor< Packet2ui >()

template<>
EIGEN_STRONG_INLINE Packet2ui Eigen::internal::pxor< Packet2ui > ( const Packet2ui a,
const Packet2ui b 
)
2101  {
2102  return veor_u32(a, b);
2103 }

References a, and b.

◆ pxor< Packet2ul >()

template<>
EIGEN_STRONG_INLINE Packet2ul Eigen::internal::pxor< Packet2ul > ( const Packet2ul a,
const Packet2ul b 
)
994  {
995  return __lsx_vxor_v(a, b);
996 }

References a, and b.

◆ pxor< Packet4c >()

template<>
EIGEN_STRONG_INLINE Packet4c Eigen::internal::pxor< Packet4c > ( const Packet4c a,
const Packet4c b 
)
2053  {
2054  return a ^ b;
2055 }

References a, and b.

◆ pxor< Packet4cd >()

template<>
EIGEN_STRONG_INLINE Packet4cd Eigen::internal::pxor< Packet4cd > ( const Packet4cd a,
const Packet4cd b 
)
292  {
293  return Packet4cd(pxor(a.v, b.v));
294 }

References a, b, and pxor().

◆ pxor< Packet4cf >()

template<>
EIGEN_STRONG_INLINE Packet4cf Eigen::internal::pxor< Packet4cf > ( const Packet4cf a,
const Packet4cf b 
)
118  {
119  return Packet4cf(_mm256_xor_ps(a.v, b.v));
120 }

References a, and b.

◆ pxor< Packet4d >()

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pxor< Packet4d > ( const Packet4d a,
const Packet4d b 
)
1356  {
1357  return _mm256_xor_pd(a, b);
1358 }

References a, and b.

◆ pxor< Packet4f >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pxor< Packet4f > ( const Packet4f a,
const Packet4f b 
)
1448  {
1449  return vec_xor(a, b);
1450 }

References a, and b.

Referenced by pconj(), and pxor< Packet2cf >().

◆ pxor< Packet4i >()

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pxor< Packet4i > ( const Packet4i a,
const Packet4i b 
)
1452  {
1453  return vec_xor(a, b);
1454 }

References a, and b.

◆ pxor< Packet4s >()

template<>
EIGEN_STRONG_INLINE Packet4s Eigen::internal::pxor< Packet4s > ( const Packet4s a,
const Packet4s b 
)
2077  {
2078  return veor_s16(a, b);
2079 }

References a, and b.

◆ pxor< Packet4uc >()

template<>
EIGEN_STRONG_INLINE Packet4uc Eigen::internal::pxor< Packet4uc > ( const Packet4uc a,
const Packet4uc b 
)
2065  {
2066  return a ^ b;
2067 }

References a, and b.

◆ pxor< Packet4ui >()

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pxor< Packet4ui > ( const Packet4ui a,
const Packet4ui b 
)
990  {
991  return __lsx_vxor_v(a, b);
992 }

References a, and b.

◆ pxor< Packet4us >()

template<>
EIGEN_STRONG_INLINE Packet4us Eigen::internal::pxor< Packet4us > ( const Packet4us a,
const Packet4us b 
)
2085  {
2086  return veor_u16(a, b);
2087 }

References a, and b.

Referenced by pnegate< Packet4bf >(), and pxor().

◆ pxor< Packet8bf >()

template<>
EIGEN_STRONG_INLINE Packet8bf Eigen::internal::pxor< Packet8bf > ( const Packet8bf a,
const Packet8bf b 
)
1460  {
1461  return pxor<Packet8us>(a, b);
1462 }

References a, b, and pxor< Packet8us >().

◆ pxor< Packet8c >()

template<>
EIGEN_STRONG_INLINE Packet8c Eigen::internal::pxor< Packet8c > ( const Packet8c a,
const Packet8c b 
)
2057  {
2058  return veor_s8(a, b);
2059 }

References a, and b.

◆ pxor< Packet8cf >()

template<>
EIGEN_STRONG_INLINE Packet8cf Eigen::internal::pxor< Packet8cf > ( const Packet8cf a,
const Packet8cf b 
)
105  {
106  return Packet8cf(pxor(a.v, b.v));
107 }

References a, b, and pxor().

◆ pxor< Packet8d >()

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pxor< Packet8d > ( const Packet8d a,
const Packet8d b 
)
888  {
889 #ifdef EIGEN_VECTORIZE_AVX512DQ
890  return _mm512_xor_pd(a, b);
891 #else
892  return _mm512_castsi512_pd(pxor(_mm512_castpd_si512(a), _mm512_castpd_si512(b)));
893 #endif
894 }

References a, b, and pxor().

◆ pxor< Packet8f >()

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pxor< Packet8f > ( const Packet8f a,
const Packet8f b 
)
1352  {
1353  return _mm256_xor_ps(a, b);
1354 }

References a, and b.

◆ pxor< Packet8i >()

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pxor< Packet8i > ( const Packet8i a,
const Packet8i b 
)
1360  {
1361 #ifdef EIGEN_VECTORIZE_AVX2
1362  return _mm256_xor_si256(a, b);
1363 #else
1364  return _mm256_castps_si256(_mm256_xor_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
1365 #endif
1366 }

References a, and b.

Referenced by pxor().

◆ pxor< Packet8l >()

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pxor< Packet8l > ( const Packet8l a,
const Packet8l b 
)
874  {
875  return _mm512_xor_si512(a, b);
876 }

References a, and b.

◆ pxor< Packet8s >()

template<>
EIGEN_STRONG_INLINE Packet8s Eigen::internal::pxor< Packet8s > ( const Packet8s a,
const Packet8s b 
)
970  {
971  return __lsx_vxor_v(a, b);
972 }

References a, and b.

◆ pxor< Packet8uc >()

template<>
EIGEN_STRONG_INLINE Packet8uc Eigen::internal::pxor< Packet8uc > ( const Packet8uc a,
const Packet8uc b 
)
2069  {
2070  return veor_u8(a, b);
2071 }

References a, and b.

◆ pxor< Packet8ui >()

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pxor< Packet8ui > ( const Packet8ui a,
const Packet8ui b 
)
1368  {
1369 #ifdef EIGEN_VECTORIZE_AVX2
1370  return _mm256_xor_si256(a, b);
1371 #else
1372  return _mm256_castps_si256(_mm256_xor_ps(_mm256_castsi256_ps(a), _mm256_castsi256_ps(b)));
1373 #endif
1374 }

References a, and b.

◆ pxor< Packet8us >()

template<>
EIGEN_STRONG_INLINE Packet8us Eigen::internal::pxor< Packet8us > ( const Packet8us a,
const Packet8us b 
)
1456  {
1457  return vec_xor(a, b);
1458 }

References a, and b.

Referenced by pnegate< Packet8bf >(), and pxor< Packet8bf >().

◆ pxor< PacketXf >()

template<>
EIGEN_STRONG_INLINE PacketXf Eigen::internal::pxor< PacketXf > ( const PacketXf &  a,
const PacketXf &  b 
)
512  {
513  return svreinterpret_f32_u32(sveor_u32_x(svptrue_b32(), svreinterpret_u32_f32(a), svreinterpret_u32_f32(b)));
514 }

References a, and b.

◆ pxor< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pxor< PacketXi > ( const PacketXi &  a,
const PacketXi &  b 
)
173  {
174  return sveor_s32_x(svptrue_b32(), a, b);
175 }

References a, and b.

◆ pzero() [1/18]

template<typename Packet >
EIGEN_DEVICE_FUNC Packet Eigen::internal::pzero ( const Packet a)
inline
Returns
packet of zeros
422  {
423  return pzero_impl<Packet>::run(a);
424 }

References a, and Eigen::internal::pzero_impl< Packet, EnableIf >::run().

◆ pzero() [2/18]

template<>
EIGEN_STRONG_INLINE Packet16f Eigen::internal::pzero ( const Packet16f )
279  {
280  return _mm512_setzero_ps();
281 }

◆ pzero() [3/18]

template<>
EIGEN_STRONG_INLINE Packet16i Eigen::internal::pzero ( const Packet16i )
287  {
288  return _mm512_setzero_si512();
289 }

◆ pzero() [4/18]

template<>
EIGEN_STRONG_INLINE Packet1cf Eigen::internal::pzero ( const Packet1cf )
112  {
113  return Packet1cf(vdup_n_f32(0.0f));
114 }

◆ pzero() [5/18]

template<>
EIGEN_STRONG_INLINE Packet2cf Eigen::internal::pzero ( const Packet2cf )
235  {
236  __m128 v = {0.0f, 0.0f, 0.0f, 0.0f};
237  return (Packet2cf)v;
238 }

References v.

◆ pzero() [6/18]

template<>
EIGEN_STRONG_INLINE Packet2d Eigen::internal::pzero ( const Packet2d )
2724  {
2725  Packet2d v = {0.0, 0.0};
2726  return v;
2727 }

References v.

◆ pzero() [7/18]

template<>
EIGEN_STRONG_INLINE Packet2f Eigen::internal::pzero ( const Packet2f )
659  {
660  return vdup_n_f32(0.0f);
661 }

◆ pzero() [8/18]

template<>
EIGEN_STRONG_INLINE Packet2l Eigen::internal::pzero ( const Packet2l )
449  {
450  return _mm_setzero_si128();
451 }

◆ pzero() [9/18]

template<>
EIGEN_STRONG_INLINE Packet32h Eigen::internal::pzero ( const Packet32h )
117  {
118  return _mm512_setzero_ph();
119 }

◆ pzero() [10/18]

template<>
EIGEN_STRONG_INLINE Packet4d Eigen::internal::pzero ( const Packet4d )
778  {
779  return _mm256_setzero_pd();
780 }

◆ pzero() [11/18]

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::pzero ( const Packet4f )
2685  {
2686  Packet4f v = {0.0f, 0.0f, 0.0f, 0.0f};
2687  return v;
2688 }

References v.

◆ pzero() [12/18]

template<>
EIGEN_STRONG_INLINE Packet4i Eigen::internal::pzero ( const Packet4i )
453  {
454  return _mm_setzero_si128();
455 }

◆ pzero() [13/18]

template<>
EIGEN_STRONG_INLINE Packet4ui Eigen::internal::pzero ( const Packet4ui )
457  {
458  return _mm_setzero_si128();
459 }

◆ pzero() [14/18]

template<>
EIGEN_STRONG_INLINE Packet8d Eigen::internal::pzero ( const Packet8d )
283  {
284  return _mm512_setzero_pd();
285 }

◆ pzero() [15/18]

template<>
EIGEN_STRONG_INLINE Packet8f Eigen::internal::pzero ( const Packet8f )
774  {
775  return _mm256_setzero_ps();
776 }

Referenced by Eigen::internal::all_visitor< Scalar >::all_predux(), Eigen::internal::any_visitor< Scalar >::any_predux(), Eigen::internal::count_visitor< Scalar >::count_redux(), Eigen::internal::gemm_class< Scalar, is_unit_inc >::gemm_class(), Eigen::internal::unary_pow::handle_nonint_nonint_errors(), Eigen::internal::accurate_log2< Scalar >::operator()(), Eigen::internal::scalar_isnan_op< Scalar, true >::operator()(), Eigen::internal::scalar_isinf_op< Scalar, true >::operator()(), Eigen::internal::scalar_isfinite_op< Scalar, true >::operator()(), pabs(), packetmath(), Eigen::internal::scalar_boolean_not_op< Scalar >::packetOp(), Eigen::internal::scalar_boolean_and_op< Scalar >::packetOp(), Eigen::internal::scalar_boolean_or_op< Scalar >::packetOp(), Eigen::internal::scalar_boolean_xor_op< Scalar >::packetOp(), Eigen::internal::scalar_boolean_select_op< ThenScalar, ElseScalar, ConditionScalar >::packetOp(), pcast< Packet16f, Packet16b >(), pcast< Packet4f, Packet16b >(), pcast< Packet8f, Packet16b >(), pcmp_eq(), pcmp_le(), pcmp_lt(), pcmp_lt_or_nan(), pexp_complex(), pfrexp_generic(), pldexp_fast(), plog_impl_double(), plog_impl_float(), pmadd< Packet1cd >(), pmadd< Packet2cf >(), pnegate(), pnegate< Packet32h >(), predux_any(), prsqrt_float_common(), psignbit(), psincos_double(), psincos_float(), psqrt_complex(), psqrt_float_common(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&NumTraits< typename unpacket_traits< Packet >::type >::IsSigned &&NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t<!NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&!NumTraits< typename unpacket_traits< Packet >::type >::IsSigned &&NumTraits< typename unpacket_traits< Packet >::type >::IsInteger > >::run(), Eigen::internal::psign_impl< Packet, std::enable_if_t< NumTraits< typename unpacket_traits< Packet >::type >::IsComplex &&unpacket_traits< Packet >::vectorizable > >::run(), Eigen::internal::psignbit_impl< Packet, false, true >::run(), Eigen::internal::generic_sqrt_newton_step< Packet, Steps >::run(), Eigen::internal::maybe_raise_div_by_zero< Packet, true >::run(), Eigen::internal::gemm_class< Scalar, is_unit_inc >::vaddm(), Eigen::internal::gemm_class< Scalar, is_unit_inc >::vfmaddm(), and Eigen::internal::gemm_class< Scalar, is_unit_inc >::write_c().

◆ pzero() [16/18]

template<>
EIGEN_STRONG_INLINE Packet8i Eigen::internal::pzero ( const Packet8i )
782  {
783  return _mm256_setzero_si256();
784 }

◆ pzero() [17/18]

template<>
EIGEN_STRONG_INLINE Packet8l Eigen::internal::pzero ( const Packet8l )
292  {
293  return _mm512_setzero_si512();
294 }

◆ pzero() [18/18]

template<>
EIGEN_STRONG_INLINE Packet8ui Eigen::internal::pzero ( const Packet8ui )
786  {
787  return _mm256_setzero_si256();
788 }

◆ pzero< Packet1cd >()

477  {
478  __m128d v = {0.0, 0.0};
479  return (Packet1cd)v;
480 }

References v.

◆ pzero< PacketXi >()

template<>
EIGEN_STRONG_INLINE PacketXi Eigen::internal::pzero< PacketXi > ( const PacketXi &  )
158  {
159  return svdup_n_s32_x(svptrue_b32(), 0);
160 }

◆ pzeta()

template<typename Packet >
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet Eigen::internal::pzeta ( const Packet x,
const Packet q 
)
Returns
the zeta function of two arguments (coeff-wise)
36  {
37  using numext::zeta;
38  return zeta(x, q);
39 }
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152

References Eigen::numext::q, plotDoE::x, and Eigen::zeta().

Referenced by Eigen::internal::scalar_zeta_op< Scalar >::packetOp().

◆ qrsolv()

template<typename Scalar >
void Eigen::internal::qrsolv ( Matrix< Scalar, Dynamic, Dynamic > &  s,
const VectorXi &  ipvt,
const Matrix< Scalar, Dynamic, 1 > &  diag,
const Matrix< Scalar, Dynamic, 1 > &  qtb,
Matrix< Scalar, Dynamic, 1 > &  x,
Matrix< Scalar, Dynamic, 1 > &  sdiag 
)
15 {
16  typedef DenseIndex Index;
17 
18  /* Local variables */
19  Index i, j, k, l;
20  Scalar temp;
21  Index n = s.cols();
22  Matrix<Scalar, Dynamic, 1> wa(n);
23  JacobiRotation<Scalar> givens;
24 
25  /* Function Body */
26  // the following will only change the lower triangular part of s, including
27  // the diagonal, though the diagonal is restored afterward
28 
29  /* copy r and (q transpose)*b to preserve input and initialize s. */
30  /* in particular, save the diagonal elements of r in x. */
31  x = s.diagonal();
32  wa = qtb;
33 
34  s.topLeftCorner(n, n).template triangularView<StrictlyLower>() = s.topLeftCorner(n, n).transpose();
35 
36  /* eliminate the diagonal matrix d using a givens rotation. */
37  for (j = 0; j < n; ++j) {
38  /* prepare the row of d to be eliminated, locating the */
39  /* diagonal element using p from the qr factorization. */
40  l = ipvt[j];
41  if (diag[l] == 0.) break;
42  sdiag.tail(n - j).setZero();
43  sdiag[j] = diag[l];
44 
45  /* the transformations to eliminate the row of d */
46  /* modify only a single element of (q transpose)*b */
47  /* beyond the first n, which is initially zero. */
48  Scalar qtbpj = 0.;
49  for (k = j; k < n; ++k) {
50  /* determine a givens rotation which eliminates the */
51  /* appropriate element in the current row of d. */
52  givens.makeGivens(-s(k, k), sdiag[k]);
53 
54  /* compute the modified diagonal element of r and */
55  /* the modified element of ((q transpose)*b,0). */
56  s(k, k) = givens.c() * s(k, k) + givens.s() * sdiag[k];
57  temp = givens.c() * wa[k] + givens.s() * qtbpj;
58  qtbpj = -givens.s() * wa[k] + givens.c() * qtbpj;
59  wa[k] = temp;
60 
61  /* accumulate the transformation in the row of s. */
62  for (i = k + 1; i < n; ++i) {
63  temp = givens.c() * s(i, k) + givens.s() * sdiag[i];
64  sdiag[i] = -givens.s() * s(i, k) + givens.c() * sdiag[i];
65  s(i, k) = temp;
66  }
67  }
68  }
69 
70  /* solve the triangular system for z. if the system is */
71  /* singular, then obtain a least squares solution. */
72  Index nsing;
73  for (nsing = 0; nsing < n && sdiag[nsing] != 0; nsing++) {
74  }
75 
76  wa.tail(n - nsing).setZero();
77  s.topLeftCorner(nsing, nsing).transpose().template triangularView<Upper>().solveInPlace(wa.head(nsing));
78 
79  // restore
80  sdiag = s.diagonal();
81  s.diagonal() = x;
82 
83  /* permute the components of z back to components of x. */
84  for (j = 0; j < n; ++j) x[ipvt[j]] = wa[j];
85 }

References Eigen::JacobiRotation< Scalar >::c(), diag, i, j, k, Eigen::JacobiRotation< Scalar >::makeGivens(), n, s, Eigen::JacobiRotation< Scalar >::s(), Eigen::PlainObjectBase< Derived >::setZero(), and plotDoE::x.

◆ queryCacheSizes()

void Eigen::internal::queryCacheSizes ( int l1,
int l2,
int l3 
)
inline

Queries and returns the cache sizes in Bytes of the L1, L2, and L3 data caches respectively

1263  {
1264 #ifdef EIGEN_CPUID
1265  int abcd[4];
1266  const int GenuineIntel[] = {0x756e6547, 0x49656e69, 0x6c65746e};
1267  const int AuthenticAMD[] = {0x68747541, 0x69746e65, 0x444d4163};
1268  const int AMDisbetter_[] = {0x69444d41, 0x74656273, 0x21726574}; // "AMDisbetter!"
1269 
1270  // identify the CPU vendor
1271  EIGEN_CPUID(abcd, 0x0, 0);
1272  int max_std_funcs = abcd[0];
1273  if (cpuid_is_vendor(abcd, GenuineIntel))
1274  queryCacheSizes_intel(l1, l2, l3, max_std_funcs);
1275  else if (cpuid_is_vendor(abcd, AuthenticAMD) || cpuid_is_vendor(abcd, AMDisbetter_))
1276  queryCacheSizes_amd(l1, l2, l3);
1277  else
1278  // by default let's use Intel's API
1279  queryCacheSizes_intel(l1, l2, l3, max_std_funcs);
1280 
1281  // here is the list of other vendors:
1282  // ||cpuid_is_vendor(abcd,"VIA VIA VIA ")
1283  // ||cpuid_is_vendor(abcd,"CyrixInstead")
1284  // ||cpuid_is_vendor(abcd,"CentaurHauls")
1285  // ||cpuid_is_vendor(abcd,"GenuineTMx86")
1286  // ||cpuid_is_vendor(abcd,"TransmetaCPU")
1287  // ||cpuid_is_vendor(abcd,"RiseRiseRise")
1288  // ||cpuid_is_vendor(abcd,"Geode by NSC")
1289  // ||cpuid_is_vendor(abcd,"SiS SiS SiS ")
1290  // ||cpuid_is_vendor(abcd,"UMC UMC UMC ")
1291  // ||cpuid_is_vendor(abcd,"NexGenDriven")
1292 #else
1293  l1 = l2 = l3 = -1;
1294 #endif
1295 }

Referenced by Eigen::internal::CacheSizes::CacheSizes(), main(), queryL1CacheSize(), and queryTopLevelCacheSize().

◆ queryL1CacheSize()

int Eigen::internal::queryL1CacheSize ( )
inline
Returns
the size in Bytes of the L1 data cache
1299  {
1300  int l1(-1), l2, l3;
1301  queryCacheSizes(l1, l2, l3);
1302  return l1;
1303 }
void queryCacheSizes(int &l1, int &l2, int &l3)
Definition: Memory.h:1263

References queryCacheSizes().

Referenced by main().

◆ queryTopLevelCacheSize()

int Eigen::internal::queryTopLevelCacheSize ( )
inline
Returns
the size in Bytes of the L2 or L3 cache if this later is present
1307  {
1308  int l1, l2(-1), l3(-1);
1309  queryCacheSizes(l1, l2, l3);
1310  return (std::max)(l2, l3);
1311 }

References max, and queryCacheSizes().

Referenced by main().

◆ QuickSplit()

template<typename VectorV , typename VectorI >
Index Eigen::internal::QuickSplit ( VectorV &  row,
VectorI &  ind,
Index  ncut 
)

Compute a quick-sort split of a vector On output, the vector row is permuted such that its elements satisfy abs(row(i)) >= abs(row(ncut)) if i<ncut abs(row(i)) <= abs(row(ncut)) if i>ncut

Parameters
rowThe vector of values
indThe array of index for the elements in row
ncutThe number of largest elements to keep
31  {
32  typedef typename VectorV::RealScalar RealScalar;
33  using std::abs;
34  using std::swap;
35  Index mid;
36  Index n = row.size(); /* length of the vector */
37  Index first, last;
38 
39  ncut--; /* to fit the zero-based indices */
40  first = 0;
41  last = n - 1;
42  if (ncut < first || ncut > last) return 0;
43 
44  do {
45  mid = first;
46  RealScalar abskey = abs(row(mid));
47  for (Index j = first + 1; j <= last; j++) {
48  if (abs(row(j)) > abskey) {
49  ++mid;
50  swap(row(mid), row(j));
51  swap(ind(mid), ind(j));
52  }
53  }
54  /* Interchange for the pivot element */
55  swap(row(mid), row(first));
56  swap(ind(mid), ind(first));
57 
58  if (mid > ncut)
59  last = mid - 1;
60  else if (mid < ncut)
61  first = mid + 1;
62  } while (mid != ncut);
63 
64  return 0; /* mid is equal to ncut */
65 }
std::vector< int > ind
Definition: Slicing_stdvector_cxx11.cpp:1
static constexpr const last_t last
Definition: IndexedViewHelper.h:48

References abs(), ind, j, Eigen::placeholders::last, n, row(), swap(), and swap().

Referenced by Eigen::IncompleteLUT< Scalar_, StorageIndex_ >::factorize(), and Eigen::IncompleteCholesky< Scalar, UpLo_, OrderingType_ >::factorize().

◆ r1mpyq()

template<typename Scalar >
void Eigen::internal::r1mpyq ( DenseIndex  m,
DenseIndex  n,
Scalar a,
const std::vector< JacobiRotation< Scalar > > &  v_givens,
const std::vector< JacobiRotation< Scalar > > &  w_givens 
)
12  {
13  typedef DenseIndex Index;
14 
15  /* apply the first set of givens rotations to a. */
16  for (Index j = n - 2; j >= 0; --j)
17  for (Index i = 0; i < m; ++i) {
18  Scalar temp = v_givens[j].c() * a[i + m * j] - v_givens[j].s() * a[i + m * (n - 1)];
19  a[i + m * (n - 1)] = v_givens[j].s() * a[i + m * j] + v_givens[j].c() * a[i + m * (n - 1)];
20  a[i + m * j] = temp;
21  }
22  /* apply the second set of givens rotations to a. */
23  for (Index j = 0; j < n - 1; ++j)
24  for (Index i = 0; i < m; ++i) {
25  Scalar temp = w_givens[j].c() * a[i + m * j] + w_givens[j].s() * a[i + m * (n - 1)];
26  a[i + m * (n - 1)] = -w_givens[j].s() * a[i + m * j] + w_givens[j].c() * a[i + m * (n - 1)];
27  a[i + m * j] = temp;
28  }
29 }

References a, i, j, m, n, and s.

◆ r1updt()

template<typename Scalar >
void Eigen::internal::r1updt ( Matrix< Scalar, Dynamic, Dynamic > &  s,
const Matrix< Scalar, Dynamic, 1 > &  u,
std::vector< JacobiRotation< Scalar > > &  v_givens,
std::vector< JacobiRotation< Scalar > > &  w_givens,
Matrix< Scalar, Dynamic, 1 > &  v,
Matrix< Scalar, Dynamic, 1 > &  w,
bool sing 
)
11  {
12  typedef DenseIndex Index;
13  const JacobiRotation<Scalar> IdentityRotation = JacobiRotation<Scalar>(1, 0);
14 
15  /* Local variables */
16  const Index m = s.rows();
17  const Index n = s.cols();
18  Index i, j = 1;
19  Scalar temp;
20  JacobiRotation<Scalar> givens;
21 
22  // r1updt had a broader usecase, but we don't use it here. And, more
23  // importantly, we can not test it.
24  eigen_assert(m == n);
25  eigen_assert(u.size() == m);
26  eigen_assert(v.size() == n);
27  eigen_assert(w.size() == n);
28 
29  /* move the nontrivial part of the last column of s into w. */
30  w[n - 1] = s(n - 1, n - 1);
31 
32  /* rotate the vector v into a multiple of the n-th unit vector */
33  /* in such a way that a spike is introduced into w. */
34  for (j = n - 2; j >= 0; --j) {
35  w[j] = 0.;
36  if (v[j] != 0.) {
37  /* determine a givens rotation which eliminates the */
38  /* j-th element of v. */
39  givens.makeGivens(-v[n - 1], v[j]);
40 
41  /* apply the transformation to v and store the information */
42  /* necessary to recover the givens rotation. */
43  v[n - 1] = givens.s() * v[j] + givens.c() * v[n - 1];
44  v_givens[j] = givens;
45 
46  /* apply the transformation to s and extend the spike in w. */
47  for (i = j; i < m; ++i) {
48  temp = givens.c() * s(j, i) - givens.s() * w[i];
49  w[i] = givens.s() * s(j, i) + givens.c() * w[i];
50  s(j, i) = temp;
51  }
52  } else
53  v_givens[j] = IdentityRotation;
54  }
55 
56  /* add the spike from the rank 1 update to w. */
57  w += v[n - 1] * u;
58 
59  /* eliminate the spike. */
60  *sing = false;
61  for (j = 0; j < n - 1; ++j) {
62  if (w[j] != 0.) {
63  /* determine a givens rotation which eliminates the */
64  /* j-th element of the spike. */
65  givens.makeGivens(-s(j, j), w[j]);
66 
67  /* apply the transformation to s and reduce the spike in w. */
68  for (i = j; i < m; ++i) {
69  temp = givens.c() * s(j, i) + givens.s() * w[i];
70  w[i] = -givens.s() * s(j, i) + givens.c() * w[i];
71  s(j, i) = temp;
72  }
73 
74  /* store the information necessary to recover the */
75  /* givens rotation. */
76  w_givens[j] = givens;
77  } else
78  v_givens[j] = IdentityRotation;
79 
80  /* test for zero diagonal elements in the output s. */
81  if (s(j, j) == 0.) {
82  *sing = true;
83  }
84  }
85  /* move w back into the last column of the output s. */
86  s(n - 1, n - 1) = w[n - 1];
87 
88  if (s(j, j) == 0.) {
89  *sing = true;
90  }
91  return;
92 }

References Eigen::JacobiRotation< Scalar >::c(), eigen_assert, i, j, m, Eigen::JacobiRotation< Scalar >::makeGivens(), n, s, Eigen::JacobiRotation< Scalar >::s(), v, and w.

◆ RandomToTypeNormal()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T Eigen::internal::RandomToTypeNormal ( uint64_t *  state,
uint64_t  stream 
)
201  {
202  // Use the ratio of uniform method to generate numbers following a normal
203  // distribution. See for example Numerical Recipes chapter 7.3.9 for the
204  // details.
205  T u, v, q;
206  do {
207  u = RandomToTypeUniform<T>(state, stream);
208  v = T(1.7156) * (RandomToTypeUniform<T>(state, stream) - T(0.5));
209  const T x = u - T(0.449871);
210  const T y = numext::abs(v) + T(0.386595);
211  q = x * x + y * (T(0.196) * y - T(0.25472) * x);
212  } while (q > T(0.27597) && (q > T(0.27846) || v * v > T(-4) * numext::log(u) * u * u));
213 
214  return v / u;
215 }

References Eigen::numext::abs(), Eigen::numext::log(), Eigen::numext::q, v, plotDoE::x, and y.

◆ RandomToTypeNormal< std::complex< double > >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::complex<double> Eigen::internal::RandomToTypeNormal< std::complex< double > > ( uint64_t *  state,
uint64_t  stream 
)
224  {
225  return std::complex<double>(RandomToTypeNormal<double>(state, stream), RandomToTypeNormal<double>(state, stream));
226 }

◆ RandomToTypeNormal< std::complex< float > >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::RandomToTypeNormal< std::complex< float > > ( uint64_t *  state,
uint64_t  stream 
)
219  {
220  return std::complex<float>(RandomToTypeNormal<float>(state, stream), RandomToTypeNormal<float>(state, stream));
221 }

◆ RandomToTypeUniform()

template<typename T >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T Eigen::internal::RandomToTypeUniform ( uint64_t *  state,
uint64_t  stream 
)
47  {
48  unsigned rnd = PCG_XSH_RS_generator(state, stream);
49  return static_cast<T>(rnd);
50 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE unsigned PCG_XSH_RS_generator(uint64_t *state, uint64_t stream)
Definition: TensorRandom.h:32

References PCG_XSH_RS_generator().

◆ RandomToTypeUniform< double >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double Eigen::internal::RandomToTypeUniform< double > ( uint64_t *  state,
uint64_t  stream 
)
90  {
91  typedef union {
92  uint64_t raw;
93  double dp;
94  } internal;
95  internal result;
96  result.raw = 0;
97  // Generate 52 random bits for the mantissa
98  // First generate the upper 20 bits
99  unsigned rnd1 = PCG_XSH_RS_generator(state, stream) & 0xfffffu;
100  // The generate the lower 32 bits
101  unsigned rnd2 = PCG_XSH_RS_generator(state, stream);
102  result.raw = (static_cast<uint64_t>(rnd1) << 32) | rnd2;
103  // Set the exponent
104  result.raw |= (static_cast<uint64_t>(1023) << 52);
105  // Return the final result
106  return result.dp - 1.0;
107 }

References PCG_XSH_RS_generator().

Referenced by RandomToTypeUniform< std::complex< double > >().

◆ RandomToTypeUniform< Eigen::bfloat16 >()

64  {
65  // Generate 7 random bits for the mantissa, merge with exponent.
66  unsigned rnd = PCG_XSH_RS_generator(state, stream);
67  const uint16_t half_bits = static_cast<uint16_t>(rnd & 0x7fu) | (static_cast<uint16_t>(127) << 7);
68  Eigen::bfloat16 result = Eigen::numext::bit_cast<Eigen::bfloat16>(half_bits);
69  // Return the final result
70  return result - Eigen::bfloat16(1.0f);
71 }

References PCG_XSH_RS_generator().

◆ RandomToTypeUniform< Eigen::half >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Eigen::half Eigen::internal::RandomToTypeUniform< Eigen::half > ( uint64_t *  state,
uint64_t  stream 
)
53  {
54  // Generate 10 random bits for the mantissa, merge with exponent.
55  unsigned rnd = PCG_XSH_RS_generator(state, stream);
56  const uint16_t half_bits = static_cast<uint16_t>(rnd & 0x3ffu) | (static_cast<uint16_t>(15) << 10);
57  Eigen::half result = Eigen::numext::bit_cast<Eigen::half>(half_bits);
58  // Return the final result
59  return result - Eigen::half(1.0f);
60 }

References PCG_XSH_RS_generator().

◆ RandomToTypeUniform< float >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float Eigen::internal::RandomToTypeUniform< float > ( uint64_t *  state,
uint64_t  stream 
)
74  {
75  typedef union {
76  uint32_t raw;
77  float fp;
78  } internal;
79  internal result;
80  // Generate 23 random bits for the mantissa mantissa
81  const unsigned rnd = PCG_XSH_RS_generator(state, stream);
82  result.raw = rnd & 0x7fffffu;
83  // Set the exponent
84  result.raw |= (static_cast<uint32_t>(127) << 23);
85  // Return the final result
86  return result.fp - 1.0f;
87 }

References PCG_XSH_RS_generator().

Referenced by RandomToTypeUniform< std::complex< float > >().

◆ RandomToTypeUniform< std::complex< double > >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::complex<double> Eigen::internal::RandomToTypeUniform< std::complex< double > > ( uint64_t *  state,
uint64_t  stream 
)
116  {
117  return std::complex<double>(RandomToTypeUniform<double>(state, stream), RandomToTypeUniform<double>(state, stream));
118 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double RandomToTypeUniform< double >(uint64_t *state, uint64_t stream)
Definition: TensorRandom.h:90

References RandomToTypeUniform< double >().

◆ RandomToTypeUniform< std::complex< float > >()

template<>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::complex<float> Eigen::internal::RandomToTypeUniform< std::complex< float > > ( uint64_t *  state,
uint64_t  stream 
)
111  {
112  return std::complex<float>(RandomToTypeUniform<float>(state, stream), RandomToTypeUniform<float>(state, stream));
113 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float RandomToTypeUniform< float >(uint64_t *state, uint64_t stream)
Definition: TensorRandom.h:74

References RandomToTypeUniform< float >().

◆ rcond_estimate_helper()

template<typename Decomposition >
Decomposition::RealScalar Eigen::internal::rcond_estimate_helper ( typename Decomposition::RealScalar  matrix_norm,
const Decomposition &  dec 
)

Reciprocal condition number estimator.

Computing a decomposition of a dense matrix takes O(n^3) operations, while this method estimates the condition number quickly and reliably in O(n^2) operations.

Returns
an estimate of the reciprocal condition number (1 / (||matrix||_1 * ||inv(matrix)||_1)) of matrix, given ||matrix||_1 and its decomposition. Supports the following decompositions: FullPivLU, PartialPivLU, LDLT, and LLT.
See also
FullPivLU, PartialPivLU, LDLT, LLT.
158  {
159  typedef typename Decomposition::RealScalar RealScalar;
160  eigen_assert(dec.rows() == dec.cols());
161  if (dec.rows() == 0) return NumTraits<RealScalar>::infinity();
162  if (numext::is_exactly_zero(matrix_norm)) return RealScalar(0);
163  if (dec.rows() == 1) return RealScalar(1);
164  const RealScalar inverse_matrix_norm = rcond_invmatrix_L1_norm_estimate(dec);
165  return (numext::is_exactly_zero(inverse_matrix_norm) ? RealScalar(0)
166  : (RealScalar(1) / inverse_matrix_norm) / matrix_norm);
167 }
Decomposition::RealScalar rcond_invmatrix_L1_norm_estimate(const Decomposition &dec)
Definition: ConditionEstimator.h:59

References eigen_assert, Eigen::numext::is_exactly_zero(), and rcond_invmatrix_L1_norm_estimate().

Referenced by Eigen::LDLT< MatrixType_, UpLo_ >::rcond(), Eigen::LLT< MatrixType_, UpLo_ >::rcond(), Eigen::FullPivLU< MatrixType_, PermutationIndex_ >::rcond(), and Eigen::PartialPivLU< MatrixType_, PermutationIndex_ >::rcond().

◆ rcond_invmatrix_L1_norm_estimate()

template<typename Decomposition >
Decomposition::RealScalar Eigen::internal::rcond_invmatrix_L1_norm_estimate ( const Decomposition &  dec)
Returns
an estimate of ||inv(matrix)||_1 given a decomposition of matrix that implements .solve() and .adjoint().solve() methods.

This function implements Algorithms 4.1 and 5.1 from http://www.maths.manchester.ac.uk/~higham/narep/narep135.pdf which also forms the basis for the condition number estimators in LAPACK. Since at most 10 calls to the solve method of dec are performed, the total cost is O(dims^2), as opposed to O(dims^3) needed to compute the inverse matrix explicitly.

The most common usage is in estimating the condition number ||matrix||_1 * ||inv(matrix)||_1. The first term ||matrix||_1 can be computed directly in O(n^2) operations.

Supports the following decompositions: FullPivLU, PartialPivLU, LDLT, and LLT.

See also
FullPivLU, PartialPivLU, LDLT, LLT.
59  {
60  typedef typename Decomposition::MatrixType MatrixType;
61  typedef typename Decomposition::Scalar Scalar;
62  typedef typename Decomposition::RealScalar RealScalar;
65  const bool is_complex = (NumTraits<Scalar>::IsComplex != 0);
66 
67  eigen_assert(dec.rows() == dec.cols());
68  const Index n = dec.rows();
69  if (n == 0) return 0;
70 
71  // Disable Index to float conversion warning
72 #ifdef __INTEL_COMPILER
73 #pragma warning push
74 #pragma warning(disable : 2259)
75 #endif
76  Vector v = dec.solve(Vector::Ones(n) / Scalar(n));
77 #ifdef __INTEL_COMPILER
78 #pragma warning pop
79 #endif
80 
81  // lower_bound is a lower bound on
82  // ||inv(matrix)||_1 = sup_v ||inv(matrix) v||_1 / ||v||_1
83  // and is the objective maximized by the ("super-") gradient ascent
84  // algorithm below.
85  RealScalar lower_bound = v.template lpNorm<1>();
86  if (n == 1) return lower_bound;
87 
88  // Gradient ascent algorithm follows: We know that the optimum is achieved at
89  // one of the simplices v = e_i, so in each iteration we follow a
90  // super-gradient to move towards the optimal one.
91  RealScalar old_lower_bound = lower_bound;
92  Vector sign_vector(n);
93  Vector old_sign_vector;
94  Index v_max_abs_index = -1;
95  Index old_v_max_abs_index = v_max_abs_index;
96  for (int k = 0; k < 4; ++k) {
98  if (k > 0 && !is_complex && sign_vector == old_sign_vector) {
99  // Break if the solution stagnated.
100  break;
101  }
102  // v_max_abs_index = argmax |real( inv(matrix)^T * sign_vector )|
103  v = dec.adjoint().solve(sign_vector);
104  v.real().cwiseAbs().maxCoeff(&v_max_abs_index);
105  if (v_max_abs_index == old_v_max_abs_index) {
106  // Break if the solution stagnated.
107  break;
108  }
109  // Move to the new simplex e_j, where j = v_max_abs_index.
110  v = dec.solve(Vector::Unit(n, v_max_abs_index)); // v = inv(matrix) * e_j.
111  lower_bound = v.template lpNorm<1>();
112  if (lower_bound <= old_lower_bound) {
113  // Break if the gradient step did not increase the lower_bound.
114  break;
115  }
116  if (!is_complex) {
117  old_sign_vector = sign_vector;
118  }
119  old_v_max_abs_index = v_max_abs_index;
120  old_lower_bound = lower_bound;
121  }
122  // The following calculates an independent estimate of ||matrix||_1 by
123  // multiplying matrix by a vector with entries of slowly increasing
124  // magnitude and alternating sign:
125  // v_i = (-1)^{i} (1 + (i / (dim-1))), i = 0,...,dim-1.
126  // This improvement to Hager's algorithm above is due to Higham. It was
127  // added to make the algorithm more robust in certain corner cases where
128  // large elements in the matrix might otherwise escape detection due to
129  // exact cancellation (especially when op and op_adjoint correspond to a
130  // sequence of backsubstitutions and permutations), which could cause
131  // Hager's algorithm to vastly underestimate ||matrix||_1.
132  Scalar alternating_sign(RealScalar(1));
133  for (Index i = 0; i < n; ++i) {
134  // The static_cast is needed when Scalar is a complex and RealScalar implements expression templates
135  v[i] = alternating_sign * static_cast<RealScalar>(RealScalar(1) + (RealScalar(i) / (RealScalar(n - 1))));
136  alternating_sign = -alternating_sign;
137  }
138  v = dec.solve(v);
139  const RealScalar alternate_lower_bound = (2 * v.template lpNorm<1>()) / (3 * RealScalar(n));
140  return numext::maxi(lower_bound, alternate_lower_bound);
141 }
Matrix< Type, Size, 1 > Vector
\cpp11 Size×1 vector of type Type.
Definition: Eigen/Eigen/src/Core/Matrix.h:515
@ IsComplex
Definition: NumTraits.h:176

References eigen_assert, i, k, Eigen::numext::maxi(), n, Eigen::internal::rcond_compute_sign< Vector, RealVector, IsComplex >::run(), and v.

Referenced by rcond_estimate_helper().

◆ real_2x2_jacobi_svd()

template<typename MatrixType , typename RealScalar , typename Index >
void Eigen::internal::real_2x2_jacobi_svd ( const MatrixType matrix,
Index  p,
Index  q,
JacobiRotation< RealScalar > *  j_left,
JacobiRotation< RealScalar > *  j_right 
)
23  {
24  using std::abs;
25  using std::sqrt;
26  Matrix<RealScalar, 2, 2> m;
27  m << numext::real(matrix.coeff(p, p)), numext::real(matrix.coeff(p, q)), numext::real(matrix.coeff(q, p)),
28  numext::real(matrix.coeff(q, q));
29  JacobiRotation<RealScalar> rot1;
30  RealScalar t = m.coeff(0, 0) + m.coeff(1, 1);
31  RealScalar d = m.coeff(1, 0) - m.coeff(0, 1);
32 
34  rot1.s() = RealScalar(0);
35  rot1.c() = RealScalar(1);
36  } else {
37  // If d!=0, then t/d cannot overflow because the magnitude of the
38  // entries forming d are not too small compared to the ones forming t.
39  RealScalar u = t / d;
41  rot1.s() = RealScalar(1) / tmp;
42  rot1.c() = u / tmp;
43  }
44  m.applyOnTheLeft(0, 1, rot1);
45  j_right->makeJacobi(m, 0, 1);
46  *j_left = rot1 * j_right->transpose();
47 }

References abs(), Eigen::numext::abs2(), Eigen::JacobiRotation< Scalar >::c(), m, Eigen::JacobiRotation< Scalar >::makeJacobi(), matrix(), min, p, Eigen::numext::q, Eigen::JacobiRotation< Scalar >::s(), sqrt(), plotPSD::t, tmp, and Eigen::JacobiRotation< Scalar >::transpose().

Referenced by Eigen::RealQZ< MatrixType_ >::compute(), and Eigen::JacobiSVD< MatrixType_, Options_ >::compute_impl().

◆ ReducePacket()

template<typename Self >
EIGEN_STRONG_INLINE void Eigen::internal::ReducePacket ( Self &  self,
Index  offset,
typename Self::CoeffReturnType *  data 
)
110  {
111  using Scalar = typename Self::CoeffReturnType;
112  using Packet = typename Self::PacketReturnType;
113  // Compute the scan along the axis, starting at the calculated offset
114  Packet accum = self.accumulator().template initializePacket<Packet>();
115  if (self.stride() == 1) {
116  if (self.exclusive()) {
117  for (Index curr = offset; curr < offset + self.size(); ++curr) {
118  internal::pstoreu<Scalar, Packet>(data + curr, self.accumulator().finalizePacket(accum));
119  self.accumulator().reducePacket(self.inner().template packet<Unaligned>(curr), &accum);
120  }
121  } else {
122  for (Index curr = offset; curr < offset + self.size(); ++curr) {
123  self.accumulator().reducePacket(self.inner().template packet<Unaligned>(curr), &accum);
124  internal::pstoreu<Scalar, Packet>(data + curr, self.accumulator().finalizePacket(accum));
125  }
126  }
127  } else {
128  if (self.exclusive()) {
129  for (Index idx3 = 0; idx3 < self.size(); idx3++) {
130  const Index curr = offset + idx3 * self.stride();
131  internal::pstoreu<Scalar, Packet>(data + curr, self.accumulator().finalizePacket(accum));
132  self.accumulator().reducePacket(self.inner().template packet<Unaligned>(curr), &accum);
133  }
134  } else {
135  for (Index idx3 = 0; idx3 < self.size(); idx3++) {
136  const Index curr = offset + idx3 * self.stride();
137  self.accumulator().reducePacket(self.inner().template packet<Unaligned>(curr), &accum);
138  internal::pstoreu<Scalar, Packet>(data + curr, self.accumulator().finalizePacket(accum));
139  }
140  }
141  }
142 }

References data.

Referenced by Eigen::internal::ReduceBlock< Self, true, false >::operator()().

◆ ReduceScalar()

template<typename Self >
EIGEN_STRONG_INLINE void Eigen::internal::ReduceScalar ( Self &  self,
Index  offset,
typename Self::CoeffReturnType *  data 
)
77  {
78  // Compute the scan along the axis, starting at the given offset
79  typename Self::CoeffReturnType accum = self.accumulator().initialize();
80  if (self.stride() == 1) {
81  if (self.exclusive()) {
82  for (Index curr = offset; curr < offset + self.size(); ++curr) {
83  data[curr] = self.accumulator().finalize(accum);
84  self.accumulator().reduce(self.inner().coeff(curr), &accum);
85  }
86  } else {
87  for (Index curr = offset; curr < offset + self.size(); ++curr) {
88  self.accumulator().reduce(self.inner().coeff(curr), &accum);
89  data[curr] = self.accumulator().finalize(accum);
90  }
91  }
92  } else {
93  if (self.exclusive()) {
94  for (Index idx3 = 0; idx3 < self.size(); idx3++) {
95  Index curr = offset + idx3 * self.stride();
96  data[curr] = self.accumulator().finalize(accum);
97  self.accumulator().reduce(self.inner().coeff(curr), &accum);
98  }
99  } else {
100  for (Index idx3 = 0; idx3 < self.size(); idx3++) {
101  Index curr = offset + idx3 * self.stride();
102  self.accumulator().reduce(self.inner().coeff(curr), &accum);
103  data[curr] = self.accumulator().finalize(accum);
104  }
105  }
106  }
107 }

References data.

Referenced by Eigen::internal::ReduceBlock< Self, Vectorize, Parallel >::operator()(), and Eigen::internal::ReduceBlock< Self, true, false >::operator()().

◆ repeat()

◆ resize_if_allowed() [1/2]

template<typename DstXprType , typename SrcXprType , typename Functor >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::resize_if_allowed ( DstXprType &  dst,
const SrcXprType &  src,
const Functor  
)

◆ resize_if_allowed() [2/2]

template<typename DstXprType , typename SrcXprType , typename T1 , typename T2 >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::resize_if_allowed ( DstXprType &  dst,
const SrcXprType &  src,
const internal::assign_op< T1, T2 > &   
)
712  {
713  Index dstRows = src.rows();
714  Index dstCols = src.cols();
715  if (((dst.rows() != dstRows) || (dst.cols() != dstCols))) dst.resize(dstRows, dstCols);
716  eigen_assert(dst.rows() == dstRows && dst.cols() == dstCols);
717 }

References eigen_assert.

◆ return_ptr()

template<typename T >
const T* Eigen::internal::return_ptr ( )

◆ returnUnsignedIndexValue()

template<typename IndexType >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE make_unsigned<IndexType>::type Eigen::internal::returnUnsignedIndexValue ( const IndexType &  idx)
24  {
25  EIGEN_STATIC_ASSERT((NumTraits<IndexType>::IsInteger), THIS FUNCTION IS FOR INTEGER TYPES)
26  eigen_internal_assert(idx >= 0 && "Index value is negative and target type is unsigned");
27  using UnsignedType = typename make_unsigned<IndexType>::type;
28  return static_cast<UnsignedType>(idx);
29 }

References eigen_internal_assert, EIGEN_STATIC_ASSERT, and compute_granudrum_aor::type.

Referenced by Eigen::internal::convert_index_impl< IndexDest, IndexSrc, true, true, true, false >::run(), and Eigen::internal::convert_index_impl< IndexDest, IndexSrc, true, false, true, true >::run().

◆ run_serialized() [1/2]

template<typename Kernel , typename... Args>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::run_serialized ( Kernel  kernel,
uint8_t *  buffer,
size_t  capacity 
)
166  {
167  run_serialized<Kernel, Args...>(std::make_index_sequence<sizeof...(Args)>{}, extract_output_indices<Args...>{},
168  kernel, buffer, capacity);
169 }
typename extract_output_indices_helper< sizeof...(Types), 0, std::index_sequence<>, Types... >::type extract_output_indices
Definition: gpu_test_helper.h:80
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run_serialized(Kernel kernel, uint8_t *buffer, size_t capacity)
Definition: gpu_test_helper.h:166

◆ run_serialized() [2/2]

template<typename Kernel , typename... Args, size_t... Indices, size_t... OutputIndices>
EIGEN_DEVICE_FUNC void Eigen::internal::run_serialized ( std::index_sequence< Indices... >  ,
std::index_sequence< OutputIndices... >  ,
Kernel  kernel,
uint8_t *  buffer,
size_t  capacity 
)
128  {
129  using test_detail::get;
131  using test_detail::tuple;
132  // Deserialize input size and inputs.
133  size_t input_size;
134  const uint8_t* read_ptr = buffer;
135  const uint8_t* read_end = buffer + capacity;
136  read_ptr = Eigen::deserialize(read_ptr, read_end, input_size);
137  // Create value-type instances to populate.
138  auto args = make_tuple(typename std::decay<Args>::type{}...);
139  EIGEN_UNUSED_VARIABLE(args) // Avoid NVCC compile warning.
140  // NVCC 9.1 requires us to spell out the template parameters explicitly.
141  read_ptr = Eigen::deserialize(read_ptr, read_end, get<Indices, typename std::decay<Args>::type...>(args)...);
142 
143  // Call function, with void->Void conversion so we are guaranteed a complete
144  // output type.
145  auto result = void_helper::call(kernel, get<Indices, typename std::decay<Args>::type...>(args)...);
146 
147  // Determine required output size.
148  size_t output_size = Eigen::serialize_size(capacity);
149  output_size += Eigen::serialize_size(get<OutputIndices, typename std::decay<Args>::type...>(args)...);
150  output_size += Eigen::serialize_size(result);
151 
152  // Always serialize required buffer size.
153  uint8_t* write_ptr = buffer;
154  uint8_t* write_end = buffer + capacity;
155  write_ptr = Eigen::serialize(write_ptr, write_end, output_size);
156  // Null `write_ptr` can be safely passed along.
157  // Serialize outputs if they fit in the buffer.
158  if (output_size <= capacity) {
159  // Collect outputs and result.
160  write_ptr = Eigen::serialize(write_ptr, write_end, get<OutputIndices, typename std::decay<Args>::type...>(args)...);
161  write_ptr = Eigen::serialize(write_ptr, write_end, result);
162  }
163 }
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ReturnType make_tuple(Args &&... args)
Definition: Tuple.h:250
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const uint8_t * deserialize(const uint8_t *src, const uint8_t *end, Args &... args)
Definition: Serializer.h:201
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE size_t serialize_size(const Args &... args)
Definition: Serializer.h:175
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE uint8_t * serialize(uint8_t *dest, uint8_t *end, const Args &... args)
Definition: Serializer.h:188

References compute_granudrum_aor::args, Eigen::deserialize(), EIGEN_UNUSED_VARIABLE, get(), Eigen::internal::tuple_impl::make_tuple(), Eigen::serialize(), Eigen::serialize_size(), and compute_granudrum_aor::type.

◆ rwupdt()

template<typename Scalar >
void Eigen::internal::rwupdt ( Matrix< Scalar, Dynamic, Dynamic > &  r,
const Matrix< Scalar, Dynamic, 1 > &  w,
Matrix< Scalar, Dynamic, 1 > &  b,
Scalar  alpha 
)
10  {
11  typedef DenseIndex Index;
12 
13  const Index n = r.cols();
14  eigen_assert(r.rows() >= n);
15  std::vector<JacobiRotation<Scalar> > givens(n);
16 
17  /* Local variables */
18  Scalar temp, rowj;
19 
20  /* Function Body */
21  for (Index j = 0; j < n; ++j) {
22  rowj = w[j];
23 
24  /* apply the previous transformations to */
25  /* r(i,j), i=0,1,...,j-1, and to w(j). */
26  for (Index i = 0; i < j; ++i) {
27  temp = givens[i].c() * r(i, j) + givens[i].s() * rowj;
28  rowj = -givens[i].s() * r(i, j) + givens[i].c() * rowj;
29  r(i, j) = temp;
30  }
31 
32  /* determine a givens rotation which eliminates w(j). */
33  givens[j].makeGivens(-r(j, j), rowj);
34 
35  if (rowj == 0.) continue; // givens[j] is identity
36 
37  /* apply the current transformation to r(j,j), b(j), and alpha. */
38  r(j, j) = givens[j].c() * r(j, j) + givens[j].s() * rowj;
39  temp = givens[j].c() * b[j] + givens[j].s() * alpha;
40  alpha = -givens[j].s() * b[j] + givens[j].c() * alpha;
41  b[j] = temp;
42  }
43 }

References alpha, b, eigen_assert, i, j, n, UniformPSDSelfTest::r, and w.

◆ set_from_triplets()

template<typename InputIterator , typename SparseMatrixType , typename DupFunctor >
void Eigen::internal::set_from_triplets ( const InputIterator &  begin,
const InputIterator &  end,
SparseMatrixType &  mat,
DupFunctor  dup_func 
)
1128  {
1129  constexpr bool IsRowMajor = SparseMatrixType::IsRowMajor;
1130  using StorageIndex = typename SparseMatrixType::StorageIndex;
1131  using IndexMap = typename VectorX<StorageIndex>::AlignedMapType;
1132  using TransposedSparseMatrix =
1133  SparseMatrix<typename SparseMatrixType::Scalar, IsRowMajor ? ColMajor : RowMajor, StorageIndex>;
1134 
1135  if (begin == end) return;
1136 
1137  // There are two strategies to consider for constructing a matrix from unordered triplets:
1138  // A) construct the 'mat' in its native storage order and sort in-place (less memory); or,
1139  // B) construct the transposed matrix and use an implicit sort upon assignment to `mat` (less time).
1140  // This routine uses B) for faster execution time.
1141  TransposedSparseMatrix trmat(mat.rows(), mat.cols());
1142 
1143  // scan triplets to determine allocation size before constructing matrix
1144  Index nonZeros = 0;
1145  for (InputIterator it(begin); it != end; ++it) {
1146  eigen_assert(it->row() >= 0 && it->row() < mat.rows() && it->col() >= 0 && it->col() < mat.cols());
1147  StorageIndex j = convert_index<StorageIndex>(IsRowMajor ? it->col() : it->row());
1148  if (nonZeros == NumTraits<StorageIndex>::highest()) internal::throw_std_bad_alloc();
1149  trmat.outerIndexPtr()[j + 1]++;
1150  nonZeros++;
1151  }
1152 
1153  std::partial_sum(trmat.outerIndexPtr(), trmat.outerIndexPtr() + trmat.outerSize() + 1, trmat.outerIndexPtr());
1154  eigen_assert(nonZeros == trmat.outerIndexPtr()[trmat.outerSize()]);
1155  trmat.resizeNonZeros(nonZeros);
1156 
1157  // construct temporary array to track insertions (outersize) and collapse duplicates (innersize)
1159  smart_copy(trmat.outerIndexPtr(), trmat.outerIndexPtr() + trmat.outerSize(), tmp);
1160 
1161  // push triplets to back of each vector
1162  for (InputIterator it(begin); it != end; ++it) {
1163  StorageIndex j = convert_index<StorageIndex>(IsRowMajor ? it->col() : it->row());
1164  StorageIndex i = convert_index<StorageIndex>(IsRowMajor ? it->row() : it->col());
1165  StorageIndex k = tmp[j];
1166  trmat.data().index(k) = i;
1167  trmat.data().value(k) = it->value();
1168  tmp[j]++;
1169  }
1170 
1171  IndexMap wi(tmp, trmat.innerSize());
1172  trmat.collapseDuplicates(wi, dup_func);
1173  // implicit sorting
1174  mat = trmat;
1175 }
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:96
constexpr EIGEN_DEVICE_FUNC const Scalar * data() const
Definition: PlainObjectBase.h:273
Index outerSize() const
Definition: SparseMatrix.h:166
Index innerSize() const
Definition: SparseMatrix.h:164
EIGEN_DEVICE_FUNC void smart_copy(const T *start, const T *end, T *target)
Definition: Memory.h:569

References Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), Eigen::PlainObjectBase< Derived >::data(), ei_declare_aligned_stack_constructed_variable, eigen_assert, Eigen::placeholders::end, i, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::innerSize(), j, k, Eigen::numext::maxi(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::outerSize(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), smart_copy(), throw_std_bad_alloc(), and tmp.

Referenced by insert_from_triplets().

◆ set_from_triplets_sorted()

template<typename InputIterator , typename SparseMatrixType , typename DupFunctor >
void Eigen::internal::set_from_triplets_sorted ( const InputIterator &  begin,
const InputIterator &  end,
SparseMatrixType &  mat,
DupFunctor  dup_func 
)
1180  {
1181  constexpr bool IsRowMajor = SparseMatrixType::IsRowMajor;
1182  using StorageIndex = typename SparseMatrixType::StorageIndex;
1183 
1184  if (begin == end) return;
1185 
1186  constexpr StorageIndex kEmptyIndexValue(-1);
1187  // deallocate inner nonzeros if present and zero outerIndexPtr
1188  mat.resize(mat.rows(), mat.cols());
1189  // use outer indices to count non zero entries (excluding duplicate entries)
1190  StorageIndex previous_j = kEmptyIndexValue;
1191  StorageIndex previous_i = kEmptyIndexValue;
1192  // scan triplets to determine allocation size before constructing matrix
1193  Index nonZeros = 0;
1194  for (InputIterator it(begin); it != end; ++it) {
1195  eigen_assert(it->row() >= 0 && it->row() < mat.rows() && it->col() >= 0 && it->col() < mat.cols());
1196  StorageIndex j = convert_index<StorageIndex>(IsRowMajor ? it->row() : it->col());
1197  StorageIndex i = convert_index<StorageIndex>(IsRowMajor ? it->col() : it->row());
1198  eigen_assert(j > previous_j || (j == previous_j && i >= previous_i));
1199  // identify duplicates by examining previous location
1200  bool duplicate = (previous_j == j) && (previous_i == i);
1201  if (!duplicate) {
1202  if (nonZeros == NumTraits<StorageIndex>::highest()) internal::throw_std_bad_alloc();
1203  nonZeros++;
1204  mat.outerIndexPtr()[j + 1]++;
1205  previous_j = j;
1206  previous_i = i;
1207  }
1208  }
1209 
1210  // finalize outer indices and allocate memory
1211  std::partial_sum(mat.outerIndexPtr(), mat.outerIndexPtr() + mat.outerSize() + 1, mat.outerIndexPtr());
1212  eigen_assert(nonZeros == mat.outerIndexPtr()[mat.outerSize()]);
1213  mat.resizeNonZeros(nonZeros);
1214 
1215  previous_i = kEmptyIndexValue;
1216  previous_j = kEmptyIndexValue;
1217  Index back = 0;
1218  for (InputIterator it(begin); it != end; ++it) {
1219  StorageIndex j = convert_index<StorageIndex>(IsRowMajor ? it->row() : it->col());
1220  StorageIndex i = convert_index<StorageIndex>(IsRowMajor ? it->col() : it->row());
1221  bool duplicate = (previous_j == j) && (previous_i == i);
1222  if (duplicate) {
1223  mat.data().value(back - 1) = dup_func(mat.data().value(back - 1), it->value());
1224  } else {
1225  // push triplets to back
1226  mat.data().index(back) = i;
1227  mat.data().value(back) = it->value();
1228  previous_j = j;
1229  previous_i = i;
1230  back++;
1231  }
1232  }
1233  eigen_assert(back == nonZeros);
1234  // matrix is finalized
1235 }
void resize(Index rows, Index cols)
Definition: SparseMatrix.h:734
void resizeNonZeros(Index size)
Definition: SparseMatrix.h:754
constexpr Storage & data()
Definition: SparseMatrix.h:205
Scalar & value(Index i)
Definition: CompressedStorage.h:103
StorageIndex & index(Index i)
Definition: CompressedStorage.h:112

References Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::data(), eigen_assert, Eigen::placeholders::end, i, Eigen::internal::CompressedStorage< Scalar_, StorageIndex_ >::index(), j, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::outerIndexPtr(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::outerSize(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::resize(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::resizeNonZeros(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), throw_std_bad_alloc(), and Eigen::internal::CompressedStorage< Scalar_, StorageIndex_ >::value().

Referenced by insert_from_triplets_sorted().

◆ should_svd_compute_full_u()

constexpr bool Eigen::internal::should_svd_compute_full_u ( int  options)
constexpr
37 { return (options & ComputeFullU) != 0; }

References Eigen::ComputeFullU.

Referenced by Eigen::SVDBase< Derived >::allocate().

◆ should_svd_compute_full_v()

constexpr bool Eigen::internal::should_svd_compute_full_v ( int  options)
constexpr
39 { return (options & ComputeFullV) != 0; }

References Eigen::ComputeFullV.

Referenced by Eigen::SVDBase< Derived >::allocate().

◆ should_svd_compute_thin_u()

constexpr bool Eigen::internal::should_svd_compute_thin_u ( int  options)
constexpr
36 { return (options & ComputeThinU) != 0; }

References Eigen::ComputeThinU.

Referenced by Eigen::SVDBase< Derived >::allocate(), and check_svd_options_assertions().

◆ should_svd_compute_thin_v()

constexpr bool Eigen::internal::should_svd_compute_thin_v ( int  options)
constexpr
38 { return (options & ComputeThinV) != 0; }

References Eigen::ComputeThinV.

Referenced by Eigen::SVDBase< Derived >::allocate(), and check_svd_options_assertions().

◆ shuffle()

◆ shuffle1()

EIGEN_STRONG_INLINE Packet4f Eigen::internal::shuffle1 ( const Packet4f m,
int  mask 
)
97  {
98  const float* a = reinterpret_cast<const float*>(&m);
99  Packet4f res =
100  make_packet4f(*(a + (mask & 3)), *(a + ((mask >> 2) & 3)), *(a + ((mask >> 4) & 3)), *(a + ((mask >> 6) & 3)));
101  return res;
102 }

References a, m, make_packet4f(), and res.

Referenced by vec4f_swizzle1().

◆ shuffle2()

template<bool interleave>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::shuffle2 ( const Packet4f m,
const Packet4f n,
int  mask 
)
105  {
106  const float* a = reinterpret_cast<const float*>(&m);
107  const float* b = reinterpret_cast<const float*>(&n);
108  Packet4f res =
109  make_packet4f(*(a + (mask & 3)), *(a + ((mask >> 2) & 3)), *(b + ((mask >> 4) & 3)), *(b + ((mask >> 6) & 3)));
110  return res;
111 }

References a, b, m, make_packet4f(), n, and res.

Referenced by test_shuffling_as_value().

◆ shuffle2< true >()

template<>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::shuffle2< true > ( const Packet4f m,
const Packet4f n,
int  mask 
)
114  {
115  const float* a = reinterpret_cast<const float*>(&m);
116  const float* b = reinterpret_cast<const float*>(&n);
117  Packet4f res =
118  make_packet4f(*(a + (mask & 3)), *(b + ((mask >> 2) & 3)), *(a + ((mask >> 4) & 3)), *(b + ((mask >> 6) & 3)));
119  return res;
120 }

References a, b, m, make_packet4f(), n, and res.

Referenced by vec4f_unpackhi(), and vec4f_unpacklo().

◆ size_at_compile_time()

constexpr int Eigen::internal::size_at_compile_time ( int  rows,
int  cols 
)
inlineconstexpr
373  {
374  if (rows == 0 || cols == 0) return 0;
375  if (rows == Dynamic || cols == Dynamic) return Dynamic;
376  return rows * cols;
377 }

References cols, Eigen::Dynamic, and rows.

◆ smart_copy()

template<typename T >
EIGEN_DEVICE_FUNC void Eigen::internal::smart_copy ( const T start,
const T end,
T target 
)
569  {
570  smart_copy_helper<T, !NumTraits<T>::RequireInitialization>::run(start, end, target);
571 }

References Eigen::placeholders::end, Eigen::run(), and oomph::CumulativeTimings::start().

Referenced by Eigen::internal::DenseStorage_impl< T, Size, Dynamic, Cols, Options >::DenseStorage_impl(), Eigen::internal::DenseStorage_impl< T, Size, Rows, Dynamic, Options >::DenseStorage_impl(), Eigen::internal::DenseStorage_impl< T, Size, Dynamic, Dynamic, Options >::DenseStorage_impl(), Eigen::internal::DenseStorage_impl< T, Dynamic, Dynamic, Cols, Options >::DenseStorage_impl(), Eigen::internal::DenseStorage_impl< T, Dynamic, Rows, Dynamic, Options >::DenseStorage_impl(), Eigen::internal::DenseStorage_impl< T, Dynamic, Dynamic, Dynamic, Options >::DenseStorage_impl(), Eigen::internal::CompressedStorage< Scalar_, StorageIndex_ >::operator=(), Eigen::internal::DenseStorage_impl< T, Size, Dynamic, Cols, Options >::operator=(), Eigen::internal::DenseStorage_impl< T, Size, Rows, Dynamic, Options >::operator=(), Eigen::internal::DenseStorage_impl< T, Size, Dynamic, Dynamic, Options >::operator=(), Eigen::internal::DenseStorage_impl< T, Dynamic, Dynamic, Cols, Options >::operator=(), Eigen::internal::DenseStorage_impl< T, Dynamic, Rows, Dynamic, Options >::operator=(), Eigen::internal::DenseStorage_impl< T, Dynamic, Dynamic, Dynamic, Options >::operator=(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::operator=(), Eigen::internal::sparse_matrix_block_impl< SparseMatrixType, BlockRows, BlockCols >::operator=(), Eigen::internal::permutation_matrix_product< ExpressionType, Side, Transposed, SparseShape >::permute_inner(), Eigen::internal::permutation_matrix_product< ExpressionType, Side, Transposed, SparseShape >::permute_outer(), set_from_triplets(), swap_plain_array(), and Eigen::TensorStorage< T, DSizes< IndexType, NumIndices_ >, Options_ >::TensorStorage().

◆ smart_memmove()

◆ smart_move()

template<typename T >
EIGEN_DEVICE_FUNC T* Eigen::internal::smart_move ( T start,
T end,
T target 
)
621  {
622  return std::move(start, end, target);
623 }

References Eigen::placeholders::end, and oomph::CumulativeTimings::start().

◆ solve_sparse_through_dense_panels() [1/2]

template<typename Decomposition , typename Rhs , typename Dest >
std::enable_if_t<Rhs::ColsAtCompileTime != 1 && Dest::ColsAtCompileTime != 1> Eigen::internal::solve_sparse_through_dense_panels ( const Decomposition &  dec,
const Rhs rhs,
Dest &  dest 
)

Helper functions to solve with a sparse right-hand-side and result. The rhs is decomposed into small vertical panels which are solved through dense temporaries.

26  {
27  EIGEN_STATIC_ASSERT((Dest::Flags & RowMajorBit) == 0, THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
28  typedef typename Dest::Scalar DestScalar;
29  // we process the sparse rhs per block of NbColsAtOnce columns temporarily stored into a dense matrix.
30  static const Index NbColsAtOnce = 4;
31  Index rhsCols = rhs.cols();
32  Index size = rhs.rows();
33  // the temporary matrices do not need more columns than NbColsAtOnce:
34  Index tmpCols = (std::min)(rhsCols, NbColsAtOnce);
37  for (Index k = 0; k < rhsCols; k += NbColsAtOnce) {
38  Index actualCols = std::min<Index>(rhsCols - k, NbColsAtOnce);
39  tmp.leftCols(actualCols) = rhs.middleCols(k, actualCols);
40  tmpX.leftCols(actualCols) = dec.solve(tmp.leftCols(actualCols));
41  dest.middleCols(k, actualCols) = tmpX.leftCols(actualCols).sparseView();
42  }
43 }

References EIGEN_STATIC_ASSERT, k, min, Eigen::RowMajorBit, size, and tmp.

Referenced by Eigen::SimplicialCholeskyBase< Derived >::_solve_impl(), Eigen::SimplicialCholesky< MatrixType_, UpLo_, Ordering_ >::_solve_impl(), and Eigen::SparseSolverBase< Derived >::_solve_impl().

◆ solve_sparse_through_dense_panels() [2/2]

template<typename Decomposition , typename Rhs , typename Dest >
std::enable_if_t<Rhs::ColsAtCompileTime == 1 || Dest::ColsAtCompileTime == 1> Eigen::internal::solve_sparse_through_dense_panels ( const Decomposition &  dec,
const Rhs rhs,
Dest &  dest 
)
48  {
49  typedef typename Dest::Scalar DestScalar;
50  Index size = rhs.rows();
53  dest_dense = dec.solve(rhs_dense);
54  dest = dest_dense.sparseView();
55 }

References size.

◆ sortWithPermutation()

template<typename VectorType , typename IndexType >
void Eigen::internal::sortWithPermutation ( VectorType vec,
IndexType &  perm,
typename IndexType::Scalar ncut 
)

Computes a permutation vector to have a sorted sequence.

Parameters
vecThe vector to reorder.
permgives the sorted sequence on output. Must be initialized with 0..n-1
ncutPut the ncut smallest elements at the end of the vector WARNING This is an expensive sort, so should be used only for small size vectors TODO Use modified QuickSplit or std::nth_element to get the smallest values
40  {
41  eigen_assert(vec.size() == perm.size());
42  bool flag;
43  for (Index k = 0; k < ncut; k++) {
44  flag = false;
45  for (Index j = 0; j < vec.size() - 1; j++) {
46  if (vec(perm(j)) < vec(perm(j + 1))) {
47  std::swap(perm(j), perm(j + 1));
48  flag = true;
49  }
50  if (!flag) break; // The vector is in sorted order
51  }
52  }
53 }

References eigen_assert, j, k, and swap().

Referenced by Eigen::DGMRES< MatrixType_, Preconditioner_ >::dgmresComputeDeflationData().

◆ sparse_selfadjoint_time_dense_product()

template<int Mode, typename SparseLhsType , typename DenseRhsType , typename DenseResType , typename AlphaType >
void Eigen::internal::sparse_selfadjoint_time_dense_product ( const SparseLhsType &  lhs,
const DenseRhsType &  rhs,
DenseResType &  res,
const AlphaType &  alpha 
)
inline
277  {
279 
281  typedef internal::remove_all_t<SparseLhsTypeNested> SparseLhsTypeNestedCleaned;
282  typedef evaluator<SparseLhsTypeNestedCleaned> LhsEval;
283  typedef typename LhsEval::InnerIterator LhsIterator;
284  typedef typename SparseLhsType::Scalar LhsScalar;
285 
286  enum {
287  LhsIsRowMajor = (LhsEval::Flags & RowMajorBit) == RowMajorBit,
288  ProcessFirstHalf = ((Mode & (Upper | Lower)) == (Upper | Lower)) || ((Mode & Upper) && !LhsIsRowMajor) ||
289  ((Mode & Lower) && LhsIsRowMajor),
290  ProcessSecondHalf = !ProcessFirstHalf
291  };
292 
293  SparseLhsTypeNested lhs_nested(lhs);
294  LhsEval lhsEval(lhs_nested);
295 
296  // work on one column at once
297  for (Index k = 0; k < rhs.cols(); ++k) {
298  for (Index j = 0; j < lhs.outerSize(); ++j) {
299  LhsIterator i(lhsEval, j);
300  // handle diagonal coeff
301  if (ProcessSecondHalf) {
302  while (i && i.index() < j) ++i;
303  if (i && i.index() == j) {
304  res.coeffRef(j, k) += alpha * i.value() * rhs.coeff(j, k);
305  ++i;
306  }
307  }
308 
309  // premultiplied rhs for scatters
310  typename ScalarBinaryOpTraits<AlphaType, typename DenseRhsType::Scalar>::ReturnType rhs_j(alpha * rhs(j, k));
311  // accumulator for partial scalar product
312  typename DenseResType::Scalar res_j(0);
313  for (; (ProcessFirstHalf ? i && i.index() < j : i); ++i) {
314  LhsScalar lhs_ij = i.value();
315  if (!LhsIsRowMajor) lhs_ij = numext::conj(lhs_ij);
316  res_j += lhs_ij * rhs.coeff(i.index(), k);
317  res(i.index(), k) += numext::conj(lhs_ij) * rhs_j;
318  }
319  res.coeffRef(j, k) += alpha * res_j;
320 
321  // handle diagonal coeff
322  if (ProcessFirstHalf && i && (i.index() == j)) res.coeffRef(j, k) += alpha * i.value() * rhs.coeff(j, k);
323  }
324  }
325 }

References alpha, conj(), EIGEN_ONLY_USED_FOR_DEBUG, i, j, k, Eigen::Lower, res, Eigen::RowMajorBit, and Eigen::Upper.

◆ sparse_sparse_product_with_pruning_impl()

template<typename Lhs , typename Rhs , typename ResultType >
static void Eigen::internal::sparse_sparse_product_with_pruning_impl ( const Lhs lhs,
const Rhs rhs,
ResultType &  res,
const typename ResultType::RealScalar tolerance 
)
static
23  {
24  // return sparse_sparse_product_with_pruning_impl2(lhs,rhs,res);
25 
26  typedef typename remove_all_t<Rhs>::Scalar RhsScalar;
27  typedef typename remove_all_t<ResultType>::Scalar ResScalar;
28  typedef typename remove_all_t<Lhs>::StorageIndex StorageIndex;
29 
30  // make sure to call innerSize/outerSize since we fake the storage order.
31  Index rows = lhs.innerSize();
32  Index cols = rhs.outerSize();
33  // Index size = lhs.outerSize();
34  eigen_assert(lhs.outerSize() == rhs.innerSize());
35 
36  // allocate a temporary buffer
37  AmbiVector<ResScalar, StorageIndex> tempVector(rows);
38 
39  // mimics a resizeByInnerOuter:
40  if (ResultType::IsRowMajor)
41  res.resize(cols, rows);
42  else
43  res.resize(rows, cols);
44 
45  evaluator<Lhs> lhsEval(lhs);
46  evaluator<Rhs> rhsEval(rhs);
47 
48  // estimate the number of non zero entries
49  // given a rhs column containing Y non zeros, we assume that the respective Y columns
50  // of the lhs differs in average of one non zeros, thus the number of non zeros for
51  // the product of a rhs column with the lhs is X+Y where X is the average number of non zero
52  // per column of the lhs.
53  // Therefore, we have nnz(lhs*rhs) = nnz(lhs) + nnz(rhs)
54  Index estimated_nnz_prod = lhsEval.nonZerosEstimate() + rhsEval.nonZerosEstimate();
55 
56  res.reserve(estimated_nnz_prod);
57  double ratioColRes = double(estimated_nnz_prod) / (double(lhs.rows()) * double(rhs.cols()));
58  for (Index j = 0; j < cols; ++j) {
59  // FIXME:
60  // double ratioColRes = (double(rhs.innerVector(j).nonZeros()) +
61  // double(lhs.nonZeros())/double(lhs.cols()))/double(lhs.rows());
62  // let's do a more accurate determination of the nnz ratio for the current column j of res
63  tempVector.init(ratioColRes);
64  tempVector.setZero();
65  for (typename evaluator<Rhs>::InnerIterator rhsIt(rhsEval, j); rhsIt; ++rhsIt) {
66  // FIXME should be written like this: tmp += rhsIt.value() * lhs.col(rhsIt.index())
67  tempVector.restart();
68  RhsScalar x = rhsIt.value();
69  for (typename evaluator<Lhs>::InnerIterator lhsIt(lhsEval, rhsIt.index()); lhsIt; ++lhsIt) {
70  tempVector.coeffRef(lhsIt.index()) += lhsIt.value() * x;
71  }
72  }
73  res.startVec(j);
74  for (typename AmbiVector<ResScalar, StorageIndex>::Iterator it(tempVector, tolerance); it; ++it)
75  res.insertBackByOuterInner(j, it.index()) = it.value();
76  }
77  res.finalize();
78 }

References Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::coeffRef(), cols, eigen_assert, Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::init(), j, res, Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::restart(), rows, Eigen::internal::AmbiVector< Scalar_, StorageIndex_ >::setZero(), and plotDoE::x.

◆ sparse_sparse_to_dense_product_impl()

template<typename Lhs , typename Rhs , typename ResultType >
static void Eigen::internal::sparse_sparse_to_dense_product_impl ( const Lhs lhs,
const Rhs rhs,
ResultType &  res 
)
static
240  {
241  typedef typename remove_all_t<Lhs>::Scalar LhsScalar;
242  typedef typename remove_all_t<Rhs>::Scalar RhsScalar;
243  Index cols = rhs.outerSize();
244  eigen_assert(lhs.outerSize() == rhs.innerSize());
245 
246  evaluator<Lhs> lhsEval(lhs);
247  evaluator<Rhs> rhsEval(rhs);
248 
249  for (Index j = 0; j < cols; ++j) {
250  for (typename evaluator<Rhs>::InnerIterator rhsIt(rhsEval, j); rhsIt; ++rhsIt) {
251  RhsScalar y = rhsIt.value();
252  Index k = rhsIt.index();
253  for (typename evaluator<Lhs>::InnerIterator lhsIt(lhsEval, k); lhsIt; ++lhsIt) {
254  Index i = lhsIt.index();
255  LhsScalar x = lhsIt.value();
256  res.coeffRef(i, j) += x * y;
257  }
258  }
259  }
260 }

References cols, eigen_assert, i, j, k, res, plotDoE::x, and y.

◆ sparse_time_dense_product()

template<typename SparseLhsType , typename DenseRhsType , typename DenseResType , typename AlphaType >
void Eigen::internal::sparse_time_dense_product ( const SparseLhsType &  lhs,
const DenseRhsType &  rhs,
DenseResType &  res,
const AlphaType &  alpha 
)
inline

◆ sse_blend_mask() [1/2]

EIGEN_STRONG_INLINE __m128i Eigen::internal::sse_blend_mask ( const Selector< 2 > &  ifPacket)
2186  {
2187  return _mm_set_epi64x(0 - ifPacket.select[1], 0 - ifPacket.select[0]);
2188 }

References Eigen::internal::Selector< N >::select.

Referenced by pblend().

◆ sse_blend_mask() [2/2]

EIGEN_STRONG_INLINE __m128i Eigen::internal::sse_blend_mask ( const Selector< 4 > &  ifPacket)
2190  {
2191  return _mm_set_epi32(0 - ifPacket.select[3], 0 - ifPacket.select[2], 0 - ifPacket.select[1], 0 - ifPacket.select[0]);
2192 }

References Eigen::internal::Selector< N >::select.

◆ stable_norm_impl() [1/2]

template<typename MatrixType >
MatrixType::RealScalar Eigen::internal::stable_norm_impl ( const MatrixType mat,
std::enable_if_t<!MatrixType::IsVectorAtCompileTime > *  = 0 
)
84  {
85  using std::sqrt;
86 
87  typedef typename MatrixType::RealScalar RealScalar;
88  RealScalar scale(0);
89  RealScalar invScale(1);
90  RealScalar ssq(0); // sum of squares
91 
92  for (Index j = 0; j < mat.outerSize(); ++j) stable_norm_impl_inner_step(mat.innerVector(j), ssq, scale, invScale);
93  return scale * sqrt(ssq);
94 }
void stable_norm_impl_inner_step(const VectorType &vec, RealScalar &ssq, RealScalar &scale, RealScalar &invScale)
Definition: StableNorm.h:50

References j, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::outerSize(), sqrt(), and stable_norm_impl_inner_step().

◆ stable_norm_impl() [2/2]

template<typename VectorType >
VectorType::RealScalar Eigen::internal::stable_norm_impl ( const VectorType vec,
std::enable_if_t< VectorType::IsVectorAtCompileTime > *  = 0 
)
65  {
66  using std::abs;
67  using std::sqrt;
68 
69  Index n = vec.size();
70  if (EIGEN_PREDICT_FALSE(n == 1)) return abs(vec.coeff(0));
71 
72  typedef typename VectorType::RealScalar RealScalar;
73  RealScalar scale(0);
74  RealScalar invScale(1);
75  RealScalar ssq(0); // sum of squares
76 
77  stable_norm_impl_inner_step(vec, ssq, scale, invScale);
78 
79  return scale * sqrt(ssq);
80 }

References abs(), EIGEN_PREDICT_FALSE, n, sqrt(), and stable_norm_impl_inner_step().

Referenced by Eigen::MatrixBase< Derived >::stableNorm().

◆ stable_norm_impl_inner_step()

template<typename VectorType , typename RealScalar >
void Eigen::internal::stable_norm_impl_inner_step ( const VectorType vec,
RealScalar ssq,
RealScalar scale,
RealScalar invScale 
)
50  {
51  const Index blockSize = 4096;
52 
53  Index n = vec.size();
54  Index blockEnd = numext::round_down(n, blockSize);
55  for (Index i = 0; i < blockEnd; i += blockSize) {
56  internal::stable_norm_kernel(vec.template segment<blockSize>(i), ssq, scale, invScale);
57  }
58  if (n > blockEnd) {
59  internal::stable_norm_kernel(vec.tail(n - blockEnd), ssq, scale, invScale);
60  }
61 }
void stable_norm_kernel(const ExpressionType &bl, Scalar &ssq, Scalar &scale, Scalar &invScale)
Definition: StableNorm.h:21
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE EIGEN_CONSTEXPR T round_down(T a, U b)
Definition: MathFunctions.h:1266

References i, n, Eigen::numext::round_down(), and stable_norm_kernel().

Referenced by stable_norm_impl().

◆ stable_norm_kernel()

template<typename ExpressionType , typename Scalar >
void Eigen::internal::stable_norm_kernel ( const ExpressionType &  bl,
Scalar ssq,
Scalar scale,
Scalar invScale 
)
inline
21  {
22  Scalar maxCoeff = bl.cwiseAbs().maxCoeff();
23 
24  if (maxCoeff > scale) {
25  ssq = ssq * numext::abs2(scale / maxCoeff);
26  Scalar tmp = Scalar(1) / maxCoeff;
27  if (tmp > NumTraits<Scalar>::highest()) {
28  invScale = NumTraits<Scalar>::highest();
29  scale = Scalar(1) / invScale;
30  } else if (maxCoeff > NumTraits<Scalar>::highest()) // we got a INF
31  {
32  invScale = Scalar(1);
33  scale = maxCoeff;
34  } else {
35  scale = maxCoeff;
36  invScale = tmp;
37  }
38  } else if (maxCoeff != maxCoeff) // we got a NaN
39  {
40  scale = maxCoeff;
41  }
42 
43  // TODO if the maxCoeff is much much smaller than the current scale,
44  // then we can neglect this sub vector
45  if (scale > Scalar(0)) // if scale==0, then bl is 0
46  ssq += (bl * invScale).squaredNorm();
47 }

References Eigen::numext::abs2(), and tmp.

Referenced by stable_norm_impl_inner_step().

◆ stem_function_cos()

template<typename Scalar >
Scalar Eigen::internal::stem_function_cos ( Scalar  x,
int  n 
)

Cosine (and its derivatives).

29  {
30  using std::cos;
31  using std::sin;
32  Scalar res;
33 
34  switch (n % 4) {
35  case 0:
36  res = std::cos(x);
37  break;
38  case 1:
39  res = -std::sin(x);
40  break;
41  case 2:
42  res = -std::cos(x);
43  break;
44  case 3:
45  res = std::sin(x);
46  break;
47  }
48  return res;
49 }

References cos(), n, res, sin(), and plotDoE::x.

◆ stem_function_cosh()

template<typename Scalar >
Scalar Eigen::internal::stem_function_cosh ( Scalar  x,
int  n 
)

Hyperbolic cosine (and its derivatives).

77  {
78  using std::cosh;
79  using std::sinh;
80  Scalar res;
81 
82  switch (n % 2) {
83  case 0:
84  res = std::cosh(x);
85  break;
86  case 1:
87  res = std::sinh(x);
88  break;
89  }
90  return res;
91 }

References Eigen::bfloat16_impl::cosh(), n, res, Eigen::bfloat16_impl::sinh(), and plotDoE::x.

◆ stem_function_exp()

template<typename Scalar >
Scalar Eigen::internal::stem_function_exp ( Scalar  x,
int   
)

The exponential function (and its derivatives).

22  {
23  using std::exp;
24  return exp(x);
25 }

References Eigen::bfloat16_impl::exp(), and plotDoE::x.

◆ stem_function_sin()

template<typename Scalar >
Scalar Eigen::internal::stem_function_sin ( Scalar  x,
int  n 
)

Sine (and its derivatives).

53  {
54  using std::cos;
55  using std::sin;
56  Scalar res;
57 
58  switch (n % 4) {
59  case 0:
60  res = std::sin(x);
61  break;
62  case 1:
63  res = std::cos(x);
64  break;
65  case 2:
66  res = -std::sin(x);
67  break;
68  case 3:
69  res = -std::cos(x);
70  break;
71  }
72  return res;
73 }

References cos(), n, res, sin(), and plotDoE::x.

◆ stem_function_sinh()

template<typename Scalar >
Scalar Eigen::internal::stem_function_sinh ( Scalar  x,
int  n 
)

Hyperbolic sine (and its derivatives).

95  {
96  using std::cosh;
97  using std::sinh;
98  Scalar res;
99 
100  switch (n % 2) {
101  case 0:
102  res = std::sinh(x);
103  break;
104  case 1:
105  res = std::cosh(x);
106  break;
107  }
108  return res;
109 }

References Eigen::bfloat16_impl::cosh(), n, res, Eigen::bfloat16_impl::sinh(), and plotDoE::x.

◆ storeAccumulator()

template<typename DataMapper , typename Packet , bool full>
EIGEN_ALWAYS_INLINE void Eigen::internal::storeAccumulator ( Index  i,
const DataMapper &  data,
const Packet alpha,
const Index  elements,
__vector_quad *  acc 
)
44  {
45  PacketBlock<Packet, 4> result;
46  __builtin_mma_disassemble_acc(&result.packet, acc);
47 
48  PacketBlock<Packet, 4> tRes;
49  if (full) {
50  EIGEN_UNUSED_VARIABLE(elements);
51  bload<DataMapper, Packet, 0, ColMajor, false, 4>(tRes, data, i, 0);
52  bscale<Packet, 4>(tRes, result, alpha);
53  bstore<DataMapper, Packet, 4>(tRes, data, i);
54  } else {
55  bload_partial<DataMapper, Packet, 0, false, 4>(tRes, data, i, elements);
56  bscale<Packet, 4>(tRes, result, alpha);
57  bstore_partial<DataMapper, Packet, 4>(tRes, data, i, elements);
58  }
59 }

References alpha, data, EIGEN_UNUSED_VARIABLE, i, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ storeBF16fromResult()

template<const Index size, bool non_unit_stride, Index delta>
EIGEN_ALWAYS_INLINE void Eigen::internal::storeBF16fromResult ( bfloat16 dst,
Packet8bf  data,
Index  resInc,
Index  extra = 0 
)

◆ storeBlock()

template<typename Scalar , typename Packet , int N>
EIGEN_ALWAYS_INLINE void Eigen::internal::storeBlock ( Scalar to,
PacketBlock< Packet, N > &  block 
)

PanelMode Packing might be called several times before being multiplied by gebp_kernel, this happens because on special occasions it fills part of block with other parts of the matrix. Two variables control how PanelMode should behave: offset and stride. The idea is that those variables represent whatever is going to be the real offset and stride in the future and this is what you should obey. The process is to behave as you would with normal packing but leave the start of each part with the correct offset and the end as well respecting the real stride the block will have. Gebp is aware of both blocks stride and offset and behaves accordingly.

366  {
367  const Index size = 16 / sizeof(Scalar);
368  pstore<Scalar>(to + (0 * size), block.packet[0]);
369  pstore<Scalar>(to + (1 * size), block.packet[1]);
370  if (N > 2) {
371  pstore<Scalar>(to + (2 * size), block.packet[2]);
372  }
373  if (N > 3) {
374  pstore<Scalar>(to + (3 * size), block.packet[3]);
375  }
376 }

References block(), N, and size.

◆ storeComplexAccumulator()

template<typename DataMapper , typename Packet , typename Packetc , const Index accCols, const Index accCols2>
EIGEN_ALWAYS_INLINE void Eigen::internal::storeComplexAccumulator ( Index  i,
const DataMapper &  data,
const Packet alphaReal,
const Packet alphaImag,
const Packet pMask,
__vector_quad *  accReal,
__vector_quad *  accImag 
)
64  {
65  constexpr bool full = (accCols2 > accColsC);
66  PacketBlock<Packet, 4> resultReal, resultImag;
67  __builtin_mma_disassemble_acc(&resultReal.packet, accReal);
68  __builtin_mma_disassemble_acc(&resultImag.packet, accImag);
69 
70  PacketBlock<Packetc, 8> tRes;
71  bload<DataMapper, Packetc, accColsC, ColMajor, true, 4, full>(tRes, data, i, 0);
72 
73  PacketBlock<Packet, 4> taccReal, taccImag;
74  bscalec<Packet, 4, (accCols != accCols2)>(resultReal, resultImag, alphaReal, alphaImag, taccReal, taccImag, pMask);
75 
76  PacketBlock<Packetc, 4> acc1, acc2;
77  bcouple<Packet, Packetc, 4, full>(taccReal, taccImag, tRes, acc1, acc2);
78 
79  bstore<DataMapper, Packetc, 4>(acc1, data, i);
80  if (full) {
81  bstore<DataMapper, Packetc, 4>(acc2, data, i + accColsC);
82  }
83 }
#define accColsC
Definition: MatrixProductMMA.h:38

References accColsC, data, i, and Eigen::internal::PacketBlock< Packet, N >::packet.

◆ storeConvertBlockBF16()

template<Index N>
EIGEN_ALWAYS_INLINE void Eigen::internal::storeConvertBlockBF16 ( float *  to,
PacketBlock< Packet8bf,(N+7)/8 > &  block,
Index  extra 
)
2702  {
2703  storeConvertTwoBF16<N, 0>(to + 0, block, extra);
2704  if (N >= 16) {
2705  storeConvertTwoBF16<N, 1>(to + 8, block);
2706  }
2707  if (N >= 32) {
2708  storeConvertTwoBF16<N, 2>(to + 16, block);
2709  storeConvertTwoBF16<N, 3>(to + 24, block);
2710  }
2711 }

References block(), and N.

◆ storeConvertTwoBF16()

template<Index N, Index M>
EIGEN_ALWAYS_INLINE void Eigen::internal::storeConvertTwoBF16 ( float *  to,
PacketBlock< Packet8bf,(N+7)/8 > &  block,
Index  extra = 0 
)
2690  {
2691  if (N < 4) {
2692  pstoreu_partial(to + 0, oneConvertBF16Hi(block.packet[0].m_val), extra);
2693  } else if (N >= (M * 8 + 4)) {
2694  pstoreu(to + 0, oneConvertBF16Hi(block.packet[M].m_val));
2695  if (N >= 8) {
2696  pstoreu(to + 4, oneConvertBF16Lo(block.packet[M].m_val));
2697  }
2698  }
2699 }
EIGEN_ALWAYS_INLINE Packet4f oneConvertBF16Lo(Packet8us data)
Definition: MatrixProduct.h:2680
EIGEN_ALWAYS_INLINE Packet4f oneConvertBF16Hi(Packet8us data)
Definition: MatrixProduct.h:2671

References block(), N, oneConvertBF16Hi(), oneConvertBF16Lo(), pstoreu(), and pstoreu_partial().

◆ storeF32()

template<bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void Eigen::internal::storeF32 ( float *&  result,
Packet4f  result_block,
Index  rows,
Index  extra_rows 
)
2639  {
2640  if (lhsExtraRows) {
2641  pstoreu_partial(result, result_block, extra_rows);
2642  } else {
2643  pstoreu(result, result_block);
2644  }
2645  result += rows;
2646 }

References pstoreu(), pstoreu_partial(), and rows.

◆ storeResults()

template<bool rhsExtraCols, bool lhsExtraRows>
EIGEN_ALWAYS_INLINE void Eigen::internal::storeResults ( Packet4f(&)  acc[4],
Index  rows,
const Packet4f  pAlpha,
float *  result,
Index  extra_cols,
Index  extra_rows 
)
2650  {
2651  Index x = 0;
2652  if (rhsExtraCols) {
2653  do {
2654  Packet4f result_block = loadAndMultiplyF32(acc[x], pAlpha, result);
2655  storeF32<lhsExtraRows>(result, result_block, rows, extra_rows);
2656  } while (++x < extra_cols);
2657  } else {
2658  Packet4f result_block[4];
2659  float* result2 = result;
2660  do {
2661  result_block[x] = loadAndMultiplyF32(acc[x], pAlpha, result);
2662  result += rows;
2663  } while (++x < 4);
2664  x = 0;
2665  do {
2666  storeF32<lhsExtraRows>(result2, result_block[x], rows, extra_rows);
2667  } while (++x < 4);
2668  }
2669 }
EIGEN_ALWAYS_INLINE Packet4f loadAndMultiplyF32(Packet4f acc, const Packet4f pAlpha, float *result)
Definition: MatrixProduct.h:2633

References loadAndMultiplyF32(), rows, and plotDoE::x.

◆ strides() [1/3]

template<int Layout, typename IndexType , int NumDims>
EIGEN_ALWAYS_INLINE DSizes<IndexType, NumDims> Eigen::internal::strides ( const DSizes< IndexType, NumDims > &  dimensions)
29  {
30  DSizes<IndexType, NumDims> strides;
31  if (NumDims == 0) return strides;
32 
33  // TODO(ezhulenev): Use templates to unroll this loop (similar to
34  // h_array_reduce in CXX11meta.h)? Benchmark it.
35  if (static_cast<int>(Layout) == static_cast<int>(ColMajor)) {
36  strides[0] = 1;
37  for (int i = 1; i < NumDims; ++i) {
38  strides[i] = strides[i - 1] * dimensions[i - 1];
39  }
40  } else {
41  strides[NumDims - 1] = 1;
42  for (int i = NumDims - 2; i >= 0; --i) {
43  strides[i] = strides[i + 1] * dimensions[i + 1];
44  }
45  }
46 
47  return strides;
48 }
EIGEN_STRONG_INLINE DSizes< std::ptrdiff_t, sizeof...(Indices)> strides(const Sizes< Indices... > &sizes)
Definition: TensorBlock.h:56

References Eigen::ColMajor, and i.

Referenced by ComputeStrides(), InsertZeros< TensorType >::eval(), Eigen::TensorEvaluator< const TensorPairReducerOp< ReduceOp, Dims, ArgType >, Device >::gen_strides(), Eigen::TensorBase< Derived, ReadOnlyAccessors >::inflate(), RandomBlock(), SkewedInnerBlock(), Eigen::TensorBase< Derived, ReadOnlyAccessors >::stride(), Eigen::TensorBase< Derived, AccessLevel >::stride(), Eigen::TensorBase< Derived, ReadOnlyAccessors >::stridedSlice(), Eigen::TensorBase< Derived, AccessLevel >::stridedSlice(), BenchmarkSuite< Device, T >::striding(), test_block_io_squeeze_ones(), test_block_mapper_maps_every_element(), test_simple_inflation(), test_simple_inflation_sycl(), test_simple_striding(), test_strided_slice(), test_strided_slice_as_rhs_sycl(), test_strided_slice_write(), test_strided_slice_write_sycl(), and test_striding_as_lvalue().

◆ strides() [2/3]

template<int Layout, typename IndexType , size_t NumDims>
EIGEN_ALWAYS_INLINE DSizes<IndexType, NumDims> Eigen::internal::strides ( const Eigen::array< IndexType, NumDims > &  dimensions)
51  {
52  return strides<Layout>(DSizes<IndexType, NumDims>(dimensions));
53 }

◆ strides() [3/3]

template<int Layout, std::ptrdiff_t... Indices>
EIGEN_STRONG_INLINE DSizes<std::ptrdiff_t, sizeof...(Indices)> Eigen::internal::strides ( const Sizes< Indices... > &  sizes)
56  {
57  return strides<Layout>(DSizes<std::ptrdiff_t, sizeof...(Indices)>(sizes));
58 }

References sizes.

◆ supportsMMA()

EIGEN_ALWAYS_INLINE bool Eigen::internal::supportsMMA ( )
2623  {
2624 #if defined(EIGEN_ALTIVEC_MMA_ONLY)
2625  return true;
2626 #elif defined(EIGEN_ALTIVEC_MMA_DYNAMIC_DISPATCH) && defined(__BUILTIN_CPU_SUPPORTS__)
2627  return __builtin_cpu_supports("arch_3_1") && __builtin_cpu_supports("mma");
2628 #else
2629  return false; // No dynamic dispatch for LLVM or older GCC
2630 #endif
2631 }

Referenced by Eigen::internal::gebp_kernel< bfloat16, bfloat16, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< double, double, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< double, std::complex< double >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< float, float, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< float, std::complex< float >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< std::complex< double >, double, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< std::complex< double >, std::complex< double >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), Eigen::internal::gebp_kernel< std::complex< float >, float, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()(), and Eigen::internal::gebp_kernel< std::complex< float >, std::complex< float >, Index, DataMapper, mr, nr, ConjugateLhs, ConjugateRhs >::operator()().

◆ swap()

◆ swap_plain_array()

template<typename T , int Size, int Options, int Alignment>
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE void Eigen::internal::swap_plain_array ( plain_array< T, Size, Options, Alignment > &  a,
plain_array< T, Size, Options, Alignment > &  b,
Index  a_size,
Index  b_size 
)
constexpr
85  {
86  Index common_size = numext::mini(a_size, b_size);
87  std::swap_ranges(a.array, a.array + common_size, b.array);
88  if (a_size > b_size)
89  smart_copy(a.array + common_size, a.array + a_size, b.array + common_size);
90  else if (b_size > a_size)
91  smart_copy(b.array + common_size, b.array + b_size, a.array + common_size);
92 }

References a, b, Eigen::numext::mini(), and smart_copy().

Referenced by Eigen::internal::DenseStorage_impl< T, Size, Dynamic, Cols, Options >::swap(), Eigen::internal::DenseStorage_impl< T, Size, Rows, Dynamic, Options >::swap(), and Eigen::internal::DenseStorage_impl< T, Size, Dynamic, Dynamic, Options >::swap().

◆ symm_pack_complex_lhs_helper()

template<typename Scalar , int StorageOrder>
EIGEN_STRONG_INLINE void Eigen::internal::symm_pack_complex_lhs_helper ( std::complex< Scalar > *  blockA,
const std::complex< Scalar > *  _lhs,
Index  lhsStride,
Index  cols,
Index  rows 
)
179  {
180  const Index depth = cols;
181  const_blas_data_mapper<std::complex<Scalar>, Index, StorageOrder> lhs(_lhs, lhsStride);
182  const Index vectorSize = quad_traits<Scalar>::vectorsize;
183  const Index vectorDelta = vectorSize * depth;
184  Scalar* blockAf = reinterpret_cast<Scalar*>(blockA);
185 
186  Index rir = 0, rii, j = 0;
187  for (; j + vectorSize <= rows; j += vectorSize) {
188  rii = rir + vectorDelta;
189 
190  for (Index i = 0; i < depth; i++) {
191  for (Index k = 0; k < vectorSize; k++) {
192  std::complex<Scalar> v = getAdjointVal<Scalar, StorageOrder>(j + k, i, lhs);
193 
194  blockAf[rir + k] = v.real();
195  blockAf[rii + k] = v.imag();
196  }
197  rir += vectorSize;
198  rii += vectorSize;
199  }
200 
201  rir += vectorDelta;
202  }
203 
204  if (j < rows) {
205  rii = rir + ((rows - j) * depth);
206 
207  for (Index i = 0; i < depth; i++) {
208  Index k = j;
209  for (; k < rows; k++) {
210  std::complex<Scalar> v = getAdjointVal<Scalar, StorageOrder>(k, i, lhs);
211 
212  blockAf[rir] = v.real();
213  blockAf[rii] = v.imag();
214 
215  rir += 1;
216  rii += 1;
217  }
218  }
219  }
220 }

References cols, i, j, k, rows, and v.

◆ symm_pack_complex_rhs_helper()

template<typename Scalar , int StorageOrder, int N>
EIGEN_STRONG_INLINE void Eigen::internal::symm_pack_complex_rhs_helper ( std::complex< Scalar > *  blockB,
const std::complex< Scalar > *  _rhs,
Index  rhsStride,
Index  rows,
Index  cols,
Index  k2 
)
135  {
136  const Index depth = k2 + rows;
137  const_blas_data_mapper<std::complex<Scalar>, Index, StorageOrder> rhs(_rhs, rhsStride);
138  const Index vectorSize = N * quad_traits<Scalar>::vectorsize;
139  const Index vectorDelta = vectorSize * rows;
140  Scalar* blockBf = reinterpret_cast<Scalar*>(blockB);
141 
142  Index rir = 0, rii, j = 0;
143  for (; j + vectorSize <= cols; j += vectorSize) {
144  rii = rir + vectorDelta;
145 
146  for (Index i = k2; i < depth; i++) {
147  for (Index k = 0; k < vectorSize; k++) {
148  std::complex<Scalar> v = getAdjointVal<Scalar, StorageOrder>(i, j + k, rhs);
149 
150  blockBf[rir + k] = v.real();
151  blockBf[rii + k] = v.imag();
152  }
153  rir += vectorSize;
154  rii += vectorSize;
155  }
156 
157  rir += vectorDelta;
158  }
159 
160  for (; j < cols; j++) {
161  rii = rir + rows;
162 
163  for (Index i = k2; i < depth; i++) {
164  std::complex<Scalar> v = getAdjointVal<Scalar, StorageOrder>(i, j, rhs);
165 
166  blockBf[rir] = v.real();
167  blockBf[rii] = v.imag();
168 
169  rir += 1;
170  rii += 1;
171  }
172 
173  rir += rows;
174  }
175 }

References cols, i, j, k, N, rows, and v.

◆ symm_pack_lhs_helper()

template<typename Scalar , int StorageOrder>
EIGEN_STRONG_INLINE void Eigen::internal::symm_pack_lhs_helper ( Scalar blockA,
const Scalar _lhs,
Index  lhsStride,
Index  cols,
Index  rows 
)
256  {
257  const Index depth = cols;
258  const_blas_data_mapper<Scalar, Index, StorageOrder> lhs(_lhs, lhsStride);
259  const Index vectorSize = quad_traits<Scalar>::vectorsize;
260 
261  Index ri = 0, j = 0;
262  for (; j + vectorSize <= rows; j += vectorSize) {
263  Index i = 0;
264 
265  for (; i < depth; i++) {
266  for (Index k = 0; k < vectorSize; k++) {
267  if (i <= j + k)
268  blockA[ri + k] = lhs(j + k, i);
269  else
270  blockA[ri + k] = lhs(i, j + k);
271  }
272  ri += vectorSize;
273  }
274  }
275 
276  if (j < rows) {
277  for (Index i = 0; i < depth; i++) {
278  Index k = j;
279  for (; k < rows; k++) {
280  if (i <= k)
281  blockA[ri] = lhs(k, i);
282  else
283  blockA[ri] = lhs(i, k);
284  ri += 1;
285  }
286  }
287  }
288 }

References cols, i, j, k, and rows.

◆ symm_pack_rhs_helper()

template<typename Scalar , int StorageOrder, int N>
EIGEN_STRONG_INLINE void Eigen::internal::symm_pack_rhs_helper ( Scalar blockB,
const Scalar _rhs,
Index  rhsStride,
Index  rows,
Index  cols,
Index  k2 
)
224  {
225  const Index depth = k2 + rows;
226  const_blas_data_mapper<Scalar, Index, StorageOrder> rhs(_rhs, rhsStride);
227  const Index vectorSize = quad_traits<Scalar>::vectorsize;
228 
229  Index ri = 0, j = 0;
230  for (; j + N * vectorSize <= cols; j += N * vectorSize) {
231  Index i = k2;
232  for (; i < depth; i++) {
233  for (Index k = 0; k < N * vectorSize; k++) {
234  if (i <= j + k)
235  blockB[ri + k] = rhs(j + k, i);
236  else
237  blockB[ri + k] = rhs(i, j + k);
238  }
239  ri += N * vectorSize;
240  }
241  }
242 
243  for (; j < cols; j++) {
244  for (Index i = k2; i < depth; i++) {
245  if (j <= i)
246  blockB[ri] = rhs(i, j);
247  else
248  blockB[ri] = rhs(j, i);
249  ri += 1;
250  }
251  }
252 }

References cols, i, j, k, N, and rows.

◆ tensor_static_symgroup_index_permute() [1/2]

template<typename Index , std::size_t N, int... ii, int... jj>
constexpr static std::array<Index, N> Eigen::internal::tensor_static_symgroup_index_permute ( std::array< Index, N idx,
internal::numeric_list< int, ii... >  ,
internal::numeric_list< int, jj... >   
)
inlinestaticconstexpr
112  {
113  return {{idx[ii]..., idx[jj]...}};
114 }

Referenced by Eigen::internal::tensor_static_symgroup_do_apply< internal::type_list< first, next... > >::run().

◆ tensor_static_symgroup_index_permute() [2/2]

template<typename Index , int... ii>
static std::vector<Index> Eigen::internal::tensor_static_symgroup_index_permute ( std::vector< Index idx,
internal::numeric_list< int, ii... >   
)
inlinestatic
118  {
119  std::vector<Index> result{{idx[ii]...}};
120  std::size_t target_size = idx.size();
121  for (std::size_t i = result.size(); i < target_size; i++) result.push_back(idx[i]);
122  return result;
123 }

References i.

◆ throw_std_bad_alloc()

EIGEN_DEVICE_FUNC void Eigen::internal::throw_std_bad_alloc ( )
inline
110  {
111 #ifdef EIGEN_EXCEPTIONS
112  throw std::bad_alloc();
113 #else
114  std::size_t huge = static_cast<std::size_t>(-1);
115 #if defined(EIGEN_HIPCC)
116  //
117  // calls to "::operator new" are to be treated as opaque function calls (i.e no inlining),
118  // and as a consequence the code in the #else block triggers the hipcc warning :
119  // "no overloaded function has restriction specifiers that are compatible with the ambient context"
120  //
121  // "throw_std_bad_alloc" has the EIGEN_DEVICE_FUNC attribute, so it seems that hipcc expects
122  // the same on "operator new"
123  // Reverting code back to the old version in this #if block for the hipcc compiler
124  //
125  new int[huge];
126 #else
127  void* unused = ::operator new(huge);
128  EIGEN_UNUSED_VARIABLE(unused);
129 #endif
130 #endif
131 }

References EIGEN_UNUSED_VARIABLE.

Referenced by aligned_malloc(), aligned_realloc(), check_size_for_overflow(), conditional_aligned_malloc< false >(), Eigen::internal::CompressedStorage< Scalar_, StorageIndex_ >::resize(), Eigen::internal::check_rows_cols_for_overflow< Dynamic, Dynamic, Dynamic >::run(), Eigen::internal::check_rows_cols_for_overflow< Dynamic, Dynamic, MaxColsAtCompileTime >::run(), Eigen::internal::check_rows_cols_for_overflow< Dynamic, MaxRowsAtCompileTime, Dynamic >::run(), Eigen::internal::eigen_zero_impl< Xpr, true >::run(), set_from_triplets(), and set_from_triplets_sorted().

◆ toRotationMatrix() [1/3]

template<typename Scalar , int Dim, typename OtherDerived >
static EIGEN_DEVICE_FUNC const MatrixBase<OtherDerived>& Eigen::internal::toRotationMatrix ( const MatrixBase< OtherDerived > &  mat)
inlinestatic
199  {
200  EIGEN_STATIC_ASSERT(OtherDerived::RowsAtCompileTime == Dim && OtherDerived::ColsAtCompileTime == Dim,
201  YOU_MADE_A_PROGRAMMING_MISTAKE)
202  return mat;
203 }
static const unsigned Dim
Problem dimension.
Definition: two_d_tilted_square.cc:62

References Global_Variables::Dim, and EIGEN_STATIC_ASSERT.

◆ toRotationMatrix() [2/3]

template<typename Scalar , int Dim, typename OtherDerived >
static EIGEN_DEVICE_FUNC Matrix<Scalar, Dim, Dim> Eigen::internal::toRotationMatrix ( const RotationBase< OtherDerived, Dim > &  r)
inlinestatic
194  {
195  return r.toRotationMatrix();
196 }

References UniformPSDSelfTest::r.

◆ toRotationMatrix() [3/3]

template<typename Scalar , int Dim>
static EIGEN_DEVICE_FUNC Matrix<Scalar, 2, 2> Eigen::internal::toRotationMatrix ( const Scalar s)
inlinestatic

Helper function to return an arbitrary rotation object to a rotation matrix.

Template Parameters
Scalarthe numeric type of the matrix coefficients
Dimthe dimension of the current space

It returns a Dim x Dim fixed size matrix.

Default specializations are provided for:

  • any scalar type (2D),
  • any matrix expression,
  • any type based on RotationBase (e.g., Quaternion, AngleAxis, Rotation2D)

Currently toRotationMatrix is only used by Transform.

See also
class Transform, class Rotation2D, class Quaternion, class AngleAxis
188  {
189  EIGEN_STATIC_ASSERT(Dim == 2, YOU_MADE_A_PROGRAMMING_MISTAKE)
190  return Rotation2D<Scalar>(s).toRotationMatrix();
191 }

References Global_Variables::Dim, EIGEN_STATIC_ASSERT, s, and Eigen::Rotation2D< Scalar_ >::toRotationMatrix().

Referenced by transformations().

◆ tranposeResults()

template<Index num_acc>
EIGEN_ALWAYS_INLINE void Eigen::internal::tranposeResults ( Packet4f(&)  acc[num_acc][4])
2838  {
2839  for (Index i = 0; i < num_acc; i++) {
2840  Packet4ui t0, t1, t2, t3;
2841  t0 = vec_mergeh(reinterpret_cast<Packet4ui>(acc[i][0]), reinterpret_cast<Packet4ui>(acc[i][2]));
2842  t1 = vec_mergel(reinterpret_cast<Packet4ui>(acc[i][0]), reinterpret_cast<Packet4ui>(acc[i][2]));
2843  t2 = vec_mergeh(reinterpret_cast<Packet4ui>(acc[i][1]), reinterpret_cast<Packet4ui>(acc[i][3]));
2844  t3 = vec_mergel(reinterpret_cast<Packet4ui>(acc[i][1]), reinterpret_cast<Packet4ui>(acc[i][3]));
2845  acc[i][0] = reinterpret_cast<Packet4f>(vec_mergeh(t0, t2));
2846  acc[i][1] = reinterpret_cast<Packet4f>(vec_mergel(t0, t2));
2847  acc[i][2] = reinterpret_cast<Packet4f>(vec_mergeh(t1, t3));
2848  acc[i][3] = reinterpret_cast<Packet4f>(vec_mergel(t1, t3));
2849  }
2850 }

References i.

◆ transStoreC()

template<typename Scalar , typename vec , int64_t unrollM, int64_t unrollN, bool remM, bool remN>
EIGEN_ALWAYS_INLINE void Eigen::internal::transStoreC ( PacketBlock< vec, EIGEN_ARCH_DEFAULT_NUMBER_OF_REGISTERS > &  zmm,
Scalar C_arr,
int64_t  LDC,
int64_t  remM_ = 0,
int64_t  remN_ = 0 
)

Used by gemmKernel for the case A/B row-major and C col-major.

122  {
123  EIGEN_UNUSED_VARIABLE(remN_);
124  EIGEN_UNUSED_VARIABLE(remM_);
125  using urolls = unrolls::trans<Scalar>;
126 
127  constexpr int64_t U3 = urolls::PacketSize * 3;
128  constexpr int64_t U2 = urolls::PacketSize * 2;
129  constexpr int64_t U1 = urolls::PacketSize * 1;
130 
131  static_assert(unrollN == U1 || unrollN == U2 || unrollN == U3, "unrollN should be a multiple of PacketSize");
132  static_assert(unrollM == EIGEN_AVX_MAX_NUM_ROW, "unrollM should be equal to EIGEN_AVX_MAX_NUM_ROW");
133 
134  urolls::template transpose<unrollN, 0>(zmm);
135  EIGEN_IF_CONSTEXPR(unrollN > U2) urolls::template transpose<unrollN, 2>(zmm);
136  EIGEN_IF_CONSTEXPR(unrollN > U1) urolls::template transpose<unrollN, 1>(zmm);
137 
138  static_assert((remN && unrollN == U1) || !remN, "When handling N remainder set unrollN=U1");
139  EIGEN_IF_CONSTEXPR(!remN) {
140  urolls::template storeC<std::min(unrollN, U1), unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
141  EIGEN_IF_CONSTEXPR(unrollN > U1) {
142  constexpr int64_t unrollN_ = std::min(unrollN - U1, U1);
143  urolls::template storeC<unrollN_, unrollN, 1, remM>(C_arr + U1 * LDC, LDC, zmm, remM_);
144  }
145  EIGEN_IF_CONSTEXPR(unrollN > U2) {
146  constexpr int64_t unrollN_ = std::min(unrollN - U2, U1);
147  urolls::template storeC<unrollN_, unrollN, 2, remM>(C_arr + U2 * LDC, LDC, zmm, remM_);
148  }
149  }
150  else {
152  // Note: without "if constexpr" this section of code will also be
153  // parsed by the compiler so each of the storeC will still be instantiated.
154  // We use enable_if in aux_storeC to set it to an empty function for
155  // these cases.
156  if (remN_ == 15)
157  urolls::template storeC<15, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
158  else if (remN_ == 14)
159  urolls::template storeC<14, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
160  else if (remN_ == 13)
161  urolls::template storeC<13, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
162  else if (remN_ == 12)
163  urolls::template storeC<12, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
164  else if (remN_ == 11)
165  urolls::template storeC<11, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
166  else if (remN_ == 10)
167  urolls::template storeC<10, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
168  else if (remN_ == 9)
169  urolls::template storeC<9, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
170  else if (remN_ == 8)
171  urolls::template storeC<8, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
172  else if (remN_ == 7)
173  urolls::template storeC<7, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
174  else if (remN_ == 6)
175  urolls::template storeC<6, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
176  else if (remN_ == 5)
177  urolls::template storeC<5, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
178  else if (remN_ == 4)
179  urolls::template storeC<4, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
180  else if (remN_ == 3)
181  urolls::template storeC<3, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
182  else if (remN_ == 2)
183  urolls::template storeC<2, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
184  else if (remN_ == 1)
185  urolls::template storeC<1, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
186  }
187  else {
188  if (remN_ == 7)
189  urolls::template storeC<7, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
190  else if (remN_ == 6)
191  urolls::template storeC<6, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
192  else if (remN_ == 5)
193  urolls::template storeC<5, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
194  else if (remN_ == 4)
195  urolls::template storeC<4, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
196  else if (remN_ == 3)
197  urolls::template storeC<3, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
198  else if (remN_ == 2)
199  urolls::template storeC<2, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
200  else if (remN_ == 1)
201  urolls::template storeC<1, unrollN, 0, remM>(C_arr, LDC, zmm, remM_);
202  }
203  }
204 }

References EIGEN_AVX_MAX_NUM_ROW, EIGEN_IF_CONSTEXPR, EIGEN_UNUSED_VARIABLE, min, and Eigen::value.

◆ treePostorder()

template<typename IndexVector >
void Eigen::internal::treePostorder ( typename IndexVector::Scalar  n,
IndexVector &  parent,
IndexVector &  post 
)

Post order a tree.

Parameters
nthe number of nodes
parentInput tree
postpostordered tree
168  {
169  typedef typename IndexVector::Scalar StorageIndex;
170  IndexVector first_kid, next_kid; // Linked list of children
171  StorageIndex postnum;
172  // Allocate storage for working arrays and results
173  first_kid.resize(n + 1);
174  next_kid.setZero(n + 1);
175  post.setZero(n + 1);
176 
177  // Set up structure describing children
178  first_kid.setConstant(-1);
179  for (StorageIndex v = n - 1; v >= 0; v--) {
180  StorageIndex dad = parent(v);
181  next_kid(v) = first_kid(dad);
182  first_kid(dad) = v;
183  }
184 
185  // Depth-first search from dummy root vertex #n
186  postnum = 0;
187  internal::nr_etdfs(n, parent, first_kid, next_kid, post, postnum);
188 }
void nr_etdfs(typename IndexVector::Scalar n, IndexVector &parent, IndexVector &first_kid, IndexVector &next_kid, IndexVector &post, typename IndexVector::Scalar postnum)
Definition: SparseColEtree.h:126

References n, nr_etdfs(), and v.

Referenced by Eigen::SparseLU< MatrixType_, OrderingType_ >::analyzePattern(), and Eigen::internal::SparseLUImpl< Scalar, StorageIndex >::heap_relax_snode().

◆ tridiagonalization_inplace() [1/2]

template<typename MatrixType , typename DiagonalType , typename SubDiagonalType , typename CoeffVectorType , typename WorkSpaceType >
EIGEN_DEVICE_FUNC void Eigen::internal::tridiagonalization_inplace ( MatrixType mat,
DiagonalType &  diag,
SubDiagonalType &  subdiag,
CoeffVectorType &  hcoeffs,
WorkSpaceType workspace,
bool  extractQ 
)

Performs a full tridiagonalization in place.

Parameters
[in,out]matOn input, the selfadjoint matrix whose tridiagonal decomposition is to be computed. Only the lower triangular part referenced. The rest is left unchanged. On output, the orthogonal matrix Q in the decomposition if extractQ is true.
[out]diagThe diagonal of the tridiagonal matrix T in the decomposition.
[out]subdiagThe subdiagonal of the tridiagonal matrix T in the decomposition.
[in]extractQIf true, the orthogonal matrix Q in the decomposition is computed and stored in mat.

Computes the tridiagonal decomposition of the selfadjoint matrix mat in place such that \( mat = Q T Q^* \) where \( Q \) is unitary and \( T \) a real symmetric tridiagonal matrix.

The tridiagonal matrix T is passed to the output parameters diag and subdiag. If extractQ is true, then the orthogonal matrix Q is passed to mat. Otherwise the lower part of the matrix mat is destroyed.

The vectors diag and subdiag are not resized. The function assumes that they are already of the correct size. The length of the vector diag should equal the number of rows in mat, and the length of the vector subdiag should be one left.

This implementation contains an optimized path for 3-by-3 matrices which is especially useful for plane fitting.

Note
Currently, it requires two temporary vectors to hold the intermediate Householder coefficients, and to reconstruct the matrix Q from the Householder reflectors.

Example (this uses the same matrix as the example in Tridiagonalization::Tridiagonalization(const MatrixType&)):

MatrixXd X = MatrixXd::Random(5, 5);
MatrixXd A = X + X.transpose();
cout << "Here is a random symmetric 5x5 matrix:" << endl << A << endl << endl;
VectorXd diag(5);
VectorXd subdiag(4);
VectorXd hcoeffs(4); // Scratch space for householder reflector.
VectorXd workspace(5);
internal::tridiagonalization_inplace(A, diag, subdiag, hcoeffs, workspace, true);
cout << "The orthogonal matrix Q is:" << endl << A << endl;
cout << "The diagonal of the tridiagonal matrix T is:" << endl << diag << endl;
cout << "The subdiagonal of the tridiagonal matrix T is:" << endl << subdiag << endl;
EIGEN_DEVICE_FUNC void tridiagonalization_inplace(MatrixType &matA, CoeffVectorType &hCoeffs)
Definition: Tridiagonalization.h:332

Output:

See also
class Tridiagonalization
415  {
416  eigen_assert(mat.cols() == mat.rows() && diag.size() == mat.rows() && subdiag.size() == mat.rows() - 1);
417  tridiagonalization_inplace_selector<MatrixType>::run(mat, diag, subdiag, hcoeffs, workspace, extractQ);
418 }

References Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), diag, eigen_assert, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), and Eigen::internal::tridiagonalization_inplace_selector< MatrixType, Size, IsComplex >::run().

◆ tridiagonalization_inplace() [2/2]

template<typename MatrixType , typename CoeffVectorType >
EIGEN_DEVICE_FUNC void Eigen::internal::tridiagonalization_inplace ( MatrixType matA,
CoeffVectorType &  hCoeffs 
)

Performs a tridiagonal decomposition of the selfadjoint matrix matA in-place.

Parameters
[in,out]matAOn input the selfadjoint matrix. Only the lower triangular part is referenced. On output, the strict upper part is left unchanged, and the lower triangular part represents the T and Q matrices in packed format has detailed below.
[out]hCoeffsreturned Householder coefficients (see below)

On output, the tridiagonal selfadjoint matrix T is stored in the diagonal and lower sub-diagonal of the matrix matA. The unitary matrix Q is represented in a compact way as a product of Householder reflectors \( H_i \) such that: \( Q = H_{N-1} \ldots H_1 H_0 \). The Householder reflectors are defined as \( H_i = (I - h_i v_i v_i^T) \) where \( h_i = hCoeffs[i]\) is the \( i \)th Householder coefficient and \( v_i \) is the Householder vector defined by \( v_i = [ 0, \ldots, 0, 1, matA(i+2,i), \ldots, matA(N-1,i) ]^T \).

Implemented from Golub's "Matrix Computations", algorithm 8.3.1.

See also
Tridiagonalization::packedMatrix()
332  {
333  using numext::conj;
334  typedef typename MatrixType::Scalar Scalar;
335  typedef typename MatrixType::RealScalar RealScalar;
336  Index n = matA.rows();
337  eigen_assert(n == matA.cols());
338  eigen_assert(n == hCoeffs.size() + 1 || n == 1);
339 
340  for (Index i = 0; i < n - 1; ++i) {
341  Index remainingSize = n - i - 1;
343  Scalar h;
344  matA.col(i).tail(remainingSize).makeHouseholderInPlace(h, beta);
345 
346  // Apply similarity transformation to remaining columns,
347  // i.e., A = H A H' where H = I - h v v' and v = matA.col(i).tail(n-i-1)
348  matA.col(i).coeffRef(i + 1) = 1;
349 
350  hCoeffs.tail(n - i - 1).noalias() =
351  (matA.bottomRightCorner(remainingSize, remainingSize).template selfadjointView<Lower>() *
352  (conj(h) * matA.col(i).tail(remainingSize)));
353 
354  hCoeffs.tail(n - i - 1) +=
355  (conj(h) * RealScalar(-0.5) * (hCoeffs.tail(remainingSize).dot(matA.col(i).tail(remainingSize)))) *
356  matA.col(i).tail(n - i - 1);
357 
358  matA.bottomRightCorner(remainingSize, remainingSize)
359  .template selfadjointView<Lower>()
360  .rankUpdate(matA.col(i).tail(remainingSize), hCoeffs.tail(remainingSize), Scalar(-1));
361 
362  matA.col(i).coeffRef(i + 1) = beta;
363  hCoeffs.coeffRef(i) = h;
364  }
365 }
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE Scalar & coeffRef(Index rowId, Index colId)
Definition: PlainObjectBase.h:217
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: PlainObjectBase.h:191
Eigen::Matrix< Scalar, Dynamic, Dynamic, ColMajor > matA(size, size)

References beta, Eigen::Matrix< Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_ >::coeffRef(), Eigen::PlainObjectBase< Derived >::cols(), conj(), Eigen::conj(), eigen_assert, i, matA(), n, and Eigen::PlainObjectBase< Derived >::rows().

Referenced by Eigen::SelfAdjointEigenSolver< MatrixType_ >::compute(), Eigen::Tridiagonalization< MatrixType_ >::compute(), Eigen::internal::tridiagonalization_inplace_selector< MatrixType, Size, IsComplex >::run(), and Eigen::Tridiagonalization< MatrixType_ >::Tridiagonalization().

◆ trig_reduce_huge()

float Eigen::internal::trig_reduce_huge ( float  xf,
Eigen::numext::int32_t quadrant 
)
inline
641  {
646 
647  const double pio2_62 = 3.4061215800865545e-19; // pi/2 * 2^-62
648  const uint64_t zero_dot_five = uint64_t(1) << 61; // 0.5 in 2.62-bit fixed-point format
649 
650  // 192 bits of 2/pi for Payne-Hanek reduction
651  // Bits are introduced by packet of 8 to enable aligned reads.
652  static const uint32_t two_over_pi[] = {
653  0x00000028, 0x000028be, 0x0028be60, 0x28be60db, 0xbe60db93, 0x60db9391, 0xdb939105, 0x9391054a, 0x91054a7f,
654  0x054a7f09, 0x4a7f09d5, 0x7f09d5f4, 0x09d5f47d, 0xd5f47d4d, 0xf47d4d37, 0x7d4d3770, 0x4d377036, 0x377036d8,
655  0x7036d8a5, 0x36d8a566, 0xd8a5664f, 0xa5664f10, 0x664f10e4, 0x4f10e410, 0x10e41000, 0xe4100000};
656 
657  uint32_t xi = numext::bit_cast<uint32_t>(xf);
658  // Below, -118 = -126 + 8.
659  // -126 is to get the exponent,
660  // +8 is to enable alignment of 2/pi's bits on 8 bits.
661  // This is possible because the fractional part of x as only 24 meaningful bits.
662  uint32_t e = (xi >> 23) - 118;
663  // Extract the mantissa and shift it to align it wrt the exponent
664  xi = ((xi & 0x007fffffu) | 0x00800000u) << (e & 0x7);
665 
666  uint32_t i = e >> 3;
667  uint32_t twoopi_1 = two_over_pi[i - 1];
668  uint32_t twoopi_2 = two_over_pi[i + 3];
669  uint32_t twoopi_3 = two_over_pi[i + 7];
670 
671  // Compute x * 2/pi in 2.62-bit fixed-point format.
672  uint64_t p;
673  p = uint64_t(xi) * twoopi_3;
674  p = uint64_t(xi) * twoopi_2 + (p >> 32);
675  p = (uint64_t(xi * twoopi_1) << 32) + p;
676 
677  // Round to nearest: add 0.5 and extract integral part.
678  uint64_t q = (p + zero_dot_five) >> 62;
679  *quadrant = int(q);
680  // Now it remains to compute "r = x - q*pi/2" with high accuracy,
681  // since we have p=x/(pi/2) with high accuracy, we can more efficiently compute r as:
682  // r = (p-q)*pi/2,
683  // where the product can be be carried out with sufficient accuracy using double precision.
684  p -= q << 62;
685  return float(double(int64_t(p)) * pio2_62);
686 }

References e(), i, int(), p, and Eigen::numext::q.

Referenced by psincos_float().

◆ trig_reduce_medium_double()

template<typename Packet >
Packet Eigen::internal::trig_reduce_medium_double ( const Packet x,
const Packet q_high,
const Packet q_low 
)
848  {
849  // Pi/2 split into 4 values
850  const Packet cst_pio2_a = pset1<Packet>(-1.570796325802803);
851  const Packet cst_pio2_b = pset1<Packet>(-9.920935184482005e-10);
852  const Packet cst_pio2_c = pset1<Packet>(-6.123234014771656e-17);
853  const Packet cst_pio2_d = pset1<Packet>(1.903488962019325e-25);
854 
855  Packet t;
856  t = pmadd(cst_pio2_a, q_high, x);
857  t = pmadd(cst_pio2_a, q_low, t);
858  t = pmadd(cst_pio2_b, q_high, t);
859  t = pmadd(cst_pio2_b, q_low, t);
860  t = pmadd(cst_pio2_c, q_high, t);
861  t = pmadd(cst_pio2_c, q_low, t);
862  t = pmadd(cst_pio2_d, padd(q_low, q_high), t);
863  return t;
864 }

References padd(), pmadd(), plotPSD::t, and plotDoE::x.

Referenced by psincos_double().

◆ trig_reduce_small_double()

template<typename Packet >
Packet Eigen::internal::trig_reduce_small_double ( const Packet x,
const Packet q 
)
833  {
834  // Pi/2 split into 2 values
835  const Packet cst_pio2_a = pset1<Packet>(-1.570796325802803);
836  const Packet cst_pio2_b = pset1<Packet>(-9.920935184482005e-10);
837 
838  Packet t;
839  t = pmadd(cst_pio2_a, q, x);
840  t = pmadd(cst_pio2_b, q, t);
841  return t;
842 }

References pmadd(), Eigen::numext::q, plotPSD::t, and plotDoE::x.

Referenced by psincos_double().

◆ triSolve()

template<typename Scalar , bool isARowMajor = true, bool isBRowMajor = true, bool isFWDSolve = true, bool isUnitDiag = false>
void Eigen::internal::triSolve ( Scalar A_arr,
Scalar B_arr,
int64_t  M,
int64_t  numRHS,
int64_t  LDA,
int64_t  LDB 
)

Main triangular solve driver

Triangular solve with A on the left. Scalar: Scalar precision, only float/double is supported. isARowMajor: is A row-major? isBRowMajor: is B row-major? isFWDSolve: is this forward solve or backward (true => forward)? isUnitDiag: is diagonal of A unit or nonunit (true => A has unit diagonal)?

M: dimension of A numRHS: number of right hand sides (coincides with K dimension for gemm updates)

Here are the mapping between the different TRSM cases (col-major) and triSolve:

LLN (left , lower, A non-transposed) :: isARowMajor=false, isBRowMajor=false, isFWDSolve=true LUT (left , upper, A transposed) :: isARowMajor=true, isBRowMajor=false, isFWDSolve=true LUN (left , upper, A non-transposed) :: isARowMajor=false, isBRowMajor=false, isFWDSolve=false LLT (left , lower, A transposed) :: isARowMajor=true, isBRowMajor=false, isFWDSolve=false RUN (right, upper, A non-transposed) :: isARowMajor=true, isBRowMajor=true, isFWDSolve=true RLT (right, lower, A transposed) :: isARowMajor=false, isBRowMajor=true, isFWDSolve=true RUT (right, upper, A transposed) :: isARowMajor=false, isBRowMajor=true, isFWDSolve=false RLN (right, lower, A non-transposed) :: isARowMajor=true, isBRowMajor=true, isFWDSolve=false

Note: For RXX cases M,numRHS should be swapped.

The values for kB, numM were determined experimentally. kB: Number of RHS we process at a time. numM: number of rows of B we will store in a temporary array (see below.) This should be a multiple of L.

kB was determined by initially setting kB = numRHS and benchmarking triSolve (TRSM-RUN case) performance with M=numRHS. It was observed that performance started to drop around M=numRHS=240. This is likely machine dependent.

numM was chosen "arbitrarily". It should be relatively small so B_temp is not too large, but it should be large enough to allow GEMM updates to have larger "K"s (see below.) No benchmarking has been done so far to determine optimal values for numM.

If B is col-major, we copy it to a fixed-size temporary array of size at most ~numM*kB and transpose it to row-major. Call the solve routine, and copy+transpose it back to the original array. The updated row-major copy of B is reused in the GEMM updates.

For the GEMM updates, we want "K" (K=i+8 in this case) to be large as soon as possible to reuse the accumulators in GEMM as much as possible. So we only update 8xbK blocks of B as follows:

   A             B
__

|__|__ |__| |__|__|__ |__| |__|__|__|__ |__| |********|__| |**|

Similar idea as mentioned above, but here we are limited by the number of updated values of B that can be stored (row-major) in B_temp.

If there is not enough space to store the next batch of 8xbK of B in B_temp, we call GEMM update and partially update the remaining old values of B which depends on the new values of B stored in B_temp. These values are then no longer needed and can be overwritten.

If there is enough space in B_temp, we only update the next 8xbK values of B.

900  {
901  constexpr int64_t psize = packet_traits<Scalar>::size;
915  constexpr int64_t kB = (3 * psize) * 5; // 5*U3
916  constexpr int64_t numM = 8 * EIGEN_AVX_MAX_NUM_ROW;
917 
918  int64_t sizeBTemp = 0;
919  Scalar *B_temp = NULL;
920  EIGEN_IF_CONSTEXPR(!isBRowMajor) {
926  sizeBTemp = (((std::min(kB, numRHS) + psize - 1) / psize + 4) * psize) * numM;
927  }
928 
929  EIGEN_IF_CONSTEXPR(!isBRowMajor) B_temp = (Scalar *)handmade_aligned_malloc(sizeof(Scalar) * sizeBTemp, 64);
930 
931  for (int64_t k = 0; k < numRHS; k += kB) {
932  int64_t bK = numRHS - k > kB ? kB : numRHS - k;
933  int64_t M_ = (M / EIGEN_AVX_MAX_NUM_ROW) * EIGEN_AVX_MAX_NUM_ROW, gemmOff = 0;
934 
935  // bK rounded up to next multiple of L=EIGEN_AVX_MAX_NUM_ROW. When B_temp is used, we solve for bkL RHS
936  // instead of bK RHS in triSolveKernelLxK.
938  const int64_t numScalarPerCache = 64 / sizeof(Scalar);
939  // Leading dimension of B_temp, will be a multiple of the cache line size.
940  int64_t LDT = ((bkL + (numScalarPerCache - 1)) / numScalarPerCache) * numScalarPerCache;
941  int64_t offsetBTemp = 0;
942  for (int64_t i = 0; i < M_; i += EIGEN_AVX_MAX_NUM_ROW) {
943  EIGEN_IF_CONSTEXPR(!isBRowMajor) {
944  int64_t indA_i = isFWDSolve ? i : M - 1 - i;
945  int64_t indB_i = isFWDSolve ? i : M - (i + EIGEN_AVX_MAX_NUM_ROW);
946  int64_t offB_1 = isFWDSolve ? offsetBTemp : sizeBTemp - EIGEN_AVX_MAX_NUM_ROW * LDT - offsetBTemp;
947  int64_t offB_2 = isFWDSolve ? offsetBTemp : sizeBTemp - LDT - offsetBTemp;
948  // Copy values from B to B_temp.
949  copyBToRowMajor<Scalar, true, false>(B_arr + indB_i + k * LDB, LDB, bK, B_temp + offB_1, LDT);
950  // Triangular solve with a small block of A and long horizontal blocks of B (or B_temp if B col-major)
951  triSolveKernelLxK<Scalar, isARowMajor, isFWDSolve, isUnitDiag>(
952  &A_arr[idA<isARowMajor>(indA_i, indA_i, LDA)], B_temp + offB_2, EIGEN_AVX_MAX_NUM_ROW, bkL, LDA, LDT);
953  // Copy values from B_temp back to B. B_temp will be reused in gemm call below.
954  copyBToRowMajor<Scalar, false, false>(B_arr + indB_i + k * LDB, LDB, bK, B_temp + offB_1, LDT);
955 
956  offsetBTemp += EIGEN_AVX_MAX_NUM_ROW * LDT;
957  }
958  else {
959  int64_t ind = isFWDSolve ? i : M - 1 - i;
960  triSolveKernelLxK<Scalar, isARowMajor, isFWDSolve, isUnitDiag>(
961  &A_arr[idA<isARowMajor>(ind, ind, LDA)], B_arr + k + ind * LDB, EIGEN_AVX_MAX_NUM_ROW, bK, LDA, LDB);
962  }
963  if (i + EIGEN_AVX_MAX_NUM_ROW < M_) {
976  EIGEN_IF_CONSTEXPR(isBRowMajor) {
977  int64_t indA_i = isFWDSolve ? i + EIGEN_AVX_MAX_NUM_ROW : M - (i + 2 * EIGEN_AVX_MAX_NUM_ROW);
978  int64_t indA_j = isFWDSolve ? 0 : M - (i + EIGEN_AVX_MAX_NUM_ROW);
979  int64_t indB_i = isFWDSolve ? 0 : M - (i + EIGEN_AVX_MAX_NUM_ROW);
980  int64_t indB_i2 = isFWDSolve ? i + EIGEN_AVX_MAX_NUM_ROW : M - (i + 2 * EIGEN_AVX_MAX_NUM_ROW);
981  gemmKernel<Scalar, isARowMajor, isBRowMajor, false, false>(
982  &A_arr[idA<isARowMajor>(indA_i, indA_j, LDA)], B_arr + k + indB_i * LDB, B_arr + k + indB_i2 * LDB,
984  }
985  else {
986  if (offsetBTemp + EIGEN_AVX_MAX_NUM_ROW * LDT > sizeBTemp) {
995  int64_t indA_i = isFWDSolve ? i + EIGEN_AVX_MAX_NUM_ROW : 0;
996  int64_t indA_j = isFWDSolve ? gemmOff : M - (i + EIGEN_AVX_MAX_NUM_ROW);
997  int64_t indB_i = isFWDSolve ? i + EIGEN_AVX_MAX_NUM_ROW : 0;
998  int64_t offB_1 = isFWDSolve ? 0 : sizeBTemp - offsetBTemp;
999  gemmKernel<Scalar, isARowMajor, isBRowMajor, false, false>(
1000  &A_arr[idA<isARowMajor>(indA_i, indA_j, LDA)], B_temp + offB_1, B_arr + indB_i + (k)*LDB,
1001  M - (i + EIGEN_AVX_MAX_NUM_ROW), bK, i + EIGEN_AVX_MAX_NUM_ROW - gemmOff, LDA, LDT, LDB);
1002  offsetBTemp = 0;
1003  gemmOff = i + EIGEN_AVX_MAX_NUM_ROW;
1004  } else {
1008  int64_t indA_i = isFWDSolve ? i + EIGEN_AVX_MAX_NUM_ROW : M - (i + 2 * EIGEN_AVX_MAX_NUM_ROW);
1009  int64_t indA_j = isFWDSolve ? gemmOff : M - (i + EIGEN_AVX_MAX_NUM_ROW);
1010  int64_t indB_i = isFWDSolve ? i + EIGEN_AVX_MAX_NUM_ROW : M - (i + 2 * EIGEN_AVX_MAX_NUM_ROW);
1011  int64_t offB_1 = isFWDSolve ? 0 : sizeBTemp - offsetBTemp;
1012  gemmKernel<Scalar, isARowMajor, isBRowMajor, false, false>(
1013  &A_arr[idA<isARowMajor>(indA_i, indA_j, LDA)], B_temp + offB_1, B_arr + indB_i + (k)*LDB,
1014  EIGEN_AVX_MAX_NUM_ROW, bK, i + EIGEN_AVX_MAX_NUM_ROW - gemmOff, LDA, LDT, LDB);
1015  }
1016  }
1017  }
1018  }
1019  // Handle M remainder..
1020  int64_t bM = M - M_;
1021  if (bM > 0) {
1022  if (M_ > 0) {
1023  EIGEN_IF_CONSTEXPR(isBRowMajor) {
1024  int64_t indA_i = isFWDSolve ? M_ : 0;
1025  int64_t indA_j = isFWDSolve ? 0 : bM;
1026  int64_t indB_i = isFWDSolve ? 0 : bM;
1027  int64_t indB_i2 = isFWDSolve ? M_ : 0;
1028  gemmKernel<Scalar, isARowMajor, isBRowMajor, false, false>(
1029  &A_arr[idA<isARowMajor>(indA_i, indA_j, LDA)], B_arr + k + indB_i * LDB, B_arr + k + indB_i2 * LDB, bM,
1030  bK, M_, LDA, LDB, LDB);
1031  }
1032  else {
1033  int64_t indA_i = isFWDSolve ? M_ : 0;
1034  int64_t indA_j = isFWDSolve ? gemmOff : bM;
1035  int64_t indB_i = isFWDSolve ? M_ : 0;
1036  int64_t offB_1 = isFWDSolve ? 0 : sizeBTemp - offsetBTemp;
1037  gemmKernel<Scalar, isARowMajor, isBRowMajor, false, false>(&A_arr[idA<isARowMajor>(indA_i, indA_j, LDA)],
1038  B_temp + offB_1, B_arr + indB_i + (k)*LDB, bM, bK,
1039  M_ - gemmOff, LDA, LDT, LDB);
1040  }
1041  }
1042  EIGEN_IF_CONSTEXPR(!isBRowMajor) {
1043  int64_t indA_i = isFWDSolve ? M_ : M - 1 - M_;
1044  int64_t indB_i = isFWDSolve ? M_ : 0;
1045  int64_t offB_1 = isFWDSolve ? 0 : (bM - 1) * bkL;
1046  copyBToRowMajor<Scalar, true, true>(B_arr + indB_i + k * LDB, LDB, bK, B_temp, bkL, bM);
1047  triSolveKernelLxK<Scalar, isARowMajor, isFWDSolve, isUnitDiag>(&A_arr[idA<isARowMajor>(indA_i, indA_i, LDA)],
1048  B_temp + offB_1, bM, bkL, LDA, bkL);
1049  copyBToRowMajor<Scalar, false, true>(B_arr + indB_i + k * LDB, LDB, bK, B_temp, bkL, bM);
1050  }
1051  else {
1052  int64_t ind = isFWDSolve ? M_ : M - 1 - M_;
1053  triSolveKernelLxK<Scalar, isARowMajor, isFWDSolve, isUnitDiag>(&A_arr[idA<isARowMajor>(ind, ind, LDA)],
1054  B_arr + k + ind * LDB, bM, bK, LDA, LDB);
1055  }
1056  }
1057  }
1058 
1059  EIGEN_IF_CONSTEXPR(!isBRowMajor) handmade_aligned_free(B_temp);
1060 }

References EIGEN_AVX_MAX_NUM_ROW, EIGEN_IF_CONSTEXPR, handmade_aligned_free(), handmade_aligned_malloc(), i, ind, k, oomph::OcTreeNames::LDB, and min.

◆ triSolveKernel()

template<typename Scalar , typename vec , int64_t unrollM, bool isARowMajor, bool isFWDSolve, bool isUnitDiag>
EIGEN_ALWAYS_INLINE void Eigen::internal::triSolveKernel ( Scalar A_arr,
Scalar B_arr,
int64_t  K,
int64_t  LDA,
int64_t  LDB 
)

Triangular solve kernel with A on left with K number of rhs. dim(A) = unrollM

unrollM: dimension of A matrix (triangular matrix). unrollM should be <= EIGEN_AVX_MAX_NUM_ROW isFWDSolve: is forward solve? isUnitDiag: is the diagonal of A all ones? The B matrix (RHS) is assumed to be row-major

732  {
733  static_assert(unrollM <= EIGEN_AVX_MAX_NUM_ROW, "unrollM should be equal to EIGEN_AVX_MAX_NUM_ROW");
734  using urolls = unrolls::trsm<Scalar>;
735  constexpr int64_t U3 = urolls::PacketSize * 3;
736  constexpr int64_t U2 = urolls::PacketSize * 2;
737  constexpr int64_t U1 = urolls::PacketSize * 1;
738 
739  PacketBlock<vec, EIGEN_AVX_MAX_NUM_ACC> RHSInPacket;
740  PacketBlock<vec, EIGEN_AVX_MAX_NUM_ROW> AInPacket;
741 
742  int64_t k = 0;
743  while (K - k >= U3) {
744  urolls::template loadRHS<isFWDSolve, unrollM, 3>(B_arr + k, LDB, RHSInPacket);
745  urolls::template triSolveMicroKernel<isARowMajor, isFWDSolve, isUnitDiag, unrollM, 3>(A_arr, LDA, RHSInPacket,
746  AInPacket);
747  urolls::template storeRHS<isFWDSolve, unrollM, 3>(B_arr + k, LDB, RHSInPacket);
748  k += U3;
749  }
750  if (K - k >= U2) {
751  urolls::template loadRHS<isFWDSolve, unrollM, 2>(B_arr + k, LDB, RHSInPacket);
752  urolls::template triSolveMicroKernel<isARowMajor, isFWDSolve, isUnitDiag, unrollM, 2>(A_arr, LDA, RHSInPacket,
753  AInPacket);
754  urolls::template storeRHS<isFWDSolve, unrollM, 2>(B_arr + k, LDB, RHSInPacket);
755  k += U2;
756  }
757  if (K - k >= U1) {
758  urolls::template loadRHS<isFWDSolve, unrollM, 1>(B_arr + k, LDB, RHSInPacket);
759  urolls::template triSolveMicroKernel<isARowMajor, isFWDSolve, isUnitDiag, unrollM, 1>(A_arr, LDA, RHSInPacket,
760  AInPacket);
761  urolls::template storeRHS<isFWDSolve, unrollM, 1>(B_arr + k, LDB, RHSInPacket);
762  k += U1;
763  }
764  if (K - k > 0) {
765  // Handle remaining number of RHS
766  urolls::template loadRHS<isFWDSolve, unrollM, 1, true>(B_arr + k, LDB, RHSInPacket, K - k);
767  urolls::template triSolveMicroKernel<isARowMajor, isFWDSolve, isUnitDiag, unrollM, 1>(A_arr, LDA, RHSInPacket,
768  AInPacket);
769  urolls::template storeRHS<isFWDSolve, unrollM, 1, true>(B_arr + k, LDB, RHSInPacket, K - k);
770  }
771 }

References EIGEN_AVX_MAX_NUM_ROW, k, PlanarWave::K, and oomph::OcTreeNames::LDB.

◆ triSolveKernelLxK()

template<typename Scalar , bool isARowMajor, bool isFWDSolve, bool isUnitDiag>
void Eigen::internal::triSolveKernelLxK ( Scalar A_arr,
Scalar B_arr,
int64_t  M,
int64_t  K,
int64_t  LDA,
int64_t  LDB 
)

Triangular solve routine with A on left and dimension of at most L with K number of rhs. This is essentially a wrapper for triSolveMicrokernel for M = {1,2,3,4,5,6,7,8}.

isFWDSolve: is forward solve? isUnitDiag: is the diagonal of A all ones? The B matrix (RHS) is assumed to be row-major

782  {
783  // Note: this assumes EIGEN_AVX_MAX_NUM_ROW = 8. Unrolls should be adjusted
784  // accordingly if EIGEN_AVX_MAX_NUM_ROW is smaller.
786  if (M == 8)
787  triSolveKernel<Scalar, vec, 8, isARowMajor, isFWDSolve, isUnitDiag>(A_arr, B_arr, K, LDA, LDB);
788  else if (M == 7)
789  triSolveKernel<Scalar, vec, 7, isARowMajor, isFWDSolve, isUnitDiag>(A_arr, B_arr, K, LDA, LDB);
790  else if (M == 6)
791  triSolveKernel<Scalar, vec, 6, isARowMajor, isFWDSolve, isUnitDiag>(A_arr, B_arr, K, LDA, LDB);
792  else if (M == 5)
793  triSolveKernel<Scalar, vec, 5, isARowMajor, isFWDSolve, isUnitDiag>(A_arr, B_arr, K, LDA, LDB);
794  else if (M == 4)
795  triSolveKernel<Scalar, vec, 4, isARowMajor, isFWDSolve, isUnitDiag>(A_arr, B_arr, K, LDA, LDB);
796  else if (M == 3)
797  triSolveKernel<Scalar, vec, 3, isARowMajor, isFWDSolve, isUnitDiag>(A_arr, B_arr, K, LDA, LDB);
798  else if (M == 2)
799  triSolveKernel<Scalar, vec, 2, isARowMajor, isFWDSolve, isUnitDiag>(A_arr, B_arr, K, LDA, LDB);
800  else if (M == 1)
801  triSolveKernel<Scalar, vec, 1, isARowMajor, isFWDSolve, isUnitDiag>(A_arr, B_arr, K, LDA, LDB);
802  return;
803 }

References PlanarWave::K, oomph::OcTreeNames::LDB, compute_granudrum_aor::type, and Eigen::value.

◆ twoprod() [1/3]

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::twoprod ( const Packet x,
const Packet y,
Packet p_hi,
Packet p_lo 
)
1701  {
1702  Packet x_hi, x_lo, y_hi, y_lo;
1703  veltkamp_splitting(x, x_hi, x_lo);
1704  veltkamp_splitting(y, y_hi, y_lo);
1705 
1706  p_hi = pmul(x, y);
1707  p_lo = pmadd(x_hi, y_hi, pnegate(p_hi));
1708  p_lo = pmadd(x_hi, y_lo, p_lo);
1709  p_lo = pmadd(x_lo, y_hi, p_lo);
1710  p_lo = pmadd(x_lo, y_lo, p_lo);
1711 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void veltkamp_splitting(const Packet &x, Packet &x_hi, Packet &x_lo)
Definition: GenericPacketMathFunctions.h:1686

References pmadd(), pmul(), pnegate(), veltkamp_splitting(), plotDoE::x, and y.

Referenced by doubleword_div_fp(), generic_exp2(), generic_pow_impl(), Eigen::internal::accurate_log2< double >::operator()(), Eigen::internal::accurate_log2< float >::operator()(), and twoprod().

◆ twoprod() [2/3]

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::twoprod ( const Packet x_hi,
const Packet x_lo,
const Packet y,
Packet p_hi,
Packet p_lo 
)
1786  {
1787  Packet c_hi, c_lo1;
1788  twoprod(x_hi, y, c_hi, c_lo1);
1789  const Packet c_lo2 = pmul(x_lo, y);
1790  Packet t_hi, t_lo1;
1791  fast_twosum(c_hi, c_lo2, t_hi, t_lo1);
1792  const Packet t_lo2 = padd(t_lo1, c_lo1);
1793  fast_twosum(t_hi, t_lo2, p_hi, p_lo);
1794 }

References fast_twosum(), padd(), pmul(), twoprod(), and y.

◆ twoprod() [3/3]

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::twoprod ( const Packet x_hi,
const Packet x_lo,
const Packet y_hi,
const Packet y_lo,
Packet p_hi,
Packet p_lo 
)
1804  {
1805  Packet p_hi_hi, p_hi_lo;
1806  twoprod(x_hi, x_lo, y_hi, p_hi_hi, p_hi_lo);
1807  Packet p_lo_hi, p_lo_lo;
1808  twoprod(x_hi, x_lo, y_lo, p_lo_hi, p_lo_lo);
1809  fast_twosum(p_hi_hi, p_hi_lo, p_lo_hi, p_lo_lo, p_hi, p_lo);
1810 }

References fast_twosum(), and twoprod().

◆ twoprod_low()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet Eigen::internal::twoprod_low ( const Packet x,
const Packet y,
const Packet xy 
)
1716  {
1717  Packet x_hi, x_lo, y_hi, y_lo;
1718  veltkamp_splitting(x, x_hi, x_lo);
1719  veltkamp_splitting(y, y_hi, y_lo);
1720 
1721  Packet p_lo = pmadd(x_hi, y_hi, pnegate(xy));
1722  p_lo = pmadd(x_hi, y_lo, p_lo);
1723  p_lo = pmadd(x_lo, y_hi, p_lo);
1724  p_lo = pmadd(x_lo, y_lo, p_lo);
1725  return p_lo;
1726 }
Matrix< float, 2, 1 > xy
Definition: LLT_solve.cpp:6

References pmadd(), pnegate(), veltkamp_splitting(), plotDoE::x, xy, and y.

Referenced by erfc_double_large(), and Eigen::internal::generic_fast_erfc< Scalar >::run().

◆ twosum()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::twosum ( const Packet x_hi,
const Packet x_lo,
const Packet y_hi,
const Packet y_lo,
Packet s_hi,
Packet s_lo 
)
1738  {
1739  const Packet x_greater_mask = pcmp_lt(pabs(y_hi), pabs(x_hi));
1740  Packet r_hi_1, r_lo_1;
1741  fast_twosum(x_hi, y_hi, r_hi_1, r_lo_1);
1742  Packet r_hi_2, r_lo_2;
1743  fast_twosum(y_hi, x_hi, r_hi_2, r_lo_2);
1744  const Packet r_hi = pselect(x_greater_mask, r_hi_1, r_hi_2);
1745 
1746  const Packet s1 = padd(padd(y_lo, r_lo_1), x_lo);
1747  const Packet s2 = padd(padd(x_lo, r_lo_2), y_lo);
1748  const Packet s = pselect(x_greater_mask, s1, s2);
1749 
1750  fast_twosum(r_hi, s, s_hi, s_lo);
1751 }

References fast_twosum(), pabs(), padd(), pcmp_lt(), pselect(), and s.

◆ update_value() [1/4]

template<typename T >
EIGEN_DEVICE_FUNC void Eigen::internal::update_value ( T val,
Index  new_val 
)
73  {
74  val = internal::convert_index<T>(new_val);
75 }

References calibrate::val.

Referenced by Eigen::internal::tuple_coeff< Idx, ValueT >::set(), and Eigen::internal::tuple_coeff< 0, ValueT >::set().

◆ update_value() [2/4]

template<typename T >
EIGEN_DEVICE_FUNC void Eigen::internal::update_value ( T val,
IndexPair< Index new_val 
)
82  {
83  val = new_val;
84 }

References calibrate::val.

◆ update_value() [3/4]

template<Index n>
EIGEN_DEVICE_FUNC void Eigen::internal::update_value ( type2index< n > &  val,
Index  new_val 
)
77  {
78  val.set(new_val);
79 }

References calibrate::val.

◆ update_value() [4/4]

template<Index f, Index s>
EIGEN_DEVICE_FUNC void Eigen::internal::update_value ( type2indexpair< f, s > &  val,
IndexPair< Index new_val 
)
86  {
87  val.set(new_val);
88 }

References calibrate::val.

◆ upperbidiagonalization_blocked_helper()

template<typename MatrixType >
void Eigen::internal::upperbidiagonalization_blocked_helper ( MatrixType A,
typename MatrixType::RealScalar diagonal,
typename MatrixType::RealScalar upper_diagonal,
Index  bs,
Ref< Matrix< typename MatrixType::Scalar, Dynamic, Dynamic, traits< MatrixType >::Flags &RowMajorBit > >  X,
Ref< Matrix< typename MatrixType::Scalar, Dynamic, Dynamic, traits< MatrixType >::Flags &RowMajorBit > >  Y 
)

Helper routine for the block reduction to upper bidiagonal form.

Let's partition the matrix A:

 | A00 A01 |

A = | | | A10 A11 |

This function reduces to bidiagonal form the left rows x blockSize vertical panel [A00/A10] and the blockSize x cols horizontal panel [A00 A01] of the matrix A. The bottom-right block A11 is updated using matrix-matrix products: A22 -= V * Y^T - X * U^T where V and U contains the left and right Householder vectors. U and V are stored in A10, and A01 respectively, and the update matrices X and Y are computed during the reduction.

149  {
150  typedef typename MatrixType::Scalar Scalar;
151  typedef typename MatrixType::RealScalar RealScalar;
152  typedef typename NumTraits<RealScalar>::Literal Literal;
153  static constexpr int StorageOrder = (traits<MatrixType>::Flags & RowMajorBit) ? RowMajor : ColMajor;
154  typedef InnerStride<StorageOrder == ColMajor ? 1 : Dynamic> ColInnerStride;
155  typedef InnerStride<StorageOrder == ColMajor ? Dynamic : 1> RowInnerStride;
156  typedef Ref<Matrix<Scalar, Dynamic, 1>, 0, ColInnerStride> SubColumnType;
157  typedef Ref<Matrix<Scalar, 1, Dynamic>, 0, RowInnerStride> SubRowType;
158  typedef Ref<Matrix<Scalar, Dynamic, Dynamic, StorageOrder> > SubMatType;
159 
160  Index brows = A.rows();
161  Index bcols = A.cols();
162 
163  Scalar tau_u, tau_u_prev(0), tau_v;
164 
165  for (Index k = 0; k < bs; ++k) {
166  Index remainingRows = brows - k;
167  Index remainingCols = bcols - k - 1;
168 
169  SubMatType X_k1(X.block(k, 0, remainingRows, k));
170  SubMatType V_k1(A.block(k, 0, remainingRows, k));
171 
172  // 1 - update the k-th column of A
173  SubColumnType v_k = A.col(k).tail(remainingRows);
174  v_k -= V_k1 * Y.row(k).head(k).adjoint();
175  if (k) v_k -= X_k1 * A.col(k).head(k);
176 
177  // 2 - construct left Householder transform in-place
178  v_k.makeHouseholderInPlace(tau_v, diagonal[k]);
179 
180  if (k + 1 < bcols) {
181  SubMatType Y_k(Y.block(k + 1, 0, remainingCols, k + 1));
182  SubMatType U_k1(A.block(0, k + 1, k, remainingCols));
183 
184  // this eases the application of Householder transforAions
185  // A(k,k) will store tau_v later
186  A(k, k) = Scalar(1);
187 
188  // 3 - Compute y_k^T = tau_v * ( A^T*v_k - Y_k-1*V_k-1^T*v_k - U_k-1*X_k-1^T*v_k )
189  {
190  SubColumnType y_k(Y.col(k).tail(remainingCols));
191 
192  // let's use the beginning of column k of Y as a temporary vector
193  SubColumnType tmp(Y.col(k).head(k));
194  y_k.noalias() = A.block(k, k + 1, remainingRows, remainingCols).adjoint() * v_k; // bottleneck
195  tmp.noalias() = V_k1.adjoint() * v_k;
196  y_k.noalias() -= Y_k.leftCols(k) * tmp;
197  tmp.noalias() = X_k1.adjoint() * v_k;
198  y_k.noalias() -= U_k1.adjoint() * tmp;
199  y_k *= numext::conj(tau_v);
200  }
201 
202  // 4 - update k-th row of A (it will become u_k)
203  SubRowType u_k(A.row(k).tail(remainingCols));
204  u_k = u_k.conjugate();
205  {
206  u_k -= Y_k * A.row(k).head(k + 1).adjoint();
207  if (k) u_k -= U_k1.adjoint() * X.row(k).head(k).adjoint();
208  }
209 
210  // 5 - construct right Householder transform in-place
211  u_k.makeHouseholderInPlace(tau_u, upper_diagonal[k]);
212 
213  // this eases the application of Householder transformations
214  // A(k,k+1) will store tau_u later
215  A(k, k + 1) = Scalar(1);
216 
217  // 6 - Compute x_k = tau_u * ( A*u_k - X_k-1*U_k-1^T*u_k - V_k*Y_k^T*u_k )
218  {
219  SubColumnType x_k(X.col(k).tail(remainingRows - 1));
220 
221  // let's use the beginning of column k of X as a temporary vectors
222  // note that tmp0 and tmp1 overlaps
223  SubColumnType tmp0(X.col(k).head(k)), tmp1(X.col(k).head(k + 1));
224 
225  x_k.noalias() = A.block(k + 1, k + 1, remainingRows - 1, remainingCols) * u_k.transpose(); // bottleneck
226  tmp0.noalias() = U_k1 * u_k.transpose();
227  x_k.noalias() -= X_k1.bottomRows(remainingRows - 1) * tmp0;
228  tmp1.noalias() = Y_k.adjoint() * u_k.transpose();
229  x_k.noalias() -= A.block(k + 1, 0, remainingRows - 1, k + 1) * tmp1;
230  x_k *= numext::conj(tau_u);
231  tau_u = numext::conj(tau_u);
232  u_k = u_k.conjugate();
233  }
234 
235  if (k > 0) A.coeffRef(k - 1, k) = tau_u_prev;
236  tau_u_prev = tau_u;
237  } else
238  A.coeffRef(k - 1, k) = tau_u_prev;
239 
240  A.coeffRef(k, k) = tau_v;
241  }
242 
243  if (bs < bcols) A.coeffRef(bs - 1, bs) = tau_u_prev;
244 
245  // update A22
246  if (bcols > bs && brows > bs) {
247  SubMatType A11(A.bottomRightCorner(brows - bs, bcols - bs));
248  SubMatType A10(A.block(bs, 0, brows - bs, bs));
249  SubMatType A01(A.block(0, bs, bs, bcols - bs));
250  Scalar tmp = A01(bs - 1, 0);
251  A01(bs - 1, 0) = Literal(1);
252  A11.noalias() -= A10 * Y.topLeftCorner(bcols, bs).bottomRows(bcols - bs).adjoint();
253  A11.noalias() -= X.topLeftCorner(brows, bs).bottomRows(brows - bs) * A01;
254  A01(bs - 1, 0) = tmp;
255  }
256 }
void diagonal(const MatrixType &m)
Definition: diagonal.cpp:13
const char Y
Definition: test/EulerAngles.cpp:32

References Eigen::Matrix< Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_ >::coeffRef(), Eigen::ColMajor, Eigen::PlainObjectBase< Derived >::cols(), conj(), diagonal(), k, Eigen::RowMajor, Eigen::RowMajorBit, Eigen::PlainObjectBase< Derived >::rows(), tmp, X, and Y.

◆ upperbidiagonalization_inplace_blocked()

template<typename MatrixType , typename BidiagType >
void Eigen::internal::upperbidiagonalization_inplace_blocked ( MatrixType A,
BidiagType &  bidiagonal,
Index  maxBlockSize = 32,
typename MatrixType::Scalar = 0 
)

Implementation of a block-bidiagonal reduction. It is based on the following paper: The Design of a Parallel Dense Linear Algebra Software Library: Reduction to Hessenberg, Tridiagonal, and Bidiagonal Form. by Jaeyoung Choi, Jack J. Dongarra, David W. Walker. (1995) section 3.3

267  {
268  typedef typename MatrixType::Scalar Scalar;
269  typedef Block<MatrixType, Dynamic, Dynamic> BlockType;
270 
271  Index rows = A.rows();
272  Index cols = A.cols();
273  Index size = (std::min)(rows, cols);
274 
275  // X and Y are work space
276  static constexpr int StorageOrder = (traits<MatrixType>::Flags & RowMajorBit) ? RowMajor : ColMajor;
277  Matrix<Scalar, MatrixType::RowsAtCompileTime, Dynamic, StorageOrder, MatrixType::MaxRowsAtCompileTime> X(
278  rows, maxBlockSize);
279  Matrix<Scalar, MatrixType::ColsAtCompileTime, Dynamic, StorageOrder, MatrixType::MaxColsAtCompileTime> Y(
280  cols, maxBlockSize);
281  Index blockSize = (std::min)(maxBlockSize, size);
282 
283  Index k = 0;
284  for (k = 0; k < size; k += blockSize) {
285  Index bs = (std::min)(size - k, blockSize); // actual size of the block
286  Index brows = rows - k; // rows of the block
287  Index bcols = cols - k; // columns of the block
288 
289  // partition the matrix A:
290  //
291  // | A00 A01 A02 |
292  // | |
293  // A = | A10 A11 A12 |
294  // | |
295  // | A20 A21 A22 |
296  //
297  // where A11 is a bs x bs diagonal block,
298  // and let:
299  // | A11 A12 |
300  // B = | |
301  // | A21 A22 |
302 
303  BlockType B = A.block(k, k, brows, bcols);
304 
305  // This stage performs the bidiagonalization of A11, A21, A12, and updating of A22.
306  // Finally, the algorithm continue on the updated A22.
307  //
308  // However, if B is too small, or A22 empty, then let's use an unblocked strategy
309 
310  auto upper_diagonal = bidiagonal.template diagonal<1>();
311  typename MatrixType::RealScalar* upper_diagonal_ptr =
312  upper_diagonal.size() > 0 ? &upper_diagonal.coeffRef(k) : nullptr;
313 
314  if (k + bs == cols || bcols < 48) // somewhat arbitrary threshold
315  {
316  upperbidiagonalization_inplace_unblocked(B, &(bidiagonal.template diagonal<0>().coeffRef(k)), upper_diagonal_ptr,
317  X.data());
318  break; // We're done
319  } else {
320  upperbidiagonalization_blocked_helper<BlockType>(B, &(bidiagonal.template diagonal<0>().coeffRef(k)),
321  upper_diagonal_ptr, bs, X.topLeftCorner(brows, bs),
322  Y.topLeftCorner(bcols, bs));
323  }
324  }
325 }
void upperbidiagonalization_inplace_unblocked(MatrixType &mat, typename MatrixType::RealScalar *diagonal, typename MatrixType::RealScalar *upper_diagonal, typename MatrixType::Scalar *tempData=0)
Definition: UpperBidiagonalization.h:93

References Eigen::ColMajor, cols, Eigen::PlainObjectBase< Derived >::cols(), k, min, Eigen::RowMajor, Eigen::RowMajorBit, rows, Eigen::PlainObjectBase< Derived >::rows(), size, upperbidiagonalization_inplace_unblocked(), X, and Y.

Referenced by Eigen::internal::UpperBidiagonalization< MatrixType_ >::compute().

◆ upperbidiagonalization_inplace_unblocked()

template<typename MatrixType >
void Eigen::internal::upperbidiagonalization_inplace_unblocked ( MatrixType mat,
typename MatrixType::RealScalar diagonal,
typename MatrixType::RealScalar upper_diagonal,
typename MatrixType::Scalar tempData = 0 
)
95  {
96  typedef typename MatrixType::Scalar Scalar;
97 
98  Index rows = mat.rows();
99  Index cols = mat.cols();
100 
101  typedef Matrix<Scalar, Dynamic, 1, ColMajor, MatrixType::MaxRowsAtCompileTime, 1> TempType;
102  TempType tempVector;
103  if (tempData == 0) {
104  tempVector.resize(rows);
105  tempData = tempVector.data();
106  }
107 
108  for (Index k = 0; /* breaks at k==cols-1 below */; ++k) {
109  Index remainingRows = rows - k;
110  Index remainingCols = cols - k - 1;
111 
112  // construct left householder transform in-place in A
113  mat.col(k).tail(remainingRows).makeHouseholderInPlace(mat.coeffRef(k, k), diagonal[k]);
114  // apply householder transform to remaining part of A on the left
115  mat.bottomRightCorner(remainingRows, remainingCols)
116  .applyHouseholderOnTheLeft(mat.col(k).tail(remainingRows - 1), mat.coeff(k, k), tempData);
117 
118  if (k == cols - 1) break;
119 
120  // construct right householder transform in-place in mat
121  mat.row(k).tail(remainingCols).makeHouseholderInPlace(mat.coeffRef(k, k + 1), upper_diagonal[k]);
122  // apply householder transform to remaining part of mat on the left
123  mat.bottomRightCorner(remainingRows - 1, remainingCols)
124  .applyHouseholderOnTheRight(mat.row(k).tail(remainingCols - 1).adjoint(), mat.coeff(k, k + 1), tempData);
125  }
126 }

References Eigen::SparseMatrixBase< Derived >::adjoint(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::coeff(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::coeffRef(), cols, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), diagonal(), k, Eigen::PlainObjectBase< Derived >::resize(), rows, and Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows().

Referenced by Eigen::internal::UpperBidiagonalization< MatrixType_ >::computeUnblocked(), and upperbidiagonalization_inplace_blocked().

◆ useSpecificBlockingSizes()

template<typename Index >
bool Eigen::internal::useSpecificBlockingSizes ( Index k,
Index m,
Index n 
)
inline
287  {
288 #ifdef EIGEN_TEST_SPECIFIC_BLOCKING_SIZES
290  k = numext::mini<Index>(k, EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_K);
291  m = numext::mini<Index>(m, EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_M);
292  n = numext::mini<Index>(n, EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_N);
293  return true;
294  }
295 #else
299 #endif
300  return false;
301 }
#define EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_M
Definition: benchmark-blocking-sizes.cpp:22
#define EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_K
Definition: benchmark-blocking-sizes.cpp:21
#define EIGEN_TEST_SPECIFIC_BLOCKING_SIZES
Definition: benchmark-blocking-sizes.cpp:20
#define EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_N
Definition: benchmark-blocking-sizes.cpp:23

References EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_K, EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_M, EIGEN_TEST_SPECIFIC_BLOCKING_SIZE_N, EIGEN_TEST_SPECIFIC_BLOCKING_SIZES, EIGEN_UNUSED_VARIABLE, k, m, and n.

Referenced by computeProductBlockingSizes().

◆ vec2d_swizzle2()

EIGEN_STRONG_INLINE Packet2d Eigen::internal::vec2d_swizzle2 ( const Packet2d a,
const Packet2d b,
int  mask 
)
157  {
158  return shuffle(a, b, mask);
159 }
EIGEN_STRONG_INLINE Packet2d shuffle(const Packet2d &m, const Packet2d &n, int mask)
Definition: LSX/PacketMath.h:150

References a, b, and shuffle().

Referenced by Eigen::internal::compute_inverse_size4< Architecture::Target, double, MatrixType, ResultType >::run().

◆ vec2d_unpackhi()

EIGEN_STRONG_INLINE Packet2d Eigen::internal::vec2d_unpackhi ( const Packet2d a,
const Packet2d b 
)

◆ vec2d_unpacklo()

EIGEN_STRONG_INLINE Packet2d Eigen::internal::vec2d_unpacklo ( const Packet2d a,
const Packet2d b 
)

◆ vec4f_movehl()

EIGEN_STRONG_INLINE Packet4f Eigen::internal::vec4f_movehl ( const Packet4f a,
const Packet4f b 
)
135  {
136  return shuffle2<false>(b, a, eigen_lsx_shuffle_mask(2, 3, 2, 3));
137 }
static EIGEN_STRONG_INLINE int eigen_lsx_shuffle_mask(int p, int q, int r, int s)
Definition: LSX/PacketMath.h:122

References a, b, and eigen_lsx_shuffle_mask().

Referenced by Eigen::internal::compute_inverse_size4< Architecture::Target, float, MatrixType, ResultType >::run().

◆ vec4f_movelh()

EIGEN_STRONG_INLINE Packet4f Eigen::internal::vec4f_movelh ( const Packet4f a,
const Packet4f b 
)
132  {
133  return shuffle2<false>(a, b, eigen_lsx_shuffle_mask(0, 1, 0, 1));
134 }

References a, b, and eigen_lsx_shuffle_mask().

Referenced by Eigen::internal::compute_inverse_size4< Architecture::Target, float, MatrixType, ResultType >::run().

◆ vec4f_swizzle1()

EIGEN_STRONG_INLINE Packet4f Eigen::internal::vec4f_swizzle1 ( const Packet4f a,
int  p,
int  q,
int  r,
int  s 
)

◆ vec4f_swizzle2()

EIGEN_STRONG_INLINE Packet4f Eigen::internal::vec4f_swizzle2 ( const Packet4f a,
const Packet4f b,
int  p,
int  q,
int  r,
int  s 
)

◆ vec4f_unpackhi()

EIGEN_STRONG_INLINE Packet4f Eigen::internal::vec4f_unpackhi ( const Packet4f a,
const Packet4f b 
)
141  {
142  return shuffle2<true>(a, b, eigen_lsx_shuffle_mask(2, 2, 3, 3));
143 }
EIGEN_STRONG_INLINE Packet4f shuffle2< true >(const Packet4f &m, const Packet4f &n, int mask)
Definition: LSX/PacketMath.h:114

References a, b, eigen_lsx_shuffle_mask(), and shuffle2< true >().

Referenced by Eigen::internal::compute_inverse_size4< Architecture::Target, float, MatrixType, ResultType >::run().

◆ vec4f_unpacklo()

EIGEN_STRONG_INLINE Packet4f Eigen::internal::vec4f_unpacklo ( const Packet4f a,
const Packet4f b 
)

◆ vec_splat_packet4f()

template<int element>
EIGEN_STRONG_INLINE Packet4f Eigen::internal::vec_splat_packet4f ( const Packet4f from)
732  {
733  Packet4f splat;
734  switch (element) {
735  case 0:
736  splat.v4f[0] = vec_splat(from.v4f[0], 0);
737  splat.v4f[1] = splat.v4f[0];
738  break;
739  case 1:
740  splat.v4f[0] = vec_splat(from.v4f[0], 1);
741  splat.v4f[1] = splat.v4f[0];
742  break;
743  case 2:
744  splat.v4f[0] = vec_splat(from.v4f[1], 0);
745  splat.v4f[1] = splat.v4f[0];
746  break;
747  case 3:
748  splat.v4f[0] = vec_splat(from.v4f[1], 1);
749  splat.v4f[1] = splat.v4f[0];
750  break;
751  }
752  return splat;
753 }

◆ vecColLoop()

template<Index num_acc, typename LhsMapper , typename RhsMapper , bool zero, bool linear>
EIGEN_ALWAYS_INLINE void Eigen::internal::vecColLoop ( Index  j,
LhsMapper &  lhs,
RhsMapper &  rhs,
__vector_quad(&)  quad_acc[num_acc] 
)
389  {
390  Packet8bf a0[num_acc];
392  Packet8bf b0 = loadColData<RhsMapper, linear>(rhs, j);
393 
394  if (zero) {
395  b0 = vec_mergeh(b0.m_val, b1.m_val);
396  }
397 
398  using LhsSubMapper = typename LhsMapper::SubMapper;
399 
400  LhsSubMapper lhs2 = lhs.getSubMapper(0, j);
402  for (Index k = 0; k < num_acc; k += 2) {
403  loadVecLoop<num_acc, LhsSubMapper, zero>(k, lhs2, a0, b1);
404  }
405 
406  multVec<num_acc>(quad_acc, a0, b0);
407 }

References BFLOAT16_UNROLL, j, k, Eigen::internal::eigen_packet_wrapper< T, unique_id >::m_val, pset1< Packet8bf >(), and zero().

◆ vecLoop()

template<Index num_acc, typename LhsMapper , typename RhsMapper >
EIGEN_ALWAYS_INLINE void Eigen::internal::vecLoop ( Index  cols,
const LhsMapper &  lhs,
RhsMapper &  rhs,
__vector_quad(&)  quad_acc[num_acc],
Index  extra_cols 
)
624  {
625  Index j = 0;
626  for (; j + 8 <= cols; j += 8) {
627  multVecLoop<num_acc, LhsMapper, RhsMapper, false>(quad_acc, lhs, rhs, j, extra_cols);
628  }
629 
630  if (extra_cols) {
631  multVecLoop<num_acc, LhsMapper, RhsMapper, true>(quad_acc, lhs, rhs, j, extra_cols);
632  }
633 }

References cols, and j.

◆ veltkamp_splitting()

template<typename Packet >
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void Eigen::internal::veltkamp_splitting ( const Packet x,
Packet x_hi,
Packet x_lo 
)
1686  {
1687  typedef typename unpacket_traits<Packet>::type Scalar;
1688  EIGEN_CONSTEXPR int shift = (NumTraits<Scalar>::digits() + 1) / 2;
1689  const Scalar shift_scale = Scalar(uint64_t(1) << shift); // Scalar constructor not necessarily constexpr.
1690  const Packet gamma = pmul(pset1<Packet>(shift_scale + Scalar(1)), x);
1691  Packet rho = psub(x, gamma);
1692  x_hi = padd(rho, gamma);
1693  x_lo = psub(x, x_hi);
1694 }

References EIGEN_CONSTEXPR, mathsFunc::gamma(), padd(), pmul(), psub(), and plotDoE::x.

Referenced by twoprod(), and twoprod_low().

◆ zeroAccumulators() [1/2]

template<Index num_acc>
EIGEN_ALWAYS_INLINE void Eigen::internal::zeroAccumulators ( __vector_quad(&)  quad_acc[num_acc])
73  {
75  for (Index k = 0; k < num_acc; k++) __builtin_mma_xxsetaccz(&(quad_acc[k]));
76 }

References BFLOAT16_UNROLL, and k.

◆ zeroAccumulators() [2/2]

template<Index num_acc, Index size = 4>
EIGEN_ALWAYS_INLINE void Eigen::internal::zeroAccumulators ( Packet4f(&)  acc[num_acc][size])
2827  {
2828  Packet4f z = pset1<Packet4f>(float(0));
2829 
2830  for (Index k = 0; k < num_acc; k++) {
2831  for (Index j = 0; j < size; j++) {
2832  acc[k][j] = z;
2833  }
2834  }
2835 }

References j, k, pset1< Packet4f >(), and size.

Variable Documentation

◆ arg_prod

template<typename... Ts>
constexpr EIGEN_DEVICE_FUNCdecltype(reduce<product_op, Ts...>::run((*((Ts*)0))...)) EIGEN_STRONG_INLIN Eigen::internal::arg_prod) (Ts... ts) ( Ts...  ts)
constexpr
436  {
437  return reduce<product_op, Ts...>::run(ts...);
438 }

Referenced by test_arg_reductions(), and Eigen::Sizes< Indices >::TotalSize().

◆ arg_sum

template<typename... Ts>
constexpr decltype(reduce<sum_op, Ts...>::run((*((Ts*)0))...)) EIGEN_STRONG_INLIN Eigen::internal::arg_sum) (Ts... ts) ( Ts...  ts)
constexpr
441  {
442  return reduce<sum_op, Ts...>::run(ts...);
443 }

Referenced by test_arg_reductions().

◆ defaultL1CacheSize

◆ defaultL2CacheSize

const std::ptrdiff_t Eigen::internal::defaultL2CacheSize = EIGEN_SET_DEFAULT_L2_CACHE_SIZE(512 * 1024)

◆ defaultL3CacheSize

const std::ptrdiff_t Eigen::internal::defaultL3CacheSize = EIGEN_SET_DEFAULT_L3_CACHE_SIZE(512 * 1024)

◆ is_int_or_enum_v

template<typename A >
constexpr bool Eigen::internal::is_int_or_enum_v = std::is_enum<A>::value || std::is_integral<A>::value
constexpr

Returns true if its argument is of integer or enum type. FIXME this has the same purpose as is_valid_index_type in XprHelper.h

◆ mask4

const Packet4i Eigen::internal::mask4[4] = {{0, 0, 0, 0}, {-1, 0, 0, 0}, {-1, -1, 0, 0}, {-1, -1, -1, 0}}
static

Referenced by bmask().

◆ matrix_function_separation

const float Eigen::internal::matrix_function_separation = 0.1f
static

Maximum distance allowed between eigenvalues to be considered "close".

Referenced by matrix_function_partition_eigenvalues().

◆ p16c_COUNTDOWN

Packet16c Eigen::internal::p16c_COUNTDOWN = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
static

Referenced by plset< Packet16c >().

◆ p16uc_COMPLEX32_REV [1/2]

Packet16uc Eigen::internal::p16uc_COMPLEX32_REV
static

◆ p16uc_COMPLEX32_REV [2/2]

Packet16uc Eigen::internal::p16uc_COMPLEX32_REV
static
Initial value:

◆ p16uc_COMPLEX32_REV2

Packet16uc Eigen::internal::p16uc_COMPLEX32_REV2
static
Initial value:
=
static Packet16uc p16uc_FORWARD
Definition: ZVector/PacketMath.h:123

◆ p16uc_COUNTDOWN

Packet16uc Eigen::internal::p16uc_COUNTDOWN = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
static

Referenced by plset< Packet16uc >().

◆ p16uc_DUPLICATE16_EVEN

const Packet16uc Eigen::internal::p16uc_DUPLICATE16_EVEN = {0, 1, 0, 1, 4, 5, 4, 5, 8, 9, 8, 9, 12, 13, 12, 13}
static

◆ p16uc_DUPLICATE16_ODD

const Packet16uc Eigen::internal::p16uc_DUPLICATE16_ODD = {2, 3, 2, 3, 6, 7, 6, 7, 10, 11, 10, 11, 14, 15, 14, 15}
static

◆ p16uc_DUPLICATE32_HI

Packet16uc Eigen::internal::p16uc_DUPLICATE32_HI = {0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5, 6, 7}
static

◆ p16uc_ELEMENT_VEC3

Packet16uc Eigen::internal::p16uc_ELEMENT_VEC3
static
Initial value:
= {0x0c, 0x0d, 0x0e, 0x0f, 0x1c, 0x1d, 0x1e, 0x1f,
0x0c, 0x0d, 0x0e, 0x0f, 0x1c, 0x1d, 0x1e, 0x1f}

Referenced by preduxVecResults2().

◆ p16uc_FORWARD [1/2]

Packet16uc Eigen::internal::p16uc_FORWARD = p16uc_REVERSE32
static

◆ p16uc_FORWARD [2/2]

Packet16uc Eigen::internal::p16uc_FORWARD = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
static

◆ p16uc_GETIMAG32

◆ p16uc_GETIMAG32b

const Packet16uc Eigen::internal::p16uc_GETIMAG32b = {4, 5, 6, 7, 20, 21, 22, 23, 12, 13, 14, 15, 28, 29, 30, 31}
static

◆ p16uc_GETREAL32

◆ p16uc_GETREAL32b

const Packet16uc Eigen::internal::p16uc_GETREAL32b = {0, 1, 2, 3, 16, 17, 18, 19, 8, 9, 10, 11, 24, 25, 26, 27}
static

◆ p16uc_HALF64_0_16

Packet16uc Eigen::internal::p16uc_HALF64_0_16
static
Initial value:
= vec_sld(vec_splat((Packet16uc)vec_abs(p4i_MINUS16), 0), (Packet16uc)p4i_ZERO,
8)

◆ p16uc_MERGE16_32_1

Packet16uc Eigen::internal::p16uc_MERGE16_32_1 = {0, 1, 16, 17, 2, 3, 18, 19, 0, 1, 16, 17, 2, 3, 18, 19}
static

◆ p16uc_MERGE16_32_2

Packet16uc Eigen::internal::p16uc_MERGE16_32_2 = {4, 5, 20, 21, 6, 7, 22, 23, 4, 5, 20, 21, 6, 7, 22, 23}
static

◆ p16uc_MERGE16_32_3

Packet16uc Eigen::internal::p16uc_MERGE16_32_3 = {8, 9, 24, 25, 10, 11, 26, 27, 8, 9, 24, 25, 10, 11, 26, 27}
static

◆ p16uc_MERGE16_32_4

Packet16uc Eigen::internal::p16uc_MERGE16_32_4 = {12, 13, 28, 29, 14, 15, 30, 31, 12, 13, 28, 29, 14, 15, 30, 31}
static

◆ p16uc_MERGE16_32_5

Packet16uc Eigen::internal::p16uc_MERGE16_32_5 = {0, 1, 16, 17, 16, 17, 16, 17, 0, 1, 16, 17, 16, 17, 16, 17}
static

◆ p16uc_MERGE16_32_6

Packet16uc Eigen::internal::p16uc_MERGE16_32_6 = {2, 3, 18, 19, 18, 19, 18, 19, 2, 3, 18, 19, 18, 19, 18, 19}
static

◆ p16uc_MERGE16_32_7

Packet16uc Eigen::internal::p16uc_MERGE16_32_7 = {4, 5, 20, 21, 20, 21, 20, 21, 4, 5, 20, 21, 20, 21, 20, 21}
static

◆ p16uc_MERGE16_32_8

Packet16uc Eigen::internal::p16uc_MERGE16_32_8 = {6, 7, 22, 23, 22, 23, 22, 23, 6, 7, 22, 23, 22, 23, 22, 23}
static

◆ p16uc_MERGEE16

Packet16uc Eigen::internal::p16uc_MERGEE16 = {0, 1, 16, 17, 4, 5, 20, 21, 8, 9, 24, 25, 12, 13, 28, 29}
static

Referenced by Bf16PackLow(), and pmerge().

◆ p16uc_MERGEL16

Packet16uc Eigen::internal::p16uc_MERGEL16 = {2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31}
static

Referenced by Bf16PackHigh().

◆ p16uc_MERGEO16

Packet16uc Eigen::internal::p16uc_MERGEO16 = {2, 3, 18, 19, 6, 7, 22, 23, 10, 11, 26, 27, 14, 15, 30, 31}
static

Referenced by Bf16PackHigh(), and pmerge().

◆ p16uc_PSET32_WEVEN [1/2]

Packet16uc Eigen::internal::p16uc_PSET32_WEVEN
static
Initial value:
=
vec_sld((Packet16uc)vec_splat((Packet4ui)p16uc_FORWARD, 0), (Packet16uc)vec_splat((Packet4ui)p16uc_FORWARD, 2),
8)

Referenced by Eigen::internal::Packet2cf::pmul().

◆ p16uc_PSET32_WEVEN [2/2]

Packet16uc Eigen::internal::p16uc_PSET32_WEVEN
static
Initial value:
8)
static Packet16uc p16uc_DUPLICATE32_HI
Definition: ZVector/PacketMath.h:113

◆ p16uc_PSET32_WODD [1/2]

Packet16uc Eigen::internal::p16uc_PSET32_WODD
static
Initial value:
=
vec_sld((Packet16uc)vec_splat((Packet4ui)p16uc_FORWARD, 1), (Packet16uc)vec_splat((Packet4ui)p16uc_FORWARD, 3),
8)

Referenced by Eigen::internal::Packet2cf::pmul().

◆ p16uc_PSET32_WODD [2/2]

Packet16uc Eigen::internal::p16uc_PSET32_WODD
static
Initial value:
=
vec_sld((Packet16uc)vec_splat((Packet4ui)p16uc_FORWARD, 0), (Packet16uc)vec_splat((Packet4ui)p16uc_FORWARD, 2),
8)

◆ p16uc_PSET64_HI [1/2]

Packet16uc Eigen::internal::p16uc_PSET64_HI
static
Initial value:
= (Packet16uc)vec_mergeh(
static Packet16uc p16uc_PSET32_WEVEN
Definition: AltiVec/PacketMath.h:132
static Packet16uc p16uc_PSET32_WODD
Definition: AltiVec/PacketMath.h:129

Referenced by pset1< Packet2cf >().

◆ p16uc_PSET64_HI [2/2]

Packet16uc Eigen::internal::p16uc_PSET64_HI = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7}
static

◆ p16uc_PSET64_LO [1/2]

Packet16uc Eigen::internal::p16uc_PSET64_LO
static

◆ p16uc_PSET64_LO [2/2]

Packet16uc Eigen::internal::p16uc_PSET64_LO
static

◆ p16uc_QUADRUPLICATE16

Packet16uc Eigen::internal::p16uc_QUADRUPLICATE16 = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3}
static

◆ p16uc_QUADRUPLICATE16_HI

Packet16uc Eigen::internal::p16uc_QUADRUPLICATE16_HI = {0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 2, 3, 2, 3, 2, 3}
static

◆ p16uc_REVERSE16

Packet16uc Eigen::internal::p16uc_REVERSE16 = {14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1}
static

Referenced by preverse().

◆ p16uc_REVERSE32 [1/2]

Packet16uc Eigen::internal::p16uc_REVERSE32 = {12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3}
static

Referenced by preverse().

◆ p16uc_REVERSE32 [2/2]

Packet16uc Eigen::internal::p16uc_REVERSE32 = {12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3}
static

◆ p16uc_REVERSE64

Packet16uc Eigen::internal::p16uc_REVERSE64 = {8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7}
static

◆ p16uc_REVERSE8

Packet16uc Eigen::internal::p16uc_REVERSE8 = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
static

Referenced by preverse().

◆ p16uc_TRANSPOSE64_HI [1/2]

◆ p16uc_TRANSPOSE64_HI [2/2]

Packet16uc Eigen::internal::p16uc_TRANSPOSE64_HI = {0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23}
static

◆ p16uc_TRANSPOSE64_LO [1/2]

◆ p16uc_TRANSPOSE64_LO [2/2]

Packet16uc Eigen::internal::p16uc_TRANSPOSE64_LO = {8, 9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31}
static

◆ p2d_COUNTDOWN

Packet2d Eigen::internal::p2d_COUNTDOWN
static
Initial value:
= reinterpret_cast<Packet2d>(
vec_sld(reinterpret_cast<Packet16uc>(p2d_ZERO), reinterpret_cast<Packet16uc>(p2d_ONE), 8))
static Packet2d p2d_ONE
Definition: ZVector/PacketMath.h:90

◆ p2d_ONE

Packet2d Eigen::internal::p2d_ONE = {1.0, 1.0}
static

◆ p2d_ZERO_

Packet2d Eigen::internal::p2d_ZERO_
static
Initial value:
= {numext::bit_cast<double>(0x8000000000000000ull),
numext::bit_cast<double>(0x8000000000000000ull)}

◆ p2ul_CONJ_XOR1

Packet2ul Eigen::internal::p2ul_CONJ_XOR1
static
Initial value:
=
(Packet2ul)vec_sld((Packet4ui)p2d_ZERO_, (Packet4ui)p2l_ZERO, 8)
static Packet2d p2d_ZERO_
Definition: ZVector/PacketMath.h:91

◆ p2ul_CONJ_XOR2

Packet2ul Eigen::internal::p2ul_CONJ_XOR2
static
Initial value:
=
(Packet2ul)vec_sld((Packet4ui)p2l_ZERO, (Packet4ui)p2d_ZERO_, 8)

◆ p4f_COUNTDOWN [1/2]

Packet4f Eigen::internal::p4f_COUNTDOWN = {0.0, 1.0, 2.0, 3.0}
static

Referenced by plset< Packet4f >().

◆ p4f_COUNTDOWN [2/2]

Packet4f Eigen::internal::p4f_COUNTDOWN = {0.0, 1.0, 2.0, 3.0}
static

◆ p4f_MZERO [1/2]

Packet4f Eigen::internal::p4f_MZERO
static
Initial value:
=
(Packet4f)vec_sl((Packet4ui)p4i_MINUS1, (Packet4ui)p4i_MINUS1)

Referenced by pdiv< Packet4f >(), pmul< Packet4f >(), and pnegate().

◆ p4f_MZERO [2/2]

Packet4f Eigen::internal::p4f_MZERO = {0x80000000, 0x80000000, 0x80000000, 0x80000000}
static

◆ p4f_ONE

Packet4f Eigen::internal::p4f_ONE = vec_ctf(p4i_ONE, 0)
static

Referenced by pdiv< Packet4f >().

◆ p4i_COUNTDOWN [1/2]

Packet4i Eigen::internal::p4i_COUNTDOWN = {0, 1, 2, 3}
static

Referenced by plset< Packet4i >().

◆ p4i_COUNTDOWN [2/2]

Packet4i Eigen::internal::p4i_COUNTDOWN = {0, 1, 2, 3}
static

◆ p4ui_CONJ_XOR [1/2]

Packet4ui Eigen::internal::p4ui_CONJ_XOR
static
Initial value:
=
vec_mergeh((Packet4ui)p4i_ZERO, (Packet4ui)p4f_MZERO)

Referenced by pconj(), and Eigen::internal::Packet2cf::pmul().

◆ p4ui_CONJ_XOR [2/2]

Packet4ui Eigen::internal::p4ui_CONJ_XOR
static
Initial value:
= {0x00000000, 0x80000000, 0x00000000,
0x80000000}

◆ p8s_COUNTDOWN

Packet8s Eigen::internal::p8s_COUNTDOWN = {0, 1, 2, 3, 4, 5, 6, 7}
static

Referenced by plset< Packet8s >().

◆ p8us_COUNTDOWN

Packet8us Eigen::internal::p8us_COUNTDOWN = {0, 1, 2, 3, 4, 5, 6, 7}
static

Referenced by plset< Packet8us >().

◆ y

const Scalar& Eigen::internal::y
Initial value:
{
return EIGEN_MATHFUNC_IMPL(random, Scalar)::run(x, y)
const Scalar & y
Definition: RandomImpl.h:36

Referenced by addResults(), apply_rotation_in_the_plane(), Eigen::numext::atan2(), basic_tuple_test(), bicgstab(), Eigen::internal::count_bits_impl< BitsType, EnableIf >::clz(), complex_rsqrt(), complex_sqrt(), conservative_sparse_sparse_product_impl(), Eigen::internal::count_bits_impl< BitsType, EnableIf >::ctz(), doubleword_div_fp(), EIGEN_MATHFUNC_RETVAL(), Eigen::numext::equal_strict(), fast_twosum(), generic_pow(), generic_pow_impl(), gmres(), idrstabl(), Eigen::internal::unary_pow::int_pow(), Eigen::internal::scalar_fuzzy_impl< bool >::isApprox(), Eigen::internal::scalar_fuzzy_default_impl< Scalar, false, true >::isApprox(), Eigen::internal::scalar_fuzzy_default_impl< Scalar, false, false >::isApprox(), Eigen::internal::scalar_fuzzy_default_impl< Scalar, true, false >::isApprox(), isApprox(), Eigen::internal::scalar_fuzzy_impl< bool >::isApproxOrLessThan(), Eigen::internal::scalar_fuzzy_default_impl< Scalar, false, true >::isApproxOrLessThan(), Eigen::internal::scalar_fuzzy_default_impl< Scalar, false, false >::isApproxOrLessThan(), isApproxOrLessThan(), Eigen::internal::scalar_fuzzy_default_impl< Scalar, false, false >::isMuchSmallerThan(), Eigen::internal::scalar_fuzzy_default_impl< Scalar, true, false >::isMuchSmallerThan(), isMuchSmallerThan(), MakeCoherentCwiseBinaryOp(), matrix_log_compute_2x2(), MaybeCoherentPad(), Eigen::numext::not_equal_strict(), Eigen::internal::scalar_hypot_op< Scalar, Scalar >::operator()(), Eigen::internal::scalar_atan2_op< LhsScalar, RhsScalar >::operator()(), Eigen::internal::scalar_atan2_op< LhsScalar, RhsScalar >::packetOp(), Eigen::internal::maybe_coherent_pad_helper< DerivativeType, OtherDerivativeType, EnableIf >::pad(), patan2(), pdiv_complex(), pexp< Packet4f >(), pexp_complex(), pexp_float(), plog< Packet4f >(), plog_impl_double(), Eigen::internal::conj_helper< LhsScalar, RhsScalar, true, true >::pmadd(), Eigen::internal::conj_helper< LhsType, RhsType, ConjLhs, ConjRhs >::pmadd(), Eigen::internal::conj_helper< Packet, Packet, ConjLhs, ConjRhs >::pmadd(), Eigen::internal::conj_helper< Packet, Packet, true, true >::pmadd(), Eigen::internal::conj_helper< LhsScalar, RhsScalar, true, true >::pmul(), Eigen::internal::conj_helper< LhsType, RhsType, ConjLhs, ConjRhs >::pmul(), Eigen::internal::conj_helper< Packet, Packet, ConjLhs, ConjRhs >::pmul(), Eigen::internal::conj_helper< Packet, Packet, true, true >::pmul(), positive_real_hypot(), psincos_float(), psincos_inner_msa_float(), RandomToTypeNormal(), Eigen::internal::random_impl< bfloat16 >::run(), Eigen::internal::random_impl< bool >::run(), Eigen::internal::isApprox_selector< Derived, OtherDerived, true >::run(), Eigen::internal::isApprox_selector< Derived, OtherDerived, is_integer >::run(), Eigen::internal::isMuchSmallerThan_object_selector< Derived, OtherDerived, is_integer >::run(), Eigen::internal::isMuchSmallerThan_scalar_selector< Derived, is_integer >::run(), Eigen::internal::random_impl< half >::run(), Eigen::internal::hypot_impl< Scalar >::run(), Eigen::internal::random_int_impl< Scalar, false, true >::run(), Eigen::internal::random_int_impl< Scalar, true, true >::run(), Eigen::internal::random_default_impl< Scalar, false, false >::run(), Eigen::internal::random_default_impl< Scalar, true, false >::run(), Eigen::internal::pow_impl< ScalarX, ScalarY, IsInteger >::run(), Eigen::internal::generic_i0e< T, float >::run(), Eigen::internal::generic_i0e< T, double >::run(), Eigen::internal::generic_i1e< T, float >::run(), Eigen::internal::generic_i1e< T, double >::run(), Eigen::internal::generic_j0< T, float >::run(), Eigen::internal::generic_j0< T, double >::run(), Eigen::internal::generic_j1< T, float >::run(), Eigen::internal::generic_j1< T, double >::run(), Eigen::numext::equal_strict_impl< X, Y, XIsInteger, XIsSigned, YIsInteger, YIsSigned >::run(), Eigen::numext::equal_strict_impl< X, Y, true, false, true, true >::run(), Eigen::numext::equal_strict_impl< X, Y, true, true, true, false >::run(), Eigen::internal::apply_rotation_in_the_plane_selector< Scalar, OtherScalar, SizeAtCompileTime, MinAlignment, Vectorizable >::run(), Eigen::internal::apply_rotation_in_the_plane_selector< Scalar, OtherScalar, SizeAtCompileTime, MinAlignment, true >::run(), Eigen::internal::igammac_cf_impl< Scalar, mode >::run(), Eigen::internal::digamma_impl< Scalar >::run(), Eigen::internal::pow_impl< ScalarX, ScalarY, true >::run(), sparse_sparse_to_dense_product_impl(), twoprod(), and twoprod_low().