1.0.10.11: Make FEATUREP accept only symbols or conses.
[sbcl.git] / src / code / x86-64-vm.lisp
index 6eacf48..a5a025b 100644 (file)
     (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)))