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