Annotation of quake2/client/x86.c, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.