@@ -177,8 +177,7 @@ function default_blasmul!(α, A::AbstractMatrix, B::AbstractMatrix, β, C::Abstr
177
177
178
178
rmul! (C, β)
179
179
180
- (iszero (mA) || iszero (nB)) && return C
181
- iszero (nA) && return C
180
+ (isempty (C) || iszero (nA)) && return C
182
181
183
182
r = rowsupport (B,rowsupport (A,first (colsupport (A))))
184
183
jindsid = all (k -> rowsupport (B,rowsupport (A,k)) == r, colsupport (A))
@@ -203,7 +202,7 @@ function default_blasmul!(α, A::AbstractVector, B::AbstractMatrix, β, C::Abstr
203
202
204
203
rmul! (C, β)
205
204
206
- ( iszero (mA) || iszero (nB) ) && return C
205
+ isempty (C ) && return C
207
206
208
207
for k in colsupport (A), j in rowsupport (B)
209
208
_default_blasmul_loop! (α, A, B, β, C, k, j)
@@ -219,12 +218,15 @@ function _default_blasmul!(::IndexLinear, α, A::AbstractMatrix, B::AbstractVect
219
218
length (C) == mA || throw (DimensionMismatch (" Dimensions must match" ))
220
219
221
220
rmul! (C, β)
222
- (nA == 0 || mB == 0 ) && return C
221
+ (isempty (C) || isempty (A)) && return C
222
+
223
+ Astride = size (A, 1 ) # use size, not stride, since its not pointer arithmetic
223
224
224
225
@inbounds for k in colsupport (B,1 )
226
+ aoffs = (k- 1 )* Astride
225
227
b = B[k] * α
226
228
for i in colsupport (A,k)
227
- C[i] += A[i,k ] * b
229
+ C[i] += A[aoffs + i ] * b
228
230
end
229
231
end
230
232
@@ -238,7 +240,7 @@ function _default_blasmul!(::IndexCartesian, α, A::AbstractMatrix, B::AbstractV
238
240
length (C) == mA || throw (DimensionMismatch (" Dimensions must match" ))
239
241
240
242
rmul! (C, β)
241
- (nA == 0 || mB == 0 ) && return C
243
+ (isempty (C) || isempty (A) ) && return C
242
244
243
245
@inbounds for k in colsupport (B,1 )
244
246
b = B[k] * α
0 commit comments