[prev in list] [next in list] [prev in thread] [next in thread] 

List:       sbcl-commits
Subject:    [Sbcl-commits] master: Use BOXED-CONTEXT-REGISTER in several places in debug-int
From:       Alastair Bridgewater via Sbcl-commits <sbcl-commits () lists ! sourceforge ! net>
Date:       2017-12-31 14:47:23
Message-ID: 1514731644.73928.1397 () sfp-scm-4 ! v30 ! ch3 ! sourceforge ! com
[Download RAW message or body]

The branch "master" has been updated in SBCL:
       via  0f1dee019d7a7dff37c974bbed9bc4254dee02a9 (commit)
      from  21e64e8bc65ca4d84da87a22110cdaca5c4cde31 (commit)

- Log -----------------------------------------------------------------
commit 0f1dee019d7a7dff37c974bbed9bc4254dee02a9
Author: Alastair Bridgewater <alastair.bridgewater@gmail.com>
Date:   Tue Dec 26 23:52:57 2017 -0500

    Use BOXED-CONTEXT-REGISTER in several places in debug-int
    
      * The theory being that we already know that it's boxed, so we
    don't need to pay the price of a heap search for MAKE-LISP-OBJ,
    and the WITHOUT-GCING gets pushed to inside BOXED-CONTEXT-REGISTER
    for the time being (and eventually it should get removed entirely,
    but I'm taking this one step at a time for the moment).
    
      * Non-x86oid FIND-ESCAPED-FRAME / CODE-OBJECT-FROM-BITS looks
    like a candidate for this as well, but it turns out that there are
    more fundamental issues there, worthy of a commit (or series of
    commits!) of their own.
---
 src/code/debug-int.lisp | 38 ++++++++++++++++++++++----------------
 1 file changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/code/debug-int.lisp b/src/code/debug-int.lisp
index d108ebf..eecb80d 100644
--- a/src/code/debug-int.lisp
+++ b/src/code/debug-int.lisp
@@ -2188,6 +2188,12 @@ register."
                                  (sb!c:sc-offset-offset sc-offset))))
                       ,@forms)
                     :invalid-value-for-unescaped-register-storage))
+             (escaped-boxed-value ()
+               `(if escaped
+                    (boxed-context-register
+                     escaped
+                     (sb!c:sc-offset-offset sc-offset))
+                    :invalid-value-for-unescaped-register-storage))
              (escaped-float-value (format)
                `(if escaped
                     (sb!vm:context-float-register
@@ -2223,9 +2229,7 @@ register."
     (ecase (sb!c:sc-offset-scn sc-offset)
       ((#.sb!vm:any-reg-sc-number
         #.sb!vm:descriptor-reg-sc-number)
-       (without-gcing
-        (with-escaped-value (val)
-          (values (make-lisp-obj (mask-field (byte #.sb!vm:n-word-bits 0) val) nil)))))
+       (escaped-boxed-value))
       (#.sb!vm:character-reg-sc-number
        (with-escaped-value (val)
          (code-char val)))
@@ -2360,6 +2364,13 @@ register."
                            (sb!c:sc-offset-offset sc-offset))
                           ,val)
                     value))
+             (set-escaped-boxed-value (val)
+               `(if escaped
+                    (setf (boxed-context-register
+                           escaped
+                           (sb!c:sc-offset-offset sc-offset))
+                          ,val)
+                    value))
              (set-escaped-float-value (format val)
                `(if escaped
                     (setf (sb!vm:context-float-register
@@ -2399,9 +2410,7 @@ register."
     (ecase (sb!c:sc-offset-scn sc-offset)
       ((#.sb!vm:any-reg-sc-number
         #.sb!vm:descriptor-reg-sc-number)
-       (without-gcing
-        (set-escaped-value
-          (get-lisp-obj-address value))))
+       (set-escaped-boxed-value value))
       (#.sb!vm:character-reg-sc-number
        (set-escaped-value (char-code value)))
       (#.sb!vm:sap-reg-sc-number
@@ -3312,18 +3321,15 @@ register."
                         scp
                         #!-(or x86 x86-64) sb!vm::ocfp-offset
                         #!+(or x86 x86-64) sb!vm::ebx-offset)))
-        (nargs (make-lisp-obj
-                (sb!vm:context-register scp sb!vm::nargs-offset)))
+        (nargs (boxed-context-register scp sb!vm::nargs-offset))
         (reg-arg-offsets '#.sb!vm::*register-arg-offsets*)
         (results nil))
-    (without-gcing
-      (dotimes (arg-num nargs)
-        (push (if reg-arg-offsets
-                  (make-lisp-obj
-                   (sb!vm:context-register scp (pop reg-arg-offsets)))
-                  (stack-ref ocfp (+ arg-num
-                                     #!+(or x86 x86-64) sb!vm::sp->fp-offset)))
-              results)))
+    (dotimes (arg-num nargs)
+      (push (if reg-arg-offsets
+                (boxed-context-register scp (pop reg-arg-offsets))
+                (stack-ref ocfp (+ arg-num
+                                   #!+(or x86 x86-64) sb!vm::sp->fp-offset)))
+            results))
     (nreverse results)))
 
 ;;;; MAKE-BOGUS-LRA (used for :FUN-END breakpoints)

-----------------------------------------------------------------------


hooks/post-receive
-- 
SBCL

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Sbcl-commits mailing list
Sbcl-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sbcl-commits
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic