@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.
Files changed (431) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -20
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +187 -120
  6. package/eigen/Eigen/Eigenvalues +16 -13
  7. package/eigen/Eigen/Geometry +18 -18
  8. package/eigen/Eigen/Householder +9 -7
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -13
  11. package/eigen/Eigen/KLUSupport +23 -21
  12. package/eigen/Eigen/LU +15 -16
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -51
  15. package/eigen/Eigen/PaStiXSupport +23 -21
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -20
  18. package/eigen/Eigen/QtAlignedMalloc +5 -12
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -17
  21. package/eigen/Eigen/Sparse +1 -2
  22. package/eigen/Eigen/SparseCholesky +18 -15
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +9 -9
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
  37. package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
  42. package/eigen/Eigen/src/Core/Array.h +329 -370
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
  48. package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
  49. package/eigen/Eigen/src/Core/Block.h +371 -390
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
  53. package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
  59. package/eigen/Eigen/src/Core/DenseBase.h +630 -658
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
  61. package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +168 -207
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +167 -217
  67. package/eigen/Eigen/src/Core/EigenBase.h +74 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
  75. package/eigen/Eigen/src/Core/IO.h +131 -156
  76. package/eigen/Eigen/src/Core/IndexedView.h +209 -125
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +50 -59
  80. package/eigen/Eigen/src/Core/Map.h +123 -141
  81. package/eigen/Eigen/src/Core/MapBase.h +255 -282
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
  84. package/eigen/Eigen/src/Core/Matrix.h +463 -494
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
  86. package/eigen/Eigen/src/Core/NestByValue.h +58 -52
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -86
  88. package/eigen/Eigen/src/Core/NumTraits.h +206 -206
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
  92. package/eigen/Eigen/src/Core/Product.h +246 -130
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
  94. package/eigen/Eigen/src/Core/Random.h +153 -164
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +334 -314
  98. package/eigen/Eigen/src/Core/Ref.h +259 -257
  99. package/eigen/Eigen/src/Core/Replicate.h +92 -104
  100. package/eigen/Eigen/src/Core/Reshaped.h +215 -271
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +133 -148
  103. package/eigen/Eigen/src/Core/Select.h +68 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +88 -102
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
  109. package/eigen/Eigen/src/Core/SolverBase.h +132 -133
  110. package/eigen/Eigen/src/Core/StableNorm.h +113 -147
  111. package/eigen/Eigen/src/Core/StlIterators.h +404 -248
  112. package/eigen/Eigen/src/Core/Stride.h +90 -92
  113. package/eigen/Eigen/src/Core/Swap.h +70 -39
  114. package/eigen/Eigen/src/Core/Transpose.h +258 -295
  115. package/eigen/Eigen/src/Core/Transpositions.h +270 -333
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
  119. package/eigen/Eigen/src/Core/Visitor.h +464 -308
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
  217. package/eigen/Eigen/src/Core/util/Constants.h +297 -262
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
  226. package/eigen/Eigen/src/Core/util/Macros.h +655 -773
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +970 -748
  229. package/eigen/Eigen/src/Core/util/Meta.h +581 -633
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
  264. package/eigen/Eigen/src/Geometry/Transform.h +858 -936
  265. package/eigen/Eigen/src/Geometry/Translation.h +94 -92
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
  269. package/eigen/Eigen/src/Householder/Householder.h +102 -124
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
  285. package/eigen/Eigen/src/LU/Determinant.h +50 -69
  286. package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/package.json +1 -1
  409. package/eigen/COPYING.APACHE +0 -203
  410. package/eigen/COPYING.BSD +0 -26
  411. package/eigen/COPYING.GPL +0 -674
  412. package/eigen/COPYING.LGPL +0 -502
  413. package/eigen/COPYING.MINPACK +0 -51
  414. package/eigen/COPYING.MPL2 +0 -373
  415. package/eigen/COPYING.README +0 -18
  416. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
  417. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
  418. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
  419. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
  420. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  421. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  422. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  423. package/eigen/Eigen/src/misc/lapack.h +0 -152
  424. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
  425. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
  426. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  427. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
  428. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  429. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
  430. package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
  431. 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
- static Packet4ui p4ui_CONJ_XOR = vec_mergeh((Packet4ui)p4i_ZERO, (Packet4ui)p4f_MZERO);//{ 0x00000000, 0x80000000, 0x00000000, 0x80000000 };
19
- #ifdef __VSX__
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
- static Packet2ul p2ul_CONJ_XOR1 = (Packet2ul) vec_sld((Packet4ui) p2d_MZERO, (Packet4ui) p2l_ZERO, 8);//{ 0x8000000000000000, 0x0000000000000000 };
22
- static Packet2ul p2ul_CONJ_XOR2 = (Packet2ul) vec_sld((Packet4ui) p2l_ZERO, (Packet4ui) p2d_MZERO, 8);//{ 0x8000000000000000, 0x0000000000000000 };
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
- static Packet2ul p2ul_CONJ_XOR1 = (Packet2ul) vec_sld((Packet4ui) p2l_ZERO, (Packet4ui) p2d_MZERO, 8);//{ 0x8000000000000000, 0x0000000000000000 };
25
- static Packet2ul p2ul_CONJ_XOR2 = (Packet2ul) vec_sld((Packet4ui) p2d_MZERO, (Packet4ui) p2l_ZERO, 8);//{ 0x8000000000000000, 0x0000000000000000 };
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
- return Packet2cf(*this) -= b;
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 v;
87
+ Packet4f v;
81
88
  };
82
89
 
83
- template<> struct packet_traits<std::complex<float> > : default_packet_traits
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 = 1,
95
- HasSub = 1,
96
- HasMul = 1,
97
- HasDiv = 1,
100
+ HasAdd = 1,
101
+ HasSub = 1,
102
+ HasMul = 1,
103
+ HasDiv = 1,
98
104
  HasNegate = 1,
99
- HasAbs = 0,
100
- HasAbs2 = 0,
101
- HasMin = 0,
102
- HasMax = 0,
103
- #ifdef __VSX__
104
- HasBlend = 1,
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<> struct unpacket_traits<Packet2cf> { typedef std::complex<float> type; enum {size=2, alignment=Aligned16, vectorizable=true, masked_load_available=false, masked_store_available=false}; typedef Packet2cf half; typedef Packet4f as_real; };
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<> EIGEN_STRONG_INLINE Packet2cf pset1<Packet2cf>(const std::complex<float>& from)
113
- {
133
+ template <>
134
+ EIGEN_STRONG_INLINE Packet2cf pset1<Packet2cf>(const std::complex<float>& from) {
114
135
  Packet2cf res;
115
- if((std::ptrdiff_t(&from) % 16) == 0)
116
- res.v = pload<Packet4f>((const float *)&from);
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 *)&from);
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<> EIGEN_STRONG_INLINE Packet2cf pload<Packet2cf>(const std::complex<float>* from) { return Packet2cf(pload<Packet4f>((const float *) from)); }
124
- template<> EIGEN_STRONG_INLINE Packet2cf ploadu<Packet2cf>(const std::complex<float>* from) { return Packet2cf(ploadu<Packet4f>((const float*) from)); }
125
- template<> EIGEN_STRONG_INLINE Packet2cf ploaddup<Packet2cf>(const std::complex<float>* from) { return pset1<Packet2cf>(*from); }
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<> EIGEN_STRONG_INLINE void pstore <std::complex<float> >(std::complex<float> * to, const Packet2cf& from) { pstore((float*)to, from.v); }
128
- template<> EIGEN_STRONG_INLINE void pstoreu<std::complex<float> >(std::complex<float> * to, const Packet2cf& from) { pstoreu((float*)to, from.v); }
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>* from0, const std::complex<float>* from1)
131
- {
194
+ EIGEN_STRONG_INLINE Packet2cf pload2(const std::complex<float>& from0, const std::complex<float>& from1) {
132
195
  Packet4f res0, res1;
133
- #ifdef __VSX__
134
- __asm__ ("lxsdx %x0,%y1" : "=wa" (res0) : "Z" (*from0));
135
- __asm__ ("lxsdx %x0,%y1" : "=wa" (res1) : "Z" (*from1));
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__ ("xxpermdi %x0, %x1, %x2, 0" : "=wa" (res0) : "wa" (res0), "wa" (res1));
201
+ __asm__("xxpermdi %x0, %x1, %x2, 0" : "=wa"(res0) : "wa"(res0), "wa"(res1));
138
202
  #else
139
- __asm__ ("xxpermdi %x0, %x2, %x1, 0" : "=wa" (res0) : "wa" (res0), "wa" (res1));
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> *>(&res0) = *from0;
143
- *reinterpret_cast<std::complex<float> *>(&res1) = *from1;
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<> EIGEN_DEVICE_FUNC inline Packet2cf pgather<std::complex<float>, Packet2cf>(const std::complex<float>* from, Index stride)
150
- {
151
- EIGEN_ALIGN16 std::complex<float> af[2];
152
- af[0] = from[0*stride];
153
- af[1] = from[1*stride];
154
- return pload<Packet2cf>(af);
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<> EIGEN_DEVICE_FUNC inline void pscatter<std::complex<float>, Packet2cf>(std::complex<float>* to, const Packet2cf& from, Index stride)
157
- {
158
- EIGEN_ALIGN16 std::complex<float> af[2];
159
- pstore<std::complex<float> >((std::complex<float> *) af, from);
160
- to[0*stride] = af[0];
161
- to[1*stride] = af[1];
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<> EIGEN_STRONG_INLINE Packet2cf padd<Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(a.v + b.v); }
165
- template<> EIGEN_STRONG_INLINE Packet2cf psub<Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(a.v - b.v); }
166
- template<> EIGEN_STRONG_INLINE Packet2cf pnegate(const Packet2cf& a) { return Packet2cf(pnegate(a.v)); }
167
- template<> EIGEN_STRONG_INLINE Packet2cf pconj(const Packet2cf& a) { return Packet2cf(pxor<Packet4f>(a.v, reinterpret_cast<Packet4f>(p4ui_CONJ_XOR))); }
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<> EIGEN_STRONG_INLINE Packet2cf pand <Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(pand<Packet4f>(a.v, b.v)); }
170
- template<> EIGEN_STRONG_INLINE Packet2cf por <Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(por<Packet4f>(a.v, b.v)); }
171
- template<> EIGEN_STRONG_INLINE Packet2cf pxor <Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(pxor<Packet4f>(a.v, b.v)); }
172
- template<> EIGEN_STRONG_INLINE Packet2cf pandnot<Packet2cf>(const Packet2cf& a, const Packet2cf& b) { return Packet2cf(pandnot<Packet4f>(a.v, b.v)); }
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<> EIGEN_STRONG_INLINE void prefetch<std::complex<float> >(const std::complex<float> * addr) { EIGEN_PPC_PREFETCH(addr); }
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<> EIGEN_STRONG_INLINE std::complex<float> pfirst<Packet2cf>(const Packet2cf& a)
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 *)&res, a.v);
306
+ pstore((float*)&res, a.v);
180
307
 
181
308
  return res[0];
182
309
  }
183
310
 
184
- template<> EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf& a)
185
- {
311
+ template <>
312
+ EIGEN_STRONG_INLINE Packet2cf preverse(const Packet2cf& a) {
186
313
  Packet4f rev_a;
187
- rev_a = vec_perm(a.v, a.v, p16uc_COMPLEX32_REV2);
314
+ rev_a = vec_sld(a.v, a.v, 8);
188
315
  return Packet2cf(rev_a);
189
316
  }
190
317
 
191
- template<> EIGEN_STRONG_INLINE std::complex<float> predux<Packet2cf>(const Packet2cf& a)
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<> EIGEN_STRONG_INLINE std::complex<float> predux_mul<Packet2cf>(const Packet2cf& a)
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<> EIGEN_STRONG_INLINE Packet2cf pdiv<Packet2cf>(const Packet2cf& a, const Packet2cf& b)
212
- {
213
- // TODO optimize it for AltiVec
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<> EIGEN_STRONG_INLINE Packet2cf pcplxflip<Packet2cf>(const Packet2cf& x)
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<> EIGEN_STRONG_INLINE Packet2cf pcmp_eq(const Packet2cf& a, const Packet2cf& b) {
232
- Packet4f eq = reinterpret_cast<Packet4f>(vec_cmpeq(a.v,b.v));
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 __VSX__
237
- template<> EIGEN_STRONG_INLINE Packet2cf pblend(const Selector<2>& ifPacket, const Packet2cf& thenPacket, const Packet2cf& elsePacket) {
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>(pblend<Packet2d>(ifPacket, reinterpret_cast<Packet2d>(thenPacket.v), reinterpret_cast<Packet2d>(elsePacket.v)));
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<> EIGEN_STRONG_INLINE Packet2cf psqrt<Packet2cf>(const Packet2cf& a)
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 __VSX__
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
- return Packet1cd(*this) -= b;
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<> struct packet_traits<std::complex<double> > : default_packet_traits
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 = 1,
315
- HasSub = 1,
316
- HasMul = 1,
317
- HasDiv = 1,
447
+ HasAdd = 1,
448
+ HasSub = 1,
449
+ HasMul = 1,
450
+ HasDiv = 1,
318
451
  HasNegate = 1,
319
- HasAbs = 0,
320
- HasAbs2 = 0,
321
- HasMin = 0,
322
- HasMax = 0,
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<> struct unpacket_traits<Packet1cd> { typedef std::complex<double> type; enum {size=1, alignment=Aligned16, vectorizable=true, masked_load_available=false, masked_store_available=false}; typedef Packet1cd half; typedef Packet2d as_real; };
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<> EIGEN_STRONG_INLINE Packet1cd pload <Packet1cd>(const std::complex<double>* from) { return Packet1cd(pload<Packet2d>((const double*)from)); }
330
- template<> EIGEN_STRONG_INLINE Packet1cd ploadu<Packet1cd>(const std::complex<double>* from) { return Packet1cd(ploadu<Packet2d>((const double*)from)); }
331
- template<> EIGEN_STRONG_INLINE void pstore <std::complex<double> >(std::complex<double> * to, const Packet1cd& from) { pstore((double*)to, from.v); }
332
- template<> EIGEN_STRONG_INLINE void pstoreu<std::complex<double> >(std::complex<double> * to, const Packet1cd& from) { pstoreu((double*)to, from.v); }
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<> EIGEN_STRONG_INLINE Packet1cd pset1<Packet1cd>(const std::complex<double>& from)
335
- { /* here we really have to use unaligned loads :( */ return ploadu<Packet1cd>(&from); }
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<> EIGEN_DEVICE_FUNC inline Packet1cd pgather<std::complex<double>, Packet1cd>(const std::complex<double>* from, Index)
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<> EIGEN_DEVICE_FUNC inline void pscatter<std::complex<double>, Packet1cd>(std::complex<double>* to, const Packet1cd& from, Index)
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<> EIGEN_STRONG_INLINE Packet1cd padd<Packet1cd>(const Packet1cd& a, const Packet1cd& b) { return Packet1cd(a.v + b.v); }
347
- template<> EIGEN_STRONG_INLINE Packet1cd psub<Packet1cd>(const Packet1cd& a, const Packet1cd& b) { return Packet1cd(a.v - b.v); }
348
- template<> EIGEN_STRONG_INLINE Packet1cd pnegate(const Packet1cd& a) { return Packet1cd(pnegate(Packet2d(a.v))); }
349
- template<> EIGEN_STRONG_INLINE Packet1cd pconj(const Packet1cd& a) { return Packet1cd(pxor(a.v, reinterpret_cast<Packet2d>(p2ul_CONJ_XOR2))); }
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<> EIGEN_STRONG_INLINE Packet1cd pand <Packet1cd>(const Packet1cd& a, const Packet1cd& b) { return Packet1cd(pand(a.v,b.v)); }
352
- template<> EIGEN_STRONG_INLINE Packet1cd por <Packet1cd>(const Packet1cd& a, const Packet1cd& b) { return Packet1cd(por(a.v,b.v)); }
353
- template<> EIGEN_STRONG_INLINE Packet1cd pxor <Packet1cd>(const Packet1cd& a, const Packet1cd& b) { return Packet1cd(pxor(a.v,b.v)); }
354
- template<> EIGEN_STRONG_INLINE Packet1cd pandnot<Packet1cd>(const Packet1cd& a, const Packet1cd& b) { return Packet1cd(pandnot(a.v, b.v)); }
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<> EIGEN_STRONG_INLINE Packet1cd ploaddup<Packet1cd>(const std::complex<double>* from) { return pset1<Packet1cd>(*from); }
575
+ template <>
576
+ EIGEN_STRONG_INLINE Packet1cd ploaddup<Packet1cd>(const std::complex<double>* from) {
577
+ return pset1<Packet1cd>(*from);
578
+ }
357
579
 
358
- template<> EIGEN_STRONG_INLINE void prefetch<std::complex<double> >(const std::complex<double> * addr) { EIGEN_PPC_PREFETCH(addr); }
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<> EIGEN_STRONG_INLINE std::complex<double> pfirst<Packet1cd>(const Packet1cd& a)
361
- {
362
- EIGEN_ALIGN16 std::complex<double> res[2];
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<> EIGEN_STRONG_INLINE Packet1cd preverse(const Packet1cd& a) { return a; }
593
+ template <>
594
+ EIGEN_STRONG_INLINE Packet1cd preverse(const Packet1cd& a) {
595
+ return a;
596
+ }
369
597
 
370
- template<> EIGEN_STRONG_INLINE std::complex<double> predux<Packet1cd>(const Packet1cd& a) { return pfirst(a); }
598
+ template <>
599
+ EIGEN_STRONG_INLINE std::complex<double> predux<Packet1cd>(const Packet1cd& a) {
600
+ return pfirst(a);
601
+ }
371
602
 
372
- template<> EIGEN_STRONG_INLINE std::complex<double> predux_mul<Packet1cd>(const Packet1cd& a) { return pfirst(a); }
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<> EIGEN_STRONG_INLINE Packet1cd pdiv<Packet1cd>(const Packet1cd& a, const Packet1cd& b)
377
- {
378
- // TODO optimize it for AltiVec
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
- Packet2d tmp = vec_perm(kernel.packet[0].v, kernel.packet[1].v, p16uc_TRANSPOSE64_HI);
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<> EIGEN_STRONG_INLINE Packet1cd pcmp_eq(const Packet1cd& a, const Packet1cd& b) {
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 = reinterpret_cast<Packet2d>(vec_sld(reinterpret_cast<Packet4ui>(eq), reinterpret_cast<Packet4ui>(eq), 8));
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<> EIGEN_STRONG_INLINE Packet1cd psqrt<Packet1cd>(const Packet1cd& a)
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
- #endif // __VSX__
413
- } // end namespace internal
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
- } // end namespace Eigen
651
+ } // end namespace Eigen
416
652
 
417
- #endif // EIGEN_COMPLEX32_ALTIVEC_H
653
+ #endif // EIGEN_COMPLEX32_ALTIVEC_H