@@ -619,29 +619,26 @@ function _MulAddMul_nonzeroalpha(_add::MulAddMul{ais1,bis0,Bool}) where {ais1,bi
619619end
620620_MulAddMul_nonzeroalpha (_add:: MulAddMul{ais1,bis0,Bool} , :: Val{false} ) where {ais1,bis0} = MulAddMul ()
621621
622- _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: TriSym , alpha :: Number , beta :: Number ) =
623- _bibimul! (C, A, B, alpha, beta )
624- _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: Bidiagonal , alpha :: Number , beta :: Number ) =
625- _bibimul! (C, A, B, alpha, beta )
626- function _bibimul! (C, A, B, alpha, beta )
622+ _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: TriSym , _add :: MulAddMul ) =
623+ _bibimul! (C, A, B, _add )
624+ _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: Bidiagonal , _add :: MulAddMul ) =
625+ _bibimul! (C, A, B, _add )
626+ function _bibimul! (C, A, B, _add )
627627 require_one_based_indexing (C)
628628 matmul_size_check (size (C), size (A), size (B))
629629 n = size (A,1 )
630630 iszero (n) && return C
631631 # We use `_rmul_or_fill!` instead of `_modify!` here since using
632632 # `_modify!` in the following loop will not update the
633633 # off-diagonal elements for non-zero beta.
634- _rmul_or_fill! (C, beta)
635- iszero (alpha) && return C
634+ _rmul_or_fill! (C, _add . beta)
635+ iszero (_add . alpha) && return C
636636 # beta is unused in _bibimul_nonzeroalpha!, so we set it to false
637- @stable_muladdmul _bibimul_nonzeroalpha! (C, A, B, MulAddMul (alpha, false ))
637+ _add_nonzeroalpha = _MulAddMul_nonzeroalpha (_add, Val (false ))
638+ _bibimul_nonzeroalpha! (C, A, B, _add_nonzeroalpha)
638639 C
639640end
640641function _bibimul_nonzeroalpha! (C, A, B, _add)
641- _add_nonzeroalpha = _MulAddMul_nonzeroalpha (_add)
642- __bibimul_nonzeroalpha! (C, A, B, _add_nonzeroalpha)
643- end
644- function __bibimul_nonzeroalpha! (C, A, B, _add)
645642 n = size (A,1 )
646643 if n == 1
647644 # naive multiplication
@@ -669,7 +666,7 @@ function __bibimul_nonzeroalpha!(C, A, B, _add)
669666 end
670667 end # inbounds
671668 # middle columns
672- __bibimul_bulk ! (C, A, B, _add)
669+ __bibimul ! (C, A, B, _add)
673670 @inbounds begin
674671 if n >= 4
675672 C[n- 3 ,n- 1 ] += _add (A[n- 3 ,n- 2 ]* B[n- 2 ,n- 1 ])
@@ -686,7 +683,7 @@ function __bibimul_nonzeroalpha!(C, A, B, _add)
686683 end # inbounds
687684 C
688685end
689- function __bibimul_bulk ! (C, A, B, _add)
686+ function __bibimul ! (C, A, B, _add)
690687 n = size (A,1 )
691688 Al = _diag (A, - 1 )
692689 Ad = _diag (A, 0 )
@@ -718,7 +715,7 @@ function __bibimul_bulk!(C, A, B, _add)
718715 end
719716 C
720717end
721- function __bibimul_bulk ! (C, A, B:: Bidiagonal , _add)
718+ function __bibimul ! (C, A, B:: Bidiagonal , _add)
722719 n = size (A,1 )
723720 Al = _diag (A, - 1 )
724721 Ad = _diag (A, 0 )
@@ -765,7 +762,7 @@ function __bibimul_bulk!(C, A, B::Bidiagonal, _add)
765762 end
766763 C
767764end
768- function __bibimul_bulk ! (C, A:: Bidiagonal , B, _add)
765+ function __bibimul ! (C, A:: Bidiagonal , B, _add)
769766 n = size (A,1 )
770767 Bl = _diag (B, - 1 )
771768 Bd = _diag (B, 0 )
@@ -814,7 +811,7 @@ function __bibimul_bulk!(C, A::Bidiagonal, B, _add)
814811 end
815812 C
816813end
817- function __bibimul_bulk ! (C, A:: Bidiagonal , B:: Bidiagonal , _add)
814+ function __bibimul ! (C, A:: Bidiagonal , B:: Bidiagonal , _add)
818815 n = size (A,1 )
819816 Ad = A. dv
820817 Bd = B. dv
@@ -890,20 +887,17 @@ function __bibimul_bulk!(C, A::Bidiagonal, B::Bidiagonal, _add)
890887 C
891888end
892889
893- function _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: Diagonal , alpha :: Number , beta :: Number )
890+ function _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: Diagonal , _add :: MulAddMul )
894891 require_one_based_indexing (C)
895892 matmul_size_check (size (C), size (A), size (B))
896893 n = size (A,1 )
897894 iszero (n) && return C
898- _rmul_or_fill! (C, beta) # see the same use above
899- iszero (alpha) && return C
895+ _rmul_or_fill! (C, _add . beta) # see the same use above
896+ iszero (_add . alpha) && return C
900897 # beta is unused in the _bidimul! call, so we set it to false
901- @stable_muladdmul _mul_nonzeroalpha! (C, A, B, MulAddMul (alpha, false ))
902- C
903- end
904- function _mul_nonzeroalpha! (C:: AbstractMatrix , A:: BiTriSym , B:: Diagonal , _add:: MulAddMul )
905- _add_nonzeroalpha = _MulAddMul_nonzeroalpha (_add)
898+ _add_nonzeroalpha = _MulAddMul_nonzeroalpha (_add, Val (false ))
906899 _bidimul! (C, A, B, _add_nonzeroalpha)
900+ C
907901end
908902function _bidimul! (C:: AbstractMatrix , A:: BiTriSym , B:: Diagonal , _add:: MulAddMul )
909903 n = size (A,1 )
0 commit comments