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