|
|
1.1 ! root 1: #include <stdlib.h> ! 2: #include "client.h" ! 3: ! 4: #if id386 ! 5: ! 6: static unsigned long bias; ! 7: static unsigned long *histogram; ! 8: static unsigned long start, range; ! 9: static unsigned long bias; ! 10: ! 11: __declspec( naked ) void x86_TimerStart( void ) ! 12: { ! 13: __asm _emit 0fh ! 14: __asm _emit 31h ! 15: __asm mov start, eax ! 16: __asm ret ! 17: } ! 18: ! 19: __declspec( naked ) void x86_TimerStop( void ) ! 20: { ! 21: __asm push edi ! 22: __asm mov edi, histogram ! 23: __asm _emit 0fh ! 24: __asm _emit 31h ! 25: __asm sub eax, start ! 26: __asm sub eax, bias ! 27: __asm js discard ! 28: __asm cmp eax, range ! 29: __asm jge discard ! 30: __asm lea edi, [edi + eax*4] ! 31: __asm inc dword ptr [edi] ! 32: discard: ! 33: __asm pop edi ! 34: __asm ret ! 35: } ! 36: ! 37: #pragma warning( disable: 4035 ) ! 38: static __declspec( naked ) unsigned long x86_TimerStopBias( void ) ! 39: { ! 40: __asm push edi ! 41: __asm mov edi, histogram ! 42: __asm _emit 0fh ! 43: __asm _emit 31h ! 44: __asm sub eax, start ! 45: __asm pop edi ! 46: __asm ret ! 47: } ! 48: #pragma warning( default:4035 ) ! 49: ! 50: void x86_TimerInit( unsigned long smallest, unsigned length ) ! 51: { ! 52: int i; ! 53: unsigned long biastable[100]; ! 54: ! 55: range = length; ! 56: bias = 10000; ! 57: ! 58: for ( i = 0; i < 100; i++ ) ! 59: { ! 60: x86_TimerStart(); ! 61: biastable[i] = x86_TimerStopBias(); ! 62: ! 63: if ( bias > biastable[i] ) ! 64: bias = biastable[i]; ! 65: } ! 66: ! 67: bias += smallest; ! 68: histogram = Z_Malloc( range * sizeof( unsigned long ) ); ! 69: } ! 70: ! 71: unsigned long *x86_TimerGetHistogram( void ) ! 72: { ! 73: return histogram; ! 74: } ! 75: ! 76: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.