1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /** (c) Nullsoft, Inc. C O N F I D E N T I A L
- ** Filename:
- ** Project:
- ** Description:
- ** Author:
- ** Created:
- **/
- #include "main.h"
- #include "timing.h"
- #ifdef TIMING
- #ifndef __alpha
- static struct {
- unsigned int st_time[2];
- unsigned int cycles;
- unsigned int calls;
- } timingInfo[64];
- static int timingEnters;
- static void rdtsc(unsigned int t[2])
- {
- __asm
- {
- mov esi, t
- _emit 0xf
- _emit 0x31
- mov [esi], eax
- mov [esi+4], edx
- }
- }
-
- void _timingInit()
- {
- memset(timingInfo,0,sizeof(timingInfo));
- }
- void _timingEnter(int which)
- {
- // if (!timingEnters++) __asm cli
- rdtsc(timingInfo[which].st_time);
- }
- void _timingLeave(int which)
- {
- unsigned int t[2];
- rdtsc(t);
- // if (!--timingEnters) __asm sti
- if (t[1]==timingInfo[which].st_time[1])
- {
- timingInfo[which].cycles += t[0]-timingInfo[which].st_time[0];
- }
- else
- {
- timingInfo[which].cycles += t[0]+(0xffffffff-timingInfo[which].st_time[0]);
- }
- timingInfo[which].calls++;
- }
- void _timingPrint()
- {
- int x;
- FILE *fp = fopen("C:\\timings.txt","a+t");
- for (x = 0; x < sizeof(timingInfo)/sizeof(timingInfo[0]); x ++)
- {
- if (timingInfo[x].calls)
- fprintf(fp,"%d: %d calls, %d clocks/call\n",x,timingInfo[x].calls,timingInfo[x].cycles/timingInfo[x].calls);
- }
- _timingInit();
- fclose(fp);
- }
- #endif
- #endif
|