X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=libgfortran%2Fintrinsics%2Fetime.c;h=0ecba26359a240c7ba0050e015a4f49518fd8d4f;hp=0cb74719f1b1ce1414324a84baa1a460b25e17b0;hb=dd6c1457b279f399a5cbecbce067851a494e954f;hpb=c0d02c82ff98a20e198267d59aedf596353c7dea diff --git a/libgfortran/intrinsics/etime.c b/libgfortran/intrinsics/etime.c index 0cb74719f1b..0ecba26359a 100644 --- a/libgfortran/intrinsics/etime.c +++ b/libgfortran/intrinsics/etime.c @@ -1,5 +1,5 @@ /* Implementation of the ETIME intrinsic. - Copyright (C) 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Contributed by Steven G. Kargl . This file is part of the GNU Fortran 95 runtime library (libgfortran). @@ -25,19 +25,11 @@ GNU General Public License for more details. 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. */ -#include "config.h" -#include #include "libgfortran.h" - -#include - -#if defined (HAVE_SYS_TIME_H) && defined (HAVE_SYS_RESOURCE_H) -#include -#include -#endif +#include "time_1.h" extern void etime_sub (gfc_array_r4 *t, GFC_REAL_4 *result); iexport_proto(etime_sub); @@ -46,33 +38,23 @@ void etime_sub (gfc_array_r4 *t, GFC_REAL_4 *result) { GFC_REAL_4 tu, ts, tt, *tp; + long user_sec, user_usec, system_sec, system_usec; -#if defined(HAVE_SYS_TIME_H) && defined(HAVE_SYS_RESOURCE_H) - struct rusage rt; + if (((t->dim[0].ubound + 1 - t->dim[0].lbound)) < 2) + runtime_error ("Insufficient number of elements in TARRAY."); - if (getrusage(RUSAGE_SELF, &rt) == 0) + if (__time_1 (&user_sec, &user_usec, &system_sec, &system_usec) == 0) { - tu = (GFC_REAL_4)(rt.ru_utime.tv_sec + 1.e-6 * rt.ru_utime.tv_usec); - ts = (GFC_REAL_4)(rt.ru_stime.tv_sec + 1.e-6 * rt.ru_stime.tv_usec); + tu = (GFC_REAL_4)(user_sec + 1.e-6 * user_usec); + ts = (GFC_REAL_4)(system_sec + 1.e-6 * system_usec); tt = tu + ts; } else { - tu = -1.; - ts = -1.; - tt = -1.; + tu = (GFC_REAL_4)-1.0; + ts = (GFC_REAL_4)-1.0; + tt = (GFC_REAL_4)-1.0; } -#else - tu = -1.; - ts = -1.; - tt = -1.; -#endif - - if (((t->dim[0].ubound + 1 - t->dim[0].lbound)) < 2) - runtime_error ("Insufficient number of elements in TARRAY."); - - if (t->dim[0].stride == 0) - t->dim[0].stride = 1; tp = t->data; @@ -93,25 +75,3 @@ etime (gfc_array_r4 *t) etime_sub (t, &val); return val; } - -/* LAPACK's test programs declares ETIME external, therefore we - need this. */ - -extern GFC_REAL_4 etime_ (GFC_REAL_4 *t); -export_proto_np(etime_); - -GFC_REAL_4 -etime_ (GFC_REAL_4 *t) -{ - gfc_array_r4 desc; - GFC_REAL_4 val; - - /* We only fill in the fields that are used in etime_sub. */ - desc.dim[0].lbound = 0; - desc.dim[0].ubound = 1; - desc.dim[0].stride = 1; - desc.data = t; - - etime_sub (&desc, &val); - return val; -}