# HG changeset patch # User Rik # Date 1453337939 28800 # Node ID 499b851fbfae0a9aab199f36ca99fa187be8bc57 # Parent 90cd0f9442d5fb1cc8e1b1543154f884f8ed24ba 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. diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/corefcn/schur.cc --- a/libinterp/corefcn/schur.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/corefcn/schur.cc Wed Jan 20 16:58:59 2016 -0800 @@ -169,11 +169,12 @@ if (nr != nc) err_square_matrix_required ("schur", "A"); + if (! arg.is_numeric_type ()) + err_wrong_type_arg ("schur", arg); + octave_value_list retval; - if (! arg.is_numeric_type ()) - err_wrong_type_arg ("schur", arg); - else if (arg.is_single_type ()) + if (arg.is_single_type ()) { if (! force_complex && arg.is_real_type ()) { @@ -291,37 +292,31 @@ if (args.length () != 2 || nargout > 2) print_usage (); - octave_value_list retval; - if (! args(0).is_numeric_type ()) err_wrong_type_arg ("rsf2csf", args(0)); - else if (! args(1).is_numeric_type ()) + if (! args(1).is_numeric_type ()) err_wrong_type_arg ("rsf2csf", args(1)); - else if (args(0).is_complex_type () || args(1).is_complex_type ()) + if (args(0).is_complex_type () || args(1).is_complex_type ()) error ("rsf2csf: UR and TR must be real matrices"); + + if (args(0).is_single_type () || args(1).is_single_type ()) + { + FloatMatrix u = args(0).float_matrix_value (); + FloatMatrix t = args(1).float_matrix_value (); + + FloatComplexSCHUR cs (FloatSCHUR (t, u)); + + return ovl (cs.unitary_matrix (), cs.schur_matrix ()); + } else { - if (args(0).is_single_type () || args(1).is_single_type ()) - { - FloatMatrix u = args(0).float_matrix_value (); - FloatMatrix t = args(1).float_matrix_value (); - - FloatComplexSCHUR cs (FloatSCHUR (t, u)); + Matrix u = args(0).matrix_value (); + Matrix t = args(1).matrix_value (); - retval = ovl (cs.unitary_matrix (), cs.schur_matrix ()); - } - else - { - Matrix u = args(0).matrix_value (); - Matrix t = args(1).matrix_value (); + ComplexSCHUR cs (SCHUR (t, u)); - ComplexSCHUR cs (SCHUR (t, u)); - - retval = ovl (cs.unitary_matrix (), cs.schur_matrix ()); - } + return ovl (cs.unitary_matrix (), cs.schur_matrix ()); } - - return retval; } /* diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-complex.h --- a/libinterp/octave-value/ov-complex.h Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-complex.h Wed Jan 20 16:58:59 2016 -0800 @@ -140,7 +140,7 @@ { if (xisnan (scalar)) err_nan_to_logical_conversion (); - else if (warn && scalar != 0.0 && scalar != 1.0) + if (warn && scalar != 0.0 && scalar != 1.0) warn_logical_conversion (); return scalar != 0.0; @@ -150,7 +150,7 @@ { if (xisnan (scalar)) err_nan_to_logical_conversion (); - else if (warn && scalar != 0.0 && scalar != 1.0) + if (warn && scalar != 0.0 && scalar != 1.0) warn_logical_conversion (); return boolNDArray (dim_vector (1, 1), scalar != 0.0); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-cx-mat.cc --- a/libinterp/octave-value/ov-cx-mat.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-cx-mat.cc Wed Jan 20 16:58:59 2016 -0800 @@ -234,8 +234,8 @@ { if (matrix.any_element_is_nan ()) err_nan_to_logical_conversion (); - else if (warn && (! matrix.all_elements_are_real () - || real (matrix).any_element_not_one_or_zero ())) + if (warn && (! matrix.all_elements_are_real () + || real (matrix).any_element_not_one_or_zero ())) warn_logical_conversion (); return mx_el_ne (matrix, Complex (0.0)); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-cx-sparse.cc --- a/libinterp/octave-value/ov-cx-sparse.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-cx-sparse.cc Wed Jan 20 16:58:59 2016 -0800 @@ -214,8 +214,8 @@ { if (matrix.any_element_is_nan ()) err_nan_to_logical_conversion (); - else if (warn && (! matrix.all_elements_are_real () - || real (matrix).any_element_not_one_or_zero ())) + if (warn && (! matrix.all_elements_are_real () + || real (matrix).any_element_not_one_or_zero ())) warn_logical_conversion (); return mx_el_ne (matrix, Complex (0.0)); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-float.h --- a/libinterp/octave-value/ov-float.h Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-float.h Wed Jan 20 16:58:59 2016 -0800 @@ -198,7 +198,7 @@ { if (xisnan (scalar)) err_nan_to_logical_conversion (); - else if (warn && scalar != 0 && scalar != 1) + if (warn && scalar != 0 && scalar != 1) warn_logical_conversion (); return scalar; @@ -208,7 +208,7 @@ { if (xisnan (scalar)) err_nan_to_logical_conversion (); - else if (warn && scalar != 0 && scalar != 1) + if (warn && scalar != 0 && scalar != 1) warn_logical_conversion (); return boolNDArray (dim_vector (1, 1), scalar); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-flt-complex.h --- a/libinterp/octave-value/ov-flt-complex.h Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-flt-complex.h Wed Jan 20 16:58:59 2016 -0800 @@ -136,7 +136,7 @@ { if (xisnan (scalar)) err_nan_to_logical_conversion (); - else if (warn && scalar != 0.0f && scalar != 1.0f) + if (warn && scalar != 0.0f && scalar != 1.0f) warn_logical_conversion (); return scalar != 0.0f; @@ -146,7 +146,7 @@ { if (xisnan (scalar)) err_nan_to_logical_conversion (); - else if (warn && scalar != 0.0f && scalar != 1.0f) + if (warn && scalar != 0.0f && scalar != 1.0f) warn_logical_conversion (); return boolNDArray (dim_vector (1, 1), scalar != 1.0f); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-flt-cx-mat.cc --- a/libinterp/octave-value/ov-flt-cx-mat.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-flt-cx-mat.cc Wed Jan 20 16:58:59 2016 -0800 @@ -208,8 +208,8 @@ { if (matrix.any_element_is_nan ()) err_nan_to_logical_conversion (); - else if (warn && (! matrix.all_elements_are_real () - || real (matrix).any_element_not_one_or_zero ())) + if (warn && (! matrix.all_elements_are_real () + || real (matrix).any_element_not_one_or_zero ())) warn_logical_conversion (); return mx_el_ne (matrix, FloatComplex (0.0)); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-flt-re-mat.cc --- a/libinterp/octave-value/ov-flt-re-mat.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-flt-re-mat.cc Wed Jan 20 16:58:59 2016 -0800 @@ -205,7 +205,7 @@ { if (matrix.any_element_is_nan ()) err_nan_to_logical_conversion (); - else if (warn && matrix.any_element_not_one_or_zero ()) + if (warn && matrix.any_element_not_one_or_zero ()) warn_logical_conversion (); return boolNDArray (matrix); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-range.cc --- a/libinterp/octave-value/ov-range.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-range.cc Wed Jan 20 16:58:59 2016 -0800 @@ -328,7 +328,7 @@ if (m.any_element_is_nan ()) err_nan_to_logical_conversion (); - else if (warn && m.any_element_not_one_or_zero ()) + if (warn && m.any_element_not_one_or_zero ()) warn_logical_conversion (); return boolNDArray (m); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-re-mat.cc --- a/libinterp/octave-value/ov-re-mat.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-re-mat.cc Wed Jan 20 16:58:59 2016 -0800 @@ -214,7 +214,7 @@ { if (matrix.any_element_is_nan ()) err_nan_to_logical_conversion (); - else if (warn && matrix.any_element_not_one_or_zero ()) + if (warn && matrix.any_element_not_one_or_zero ()) warn_logical_conversion (); return boolNDArray (matrix); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-re-sparse.cc --- a/libinterp/octave-value/ov-re-sparse.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-re-sparse.cc Wed Jan 20 16:58:59 2016 -0800 @@ -142,7 +142,7 @@ if (m.any_element_is_nan ()) err_nan_to_logical_conversion (); - else if (warn && m.any_element_not_one_or_zero ()) + if (warn && m.any_element_not_one_or_zero ()) warn_logical_conversion (); return boolNDArray (m); @@ -185,7 +185,7 @@ { if (matrix.any_element_is_nan ()) err_nan_to_logical_conversion (); - else if (warn && matrix.any_element_not_one_or_zero ()) + if (warn && matrix.any_element_not_one_or_zero ()) warn_logical_conversion (); return mx_el_ne (matrix, 0.0); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-scalar.h --- a/libinterp/octave-value/ov-scalar.h Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-scalar.h Wed Jan 20 16:58:59 2016 -0800 @@ -197,7 +197,7 @@ { if (xisnan (scalar)) err_nan_to_logical_conversion (); - else if (warn && scalar != 0 && scalar != 1) + if (warn && scalar != 0 && scalar != 1) warn_logical_conversion (); return scalar; @@ -207,7 +207,7 @@ { if (xisnan (scalar)) err_nan_to_logical_conversion (); - else if (warn && scalar != 0 && scalar != 1) + if (warn && scalar != 0 && scalar != 1) warn_logical_conversion (); return boolNDArray (dim_vector (1, 1), scalar); diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/octave-value/ov-str-mat.cc --- a/libinterp/octave-value/ov-str-mat.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/octave-value/ov-str-mat.cc Wed Jan 20 16:58:59 2016 -0800 @@ -165,14 +165,12 @@ \ if (! force_string_conv) \ err_invalid_conversion ("string", TNAME); \ - else \ - { \ - warning_with_id ("Octave:str-to-num", \ - "implicit conversion from %s to %s", \ - "string", TNAME); \ \ - retval = octave_char_matrix::FCN (); \ - } \ + warning_with_id ("Octave:str-to-num", \ + "implicit conversion from %s to %s", \ + "string", TNAME); \ + \ + retval = octave_char_matrix::FCN (); \ \ return retval diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/operators/ops.h --- a/libinterp/operators/ops.h Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/operators/ops.h Wed Jan 20 16:58:59 2016 -0800 @@ -302,9 +302,9 @@ CAST_BINOP_ARGS (const CONCAT2(octave_, t1)&, const CONCAT2(octave_, t2)&); \ if (xisnan (v1.CONCAT2(t1, _value) ()) || xisnan (v2.CONCAT2(t2, _value) ())) \ err_nan_to_logical_conversion (); \ - else \ - return octave_value \ - (v1.CONCAT2(t1, _value) () op v2.CONCAT2(t2, _value) ()); \ + \ + return octave_value \ + (v1.CONCAT2(t1, _value) () op v2.CONCAT2(t2, _value) ()); \ } #define DEFNDBINOP_OP(name, t1, t2, e1, e2, op) \ diff -r 90cd0f9442d5 -r 499b851fbfae libinterp/parse-tree/pt-idx.cc --- a/libinterp/parse-tree/pt-idx.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/libinterp/parse-tree/pt-idx.cc Wed Jan 20 16:58:59 2016 -0800 @@ -491,7 +491,8 @@ { if (retval.numel () != 1) err_indexed_cs_list (); - else if (tmpi < i) + + if (tmpi < i) { try { diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/Array.cc --- a/liboctave/array/Array.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/Array.cc Wed Jan 20 16:58:59 2016 -0800 @@ -933,52 +933,50 @@ if (invalid) err_invalid_resize (); - else + + octave_idx_type nx = numel (); + if (n == nx - 1 && n > 0) { - octave_idx_type nx = numel (); - if (n == nx - 1 && n > 0) + // Stack "pop" operation. + if (rep->count == 1) + slice_data[slice_len-1] = T (); + slice_len--; + dimensions = dv; + } + else if (n == nx + 1 && nx > 0) + { + // Stack "push" operation. + if (rep->count == 1 + && slice_data + slice_len < rep->data + rep->len) { - // Stack "pop" operation. - if (rep->count == 1) - slice_data[slice_len-1] = T (); - slice_len--; + slice_data[slice_len++] = rfv; dimensions = dv; } - else if (n == nx + 1 && nx > 0) + else { - // Stack "push" operation. - if (rep->count == 1 - && slice_data + slice_len < rep->data + rep->len) - { - slice_data[slice_len++] = rfv; - dimensions = dv; - } - else - { - static const octave_idx_type max_stack_chunk = 1024; - octave_idx_type nn = n + std::min (nx, max_stack_chunk); - Array tmp (Array (dim_vector (nn, 1)), dv, 0, n); - T *dest = tmp.fortran_vec (); - - std::copy (data (), data () + nx, dest); - dest[nx] = rfv; - - *this = tmp; - } - } - else if (n != nx) - { - Array tmp = Array (dv); + static const octave_idx_type max_stack_chunk = 1024; + octave_idx_type nn = n + std::min (nx, max_stack_chunk); + Array tmp (Array (dim_vector (nn, 1)), dv, 0, n); T *dest = tmp.fortran_vec (); - octave_idx_type n0 = std::min (n, nx); - octave_idx_type n1 = n - n0; - std::copy (data (), data () + n0, dest); - std::fill_n (dest + n0, n1, rfv); + std::copy (data (), data () + nx, dest); + dest[nx] = rfv; *this = tmp; } } + else if (n != nx) + { + Array tmp = Array (dv); + T *dest = tmp.fortran_vec (); + + octave_idx_type n0 = std::min (n, nx); + octave_idx_type n1 = n - n0; + std::copy (data (), data () + n0, dest); + std::fill_n (dest + n0, n1, rfv); + + *this = tmp; + } } template diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/CColVector.cc --- a/liboctave/array/CColVector.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/CColVector.cc Wed Jan 20 16:58:59 2016 -0800 @@ -341,26 +341,24 @@ if (nc != a_len) err_nonconformant ("operator *", nr, nc, a_len, 1); - else + + retval.clear (nr); + + if (nr != 0) { - retval.clear (nr); - - if (nr != 0) + if (nc == 0) + retval.fill (0.0); + else { - if (nc == 0) - retval.fill (0.0); - else - { - Complex *y = retval.fortran_vec (); + Complex *y = retval.fortran_vec (); - F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), - nr, nc, 1.0, m.data (), nr, - a.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), + nr, nc, 1.0, m.data (), nr, + a.data (), 1, 0.0, y, 1 + F77_CHAR_ARG_LEN (1))); } + } - } return retval; } diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/CMatrix.cc --- a/liboctave/array/CMatrix.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/CMatrix.cc Wed Jan 20 16:58:59 2016 -0800 @@ -3717,102 +3717,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 = ComplexMatrix (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 = ComplexMatrix (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 ZHERK, but ATLAS appears to + // use the result matrix before zeroing the elements. + + retval = ComplexMatrix (a_nr, b_nc, 0.0); + Complex *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 ZHERK, but ATLAS appears to - // use the result matrix before zeroing the elements. - - retval = ComplexMatrix (a_nr, b_nc, 0.0); - Complex *c = retval.fortran_vec (); - - const char ctra = get_blas_trans_arg (tra, cja); - if (cja || cjb) - { - F77_XFCN (zherk, ZHERK, (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 (zsyrk, ZSYRK, (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 (zherk, ZHERK, (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 = ComplexMatrix (a_nr, b_nc, 0.0); - Complex *c = retval.fortran_vec (); - - if (b_nc == 1 && a_nr == 1) - { - if (cja == cjb) - { - F77_FUNC (xzdotu, XZDOTU) (a_nc, a.data (), 1, b.data (), 1, - *c); - if (cja) *c = std::conj (*c); - } - else if (cja) - F77_FUNC (xzdotc, XZDOTC) (a_nc, a.data (), 1, b.data (), 1, - *c); - else - F77_FUNC (xzdotc, XZDOTC) (a_nc, b.data (), 1, a.data (), 1, - *c); - } - else if (b_nc == 1 && ! cjb) + F77_XFCN (zsyrk, ZSYRK, (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 = ComplexMatrix (a_nr, b_nc, 0.0); + Complex *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 (zgemv, ZGEMV, (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 (xzdotu, XZDOTU) (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 (zgemv, ZGEMV, (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 (xzdotc, XZDOTC) (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 (zgemm, ZGEMM, (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 (xzdotc, XZDOTC) (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 (zgemv, ZGEMV, (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 (zgemv, ZGEMV, (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 (zgemm, ZGEMM, (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))); } } diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/CRowVector.cc --- a/liboctave/array/CRowVector.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/CRowVector.cc Wed Jan 20 16:58:59 2016 -0800 @@ -326,24 +326,22 @@ if (a_nr != len) err_nonconformant ("operator *", 1, len, a_nr, a_nc); + + if (len == 0) + retval.resize (a_nc, 0.0); else { - if (len == 0) - retval.resize (a_nc, 0.0); - else - { - // Transpose A to form A'*x == (x'*A)' + // Transpose A to form A'*x == (x'*A)' - octave_idx_type ld = a_nr; + octave_idx_type ld = a_nr; - retval.resize (a_nc); - Complex *y = retval.fortran_vec (); + retval.resize (a_nc); + Complex *y = retval.fortran_vec (); - F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 ("T", 1), - a_nr, a_nc, 1.0, a.data (), - ld, v.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (zgemv, ZGEMV, (F77_CONST_CHAR_ARG2 ("T", 1), + a_nr, a_nc, 1.0, a.data (), + ld, v.data (), 1, 0.0, y, 1 + F77_CHAR_ARG_LEN (1))); } return retval; @@ -451,7 +449,7 @@ if (len != a_len) err_nonconformant ("operator *", len, a_len); - else if (len != 0) + if (len != 0) F77_FUNC (xzdotu, XZDOTU) (len, v.data (), 1, a.data (), 1, retval); return retval; diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/MSparse.cc --- a/liboctave/array/MSparse.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/MSparse.cc Wed Jan 20 16:58:59 2016 -0800 @@ -39,60 +39,58 @@ if (a_nr != b_nr || a_nc != b_nc) err_nonconformant (op_name , a_nr, a_nc, b_nr, b_nc); - else - { - r = MSparse (a_nr, a_nc, (a.nnz () + b.nnz ())); + + r = MSparse (a_nr, a_nc, (a.nnz () + b.nnz ())); - octave_idx_type jx = 0; - for (octave_idx_type i = 0 ; i < a_nc ; i++) - { - octave_idx_type ja = a.cidx (i); - octave_idx_type ja_max = a.cidx (i+1); - bool ja_lt_max= ja < ja_max; + octave_idx_type jx = 0; + for (octave_idx_type i = 0 ; i < a_nc ; i++) + { + octave_idx_type ja = a.cidx (i); + octave_idx_type ja_max = a.cidx (i+1); + bool ja_lt_max= ja < ja_max; + + octave_idx_type jb = b.cidx (i); + octave_idx_type jb_max = b.cidx (i+1); + bool jb_lt_max = jb < jb_max; - octave_idx_type jb = b.cidx (i); - octave_idx_type jb_max = b.cidx (i+1); - bool jb_lt_max = jb < jb_max; - - while (ja_lt_max || jb_lt_max) + while (ja_lt_max || jb_lt_max) + { + octave_quit (); + if ((! jb_lt_max) || (ja_lt_max && (a.ridx (ja) < b.ridx (jb)))) + { + r.ridx (jx) = a.ridx (ja); + r.data (jx) = op (a.data (ja), 0.); + jx++; + ja++; + ja_lt_max= ja < ja_max; + } + else if ((! ja_lt_max) + || (jb_lt_max && (b.ridx (jb) < a.ridx (ja)))) { - octave_quit (); - if ((! jb_lt_max) || (ja_lt_max && (a.ridx (ja) < b.ridx (jb)))) + r.ridx (jx) = b.ridx (jb); + r.data (jx) = op (0., b.data (jb)); + jx++; + jb++; + jb_lt_max= jb < jb_max; + } + else + { + if (op (a.data (ja), b.data (jb)) != 0.) { + r.data (jx) = op (a.data (ja), b.data (jb)); r.ridx (jx) = a.ridx (ja); - r.data (jx) = op (a.data (ja), 0.); jx++; - ja++; - ja_lt_max= ja < ja_max; } - else if ((! ja_lt_max) - || (jb_lt_max && (b.ridx (jb) < a.ridx (ja)))) - { - r.ridx (jx) = b.ridx (jb); - r.data (jx) = op (0., b.data (jb)); - jx++; - jb++; - jb_lt_max= jb < jb_max; - } - else - { - if (op (a.data (ja), b.data (jb)) != 0.) - { - r.data (jx) = op (a.data (ja), b.data (jb)); - r.ridx (jx) = a.ridx (ja); - jx++; - } - ja++; - ja_lt_max= ja < ja_max; - jb++; - jb_lt_max= jb < jb_max; - } + ja++; + ja_lt_max= ja < ja_max; + jb++; + jb_lt_max= jb < jb_max; } - r.cidx (i+1) = jx; } + r.cidx (i+1) = jx; + } - a = r.maybe_compress (); - } + a = r.maybe_compress (); return a; } diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/PermMatrix.cc --- a/liboctave/array/PermMatrix.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/PermMatrix.cc Wed Jan 20 16:58:59 2016 -0800 @@ -236,8 +236,8 @@ if (n != b.rows ()) err_nonconformant ("operator *", n, n, b.rows (), b.rows ()); - else - r = PermMatrix (ia.index (idx_vector (ib)), true, false); + + r = PermMatrix (ia.index (idx_vector (ib)), true, false); return r; } diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/Sparse.cc --- a/liboctave/array/Sparse.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/Sparse.cc Wed Jan 20 16:58:59 2016 -0800 @@ -1165,7 +1165,8 @@ if (idx.extent (nel) > nel) err_del_index_out_of_range (true, idx.extent (nel), nel); - else if (nc == 1) + + if (nc == 1) { // Sparse column vector. const Sparse tmp = *this; // constant copy to prevent COW. diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/dColVector.cc --- a/liboctave/array/dColVector.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/dColVector.cc Wed Jan 20 16:58:59 2016 -0800 @@ -206,23 +206,21 @@ if (nc != a_len) err_nonconformant ("operator *", nr, nc, a_len, 1); - else + + retval.clear (nr); + + if (nr != 0) { - retval.clear (nr); - - if (nr != 0) + if (nc == 0) + retval.fill (0.0); + else { - if (nc == 0) - retval.fill (0.0); - else - { - double *y = retval.fortran_vec (); + double *y = retval.fortran_vec (); - F77_XFCN (dgemv, DGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), - nr, nc, 1.0, m.data (), nr, - a.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (dgemv, DGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), + nr, nc, 1.0, m.data (), nr, + a.data (), 1, 0.0, y, 1 + F77_CHAR_ARG_LEN (1))); } } @@ -243,20 +241,18 @@ if (nc != a_len) err_nonconformant ("operator *", nr, nc, a_len, 1); + + if (nr == 0 || nc == 0) + retval.resize (nr, 0.0); else { - if (nr == 0 || nc == 0) - retval.resize (nr, 0.0); - else - { - retval.resize (nr); + retval.resize (nr); - for (octave_idx_type i = 0; i < a_len; i++) - retval.elem (i) = a.elem (i) * m.elem (i, i); + for (octave_idx_type i = 0; i < a_len; i++) + retval.elem (i) = a.elem (i) * m.elem (i, i); - for (octave_idx_type i = a_len; i < nr; i++) - retval.elem (i) = 0.0; - } + for (octave_idx_type i = a_len; i < nr; i++) + retval.elem (i) = 0.0; } return retval; diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/dMatrix.cc --- a/liboctave/array/dMatrix.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/dMatrix.cc Wed Jan 20 16:58:59 2016 -0800 @@ -3108,71 +3108,69 @@ if (a_nc != b_nr) err_nonconformant ("operator *", a_nr, a_nc, b_nr, b_nc); + + if (a_nr == 0 || a_nc == 0 || b_nc == 0) + retval = Matrix (a_nr, b_nc, 0.0); + else if (a.data () == b.data () && a_nr == b_nc && tra != trb) + { + octave_idx_type lda = a.rows (); + + retval = Matrix (a_nr, b_nc); + double *c = retval.fortran_vec (); + + const char ctra = get_blas_trans_arg (tra); + F77_XFCN (dsyrk, DSYRK, (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 (int j = 0; j < a_nr; j++) + for (int i = 0; i < j; i++) + retval.xelem (j,i) = retval.xelem (i,j); + + } else { - if (a_nr == 0 || a_nc == 0 || b_nc == 0) - retval = Matrix (a_nr, b_nc, 0.0); - else if (a.data () == b.data () && a_nr == b_nc && tra != trb) + 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 = Matrix (a_nr, b_nc); + double *c = retval.fortran_vec (); + + if (b_nc == 1) { - octave_idx_type lda = a.rows (); - - retval = Matrix (a_nr, b_nc); - double *c = retval.fortran_vec (); - - const char ctra = get_blas_trans_arg (tra); - F77_XFCN (dsyrk, DSYRK, (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) + if (a_nr == 1) + F77_FUNC (xddot, XDDOT) (a_nc, a.data (), 1, b.data (), 1, *c); + else + { + const char ctra = get_blas_trans_arg (tra); + F77_XFCN (dgemv, DGEMV, (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) + { + const char crevtrb = get_blas_trans_arg (! trb); + F77_XFCN (dgemv, DGEMV, (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))); - for (int j = 0; j < a_nr; j++) - for (int 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 = Matrix (a_nr, b_nc); - double *c = retval.fortran_vec (); - - if (b_nc == 1) - { - if (a_nr == 1) - F77_FUNC (xddot, XDDOT) (a_nc, a.data (), 1, b.data (), 1, *c); - else - { - const char ctra = get_blas_trans_arg (tra); - F77_XFCN (dgemv, DGEMV, (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) - { - const char crevtrb = get_blas_trans_arg (! trb); - F77_XFCN (dgemv, DGEMV, (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); - const char ctrb = get_blas_trans_arg (trb); - F77_XFCN (dgemm, DGEMM, (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))); - } + const char ctra = get_blas_trans_arg (tra); + const char ctrb = get_blas_trans_arg (trb); + F77_XFCN (dgemm, DGEMM, (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))); } } diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/dRowVector.cc --- a/liboctave/array/dRowVector.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/dRowVector.cc Wed Jan 20 16:58:59 2016 -0800 @@ -201,24 +201,22 @@ if (a_nr != len) err_nonconformant ("operator *", 1, len, a_nr, a_nc); + + if (len == 0) + retval.resize (a_nc, 0.0); else { - if (len == 0) - retval.resize (a_nc, 0.0); - else - { - // Transpose A to form A'*x == (x'*A)' + // Transpose A to form A'*x == (x'*A)' - octave_idx_type ld = a_nr; + octave_idx_type ld = a_nr; - retval.resize (a_nc); - double *y = retval.fortran_vec (); + retval.resize (a_nc); + double *y = retval.fortran_vec (); - F77_XFCN (dgemv, DGEMV, (F77_CONST_CHAR_ARG2 ("T", 1), - a_nr, a_nc, 1.0, a.data (), - ld, v.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (dgemv, DGEMV, (F77_CONST_CHAR_ARG2 ("T", 1), + a_nr, a_nc, 1.0, a.data (), + ld, v.data (), 1, 0.0, y, 1 + F77_CHAR_ARG_LEN (1))); } return retval; @@ -324,7 +322,8 @@ if (len != a_len) err_nonconformant ("operator *", len, a_len); - else if (len != 0) + + if (len != 0) F77_FUNC (xddot, XDDOT) (len, v.data (), 1, a.data (), 1, retval); return retval; diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/dSparse.cc --- a/liboctave/array/dSparse.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/dSparse.cc Wed Jan 20 16:58:59 2016 -0800 @@ -763,60 +763,58 @@ if (x_nr != y_nr || x_nc != y_nc) err_nonconformant ("atan2", x_nr, x_nc, y_nr, y_nc); - else + + r = SparseMatrix (x_nr, x_nc, (x.nnz () + y.nnz ())); + + octave_idx_type jx = 0; + r.cidx (0) = 0; + for (octave_idx_type i = 0 ; i < x_nc ; i++) { - r = SparseMatrix (x_nr, x_nc, (x.nnz () + y.nnz ())); - - octave_idx_type jx = 0; - r.cidx (0) = 0; - for (octave_idx_type i = 0 ; i < x_nc ; i++) - { - octave_idx_type ja = x.cidx (i); - octave_idx_type ja_max = x.cidx (i+1); - bool ja_lt_max= ja < ja_max; - - octave_idx_type jb = y.cidx (i); - octave_idx_type jb_max = y.cidx (i+1); - bool jb_lt_max = jb < jb_max; - - while (ja_lt_max || jb_lt_max) - { - octave_quit (); - if ((! jb_lt_max) - || (ja_lt_max && (x.ridx (ja) < y.ridx (jb)))) + octave_idx_type ja = x.cidx (i); + octave_idx_type ja_max = x.cidx (i+1); + bool ja_lt_max= ja < ja_max; + + octave_idx_type jb = y.cidx (i); + octave_idx_type jb_max = y.cidx (i+1); + bool jb_lt_max = jb < jb_max; + + while (ja_lt_max || jb_lt_max) + { + octave_quit (); + if ((! jb_lt_max) + || (ja_lt_max && (x.ridx (ja) < y.ridx (jb)))) + { + r.ridx (jx) = x.ridx (ja); + r.data (jx) = atan2 (x.data (ja), 0.); + jx++; + ja++; + ja_lt_max= ja < ja_max; + } + else if ((! ja_lt_max) + || (jb_lt_max && (y.ridx (jb) < x.ridx (ja)))) + { + jb++; + jb_lt_max= jb < jb_max; + } + else + { + double tmp = atan2 (x.data (ja), y.data (jb)); + if (tmp != 0.) { + r.data (jx) = tmp; r.ridx (jx) = x.ridx (ja); - r.data (jx) = atan2 (x.data (ja), 0.); jx++; - ja++; - ja_lt_max= ja < ja_max; } - else if ((! ja_lt_max) - || (jb_lt_max && (y.ridx (jb) < x.ridx (ja)))) - { - jb++; - jb_lt_max= jb < jb_max; - } - else - { - double tmp = atan2 (x.data (ja), y.data (jb)); - if (tmp != 0.) - { - r.data (jx) = tmp; - r.ridx (jx) = x.ridx (ja); - jx++; - } - ja++; - ja_lt_max= ja < ja_max; - jb++; - jb_lt_max= jb < jb_max; - } - } - r.cidx (i+1) = jx; - } - - r.maybe_compress (); + ja++; + ja_lt_max= ja < ja_max; + jb++; + jb_lt_max= jb < jb_max; + } + } + r.cidx (i+1) = jx; } + + r.maybe_compress (); } else (*current_liboctave_error_handler) ("matrix size mismatch"); diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/fCColVector.cc --- a/liboctave/array/fCColVector.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/fCColVector.cc Wed Jan 20 16:58:59 2016 -0800 @@ -344,23 +344,21 @@ if (nc != a_len) err_nonconformant ("operator *", nr, nc, a_len, 1); - else + + retval.clear (nr); + + if (nr != 0) { - retval.clear (nr); - - if (nr != 0) + if (nc == 0) + retval.fill (0.0); + else { - if (nc == 0) - retval.fill (0.0); - else - { - FloatComplex *y = retval.fortran_vec (); + FloatComplex *y = retval.fortran_vec (); - F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), - nr, nc, 1.0f, m.data (), nr, - a.data (), 1, 0.0f, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), + nr, nc, 1.0f, m.data (), nr, + a.data (), 1, 0.0f, y, 1 + F77_CHAR_ARG_LEN (1))); } } diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/fCMatrix.cc --- 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))); } } diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/fCRowVector.cc --- a/liboctave/array/fCRowVector.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/fCRowVector.cc Wed Jan 20 16:58:59 2016 -0800 @@ -327,24 +327,22 @@ if (a_nr != len) err_nonconformant ("operator *", 1, len, a_nr, a_nc); + + if (len == 0) + retval.resize (a_nc, 0.0); else { - if (len == 0) - retval.resize (a_nc, 0.0); - else - { - // Transpose A to form A'*x == (x'*A)' + // Transpose A to form A'*x == (x'*A)' - octave_idx_type ld = a_nr; + octave_idx_type ld = a_nr; - retval.resize (a_nc); - FloatComplex *y = retval.fortran_vec (); + retval.resize (a_nc); + FloatComplex *y = retval.fortran_vec (); - F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 ("T", 1), - a_nr, a_nc, 1.0, a.data (), - ld, v.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (cgemv, CGEMV, (F77_CONST_CHAR_ARG2 ("T", 1), + a_nr, a_nc, 1.0, a.data (), + ld, v.data (), 1, 0.0, y, 1 + F77_CHAR_ARG_LEN (1))); } return retval; @@ -452,7 +450,8 @@ if (len != a_len) err_nonconformant ("operator *", len, a_len); - else if (len != 0) + + if (len != 0) F77_FUNC (xcdotu, XCDOTU) (len, v.data (), 1, a.data (), 1, retval); return retval; diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/fColVector.cc --- a/liboctave/array/fColVector.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/fColVector.cc Wed Jan 20 16:58:59 2016 -0800 @@ -205,23 +205,21 @@ if (nc != a_len) err_nonconformant ("operator *", nr, nc, a_len, 1); - else + + retval.clear (nr); + + if (nr != 0) { - retval.clear (nr); - - if (nr != 0) + if (nc == 0) + retval.fill (0.0); + else { - if (nc == 0) - retval.fill (0.0); - else - { - float *y = retval.fortran_vec (); + float *y = retval.fortran_vec (); - F77_XFCN (sgemv, SGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), - nr, nc, 1.0f, m.data (), nr, - a.data (), 1, 0.0f, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (sgemv, SGEMV, (F77_CONST_CHAR_ARG2 ("N", 1), + nr, nc, 1.0f, m.data (), nr, + a.data (), 1, 0.0f, y, 1 + F77_CHAR_ARG_LEN (1))); } } @@ -242,20 +240,18 @@ if (nc != a_len) err_nonconformant ("operator *", nr, nc, a_len, 1); + + if (nr == 0 || nc == 0) + retval.resize (nr, 0.0); else { - if (nr == 0 || nc == 0) - retval.resize (nr, 0.0); - else - { - retval.resize (nr); + retval.resize (nr); - for (octave_idx_type i = 0; i < a_len; i++) - retval.elem (i) = a.elem (i) * m.elem (i, i); + for (octave_idx_type i = 0; i < a_len; i++) + retval.elem (i) = a.elem (i) * m.elem (i, i); - for (octave_idx_type i = a_len; i < nr; i++) - retval.elem (i) = 0.0; - } + for (octave_idx_type i = a_len; i < nr; i++) + retval.elem (i) = 0.0; } return retval; diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/fMatrix.cc --- a/liboctave/array/fMatrix.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/fMatrix.cc Wed Jan 20 16:58:59 2016 -0800 @@ -3113,71 +3113,69 @@ if (a_nc != b_nr) err_nonconformant ("operator *", a_nr, a_nc, b_nr, b_nc); + + if (a_nr == 0 || a_nc == 0 || b_nc == 0) + retval = FloatMatrix (a_nr, b_nc, 0.0); + else if (a.data () == b.data () && a_nr == b_nc && tra != trb) + { + octave_idx_type lda = a.rows (); + + retval = FloatMatrix (a_nr, b_nc); + float *c = retval.fortran_vec (); + + const char ctra = get_blas_trans_arg (tra); + F77_XFCN (ssyrk, SSYRK, (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 (int j = 0; j < a_nr; j++) + for (int i = 0; i < j; i++) + retval.xelem (j,i) = retval.xelem (i,j); + + } else { - if (a_nr == 0 || a_nc == 0 || b_nc == 0) - retval = FloatMatrix (a_nr, b_nc, 0.0); - else if (a.data () == b.data () && a_nr == b_nc && tra != trb) + 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 = FloatMatrix (a_nr, b_nc); + float *c = retval.fortran_vec (); + + if (b_nc == 1) { - octave_idx_type lda = a.rows (); - - retval = FloatMatrix (a_nr, b_nc); - float *c = retval.fortran_vec (); - - const char ctra = get_blas_trans_arg (tra); - F77_XFCN (ssyrk, SSYRK, (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) + if (a_nr == 1) + F77_FUNC (xsdot, XSDOT) (a_nc, a.data (), 1, b.data (), 1, *c); + else + { + const char ctra = get_blas_trans_arg (tra); + F77_XFCN (sgemv, SGEMV, (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) + { + const char crevtrb = get_blas_trans_arg (! trb); + F77_XFCN (sgemv, SGEMV, (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))); - for (int j = 0; j < a_nr; j++) - for (int 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 = FloatMatrix (a_nr, b_nc); - float *c = retval.fortran_vec (); - - if (b_nc == 1) - { - if (a_nr == 1) - F77_FUNC (xsdot, XSDOT) (a_nc, a.data (), 1, b.data (), 1, *c); - else - { - const char ctra = get_blas_trans_arg (tra); - F77_XFCN (sgemv, SGEMV, (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) - { - const char crevtrb = get_blas_trans_arg (! trb); - F77_XFCN (sgemv, SGEMV, (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); - const char ctrb = get_blas_trans_arg (trb); - F77_XFCN (sgemm, SGEMM, (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))); - } + const char ctra = get_blas_trans_arg (tra); + const char ctrb = get_blas_trans_arg (trb); + F77_XFCN (sgemm, SGEMM, (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))); } } diff -r 90cd0f9442d5 -r 499b851fbfae liboctave/array/fRowVector.cc --- a/liboctave/array/fRowVector.cc Wed Jan 20 16:10:23 2016 -0800 +++ b/liboctave/array/fRowVector.cc Wed Jan 20 16:58:59 2016 -0800 @@ -201,24 +201,22 @@ if (a_nr != len) err_nonconformant ("operator *", 1, len, a_nr, a_nc); + + if (len == 0) + retval.resize (a_nc, 0.0); else { - if (len == 0) - retval.resize (a_nc, 0.0); - else - { - // Transpose A to form A'*x == (x'*A)' + // Transpose A to form A'*x == (x'*A)' - octave_idx_type ld = a_nr; + octave_idx_type ld = a_nr; - retval.resize (a_nc); - float *y = retval.fortran_vec (); + retval.resize (a_nc); + float *y = retval.fortran_vec (); - F77_XFCN (sgemv, SGEMV, (F77_CONST_CHAR_ARG2 ("T", 1), - a_nr, a_nc, 1.0, a.data (), - ld, v.data (), 1, 0.0, y, 1 - F77_CHAR_ARG_LEN (1))); - } + F77_XFCN (sgemv, SGEMV, (F77_CONST_CHAR_ARG2 ("T", 1), + a_nr, a_nc, 1.0, a.data (), + ld, v.data (), 1, 0.0, y, 1 + F77_CHAR_ARG_LEN (1))); } return retval; @@ -324,7 +322,8 @@ if (len != a_len) err_nonconformant ("operator *", len, a_len); - else if (len != 0) + + if (len != 0) F77_FUNC (xsdot, XSDOT) (len, v.data (), 1, a.data (), 1, retval); return retval;