xref: /aosp_15_r20/external/eigen/blas/double.cpp (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li // This file is part of Eigen, a lightweight C++ template library
2*bf2c3715SXin Li // for linear algebra.
3*bf2c3715SXin Li //
4*bf2c3715SXin Li // Copyright (C) 2009 Gael Guennebaud <[email protected]>
5*bf2c3715SXin Li // Copyright (C) 2012 Chen-Pang He <[email protected]>
6*bf2c3715SXin Li //
7*bf2c3715SXin Li // This Source Code Form is subject to the terms of the Mozilla
8*bf2c3715SXin Li // Public License v. 2.0. If a copy of the MPL was not distributed
9*bf2c3715SXin Li // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10*bf2c3715SXin Li 
11*bf2c3715SXin Li #define SCALAR        double
12*bf2c3715SXin Li #define SCALAR_SUFFIX d
13*bf2c3715SXin Li #define SCALAR_SUFFIX_UP "D"
14*bf2c3715SXin Li #define ISCOMPLEX     0
15*bf2c3715SXin Li 
16*bf2c3715SXin Li #include "level1_impl.h"
17*bf2c3715SXin Li #include "level1_real_impl.h"
18*bf2c3715SXin Li #include "level2_impl.h"
19*bf2c3715SXin Li #include "level2_real_impl.h"
20*bf2c3715SXin Li #include "level3_impl.h"
21*bf2c3715SXin Li 
EIGEN_BLAS_FUNC(sdot)22*bf2c3715SXin Li double EIGEN_BLAS_FUNC(sdot)(int* n, float* x, int* incx, float* y, int* incy)
23*bf2c3715SXin Li {
24*bf2c3715SXin Li   if(*n<=0) return 0;
25*bf2c3715SXin Li 
26*bf2c3715SXin Li   if(*incx==1 && *incy==1)    return (make_vector(x,*n).cast<double>().cwiseProduct(make_vector(y,*n).cast<double>())).sum();
27*bf2c3715SXin Li   else if(*incx>0 && *incy>0) return (make_vector(x,*n,*incx).cast<double>().cwiseProduct(make_vector(y,*n,*incy).cast<double>())).sum();
28*bf2c3715SXin Li   else if(*incx<0 && *incy>0) return (make_vector(x,*n,-*incx).reverse().cast<double>().cwiseProduct(make_vector(y,*n,*incy).cast<double>())).sum();
29*bf2c3715SXin Li   else if(*incx>0 && *incy<0) return (make_vector(x,*n,*incx).cast<double>().cwiseProduct(make_vector(y,*n,-*incy).reverse().cast<double>())).sum();
30*bf2c3715SXin Li   else if(*incx<0 && *incy<0) return (make_vector(x,*n,-*incx).reverse().cast<double>().cwiseProduct(make_vector(y,*n,-*incy).reverse().cast<double>())).sum();
31*bf2c3715SXin Li   else return 0;
32*bf2c3715SXin Li }
33