Changeset 4846


Ignore:
Timestamp:
Jun 27, 2006, 7:53:18 AM (18 years ago)
Author:
Gary Byers
Message:

freebsd x8664 GPR indices. (Needs testing.)

Don't conditionalize as much code. Indices/offsets are platform-specific,
but accessors defiend in terms of them needn't be.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-1/x86-trap-support.lisp

    r4477 r4846  
    4444      6                                 ;r14
    4545      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      )))
    7847
    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
    102103
    103104(defun %get-xcf-byte (xcf-ptr delta)
Note: See TracChangeset for help on using the changeset viewer.