Annotation of previous_trunk/src/cpu/cpu_prefetch.h, revision 1.1.1.1

1.1       root        1: 
                      2: STATIC_INLINE uae_u32 get_word_prefetch (int o)
                      3: {
                      4:        uae_u32 v = regs.irc;
                      5:        regs.irc = get_wordi (m68k_getpc () + o);
                      6:        return v;
                      7: }
                      8: STATIC_INLINE uae_u32 get_long_prefetch (int o)
                      9: {
                     10:        uae_u32 v = get_word_prefetch (o) << 16;
                     11:        v |= get_word_prefetch (o + 2);
                     12:        return v;
                     13: }
                     14: 
                     15: #ifdef CPUEMU_20
                     16: 
                     17: STATIC_INLINE void checkcycles_ce020 (void)
                     18: {
                     19:        regs.ce020memcycles = 0;
                     20: }
                     21: 
                     22: STATIC_INLINE uae_u32 mem_access_delay_long_read_ce020 (uaecptr addr)
                     23: {
                     24:        checkcycles_ce020 ();
                     25:        return get_long (addr);
                     26: }
                     27: 
                     28: STATIC_INLINE uae_u32 mem_access_delay_longi_read_ce020 (uaecptr addr)
                     29: {
                     30:        checkcycles_ce020 ();
                     31:        return get_longi (addr);
                     32: }
                     33: 
                     34: STATIC_INLINE uae_u32 mem_access_delay_word_read_ce020 (uaecptr addr)
                     35: {
                     36:        checkcycles_ce020 ();
                     37:        return get_word (addr);
                     38: }
                     39: 
                     40: STATIC_INLINE uae_u32 mem_access_delay_wordi_read_ce020 (uaecptr addr)
                     41: {
                     42:        checkcycles_ce020 ();
                     43:        return get_wordi (addr);
                     44: }
                     45: 
                     46: STATIC_INLINE uae_u32 mem_access_delay_byte_read_ce020 (uaecptr addr)
                     47: {
                     48:        checkcycles_ce020 ();
                     49:        return get_byte (addr);
                     50: }
                     51: 
                     52: STATIC_INLINE void mem_access_delay_byte_write_ce020 (uaecptr addr, uae_u32 v)
                     53: {
                     54:        checkcycles_ce020 ();
                     55:        put_byte (addr, v);
                     56: }
                     57: 
                     58: STATIC_INLINE void mem_access_delay_word_write_ce020 (uaecptr addr, uae_u32 v)
                     59: {
                     60:        checkcycles_ce020 ();
                     61:        put_word (addr, v);
                     62: }
                     63: 
                     64: STATIC_INLINE void mem_access_delay_long_write_ce020 (uaecptr addr, uae_u32 v)
                     65: {
                     66:        checkcycles_ce020 ();
                     67:        put_long (addr, v);
                     68: }
                     69: 
                     70: STATIC_INLINE uae_u32 get_long_ce020 (uaecptr addr)
                     71: {
                     72:        return mem_access_delay_long_read_ce020 (addr);
                     73: }
                     74: STATIC_INLINE uae_u32 get_word_ce020 (uaecptr addr)
                     75: {
                     76:        return mem_access_delay_word_read_ce020 (addr);
                     77: }
                     78: STATIC_INLINE uae_u32 get_byte_ce020 (uaecptr addr)
                     79: {
                     80:        return mem_access_delay_byte_read_ce020 (addr);
                     81: }
                     82: 
                     83: STATIC_INLINE void put_long_ce020 (uaecptr addr, uae_u32 v)
                     84: {
                     85:        mem_access_delay_long_write_ce020 (addr, v);
                     86: }
                     87: STATIC_INLINE void put_word_ce020 (uaecptr addr, uae_u32 v)
                     88: {
                     89:        mem_access_delay_word_write_ce020 (addr, v);
                     90: }
                     91: STATIC_INLINE void put_byte_ce020 (uaecptr addr, uae_u32 v)
                     92: {
                     93:        mem_access_delay_byte_write_ce020 (addr, v);
                     94: }
                     95: 
                     96: uae_u32 get_word_ce020_prefetch (int);
                     97: 
                     98: STATIC_INLINE uae_u32 get_long_ce020_prefetch (int o)
                     99: {
                    100:        uae_u32 v;
                    101:        v = get_word_ce020_prefetch (o) << 16;
                    102:        v |= get_word_ce020_prefetch (o + 2);
                    103:        return v;
                    104: }
                    105: 
                    106: STATIC_INLINE uae_u32 next_iword_020ce (void)
                    107: {
                    108:        uae_u32 r = get_word_ce020_prefetch (0);
                    109:        m68k_incpc (2);
                    110:        return r;
                    111: }
                    112: STATIC_INLINE uae_u32 next_ilong_020ce (void)
                    113: {
                    114:        uae_u32 r = get_long_ce020_prefetch (0);
                    115:        m68k_incpc (4);
                    116:        return r;
                    117: }
                    118: 
                    119: STATIC_INLINE void m68k_do_bsr_ce020 (uaecptr oldpc, uae_s32 offset)
                    120: {
                    121:        m68k_areg (regs, 7) -= 4;
                    122:        put_long_ce020 (m68k_areg (regs, 7), oldpc);
                    123:        m68k_incpc (offset);
                    124: }
                    125: STATIC_INLINE void m68k_do_rts_ce020 (void)
                    126: {
                    127:        m68k_setpc (get_long_ce020 (m68k_areg (regs, 7)));
                    128:        m68k_areg (regs, 7) += 4;
                    129: }
                    130: #endif
                    131: 
                    132: #ifdef CPUEMU_21
                    133: 
                    134: uae_u32 get_word_ce030_prefetch (int);
                    135: void write_dcache030 (uaecptr, uae_u32, int);
                    136: uae_u32 read_dcache030 (uaecptr, int);
                    137: 
                    138: STATIC_INLINE void put_long_ce030 (uaecptr addr, uae_u32 v)
                    139: {
                    140:        write_dcache030 (addr, v, 2);
                    141:        mem_access_delay_long_write_ce020 (addr, v);
                    142: }
                    143: STATIC_INLINE void put_word_ce030 (uaecptr addr, uae_u32 v)
                    144: {
                    145:        write_dcache030 (addr, v, 1);
                    146:        mem_access_delay_word_write_ce020 (addr, v);
                    147: }
                    148: STATIC_INLINE void put_byte_ce030 (uaecptr addr, uae_u32 v)
                    149: {
                    150:        write_dcache030 (addr, v, 0);
                    151:        mem_access_delay_byte_write_ce020 (addr, v);
                    152: }
                    153: STATIC_INLINE uae_u32 get_long_ce030 (uaecptr addr)
                    154: {
                    155:        return read_dcache030 (addr, 2);
                    156: }
                    157: STATIC_INLINE uae_u32 get_word_ce030 (uaecptr addr)
                    158: {
                    159:        return read_dcache030 (addr, 1);
                    160: }
                    161: STATIC_INLINE uae_u32 get_byte_ce030 (uaecptr addr)
                    162: {
                    163:        return read_dcache030 (addr, 0);
                    164: }
                    165: 
                    166: STATIC_INLINE uae_u32 get_long_ce030_prefetch (int o)
                    167: {
                    168:        uae_u32 v;
                    169:        v = get_word_ce030_prefetch (o) << 16;
                    170:        v |= get_word_ce030_prefetch (o + 2);
                    171:        return v;
                    172: }
                    173: 
                    174: STATIC_INLINE uae_u32 next_iword_030ce (void)
                    175: {
                    176:        uae_u32 r = get_word_ce030_prefetch (0);
                    177:        m68k_incpc (2);
                    178:        return r;
                    179: }
                    180: STATIC_INLINE uae_u32 next_ilong_030ce (void)
                    181: {
                    182:        uae_u32 r = get_long_ce030_prefetch (0);
                    183:        m68k_incpc (4);
                    184:        return r;
                    185: }
                    186: 
                    187: STATIC_INLINE void m68k_do_bsr_ce030 (uaecptr oldpc, uae_s32 offset)
                    188: {
                    189:        m68k_areg (regs, 7) -= 4;
                    190:        put_long_ce030 (m68k_areg (regs, 7), oldpc);
                    191:        m68k_incpc (offset);
                    192: }
                    193: STATIC_INLINE void m68k_do_rts_ce030 (void)
                    194: {
                    195:        m68k_setpc (get_long_ce030 (m68k_areg (regs, 7)));
                    196:        m68k_areg (regs, 7) += 4;
                    197: }
                    198: #endif
                    199: 
                    200: #ifdef CPUEMU_12
                    201: 
                    202: STATIC_INLINE void ipl_fetch (void)
                    203: {
                    204:        regs.ipl = regs.ipl_pin;
                    205: }
                    206: 
                    207: STATIC_INLINE uae_u32 mem_access_delay_word_read (uaecptr addr)
                    208: {
                    209:        return get_word (addr);
                    210: }
                    211: STATIC_INLINE uae_u32 mem_access_delay_wordi_read (uaecptr addr)
                    212: {
                    213:        return get_wordi (addr);
                    214: }
                    215: 
                    216: STATIC_INLINE uae_u32 mem_access_delay_byte_read (uaecptr addr)
                    217: {
                    218:        return get_byte (addr);
                    219: }
                    220: STATIC_INLINE void mem_access_delay_byte_write (uaecptr addr, uae_u32 v)
                    221: {
                    222:        put_byte (addr, v);
                    223: }
                    224: STATIC_INLINE void mem_access_delay_word_write (uaecptr addr, uae_u32 v)
                    225: {
                    226:        put_word (addr, v);
                    227: }
                    228: 
                    229: STATIC_INLINE uae_u32 get_long_ce (uaecptr addr)
                    230: {
                    231:        uae_u32 v = mem_access_delay_word_read (addr) << 16;
                    232:        v |= mem_access_delay_word_read (addr + 2);
                    233:        return v;
                    234: }
                    235: STATIC_INLINE uae_u32 get_word_ce (uaecptr addr)
                    236: {
                    237:        return mem_access_delay_word_read (addr);
                    238: }
                    239: STATIC_INLINE uae_u32 get_wordi_ce (uaecptr addr)
                    240: {
                    241:        return mem_access_delay_wordi_read (addr);
                    242: }
                    243: STATIC_INLINE uae_u32 get_byte_ce (uaecptr addr)
                    244: {
                    245:        return mem_access_delay_byte_read (addr);
                    246: }
                    247: STATIC_INLINE uae_u32 get_word_ce_prefetch (int o)
                    248: {
                    249:        uae_u32 v = regs.irc;
                    250:        regs.irc = get_wordi_ce (m68k_getpc () + o);
                    251:        return v;
                    252: }
                    253: 
                    254: STATIC_INLINE void put_long_ce (uaecptr addr, uae_u32 v)
                    255: {
                    256:        mem_access_delay_word_write (addr, v >> 16);
                    257:        mem_access_delay_word_write (addr + 2, v);
                    258: }
                    259: STATIC_INLINE void put_word_ce (uaecptr addr, uae_u32 v)
                    260: {
                    261:        mem_access_delay_word_write (addr, v);
                    262: }
                    263: STATIC_INLINE void put_byte_ce (uaecptr addr, uae_u32 v)
                    264: {
                    265:        mem_access_delay_byte_write (addr, v);
                    266: }
                    267: 
                    268: STATIC_INLINE void m68k_do_rts_ce (void)
                    269: {
                    270:        uaecptr pc;
                    271:        pc = get_word_ce (m68k_areg (regs, 7)) << 16;
                    272:        pc |= get_word_ce (m68k_areg (regs, 7) + 2);
                    273:        m68k_areg (regs, 7) += 4;
                    274:        if (pc & 1)
                    275:                exception3 (0x4e75, m68k_getpc ());
                    276:        else
                    277:                m68k_setpc (pc);
                    278: }
                    279: 
                    280: STATIC_INLINE void m68k_do_bsr_ce (uaecptr oldpc, uae_s32 offset)
                    281: {
                    282:        m68k_areg (regs, 7) -= 4;
                    283:        put_word_ce (m68k_areg (regs, 7), oldpc >> 16);
                    284:        put_word_ce (m68k_areg (regs, 7) + 2, oldpc);
                    285:        m68k_incpc (offset);
                    286: }
                    287: 
                    288: STATIC_INLINE void m68k_do_jsr_ce (uaecptr oldpc, uaecptr dest)
                    289: {
                    290:        m68k_areg (regs, 7) -= 4;
                    291:        put_word_ce (m68k_areg (regs, 7), oldpc >> 16);
                    292:        put_word_ce (m68k_areg (regs, 7) + 2, oldpc);
                    293:        m68k_setpc (dest);
                    294: }
                    295: #endif

unix.superglobalmegacorp.com

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