;;;-*- Mode:LISP; Package:BENCH-TAKU; Base:10; source-optimizations:t -*-
;;; From the "Dick Gabriel" Benchmark Series.
;;; Enhancements (C) Copyright 1983, Lisp Machine, Inc.

(EVAL-WHEN (EVAL COMPILE LOAD)
  (DEFCONST *TO-UCOMPILE* '(TAK))
  (MAPC #'(LAMBDA (X)
	    (PUTPROP X T 'COMPILER:MICROCOMPILE)
	    (PUTPROP X
		     T ; ':DYNAMIC
		     ':DEPEND-ON-BEING-MICROCOMPILED))
	    *TO-UCOMPILE*))


;;;BEGIN
;;;TAK

(declare 
 #-LISPM (FIXNUM (tak fixnum fixnum fixnum)))

(defun tak (x y z)
       (cond ((not (< (THE FIXNUM y) (THE FIXNUM x)))	;xy
	      z)
	     (t (tak (tak (THE FIXNUM (1- x)) y z)
		     (tak (THE FIXNUM (1- y)) z x)
		     (tak (THE FIXNUM (1- z)) x y))))) 

;(include "timer.lsp")

(timer nc-timit (tak 10018. 10012. 10006.))

(defconst *ucode-loaded? nil)

(defun load-ucode ()
  (apply #'compiler:ma-load *to-ucompile*)
  (setq *ucode-loaded? t))

(timer timit
       (if *ucode-loaded? (do ((j 0 (1+ j))) ((= j 10.))
			    (tak 18. 12. 6.))
	 "ucode not loaded"))

;;;END
