| ! { dg-do compile } |
| ! { dg-options "-Ofast" } |
| SUBROUTINE foo (a,b,c,d,trigs,inc1,inc2,inc3,inc4,lot,n,la) |
| IMPLICIT NONE (type, external) |
| INTEGER, PARAMETER :: wp = 8 |
| INTEGER, PARAMETER :: iwp = 4 |
| INTEGER(iwp) :: inc1 |
| INTEGER(iwp) :: inc2 |
| INTEGER(iwp) :: inc3 |
| INTEGER(iwp) :: inc4 |
| INTEGER(iwp) :: la |
| INTEGER(iwp) :: lot |
| INTEGER(iwp) :: n |
| |
| REAL(wp) :: a(*) |
| REAL(wp) :: b(*) |
| REAL(wp) :: c(*) |
| REAL(wp) :: d(*) |
| REAL(wp) :: trigs(*) |
| |
| REAL(wp) :: c1 |
| REAL(wp) :: c2 |
| REAL(wp) :: s1 |
| REAL(wp) :: s2 |
| REAL(wp) :: sin60 |
| |
| INTEGER(iwp) :: i |
| INTEGER(iwp) :: ia |
| INTEGER(iwp) :: ib |
| INTEGER(iwp) :: ibase |
| INTEGER(iwp) :: ic |
| INTEGER(iwp) :: iink |
| INTEGER(iwp) :: ijk |
| INTEGER(iwp) :: j |
| INTEGER(iwp) :: ja |
| INTEGER(iwp) :: jb |
| INTEGER(iwp) :: jbase |
| INTEGER(iwp) :: jc |
| INTEGER(iwp) :: jink |
| INTEGER(iwp) :: jump |
| INTEGER(iwp) :: k |
| INTEGER(iwp) :: kb |
| INTEGER(iwp) :: kc |
| INTEGER(iwp) :: kstop |
| INTEGER(iwp) :: l |
| INTEGER(iwp) :: m |
| |
| sin60=0.866025403784437_wp |
| |
| ia = 1 |
| ib = ia + (2*m-la)*inc1 |
| ic = ib |
| ja = 1 |
| jb = ja + jink |
| jc = jb + jink |
| |
| DO k = la, kstop, la |
| kb = k + k |
| kc = kb + kb |
| c1 = trigs(kb+1) |
| s1 = trigs(kb+2) |
| c2 = trigs(kc+1) |
| s2 = trigs(kc+2) |
| ibase = 0 |
| DO l = 1, la |
| i = ibase |
| j = jbase |
| DO ijk = 1, lot |
| c(ja+j) = a(ia+i) + (a(ib+i)+a(ic+i)) |
| d(ja+j) = b(ia+i) + (b(ib+i)-b(ic+i)) |
| c(jb+j) = c1*((a(ia+i)-0.5_wp*(a(ib+i)+a(ic+i)))-(sin60*(b(ib+i)+ & |
| & b(ic+i)))) & |
| & - s1*((b(ia+i)-0.5_wp*(b(ib+i)-b(ic+i)))+(sin60*(a(ib+i)- & |
| & a(ic+i)))) |
| d(jb+j) = s1*((a(ia+i)-0.5_wp*(a(ib+i)+a(ic+i)))-(sin60*(b(ib+i)+ & |
| & b(ic+i)))) & |
| & + c1*((b(ia+i)-0.5_wp*(b(ib+i)-b(ic+i)))+(sin60*(a(ib+i)- & |
| & a(ic+i)))) |
| c(jc+j) = c2*((a(ia+i)-0.5_wp*(a(ib+i)+a(ic+i)))+(sin60*(b(ib+i)+ & |
| & b(ic+i)))) & |
| & - s2*((b(ia+i)-0.5_wp*(b(ib+i)-b(ic+i)))-(sin60*(a(ib+i)- & |
| & a(ic+i)))) |
| i = i + inc3 |
| j = j + inc4 |
| END DO |
| ibase = ibase + inc1 |
| jbase = jbase + inc2 |
| END DO |
| ia = ia + iink |
| ib = ib + iink |
| ic = ic - iink |
| jbase = jbase + jump |
| END DO |
| END |