[movitz-cvs] CVS update: movitz/losp/muerte/arithmetic-macros.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Sun Sep 18 16:20:10 UTC 2005
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv14444
Modified Files:
arithmetic-macros.lisp
Log Message:
Added proper inlining of logand when the mask is a constant
(unsigned-byte 32).
Date: Sun Sep 18 18:20:05 2005
Author: ffjeld
Index: movitz/losp/muerte/arithmetic-macros.lisp
diff -u movitz/losp/muerte/arithmetic-macros.lisp:1.14 movitz/losp/muerte/arithmetic-macros.lisp:1.15
--- movitz/losp/muerte/arithmetic-macros.lisp:1.14 Sun Sep 18 17:58:05 2005
+++ movitz/losp/muerte/arithmetic-macros.lisp Sun Sep 18 18:20:04 2005
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef at acm.org>
;;;; Created at: Sat Jul 17 13:42:46 2004
;;;;
-;;;; $Id: arithmetic-macros.lisp,v 1.14 2005/09/18 15:58:05 ffjeld Exp $
+;;;; $Id: arithmetic-macros.lisp,v 1.15 2005/09/18 16:20:04 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -293,7 +293,18 @@
(case (length constant-folded-integers)
(0 0)
(1 (first constant-folded-integers))
- (2 `(no-macro-call logand ,(first constant-folded-integers) ,(second constant-folded-integers)))
+ (2 (cond
+ ((typep (first constant-folded-integers)
+ '(unsigned-byte 32))
+ (let ((x (first constant-folded-integers)))
+ `(with-inline-assembly (:returns :untagged-fixnum-ecx
+ :type (unsigned-byte ,(integer-length x)))
+ (:compile-form (:result-mode :untagged-fixnum-ecx)
+ ,(second constant-folded-integers))
+ (:andl ,x :ecx))))
+ (t `(no-macro-call logand
+ ,(first constant-folded-integers)
+ ,(second constant-folded-integers)))))
(t `(logand (logand ,(first constant-folded-integers) ,(second constant-folded-integers))
,@(cddr constant-folded-integers))))))
More information about the Movitz-cvs
mailing list