0.8.3.45.modular2:
authorChristophe Rhodes <csr21@cam.ac.uk>
Tue, 9 Sep 2003 16:49:05 +0000 (16:49 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Tue, 9 Sep 2003 16:49:05 +0000 (16:49 +0000)
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.

src/compiler/x86/arith.lisp
version.lisp-expr

index 88c8122..473ecfe 100644 (file)
   (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.
index 57b4440..1fc675e 100644 (file)
@@ -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"