(defconstant DIM 512) (defvar matrix_1 (make-array (list DIM DIM) :element-type '(unsigned-byte 16))) (defvar matrix_2 (make-array (list DIM DIM) :element-type '(unsigned-byte 16))) (defvar matrix_3 (make-array (list DIM DIM) :element-type '(unsigned-byte 16))) (defun foo (a1 a2 r) (declare (optimize (speed 3) (safety 0)) (type (simple-array (unsigned-byte 16) (512 512)) a1) (type (simple-array (unsigned-byte 16) (512 512)) a2) (type (simple-array (unsigned-byte 16) (512 512)) r)) (dotimes (x DIM) (declare (fixnum x)) (dotimes (y DIM) (declare (fixnum y)) (setf (aref a1 x y) 12))) (dotimes (x DIM) (declare (fixnum x)) (dotimes (y DIM) (declare (fixnum y)) (setf (aref a2 x y) 12))) (dotimes (x DIM) (declare (fixnum x)) (dotimes (y DIM) (declare (fixnum y)) (setf (aref r x y) 0))) (dotimes (x DIM) (declare (fixnum x)) (dotimes (y DIM) (declare (fixnum y)) (dotimes (z DIM) (declare (fixnum z)) (setf (aref r x y) (+ (aref r x y) (* (aref a1 z y) (aref a2 x z))))))))