| // This file is part of Eigen, a lightweight C++ template library | |
| // for linear algebra. | |
| // | |
| // Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr> | |
| // Copyright (C) 2012 Chen-Pang He <jdh8@ms63.hinet.net> | |
| // | |
| // This Source Code Form is subject to the terms of the Mozilla | |
| // Public License v. 2.0. If a copy of the MPL was not distributed | |
| // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. | |
| // SPDX-License-Identifier: MPL-2.0 | |
| #define SCALAR double | |
| #define SCALAR_SUFFIX d | |
| #define SCALAR_SUFFIX_UP "D" | |
| #define ISCOMPLEX 0 | |
| #include "level1_impl.h" | |
| #include "level1_real_impl.h" | |
| #include "level2_impl.h" | |
| #include "level2_real_impl.h" | |
| #include "level3_impl.h" | |
| extern "C" double EIGEN_BLAS_FUNC_NAME(sdot)(EIGEN_BLAS_INT* n_in, float* x, EIGEN_BLAS_INT* incx_in, float* y, | |
| EIGEN_BLAS_INT* incy_in) { | |
| const Eigen::Index n = *n_in; | |
| const Eigen::Index incx = *incx_in; | |
| const Eigen::Index incy = *incy_in; | |
| if (n <= 0) return 0; | |
| if (incx == 1 && incy == 1) | |
| return (make_vector(x, n).cast<double>().cwiseProduct(make_vector(y, n).cast<double>())).sum(); | |
| else if (incx >= 0 && incy >= 0) | |
| return (make_vector(x, n, incx).cast<double>().cwiseProduct(make_vector(y, n, incy).cast<double>())).sum(); | |
| else if (incx < 0 && incy >= 0) | |
| return (make_vector(x, n, -incx).reverse().cast<double>().cwiseProduct(make_vector(y, n, incy).cast<double>())) | |
| .sum(); | |
| else if (incx >= 0 && incy < 0) | |
| return (make_vector(x, n, incx).cast<double>().cwiseProduct(make_vector(y, n, -incy).reverse().cast<double>())) | |
| .sum(); | |
| 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(); | |
| else | |
| return 0; | |
| } |