Fortran Programming Guide

Returning COMPLEX Data

A Fortran function returning COMPLEX or DOUBLE COMPLEX is equivalent to a C function with an additional first argument that points to the return value in memory. The general pattern for the Fortran function and its corresponding C function is:

Fortran function 

C function 

COMPLEX FUNCTION CF(a1, a2, ..., an)

cf_ ()return, a1, a2, ..., an

struct { float r, i; } *;return

Table 11-14 Function Returning COMPLEX Data

Fortran calls C 

C calls Fortran 

COMPLEX U, V, RETCPX

EXTERNAL RETCPX

U = ( 7.0, -8.0)

V = RETCPX(U)

...

------------------------------

struct complex { float r, i; };

void retcpx_( temp, w )

struct complex *temp, *w;

{

temp->r = w->r + 1.0;

temp->i = w->i + 1.0;

return;

}

struct complex { float r, i; };

struct complex c1, c2;

struct complex *u=&c1, *v=&c2;

extern retfpx_();

u -> r = 7.0;

u -> i = -8.0;

retfpx_( v, u );

...

------------------------------

COMPLEX FUNCTION RETFPX(Z)

COMPLEX Z

RETFPX = Z + (1.0, 1.0)

RETURN

END

In 64-bit environments and compiling with -xarch=v9, COMPLEX values are returned in floating-point registers: COMPLEX and DOUBLE COMPLEX in %f0 and %f1, and COMPLEX*32 in %f0, %f1, %f2, and %f3.