comparison libcruft/blas/dcopy.f @ 2608:bac14003d9bb

[project @ 1997-01-18 00:11:48 by jwe]
author jwe
date Sat, 18 Jan 1997 00:13:08 +0000
parents 30c606bec7a8
children
comparison
equal deleted inserted replaced
2607:a3792f2bf9ff 2608:bac14003d9bb
1 SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) 1 subroutine dcopy(n,dx,incx,dy,incy)
2 C 2 c
3 C COPIES A VECTOR, X, TO A VECTOR, Y. 3 c copies a vector, x, to a vector, y.
4 C USES UNROLLED LOOPS FOR INCREMENTS EQUAL TO ONE. 4 c uses unrolled loops for increments equal to one.
5 C JACK DONGARRA, LINPACK, 3/11/78. 5 c jack dongarra, linpack, 3/11/78.
6 C 6 c modified 12/3/93, array(1) declarations changed to array(*)
7 DOUBLE PRECISION DX(1),DY(1) 7 c
8 INTEGER I,INCX,INCY,IX,IY,M,MP1,N 8 double precision dx(*),dy(*)
9 C 9 integer i,incx,incy,ix,iy,m,mp1,n
10 IF(N.LE.0)RETURN 10 c
11 IF(INCX.EQ.1.AND.INCY.EQ.1)GO TO 20 11 if(n.le.0)return
12 C 12 if(incx.eq.1.and.incy.eq.1)go to 20
13 C CODE FOR UNEQUAL INCREMENTS OR EQUAL INCREMENTS 13 c
14 C NOT EQUAL TO 1 14 c code for unequal increments or equal increments
15 C 15 c not equal to 1
16 IX = 1 16 c
17 IY = 1 17 ix = 1
18 IF(INCX.LT.0)IX = (-N+1)*INCX + 1 18 iy = 1
19 IF(INCY.LT.0)IY = (-N+1)*INCY + 1 19 if(incx.lt.0)ix = (-n+1)*incx + 1
20 DO 10 I = 1,N 20 if(incy.lt.0)iy = (-n+1)*incy + 1
21 DY(IY) = DX(IX) 21 do 10 i = 1,n
22 IX = IX + INCX 22 dy(iy) = dx(ix)
23 IY = IY + INCY 23 ix = ix + incx
24 10 CONTINUE 24 iy = iy + incy
25 RETURN 25 10 continue
26 C 26 return
27 C CODE FOR BOTH INCREMENTS EQUAL TO 1 27 c
28 C 28 c code for both increments equal to 1
29 C 29 c
30 C CLEAN-UP LOOP 30 c
31 C 31 c clean-up loop
32 20 M = MOD(N,7) 32 c
33 IF( M .EQ. 0 ) GO TO 40 33 20 m = mod(n,7)
34 DO 30 I = 1,M 34 if( m .eq. 0 ) go to 40
35 DY(I) = DX(I) 35 do 30 i = 1,m
36 30 CONTINUE 36 dy(i) = dx(i)
37 IF( N .LT. 7 ) RETURN 37 30 continue
38 40 MP1 = M + 1 38 if( n .lt. 7 ) return
39 DO 50 I = MP1,N,7 39 40 mp1 = m + 1
40 DY(I) = DX(I) 40 do 50 i = mp1,n,7
41 DY(I + 1) = DX(I + 1) 41 dy(i) = dx(i)
42 DY(I + 2) = DX(I + 2) 42 dy(i + 1) = dx(i + 1)
43 DY(I + 3) = DX(I + 3) 43 dy(i + 2) = dx(i + 2)
44 DY(I + 4) = DX(I + 4) 44 dy(i + 3) = dx(i + 3)
45 DY(I + 5) = DX(I + 5) 45 dy(i + 4) = dx(i + 4)
46 DY(I + 6) = DX(I + 6) 46 dy(i + 5) = dx(i + 5)
47 50 CONTINUE 47 dy(i + 6) = dx(i + 6)
48 RETURN 48 50 continue
49 END 49 return
50 end