[Openmcl-cvs-notifications] r11297 - /trunk/source/compiler/X86/X8632/x8632-vinsns.lisp

gb at clozure.com gb at clozure.com
Wed Nov 5 05:52:14 EST 2008


Author: gb
Date: Wed Nov  5 05:52:14 2008
New Revision: 11297

Log:
Lose the speculative MARK-AS-NODE-PRESERVING-FLAGS.

Add a MARK-TEMP1-AS-NODE-PRESERVING-FLAGS, which doesn't clobber as many fl=
age.

Add a TEMP-POP-TEMP1-AS-UNBOXED-WORD, which sets the direction flag to indi=
cate the unboxed state of %temp1/%edx as it pops a word into that register.

ALIGN-LOOP-HEAD was a bad idea (adds NOPs but doesn't improve performance),=
 but attempts to actually remove uses of it failed for some unknown reason.=
  Make the vinsn a NOP for now.


Modified:
    trunk/source/compiler/X86/X8632/x8632-vinsns.lisp

Modified: trunk/source/compiler/X86/X8632/x8632-vinsns.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/X8632/x8632-vinsns.lisp (original)
+++ trunk/source/compiler/X86/X8632/x8632-vinsns.lisp Wed Nov  5 05:52:14 2=
008
@@ -3948,15 +3948,14 @@
   (xorl (:%l reg) (:%l reg))
   (btsl (:$ub (:apply %hard-regspec-value reg)) (:@ (:%seg :rcontext) x863=
2::tcr.node-regs-mask)))
 =

-;;; We can't safely push %eflags on the lisp stack, so we have to clobber
-;;; %ah.
-(define-x8632-vinsn mark-as-node-preserving-flags (()
-                                                   ((reg :imm))
-                                                   ((ah (:u8 #.x8632::imm0=
))))
-  (:byte #x9f)                          ;lahf
-  (xorl (:%l reg) (:%l reg))
-  (btsl (:$ub (:apply %hard-regspec-value reg)) (:@ (:%seg :rcontext) x863=
2::tcr.node-regs-mask))
-  (:byte #x9e))
+(define-x8632-vinsn mark-temp1-as-node-preserving-flags (()
+                                                        ()
+                                                        ((reg (:u32 #.x863=
2::temp1))))
+  (movl (:$l 0) (:%l reg))              ;not xorl!
+  (cld))                                ;well, preserving most flags.
+
+  =

+
   =

 (define-x8632-vinsn (temp-push-unboxed-word :push :word :csp)
     (()
@@ -3973,6 +3972,15 @@
     (((w :u32))
      ())
   (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l w))
+  (movl (:@ 8 (:%l w)) (:%l w))
+  (addl (:$b 16) (:@ (:%seg :rcontext) x8632::tcr.foreign-sp)))
+
+(define-x8632-vinsn (temp-pop-temp1-as-unboxed-word :pop :word :csp)
+    (()
+     ()
+     ((w (:u32 #.x8632::temp1))))
+  (movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l w))
+  (std)
   (movl (:@ 8 (:%l w)) (:%l w))
   (addl (:$b 16) (:@ (:%seg :rcontext) x8632::tcr.foreign-sp)))
 =

@@ -4054,7 +4062,7 @@
 =

 (define-x8632-vinsn align-loop-head (()
 				     ())
-  (:align 4))
+)
 =

 (queue-fixup
  (fixup-x86-vinsn-templates



More information about the Openmcl-cvs-notifications mailing list