Update of /project/movitz/cvsroot/movitz/losp/muerte In directory common-lisp.net:/tmp/cvs-serv13331
Modified Files: primitive-functions.lisp Log Message: These changes are all about making the compiler smarter about functions whose lambda-list look like (x &optional y). Most such functions become about 20 bytes shorter. More importantly, they become branch-less, reducing the CPU-cycle-cost of this abstraction essentially zero.
Date: Thu Feb 5 09:46:24 2004 Author: ffjeld
Index: movitz/losp/muerte/primitive-functions.lisp diff -u movitz/losp/muerte/primitive-functions.lisp:1.2 movitz/losp/muerte/primitive-functions.lisp:1.3 --- movitz/losp/muerte/primitive-functions.lisp:1.2 Mon Jan 19 06:23:47 2004 +++ movitz/losp/muerte/primitive-functions.lisp Thu Feb 5 09:46:24 2004 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld frodef@acm.org ;;;; Created at: Tue Oct 2 21:02:18 2001 ;;;; -;;;; $Id: primitive-functions.lisp,v 1.2 2004/01/19 11:23:47 ffjeld Exp $ +;;;; $Id: primitive-functions.lisp,v 1.3 2004/02/05 14:46:24 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------
@@ -45,6 +45,19 @@ ;;; (:movb 2 :cl) (:movb 3 :cl) (:jmp (:esi -6)))) + +(define-primitive-function trampoline-cl-dispatch-1or2 () + "Jump to the entry-point designated by :cl, which must be 1 or 2." + (with-inline-assembly (:returns :nothing) + (:cmpb 1 :cl) + (:jne 'not-one) + (:jmp (:esi #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:code-vector%1op))) + not-one + (:cmpb 2 :cl) + (:jne 'not-two) + (:jmp (:esi #.(bt:slot-offset 'movitz:movitz-funobj 'movitz:code-vector%2op))) + not-two + (:int 100)))
(define-primitive-function no-code-vector () "This is the default code-vector, which never should be called."