;;;-*- Mode:LISP; Package:BENCH-STAKU; Base:8 -*-
;;; From the "Dick Gabriel" Benchmark Series.
;;; Enhancements (C) Copyright 1983, Lisp Machine, Inc.

;;;BEGIN
;;;STAK
(declare 
 #-LISPM (FIXNUM (tak fixnum fixnum fixnum))
 #-LISPM (FIXNUM (stak))
 (special x y z)
 #-LISPM (FIXNUM x y z))

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

(defun tak (x y z)
  (stak))

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

;(include "timer.lsp")
(defconst *ucode-loaded? nil)

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

(timer timit
       (if *ucode-loaded? (tak 18. 12. 6.) "ucode not loaded"))

;;;END

