[Openmcl-cvs-notifications] r10139 - /trunk/source/level-1/x86-trap-support.lisp
rme at clozure.com
rme at clozure.com
Sat Jul 19 01:10:17 EDT 2008
Author: rme
Date: Sat Jul 19 01:10:17 2008
New Revision: 10139
Log:
x8632 and Darwin/x8632 support.
Modified:
trunk/source/level-1/x86-trap-support.lisp
Modified: trunk/source/level-1/x86-trap-support.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/level-1/x86-trap-support.lisp (original)
+++ trunk/source/level-1/x86-trap-support.lisp Sat Jul 19 01:10:17 2008
@@ -157,42 +157,71 @@
0 ;r15
)))
=
+#+darwinx8632-target
+(progn
+ (defconstant gp-regs-offset 0)
+ (defmacro xp-gp-regs (xp)
+ `(pref (pref ,xp :ucontext.uc_mcontext) :mcontext.ss))
+ (defun xp-mxcsr (xp)
+ (%get-unsigned-long (pref (pref xp :ucontext.uc_mcontext) :mcontext.fs=
) 32))
+ (defconstant flags-register-offset 9)
+ (defconstant eip-register-offset 10)
+ (defparameter *encoded-gpr-to-indexed-gpr*
+ #(0 ;eax
+ 2 ;ecx
+ 3 ;edx
+ 1 ;ebx
+ 7 ;esp
+ 6 ;ebp
+ 5 ;esi
+ 4 ;edi
+ )))
+
(defun indexed-gpr-lisp (xp igpr)
- (%get-object (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x8664::word-shi=
ft))))
+ (%get-object (xp-gp-regs xp) (+ gp-regs-offset (ash igpr target::word-sh=
ift))))
(defun (setf indexed-gpr-lisp) (new xp igpr)
- (%set-object (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x8664::word-shi=
ft)) new))
+ (%set-object (xp-gp-regs xp) (+ gp-regs-offset (ash igpr target::word-sh=
ift)) new))
(defun encoded-gpr-lisp (xp gpr)
(indexed-gpr-lisp xp (aref *encoded-gpr-to-indexed-gpr* gpr)))
(defun (setf encoded-gpr-lisp) (new xp gpr)
(setf (indexed-gpr-lisp xp (aref *encoded-gpr-to-indexed-gpr* gpr)) new))
(defun indexed-gpr-integer (xp igpr)
- (%get-signed-long-long (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x8664=
::word-shift))))
+ #+x8664-target
+ (%get-signed-long-long (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x8664=
::word-shift)))
+ #+x8632-target
+ (%get-signed-long (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x8632::wor=
d-shift))))
(defun (setf indexed-gpr-integer) (new xp igpr)
(setf
+ #+x8664-target
(%get-signed-long-long (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x866=
4::word-shift)))
+ #+x8632-target
+ (%get-signed-long (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x8632::wo=
rd-shift)))
new))
(defun encoded-gpr-integer (xp gpr)
(indexed-gpr-integer xp (aref *encoded-gpr-to-indexed-gpr* gpr)))
(defun (setf encoded-gpr-integer) (new xp gpr)
(setf (indexed-gpr-integer xp (aref *encoded-gpr-to-indexed-gpr* gpr)) n=
ew))
(defun indexed-gpr-macptr (xp igpr)
- (%get-ptr (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x8664::word-shift)=
)))
+ (%get-ptr (xp-gp-regs xp) (+ gp-regs-offset (ash igpr target::word-shift=
))))
(defun (setf indexed-gpr-macptr) (new xp igpr)
- (setf (%get-ptr (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x8664::word-=
shift))) new))
+ (setf (%get-ptr (xp-gp-regs xp) (+ gp-regs-offset (ash igpr target::word=
-shift))) new))
(defun indexed-gpr-macptr (xp igpr)
- (%get-ptr (xp-gp-regs xp) (+ gp-regs-offset (ash igpr x8664::word-shift)=
)))
+ (%get-ptr (xp-gp-regs xp) (+ gp-regs-offset (ash igpr target::word-shift=
))))
(defun encoded-gpr-macptr (xp gpr)
(indexed-gpr-macptr xp (aref *encoded-gpr-to-indexed-gpr* gpr)))
(defun (setf encoded-gpr-macptr) (new xp gpr)
(setf (indexed-gpr-macptr xp (aref *encoded-gpr-to-indexed-gpr* gpr)) ne=
w))
(defun xp-flags-register (xp)
- (%get-signed-long-long (xp-gp-regs xp) (+ gp-regs-offset (ash flags-regi=
ster-offset x8664::fixnumshift))))
+ #+x8664-target
+ (%get-signed-long-long (xp-gp-regs xp) (+ gp-regs-offset (ash flags-regi=
ster-offset x8664::fixnumshift)))
+ #+x8632-target
+ (%get-signed-long (xp-gp-regs xp) (+ gp-regs-offset (ash flags-register-=
offset x8632::fixnumshift))))
=
=
=
(defun %get-xcf-byte (xcf-ptr delta)
- (let* ((containing-object (%get-object xcf-ptr x8664::xcf.containing-obj=
ect))
- (byte-offset (%get-object xcf-ptr x8664::xcf.relative-pc)))
+ (let* ((containing-object (%get-object xcf-ptr target::xcf.containing-ob=
ject))
+ (byte-offset (%get-object xcf-ptr target::xcf.relative-pc)))
(if containing-object
(locally (declare (optimize (speed 3) (safety 0))
(type (simple-array (unsigned-byte 8) (*)) contain=
ing-object))
More information about the Openmcl-cvs-notifications
mailing list