Mercurial > octave
diff liboctave/array/fCMatrix.cc @ 21120:499b851fbfae
Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
* schur.cc, ov-complex.h, ov-cx-mat.cc, ov-cx-sparse.cc, ov-float.h,
ov-flt-complex.h, ov-flt-cx-mat.cc, ov-flt-re-mat.cc, ov-range.cc,
ov-re-mat.cc, ov-re-sparse.cc, ov-scalar.h, ov-str-mat.cc, ops.h, pt-idx.cc,
Array.cc, CColVector.cc, CMatrix.cc, CRowVector.cc, MSparse.cc, PermMatrix.cc,
Sparse.cc, dColVector.cc, dMatrix.cc, dRowVector.cc, dSparse.cc,
fCColVector.cc, fCMatrix.cc, fCRowVector.cc, fColVector.cc, fMatrix.cc,
fRowVector.cc:
Replace pattern if/err_XXX/else/code with if/err_XXX/ code.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 20 Jan 2016 16:58:59 -0800 |
parents | 358aa7fcbd33 |
children | 228b65504557 |
line wrap: on
line diff
--- a/liboctave/array/fCMatrix.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/fCMatrix.cc Wed Jan 20 16:58:59 2016 -0800 @@ -3720,102 +3720,100 @@ if (a_nc != b_nr) err_nonconformant ("operator *", a_nr, a_nc, b_nr, b_nc); - else + + if (a_nr == 0 || a_nc == 0 || b_nc == 0) + retval = FloatComplexMatrix (a_nr, b_nc, 0.0); + else if (a.data () == b.data () && a_nr == b_nc && tra != trb) { - if (a_nr == 0 || a_nc == 0 || b_nc == 0) - retval = FloatComplexMatrix (a_nr, b_nc, 0.0); - else if (a.data () == b.data () && a_nr == b_nc && tra != trb) + octave_idx_type lda = a.rows (); + + // FIXME: looking at the reference BLAS, it appears that it + // should not be necessary to initialize the output matrix if + // BETA is 0 in the call to CHERK, but ATLAS appears to + // use the result matrix before zeroing the elements. + + retval = FloatComplexMatrix (a_nr, b_nc, 0.0); + FloatComplex *c = retval.fortran_vec (); + + const char ctra = get_blas_trans_arg (tra, cja); + if (cja || cjb) { - octave_idx_type lda = a.rows (); - - // FIXME: looking at the reference BLAS, it appears that it - // should not be necessary to initialize the output matrix if - // BETA is 0 in the call to CHERK, but ATLAS appears to - // use the result matrix before zeroing the elements. - - retval = FloatComplexMatrix (a_nr, b_nc, 0.0); - FloatComplex *c = retval.fortran_vec (); - - const char ctra = get_blas_trans_arg (tra, cja); - if (cja || cjb) - { - F77_XFCN (cherk, CHERK, (F77_CONST_CHAR_ARG2 ("U", 1), - F77_CONST_CHAR_ARG2 (&ctra, 1), - a_nr, a_nc, 1.0, - a.data (), lda, 0.0, c, a_nr - F77_CHAR_ARG_LEN (1) - F77_CHAR_ARG_LEN (1))); - for (octave_idx_type j = 0; j < a_nr; j++) - for (octave_idx_type i = 0; i < j; i++) - retval.xelem (j,i) = std::conj (retval.xelem (i,j)); - } - else - { - F77_XFCN (csyrk, CSYRK, (F77_CONST_CHAR_ARG2 ("U", 1), - F77_CONST_CHAR_ARG2 (&ctra, 1), - a_nr, a_nc, 1.0, - a.data (), lda, 0.0, c, a_nr - F77_CHAR_ARG_LEN (1) - F77_CHAR_ARG_LEN (1))); - for (octave_idx_type j = 0; j < a_nr; j++) - for (octave_idx_type i = 0; i < j; i++) - retval.xelem (j,i) = retval.xelem (i,j); - - } - + F77_XFCN (cherk, CHERK, (F77_CONST_CHAR_ARG2 ("U", 1), + F77_CONST_CHAR_ARG2 (&ctra, 1), + a_nr, a_nc, 1.0, + a.data (), lda, 0.0, c, a_nr + F77_CHAR_ARG_LEN (1) + F77_CHAR_ARG_LEN (1))); + for (octave_idx_type j = 0; j < a_nr; j++) + for (octave_idx_type i = 0; i < j; i++) + retval.xelem (j,i) = std::conj (retval.xelem (i,j)); } else { - octave_idx_type lda = a.rows (); - octave_idx_type tda = a.cols (); - octave_idx_type ldb = b.rows (); - octave_idx_type tdb = b.cols (); - - retval = FloatComplexMatrix (a_nr, b_nc, 0.0); - FloatComplex *c = retval.fortran_vec (); - - if (b_nc == 1 && a_nr == 1) - { - if (cja == cjb) - { - F77_FUNC (xcdotu, XCDOTU) (a_nc, a.data (), 1, b.data (), 1, - *c); - if (cja) *c = std::conj (*c); - } - else if (cja) - F77_FUNC (xcdotc, XCDOTC) (a_nc, a.data (), 1, b.data (), 1, - *c); - else - F77_FUNC (xcdotc, XCDOTC) (a_nc, b.data (), 1, a.data (), 1, - *c); - } - else if (b_nc == 1 && ! cjb) + F77_XFCN (csyrk, CSYRK, (F77_CONST_CHAR_ARG2 ("U", 1), + F77_CONST_CHAR_ARG2 (&ctra, 1), + a_nr, a_nc, 1.0, + a.data (), lda, 0.0, c, a_nr + F77_CHAR_ARG_LEN (1) + F77_CHAR_ARG_LEN (1))); + for (octave_idx_type j = 0; j < a_nr; j++) + for (octave_idx_type i = 0; i < j; i++) + retval.xelem (j,i) = retval.xelem (i,j); + + } + + } + else + { + octave_idx_type lda = a.rows (); + octave_idx_type tda = a.cols (); + octave_idx_type ldb = b.rows (); + octave_idx_type tdb = b.cols (); + + retval = FloatComplexMatrix (a_nr, b_nc, 0.0); + FloatComplex *c = retval.fortran_vec (); + + if (b_nc == 1 && a_nr == 1) + { + if (cja == cjb) { - const char ctra = get_blas_trans_arg (tra, cja); - F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 (&ctra, 1), - lda, tda, 1.0, a.data (), lda, - b.data (), 1, 0.0, c, 1 - F77_CHAR_ARG_LEN (1))); + F77_FUNC (xcdotu, XCDOTU) (a_nc, a.data (), 1, b.data (), 1, + *c); + if (cja) *c = std::conj (*c); } - else if (a_nr == 1 && ! cja && ! cjb) - { - const char crevtrb = get_blas_trans_arg (! trb, cjb); - F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 (&crevtrb, 1), - ldb, tdb, 1.0, b.data (), ldb, - a.data (), 1, 0.0, c, 1 - F77_CHAR_ARG_LEN (1))); - } + else if (cja) + F77_FUNC (xcdotc, XCDOTC) (a_nc, a.data (), 1, b.data (), 1, + *c); else - { - const char ctra = get_blas_trans_arg (tra, cja); - const char ctrb = get_blas_trans_arg (trb, cjb); - F77_XFCN (cgemm, CGEMM, (F77_CONST_CHAR_ARG2 (&ctra, 1), - F77_CONST_CHAR_ARG2 (&ctrb, 1), - a_nr, b_nc, a_nc, 1.0, a.data (), - lda, b.data (), ldb, 0.0, c, a_nr - F77_CHAR_ARG_LEN (1) - F77_CHAR_ARG_LEN (1))); - } + F77_FUNC (xcdotc, XCDOTC) (a_nc, b.data (), 1, a.data (), 1, + *c); + } + else if (b_nc == 1 && ! cjb) + { + const char ctra = get_blas_trans_arg (tra, cja); + F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 (&ctra, 1), + lda, tda, 1.0, a.data (), lda, + b.data (), 1, 0.0, c, 1 + F77_CHAR_ARG_LEN (1))); + } + else if (a_nr == 1 && ! cja && ! cjb) + { + const char crevtrb = get_blas_trans_arg (! trb, cjb); + F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 (&crevtrb, 1), + ldb, tdb, 1.0, b.data (), ldb, + a.data (), 1, 0.0, c, 1 + F77_CHAR_ARG_LEN (1))); + } + else + { + const char ctra = get_blas_trans_arg (tra, cja); + const char ctrb = get_blas_trans_arg (trb, cjb); + F77_XFCN (cgemm, CGEMM, (F77_CONST_CHAR_ARG2 (&ctra, 1), + F77_CONST_CHAR_ARG2 (&ctrb, 1), + a_nr, b_nc, a_nc, 1.0, a.data (), + lda, b.data (), ldb, 0.0, c, a_nr + F77_CHAR_ARG_LEN (1) + F77_CHAR_ARG_LEN (1))); } }