@smake/eigen 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
#ifndef EIGEN_COMPLEX_SSE_H
|
|
11
11
|
#define EIGEN_COMPLEX_SSE_H
|
|
12
12
|
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "../../InternalHeaderCheck.h"
|
|
15
|
+
|
|
13
16
|
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
namespace internal {
|
|
16
19
|
|
|
17
20
|
//---------- float ----------
|
|
18
|
-
struct Packet2cf
|
|
19
|
-
{
|
|
21
|
+
struct Packet2cf {
|
|
20
22
|
EIGEN_STRONG_INLINE Packet2cf() {}
|
|
21
23
|
EIGEN_STRONG_INLINE explicit Packet2cf(const __m128& a) : v(a) {}
|
|
22
24
|
Packet4f v;
|
|
@@ -25,166 +27,196 @@ struct Packet2cf
|
|
|
25
27
|
// Use the packet_traits defined in AVX/PacketMath.h instead if we're going
|
|
26
28
|
// to leverage AVX instructions.
|
|
27
29
|
#ifndef EIGEN_VECTORIZE_AVX
|
|
28
|
-
template<>
|
|
29
|
-
{
|
|
30
|
+
template <>
|
|
31
|
+
struct packet_traits<std::complex<float> > : default_packet_traits {
|
|
30
32
|
typedef Packet2cf type;
|
|
31
33
|
typedef Packet2cf half;
|
|
32
34
|
enum {
|
|
33
35
|
Vectorizable = 1,
|
|
34
36
|
AlignedOnScalar = 1,
|
|
35
37
|
size = 2,
|
|
36
|
-
HasHalfPacket = 0,
|
|
37
38
|
|
|
38
|
-
HasAdd
|
|
39
|
-
HasSub
|
|
40
|
-
HasMul
|
|
41
|
-
HasDiv
|
|
39
|
+
HasAdd = 1,
|
|
40
|
+
HasSub = 1,
|
|
41
|
+
HasMul = 1,
|
|
42
|
+
HasDiv = 1,
|
|
42
43
|
HasNegate = 1,
|
|
43
|
-
HasSqrt
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
HasSqrt = 1,
|
|
45
|
+
HasLog = 1,
|
|
46
|
+
HasExp = 1,
|
|
47
|
+
HasAbs = 0,
|
|
48
|
+
HasAbs2 = 0,
|
|
49
|
+
HasMin = 0,
|
|
50
|
+
HasMax = 0,
|
|
48
51
|
HasSetLinear = 0,
|
|
49
|
-
HasBlend
|
|
52
|
+
HasBlend = 1
|
|
50
53
|
};
|
|
51
54
|
};
|
|
52
55
|
#endif
|
|
53
56
|
|
|
54
|
-
template<>
|
|
57
|
+
template <>
|
|
58
|
+
struct unpacket_traits<Packet2cf> {
|
|
55
59
|
typedef std::complex<float> type;
|
|
56
60
|
typedef Packet2cf half;
|
|
57
61
|
typedef Packet4f as_real;
|
|
58
62
|
enum {
|
|
59
|
-
size=2,
|
|
60
|
-
alignment=Aligned16,
|
|
61
|
-
vectorizable=true,
|
|
62
|
-
masked_load_available=false,
|
|
63
|
-
masked_store_available=false
|
|
63
|
+
size = 2,
|
|
64
|
+
alignment = Aligned16,
|
|
65
|
+
vectorizable = true,
|
|
66
|
+
masked_load_available = false,
|
|
67
|
+
masked_store_available = false
|
|
64
68
|
};
|
|
65
69
|
};
|
|
66
70
|
|
|
67
|
-
template<>
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return Packet2cf(
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
template<>
|
|
82
|
-
{
|
|
83
|
-
|
|
84
|
-
return Packet2cf(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
// vec4f_swizzle1(b.v, 1, 0, 3, 2))));
|
|
90
|
-
#else
|
|
91
|
-
const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0x80000000,0x00000000,0x80000000,0x00000000));
|
|
92
|
-
return Packet2cf(_mm_add_ps(_mm_mul_ps(vec4f_swizzle1(a.v, 0, 0, 2, 2), b.v),
|
|
93
|
-
_mm_xor_ps(_mm_mul_ps(vec4f_swizzle1(a.v, 1, 1, 3, 3),
|
|
94
|
-
vec4f_swizzle1(b.v, 1, 0, 3, 2)), mask)));
|
|
95
|
-
#endif
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
template<> EIGEN_STRONG_INLINE Packet2cf ptrue <Packet2cf>(const Packet2cf& a) { return Packet2cf(ptrue(Packet4f(a.v))); }
|
|
99
|
-
template<> EIGEN_STRONG_INLINE Packet2cf pand <Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(_mm_and_ps(a.v,b.v)); }
|
|
100
|
-
template<> EIGEN_STRONG_INLINE Packet2cf por <Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(_mm_or_ps(a.v,b.v)); }
|
|
101
|
-
template<> EIGEN_STRONG_INLINE Packet2cf pxor <Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(_mm_xor_ps(a.v,b.v)); }
|
|
102
|
-
template<> EIGEN_STRONG_INLINE Packet2cf pandnot<Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(_mm_andnot_ps(b.v,a.v)); }
|
|
103
|
-
|
|
104
|
-
template<> EIGEN_STRONG_INLINE Packet2cf pload <Packet2cf>(const std::complex<float>* from) { EIGEN_DEBUG_ALIGNED_LOAD return Packet2cf(pload<Packet4f>(&numext::real_ref(*from))); }
|
|
105
|
-
template<> EIGEN_STRONG_INLINE Packet2cf ploadu<Packet2cf>(const std::complex<float>* from) { EIGEN_DEBUG_UNALIGNED_LOAD return Packet2cf(ploadu<Packet4f>(&numext::real_ref(*from))); }
|
|
106
|
-
|
|
107
|
-
template<> EIGEN_STRONG_INLINE Packet2cf pset1<Packet2cf>(const std::complex<float>& from)
|
|
108
|
-
{
|
|
109
|
-
Packet2cf res;
|
|
71
|
+
template <>
|
|
72
|
+
EIGEN_STRONG_INLINE Packet2cf padd<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
73
|
+
return Packet2cf(_mm_add_ps(a.v, b.v));
|
|
74
|
+
}
|
|
75
|
+
template <>
|
|
76
|
+
EIGEN_STRONG_INLINE Packet2cf psub<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
77
|
+
return Packet2cf(_mm_sub_ps(a.v, b.v));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
template <>
|
|
81
|
+
EIGEN_STRONG_INLINE Packet2cf pnegate(const Packet2cf& a) {
|
|
82
|
+
const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0x80000000, 0x80000000, 0x80000000, 0x80000000));
|
|
83
|
+
return Packet2cf(_mm_xor_ps(a.v, mask));
|
|
84
|
+
}
|
|
85
|
+
template <>
|
|
86
|
+
EIGEN_STRONG_INLINE Packet2cf pconj(const Packet2cf& a) {
|
|
87
|
+
const __m128 mask = _mm_castsi128_ps(_mm_setr_epi32(0x00000000, 0x80000000, 0x00000000, 0x80000000));
|
|
88
|
+
return Packet2cf(_mm_xor_ps(a.v, mask));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
template <>
|
|
92
|
+
EIGEN_STRONG_INLINE Packet2cf pmul(const Packet2cf& a, const Packet2cf& b) {
|
|
110
93
|
#ifdef EIGEN_VECTORIZE_SSE3
|
|
111
|
-
|
|
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);
|
|
112
96
|
#else
|
|
113
|
-
|
|
114
|
-
|
|
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);
|
|
115
99
|
#endif
|
|
116
|
-
|
|
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
|
+
}
|
|
112
|
+
|
|
113
|
+
template <>
|
|
114
|
+
EIGEN_STRONG_INLINE Packet2cf ptrue<Packet2cf>(const Packet2cf& a) {
|
|
115
|
+
return Packet2cf(ptrue(Packet4f(a.v)));
|
|
116
|
+
}
|
|
117
|
+
template <>
|
|
118
|
+
EIGEN_STRONG_INLINE Packet2cf pand<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
119
|
+
return Packet2cf(_mm_and_ps(a.v, b.v));
|
|
120
|
+
}
|
|
121
|
+
template <>
|
|
122
|
+
EIGEN_STRONG_INLINE Packet2cf por<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
123
|
+
return Packet2cf(_mm_or_ps(a.v, b.v));
|
|
124
|
+
}
|
|
125
|
+
template <>
|
|
126
|
+
EIGEN_STRONG_INLINE Packet2cf pxor<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
127
|
+
return Packet2cf(_mm_xor_ps(a.v, b.v));
|
|
128
|
+
}
|
|
129
|
+
template <>
|
|
130
|
+
EIGEN_STRONG_INLINE Packet2cf pandnot<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
131
|
+
return Packet2cf(_mm_andnot_ps(b.v, a.v));
|
|
117
132
|
}
|
|
118
133
|
|
|
119
|
-
template<>
|
|
134
|
+
template <>
|
|
135
|
+
EIGEN_STRONG_INLINE Packet2cf pload<Packet2cf>(const std::complex<float>* from) {
|
|
136
|
+
EIGEN_DEBUG_ALIGNED_LOAD return Packet2cf(_mm_load_ps(&numext::real_ref(*from)));
|
|
137
|
+
}
|
|
138
|
+
template <>
|
|
139
|
+
EIGEN_STRONG_INLINE Packet2cf ploadu<Packet2cf>(const std::complex<float>* from) {
|
|
140
|
+
EIGEN_DEBUG_UNALIGNED_LOAD return Packet2cf(_mm_loadu_ps(&numext::real_ref(*from)));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
template <>
|
|
144
|
+
EIGEN_STRONG_INLINE Packet2cf pset1<Packet2cf>(const std::complex<float>& from) {
|
|
145
|
+
const float re = std::real(from);
|
|
146
|
+
const float im = std::imag(from);
|
|
147
|
+
return Packet2cf(_mm_set_ps(im, re, im, re));
|
|
148
|
+
}
|
|
120
149
|
|
|
121
|
-
template<>
|
|
122
|
-
|
|
150
|
+
template <>
|
|
151
|
+
EIGEN_STRONG_INLINE Packet2cf ploaddup<Packet2cf>(const std::complex<float>* from) {
|
|
152
|
+
return pset1<Packet2cf>(*from);
|
|
153
|
+
}
|
|
123
154
|
|
|
155
|
+
template <>
|
|
156
|
+
EIGEN_STRONG_INLINE void pstore<std::complex<float> >(std::complex<float>* to, const Packet2cf& from) {
|
|
157
|
+
EIGEN_DEBUG_ALIGNED_STORE _mm_store_ps(&numext::real_ref(*to), from.v);
|
|
158
|
+
}
|
|
159
|
+
template <>
|
|
160
|
+
EIGEN_STRONG_INLINE void pstoreu<std::complex<float> >(std::complex<float>* to, const Packet2cf& from) {
|
|
161
|
+
EIGEN_DEBUG_UNALIGNED_STORE _mm_storeu_ps(&numext::real_ref(*to), from.v);
|
|
162
|
+
}
|
|
124
163
|
|
|
125
|
-
template<>
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
164
|
+
template <>
|
|
165
|
+
EIGEN_DEVICE_FUNC inline Packet2cf pgather<std::complex<float>, Packet2cf>(const std::complex<float>* from,
|
|
166
|
+
Index stride) {
|
|
167
|
+
return Packet2cf(_mm_set_ps(std::imag(from[1 * stride]), std::real(from[1 * stride]), std::imag(from[0 * stride]),
|
|
168
|
+
std::real(from[0 * stride])));
|
|
129
169
|
}
|
|
130
170
|
|
|
131
|
-
template<>
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
171
|
+
template <>
|
|
172
|
+
EIGEN_DEVICE_FUNC inline void pscatter<std::complex<float>, Packet2cf>(std::complex<float>* to, const Packet2cf& from,
|
|
173
|
+
Index stride) {
|
|
174
|
+
to[stride * 0] = std::complex<float>(_mm_cvtss_f32(_mm_shuffle_ps(from.v, from.v, 0)),
|
|
175
|
+
_mm_cvtss_f32(_mm_shuffle_ps(from.v, from.v, 1)));
|
|
176
|
+
to[stride * 1] = std::complex<float>(_mm_cvtss_f32(_mm_shuffle_ps(from.v, from.v, 2)),
|
|
177
|
+
_mm_cvtss_f32(_mm_shuffle_ps(from.v, from.v, 3)));
|
|
137
178
|
}
|
|
138
179
|
|
|
139
|
-
template<>
|
|
180
|
+
template <>
|
|
181
|
+
EIGEN_STRONG_INLINE void prefetch<std::complex<float> >(const std::complex<float>* addr) {
|
|
182
|
+
_mm_prefetch((SsePrefetchPtrType)(addr), _MM_HINT_T0);
|
|
183
|
+
}
|
|
140
184
|
|
|
141
|
-
template<>
|
|
142
|
-
{
|
|
143
|
-
|
|
144
|
-
// Workaround gcc 4.2 ICE - this is not performance wise ideal, but who cares...
|
|
145
|
-
// This workaround also fix invalid code generation with gcc 4.3
|
|
146
|
-
EIGEN_ALIGN16 std::complex<float> res[2];
|
|
147
|
-
_mm_store_ps((float*)res, a.v);
|
|
148
|
-
return res[0];
|
|
149
|
-
#else
|
|
150
|
-
std::complex<float> res;
|
|
185
|
+
template <>
|
|
186
|
+
EIGEN_STRONG_INLINE std::complex<float> pfirst<Packet2cf>(const Packet2cf& a) {
|
|
187
|
+
alignas(alignof(__m64)) std::complex<float> res;
|
|
151
188
|
_mm_storel_pi((__m64*)&res, a.v);
|
|
152
189
|
return res;
|
|
153
|
-
#endif
|
|
154
190
|
}
|
|
155
191
|
|
|
156
|
-
template<>
|
|
192
|
+
template <>
|
|
193
|
+
EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf& a) {
|
|
194
|
+
return Packet2cf(_mm_castpd_ps(preverse(Packet2d(_mm_castps_pd(a.v)))));
|
|
195
|
+
}
|
|
157
196
|
|
|
158
|
-
template<>
|
|
159
|
-
{
|
|
160
|
-
return pfirst(Packet2cf(_mm_add_ps(a.v, _mm_movehl_ps(a.v,a.v))));
|
|
197
|
+
template <>
|
|
198
|
+
EIGEN_STRONG_INLINE std::complex<float> predux<Packet2cf>(const Packet2cf& a) {
|
|
199
|
+
return pfirst(Packet2cf(_mm_add_ps(a.v, _mm_movehl_ps(a.v, a.v))));
|
|
161
200
|
}
|
|
162
201
|
|
|
163
|
-
template<>
|
|
164
|
-
{
|
|
165
|
-
return pfirst(pmul(a, Packet2cf(_mm_movehl_ps(a.v,a.v))));
|
|
202
|
+
template <>
|
|
203
|
+
EIGEN_STRONG_INLINE std::complex<float> predux_mul<Packet2cf>(const Packet2cf& a) {
|
|
204
|
+
return pfirst(pmul(a, Packet2cf(_mm_movehl_ps(a.v, a.v))));
|
|
166
205
|
}
|
|
167
206
|
|
|
168
|
-
EIGEN_STRONG_INLINE Packet2cf pcplxflip/* <Packet2cf> */(const Packet2cf& x)
|
|
169
|
-
{
|
|
207
|
+
EIGEN_STRONG_INLINE Packet2cf pcplxflip /* <Packet2cf> */ (const Packet2cf& x) {
|
|
170
208
|
return Packet2cf(vec4f_swizzle1(x.v, 1, 0, 3, 2));
|
|
171
209
|
}
|
|
172
210
|
|
|
173
|
-
EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cf,Packet4f)
|
|
211
|
+
EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cf, Packet4f)
|
|
174
212
|
|
|
175
|
-
template<>
|
|
176
|
-
{
|
|
177
|
-
|
|
178
|
-
Packet2cf res = pmul(a, pconj(b));
|
|
179
|
-
__m128 s = _mm_mul_ps(b.v,b.v);
|
|
180
|
-
return Packet2cf(_mm_div_ps(res.v,_mm_add_ps(s,vec4f_swizzle1(s, 1, 0, 3, 2))));
|
|
213
|
+
template <>
|
|
214
|
+
EIGEN_STRONG_INLINE Packet2cf pdiv<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
215
|
+
return pdiv_complex(a, b);
|
|
181
216
|
}
|
|
182
217
|
|
|
183
|
-
|
|
184
|
-
|
|
185
218
|
//---------- double ----------
|
|
186
|
-
struct Packet1cd
|
|
187
|
-
{
|
|
219
|
+
struct Packet1cd {
|
|
188
220
|
EIGEN_STRONG_INLINE Packet1cd() {}
|
|
189
221
|
EIGEN_STRONG_INLINE explicit Packet1cd(const __m128d& a) : v(a) {}
|
|
190
222
|
Packet2d v;
|
|
@@ -193,125 +225,174 @@ struct Packet1cd
|
|
|
193
225
|
// Use the packet_traits defined in AVX/PacketMath.h instead if we're going
|
|
194
226
|
// to leverage AVX instructions.
|
|
195
227
|
#ifndef EIGEN_VECTORIZE_AVX
|
|
196
|
-
template<>
|
|
197
|
-
{
|
|
228
|
+
template <>
|
|
229
|
+
struct packet_traits<std::complex<double> > : default_packet_traits {
|
|
198
230
|
typedef Packet1cd type;
|
|
199
231
|
typedef Packet1cd half;
|
|
200
232
|
enum {
|
|
201
233
|
Vectorizable = 1,
|
|
202
234
|
AlignedOnScalar = 0,
|
|
203
235
|
size = 1,
|
|
204
|
-
HasHalfPacket = 0,
|
|
205
236
|
|
|
206
|
-
HasAdd
|
|
207
|
-
HasSub
|
|
208
|
-
HasMul
|
|
209
|
-
HasDiv
|
|
237
|
+
HasAdd = 1,
|
|
238
|
+
HasSub = 1,
|
|
239
|
+
HasMul = 1,
|
|
240
|
+
HasDiv = 1,
|
|
210
241
|
HasNegate = 1,
|
|
211
|
-
HasSqrt
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
242
|
+
HasSqrt = 1,
|
|
243
|
+
HasLog = 1,
|
|
244
|
+
HasAbs = 0,
|
|
245
|
+
HasAbs2 = 0,
|
|
246
|
+
HasMin = 0,
|
|
247
|
+
HasMax = 0,
|
|
216
248
|
HasSetLinear = 0
|
|
217
249
|
};
|
|
218
250
|
};
|
|
219
251
|
#endif
|
|
220
252
|
|
|
221
|
-
template<>
|
|
253
|
+
template <>
|
|
254
|
+
struct unpacket_traits<Packet1cd> {
|
|
222
255
|
typedef std::complex<double> type;
|
|
223
256
|
typedef Packet1cd half;
|
|
224
257
|
typedef Packet2d as_real;
|
|
225
258
|
enum {
|
|
226
|
-
size=1,
|
|
227
|
-
alignment=Aligned16,
|
|
228
|
-
vectorizable=true,
|
|
229
|
-
masked_load_available=false,
|
|
230
|
-
masked_store_available=false
|
|
259
|
+
size = 1,
|
|
260
|
+
alignment = Aligned16,
|
|
261
|
+
vectorizable = true,
|
|
262
|
+
masked_load_available = false,
|
|
263
|
+
masked_store_available = false
|
|
231
264
|
};
|
|
232
265
|
};
|
|
233
266
|
|
|
234
|
-
template<>
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
return Packet1cd(
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
267
|
+
template <>
|
|
268
|
+
EIGEN_STRONG_INLINE Packet1cd padd<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
269
|
+
return Packet1cd(_mm_add_pd(a.v, b.v));
|
|
270
|
+
}
|
|
271
|
+
template <>
|
|
272
|
+
EIGEN_STRONG_INLINE Packet1cd psub<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
273
|
+
return Packet1cd(_mm_sub_pd(a.v, b.v));
|
|
274
|
+
}
|
|
275
|
+
template <>
|
|
276
|
+
EIGEN_STRONG_INLINE Packet1cd pnegate(const Packet1cd& a) {
|
|
277
|
+
return Packet1cd(pnegate(Packet2d(a.v)));
|
|
278
|
+
}
|
|
279
|
+
template <>
|
|
280
|
+
EIGEN_STRONG_INLINE Packet1cd pconj(const Packet1cd& a) {
|
|
281
|
+
const __m128d mask = _mm_castsi128_pd(_mm_set_epi32(0x80000000, 0x0, 0x0, 0x0));
|
|
282
|
+
return Packet1cd(_mm_xor_pd(a.v, mask));
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
template <>
|
|
286
|
+
EIGEN_STRONG_INLINE Packet1cd pmul(const Packet1cd& a, const Packet1cd& b) {
|
|
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
|
+
}
|
|
305
|
+
|
|
306
|
+
template <>
|
|
307
|
+
EIGEN_STRONG_INLINE Packet1cd ptrue<Packet1cd>(const Packet1cd& a) {
|
|
308
|
+
return Packet1cd(ptrue(Packet2d(a.v)));
|
|
309
|
+
}
|
|
310
|
+
template <>
|
|
311
|
+
EIGEN_STRONG_INLINE Packet1cd pand<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
312
|
+
return Packet1cd(_mm_and_pd(a.v, b.v));
|
|
313
|
+
}
|
|
314
|
+
template <>
|
|
315
|
+
EIGEN_STRONG_INLINE Packet1cd por<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
316
|
+
return Packet1cd(_mm_or_pd(a.v, b.v));
|
|
317
|
+
}
|
|
318
|
+
template <>
|
|
319
|
+
EIGEN_STRONG_INLINE Packet1cd pxor<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
320
|
+
return Packet1cd(_mm_xor_pd(a.v, b.v));
|
|
321
|
+
}
|
|
322
|
+
template <>
|
|
323
|
+
EIGEN_STRONG_INLINE Packet1cd pandnot<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
324
|
+
return Packet1cd(_mm_andnot_pd(b.v, a.v));
|
|
325
|
+
}
|
|
262
326
|
|
|
263
327
|
// FIXME force unaligned load, this is a temporary fix
|
|
264
|
-
template<>
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
template<>
|
|
269
|
-
|
|
328
|
+
template <>
|
|
329
|
+
EIGEN_STRONG_INLINE Packet1cd pload<Packet1cd>(const std::complex<double>* from) {
|
|
330
|
+
EIGEN_DEBUG_ALIGNED_LOAD return Packet1cd(_mm_load_pd((const double*)from));
|
|
331
|
+
}
|
|
332
|
+
template <>
|
|
333
|
+
EIGEN_STRONG_INLINE Packet1cd ploadu<Packet1cd>(const std::complex<double>* from) {
|
|
334
|
+
EIGEN_DEBUG_UNALIGNED_LOAD return Packet1cd(_mm_loadu_pd((const double*)from));
|
|
335
|
+
}
|
|
336
|
+
template <>
|
|
337
|
+
EIGEN_STRONG_INLINE Packet1cd
|
|
338
|
+
pset1<Packet1cd>(const std::complex<double>& from) { /* here we really have to use unaligned loads :( */
|
|
339
|
+
return ploadu<Packet1cd>(&from);
|
|
340
|
+
}
|
|
270
341
|
|
|
271
|
-
template<>
|
|
342
|
+
template <>
|
|
343
|
+
EIGEN_STRONG_INLINE Packet1cd ploaddup<Packet1cd>(const std::complex<double>* from) {
|
|
344
|
+
return pset1<Packet1cd>(*from);
|
|
345
|
+
}
|
|
272
346
|
|
|
273
347
|
// FIXME force unaligned store, this is a temporary fix
|
|
274
|
-
template<>
|
|
275
|
-
|
|
348
|
+
template <>
|
|
349
|
+
EIGEN_STRONG_INLINE void pstore<std::complex<double> >(std::complex<double>* to, const Packet1cd& from) {
|
|
350
|
+
EIGEN_DEBUG_ALIGNED_STORE _mm_store_pd((double*)to, from.v);
|
|
351
|
+
}
|
|
352
|
+
template <>
|
|
353
|
+
EIGEN_STRONG_INLINE void pstoreu<std::complex<double> >(std::complex<double>* to, const Packet1cd& from) {
|
|
354
|
+
EIGEN_DEBUG_UNALIGNED_STORE _mm_storeu_pd((double*)to, from.v);
|
|
355
|
+
}
|
|
276
356
|
|
|
277
|
-
template<>
|
|
357
|
+
template <>
|
|
358
|
+
EIGEN_STRONG_INLINE void prefetch<std::complex<double> >(const std::complex<double>* addr) {
|
|
359
|
+
_mm_prefetch((SsePrefetchPtrType)(addr), _MM_HINT_T0);
|
|
360
|
+
}
|
|
278
361
|
|
|
279
|
-
template<>
|
|
280
|
-
{
|
|
362
|
+
template <>
|
|
363
|
+
EIGEN_STRONG_INLINE std::complex<double> pfirst<Packet1cd>(const Packet1cd& a) {
|
|
281
364
|
EIGEN_ALIGN16 double res[2];
|
|
282
365
|
_mm_store_pd(res, a.v);
|
|
283
|
-
return std::complex<double>(res[0],res[1]);
|
|
366
|
+
return std::complex<double>(res[0], res[1]);
|
|
284
367
|
}
|
|
285
368
|
|
|
286
|
-
template<>
|
|
369
|
+
template <>
|
|
370
|
+
EIGEN_STRONG_INLINE Packet1cd preverse(const Packet1cd& a) {
|
|
371
|
+
return a;
|
|
372
|
+
}
|
|
287
373
|
|
|
288
|
-
template<>
|
|
289
|
-
{
|
|
374
|
+
template <>
|
|
375
|
+
EIGEN_STRONG_INLINE std::complex<double> predux<Packet1cd>(const Packet1cd& a) {
|
|
290
376
|
return pfirst(a);
|
|
291
377
|
}
|
|
292
378
|
|
|
293
|
-
template<>
|
|
294
|
-
{
|
|
379
|
+
template <>
|
|
380
|
+
EIGEN_STRONG_INLINE std::complex<double> predux_mul<Packet1cd>(const Packet1cd& a) {
|
|
295
381
|
return pfirst(a);
|
|
296
382
|
}
|
|
297
383
|
|
|
298
|
-
EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cd,Packet2d)
|
|
384
|
+
EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cd, Packet2d)
|
|
299
385
|
|
|
300
|
-
template<>
|
|
301
|
-
{
|
|
302
|
-
|
|
303
|
-
Packet1cd res = pmul(a,pconj(b));
|
|
304
|
-
__m128d s = _mm_mul_pd(b.v,b.v);
|
|
305
|
-
return Packet1cd(_mm_div_pd(res.v, _mm_add_pd(s,_mm_shuffle_pd(s, s, 0x1))));
|
|
386
|
+
template <>
|
|
387
|
+
EIGEN_STRONG_INLINE Packet1cd pdiv<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
388
|
+
return pdiv_complex(a, b);
|
|
306
389
|
}
|
|
307
390
|
|
|
308
|
-
EIGEN_STRONG_INLINE Packet1cd pcplxflip/* <Packet1cd> */(const Packet1cd& x)
|
|
309
|
-
{
|
|
391
|
+
EIGEN_STRONG_INLINE Packet1cd pcplxflip /* <Packet1cd> */ (const Packet1cd& x) {
|
|
310
392
|
return Packet1cd(preverse(Packet2d(x.v)));
|
|
311
393
|
}
|
|
312
394
|
|
|
313
|
-
EIGEN_DEVICE_FUNC inline void
|
|
314
|
-
ptranspose(PacketBlock<Packet2cf,2>& kernel) {
|
|
395
|
+
EIGEN_DEVICE_FUNC inline void ptranspose(PacketBlock<Packet2cf, 2>& kernel) {
|
|
315
396
|
__m128d w1 = _mm_castps_pd(kernel.packet[0].v);
|
|
316
397
|
__m128d w2 = _mm_castps_pd(kernel.packet[1].v);
|
|
317
398
|
|
|
@@ -320,32 +401,103 @@ ptranspose(PacketBlock<Packet2cf,2>& kernel) {
|
|
|
320
401
|
kernel.packet[1].v = tmp;
|
|
321
402
|
}
|
|
322
403
|
|
|
323
|
-
template<>
|
|
324
|
-
{
|
|
404
|
+
template <>
|
|
405
|
+
EIGEN_STRONG_INLINE Packet2cf pcmp_eq(const Packet2cf& a, const Packet2cf& b) {
|
|
325
406
|
__m128 eq = _mm_cmpeq_ps(a.v, b.v);
|
|
326
407
|
return Packet2cf(pand<Packet4f>(eq, vec4f_swizzle1(eq, 1, 0, 3, 2)));
|
|
327
408
|
}
|
|
328
409
|
|
|
329
|
-
template<>
|
|
330
|
-
{
|
|
410
|
+
template <>
|
|
411
|
+
EIGEN_STRONG_INLINE Packet1cd pcmp_eq(const Packet1cd& a, const Packet1cd& b) {
|
|
331
412
|
__m128d eq = _mm_cmpeq_pd(a.v, b.v);
|
|
332
413
|
return Packet1cd(pand<Packet2d>(eq, vec2d_swizzle1(eq, 1, 0)));
|
|
333
414
|
}
|
|
334
415
|
|
|
335
|
-
template<>
|
|
416
|
+
template <>
|
|
417
|
+
EIGEN_STRONG_INLINE Packet2cf pblend(const Selector<2>& ifPacket, const Packet2cf& thenPacket,
|
|
418
|
+
const Packet2cf& elsePacket) {
|
|
336
419
|
__m128d result = pblend<Packet2d>(ifPacket, _mm_castps_pd(thenPacket.v), _mm_castps_pd(elsePacket.v));
|
|
337
420
|
return Packet2cf(_mm_castpd_ps(result));
|
|
338
421
|
}
|
|
339
422
|
|
|
340
|
-
template<>
|
|
423
|
+
template <>
|
|
424
|
+
EIGEN_STRONG_INLINE Packet1cd psqrt<Packet1cd>(const Packet1cd& a) {
|
|
341
425
|
return psqrt_complex<Packet1cd>(a);
|
|
342
426
|
}
|
|
343
427
|
|
|
344
|
-
template<>
|
|
428
|
+
template <>
|
|
429
|
+
EIGEN_STRONG_INLINE Packet2cf psqrt<Packet2cf>(const Packet2cf& a) {
|
|
345
430
|
return psqrt_complex<Packet2cf>(a);
|
|
346
431
|
}
|
|
347
432
|
|
|
348
|
-
|
|
349
|
-
|
|
433
|
+
template <>
|
|
434
|
+
EIGEN_STRONG_INLINE Packet1cd plog<Packet1cd>(const Packet1cd& a) {
|
|
435
|
+
return plog_complex<Packet1cd>(a);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
template <>
|
|
439
|
+
EIGEN_STRONG_INLINE Packet2cf plog<Packet2cf>(const Packet2cf& a) {
|
|
440
|
+
return plog_complex<Packet2cf>(a);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
template <>
|
|
444
|
+
EIGEN_STRONG_INLINE Packet2cf pexp<Packet2cf>(const Packet2cf& a) {
|
|
445
|
+
return pexp_complex<Packet2cf>(a);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
#ifdef EIGEN_VECTORIZE_FMA
|
|
449
|
+
// std::complex<float>
|
|
450
|
+
template <>
|
|
451
|
+
EIGEN_STRONG_INLINE Packet2cf pmadd(const Packet2cf& a, const Packet2cf& b, const Packet2cf& c) {
|
|
452
|
+
__m128 a_odd = _mm_movehdup_ps(a.v);
|
|
453
|
+
__m128 a_even = _mm_moveldup_ps(a.v);
|
|
454
|
+
__m128 b_swap = _mm_permute_ps(b.v, _MM_SHUFFLE(2, 3, 0, 1));
|
|
455
|
+
__m128 result = _mm_fmaddsub_ps(a_even, b.v, _mm_fmaddsub_ps(a_odd, b_swap, c.v));
|
|
456
|
+
return Packet2cf(result);
|
|
457
|
+
}
|
|
458
|
+
template <>
|
|
459
|
+
EIGEN_STRONG_INLINE Packet2cf pmsub(const Packet2cf& a, const Packet2cf& b, const Packet2cf& c) {
|
|
460
|
+
__m128 a_odd = _mm_movehdup_ps(a.v);
|
|
461
|
+
__m128 a_even = _mm_moveldup_ps(a.v);
|
|
462
|
+
__m128 b_swap = _mm_permute_ps(b.v, _MM_SHUFFLE(2, 3, 0, 1));
|
|
463
|
+
__m128 result = _mm_fmaddsub_ps(a_even, b.v, _mm_fmsubadd_ps(a_odd, b_swap, c.v));
|
|
464
|
+
return Packet2cf(result);
|
|
465
|
+
}
|
|
466
|
+
template <>
|
|
467
|
+
EIGEN_STRONG_INLINE Packet2cf pnmadd(const Packet2cf& a, const Packet2cf& b, const Packet2cf& c) {
|
|
468
|
+
return pnegate(pmsub(a, b, c));
|
|
469
|
+
}
|
|
470
|
+
template <>
|
|
471
|
+
EIGEN_STRONG_INLINE Packet2cf pnmsub(const Packet2cf& a, const Packet2cf& b, const Packet2cf& c) {
|
|
472
|
+
return pnegate(pmadd(a, b, c));
|
|
473
|
+
}
|
|
474
|
+
// std::complex<double>
|
|
475
|
+
template <>
|
|
476
|
+
EIGEN_STRONG_INLINE Packet1cd pmadd(const Packet1cd& a, const Packet1cd& b, const Packet1cd& c) {
|
|
477
|
+
__m128d a_odd = _mm_permute_pd(a.v, 0x3);
|
|
478
|
+
__m128d a_even = _mm_movedup_pd(a.v);
|
|
479
|
+
__m128d b_swap = _mm_permute_pd(b.v, 0x1);
|
|
480
|
+
__m128d result = _mm_fmaddsub_pd(a_even, b.v, _mm_fmaddsub_pd(a_odd, b_swap, c.v));
|
|
481
|
+
return Packet1cd(result);
|
|
482
|
+
}
|
|
483
|
+
template <>
|
|
484
|
+
EIGEN_STRONG_INLINE Packet1cd pmsub(const Packet1cd& a, const Packet1cd& b, const Packet1cd& c) {
|
|
485
|
+
__m128d a_odd = _mm_permute_pd(a.v, 0x3);
|
|
486
|
+
__m128d a_even = _mm_movedup_pd(a.v);
|
|
487
|
+
__m128d b_swap = _mm_permute_pd(b.v, 0x1);
|
|
488
|
+
__m128d result = _mm_fmaddsub_pd(a_even, b.v, _mm_fmsubadd_pd(a_odd, b_swap, c.v));
|
|
489
|
+
return Packet1cd(result);
|
|
490
|
+
}
|
|
491
|
+
template <>
|
|
492
|
+
EIGEN_STRONG_INLINE Packet1cd pnmadd(const Packet1cd& a, const Packet1cd& b, const Packet1cd& c) {
|
|
493
|
+
return pnegate(pmsub(a, b, c));
|
|
494
|
+
}
|
|
495
|
+
template <>
|
|
496
|
+
EIGEN_STRONG_INLINE Packet1cd pnmsub(const Packet1cd& a, const Packet1cd& b, const Packet1cd& c) {
|
|
497
|
+
return pnegate(pmadd(a, b, c));
|
|
498
|
+
}
|
|
499
|
+
#endif
|
|
500
|
+
} // end namespace internal
|
|
501
|
+
} // end namespace Eigen
|
|
350
502
|
|
|
351
|
-
#endif
|
|
503
|
+
#endif // EIGEN_COMPLEX_SSE_H
|