gnu / gcc / e5cfb9cac1d7aba9a8ea73bfe7922cfaff9d61f3 / . / gcc / testsuite / gfortran.fortran-torture / execute / pr40021.f

C Derived from lapack | |

PROGRAM test | |

DOUBLE PRECISION DA | |

INTEGER I, N | |

DOUBLE PRECISION DX(9),DY(9) | |

EXTERNAL DAXPY | |

N=5 | |

DA=1.0 | |

DATA DX/-2, -1, -3, -4, 1, 2, 10, 15, 14/ | |

DATA DY/0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0/ | |

CALL DAXPY (N,DA,DX,DY) | |

DO 10 I = 1, N | |

if (DX(I).ne.DY(I)) STOP 1 | |

10 CONTINUE | |

STOP | |

END | |

SUBROUTINE DAXPY(N,DA,DX,DY) | |

DOUBLE PRECISION DA | |

INTEGER N | |

DOUBLE PRECISION DX(*),DY(*) | |

INTEGER I,IX,IY,M,MP1 | |

INTRINSIC MOD | |

IF (N.LE.0) RETURN | |

20 M = MOD(N,4) | |

IF (M.EQ.0) GO TO 40 | |

DO 30 I = 1,M | |

DY(I) = DY(I) + DA*DX(I) | |

30 CONTINUE | |

IF (N.LT.4) RETURN | |

40 MP1 = M + 1 | |

DO 50 I = MP1,N,4 | |

DY(I) = DY(I) + DA*DX(I) | |

DY(I+1) = DY(I+1) + DA*DX(I+1) | |

DY(I+2) = DY(I+2) + DA*DX(I+2) | |

DY(I+3) = DY(I+3) + DA*DX(I+3) | |

50 CONTINUE | |

RETURN | |

END |