@@ -70,6 +70,11 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
7070 FLOAT_VX2_T vx2 ;
7171
7272 if (inc_x == 1 ) {
73+ if (dummy2 == 0 && da_r == 0. && da_i == 0. ) {
74+ BLASLONG i ;
75+ for (i = 0 ; i < n * 2 ; i ++ ) x [i ]= 0. ;
76+ return (0 );
77+ } else {
7378
7479 for (size_t vl ; n > 0 ; n -= vl , x += vl * 2 ) {
7580 vl = VSETVL (n );
@@ -80,16 +85,22 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
8085
8186 vt = VFMULVF_FLOAT (vr , da_r , vl );
8287 vt = VFNMSACVF_FLOAT (vt , da_i , vi , vl );
88+
8389 vi = VFMULVF_FLOAT (vi , da_r , vl );
8490 vi = VFMACCVF_FLOAT (vi , da_i , vr , vl );
8591
8692 vx2 = VSET_VX2 (vx2 , 0 , vt );
8793 vx2 = VSET_VX2 (vx2 , 1 , vi );
8894 VSSEG_FLOAT (x , vx2 , vl );
8995 }
96+ }
9097
9198 } else {
92-
99+ if (dummy2 == 0 && da_r == 0. && da_i == 0. ) {
100+ BLASLONG i ,ix = 0 ,inc_x2 = 2 * inc_x ;
101+ for (i = 0 ; i < n ; i ++ ) {x [ix ]= 0. ;x [ix + 1 ]= 0. ;ix += inc_x2 ;};
102+ return (0 );
103+ } else {
93104 for (size_t vl ; n > 0 ; n -= vl , x += vl * inc_x * 2 ) {
94105 vl = VSETVL (n );
95106
@@ -105,6 +116,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
105116 vx2 = VSET_VX2 (vx2 , 0 , vt );
106117 vx2 = VSET_VX2 (vx2 , 1 , vi );
107118 VSSSEG_FLOAT (x , stride_x , vx2 , vl );
119+ }
108120 }
109121 }
110122
0 commit comments