;;; -*- Mode:LISP; Package:SIM; Base:10; Readtable:CL -*-

(defkfun tst1 (x)
  (ALU L+R+1 RETURN A0 '0 CH-RETURN))

(defkfun utst4 (x)
  (MOVE O0 A0 CH-OPEN)
  (KCALL TST1 '1 A1)
  (MOVE RETURN A1 CH-RETURN))
  
(defkfun t-tst (x)
  (MOVE O0 A0 CH-TAIL-OPEN)
  (TAIL-CALL TST1 '1))


(defkfun t-noop ()
  (MOVE RETURN 'NIL CH-RETURN))

(defkfun t-foo1 ()
  (OPEN-CALL T-NOOP '0 A0)
  (MOVE RETURN A0 CH-RETURN))

(defkfun t-zerop (arg)
  (ALU L-R GARBAGE A0 '0)
  (TEST BR-NOT-EQUAL)
  (BRANCH TISNT)
  (MOVE RETURN 'T CH-RETURN)
 TISNT
  (MOVE RETURN 'NIL CH-RETURN))

(defun tak (x y z)
  (if (not (< y x))
      z
    (tak (tak (1- x) y z)
	 (tak (1- y) z x)
	 (tak (1- z) x y))))


(DEFKFUN TAK (X Y Z)
  TAG::P_7
    (ALU L-R GARBAGE A1 A0)
    (TEST BR-NOT-LESS-THAN)
    (BRANCH TAG::C_10)
  TAG::C_11
    (TAIL-OPEN)
    (ALU L+R-1 O0 A0 (QUOTE 0) CH-OPEN)
    (MOVE O1 A1)
    (KCALL TAK (QUOTE 3) O0 (O2 A2))
  TAG::C_29
    (ALU L+R-1 O0 A1 (QUOTE 0) CH-OPEN)
    (MOVE O1 A2)
    (KCALL TAK (QUOTE 3) O1 (O2 A0))
  TAG::C_27
    (ALU L+R-1 O0 A2 (QUOTE 0) CH-OPEN)
    (MOVE O1 A0)
    (KCALL TAK (QUOTE 3) O2 (O2 A1))
  TAG::C_25
    (TAIL-CALL TAK (QUOTE 3))
  TAG::C_10
    (MOVE RETURN A2 CH-RETURN))



;(defun create-n (n)
;  (do ((n n (1- n))
;       (a () (push () a)))
;      ((= n 0) a)))

(defkfun create-n (n)
  TAG::P_9
    (MOVE A1 A0)
    (MOVE A2 (QUOTE NIL))
  TAG::DO5369_15
    (ALU L-R GARBAGE A1 (QUOTE 0))
    (TEST BR-NOT-EQUAL)
    (BRANCH TAG::C_19)
  TAG::C_18
    (MOVE RETURN A2 CH-RETURN)
  TAG::C_19
    (MOVE O0 (QUOTE NIL) CH-OPEN)
    (KCALL KCONS (QUOTE 2) A2 (O1 A2))
   TAG::C_24
    (ALU L+R-1 A1 A1 (QUOTE 0))
    (JUMP TAG::DO5369_15))


;(defun div2 (l)
;  (do ((l l (cddr l))
;       (a () (push (car l) a)))
;      ((null l) a)))


(DEFKFUN DIV2 (L)
  TAG::P_9
    (MOVE A1 A0)
    (MOVE A2 (QUOTE NIL))
  TAG::DO4211_15
    (ALU L-R GARBAGE A1 (QUOTE NIL))
    (TEST BR-NOT-EQUAL)
    (BRANCH TAG::C_19)
  TAG::C_18
    (MOVE RETURN A2 CH-RETURN)
  TAG::C_19
    (KOPEN)
    (OPEN-CALL KCAR (QUOTE 1) O0 (O0 A1))
  TAG::C_26
    (KCALL KCONS (QUOTE 2) A2 (O1 A2))
  TAG::C_29
    (OPEN-CALL KCDDR (QUOTE 1) A1 (O0 A1))
  TAG::C_31
    (JUMP TAG::DO4211_15))


;(defun tid (l)
;       (do ((i 300. (1- i)))
;	   ((= i 0))
;	   (div2 l)
;	   (div2 l)
;	   (div2 l)
;	   (div2 l)))


(DEFKFUN TID (L)
  TAG::P_8
    (MOVE A1 (QUOTE 300))
  TAG::DO4317_14
    (ALU L-R GARBAGE A1 (QUOTE 0))
    (TEST BR-NOT-EQUAL)
    (BRANCH TAG::C_18)
  TAG::C_17
    (MOVE RETURN (QUOTE NIL) CH-RETURN)
  TAG::C_18
    (OPEN-CALL NC::DIV2 (QUOTE 1) IGNORE (O0 A0))
  TAG::B_22
    (OPEN-CALL NC::DIV2 (QUOTE 1) IGNORE (O0 A0))
  TAG::B_25
    (OPEN-CALL NC::DIV2 (QUOTE 1) IGNORE (O0 A0))
  TAG::B_28
    (OPEN-CALL NC::DIV2 (QUOTE 1) IGNORE (O0 A0))
  TAG::B_34
    (ALU L+R-1 A1 A1 (QUOTE 0))
    (JUMP TAG::DO4317_14))



