diff --git a/kernel/mips/dscal_msa.c b/kernel/mips/dscal_msa.c index e95f0a655..cc8d83441 100644 --- a/kernel/mips/dscal_msa.c +++ b/kernel/mips/dscal_msa.c @@ -42,7 +42,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, if (1 == inc_x) { - if (0) //if (0.0 == da ) + if (0.0 == da && !dummy2) { v2f64 zero_v = {0.0, 0.0}; @@ -240,14 +240,12 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, } else { - if (da == 0.0) + if (da == 0.0 && !dummy2) { for (i = n; i--;) - { - if (isfinite(*x)) - *x = 0.0; - else - *x = NAN; + { + *x = 0.0; + x += inc_x; } } diff --git a/kernel/mips/scal.c b/kernel/mips/scal.c index d51fd9ccd..5f12d4271 100644 --- a/kernel/mips/scal.c +++ b/kernel/mips/scal.c @@ -29,27 +29,34 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *dummy, BLASLONG dummy2) { - BLASLONG i=0,j=0; + BLASLONG i = 0, j = 0; - while(j < n) - { + // Resolved issue 4728 when the caller is {s/d}scal + if (da == 0.0 && dummy2 == 1) + { + while(j < n) + { + x[i] = da * x[i] ; - if ( da == 0.0 ) - if (isnan(x[i])||isinf(x[i])) - x[i]=NAN; - else - x[i]=0.0; - else if (isnan(da)) - x[i]=NAN; - else - x[i] = da * x[i] ; + i += inc_x ; + j++; + } + } + else + { + while(j < n) + { - i += inc_x ; - j++; - - } - return 0; + if ( da == 0.0 ) + x[i] = 0.0; + else + x[i] = da * x[i] ; + i += inc_x ; + j++; + } + } + return 0; } diff --git a/kernel/mips/sscal_msa.c b/kernel/mips/sscal_msa.c index bfd477b6a..953cf0fbc 100644 --- a/kernel/mips/sscal_msa.c +++ b/kernel/mips/sscal_msa.c @@ -42,7 +42,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, if (1 == inc_x) { - if (0) // if (0.0 == da) + if (0.0 == da && !dummy2) { v4f32 zero_v = {0.0, 0.0, 0.0, 0.0}; @@ -255,14 +255,11 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, } else { - if (0.0 == da) + if (0.0 == da && !dummy2) { for (i = n; i--;) { - if (isfinite(*x)) - *x = 0; - else - *x = NAN; + *x = 0; x += inc_x; } }