From: Christophe Rhodes Date: Tue, 9 Sep 2003 16:49:05 +0000 (+0000) Subject: 0.8.3.45.modular2: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=3f542eedffe3acf5af2a29db99c43b4de98465da;p=sbcl.git 0.8.3.45.modular2: Restore buildability on x86 ... define essentially the same source transforms as were deleted to make the PPC version efficient. ... KLUDGE: the full call version of LOGEQV is now inefficient; first the arguments get associated into logeqv pairs; then (LOGNOT (LOGXOR .. ..)) is done on each pair. Since user code gets transformed to efficiency, this isn't so bad... only (funcall #'logeqv .. .. ..) exhibits this problem. --- diff --git a/src/compiler/x86/arith.lisp b/src/compiler/x86/arith.lisp index 88c8122..473ecfe 100644 --- a/src/compiler/x86/arith.lisp +++ b/src/compiler/x86/arith.lisp @@ -184,6 +184,22 @@ (define-binop logior 2 or) (define-binop logxor 2 xor)) +(define-source-transform logeqv (&rest args) + (if (oddp (length args)) + `(logxor ,@args) + `(lognot (logxor ,@args)))) +(define-source-transform logandc1 (x y) + `(logand (lognot ,x) ,y)) +(define-source-transform logandc2 (x y) + `(logand ,x (lognot ,y))) +(define-source-transform logorc1 (x y) + `(logior (lognot ,x) ,y)) +(define-source-transform logorc2 (x y) + `(logior ,x (lognot ,y))) +(define-source-transform lognor (x y) + `(lognot (logior ,x ,y))) +(define-source-transform lognand (x y) + `(lognot (logand ,x ,y))) ;;; Special handling of add on the x86; can use lea to avoid a ;;; register load, otherwise it uses add. diff --git a/version.lisp-expr b/version.lisp-expr index 57b4440..1fc675e 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.3.45.modular1" +"0.8.3.45.modular2"