Skip to content

Commit 1b71694

Browse files
authored
handle dummy2 flag
1 parent 16772ed commit 1b71694

File tree

1 file changed

+42
-8
lines changed

1 file changed

+42
-8
lines changed

kernel/zarch/zscal.c

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)