[Openmcl-cvs-notifications] r11276 - /trunk/source/compiler/X86/x862.lisp

gz at clozure.com gz at clozure.com
Fri Oct 31 00:12:39 EDT 2008


Author: gz
Date: Fri Oct 31 00:12:39 2008
New Revision: 11276

Log:
In x862-vref, if full safety, do typechecks even if don't use value (propag=
ated from r9413).  In x862-prog1, better handling for (prog1 form nil) (pro=
pagated from r9936)

Modified:
    trunk/source/compiler/X86/x862.lisp

Modified: trunk/source/compiler/X86/x862.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/compiler/X86/x862.lisp (original)
+++ trunk/source/compiler/X86/x862.lisp Fri Oct 31 00:12:39 2008
@@ -1894,6 +1894,8 @@
 ;;; This mostly knows how to reference the elements of an immediate miscob=
j.
 (defun x862-vref (seg vreg xfer type-keyword vector index safe)
   (with-x86-local-vinsn-macros (seg vreg xfer)
+    (when *x862-full-safety*
+      (unless vreg (setq vreg *x862-arg-z*)))
     (if (null vreg)
       (progn
         (x862-form seg nil nil vector)
@@ -6327,18 +6329,23 @@
              (node-p (unless (or float-p crf-p)
                        (=3D (get-regspec-mode vreg) hard-reg-class-gpr-mod=
e-node)))
              (first (pop forms)))
-        (x862-push-register seg =

-                            (if (or node-p crf-p)
-                              (x862-one-untargeted-reg-form seg first *x86=
2-arg-z*)
-                              (x862-one-targeted-reg-form seg first vreg)))
-        (dolist (form forms)
-          (x862-form seg nil nil form))
-        (if crf-p
+        (if (and node-p
+                 (nx-null (car forms))
+                 (null (cdr forms)))
+          (x862-form seg vreg xfer first)
           (progn
-            (x862-vpop-register seg *x862-arg-z*)
-            (<- *x862-arg-z*))
-          (x862-pop-register seg vreg))
-        (^)))))
+            (x862-push-register seg =

+                                (if (or node-p crf-p)
+                                  (x862-one-untargeted-reg-form seg first =
*x862-arg-z*)
+                                  (x862-one-targeted-reg-form seg first vr=
eg)))
+            (dolist (form forms)
+              (x862-form seg nil nil form))
+            (if crf-p
+              (progn
+                (x862-vpop-register seg *x862-arg-z*)
+                (<- *x862-arg-z*))
+              (x862-pop-register seg vreg))
+            (^)))))))
 =

 (defx862 x862-free-reference free-reference (seg vreg xfer sym)
   (x862-ref-symbol-value seg vreg xfer sym t))



More information about the Openmcl-cvs-notifications mailing list