Mercurial > hg > octave-nkf
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 |