+(macrolet
+ ((define-modular-backend (fun)
+ (let ((mfun-name (symbolicate fun '-mod32))
+ ;; FIXME: if anyone cares, add constant-arg vops. --
+ ;; CSR, 2003-09-16
+ (modvop (symbolicate 'fast- fun '-mod32/unsigned=>unsigned))
+ (vop (symbolicate 'fast- fun '/unsigned=>unsigned)))
+ `(progn
+ (define-modular-fun ,mfun-name (x y) ,fun 32)
+ (define-vop (,modvop ,vop)
+ (:translate ,mfun-name))))))
+ (define-modular-backend logxor)
+ (define-modular-backend logandc1)
+ (define-modular-backend logandc2))
+
+(define-source-transform logeqv (&rest args)
+ (if (oddp (length args))
+ `(logxor ,@args)
+ `(lognot (logxor ,@args))))
+(define-source-transform logorc1 (x y)
+ `(logior (lognot ,x) ,y))
+(define-source-transform logorc2 (x y)
+ `(logior ,x (lognot ,y)))
+(define-source-transform lognand (x y)
+ `(lognot (logand ,x ,y)))
+(define-source-transform lognor (x y)
+ `(lognot (logior ,x y)))
+
+;;;; 32-bit logical operations