@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
|
@@ -11,29 +11,44 @@
|
|
|
11
11
|
#ifndef EIGEN_COMPLEX32_ALTIVEC_H
|
|
12
12
|
#define EIGEN_COMPLEX32_ALTIVEC_H
|
|
13
13
|
|
|
14
|
+
// IWYU pragma: private
|
|
15
|
+
#include "../../InternalHeaderCheck.h"
|
|
16
|
+
|
|
14
17
|
namespace Eigen {
|
|
15
18
|
|
|
16
19
|
namespace internal {
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
inline Packet4ui p4ui_CONJ_XOR() {
|
|
22
|
+
return vec_mergeh((Packet4ui)p4i_ZERO, (Packet4ui)p4f_MZERO); //{ 0x00000000, 0x80000000, 0x00000000, 0x80000000 };
|
|
23
|
+
}
|
|
24
|
+
#ifdef EIGEN_VECTORIZE_VSX
|
|
20
25
|
#if defined(_BIG_ENDIAN)
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
inline Packet2ul p2ul_CONJ_XOR1() {
|
|
27
|
+
return (Packet2ul)vec_sld((Packet4ui)p2d_MZERO, (Packet4ui)p2l_ZERO,
|
|
28
|
+
8); //{ 0x8000000000000000, 0x0000000000000000 };
|
|
29
|
+
}
|
|
30
|
+
inline Packet2ul p2ul_CONJ_XOR2() {
|
|
31
|
+
return (Packet2ul)vec_sld((Packet4ui)p2l_ZERO, (Packet4ui)p2d_MZERO,
|
|
32
|
+
8); //{ 0x8000000000000000, 0x0000000000000000 };
|
|
33
|
+
}
|
|
23
34
|
#else
|
|
24
|
-
|
|
25
|
-
|
|
35
|
+
inline Packet2ul p2ul_CONJ_XOR1() {
|
|
36
|
+
return (Packet2ul)vec_sld((Packet4ui)p2l_ZERO, (Packet4ui)p2d_MZERO,
|
|
37
|
+
8); //{ 0x8000000000000000, 0x0000000000000000 };
|
|
38
|
+
}
|
|
39
|
+
inline Packet2ul p2ul_CONJ_XOR2() {
|
|
40
|
+
return (Packet2ul)vec_sld((Packet4ui)p2d_MZERO, (Packet4ui)p2l_ZERO,
|
|
41
|
+
8); //{ 0x8000000000000000, 0x0000000000000000 };
|
|
42
|
+
}
|
|
26
43
|
#endif
|
|
27
44
|
#endif
|
|
28
45
|
|
|
29
46
|
//---------- float ----------
|
|
30
|
-
struct Packet2cf
|
|
31
|
-
{
|
|
47
|
+
struct Packet2cf {
|
|
32
48
|
EIGEN_STRONG_INLINE explicit Packet2cf() {}
|
|
33
49
|
EIGEN_STRONG_INLINE explicit Packet2cf(const Packet4f& a) : v(a) {}
|
|
34
50
|
|
|
35
|
-
EIGEN_STRONG_INLINE Packet2cf pmul(const Packet2cf& a, const Packet2cf& b)
|
|
36
|
-
{
|
|
51
|
+
EIGEN_STRONG_INLINE Packet2cf pmul(const Packet2cf& a, const Packet2cf& b) {
|
|
37
52
|
Packet4f v1, v2;
|
|
38
53
|
|
|
39
54
|
// Permute and multiply the real parts of a and b
|
|
@@ -44,7 +59,7 @@ struct Packet2cf
|
|
|
44
59
|
v1 = vec_madd(v1, b.v, p4f_ZERO);
|
|
45
60
|
// multiply a_im * b and get the conjugate result
|
|
46
61
|
v2 = vec_madd(v2, b.v, p4f_ZERO);
|
|
47
|
-
v2 = reinterpret_cast<Packet4f>(pxor(v2, reinterpret_cast<Packet4f>(p4ui_CONJ_XOR)));
|
|
62
|
+
v2 = reinterpret_cast<Packet4f>(pxor(v2, reinterpret_cast<Packet4f>(p4ui_CONJ_XOR())));
|
|
48
63
|
// permute back to a proper order
|
|
49
64
|
v2 = vec_perm(v2, v2, p16uc_COMPLEX32_REV);
|
|
50
65
|
|
|
@@ -55,33 +70,25 @@ struct Packet2cf
|
|
|
55
70
|
v = pmul(Packet2cf(*this), b).v;
|
|
56
71
|
return *this;
|
|
57
72
|
}
|
|
58
|
-
EIGEN_STRONG_INLINE Packet2cf operator*(const Packet2cf& b) const {
|
|
59
|
-
return Packet2cf(*this) *= b;
|
|
60
|
-
}
|
|
73
|
+
EIGEN_STRONG_INLINE Packet2cf operator*(const Packet2cf& b) const { return Packet2cf(*this) *= b; }
|
|
61
74
|
|
|
62
75
|
EIGEN_STRONG_INLINE Packet2cf& operator+=(const Packet2cf& b) {
|
|
63
76
|
v = padd(v, b.v);
|
|
64
77
|
return *this;
|
|
65
78
|
}
|
|
66
|
-
EIGEN_STRONG_INLINE Packet2cf operator+(const Packet2cf& b) const {
|
|
67
|
-
return Packet2cf(*this) += b;
|
|
68
|
-
}
|
|
79
|
+
EIGEN_STRONG_INLINE Packet2cf operator+(const Packet2cf& b) const { return Packet2cf(*this) += b; }
|
|
69
80
|
EIGEN_STRONG_INLINE Packet2cf& operator-=(const Packet2cf& b) {
|
|
70
81
|
v = psub(v, b.v);
|
|
71
82
|
return *this;
|
|
72
83
|
}
|
|
73
|
-
EIGEN_STRONG_INLINE Packet2cf operator-(const Packet2cf& b) const {
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
EIGEN_STRONG_INLINE Packet2cf operator-(void) const {
|
|
77
|
-
return Packet2cf(-v);
|
|
78
|
-
}
|
|
84
|
+
EIGEN_STRONG_INLINE Packet2cf operator-(const Packet2cf& b) const { return Packet2cf(*this) -= b; }
|
|
85
|
+
EIGEN_STRONG_INLINE Packet2cf operator-(void) const { return Packet2cf(-v); }
|
|
79
86
|
|
|
80
|
-
Packet4f
|
|
87
|
+
Packet4f v;
|
|
81
88
|
};
|
|
82
89
|
|
|
83
|
-
template<>
|
|
84
|
-
{
|
|
90
|
+
template <>
|
|
91
|
+
struct packet_traits<std::complex<float> > : default_packet_traits {
|
|
85
92
|
typedef Packet2cf type;
|
|
86
93
|
typedef Packet2cf half;
|
|
87
94
|
typedef Packet4f as_real;
|
|
@@ -89,115 +96,235 @@ template<> struct packet_traits<std::complex<float> > : default_packet_traits
|
|
|
89
96
|
Vectorizable = 1,
|
|
90
97
|
AlignedOnScalar = 1,
|
|
91
98
|
size = 2,
|
|
92
|
-
HasHalfPacket = 0,
|
|
93
99
|
|
|
94
|
-
HasAdd
|
|
95
|
-
HasSub
|
|
96
|
-
HasMul
|
|
97
|
-
HasDiv
|
|
100
|
+
HasAdd = 1,
|
|
101
|
+
HasSub = 1,
|
|
102
|
+
HasMul = 1,
|
|
103
|
+
HasDiv = 1,
|
|
98
104
|
HasNegate = 1,
|
|
99
|
-
HasAbs
|
|
100
|
-
HasAbs2
|
|
101
|
-
HasMin
|
|
102
|
-
HasMax
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
HasAbs = 0,
|
|
106
|
+
HasAbs2 = 0,
|
|
107
|
+
HasMin = 0,
|
|
108
|
+
HasMax = 0,
|
|
109
|
+
HasSqrt = 1,
|
|
110
|
+
HasLog = 1,
|
|
111
|
+
HasExp = 1,
|
|
112
|
+
#ifdef EIGEN_VECTORIZE_VSX
|
|
113
|
+
HasBlend = 1,
|
|
105
114
|
#endif
|
|
106
115
|
HasSetLinear = 0
|
|
107
116
|
};
|
|
108
117
|
};
|
|
109
118
|
|
|
110
|
-
template<>
|
|
119
|
+
template <>
|
|
120
|
+
struct unpacket_traits<Packet2cf> {
|
|
121
|
+
typedef std::complex<float> type;
|
|
122
|
+
enum {
|
|
123
|
+
size = 2,
|
|
124
|
+
alignment = Aligned16,
|
|
125
|
+
vectorizable = true,
|
|
126
|
+
masked_load_available = false,
|
|
127
|
+
masked_store_available = false
|
|
128
|
+
};
|
|
129
|
+
typedef Packet2cf half;
|
|
130
|
+
typedef Packet4f as_real;
|
|
131
|
+
};
|
|
111
132
|
|
|
112
|
-
template<>
|
|
113
|
-
{
|
|
133
|
+
template <>
|
|
134
|
+
EIGEN_STRONG_INLINE Packet2cf pset1<Packet2cf>(const std::complex<float>& from) {
|
|
114
135
|
Packet2cf res;
|
|
115
|
-
|
|
116
|
-
|
|
136
|
+
#ifdef EIGEN_VECTORIZE_VSX
|
|
137
|
+
// Load a single std::complex<float> from memory and duplicate
|
|
138
|
+
//
|
|
139
|
+
// Using pload would read past the end of the reference in this case
|
|
140
|
+
// Using vec_xl_len + vec_splat, generates poor assembly
|
|
141
|
+
__asm__("lxvdsx %x0,%y1" : "=wa"(res.v) : "Z"(from));
|
|
142
|
+
#else
|
|
143
|
+
if ((std::ptrdiff_t(&from) % 16) == 0)
|
|
144
|
+
res.v = pload<Packet4f>((const float*)&from);
|
|
117
145
|
else
|
|
118
|
-
res.v = ploadu<Packet4f>((const float
|
|
146
|
+
res.v = ploadu<Packet4f>((const float*)&from);
|
|
119
147
|
res.v = vec_perm(res.v, res.v, p16uc_PSET64_HI);
|
|
148
|
+
#endif
|
|
120
149
|
return res;
|
|
121
150
|
}
|
|
122
151
|
|
|
123
|
-
template<>
|
|
124
|
-
|
|
125
|
-
|
|
152
|
+
template <>
|
|
153
|
+
EIGEN_STRONG_INLINE Packet2cf pload<Packet2cf>(const std::complex<float>* from) {
|
|
154
|
+
return Packet2cf(pload<Packet4f>((const float*)from));
|
|
155
|
+
}
|
|
156
|
+
template <>
|
|
157
|
+
EIGEN_STRONG_INLINE Packet2cf ploadu<Packet2cf>(const std::complex<float>* from) {
|
|
158
|
+
return Packet2cf(ploadu<Packet4f>((const float*)from));
|
|
159
|
+
}
|
|
160
|
+
template <>
|
|
161
|
+
EIGEN_ALWAYS_INLINE Packet2cf pload_partial<Packet2cf>(const std::complex<float>* from, const Index n,
|
|
162
|
+
const Index offset) {
|
|
163
|
+
return Packet2cf(pload_partial<Packet4f>((const float*)from, n * 2, offset * 2));
|
|
164
|
+
}
|
|
165
|
+
template <>
|
|
166
|
+
EIGEN_ALWAYS_INLINE Packet2cf ploadu_partial<Packet2cf>(const std::complex<float>* from, const Index n,
|
|
167
|
+
const Index offset) {
|
|
168
|
+
return Packet2cf(ploadu_partial<Packet4f>((const float*)from, n * 2, offset * 2));
|
|
169
|
+
}
|
|
170
|
+
template <>
|
|
171
|
+
EIGEN_STRONG_INLINE Packet2cf ploaddup<Packet2cf>(const std::complex<float>* from) {
|
|
172
|
+
return pset1<Packet2cf>(*from);
|
|
173
|
+
}
|
|
126
174
|
|
|
127
|
-
template<>
|
|
128
|
-
|
|
175
|
+
template <>
|
|
176
|
+
EIGEN_STRONG_INLINE void pstore<std::complex<float> >(std::complex<float>* to, const Packet2cf& from) {
|
|
177
|
+
pstore((float*)to, from.v);
|
|
178
|
+
}
|
|
179
|
+
template <>
|
|
180
|
+
EIGEN_STRONG_INLINE void pstoreu<std::complex<float> >(std::complex<float>* to, const Packet2cf& from) {
|
|
181
|
+
pstoreu((float*)to, from.v);
|
|
182
|
+
}
|
|
183
|
+
template <>
|
|
184
|
+
EIGEN_ALWAYS_INLINE void pstore_partial<std::complex<float> >(std::complex<float>* to, const Packet2cf& from,
|
|
185
|
+
const Index n, const Index offset) {
|
|
186
|
+
pstore_partial((float*)to, from.v, n * 2, offset * 2);
|
|
187
|
+
}
|
|
188
|
+
template <>
|
|
189
|
+
EIGEN_ALWAYS_INLINE void pstoreu_partial<std::complex<float> >(std::complex<float>* to, const Packet2cf& from,
|
|
190
|
+
const Index n, const Index offset) {
|
|
191
|
+
pstoreu_partial((float*)to, from.v, n * 2, offset * 2);
|
|
192
|
+
}
|
|
129
193
|
|
|
130
|
-
EIGEN_STRONG_INLINE Packet2cf pload2(const std::complex<float
|
|
131
|
-
{
|
|
194
|
+
EIGEN_STRONG_INLINE Packet2cf pload2(const std::complex<float>& from0, const std::complex<float>& from1) {
|
|
132
195
|
Packet4f res0, res1;
|
|
133
|
-
#ifdef
|
|
134
|
-
|
|
135
|
-
__asm__
|
|
196
|
+
#ifdef EIGEN_VECTORIZE_VSX
|
|
197
|
+
// Load two std::complex<float> from memory and combine
|
|
198
|
+
__asm__("lxsdx %x0,%y1" : "=wa"(res0) : "Z"(from0));
|
|
199
|
+
__asm__("lxsdx %x0,%y1" : "=wa"(res1) : "Z"(from1));
|
|
136
200
|
#ifdef _BIG_ENDIAN
|
|
137
|
-
__asm__
|
|
201
|
+
__asm__("xxpermdi %x0, %x1, %x2, 0" : "=wa"(res0) : "wa"(res0), "wa"(res1));
|
|
138
202
|
#else
|
|
139
|
-
__asm__
|
|
203
|
+
__asm__("xxpermdi %x0, %x2, %x1, 0" : "=wa"(res0) : "wa"(res0), "wa"(res1));
|
|
140
204
|
#endif
|
|
141
205
|
#else
|
|
142
|
-
*reinterpret_cast<std::complex<float
|
|
143
|
-
*reinterpret_cast<std::complex<float
|
|
206
|
+
*reinterpret_cast<std::complex<float>*>(&res0) = from0;
|
|
207
|
+
*reinterpret_cast<std::complex<float>*>(&res1) = from1;
|
|
144
208
|
res0 = vec_perm(res0, res1, p16uc_TRANSPOSE64_HI);
|
|
145
209
|
#endif
|
|
146
210
|
return Packet2cf(res0);
|
|
147
211
|
}
|
|
148
212
|
|
|
149
|
-
template<>
|
|
150
|
-
{
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
213
|
+
template <>
|
|
214
|
+
EIGEN_ALWAYS_INLINE Packet2cf pload_ignore<Packet2cf>(const std::complex<float>* from) {
|
|
215
|
+
Packet2cf res;
|
|
216
|
+
res.v = pload_ignore<Packet4f>(reinterpret_cast<const float*>(from));
|
|
217
|
+
return res;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
template <typename Scalar, typename Packet>
|
|
221
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet pgather_complex_size2(const Scalar* from, Index stride,
|
|
222
|
+
const Index n = 2) {
|
|
223
|
+
eigen_internal_assert(n <= unpacket_traits<Packet>::size && "number of elements will gather past end of packet");
|
|
224
|
+
EIGEN_ALIGN16 Scalar af[2];
|
|
225
|
+
for (Index i = 0; i < n; i++) {
|
|
226
|
+
af[i] = from[i * stride];
|
|
227
|
+
}
|
|
228
|
+
return pload_ignore<Packet>(af);
|
|
155
229
|
}
|
|
156
|
-
template<>
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
230
|
+
template <>
|
|
231
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet2cf pgather<std::complex<float>, Packet2cf>(const std::complex<float>* from,
|
|
232
|
+
Index stride) {
|
|
233
|
+
return pgather_complex_size2<std::complex<float>, Packet2cf>(from, stride);
|
|
234
|
+
}
|
|
235
|
+
template <>
|
|
236
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet2cf
|
|
237
|
+
pgather_partial<std::complex<float>, Packet2cf>(const std::complex<float>* from, Index stride, const Index n) {
|
|
238
|
+
return pgather_complex_size2<std::complex<float>, Packet2cf>(from, stride, n);
|
|
239
|
+
}
|
|
240
|
+
template <typename Scalar, typename Packet>
|
|
241
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_complex_size2(Scalar* to, const Packet& from, Index stride,
|
|
242
|
+
const Index n = 2) {
|
|
243
|
+
eigen_internal_assert(n <= unpacket_traits<Packet>::size && "number of elements will scatter past end of packet");
|
|
244
|
+
EIGEN_ALIGN16 Scalar af[2];
|
|
245
|
+
pstore<Scalar>((Scalar*)af, from);
|
|
246
|
+
for (Index i = 0; i < n; i++) {
|
|
247
|
+
to[i * stride] = af[i];
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
template <>
|
|
251
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter<std::complex<float>, Packet2cf>(std::complex<float>* to,
|
|
252
|
+
const Packet2cf& from,
|
|
253
|
+
Index stride) {
|
|
254
|
+
pscatter_complex_size2<std::complex<float>, Packet2cf>(to, from, stride);
|
|
255
|
+
}
|
|
256
|
+
template <>
|
|
257
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial<std::complex<float>, Packet2cf>(std::complex<float>* to,
|
|
258
|
+
const Packet2cf& from,
|
|
259
|
+
Index stride,
|
|
260
|
+
const Index n) {
|
|
261
|
+
pscatter_complex_size2<std::complex<float>, Packet2cf>(to, from, stride, n);
|
|
162
262
|
}
|
|
163
263
|
|
|
164
|
-
template<>
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
264
|
+
template <>
|
|
265
|
+
EIGEN_STRONG_INLINE Packet2cf padd<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
266
|
+
return Packet2cf(a.v + b.v);
|
|
267
|
+
}
|
|
268
|
+
template <>
|
|
269
|
+
EIGEN_STRONG_INLINE Packet2cf psub<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
270
|
+
return Packet2cf(a.v - b.v);
|
|
271
|
+
}
|
|
272
|
+
template <>
|
|
273
|
+
EIGEN_STRONG_INLINE Packet2cf pnegate(const Packet2cf& a) {
|
|
274
|
+
return Packet2cf(pnegate(a.v));
|
|
275
|
+
}
|
|
276
|
+
template <>
|
|
277
|
+
EIGEN_STRONG_INLINE Packet2cf pconj(const Packet2cf& a) {
|
|
278
|
+
return Packet2cf(pxor<Packet4f>(a.v, reinterpret_cast<Packet4f>(p4ui_CONJ_XOR())));
|
|
279
|
+
}
|
|
168
280
|
|
|
169
|
-
template<>
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
281
|
+
template <>
|
|
282
|
+
EIGEN_STRONG_INLINE Packet2cf pand<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
283
|
+
return Packet2cf(pand<Packet4f>(a.v, b.v));
|
|
284
|
+
}
|
|
285
|
+
template <>
|
|
286
|
+
EIGEN_STRONG_INLINE Packet2cf por<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
287
|
+
return Packet2cf(por<Packet4f>(a.v, b.v));
|
|
288
|
+
}
|
|
289
|
+
template <>
|
|
290
|
+
EIGEN_STRONG_INLINE Packet2cf pxor<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
291
|
+
return Packet2cf(pxor<Packet4f>(a.v, b.v));
|
|
292
|
+
}
|
|
293
|
+
template <>
|
|
294
|
+
EIGEN_STRONG_INLINE Packet2cf pandnot<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
295
|
+
return Packet2cf(pandnot<Packet4f>(a.v, b.v));
|
|
296
|
+
}
|
|
173
297
|
|
|
174
|
-
template<>
|
|
298
|
+
template <>
|
|
299
|
+
EIGEN_STRONG_INLINE void prefetch<std::complex<float> >(const std::complex<float>* addr) {
|
|
300
|
+
EIGEN_PPC_PREFETCH(addr);
|
|
301
|
+
}
|
|
175
302
|
|
|
176
|
-
template<>
|
|
177
|
-
{
|
|
303
|
+
template <>
|
|
304
|
+
EIGEN_STRONG_INLINE std::complex<float> pfirst<Packet2cf>(const Packet2cf& a) {
|
|
178
305
|
EIGEN_ALIGN16 std::complex<float> res[2];
|
|
179
|
-
pstore((float
|
|
306
|
+
pstore((float*)&res, a.v);
|
|
180
307
|
|
|
181
308
|
return res[0];
|
|
182
309
|
}
|
|
183
310
|
|
|
184
|
-
template<>
|
|
185
|
-
{
|
|
311
|
+
template <>
|
|
312
|
+
EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf& a) {
|
|
186
313
|
Packet4f rev_a;
|
|
187
|
-
rev_a =
|
|
314
|
+
rev_a = vec_sld(a.v, a.v, 8);
|
|
188
315
|
return Packet2cf(rev_a);
|
|
189
316
|
}
|
|
190
317
|
|
|
191
|
-
template<>
|
|
192
|
-
{
|
|
318
|
+
template <>
|
|
319
|
+
EIGEN_STRONG_INLINE std::complex<float> predux<Packet2cf>(const Packet2cf& a) {
|
|
193
320
|
Packet4f b;
|
|
194
321
|
b = vec_sld(a.v, a.v, 8);
|
|
195
322
|
b = padd<Packet4f>(a.v, b);
|
|
196
323
|
return pfirst<Packet2cf>(Packet2cf(b));
|
|
197
324
|
}
|
|
198
325
|
|
|
199
|
-
template<>
|
|
200
|
-
{
|
|
326
|
+
template <>
|
|
327
|
+
EIGEN_STRONG_INLINE std::complex<float> predux_mul<Packet2cf>(const Packet2cf& a) {
|
|
201
328
|
Packet4f b;
|
|
202
329
|
Packet2cf prod;
|
|
203
330
|
b = vec_sld(a.v, a.v, 8);
|
|
@@ -206,55 +333,70 @@ template<> EIGEN_STRONG_INLINE std::complex<float> predux_mul<Packet2cf>(const P
|
|
|
206
333
|
return pfirst<Packet2cf>(prod);
|
|
207
334
|
}
|
|
208
335
|
|
|
209
|
-
EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cf,Packet4f)
|
|
336
|
+
EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet2cf, Packet4f)
|
|
210
337
|
|
|
211
|
-
template<>
|
|
212
|
-
{
|
|
213
|
-
|
|
214
|
-
Packet2cf res = pmul(a, pconj(b));
|
|
215
|
-
Packet4f s = pmul<Packet4f>(b.v, b.v);
|
|
216
|
-
return Packet2cf(pdiv(res.v, padd<Packet4f>(s, vec_perm(s, s, p16uc_COMPLEX32_REV))));
|
|
338
|
+
template <>
|
|
339
|
+
EIGEN_STRONG_INLINE Packet2cf pdiv<Packet2cf>(const Packet2cf& a, const Packet2cf& b) {
|
|
340
|
+
return pdiv_complex(a, b);
|
|
217
341
|
}
|
|
218
342
|
|
|
219
|
-
template<>
|
|
220
|
-
{
|
|
343
|
+
template <>
|
|
344
|
+
EIGEN_STRONG_INLINE Packet2cf pcplxflip<Packet2cf>(const Packet2cf& x) {
|
|
221
345
|
return Packet2cf(vec_perm(x.v, x.v, p16uc_COMPLEX32_REV));
|
|
222
346
|
}
|
|
223
347
|
|
|
224
|
-
EIGEN_STRONG_INLINE void ptranspose(PacketBlock<Packet2cf,2>& kernel)
|
|
225
|
-
|
|
348
|
+
EIGEN_STRONG_INLINE void ptranspose(PacketBlock<Packet2cf, 2>& kernel) {
|
|
349
|
+
#ifdef EIGEN_VECTORIZE_VSX
|
|
350
|
+
Packet4f tmp = reinterpret_cast<Packet4f>(
|
|
351
|
+
vec_mergeh(reinterpret_cast<Packet2d>(kernel.packet[0].v), reinterpret_cast<Packet2d>(kernel.packet[1].v)));
|
|
352
|
+
kernel.packet[1].v = reinterpret_cast<Packet4f>(
|
|
353
|
+
vec_mergel(reinterpret_cast<Packet2d>(kernel.packet[0].v), reinterpret_cast<Packet2d>(kernel.packet[1].v)));
|
|
354
|
+
#else
|
|
226
355
|
Packet4f tmp = vec_perm(kernel.packet[0].v, kernel.packet[1].v, p16uc_TRANSPOSE64_HI);
|
|
227
356
|
kernel.packet[1].v = vec_perm(kernel.packet[0].v, kernel.packet[1].v, p16uc_TRANSPOSE64_LO);
|
|
357
|
+
#endif
|
|
228
358
|
kernel.packet[0].v = tmp;
|
|
229
359
|
}
|
|
230
360
|
|
|
231
|
-
template<>
|
|
232
|
-
|
|
361
|
+
template <>
|
|
362
|
+
EIGEN_STRONG_INLINE Packet2cf pcmp_eq(const Packet2cf& a, const Packet2cf& b) {
|
|
363
|
+
Packet4f eq = reinterpret_cast<Packet4f>(vec_cmpeq(a.v, b.v));
|
|
233
364
|
return Packet2cf(vec_and(eq, vec_perm(eq, eq, p16uc_COMPLEX32_REV)));
|
|
234
365
|
}
|
|
235
366
|
|
|
236
|
-
#ifdef
|
|
237
|
-
template<>
|
|
367
|
+
#ifdef EIGEN_VECTORIZE_VSX
|
|
368
|
+
template <>
|
|
369
|
+
EIGEN_STRONG_INLINE Packet2cf pblend(const Selector<2>& ifPacket, const Packet2cf& thenPacket,
|
|
370
|
+
const Packet2cf& elsePacket) {
|
|
238
371
|
Packet2cf result;
|
|
239
|
-
result.v = reinterpret_cast<Packet4f>(
|
|
372
|
+
result.v = reinterpret_cast<Packet4f>(
|
|
373
|
+
pblend<Packet2d>(ifPacket, reinterpret_cast<Packet2d>(thenPacket.v), reinterpret_cast<Packet2d>(elsePacket.v)));
|
|
240
374
|
return result;
|
|
241
375
|
}
|
|
242
376
|
#endif
|
|
243
377
|
|
|
244
|
-
template<>
|
|
245
|
-
{
|
|
378
|
+
template <>
|
|
379
|
+
EIGEN_STRONG_INLINE Packet2cf psqrt<Packet2cf>(const Packet2cf& a) {
|
|
246
380
|
return psqrt_complex<Packet2cf>(a);
|
|
247
381
|
}
|
|
248
382
|
|
|
383
|
+
template <>
|
|
384
|
+
EIGEN_STRONG_INLINE Packet2cf plog<Packet2cf>(const Packet2cf& a) {
|
|
385
|
+
return plog_complex<Packet2cf>(a);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
template <>
|
|
389
|
+
EIGEN_STRONG_INLINE Packet2cf pexp<Packet2cf>(const Packet2cf& a) {
|
|
390
|
+
return pexp_complex<Packet2cf>(a);
|
|
391
|
+
}
|
|
392
|
+
|
|
249
393
|
//---------- double ----------
|
|
250
|
-
#ifdef
|
|
251
|
-
struct Packet1cd
|
|
252
|
-
{
|
|
394
|
+
#ifdef EIGEN_VECTORIZE_VSX
|
|
395
|
+
struct Packet1cd {
|
|
253
396
|
EIGEN_STRONG_INLINE Packet1cd() {}
|
|
254
397
|
EIGEN_STRONG_INLINE explicit Packet1cd(const Packet2d& a) : v(a) {}
|
|
255
398
|
|
|
256
|
-
EIGEN_STRONG_INLINE Packet1cd pmul(const Packet1cd& a, const Packet1cd& b)
|
|
257
|
-
{
|
|
399
|
+
EIGEN_STRONG_INLINE Packet1cd pmul(const Packet1cd& a, const Packet1cd& b) {
|
|
258
400
|
Packet2d a_re, a_im, v1, v2;
|
|
259
401
|
|
|
260
402
|
// Permute and multiply the real parts of a and b
|
|
@@ -266,7 +408,7 @@ struct Packet1cd
|
|
|
266
408
|
// multiply a_im * b and get the conjugate result
|
|
267
409
|
v2 = vec_madd(a_im, b.v, p2d_ZERO);
|
|
268
410
|
v2 = reinterpret_cast<Packet2d>(vec_sld(reinterpret_cast<Packet4ui>(v2), reinterpret_cast<Packet4ui>(v2), 8));
|
|
269
|
-
v2 = pxor(v2, reinterpret_cast<Packet2d>(p2ul_CONJ_XOR1));
|
|
411
|
+
v2 = pxor(v2, reinterpret_cast<Packet2d>(p2ul_CONJ_XOR1()));
|
|
270
412
|
|
|
271
413
|
return Packet1cd(padd<Packet2d>(v1, v2));
|
|
272
414
|
}
|
|
@@ -275,33 +417,25 @@ struct Packet1cd
|
|
|
275
417
|
v = pmul(Packet1cd(*this), b).v;
|
|
276
418
|
return *this;
|
|
277
419
|
}
|
|
278
|
-
EIGEN_STRONG_INLINE Packet1cd operator*(const Packet1cd& b) const {
|
|
279
|
-
return Packet1cd(*this) *= b;
|
|
280
|
-
}
|
|
420
|
+
EIGEN_STRONG_INLINE Packet1cd operator*(const Packet1cd& b) const { return Packet1cd(*this) *= b; }
|
|
281
421
|
|
|
282
422
|
EIGEN_STRONG_INLINE Packet1cd& operator+=(const Packet1cd& b) {
|
|
283
423
|
v = padd(v, b.v);
|
|
284
424
|
return *this;
|
|
285
425
|
}
|
|
286
|
-
EIGEN_STRONG_INLINE Packet1cd operator+(const Packet1cd& b) const {
|
|
287
|
-
return Packet1cd(*this) += b;
|
|
288
|
-
}
|
|
426
|
+
EIGEN_STRONG_INLINE Packet1cd operator+(const Packet1cd& b) const { return Packet1cd(*this) += b; }
|
|
289
427
|
EIGEN_STRONG_INLINE Packet1cd& operator-=(const Packet1cd& b) {
|
|
290
428
|
v = psub(v, b.v);
|
|
291
429
|
return *this;
|
|
292
430
|
}
|
|
293
|
-
EIGEN_STRONG_INLINE Packet1cd operator-(const Packet1cd& b) const {
|
|
294
|
-
|
|
295
|
-
}
|
|
296
|
-
EIGEN_STRONG_INLINE Packet1cd operator-(void) const {
|
|
297
|
-
return Packet1cd(-v);
|
|
298
|
-
}
|
|
431
|
+
EIGEN_STRONG_INLINE Packet1cd operator-(const Packet1cd& b) const { return Packet1cd(*this) -= b; }
|
|
432
|
+
EIGEN_STRONG_INLINE Packet1cd operator-(void) const { return Packet1cd(-v); }
|
|
299
433
|
|
|
300
434
|
Packet2d v;
|
|
301
435
|
};
|
|
302
436
|
|
|
303
|
-
template<>
|
|
304
|
-
{
|
|
437
|
+
template <>
|
|
438
|
+
struct packet_traits<std::complex<double> > : default_packet_traits {
|
|
305
439
|
typedef Packet1cd type;
|
|
306
440
|
typedef Packet1cd half;
|
|
307
441
|
typedef Packet2d as_real;
|
|
@@ -309,109 +443,211 @@ template<> struct packet_traits<std::complex<double> > : default_packet_traits
|
|
|
309
443
|
Vectorizable = 1,
|
|
310
444
|
AlignedOnScalar = 0,
|
|
311
445
|
size = 1,
|
|
312
|
-
HasHalfPacket = 0,
|
|
313
446
|
|
|
314
|
-
HasAdd
|
|
315
|
-
HasSub
|
|
316
|
-
HasMul
|
|
317
|
-
HasDiv
|
|
447
|
+
HasAdd = 1,
|
|
448
|
+
HasSub = 1,
|
|
449
|
+
HasMul = 1,
|
|
450
|
+
HasDiv = 1,
|
|
318
451
|
HasNegate = 1,
|
|
319
|
-
HasAbs
|
|
320
|
-
HasAbs2
|
|
321
|
-
HasMin
|
|
322
|
-
HasMax
|
|
452
|
+
HasAbs = 0,
|
|
453
|
+
HasAbs2 = 0,
|
|
454
|
+
HasMin = 0,
|
|
455
|
+
HasMax = 0,
|
|
456
|
+
HasSqrt = 1,
|
|
457
|
+
HasLog = 1,
|
|
323
458
|
HasSetLinear = 0
|
|
324
459
|
};
|
|
325
460
|
};
|
|
326
461
|
|
|
327
|
-
template<>
|
|
462
|
+
template <>
|
|
463
|
+
struct unpacket_traits<Packet1cd> {
|
|
464
|
+
typedef std::complex<double> type;
|
|
465
|
+
enum {
|
|
466
|
+
size = 1,
|
|
467
|
+
alignment = Aligned16,
|
|
468
|
+
vectorizable = true,
|
|
469
|
+
masked_load_available = false,
|
|
470
|
+
masked_store_available = false
|
|
471
|
+
};
|
|
472
|
+
typedef Packet1cd half;
|
|
473
|
+
typedef Packet2d as_real;
|
|
474
|
+
};
|
|
328
475
|
|
|
329
|
-
template<>
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
476
|
+
template <>
|
|
477
|
+
EIGEN_STRONG_INLINE Packet1cd pload<Packet1cd>(const std::complex<double>* from) {
|
|
478
|
+
return Packet1cd(pload<Packet2d>((const double*)from));
|
|
479
|
+
}
|
|
480
|
+
template <>
|
|
481
|
+
EIGEN_STRONG_INLINE Packet1cd ploadu<Packet1cd>(const std::complex<double>* from) {
|
|
482
|
+
return Packet1cd(ploadu<Packet2d>((const double*)from));
|
|
483
|
+
}
|
|
484
|
+
template <>
|
|
485
|
+
EIGEN_ALWAYS_INLINE Packet1cd pload_partial<Packet1cd>(const std::complex<double>* from, const Index n,
|
|
486
|
+
const Index offset) {
|
|
487
|
+
return Packet1cd(pload_partial<Packet2d>((const double*)from, n * 2, offset * 2));
|
|
488
|
+
}
|
|
489
|
+
template <>
|
|
490
|
+
EIGEN_ALWAYS_INLINE Packet1cd ploadu_partial<Packet1cd>(const std::complex<double>* from, const Index n,
|
|
491
|
+
const Index offset) {
|
|
492
|
+
return Packet1cd(ploadu_partial<Packet2d>((const double*)from, n * 2, offset * 2));
|
|
493
|
+
}
|
|
494
|
+
template <>
|
|
495
|
+
EIGEN_STRONG_INLINE void pstore<std::complex<double> >(std::complex<double>* to, const Packet1cd& from) {
|
|
496
|
+
pstore((double*)to, from.v);
|
|
497
|
+
}
|
|
498
|
+
template <>
|
|
499
|
+
EIGEN_STRONG_INLINE void pstoreu<std::complex<double> >(std::complex<double>* to, const Packet1cd& from) {
|
|
500
|
+
pstoreu((double*)to, from.v);
|
|
501
|
+
}
|
|
502
|
+
template <>
|
|
503
|
+
EIGEN_ALWAYS_INLINE void pstore_partial<std::complex<double> >(std::complex<double>* to, const Packet1cd& from,
|
|
504
|
+
const Index n, const Index offset) {
|
|
505
|
+
pstore_partial((double*)to, from.v, n * 2, offset * 2);
|
|
506
|
+
}
|
|
507
|
+
template <>
|
|
508
|
+
EIGEN_ALWAYS_INLINE void pstoreu_partial<std::complex<double> >(std::complex<double>* to, const Packet1cd& from,
|
|
509
|
+
const Index n, const Index offset) {
|
|
510
|
+
pstoreu_partial((double*)to, from.v, n * 2, offset * 2);
|
|
511
|
+
}
|
|
333
512
|
|
|
334
|
-
template<>
|
|
335
|
-
|
|
513
|
+
template <>
|
|
514
|
+
EIGEN_STRONG_INLINE Packet1cd
|
|
515
|
+
pset1<Packet1cd>(const std::complex<double>& from) { /* here we really have to use unaligned loads :( */
|
|
516
|
+
return ploadu<Packet1cd>(&from);
|
|
517
|
+
}
|
|
336
518
|
|
|
337
|
-
template<>
|
|
338
|
-
|
|
519
|
+
template <>
|
|
520
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet1cd
|
|
521
|
+
pgather<std::complex<double>, Packet1cd>(const std::complex<double>* from, Index) {
|
|
522
|
+
return pload<Packet1cd>(from);
|
|
523
|
+
}
|
|
524
|
+
template <>
|
|
525
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet1cd
|
|
526
|
+
pgather_partial<std::complex<double>, Packet1cd>(const std::complex<double>* from, Index, const Index) {
|
|
339
527
|
return pload<Packet1cd>(from);
|
|
340
528
|
}
|
|
341
|
-
template<>
|
|
342
|
-
|
|
529
|
+
template <>
|
|
530
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter<std::complex<double>, Packet1cd>(std::complex<double>* to,
|
|
531
|
+
const Packet1cd& from, Index) {
|
|
532
|
+
pstore<std::complex<double> >(to, from);
|
|
533
|
+
}
|
|
534
|
+
template <>
|
|
535
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pscatter_partial<std::complex<double>, Packet1cd>(std::complex<double>* to,
|
|
536
|
+
const Packet1cd& from,
|
|
537
|
+
Index, const Index) {
|
|
343
538
|
pstore<std::complex<double> >(to, from);
|
|
344
539
|
}
|
|
345
540
|
|
|
346
|
-
template<>
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
541
|
+
template <>
|
|
542
|
+
EIGEN_STRONG_INLINE Packet1cd padd<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
543
|
+
return Packet1cd(a.v + b.v);
|
|
544
|
+
}
|
|
545
|
+
template <>
|
|
546
|
+
EIGEN_STRONG_INLINE Packet1cd psub<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
547
|
+
return Packet1cd(a.v - b.v);
|
|
548
|
+
}
|
|
549
|
+
template <>
|
|
550
|
+
EIGEN_STRONG_INLINE Packet1cd pnegate(const Packet1cd& a) {
|
|
551
|
+
return Packet1cd(pnegate(Packet2d(a.v)));
|
|
552
|
+
}
|
|
553
|
+
template <>
|
|
554
|
+
EIGEN_STRONG_INLINE Packet1cd pconj(const Packet1cd& a) {
|
|
555
|
+
return Packet1cd(pxor(a.v, reinterpret_cast<Packet2d>(p2ul_CONJ_XOR2())));
|
|
556
|
+
}
|
|
350
557
|
|
|
351
|
-
template<>
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
558
|
+
template <>
|
|
559
|
+
EIGEN_STRONG_INLINE Packet1cd pand<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
560
|
+
return Packet1cd(pand(a.v, b.v));
|
|
561
|
+
}
|
|
562
|
+
template <>
|
|
563
|
+
EIGEN_STRONG_INLINE Packet1cd por<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
564
|
+
return Packet1cd(por(a.v, b.v));
|
|
565
|
+
}
|
|
566
|
+
template <>
|
|
567
|
+
EIGEN_STRONG_INLINE Packet1cd pxor<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
568
|
+
return Packet1cd(pxor(a.v, b.v));
|
|
569
|
+
}
|
|
570
|
+
template <>
|
|
571
|
+
EIGEN_STRONG_INLINE Packet1cd pandnot<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
572
|
+
return Packet1cd(pandnot(a.v, b.v));
|
|
573
|
+
}
|
|
355
574
|
|
|
356
|
-
template<>
|
|
575
|
+
template <>
|
|
576
|
+
EIGEN_STRONG_INLINE Packet1cd ploaddup<Packet1cd>(const std::complex<double>* from) {
|
|
577
|
+
return pset1<Packet1cd>(*from);
|
|
578
|
+
}
|
|
357
579
|
|
|
358
|
-
template<>
|
|
580
|
+
template <>
|
|
581
|
+
EIGEN_STRONG_INLINE void prefetch<std::complex<double> >(const std::complex<double>* addr) {
|
|
582
|
+
EIGEN_PPC_PREFETCH(addr);
|
|
583
|
+
}
|
|
359
584
|
|
|
360
|
-
template<>
|
|
361
|
-
{
|
|
362
|
-
EIGEN_ALIGN16 std::complex<double> res[
|
|
585
|
+
template <>
|
|
586
|
+
EIGEN_STRONG_INLINE std::complex<double> pfirst<Packet1cd>(const Packet1cd& a) {
|
|
587
|
+
EIGEN_ALIGN16 std::complex<double> res[1];
|
|
363
588
|
pstore<std::complex<double> >(res, a);
|
|
364
589
|
|
|
365
590
|
return res[0];
|
|
366
591
|
}
|
|
367
592
|
|
|
368
|
-
template<>
|
|
593
|
+
template <>
|
|
594
|
+
EIGEN_STRONG_INLINE Packet1cd preverse(const Packet1cd& a) {
|
|
595
|
+
return a;
|
|
596
|
+
}
|
|
369
597
|
|
|
370
|
-
template<>
|
|
598
|
+
template <>
|
|
599
|
+
EIGEN_STRONG_INLINE std::complex<double> predux<Packet1cd>(const Packet1cd& a) {
|
|
600
|
+
return pfirst(a);
|
|
601
|
+
}
|
|
371
602
|
|
|
372
|
-
template<>
|
|
603
|
+
template <>
|
|
604
|
+
EIGEN_STRONG_INLINE std::complex<double> predux_mul<Packet1cd>(const Packet1cd& a) {
|
|
605
|
+
return pfirst(a);
|
|
606
|
+
}
|
|
373
607
|
|
|
374
|
-
EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cd,Packet2d)
|
|
608
|
+
EIGEN_MAKE_CONJ_HELPER_CPLX_REAL(Packet1cd, Packet2d)
|
|
375
609
|
|
|
376
|
-
template<>
|
|
377
|
-
{
|
|
378
|
-
|
|
379
|
-
Packet1cd res = pmul(a,pconj(b));
|
|
380
|
-
Packet2d s = pmul<Packet2d>(b.v, b.v);
|
|
381
|
-
return Packet1cd(pdiv(res.v, padd<Packet2d>(s, vec_perm(s, s, p16uc_REVERSE64))));
|
|
610
|
+
template <>
|
|
611
|
+
EIGEN_STRONG_INLINE Packet1cd pdiv<Packet1cd>(const Packet1cd& a, const Packet1cd& b) {
|
|
612
|
+
return pdiv_complex(a, b);
|
|
382
613
|
}
|
|
383
614
|
|
|
384
|
-
EIGEN_STRONG_INLINE Packet1cd pcplxflip/*<Packet1cd>*/(const Packet1cd& x)
|
|
385
|
-
{
|
|
615
|
+
EIGEN_STRONG_INLINE Packet1cd pcplxflip /*<Packet1cd>*/ (const Packet1cd& x) {
|
|
386
616
|
return Packet1cd(preverse(Packet2d(x.v)));
|
|
387
617
|
}
|
|
388
618
|
|
|
389
|
-
EIGEN_STRONG_INLINE void ptranspose(PacketBlock<Packet1cd,2>& kernel)
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
kernel.packet[1].v = vec_perm(kernel.packet[0].v, kernel.packet[1].v, p16uc_TRANSPOSE64_LO);
|
|
619
|
+
EIGEN_STRONG_INLINE void ptranspose(PacketBlock<Packet1cd, 2>& kernel) {
|
|
620
|
+
Packet2d tmp = vec_mergeh(kernel.packet[0].v, kernel.packet[1].v);
|
|
621
|
+
kernel.packet[1].v = vec_mergel(kernel.packet[0].v, kernel.packet[1].v);
|
|
393
622
|
kernel.packet[0].v = tmp;
|
|
394
623
|
}
|
|
395
624
|
|
|
396
|
-
template<>
|
|
625
|
+
template <>
|
|
626
|
+
EIGEN_STRONG_INLINE Packet1cd pcmp_eq(const Packet1cd& a, const Packet1cd& b) {
|
|
397
627
|
// Compare real and imaginary parts of a and b to get the mask vector:
|
|
398
628
|
// [re(a)==re(b), im(a)==im(b)]
|
|
399
|
-
Packet2d eq = reinterpret_cast<Packet2d>(vec_cmpeq(a.v,b.v));
|
|
629
|
+
Packet2d eq = reinterpret_cast<Packet2d>(vec_cmpeq(a.v, b.v));
|
|
400
630
|
// Swap real/imag elements in the mask in to get:
|
|
401
631
|
// [im(a)==im(b), re(a)==re(b)]
|
|
402
|
-
Packet2d eq_swapped =
|
|
632
|
+
Packet2d eq_swapped =
|
|
633
|
+
reinterpret_cast<Packet2d>(vec_sld(reinterpret_cast<Packet4ui>(eq), reinterpret_cast<Packet4ui>(eq), 8));
|
|
403
634
|
// Return re(a)==re(b) & im(a)==im(b) by computing bitwise AND of eq and eq_swapped
|
|
404
635
|
return Packet1cd(vec_and(eq, eq_swapped));
|
|
405
636
|
}
|
|
406
637
|
|
|
407
|
-
template<>
|
|
408
|
-
{
|
|
638
|
+
template <>
|
|
639
|
+
EIGEN_STRONG_INLINE Packet1cd psqrt<Packet1cd>(const Packet1cd& a) {
|
|
409
640
|
return psqrt_complex<Packet1cd>(a);
|
|
410
641
|
}
|
|
411
642
|
|
|
412
|
-
|
|
413
|
-
|
|
643
|
+
template <>
|
|
644
|
+
EIGEN_STRONG_INLINE Packet1cd plog<Packet1cd>(const Packet1cd& a) {
|
|
645
|
+
return plog_complex<Packet1cd>(a);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
#endif // __VSX__
|
|
649
|
+
} // end namespace internal
|
|
414
650
|
|
|
415
|
-
}
|
|
651
|
+
} // end namespace Eigen
|
|
416
652
|
|
|
417
|
-
#endif
|
|
653
|
+
#endif // EIGEN_COMPLEX32_ALTIVEC_H
|