62template <
typename TA,
typename TX,
typename TY>
67 blas::scalar_type<TA, TX, TY> alpha,
68 TX
const *x, int64_t incx,
69 TY
const *y, int64_t incy,
72 typedef blas::scalar_type<TA, TX, TY> scalar_t;
74 #define A(i_, j_) A[ (i_) + (j_)*lda ]
77 const scalar_t zero = 0;
80 blas_error_if( layout != Layout::ColMajor &&
81 layout != Layout::RowMajor );
82 blas_error_if( uplo != Uplo::Lower &&
83 uplo != Uplo::Upper );
84 blas_error_if( n < 0 );
85 blas_error_if( incx == 0 );
86 blas_error_if( incy == 0 );
87 blas_error_if( lda < n );
90 if (n == 0 || alpha == zero)
94 if (layout == Layout::RowMajor) {
95 uplo = (uplo == Uplo::Lower ? Uplo::Upper : Uplo::Lower);
98 int64_t kx = (incx > 0 ? 0 : (-n + 1)*incx);
99 int64_t ky = (incy > 0 ? 0 : (-n + 1)*incy);
100 if (uplo == Uplo::Upper) {
101 if (incx == 1 && incy == 1) {
103 for (int64_t j = 0; j < n; ++j) {
105 scalar_t tmp1 = alpha * y[j];
106 scalar_t tmp2 = alpha * x[j];
107 for (int64_t i = 0; i <= j; ++i) {
108 A(i, j) += x[i]*tmp1 + y[i]*tmp2;
116 for (int64_t j = 0; j < n; ++j) {
117 scalar_t tmp1 = alpha * y[jy];
118 scalar_t tmp2 = alpha * x[jx];
121 for (int64_t i = 0; i <= j; ++i) {
122 A(i, j) += x[ix]*tmp1 + y[iy]*tmp2;
133 if (incx == 1 && incy == 1) {
135 for (int64_t j = 0; j < n; ++j) {
136 scalar_t tmp1 = alpha * y[j];
137 scalar_t tmp2 = alpha * x[j];
138 for (int64_t i = j; i < n; ++i) {
139 A(i, j) += x[i]*tmp1 + y[i]*tmp2;
147 for (int64_t j = 0; j < n; ++j) {
148 scalar_t tmp1 = alpha * y[jy];
149 scalar_t tmp2 = alpha * x[jx];
152 for (int64_t i = j; i < n; ++i) {
153 A(i, j) += x[ix]*tmp1 + y[iy]*tmp2;
void syr2(blas::Layout layout, blas::Uplo uplo, int64_t n, blas::scalar_type< TA, TX, TY > alpha, TX const *x, int64_t incx, TY const *y, int64_t incy, TA *A, int64_t lda)
Symmetric matrix rank-2 update:
Definition syr2.hh:63