anchor.diff:  
   ;;----------------------------------------------------------------
   
  -(defun scale (scale-vec3)
  +(defn scale ((scale-vec3 vec3)) mat4
     "Returns a matrix which will scale by the amounts specified"
  +  (declare (optimize (speed 3) (safety 1) (debug 1)))
     (make
      (x scale-vec3)  0f0               0f0               0f0
      0f0               (y scale-vec3)  0f0               0f0
  
positive.code: 
  ;;----------------------------------------------------------------
  
  (declaim (inline identity)
           (ftype (function ()
                            mat4)
                  identity))
  (defun identity ()
    "Return a 4x4 identity matrix"
    (make-array 16 :element-type 'single-float
                :initial-contents '(1f0 0f0 0f0 0f0
                                    0f0 1f0 0f0 0f0
                                    0f0 0f0 1f0 0f0
                                    0f0 0f0 0f0 1f0)))
  
  (defun 0! ()
    "Return a 4x4 zero matrix"
    (make-array 16 :element-type 'single-float :initial-element 0f0))
  
  ;;----------------------------------------------------------------
  
  (declaim
   (inline make)
   (ftype (function
           (single-float single-float single-float single-float
                         single-float single-float single-float single-float
                         single-float single-float single-float single-float
                         single-float single-float single-float single-float)
           mat4)
          make))
  (defun make (a b c d e f g h i j k l m n o p)
    "Make a 4x4 matrix. Data must be provided in row major order"
    (declare (single-float a b c d e f g h i j k l m n o p))
    ;; as you can see it is stored in column major order
    (let ((result (0!)))
      (setf (melm result 0 0) a)
  
negative.code:               (cz 1f0)
                (sx (melm mat-a 2 1))
                (cx (melm mat-a 1 1)))
            (v3:make (atan sx cx) (atan sy cy) (atan sz cz)))
          (let* ((factor (cl:/ 1f0 cy)) ; normal case
                 (sx (cl:- (cl:* factor (melm mat-a 1 2))))
                 (cx (cl:* factor (melm mat-a 2 2)))
                 (sz (cl:- (cl:* factor (melm mat-a 0 1))))
                 (cz (cl:* factor (melm mat-a 0 0))))
            (v3:make (atan sx cx) (atan sy cy) (atan sz cz))))))
  
  ;;----------------------------------------------------------------
  
  (defn trace ((mat-a mat4)) single-float
    "Returns the trace of the matrix (That is the diagonal values)"
    (declare (optimize (speed 3) (safety 1) (debug 1)))
    (cl:+ (melm mat-a 0 0)
          (melm mat-a 1 1)
          (melm mat-a 2 2)
          (melm mat-a 3 3)))
  
  ;;----------------------------------------------------------------
  
  ;; [TODO] find out how we can declaim angle to be float
  ;; [TODO] Comment the fuck out of this and work out how it works
  
  (defn get-axis-angle ((mat-a mat4)) vec3
    "Gets one possible axis-angle pair that will generate this
     matrix. Assumes that this is a rotation matrix"
    ;;(declare (optimize (speed 3) (safety 1) (debug 1)))
    (let* ((trace-a (cl:+ (melm mat-a 0 0) (melm mat-a 1 1)
                          (melm mat-a 2 2)))
           (cos-theta (cl:* 0.5 (cl:- trace-a 1f0)))
  