@@ -62,6 +62,58 @@ int CNAME(BLASLONG n, FLOAT *dx, BLASLONG incx, FLOAT *dy, BLASLONG incy, FLOAT
6262 dflag = dparam [1 ];
6363 if (n <= 0 || dflag == - 2.0 ) goto L140 ;
6464
65+ if (incx == 0 || incy == 0 ) {
66+ BLASLONG i ;
67+ FLOAT w , z ;
68+
69+ kx = 1 ;
70+ ky = 1 ;
71+ if (incx < 0 ) {
72+ kx = (1 - n ) * incx + 1 ;
73+ }
74+ if (incy < 0 ) {
75+ ky = (1 - n ) * incy + 1 ;
76+ }
77+
78+ if (dflag < 0. ) {
79+ dh11 = dparam [2 ];
80+ dh12 = dparam [4 ];
81+ dh21 = dparam [3 ];
82+ dh22 = dparam [5 ];
83+ for (i = 0 ; i < n ; ++ i ) {
84+ w = dx [kx ];
85+ z = dy [ky ];
86+ dx [kx ] = w * dh11 + z * dh12 ;
87+ dy [ky ] = w * dh21 + z * dh22 ;
88+ kx += incx ;
89+ ky += incy ;
90+ }
91+ } else if (dflag == 0 ) {
92+ dh12 = dparam [4 ];
93+ dh21 = dparam [3 ];
94+ for (i = 0 ; i < n ; ++ i ) {
95+ w = dx [kx ];
96+ z = dy [ky ];
97+ dx [kx ] = w + z * dh12 ;
98+ dy [ky ] = w * dh21 + z ;
99+ kx += incx ;
100+ ky += incy ;
101+ }
102+ } else {
103+ dh11 = dparam [2 ];
104+ dh22 = dparam [5 ];
105+ for (i = 0 ; i < n ; ++ i ) {
106+ w = dx [kx ];
107+ z = dy [ky ];
108+ dx [kx ] = w * dh11 + z ;
109+ dy [ky ] = - w + dh22 * z ;
110+ kx += incx ;
111+ ky += incy ;
112+ }
113+ }
114+ goto L140 ;
115+ }
116+
65117 if (!(incx == incy && incx > 0 )) goto L70 ;
66118
67119 nsteps = n * incx ;
@@ -177,14 +229,6 @@ int CNAME(BLASLONG n, FLOAT *dx, BLASLONG incx, FLOAT *dy, BLASLONG incy, FLOAT
177229L80 :
178230 dh12 = dparam [4 ];
179231 dh21 = dparam [3 ];
180- if (incx < 0 ){
181- incx = - incx ;
182- dx -= n * incx ;
183- }
184- if (incy < 0 ){
185- incy = - incy ;
186- dy -= n * incy ;
187- }
188232 stride_x = incx * sizeof (FLOAT );
189233 stride_y = incy * sizeof (FLOAT );
190234 for (size_t vl ; n > 0 ; n -= vl , dx += vl * incx , dy += vl * incy ) {
@@ -203,14 +247,6 @@ int CNAME(BLASLONG n, FLOAT *dx, BLASLONG incx, FLOAT *dy, BLASLONG incy, FLOAT
203247L100 :
204248 dh11 = dparam [2 ];
205249 dh22 = dparam [5 ];
206- if (incx < 0 ){
207- incx = - incx ;
208- dx -= n * incx ;
209- }
210- if (incy < 0 ){
211- incy = - incy ;
212- dy -= n * incy ;
213- }
214250 stride_x = incx * sizeof (FLOAT );
215251 stride_y = incy * sizeof (FLOAT );
216252 for (size_t vl ; n > 0 ; n -= vl , dx += vl * incx , dy += vl * incy ) {
@@ -231,14 +267,6 @@ int CNAME(BLASLONG n, FLOAT *dx, BLASLONG incx, FLOAT *dy, BLASLONG incy, FLOAT
231267 dh12 = dparam [4 ];
232268 dh21 = dparam [3 ];
233269 dh22 = dparam [5 ];
234- if (incx < 0 ){
235- incx = - incx ;
236- dx -= n * incx ;
237- }
238- if (incy < 0 ){
239- incy = - incy ;
240- dy -= n * incy ;
241- }
242270 stride_x = incx * sizeof (FLOAT );
243271 stride_y = incy * sizeof (FLOAT );
244272 for (size_t vl ; n > 0 ; n -= vl , dx += vl * incx , dy += vl * incy ) {
0 commit comments