@@ -77,6 +77,7 @@ void NAME(char *UPLO, char *TRANSA, char *TRANSB,
7777 blasint info ;
7878
7979 char transA , transB , Uplo ;
80+ blasint nrowa , nrowb ;
8081 IFLOAT * buffer ;
8182 IFLOAT * aa , * bb ;
8283 FLOAT * cc ;
@@ -155,22 +156,31 @@ void NAME(char *UPLO, char *TRANSA, char *TRANSB,
155156 if (Uplo == 'L' )
156157 uplo = 1 ;
157158
159+ nrowa = m ;
160+ if (transa ) nrowa = k ;
161+ nrowb = k ;
162+ if (transb ) nrowb = m ;
163+
158164 info = 0 ;
159165
160- if (uplo < 0 )
161- info = 14 ;
162- if (ldc < m )
166+ if (ldc < MAX (1 , m ))
163167 info = 13 ;
168+ if (ldb < MAX (1 , nrowa ))
169+ info = 10 ;
170+ if (lda < MAX (1 , nrowb ))
171+ info = 8 ;
164172 if (k < 0 )
165173 info = 5 ;
166174 if (m < 0 )
167- info = 3 ;
175+ info = 4 ;
168176 if (transb < 0 )
169- info = 2 ;
177+ info = 3 ;
170178 if (transa < 0 )
179+ info = 2 ;
180+ if (uplo < 0 )
171181 info = 1 ;
172182
173- if (info ) {
183+ if (info != 0 ) {
174184 BLASFUNC (xerbla ) (ERROR_NAME , & info , sizeof (ERROR_NAME ));
175185 return ;
176186 }
@@ -205,11 +215,14 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,
205215
206216 PRINT_DEBUG_CNAME ;
207217
218+ uplo = -1 ;
208219 transa = -1 ;
209220 transb = -1 ;
210221 info = 0 ;
211222
212223 if (order == CblasColMajor ) {
224+ if (Uplo == CblasUpper ) uplo = 0 ;
225+ if (Uplo == CblasLower ) uplo = 1 ;
213226
214227 if (TransA == CblasNoTrans )
215228 transa = 0 ;
@@ -249,15 +262,27 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,
249262
250263 info = -1 ;
251264
252- if (ldc < m )
265+ blasint nrowa , nrowb ;
266+ nrowa = m ;
267+ if (transa ) nrowa = k ;
268+ nrowb = k ;
269+ if (transb ) nrowb = m ;
270+
271+ if (ldc < MAX (1 , m ))
253272 info = 13 ;
273+ if (ldb < MAX (1 , nrowb ))
274+ info = 10 ;
275+ if (lda < MAX (1 , nrowa ))
276+ info = 8 ;
254277 if (k < 0 )
255278 info = 5 ;
256279 if (m < 0 )
257- info = 3 ;
280+ info = 4 ;
258281 if (transb < 0 )
259- info = 2 ;
282+ info = 3 ;
260283 if (transa < 0 )
284+ info = 2 ;
285+ if (uplo < 0 )
261286 info = 1 ;
262287 }
263288
@@ -269,6 +294,9 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,
269294 lda = LDB ;
270295 ldb = LDA ;
271296
297+ if (Uplo == CblasUpper ) uplo = 0 ;
298+ if (Uplo == CblasLower ) uplo = 1 ;
299+
272300 if (TransB == CblasNoTrans )
273301 transa = 0 ;
274302 if (TransB == CblasTrans )
@@ -302,27 +330,30 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo,
302330
303331 info = -1 ;
304332
305- if (ldc < m )
333+ blasint ncola , ncolb ;
334+ ncola = k ;
335+ if (transa ) ncola = m ;
336+ ncolb = m ;
337+ if (transb ) ncolb = k ;
338+
339+ if (ldc < MAX (1 ,m ))
306340 info = 13 ;
341+ if (ldb < MAX (1 , ncolb ))
342+ info = 10 ;
343+ if (lda < MAX (1 , ncola ))
344+ info = 8 ;
307345 if (k < 0 )
308346 info = 5 ;
309347 if (m < 0 )
310- info = 3 ;
348+ info = 4 ;
311349 if (transb < 0 )
312- info = 2 ;
350+ info = 3 ;
313351 if (transa < 0 )
352+ info = 2 ;
353+ if (uplo < 0 )
314354 info = 1 ;
315-
316355 }
317356
318- uplo = -1 ;
319- if (Uplo == CblasUpper )
320- uplo = 0 ;
321- if (Uplo == CblasLower )
322- uplo = 1 ;
323- if (uplo < 0 )
324- info = 14 ;
325-
326357 if (info >= 0 ) {
327358 BLASFUNC (xerbla ) (ERROR_NAME , & info , sizeof (ERROR_NAME ));
328359 return ;
0 commit comments