1* 2* $Id$ 3* 4 subroutine daxpy(n,da,dx,incx,dy,incy) 5c 6c constant times a vector plus a vector. 7c uses unrolled loops for increments equal to one. 8c jack dongarra, linpack, 3/11/78. 9c 10 double precision dx(1),dy(1),da 11 integer i,incx,incy,m,mp1,n 12c 13 if(n.le.0)return 14 if (da .eq. 0.0d0) return 15 if(incx.eq.1.and.incy.eq.1)go to 20 16c 17c code for unequal increments or equal increments 18c not equal to 1 19c 20 ix = 1 21 iy = 1 22 if(incx.lt.0)ix = (-n+1)*incx + 1 23 if(incy.lt.0)iy = (-n+1)*incy + 1 24 do 10 i = 1,n 25 dy(iy) = dy(iy) + da*dx(ix) 26 ix = ix + incx 27 iy = iy + incy 28 10 continue 29 return 30c 31c code for both increments equal to 1 32c 33c 34c clean-up loop 35c 36 20 m = mod(n,4) 37 if( m .eq. 0 ) go to 40 38 do 30 i = 1,m 39 dy(i) = dy(i) + da*dx(i) 40 30 continue 41 if( n .lt. 4 ) return 42 40 mp1 = m + 1 43 do 50 i = mp1,n,4 44 dy(i) = dy(i) + da*dx(i) 45 dy(i + 1) = dy(i + 1) + da*dx(i + 1) 46 dy(i + 2) = dy(i + 2) + da*dx(i + 2) 47 dy(i + 3) = dy(i + 3) + da*dx(i + 3) 48 50 continue 49 return 50 end 51