aboutsummaryrefslogtreecommitdiffhomepage
path: root/blas/level3_impl.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2010-03-02 09:37:10 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2010-03-02 09:37:10 +0100
commitabfed301cb474c27fbb76a41cc459602db2b145f (patch)
tree0b3baac7d7d9d85aabb8f20627c7e173fa457fe3 /blas/level3_impl.h
parent3cc9e3f5bb22c3f20efc576b7b24302cc604a64d (diff)
blas: fix SYRK
Diffstat (limited to 'blas/level3_impl.h')
-rw-r--r--blas/level3_impl.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/blas/level3_impl.h b/blas/level3_impl.h
index 76497ec26..32b49b118 100644
--- a/blas/level3_impl.h
+++ b/blas/level3_impl.h
@@ -263,7 +263,7 @@ int EIGEN_BLAS_FUNC(symm)(char *side, char *uplo, int *m, int *n, RealScalar *pa
// c = alpha*a'*a + beta*c for op = 'T'or't','C'or'c'
int EIGEN_BLAS_FUNC(syrk)(char *uplo, char *op, int *n, int *k, RealScalar *palpha, RealScalar *pa, int *lda, RealScalar *pbeta, RealScalar *pc, int *ldc)
{
-// std::cerr << "in syrk " << *uplo << " " << *op << " " << *n << " " << *k << " " << *palpha << " " << *lda << " " << *pbeta << "\n";
+// std::cerr << "in syrk " << *uplo << " " << *op << " " << *n << " " << *k << " " << *palpha << " " << *lda << " " << *pbeta << " " << *ldc << "\n";
typedef void (*functype)(int, int, const Scalar *, int, Scalar *, int, Scalar);
static functype func[8];
@@ -298,10 +298,12 @@ int EIGEN_BLAS_FUNC(syrk)(char *uplo, char *op, int *n, int *k, RealScalar *palp
}
if(beta!=Scalar(1))
- matrix(c, *n, *n, *ldc) *= beta;
+ if(UPLO(*uplo)==UP) matrix(c, *n, *n, *ldc).triangularView<Upper>() *= beta;
+ else matrix(c, *n, *n, *ldc).triangularView<Lower>() *= beta;
func[code](*n, *k, a, *lda, c, *ldc, alpha);
- return 1;
+
+ return 0;
}
// c = alpha*a*b' + alpha*b*a' + beta*c for op = 'N'or'n'