Changeset 4846
- Timestamp:
- Jun 27, 2006, 7:53:18 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/ccl/level-1/x86-trap-support.lisp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/level-1/x86-trap-support.lisp
r4477 r4846 44 44 6 ;r14 45 45 7 ;r15 46 )) 47 (defun indexed-gpr-lisp (xp igpr) 48 (%get-object xp (+ gp-regs-offset (ash igpr x8664::word-shift)))) 49 (defun (setf indexed-gpr-lisp) (new xp igpr) 50 (%set-object xp (+ gp-regs-offset (ash igpr x8664::word-shift)) new)) 51 (defun encoded-gpr-lisp (xp gpr) 52 (indexed-gpr-lisp xp (aref *encoded-gpr-to-indexed-gpr* gpr))) 53 (defun (setf encoded-gpr-lisp) (new xp gpr) 54 (setf (indexed-gpr-lisp xp (aref *encoded-gpr-to-indexed-gpr* gpr)) new)) 55 (defun indexed-gpr-integer (xp igpr) 56 (%get-signed-long-long xp (+ gp-regs-offset (ash igpr x8664::word-shift)))) 57 (defun (setf indexed-gpr-integer) (new xp igpr) 58 (setf 59 (%get-signed-long-long xp (+ gp-regs-offset (ash igpr x8664::word-shift))) 60 new)) 61 (defun encoded-gpr-integer (xp gpr) 62 (indexed-gpr-integer xp (aref *encoded-gpr-to-indexed-gpr* gpr))) 63 (defun (setf encoded-gpr-integer) (new xp gpr) 64 (setf (indexed-gpr-integer xp (aref *encoded-gpr-to-indexed-gpr* gpr)) new)) 65 (defun indexed-gpr-macptr (xp igpr) 66 (%get-ptr xp (+ gp-regs-offset (ash igpr x8664::word-shift)))) 67 (defun (setf indexed-gpr-macptr) (new xp igpr) 68 (setf (%get-ptr xp (+ gp-regs-offset (ash igpr x8664::word-shift))) new)) 69 (defun indexed-gpr-macptr (xp igpr) 70 (%get-ptr xp (+ gp-regs-offset (ash igpr x8664::word-shift)))) 71 (defun encoded-gpr-macptr (xp gpr) 72 (indexed-gpr-macptr xp (aref *encoded-gpr-to-indexed-gpr* gpr))) 73 (defun (setf encoded-gpr-macptr) (new xp gpr) 74 (setf (indexed-gpr-macptr xp (aref *encoded-gpr-to-indexed-gpr* gpr)) new)) 75 (defun xp-flags-register (xp) 76 (%get-signed-long-long xp (+ gp-regs-offset (ash flags-register-offset x8664::fixnumshift)))) 77 ) 46 ))) 78 47 79 #|| 80 (defun funcall-with-xp-stack-frames (xp trap-function thunk) 81 (cond ((null trap-function) 82 ;; Maybe inside a subprim from a lisp function 83 (let* ((fn (encoded-gpr-lisp xp x8664::fn)) 84 (ra0 (encoded-gpr-lisp xp x8664::ra0))) 85 (if (eq fn (%return-address-function ra0)) 86 (let* ((rbp (encoded-gpr-lisp xp x8664::rbp)) 87 (frame (%cons-fake-stack-frame rbp rbp fn ra0 nil xp *fake-stack-frames*)) 88 (*fake-stack-frames* frame)) 89 (declare (dynamic-extent frame)) 90 (funcall thunk frame)) 91 (funcall thunk (encoded-gpr-lisp xp x8664::rbp))))) 92 ((eq trap-function (encoded-gpr-lisp xp x8664::fn)) 93 (let* ((fn trap-function) 94 (ra0 (encoded-gpr-lisp xp x8664::ra0)) 95 (rbp (encoded-gpr-lisp xp x8664::rbp)) 96 (frame (%cons-fake-stack-frame rbp rbp fn ra0 nil xp *fake-stack-frames*)) 97 (*fake-stack-frames* frame)) 98 (declare (dynamic-extent frame)) 99 (funcall thunk frame))) 100 (t (funcall thunk (encoded-gpr-lisp xp x8664::rbp))))) 101 ||# 48 #+freebsdx8664-target 49 (progn 50 (defconstant gp-regs-offset (get-field-offset :ucontext.uc_mcontext)) 51 (defconstant flags-register-offset 22) 52 (defparameter *encoded-gpr-to-indexed-gpr* 53 #(7 ;rax 54 4 ;rcx 55 3 ;rdx 56 8 ;rbx 57 23 ;rsp 58 9 ;rbp 59 2 ;rsi 60 1 ;rdi 61 5 ;r8 62 6 ;r9 63 10 ;r10 64 11 ;r11 65 12 ;r12 66 13 ;r13 67 14 ;r14 68 15 ;r15 69 ))) 70 71 (defun indexed-gpr-lisp (xp igpr) 72 (%get-object xp (+ gp-regs-offset (ash igpr x8664::word-shift)))) 73 (defun (setf indexed-gpr-lisp) (new xp igpr) 74 (%set-object xp (+ gp-regs-offset (ash igpr x8664::word-shift)) new)) 75 (defun encoded-gpr-lisp (xp gpr) 76 (indexed-gpr-lisp xp (aref *encoded-gpr-to-indexed-gpr* gpr))) 77 (defun (setf encoded-gpr-lisp) (new xp gpr) 78 (setf (indexed-gpr-lisp xp (aref *encoded-gpr-to-indexed-gpr* gpr)) new)) 79 (defun indexed-gpr-integer (xp igpr) 80 (%get-signed-long-long xp (+ gp-regs-offset (ash igpr x8664::word-shift)))) 81 (defun (setf indexed-gpr-integer) (new xp igpr) 82 (setf 83 (%get-signed-long-long xp (+ gp-regs-offset (ash igpr x8664::word-shift))) 84 new)) 85 (defun encoded-gpr-integer (xp gpr) 86 (indexed-gpr-integer xp (aref *encoded-gpr-to-indexed-gpr* gpr))) 87 (defun (setf encoded-gpr-integer) (new xp gpr) 88 (setf (indexed-gpr-integer xp (aref *encoded-gpr-to-indexed-gpr* gpr)) new)) 89 (defun indexed-gpr-macptr (xp igpr) 90 (%get-ptr xp (+ gp-regs-offset (ash igpr x8664::word-shift)))) 91 (defun (setf indexed-gpr-macptr) (new xp igpr) 92 (setf (%get-ptr xp (+ gp-regs-offset (ash igpr x8664::word-shift))) new)) 93 (defun indexed-gpr-macptr (xp igpr) 94 (%get-ptr xp (+ gp-regs-offset (ash igpr x8664::word-shift)))) 95 (defun encoded-gpr-macptr (xp gpr) 96 (indexed-gpr-macptr xp (aref *encoded-gpr-to-indexed-gpr* gpr))) 97 (defun (setf encoded-gpr-macptr) (new xp gpr) 98 (setf (indexed-gpr-macptr xp (aref *encoded-gpr-to-indexed-gpr* gpr)) new)) 99 (defun xp-flags-register (xp) 100 (%get-signed-long-long xp (+ gp-regs-offset (ash flags-register-offset x8664::fixnumshift)))) 101 102 102 103 103 104 (defun %get-xcf-byte (xcf-ptr delta)
Note:
See TracChangeset
for help on using the changeset viewer.
