@@ -210,7 +210,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
210210 BLASLONG n1 = n & -2 ;
211211
212212 if (da_i == 0.0 ) {
213-
213+ if ( dummy2 == 0 ) {
214214 while (j < n1 ) {
215215
216216 x [i ] = 0.0 ;
@@ -230,11 +230,43 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
230230 j ++ ;
231231
232232 }
233+ } else {
234+ while (j < n1 ) {
235+ if (isnan (x [i ]) || isinf (x [i ]) || isnan (x [i + 1 ])) {
236+ x [i ] = NAN ;
237+ x [i + 1 ] = NAN ;
238+ }else {
239+ x [i ] = 0.0 ;
240+ x [i + 1 ] = 0.0 ;
241+ }
242+ if (isnan (x [i + inc_x ]) || isinf (x [i + inc_x ]) || isnan (x [i + 1 + inc_x ])) {
243+ x [i + inc_x ] = NAN ;
244+ x [i + 1 + inc_x ] = NAN ;
245+ } else {
246+ x [i + inc_x ] = 0.0 ;
247+ x [i + 1 + inc_x ] = 0.0 ;
248+ }
249+ i += 2 * inc_x ;
250+ j += 2 ;
251+
252+ }
233253
254+ while (j < n ) {
255+ if (isnan (x [i ]) || isinf (x [i ]) || isnan (x [i + 1 ])) {
256+ x [i ] = NAN ;
257+ x [i + 1 ] = NAN ;
258+ }else {
259+ x [i ] = 0.0 ;
260+ x [i + 1 ] = 0.0 ;
261+ }
262+ i += inc_x ;
263+ j ++ ;
264+ }
265+ }
234266 } else {
235267
236268 while (j < n1 ) {
237- if (isnan (x [i ]) || isinf (x [i ]))
269+ if (isnan (x [i ]) || isinf (x [i ]))
238270 temp0 = NAN ;
239271 else
240272 temp0 = - da_i * x [i + 1 ];
@@ -276,7 +308,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
276308
277309 } else {
278310
279- if (da_i == 0.0 ) {
311+ if (da_i == 0.0 && dummy2 ) {
280312 BLASLONG n1 = n & -2 ;
281313
282314 while (j < n1 ) {
@@ -335,12 +367,16 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
335367 alpha [1 ] = da_i ;
336368
337369 if (da_r == 0.0 )
338- if (da_i == 0 )
370+ if (da_i == 0 && dummy2 == 0 )
339371 cscal_kernel_16_zero (n1 , x );
340- else
372+ else {
373+ /* if (dummy2 == 0)
341374 cscal_kernel_16_zero_r(n1, alpha, x);
342- else if (da_i == 0 )
343- cscal_kernel_16_zero_i (n1 , alpha , x );
375+ else*/
376+ cscal_kernel_16 (n1 , da_r , da_i , x );
377+ }
378+ /* else if (da_i == 0 && !isnan(da_r))
379+ cscal_kernel_16/*_zero_i(n1, alpha, x);*/
344380 else
345381 cscal_kernel_16 (n1 , da_r , da_i , x );
346382
@@ -354,7 +390,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
354390 float res = 0.0 ;
355391 if (isnan (da_r )) res = da_r ;
356392 while (j < n ) {
357-
393+ if (dummy2 )
394+ if (isnan (x [i ])|| isnan (x [i + 1 ])) res = NAN ;
358395 x [i ] = res ;
359396 x [i + 1 ] = res ;
360397 i += 2 ;
@@ -382,7 +419,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
382419 x [i + 1 ] = da_i * x [i ];
383420 else
384421 x [i + 1 ] = NAN ;
385- if (x [i ] == x [ i ] )
422+ if (! isnan ( x [i ]) )
386423 x [i ] = temp0 ;
387424 i += 2 ;
388425 j ++ ;
@@ -398,7 +435,18 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
398435 while (j < n ) {
399436
400437 temp0 = da_r * x [i ];
401- x [i + 1 ] = da_r * x [i + 1 ];
438+ if (dummy2 ) {
439+ if (isnan (x [i ])|| isinf (x [i ]))temp0 = NAN ;
440+ if (isnan (x [i + 1 ])|| isinf (x [i + 1 ]))
441+ x [i + 1 ] = NAN ;
442+ else
443+ x [i + 1 ] = da_r * x [i + 1 ];
444+ } else {
445+ if (isnan (x [i ]))
446+ x [i + 1 ] = NAN ;
447+ else
448+ x [i + 1 ] = da_r * x [i + 1 ];
449+ }
402450 x [i ] = temp0 ;
403451 i += 2 ;
404452 j ++ ;
@@ -411,7 +459,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
411459
412460 temp0 = da_r * x [i ] - da_i * x [i + 1 ];
413461 x [i + 1 ] = da_r * x [i + 1 ] + da_i * x [i ];
414- x [i ] = temp0 ;
462+ if (! isnan ( x [ i ])) x [i ] = temp0 ;
415463 i += 2 ;
416464 j ++ ;
417465
0 commit comments