!
!You should have received a copy of the GNU General Public
!License along with libgfortran; see the file COPYING. If not,
-!write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-!Boston, MA 02111-1307, USA.
+!write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+!Boston, MA 02110-1301, USA.
!
! Specifics for the intrinsics whose calling conventions change if
! -ff2c is used.
! one argument functions
#define REAL_HEAD(NAME) \
-elemental function f2c_specific__/**/NAME/**/_r4 (parm) result(res);
+elemental function _gfortran_f2c_specific__/**/NAME/**/_r4 (parm) result(res);
#define REAL_BODY(NAME) \
REAL, intent (in) :: parm; \
end function
#define COMPLEX_HEAD(NAME) \
-subroutine f2c_specific__/**/NAME/**/_c4 (res, parm);
+subroutine _gfortran_f2c_specific__/**/NAME/**/_c4 (res, parm);
#define COMPLEX_BODY(NAME) \
COMPLEX, intent (in) :: parm; \
end subroutine
#define DCOMPLEX_HEAD(NAME) \
-subroutine f2c_specific__/**/NAME/**/_c8 (res, parm);
+subroutine _gfortran_f2c_specific__/**/NAME/**/_c8 (res, parm);
#define DCOMPLEX_BODY(NAME) \
DOUBLE COMPLEX, intent (in) :: parm; \
REAL_HEAD(abs)
REAL_BODY(abs)
+
! abs is special in that the result is real
-elemental function f2c_specific__abs_c4 (parm) result (res)
+elemental function _gfortran_f2c_specific__abs_c4 (parm) result (res)
COMPLEX, intent(in) :: parm
DOUBLE PRECISION :: res
res = abs(parm)
end function
+
+! aimag is special in that the result is real
+elemental function _gfortran_f2c_specific__aimag_c4 (parm)
+ complex(kind=4), intent(in) :: parm
+ double precision :: _gfortran_f2c_specific__aimag_c4
+ _gfortran_f2c_specific__aimag_c4 = aimag(parm)
+end function
+
+elemental function _gfortran_f2c_specific__aimag_c8 (parm)
+ complex(kind=8), intent(in) :: parm
+ double precision :: _gfortran_f2c_specific__aimag_c8
+ _gfortran_f2c_specific__aimag_c8 = aimag(parm)
+end function
+
+
REAL_HEAD(exp)
REAL_BODY(exp)
COMPLEX_HEAD(exp)
REAL_HEAD(atan)
REAL_BODY(atan)
+REAL_HEAD(asinh)
+REAL_BODY(asinh)
+
+REAL_HEAD(acosh)
+REAL_BODY(acosh)
+
+REAL_HEAD(atanh)
+REAL_BODY(atanh)
+
REAL_HEAD(sin)
REAL_BODY(sin)
COMPLEX_HEAD(sin)
REAL_HEAD(tanh)
REAL_BODY(tanh)
-COMPLEX_HEAD(conjg)
-COMPLEX_BODY(conjg)
-DCOMPLEX_HEAD(conjg)
-DCOMPLEX_BODY(conjg)
-
REAL_HEAD(aint)
REAL_BODY(aint)
! two argument functions
#define REAL2_HEAD(NAME) \
-elemental function f2c_specific__/**/NAME/**/_r4 (p1, p2) result(res);
+elemental function _gfortran_f2c_specific__/**/NAME/**/_r4 (p1, p2) result(res);
#define REAL2_BODY(NAME) \
REAL, intent (in) :: p1, p2; \
REAL2_HEAD(mod)
REAL2_BODY(mod)
+
+! conjg is special-cased because it is not suffixed _c4 but _4
+subroutine _gfortran_f2c_specific__conjg_4 (res, parm)
+ COMPLEX, intent (in) :: parm
+ COMPLEX, intent (out) :: res
+ res = conjg (parm)
+end subroutine
+subroutine _gfortran_f2c_specific__conjg_8 (res, parm)
+ DOUBLE COMPLEX, intent (in) :: parm
+ DOUBLE COMPLEX, intent (out) :: res
+ res = conjg (parm)
+end subroutine
+