Skip to content

Commit

Permalink
Implement dtime3f for windows. credits to xoviat
Browse files Browse the repository at this point in the history
  • Loading branch information
isuruf authored and xoviat committed Dec 23, 2017
1 parent c3a67fa commit 2dc1e0c
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 1 deletion.
30 changes: 30 additions & 0 deletions runtime/flang/dtime3f.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#define CLK_TCK sysconf(_SC_CLK_TCK)
#endif

#ifndef _WIN32
static clock_t accum_user = 0, accum_sys = 0;

float ENT3F(DTIME, dtime)(float *tarray)
Expand All @@ -49,4 +50,33 @@ float ENT3F(DTIME, dtime)(float *tarray)
accum_sys = b.tms_stime;
return (tarray[0] + tarray[1]);
}
#else
#include <Windows.h>
static FILETIME accum_user;
static FILETIME accum_sys;

float convert_filetime( const FILETIME *ac_FileTime )
{
ULARGE_INTEGER lv_Large ;

lv_Large.LowPart = ac_FileTime->dwLowDateTime ;
lv_Large.HighPart = ac_FileTime->dwHighDateTime ;

return (float)lv_Large.QuadPart ;
}

float ENT3F(DTIME, dtime)(float *tarray)
{

FILETIME time_create;
FILETIME time_exit;

GetProcessTimes( GetCurrentProcess(),
&time_create, &time_exit, &accum_sys, &accum_user );

tarray[0] = ((float)(convert_filetime(&accum_user)));
tarray[1] = ((float)(convert_filetime(&accum_sys)));
return (tarray[0] + tarray[1]);
}
#endif

31 changes: 30 additions & 1 deletion runtime/flang/etime3f.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,17 @@

#ifndef _WIN32
#include <unistd.h>
#include <sys/times.h>
#endif
#define _LIBC_LIMITS_H_
#include <sys/types.h>
#include <sys/times.h>
#include <limits.h>

#ifndef CLK_TCK
#define CLK_TCK sysconf(_SC_CLK_TCK)
#endif

#ifndef _WIN32
float ENT3F(ETIME, etime)(float *tarray)
{
struct tms b;
Expand All @@ -48,3 +49,31 @@ float ENT3F(ETIME, etime)(float *tarray)
return (tarray[0] + tarray[1]);
}

#else
#include <Windows.h>

float convert_filetime( const FILETIME *ac_FileTime )
{
ULARGE_INTEGER lv_Large ;

lv_Large.LowPart = ac_FileTime->dwLowDateTime ;
lv_Large.HighPart = ac_FileTime->dwHighDateTime ;

return (float)lv_Large.QuadPart ;
}

float ENT3F(DTIME, dtime)(float *tarray)
{
FILETIME accum_user;
FILETIME accum_sys;
FILETIME time_create;
FILETIME time_exit;

GetProcessTimes( GetCurrentProcess(),
&time_create, &time_exit, &accum_sys, &accum_user );

tarray[0] = ((float)(convert_filetime(&accum_user)));
tarray[1] = ((float)(convert_filetime(&accum_sys)));
return (tarray[0] + tarray[1]);
}
#endif

0 comments on commit 2dc1e0c

Please sign in to comment.