* And why two moves?
--------------------------------------------------------------------------------
-#6
-09:49:05 <jtra> I have found a case in those where suboptimal code is
- generate with nested loops, it might be moderately easy to fix that
-09:49:28 <jtra> see
- http://www.bagley.org/~doug/shootout/bench/nestedloop/nestedloop.cmucl
-09:50:30 <jtra> if you add declarations to dotimes, generated code is
- almost optimal, but most inner loops run out of registers and use
- memory location for iteration variable
-
-;;; -*- mode: lisp -*-
-;;; http://www.bagley.org/~doug/shootout/
-;;; from Friedrich Dominicus
-
-(defun main ()
- (let ((n (parse-integer (or (car (last extensions:*command-line-strings*)) "1")))
- (x 0))
- (declare (fixnum n)
- (fixnum x)
- (optimize (speed 3) (debug 0) (safety 0)))
- (dotimes (a n)
- (dotimes (b n)
- (dotimes (c n)
- (dotimes (d n)
- (dotimes (e n)
- (dotimes (f n)
- (incf x)))))))
- (format t "~A~%" x)))
---------------------------------------------------------------------------------
#8
(defun foo (d)
(declare (optimize (speed 3) (safety 0) (debug 0)))
a. Iterations on &REST lists, returning them as VALUES could be
rewritten with &MORE vectors.
b. Implement local unknown-values mv-call (useful for fast type checking).
+--------------------------------------------------------------------------------
+#25
+EQL is implemented generically in situations where this isn't necessary.
+
+(defun f (x y)
+ (declare (type (or symbol fixnum) x)
+ (optimize speed (safety 0) (debug 0)))
+ (eql x y))
+
+SUBTYPEP is smart enough to determine that this type is a subtype
+of (and (or (not number) fixnum) (not character))
+
+This sitation where the type is (OR NULL FIXNUM) comes up
+in cl-bench, for example in the value returned by POSITION.