;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;                                                                   ;;;;
;;;;       Copyright IBM Corporation 1988,1991 - All Rights Reserved   ;;;;
;;;;      For full copyright information see:'andrew/config/COPYRITE'  ;;;;
;;;;                                                                   ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; $Disclaimer: 
; Permission to use, copy, modify, and distribute this software and its 
; documentation for any purpose is hereby granted without fee, 
; provided that the above copyright notice appear in all copies and that 
; both that copyright notice, this permission notice, and the following 
; disclaimer appear in supporting documentation, and that the names of 
; IBM, Carnegie Mellon University, and other copyright holders, not be 
; used in advertising or publicity pertaining to distribution of the software 
; without specific, written prior permission.
; 
; IBM, CARNEGIE MELLON UNIVERSITY, AND THE OTHER COPYRIGHT HOLDERS 
; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 
; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO EVENT 
; SHALL IBM, CARNEGIE MELLON UNIVERSITY, OR ANY OTHER COPYRIGHT HOLDER 
; BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY 
; DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
; WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 
; ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
; OF THIS SOFTWARE.
;  $

;;;
;;; Numeric functions
;;;

;;
;; ZEROP
;;   integer x
;; returns t if x is 0, nil otherwise
;;
(defun zerop (x)
  (eq x 0))

;;
;; MOD
;;   integer x
;;   integer y
;; returns the integer remainder of x divided by y
;;
(defun mod (x y)
  (- x (* (div x y) y)))

;;
;; BIT-AND
;;   integer x
;;   integer y
;; returns the bitwise-and of x and y
;;
(defun bit-and (x y)
  (cond ((or (zerop x)
	     (zerop y))
	 0)
	(t
	 (+ (* (mod x 2) (mod y 2))
	    (* 2 (bit-and (div x 2) (div y 2)))))))

;;
;; <
;;   integer x
;;   integer y
;; returns t if x is less than y, nil otherwise
;;
(defun < (x y) (lessp x y))

;;
;; >
;;   integer x
;;   integer y
;; returns t if x is greater than y, nil otherwise
;;
(defun > (x y) (not (or (lessp x y)
			(eq x y))))

