Update of /project/movitz/cvsroot/movitz/losp/muerte In directory common-lisp.net:/tmp/cvs-serv2725
Modified Files: cons.lisp Log Message: Added "fast" implementations of cddr and cdddr, in an effort to reduce cal/ret run-time and code-size overhead in list processing.
Date: Sat Apr 17 11:34:03 2004 Author: ffjeld
Index: movitz/losp/muerte/cons.lisp diff -u movitz/losp/muerte/cons.lisp:1.3 movitz/losp/muerte/cons.lisp:1.4 --- movitz/losp/muerte/cons.lisp:1.3 Mon Mar 22 09:42:31 2004 +++ movitz/losp/muerte/cons.lisp Sat Apr 17 11:34:03 2004 @@ -9,7 +9,7 @@ ;;;; Created at: Fri Dec 8 15:25:45 2000 ;;;; Distribution: See the accompanying file COPYING. ;;;; -;;;; $Id: cons.lisp,v 1.3 2004/03/22 14:42:31 ffjeld Exp $ +;;;; $Id: cons.lisp,v 1.4 2004/04/17 15:34:03 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------
@@ -53,6 +53,36 @@ (:leal (:eax -1) :ecx) (:testb 3 :cl) (:jnz '(:sub-program () (:int 66))) + (:movl (:eax 3) :eax) + (:ret))) + +(define-primitive-function fast-cddr () + "This is the actual CDR code." + (with-inline-assembly (:returns :eax) + (:leal (:eax -1) :ecx) + (:testb 3 :cl) + (:jnz '(:sub-program () (:int 66))) + (:movl (:eax 3) :eax) + (:leal (:eax -1) :ecx) + (:testb 3 :cl) + (:jnz '(:sub-program () (:int 66))) + (:movl (:eax 3) :eax) + (:ret))) + +(define-primitive-function fast-cdddr () + "This is the actual CDR code." + (with-inline-assembly (:returns :eax) + (:leal (:eax -1) :ecx) + (:testb 3 :cl) + (:jnz '(:sub-program (not-cons) (:int 66))) + (:movl (:eax 3) :eax) + (:leal (:eax -1) :ecx) + (:testb 3 :cl) + (:jnz '(:sub-program (not-cons) (:int 66))) + (:movl (:eax 3) :eax) + (:leal (:eax -1) :ecx) + (:testb 3 :cl) + (:jnz '(:sub-program (not-cons) (:int 66))) (:movl (:eax 3) :eax) (:ret)))