[Openmcl-cvs-notifications] r11290 - /trunk/source/compiler/X86/X8632/x8632-vinsns.lisp
gb at clozure.com
gb at clozure.com
Sun Nov 2 20:13:19 EST 2008
Author: gb
Date: Sun Nov 2 20:13:19 2008
New Revision: 11290
Log:
MISC-REF-DOUBLE-FLOAT, MISC-SET-DOUBLE-FLOAT: need to scale index.
Use :discard (and other vinsn attributes) on things that adjust stack
pointers/discard stack frames.
Add MARK-AS-NODE-PRESERVING-FLAGS, which might help with natural comparison=
s.
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 Sun Nov 2 20:13:19 2=
008
@@ -48,7 +48,7 @@
(define-x8632-vinsn misc-ref-double-float (((dest :double-float))
((v :lisp)
(scaled-idx :imm)))
- (movsd (:@ x8632::misc-dfloat-offset (:%l v) (:%l scaled-idx)) (:%xmm de=
st)))
+ (movsd (:@ x8632::misc-dfloat-offset (:%l v) (:%l scaled-idx) 2) (:%xmm =
dest)))
=
(define-x8632-vinsn misc-ref-c-double-float (((dest :double-float))
((v :lisp)
@@ -91,7 +91,7 @@
(v :lisp)
(unscaled-idx :imm))
())
- (movsd (:%xmm val) (:@ x8632::misc-dfloat-offset (:%l v) (:%l unscaled-i=
dx))))
+ (movsd (:%xmm val) (:@ x8632::misc-dfloat-offset (:%l v) (:%l unscaled-i=
dx) 2)))
=
(define-x8632-vinsn misc-ref-u8 (((dest :u8))
((v :lisp)
@@ -1649,24 +1649,24 @@
=
;; make-fixed-stack-gvector
=
-(define-x8632-vinsn discard-temp-frame (()
- ()
- ((temp :imm)))
+(define-x8632-vinsn (discard-temp-frame :tsp :pop :discard) (()
+ ()
+ ((temp :imm)))
(movl (:@ (:%seg :rcontext) x8632::tcr.save-tsp) (:%l temp))
(movl (:@ (:%l temp)) (:%l temp))
(movl (:%l temp) (:@ (:%seg :rcontext) x8632::tcr.save-tsp))
(movl (:%l temp) (:@ (:%seg :rcontext) x8632::tcr.next-tsp))
)
=
-(define-x8632-vinsn discard-c-frame (()
- ()
- ((temp :imm)))
+(define-x8632-vinsn (discard-c-frame :csp :pop :discard) (()
+ ()
+ ((temp :imm)))
(movl (:@ (:%seg :rcontext) x8632::tcr.foreign-sp) (:%l temp))
(movl (:@ (:%l temp)) (:%l temp))
(movl (:%l temp) (:@ (:%seg :rcontext) x8632::tcr.foreign-sp)))
=
=
-(define-x8632-vinsn vstack-discard (()
+(define-x8632-vinsn (vstack-discard :vsp :pop :discard) (()
((nwords :u32const)))
((:not (:pred =3D nwords 0))
((:pred < nwords 16)
@@ -3948,6 +3948,16 @@
(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 (temp-push-unboxed-word :push :word :csp)
(()
((w :u32))
More information about the Openmcl-cvs-notifications
mailing list