[Openmcl-cvs-notifications] r14193 - /trunk/source/compiler/X86/X8664/x8664-vinsns.lisp
rme at clozure.com
rme at clozure.com
Mon Aug 16 12:56:50 CDT 2010
Author: rme
Date: Mon Aug 16 12:56:50 2010
New Revision: 14193
Log:
Add :call, :subprim-call, and :jumplr attributes to some vinsns.
Modified:
trunk/source/compiler/X86/X8664/x8664-vinsns.lisp
Modified: trunk/source/compiler/X86/X8664/x8664-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/X8664/x8664-vinsns.lisp (original)
+++ trunk/source/compiler/X86/X8664/x8664-vinsns.lisp Mon Aug 16 12:56:50 2=
010
@@ -1172,21 +1172,10 @@
((spno :s32const)))
(jmp (:@ spno)))
=
-;;; "call" a subprimitive that manipulates the stack in some way,
-;;; using an lea/jmp calling convention.
-(define-x8664-vinsn (lea-jmp-subprim :call) (()
- ((spno :s32const))
- ((entry (:label 1))))
- (leaq (:@ (:^ :back) (:%q x8664::fn)) (:%q x8664::ra0))
- (:talign 4)
- (jmp (:@ spno))
- :back
- (leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
-
;;; Call a subprimitive using a tail-aligned CALL instruction.
-(define-x8664-vinsn (call-subprim :call) (()
- ((spno :s32const))
- ((entry (:label 1))))
+(define-x8664-vinsn (call-subprim :call :subprim-call) (()
+ ((spno :s32const))
+ ((entry (:label 1))))
(:talign 4)
(call (:@ spno))
(leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
@@ -1360,7 +1349,7 @@
(imulq (:$b x8664::fixnumone) (:%q src)(:%q dest)))
=
=
-(define-x8664-vinsn (fix-fixnum-overflow-ool :call)
+(define-x8664-vinsn (fix-fixnum-overflow-ool :call :subprim-call)
(((val :lisp))
((val :lisp))
((unboxed (:s64 #.x8664::imm1))
@@ -1384,7 +1373,7 @@
(movq (:%q x8664::arg_z) (:%q val)))
(jmp :done))
=
-(define-x8664-vinsn (fix-fixnum-overflow-ool-and-branch :call)
+(define-x8664-vinsn (fix-fixnum-overflow-ool-and-branch :call :subprim-cal=
l)
(((val :lisp))
((val :lisp)
(lab :label))
@@ -1466,7 +1455,7 @@
(:apply %hard-regspec-value y)
(:apply %hard-regspec-value dest)))
(leaq (:@ (:%q x) (:%q y)) (:%q dest)))))
- =
+
(define-x8664-vinsn copy-gpr (((dest t))
((src t)))
((:not (:pred =3D
@@ -1781,16 +1770,16 @@
(:long (:^ label)))
=
;;; %ra0 is pointing into %fn, so no need to copy %fn here.
-(define-x8664-vinsn pass-multiple-values-symbol (()
- ())
+(define-x8664-vinsn (pass-multiple-values-symbol :jumplr) (()
+ ())
(pushq (:@ (:apply + (:apply target-nil-value) (x8664::%kernel-global 'x=
86::ret1valaddr)))) =
(jmp (:@ x8664::symbol.fcell (:% x8664::fname))))
=
;;; It'd be good to have a variant that deals with a known function
;;; as well as this. =
-(define-x8664-vinsn pass-multiple-values (()
- ()
- ((tag :u8)))
+(define-x8664-vinsn (pass-multiple-values :jumplr) (()
+ ()
+ ((tag :u8)))
:resume
(movl (:%l x8664::temp0) (:%l tag))
(andl (:$b x8664::fulltagmask) (:%l tag))
@@ -1821,7 +1810,8 @@
(leaq (:@ (:^ entry) (:% x8664::rip)) (:%q x8664::fn)))
=
(define-x8664-vinsn (jump-known-function :jumplr) (()
- ())
+ ()
+ ((xfn (:lisp #.x8664::x=
fn))))
(movq (:%q x8664::fn) (:%q x8664::xfn))
(movq (:%q x8664::temp0) (:%q x8664::fn))
(jmp (:%q x8664::fn)))
@@ -2050,10 +2040,10 @@
=
;;; Call something callable and obtain the single value that it
;;; returns.
-(define-x8664-vinsn funcall (()
- ()
- ((tag :u8)
- (entry (:label 1))))
+(define-x8664-vinsn (funcall :call) (()
+ ()
+ ((tag :u8)
+ (entry (:label 1))))
:resume
(movl (:%l x8664::temp0) (:%l tag))
(andl (:$b x8664::fulltagmask) (:%l tag))
@@ -2068,9 +2058,9 @@
:bad
(:anchored-uuo (uuo-error-not-callable)))
=
-(define-x8664-vinsn tail-funcall (()
- ()
- ((tag (:u8 #.x8664::imm0))))
+(define-x8664-vinsn (tail-funcall :jumplr) (()
+ ()
+ ((tag (:u8 #.x8664::imm0))))
:resume
(movl (:%l x8664::temp0) (:%l tag))
(andl (:$b x8664::fulltagmask) (:%l tag))
More information about the Openmcl-cvs-notifications
mailing list