Skip to content
x86-lispregs.h 1.77 KiB
Newer Older
/* x86-lispregs.h -*- Mode: C; -*-
 * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/x86-lispregs.h,v 1.11 2007/12/15 15:26:29 rtoy Exp $
ram's avatar
ram committed
 */

#ifndef _X86_LISPREGS_H_
#define _X86_LISPREGS_H_

ram's avatar
ram committed
/* These register names and offsets correspond to definitions
 * in compiler/x86/vm.lisp. They map into accessors in the
 * os dependent <machine/signal.h> structure via the sc_reg
 * os dependent function.
 */

#define NREGS	(8)

#ifdef LANGUAGE_ASSEMBLY
#define REG(num) $ ## num
#else
#define REG(num) num
#endif

#define reg_EAX REG( 0)
#define reg_ECX REG( 2)
#define reg_EDX REG( 4)
#define reg_EBX REG( 6)
#define reg_ESP REG( 8)
#define reg_EBP REG(10)
#define reg_ESI REG(12)
#define reg_EDI REG(14)

#define reg_SP reg_ESP
#define reg_FP reg_EBP
ram's avatar
ram committed

#define REGNAMES "EAX", "ECX", "EDX", "EBX", "ESP", "EBP", "ESI", "EDI"

/* These registers can contain lisp object pointers */
#define BOXED_REGISTERS {\
  reg_EAX, reg_ECX, reg_EDX, reg_EBX, reg_ESI, reg_EDI \
  }

/* N is offset in storage class (SC) as defined in vm.lisp.
 * Ordering in sigcontext is probably os dependent so let
 * xxx-os.c handle it.
 */

#define SC_REG(sc, n) (*sc_reg(sc,n))
cshapiro's avatar
cshapiro committed
#if defined(__NetBSD__)
#define SC_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_EIP])
#define SC_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_ESP])
cshapiro's avatar
cshapiro committed
#elif defined(DARWIN)
#define SC_PC(sc) ((sc)->uc_mcontext->__ss.__eip)
cshapiro's avatar
cshapiro committed
#define SC_SP(sc) SC_REG(sc, reg_ESP)
#define SC_EFLAGS(sc) ((sc)->uc_mcontext->__ss.__eflags)
#elif defined(__FreeBSD__)
cshapiro's avatar
cshapiro committed
#define SC_PC(sc) ((sc)->uc_mcontext.mc_eip)
#define SC_SP(sc) SC_REG(sc, reg_ESP)
#elif defined(__linux__)
#define SC_PC(sc) ((sc)->uc_mcontext.gregs[REG_EIP])
#define SC_SP(sc) SC_REG(sc, reg_ESP)
#define SC_EFLAGS(sc) ((sc)->uc_mcontext.gregs[REG_EFL])
ram's avatar
ram committed

#endif /* _X86_LISPREGS_H_ */