ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/kpx_cpu/spcflags.h
Revision: 1.2
Committed: 2003-11-01T15:15:27Z (21 years ago) by gbeauche
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
State: FILE REMOVED
Log Message:
Integrate spcflags handling code to kpx_cpu core. We can also remove
oldish EXEC_RETURN handling with a throw/catch mechanism since we
do have a dependency on extra conditions (invalidated cache) that
prevents fast execution loops.

File Contents

# User Rev Content
1 gbeauche 1.1 /*
2     * UAE - The Un*x Amiga Emulator
3     *
4     * MC68000 emulation
5     *
6     * Copyright 1995 Bernd Schmidt
7     */
8    
9     #ifndef SPCFLAGS_H
10     #define SPCFLAGS_H
11    
12     typedef uint32 spcflags_t;
13    
14     enum {
15     SPCFLAG_STOP = 0x01,
16     SPCFLAG_INT = 0x02,
17     SPCFLAG_DOINT = 0x04,
18     SPCFLAG_ENTER_MON = 0x08,
19     #if USE_JIT
20     SPCFLAG_JIT_END_COMPILE = 0x40,
21     SPCFLAG_JIT_EXEC_RETURN = 0x80,
22     #else
23     SPCFLAG_JIT_END_COMPILE = 0,
24     SPCFLAG_JIT_EXEC_RETURN = 0,
25     #endif
26    
27     SPCFLAG_ALL = SPCFLAG_STOP
28     | SPCFLAG_INT
29     | SPCFLAG_DOINT
30     | SPCFLAG_ENTER_MON
31     | SPCFLAG_JIT_END_COMPILE
32     | SPCFLAG_JIT_EXEC_RETURN
33     ,
34    
35     SPCFLAG_ALL_BUT_EXEC_RETURN = SPCFLAG_ALL & ~SPCFLAG_JIT_EXEC_RETURN
36     };
37    
38     #define SPCFLAGS_TEST(m) \
39     ((sheepshaver_cpu::spcflags & (m)) != 0)
40    
41     /* Macro only used in m68k_reset() */
42     #define SPCFLAGS_INIT(m) do { \
43     sheepshaver_cpu::spcflags = (m); \
44     } while (0)
45    
46     #if !(ENABLE_EXCLUSIVE_SPCFLAGS)
47    
48     #define SPCFLAGS_SET(m) do { \
49     sheepshaver_cpu::spcflags |= (m); \
50     } while (0)
51    
52     #define SPCFLAGS_CLEAR(m) do { \
53     sheepshaver_cpu::spcflags &= ~(m); \
54     } while (0)
55    
56     #elif defined(__i386__) && defined(X86_ASSEMBLY)
57    
58     #define HAVE_HARDWARE_LOCKS
59    
60     #define SPCFLAGS_SET(m) do { \
61     __asm__ __volatile__("lock\n\torl %1,%0" : "=m" (sheepshaver_cpu::spcflags) : "i" ((m))); \
62     } while (0)
63    
64     #define SPCFLAGS_CLEAR(m) do { \
65     __asm__ __volatile__("lock\n\tandl %1,%0" : "=m" (sheepshaver_cpu::spcflags) : "i" (~(m))); \
66     } while (0)
67    
68     #else
69    
70     #undef HAVE_HARDWARE_LOCKS
71    
72     #include "main.h"
73     extern B2_mutex *spcflags_lock;
74    
75     #define SPCFLAGS_SET(m) do { \
76     B2_lock_mutex(spcflags_lock); \
77     sheepshaver_cpu::spcflags |= (m); \
78     B2_unlock_mutex(spcflags_lock); \
79     } while (0)
80    
81     #define SPCFLAGS_CLEAR(m) do { \
82     B2_lock_mutex(spcflags_lock); \
83     sheepshaver_cpu::spcflags &= ~(m); \
84     B2_unlock_mutex(spcflags_lock); \
85     } while (0)
86    
87     #endif
88    
89     #endif /* SPCFLAGS_H */