Annotation of previous/src/cpu/events_jit.h, revision 1.1

1.1     ! root        1: /* Let's see whether hiding this away somewhere where the compiler can't
        !             2: see it will cure it of its silly urge to mis-optimize the comparison */
        !             3: extern long int diff32(frame_time_t x, frame_time_t y);
        !             4: extern int pissoff_value;
        !             5: 
        !             6: STATIC_INLINE void events_schedule (void)
        !             7: {
        !             8:        int i;
        !             9: 
        !            10:        unsigned long int mintime = ~0L;
        !            11:        for (i = 0; i < ev_max; i++) {
        !            12:                if (eventtab[i].active) {
        !            13:                        unsigned long int eventtime = eventtab[i].evtime - currcycle;
        !            14: #ifdef EVENT_DEBUG
        !            15:                        if (eventtime == 0) {
        !            16:                                write_log ("event %d bug\n",i);
        !            17:                        }
        !            18: #endif
        !            19:                        if (eventtime < mintime)
        !            20:                                mintime = eventtime;
        !            21:                }
        !            22:        }
        !            23:        nextevent = currcycle + mintime;
        !            24: }
        !            25: 
        !            26: extern signed long pissoff;
        !            27: 
        !            28: STATIC_INLINE void cycles_do_special (void)
        !            29: {
        !            30: #ifdef JIT
        !            31:        if (currprefs.cachesize) {
        !            32:                if (pissoff >= 0)
        !            33:                        pissoff = -1;
        !            34:        } else
        !            35: #endif
        !            36:        {
        !            37:                pissoff = 0;
        !            38:        }
        !            39: }
        !            40: 
        !            41: STATIC_INLINE void do_extra_cycles (unsigned long cycles_to_add)
        !            42: {
        !            43:        pissoff -= cycles_to_add;
        !            44: }
        !            45: 
        !            46: STATIC_INLINE unsigned long int get_cycles (void)
        !            47: {
        !            48:        return currcycle;
        !            49: }
        !            50: 
        !            51: STATIC_INLINE void set_cycles (unsigned long int x)
        !            52: {
        !            53:        currcycle = x;
        !            54: #ifdef EVT_DEBUG
        !            55:        if (currcycle & (CYCLE_UNIT - 1))
        !            56:                write_log (L"%x\n", currcycle);
        !            57: #endif
        !            58: }
        !            59: 
        !            60: STATIC_INLINE void do_cycles_slow (unsigned long cycles_to_add)
        !            61: {
        !            62:        if ((pissoff -= cycles_to_add) >= 0)
        !            63:                return;
        !            64: 
        !            65:        cycles_to_add = -pissoff;
        !            66:        pissoff = 0;
        !            67: 
        !            68:        if (is_lastline && eventtab[ev_hsync].evtime - currcycle <= cycles_to_add) {
        !            69:                int rpt = read_processor_time ();
        !            70:                int v = rpt - vsyncmintime;
        !            71:                if (v > (int)syncbase || v < -((int)syncbase))
        !            72:                        vsyncmintime = rpt;
        !            73:                if (v < 0) {
        !            74:                        pissoff = pissoff_value * CYCLE_UNIT;
        !            75:                        return;
        !            76:                }
        !            77:        }
        !            78:        while ((nextevent - currcycle) <= cycles_to_add) {
        !            79:                int i;
        !            80:                cycles_to_add -= (nextevent - currcycle);
        !            81:                currcycle = nextevent;
        !            82: 
        !            83:                for (i = 0; i < ev_max; i++) {
        !            84:                        if (eventtab[i].active && eventtab[i].evtime == currcycle) {
        !            85:                                (*eventtab[i].handler)();
        !            86:                        }
        !            87:                }
        !            88:                events_schedule ();
        !            89:        }
        !            90:        currcycle += cycles_to_add;
        !            91: #ifdef EVT_DEBUG
        !            92:        if (currcycle & (CYCLE_UNIT - 1))
        !            93:                write_log (L"%x\n", currcycle);
        !            94: #endif
        !            95: }
        !            96: 
        !            97: #define do_cycles do_cycles_slow
        !            98: #define countdown pissoff
        !            99: 
        !           100: /* This is a special-case function.  Normally, all events should lie in the
        !           101: future; they should only ever be active at the current cycle during
        !           102: do_cycles.  However, a snapshot is saved during do_cycles, and so when
        !           103: restoring it, we may have other events pending.  */
        !           104: 
        !           105: STATIC_INLINE void handle_active_events (void)
        !           106: {
        !           107:        int i;
        !           108:        for (i = 0; i < ev_max; i++) {
        !           109:                if (eventtab[i].active && eventtab[i].evtime == currcycle) {
        !           110:                        (*eventtab[i].handler)();
        !           111:                }
        !           112:        }
        !           113: }

unix.superglobalmegacorp.com

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