@@ -621,29 +621,26 @@ function _MulAddMul_nonzeroalpha(_add::MulAddMul{ais1,bis0,Bool}) where {ais1,bi
621621end
622622_MulAddMul_nonzeroalpha (_add:: MulAddMul{ais1,bis0,Bool} , :: Val{false} ) where {ais1,bis0} = MulAddMul ()
623623
624- _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: TriSym , alpha :: Number , beta :: Number ) =
625- _bibimul! (C, A, B, alpha, beta )
626- _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: Bidiagonal , alpha :: Number , beta :: Number ) =
627- _bibimul! (C, A, B, alpha, beta )
628- function _bibimul! (C, A, B, alpha, beta )
624+ _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: TriSym , _add :: MulAddMul ) =
625+ _bibimul! (C, A, B, _add )
626+ _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: Bidiagonal , _add :: MulAddMul ) =
627+ _bibimul! (C, A, B, _add )
628+ function _bibimul! (C, A, B, _add )
629629 require_one_based_indexing (C)
630630 matmul_size_check (size (C), size (A), size (B))
631631 n = size (A,1 )
632632 iszero (n) && return C
633633 # We use `_rmul_or_fill!` instead of `_modify!` here since using
634634 # `_modify!` in the following loop will not update the
635635 # off-diagonal elements for non-zero beta.
636- _rmul_or_fill! (C, beta)
637- iszero (alpha) && return C
636+ _rmul_or_fill! (C, _add . beta)
637+ iszero (_add . alpha) && return C
638638 # beta is unused in _bibimul_nonzeroalpha!, so we set it to false
639- @stable_muladdmul _bibimul_nonzeroalpha! (C, A, B, MulAddMul (alpha, false ))
639+ _add_nonzeroalpha = _MulAddMul_nonzeroalpha (_add, Val (false ))
640+ _bibimul_nonzeroalpha! (C, A, B, _add_nonzeroalpha)
640641 C
641642end
642643function _bibimul_nonzeroalpha! (C, A, B, _add)
643- _add_nonzeroalpha = _MulAddMul_nonzeroalpha (_add)
644- __bibimul_nonzeroalpha! (C, A, B, _add_nonzeroalpha)
645- end
646- function __bibimul_nonzeroalpha! (C, A, B, _add)
647644 n = size (A,1 )
648645 if n == 1
649646 # naive multiplication
@@ -671,7 +668,7 @@ function __bibimul_nonzeroalpha!(C, A, B, _add)
671668 end
672669 end # inbounds
673670 # middle columns
674- __bibimul_bulk ! (C, A, B, _add)
671+ __bibimul ! (C, A, B, _add)
675672 @inbounds begin
676673 if n >= 4
677674 C[n- 3 ,n- 1 ] += _add (A[n- 3 ,n- 2 ]* B[n- 2 ,n- 1 ])
@@ -688,7 +685,7 @@ function __bibimul_nonzeroalpha!(C, A, B, _add)
688685 end # inbounds
689686 C
690687end
691- function __bibimul_bulk ! (C, A, B, _add)
688+ function __bibimul ! (C, A, B, _add)
692689 n = size (A,1 )
693690 Al = _diag (A, - 1 )
694691 Ad = _diag (A, 0 )
@@ -720,7 +717,7 @@ function __bibimul_bulk!(C, A, B, _add)
720717 end
721718 C
722719end
723- function __bibimul_bulk ! (C, A, B:: Bidiagonal , _add)
720+ function __bibimul ! (C, A, B:: Bidiagonal , _add)
724721 n = size (A,1 )
725722 Al = _diag (A, - 1 )
726723 Ad = _diag (A, 0 )
@@ -767,7 +764,7 @@ function __bibimul_bulk!(C, A, B::Bidiagonal, _add)
767764 end
768765 C
769766end
770- function __bibimul_bulk ! (C, A:: Bidiagonal , B, _add)
767+ function __bibimul ! (C, A:: Bidiagonal , B, _add)
771768 n = size (A,1 )
772769 Bl = _diag (B, - 1 )
773770 Bd = _diag (B, 0 )
@@ -816,7 +813,7 @@ function __bibimul_bulk!(C, A::Bidiagonal, B, _add)
816813 end
817814 C
818815end
819- function __bibimul_bulk ! (C, A:: Bidiagonal , B:: Bidiagonal , _add)
816+ function __bibimul ! (C, A:: Bidiagonal , B:: Bidiagonal , _add)
820817 n = size (A,1 )
821818 Ad = A. dv
822819 Bd = B. dv
@@ -892,20 +889,17 @@ function __bibimul_bulk!(C, A::Bidiagonal, B::Bidiagonal, _add)
892889 C
893890end
894891
895- function _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: Diagonal , alpha :: Number , beta :: Number )
892+ function _mul! (C:: AbstractMatrix , A:: BiTriSym , B:: Diagonal , _add :: MulAddMul )
896893 require_one_based_indexing (C)
897894 matmul_size_check (size (C), size (A), size (B))
898895 n = size (A,1 )
899896 iszero (n) && return C
900- _rmul_or_fill! (C, beta) # see the same use above
901- iszero (alpha) && return C
897+ _rmul_or_fill! (C, _add . beta) # see the same use above
898+ iszero (_add . alpha) && return C
902899 # beta is unused in the _bidimul! call, so we set it to false
903- @stable_muladdmul _mul_nonzeroalpha! (C, A, B, MulAddMul (alpha, false ))
904- C
905- end
906- function _mul_nonzeroalpha! (C:: AbstractMatrix , A:: BiTriSym , B:: Diagonal , _add:: MulAddMul )
907- _add_nonzeroalpha = _MulAddMul_nonzeroalpha (_add)
900+ _add_nonzeroalpha = _MulAddMul_nonzeroalpha (_add, Val (false ))
908901 _bidimul! (C, A, B, _add_nonzeroalpha)
902+ C
909903end
910904function _bidimul! (C:: AbstractMatrix , A:: BiTriSym , B:: Diagonal , _add:: MulAddMul )
911905 n = size (A,1 )
0 commit comments