Clean up RCS ids
[projects/cmucl/cmucl.git] / src / lisp / x86-lispregs.h
1 /*
2
3  This code was written as part of the CMU Common Lisp project at
4  Carnegie Mellon University, and has been placed in the public domain.
5
6 */
7
8 #ifndef _X86_LISPREGS_H_
9 #define _X86_LISPREGS_H_
10
11 /* These register names and offsets correspond to definitions
12  * in compiler/x86/vm.lisp. They map into accessors in the
13  * os dependent <machine/signal.h> structure via the sc_reg
14  * os dependent function.
15  */
16
17 #define NREGS   (8)
18
19 #ifdef LANGUAGE_ASSEMBLY
20 #define REG(num) $ ## num
21 #else
22 #define REG(num) num
23 #endif
24
25 #define reg_EAX REG( 0)
26 #define reg_ECX REG( 2)
27 #define reg_EDX REG( 4)
28 #define reg_EBX REG( 6)
29 #define reg_ESP REG( 8)
30 #define reg_EBP REG(10)
31 #define reg_ESI REG(12)
32 #define reg_EDI REG(14)
33
34 #define reg_SP reg_ESP
35 #define reg_FP reg_EBP
36 #define reg_NARGS reg_ECX
37
38 #define REGNAMES "EAX", "ECX", "EDX", "EBX", "ESP", "EBP", "ESI", "EDI"
39
40 /* These registers can contain lisp object pointers */
41 #define BOXED_REGISTERS {\
42   reg_EAX, reg_ECX, reg_EDX, reg_EBX, reg_ESI, reg_EDI \
43   }
44
45 /* N is offset in storage class (SC) as defined in vm.lisp.
46  * Ordering in sigcontext is probably os dependent so let
47  * xxx-os.c handle it.
48  */
49
50 #define SC_REG(scp, offset) (*os_sigcontext_reg(scp, offset))
51 #define SC_PC(scp) (*os_sigcontext_pc(scp))
52 #define SC_SP(scp) SC_REG(scp, reg_ESP)
53
54 #if defined(DARWIN)
55 #if __DARWIN_UNIX03
56 /* For 10.5 */
57 #define SC_EFLAGS(sc) ((sc)->uc_mcontext->__ss.__eflags)
58 #else
59 /* For 10.4 */
60 #define SC_EFLAGS(sc) ((sc)->uc_mcontext->ss.eflags)
61 #endif
62 #elif defined(__linux__)
63 #define SC_EFLAGS(sc) ((sc)->uc_mcontext.gregs[REG_EFL])
64 #elif defined(__NetBSD__)
65 #define SC_EFLAGS(sc) ((sc)->uc_mcontext.__gregs[_REG_EFL])
66 #elif defined(SOLARIS)
67 /*
68  * Solaris/x86 has access the the eflags value, but this doesn't
69  * currently work.  It seems that when we set the EFLAG to enable
70  * single-stepping, we never actually step the new instruction but we
71  * stop at exactly the same place.  This is not how it works on other
72  * OSes where we do step an instruction.  I (rtoy) do not know why.
73  * Some more work needs to be done in x86-arch.c to make this work.
74  * But the default code there works fine on Solaris/x86.
75  */
76 /* #define SC_EFLAGS(sc) ((sc)->uc_mcontext.gregs[EFL])*/
77 #endif
78
79 #endif /* _X86_LISPREGS_H_ */