www.pudn.com > xiaobo.zip.zip > wt_tsc.c


 
#include "tsc.h" 
#include  
 
#define CPU_HZ (CPU_MHZ*1000000.0) 
 
void printTSC(double tsc, FILE *outF) 
{ 
fprintf(outF,"%d.%04d",(int)tsc,(int)(tsc*10000.0)); 
} 
/** extern assembly from rdtsc.asm ***/ 
 
#ifdef PENTIUM	/** use the TSC ***/ 
 
#ifdef _MSC_VER 
 
extern void RDTSC_FUNC(ulong *a,ulong *b); 
#define _RDTSC_FUNC RDTSC_FUNC 
 
#else 
 
extern void _RDTSC_FUNC(ulong *a,ulong *b); 
 
#endif 
 
static ulong TSC_H_1,TSC_L_1; 
static ulong TSC_H_2,TSC_L_2; 
 
void startTSC(void) 
{ 
_RDTSC_FUNC(&TSC_H_1,&TSC_L_1); 
} 
 
#define msw_scale (4294967296.0/CPU_HZ) 
#define lsw_scale (1.0/CPU_HZ) 
 
double diffTSC(void) 
{ 
 
_RDTSC_FUNC(&TSC_H_2,&TSC_L_2); 
 
return	(TSC_H_2 - TSC_H_1)*msw_scale + 
		(TSC_L_2 - TSC_L_1)*lsw_scale; 
 
} 
 
#else // no PENTIUM : fake it 
 
static clock_t save_clock; 
 
void startTSC(void) { save_clock = clock(); } 
double diffTSC(void){ return ((double)(clock() - save_clock) / (double)CLOCKS_PER_SEC); } 
 
#endif // PENTIUM