@@ -208,7 +208,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
208
208
BLASLONG n1 = n & -2 ;
209
209
210
210
if (da_i == 0.0 ) {
211
-
211
+ if ( dummy2 == 0 ) {
212
212
while (j < n1 ) {
213
213
214
214
x [i ] = 0.0 ;
@@ -228,6 +228,34 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
228
228
j ++ ;
229
229
230
230
}
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
+ }
231
259
232
260
} else {
233
261
@@ -276,7 +304,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
276
304
277
305
} else {
278
306
279
- if (da_i == 0.0 ) {
307
+ if (da_i == 0.0 && dummy2 ) {
280
308
BLASLONG n1 = n & -2 ;
281
309
282
310
while (j < n1 ) {
@@ -335,12 +363,10 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
335
363
alpha [1 ] = da_i ;
336
364
337
365
if (da_r == 0.0 )
338
- if (da_i == 0 )
366
+ if (da_i == 0 && dummy2 == 0 )
339
367
zscal_kernel_8_zero (n1 , x );
340
368
else
341
369
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 );
344
370
else
345
371
zscal_kernel_8 (n1 , da_r , da_i , x );
346
372
@@ -354,7 +380,8 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
354
380
double res = 0.0 ;
355
381
if (isnan (da_r )) res = da_r ;
356
382
while (j < n ) {
357
-
383
+ if (dummy2 )
384
+ if (isnan (x [i ]) || isnan (x [i + 1 ])) res = NAN ;
358
385
x [i ] = res ;
359
386
x [i + 1 ] = res ;
360
387
i += 2 ;
@@ -381,7 +408,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
381
408
x [i + 1 ] = da_i * x [i ];
382
409
else
383
410
x [i + 1 ] = NAN ;
384
- if (x [i ]== x [ i ] )
411
+ if (! isnan ( x [i ]) )
385
412
x [i ] = temp0 ;
386
413
i += 2 ;
387
414
j ++ ;
@@ -397,6 +424,13 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
397
424
while (j < n ) {
398
425
399
426
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
+ }
400
434
x [i + 1 ] = da_r * x [i + 1 ];
401
435
x [i ] = temp0 ;
402
436
i += 2 ;
@@ -410,7 +444,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
410
444
411
445
temp0 = da_r * x [i ] - da_i * x [i + 1 ];
412
446
x [i + 1 ] = da_r * x [i + 1 ] + da_i * x [i ];
413
- x [i ] = temp0 ;
447
+ if (! isnan ( x [ i ])) x [i ] = temp0 ;
414
448
i += 2 ;
415
449
j ++ ;
416
450
0 commit comments