@@ -152,15 +152,23 @@ function (*)(A::AbstractMatrix, B::AbstractMatrix)
152152 TS = promote_op (matprod, eltype (A), eltype (B))
153153 mul! (similar (B, TS, (size (A,1 ), size (B,2 ))), A, B)
154154end
155- @inline mul! (C:: StridedMatrix{T} , A:: StridedVecOrMat{T} , B:: StridedVecOrMat{T} ,
156- alpha:: Union{T, Bool} , beta:: Union{T, Bool} ) where {T<: BlasFloat } =
157- gemm_wrapper! (C, ' N' , ' N' , A, B, MulAddMul (alpha, beta))
155+
156+ @inline function mul! (C:: StridedMatrix{T} , A:: StridedVecOrMat{T} , B:: StridedVecOrMat{T} ,
157+ α:: Number , β:: Number ) where {T<: BlasFloat }
158+ alpha, beta = promote (α, β, zero (T))
159+ if alpha isa T && beta isa T
160+ return gemm_wrapper! (C, ' N' , ' N' , A, B, MulAddMul (alpha, beta))
161+ else
162+ return generic_matmatmul! (C, ' N' , ' N' , A, B, MulAddMul (α, β))
163+ end
164+ end
165+
158166# Complex Matrix times real matrix: We use that it is generally faster to reinterpret the
159167# first matrix as a real matrix and carry out real matrix matrix multiply
160168for elty in (Float32,Float64)
161169 @eval begin
162170 @inline function mul! (C:: StridedMatrix{Complex{$elty}} , A:: StridedVecOrMat{Complex{$elty}} , B:: StridedVecOrMat{$elty} ,
163- alpha:: Union{$elty, Bool} , beta:: Union{$elty, Bool} )
171+ alpha:: Real , beta:: Real )
164172 Afl = reinterpret ($ elty, A)
165173 Cfl = reinterpret ($ elty, C)
166174 mul! (Cfl, Afl, B, alpha, beta)
0 commit comments