Hi, some targets such as VXWorks don't provide gettimeofday but do provide clock_gettime. The attached patch allows such targets to get better resolution for the DATE_AND_TIME (up to the 1 millisecond limit of the API) intrinsic than the 1 second resolution provided by the current fallback of using the C standard time().
(SYSTEM_CLOCK already uses clock_gettime if available and thus nanosecond resultion has been available to vxworks also before this patch.) Ok for trunk? (Patch both inline below and as an attachment) 2012-05-23 Janne Blomqvist <j...@gcc.gnu.org> PR fortran/53456 * intrinsics/time_1.h (gf_gettime): Fallback for clock_gettime. diff --git a/libgfortran/intrinsics/time_1.h b/libgfortran/intrinsics/time_1.h index aaca56a..ca5b26b 100644 --- a/libgfortran/intrinsics/time_1.h +++ b/libgfortran/intrinsics/time_1.h @@ -181,8 +181,8 @@ gf_cputime (long *user_sec, long *user_usec, long *system_sec, long *system_usec #endif -/* Realtime clock with microsecond resolution, falling back to less - precise functions if the target does not support gettimeofday(). +/* Realtime clock with microsecond resolution, falling back to other + functions if the target does not support gettimeofday(). Arguments: secs - OUTPUT, seconds @@ -204,6 +204,12 @@ gf_gettime (time_t * secs, long * usecs) *secs = tv.tv_sec; *usecs = tv.tv_usec; return err; +#elif defined(HAVE_CLOCK_GETTIME) + struct timespec ts; + int err = clock_gettime (CLOCK_REALTIME, &ts); + *secs = ts.tv_sec; + *usecs = ts.tv_nsec / 1000; + return err; #else time_t t = time (NULL); *secs = t; -- Janne Blomqvist
vxtime.diff
Description: Binary data