Index: /branches/ia32/level-0/X86/X8632/x8632-array.lisp
===================================================================
--- /branches/ia32/level-0/X86/X8632/x8632-array.lisp	(revision 7909)
+++ /branches/ia32/level-0/X86/X8632/x8632-array.lisp	(revision 7910)
@@ -5,6 +5,26 @@
   (require "X86-LAPMACROS"))
 
+;; rewrite in LAP someday (soon).
+(defun %init-misc (val uvector)
+  (dotimes (i (uvsize uvector) uvector)
+    (setf (uvref uvector i) val)))
+
+;;; Make a new vector of size newsize whose subtag matches that of oldv-arg.
+;;; Blast the contents of the old vector into the new one as quickly as
+;;; possible; leave remaining elements of new vector undefined (0).
+;;; Return new-vector.
+(defun %extend-vector (start oldv newsize)
+  (declare (fixnum start))
+  (let* ((new (%alloc-misc newsize (typecode oldv)))
+         (oldsize (uvsize oldv)))
+    (declare (fixnum oldsize))
+    (do* ((i 0 (1+ i))
+          (j start (1+ j)))
+         ((= i oldsize) new)
+      (declare (fixnum i j))
+      (setf (uvref new j) (uvref oldv i)))))
+    
 ;;; argument is a vector header or an array header.  Or else.
-(defx86lapfunction %array-header-data-and-offset ((a arg_z))
+(defx8632lapfunction %array-header-data-and-offset ((a arg_z))
   (let ((offset arg_y)
         (temp temp1))
@@ -24,43 +44,43 @@
     (jmp-subprim  .SPvalues)))
 
-(defx86lapfunction %boole-clr ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-clr ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl ($ 0) (@ x8632::misc-data-offset (% dest) (% temp0)))
   (single-value-return 4))
 
-(defx86lapfunction %boole-set ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-set ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl ($ -1) (@ x8632::misc-data-offset (% dest) (% temp0)))
   (single-value-return 4))
 
-(defx86lapfunction %boole-1 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
-  (movl (@ idx (% esp)) (% temp0))
-  (movl (@ b0 (% esp)) (% temp1))
-  (movl (@ x8632::misc-data-offset (% temp1) (% temp0)) (% imm0))
-  (movl (% imm0) (@ x8632::misc-data-offset (% dest) (% temp0)))
-  (single-value-return 4))
-
-(defx86lapfunction %boole-2 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
-  (movl (@ idx (% esp)) (% temp0))
-  (movl (@ x8632::misc-data-offset (% b1) (% temp0)) (% imm0))
-  (movl (% imm0) (@ x8632::misc-data-offset (% dest) (% temp0)))
-  (single-value-return 4))
-
-(defx86lapfunction %boole-c1 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
-  (movl (@ idx (% esp)) (% temp0))
-  (movl (@ b0 (% esp)) (% temp1))
-  (movl (@ x8632::misc-data-offset (% temp1) (% temp0)) (% imm0))
-  (notl (% imm0))
-  (movl (% imm0) (@ x8632::misc-data-offset (% dest) (% temp0)))
-  (single-value-return 4))
-
-(defx86lapfunction %boole-c2 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
-  (movl (@ idx (% esp)) (% temp0))
-  (movl (@ x8632::misc-data-offset (% b1) (% temp0)) (% imm0))
-  (notl (% imm0))
-  (movl (% imm0) (@ x8632::misc-data-offset (% dest) (% temp0)))
-  (single-value-return 4))
-
-(defx86lapfunction %boole-and ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-1 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+  (movl (@ idx (% esp)) (% temp0))
+  (movl (@ b0 (% esp)) (% temp1))
+  (movl (@ x8632::misc-data-offset (% temp1) (% temp0)) (% imm0))
+  (movl (% imm0) (@ x8632::misc-data-offset (% dest) (% temp0)))
+  (single-value-return 4))
+
+(defx8632lapfunction %boole-2 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+  (movl (@ idx (% esp)) (% temp0))
+  (movl (@ x8632::misc-data-offset (% b1) (% temp0)) (% imm0))
+  (movl (% imm0) (@ x8632::misc-data-offset (% dest) (% temp0)))
+  (single-value-return 4))
+
+(defx8632lapfunction %boole-c1 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+  (movl (@ idx (% esp)) (% temp0))
+  (movl (@ b0 (% esp)) (% temp1))
+  (movl (@ x8632::misc-data-offset (% temp1) (% temp0)) (% imm0))
+  (notl (% imm0))
+  (movl (% imm0) (@ x8632::misc-data-offset (% dest) (% temp0)))
+  (single-value-return 4))
+
+(defx8632lapfunction %boole-c2 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+  (movl (@ idx (% esp)) (% temp0))
+  (movl (@ x8632::misc-data-offset (% b1) (% temp0)) (% imm0))
+  (notl (% imm0))
+  (movl (% imm0) (@ x8632::misc-data-offset (% dest) (% temp0)))
+  (single-value-return 4))
+
+(defx8632lapfunction %boole-and ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -70,5 +90,5 @@
   (single-value-return 4))
 
-(defx86lapfunction %boole-ior ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-ior ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -78,5 +98,5 @@
   (single-value-return 4))
 
-(defx86lapfunction %boole-xor ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-xor ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -86,5 +106,5 @@
   (single-value-return 4))
 
-(defx86lapfunction %boole-eqv ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-eqv ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -95,5 +115,5 @@
   (single-value-return 4))
 
-(defx86lapfunction %boole-nand ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-nand ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -104,5 +124,5 @@
   (single-value-return 4))
 
-(defx86lapfunction %boole-nor ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-nor ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -113,5 +133,5 @@
   (single-value-return 4))
 
-(defx86lapfunction %boole-andc1 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-andc1 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -122,5 +142,5 @@
   (single-value-return 4))
 
-(defx86lapfunction %boole-andc2 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-andc2 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -131,5 +151,5 @@
   (single-value-return 4))
 
-(defx86lapfunction %boole-orc1 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-orc1 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -140,5 +160,5 @@
   (single-value-return 4))
 
-(defx86lapfunction %boole-orc2 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
+(defx8632lapfunction %boole-orc2 ((idx 8) (b0 4) #|(ra 0)|# (b1 arg_y) (dest arg_z))
   (movl (@ idx (% esp)) (% temp0))
   (movl (@ b0 (% esp)) (% temp1))
@@ -148,4 +168,30 @@
   (movl (% imm0) (@ x8632::misc-data-offset (% dest) (% temp0)))
   (single-value-return 4))
+
+(defparameter *simple-bit-boole-functions* ())
+
+(setq *simple-bit-boole-functions*
+      (vector
+       #'%boole-clr
+       #'%boole-set
+       #'%boole-1
+       #'%boole-2
+       #'%boole-c1
+       #'%boole-c2
+       #'%boole-and
+       #'%boole-ior
+       #'%boole-xor
+       #'%boole-eqv
+       #'%boole-nand
+       #'%boole-nor
+       #'%boole-andc1
+       #'%boole-andc2
+       #'%boole-orc1
+       #'%boole-orc2))
+
+(defun %simple-bit-boole (op b1 b2 result)
+  (let* ((f (svref *simple-bit-boole-functions* op)))
+    (dotimes (i (ash (the fixnum (+ (length result) 31)) -5) result)
+      (funcall f i b1 b2 result))))
 
 ;;; placeholders for future specialized versions
