[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