@@ -208,7 +208,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
208208 BLASLONG n1 = n & -2 ;
209209
210210 if (da_i == 0.0 ) {
211-
211+ if ( dummy2 == 0 ) {
212212 while (j < n1 ) {
213213
214214 x [i ] = 0.0 ;
@@ -228,6 +228,34 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
228228 j ++ ;
229229
230230 }
231+ } else {
232+ while (j < n1 ) {
233+ if (isnan (x [i ]) || isinf (x [i ]) || isnan (x [i + 1 ])) {
234+ x [i ] = NAN ;
235+ x [i + 1 ] = NAN ;
236+ } else {
237+ x [i ] = 0.0 ;
238+ x [i + 1 ] = 0.0 ;
239+ }
240+ if (isnan (x [i + inc_x ]) || isinf (x [i + inc_x ]) || isnan (x [i + inc_x + 1 ])) {
241+ x [i + inc_x ] = NAN ;
242+ x [i + inc_x + 1 ] = NAN ;
243+ } else {
244+ x [i + inc_x ] = 0. ;
245+ x [i + inc_x + 1 ] = 0. ;
246+ }
247+ i += 2 * inc_x ;
248+ i += 2 ;
249+ }
250+ while (j < n ) {
251+ if (isnan (x [i ]) || isinf (x [i ]) || isnan (x [i + 1 ])) {
252+ x [i ] = NAN ;
253+ x [i + 1 ] = NAN ;
254+ } else {
255+ x [i ] = 0. ;
256+ x [i + 1 ] = 0. ;
257+ }
258+ }
231259
232260 } else {
233261
@@ -276,7 +304,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
276304
277305 } else {
278306
279- if (da_i == 0.0 ) {
307+ if (da_i == 0.0 && dummy2 ) {
280308 BLASLONG n1 = n & -2 ;
281309
282310 while (j < n1 ) {
@@ -335,12 +363,10 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
335363 alpha [1 ] = da_i ;
336364
337365 if (da_r == 0.0 )
338- if (da_i == 0 )
366+ if (da_i == 0 && dummy2 == 0 )
339367 zscal_kernel_8_zero (n1 , x );
340368 else
341369 zscal_kernel_8 (n1 , da_r , da_i , x );
342- else if (da_i == 0 && da_r == da_r )
343- zscal_kernel_8_zero_i (n1 , alpha , x );
344370 else
345371 zscal_kernel_8 (n1 , da_r , da_i , x );
346372
@@ -354,7 +380,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
354380 double res = 0.0 ;
355381 if (isnan (da_r )) res = da_r ;
356382 while (j < n ) {
357-
383+ if (dummy2 )
384+ if (isnan (x [i ]) || isnan (x [i + 1 ])) res = NAN ;
358385 x [i ] = res ;
359386 x [i + 1 ] = res ;
360387 i += 2 ;
@@ -381,7 +408,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
381408 x [i + 1 ] = da_i * x [i ];
382409 else
383410 x [i + 1 ] = NAN ;
384- if (x [i ]== x [ i ] )
411+ if (! isnan ( x [i ]) )
385412 x [i ] = temp0 ;
386413 i += 2 ;
387414 j ++ ;
@@ -397,6 +424,13 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
397424 while (j < n ) {
398425
399426 temp0 = da_r * x [i ];
427+ if (dummy2 ) {
428+ if (isnan (x [i ]) || isinf (x [i ])) temp0 = NAN ;
429+ if (isnan (x [i + 1 ]) || isinf (x [i + 1 ]))
430+ x [i + 1 ] = NAN ;
431+ else
432+ x [i + 1 ] = da_r * x [i + 1 ];
433+ }
400434 x [i + 1 ] = da_r * x [i + 1 ];
401435 x [i ] = temp0 ;
402436 i += 2 ;
@@ -410,7 +444,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
410444
411445 temp0 = da_r * x [i ] - da_i * x [i + 1 ];
412446 x [i + 1 ] = da_r * x [i + 1 ] + da_i * x [i ];
413- x [i ] = temp0 ;
447+ if (! isnan ( x [ i ])) x [i ] = temp0 ;
414448 i += 2 ;
415449 j ++ ;
416450
0 commit comments