20 lines
653 B
Fortran
20 lines
653 B
Fortran
SUBROUTINE psdes(lword,irword)
|
|
INTEGER irword,lword,NITER
|
|
PARAMETER (NITER=4)
|
|
INTEGER i,ia,ib,iswap,itmph,itmpl,c1(4),c2(4)
|
|
SAVE c1,c2
|
|
DATA c1 /16#BAA96887,16#1E17D32C,16#03BCDC3C,16#0F33D1B2/, c2
|
|
*/16#4B0F3B58,16#E874F0C3,16#6955C5A6, 16#55A7CA46/
|
|
do 11 i=1,NITER
|
|
iswap=irword
|
|
ia=ieor(irword,c1(i))
|
|
itmpl=iand(ia,65535)
|
|
itmph=iand(ishft(ia,-16),65535)
|
|
ib=itmpl**2+not(itmph**2)
|
|
ia=ior(ishft(ib,16),iand(ishft(ib,-16),65535))
|
|
irword=ieor(lword,ieor(c2(i),ia)+itmpl*itmph)
|
|
lword=iswap
|
|
11 continue
|
|
return
|
|
END
|