anchor.diff:       (declare (type single-float ,x ,y ,z))
        ,@body))
   
  +(declaim (inline vec3-array-values))
   (defun vec3-array-values (ary i)
     (declare (optimize (speed 3) (safety 0)))
     (declare (type vec3-array ary)
  
positive.code:                       :grid-dim grid-dim
                        :block-dim block-dim)))
  
  (defun body-body-interaction-cpu (x1 y1 z1 x2 y2 z2)
    (declare (optimize (speed 3) (safety 0)))
    (declare (type single-float x1 y1 z1 x2 y2 z2))
  
negative.code:     (:cpu nil)))
  
  (defun array-ref (ary i)
    (destructuring-bind (type raw-ary) ary
      (ecase type
        (:gpu (let ((x (mem-aref raw-ary i)))
                (values (float4-x x) (float4-y x) (float4-z x) (float4-w x))))
        (:cpu (values (vec3-aref raw-ary i :x)
                      (vec3-aref raw-ary i :y)
                      (vec3-aref raw-ary i :z)
                      1.0)))))
  
  (defun (setf array-ref) (val ary i)
    (destructuring-bind (x y z w) val
  