(sb!sys:without-gcing
(let* ((sap (truly-the system-area-pointer
(sb!kernel:code-instructions code)))
- (obj-start-addr (logand (sb!kernel:get-lisp-obj-address code)
- #xfffffffffffffff8))
+ (obj-start-addr (logandc2 (sb!kernel:get-lisp-obj-address code)
+ sb!vm:lowtag-mask))
(code-start-addr (sb!sys:sap-int (sb!kernel:code-instructions
code)))
(ncode-words (sb!kernel:code-header-ref code 1))
(let* ((sap (truly-the system-area-pointer
(sb!kernel:code-instructions code)))
(obj-start-addr
- ;; FIXME: looks like (LOGANDC2 foo typebits)
- (logand (sb!kernel:get-lisp-obj-address code) #xfffffffffffffff8))
+ (logandc2 (sb!kernel:get-lisp-obj-address code) sb!vm:lowtag-mask))
(code-start-addr (sb!sys:sap-int (sb!kernel:code-instructions
code)))
(ncode-words (sb!kernel:code-header-ref code 1))
;;;; and internal error handling) the extra runtime cost should be
;;;; negligible.
+(declaim (inline context-pc-addr))
(define-alien-routine ("os_context_pc_addr" context-pc-addr) (* unsigned-long)
;; (Note: Just as in CONTEXT-REGISTER-ADDR, we intentionally use an
;; 'unsigned *' interpretation for the 32-bit word passed to us by
;; the C code, even though the C code may think it's an 'int *'.)
(context (* os-context-t)))
+(declaim (inline context-pc))
(defun context-pc (context)
(declare (type (alien (* os-context-t)) context))
(let ((addr (context-pc-addr context)))
(declare (type (alien (* unsigned-long)) addr))
(int-sap (deref addr))))
+(declaim (inline context-register-addr))
(define-alien-routine ("os_context_register_addr" context-register-addr)
(* unsigned-long)
;; (Note the mismatch here between the 'int *' value that the C code
(context (* os-context-t))
(index int))
+(declaim (inline context-register))
(defun context-register (context index)
(declare (type (alien (* os-context-t)) context))
(let ((addr (context-register-addr context index)))