Xref: utzoo comp.lang.c:5848 comp.lang.fortran:322 Path: utzoo!mnetor!uunet!husc6!hao!ames!ptsfa!ihnp4!ttrdc!levy From: levy@ttrdc.UUCP (Daniel R. Levy) Newsgroups: comp.lang.c,comp.lang.fortran Subject: Fortran copy-in/copy-out (was Re: some objections to 'noalias') Message-ID: <2068@ttrdc.UUCP> Date: 25 Dec 87 02:40:08 GMT References: <485@cresswell.quintus.UUCP> <1453@cuuxb.ATT.COM> <9934@mimsy.UUCP> Organization: AT&T, Skokie, IL Lines: 60 In article <9934@mimsy.UUCP>, chris@mimsy.UUCP (Chris Torek) writes: >In article <1453@cuuxb.ATT.COM> mmengel@cuuxb.ATT.COM (Marc W. Mengel) writes: >>Fortran uses copy-in copy-out address passing.... >Some FORTRAN compilers may indeed use copy-in/copy-out (I believe this >is usually called `value-result'), but I think it is not mandated. UNIX f77 uses pass-by-address for FORTRAN parameter passing, but still implements a copy-in copy-out scheme where this would make a difference (i.e., where an operation is not atomic, as for arithmetic on complex numbers). Therefore, a routine like this: subroutine multd(d1,d2,d3) double precision d1, d2, d3 d3 = d1 * d2 return end produces object code like this: multd_: fmuld3 *4(%ap),*0(%ap),*8(%ap) ret &0 whereas subroutine multc(c1,c2,c3) complex c1, c2, c3 c3 = c1 * c2 return end produces: multc_: fmuls3 *4(%ap),*0(%ap),%r0 /* r0 = c1.real * c2.real */ movw 0(%ap),%r1 movw 4(%ap),%r2 fmuls3 4(%r2),4(%r1),%r1 /* r1 = c1.imag * c2.imag */ fsubs2 %r1,%r0 /* real part of result = r0 - r1 */ movw %r0,0(%fp) /* save it in a temporary */ movw 4(%ap),%r0 fmuls3 *0(%ap),4(%r0),%r0 /* r0 = c1.real * c2.imag */ movw 0(%ap),%r1 fmuls3 *4(%ap),4(%r1),%r1 /* r1 = c1.imag * c2.real */ fadds2 %r1,%r0 /* imag. part of result = r0 + r1 */ movw %r0,4(%fp) /* save it in a temporary */ movw 0(%fp),*8(%ap) /* store real part of result */ movw 8(%ap),%r0 movw 4(%fp),4(%r0) /* then imaginary part of result */ ret &0 So, you see, the FORTRAN compiler has covered its tail with respect to aliasing of arguments. (I believe this is the way the compiler is "supposed" to behave.) -- |------------Dan Levy------------| Path: ..!{akgua,homxb,ihnp4,ltuxa,mvuxa, | an Engihacker @ | }!ttrdc!ttrda!levy | AT&T Computer Systems Division | Disclaimer? Huh? What disclaimer??? |--------Skokie, Illinois--------|