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


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


(DEFKFUN CREATE-N (N)
  TAG::P_9
     (MOVE A2 A0)
     (MOVE A1 'NIL)
  TAG::DO4077_15
     (ALU L-R GARBAGE A2 '0)
     (TEST BR-NOT-EQUAL)
     (BRANCH TAG::C_19)
  TAG::C_18
     (MOVE RETURN A1 CH-RETURN)
  TAG::C_19
     (MOVE O0 'NIL CH-OPEN)
     (KCALL KWRAP::CONS '2 A1 (O1 A1))
  TAG::C_27
     (ALU L+R-1 A2 A2 '0)
     (JUMP TAG::DO4077_15))



(defun iterative-div2 (l)
       (do ((l l (cddr l))
	    (a () (push (car l) a)))
	   ((null l) a)))


(DEFKFUN ITERATIVE-DIV2 (L)
  TAG::P_9
     (MOVE A1 A0)
     (MOVE A2 'NIL)
  TAG::DO4094_15
     (ALU L-R GARBAGE A1 'NIL)
     (TEST BR-NOT-EQUAL)
     (BRANCH TAG::C_19)
  TAG::C_18
     (MOVE RETURN A2 CH-RETURN)
  TAG::C_19
     (KOPEN)
     (OPEN-CALL KWRAP::CAR '1 O0 (O0 A1))
  TAG::C_29
     (KCALL KWRAP::CONS '2 A2 (O1 A2))
  TAG::C_32
     (OPEN-CALL KWRAP::CDDR '1 A1 (O0 A1))
  TAG::C_34
     (JUMP TAG::DO4094_15))


(defun recursive-div2 (l)
       (cond ((null l) ())
	     (t (cons (car l) (recursive-div2 (cddr l))))))


(DEFKFUN RECURSIVE-DIV2 (L)
  TAG::P_5
     (ALU L-R GARBAGE A0 'NIL)
     (TEST BR-NOT-EQUAL)
     (BRANCH TAG::C_9)
  TAG::C_8
     (MOVE RETURN 'NIL CH-RETURN)
  TAG::C_9
     (TAIL-OPEN)
     (KOPEN)
     (OPEN-CALL KWRAP::CDDR '1 O0 (O0 A0))
  TAG::C_16
     (KCALL RECURSIVE-DIV2 '1 O1 NIL)
  TAG::C_21
     (OPEN-CALL KWRAP::CAR '1 O0 (O0 A0))
  TAG::C_19
     (TAIL-CALL KWRAP::CONS '2))






(defun test-1 (l)
  (do ((i 300. (1- i)))
      ((= i 0))
    (iterative-div2 l)
    (iterative-div2 l)
    (iterative-div2 l)
    (iterative-div2 l)))


(DEFKFUN TEST-1 (L)
  TAG::P_8
     (MOVE A1 '300)
  TAG::DO4140_14
     (ALU L-R GARBAGE A1 '0)
     (TEST BR-NOT-EQUAL)
     (BRANCH TAG::C_18)
  TAG::C_17
     (MOVE RETURN 'NIL CH-RETURN)
  TAG::C_18
     (OPEN-CALL ITERATIVE-DIV2 '1 IGNORE (O0 A0))
  TAG::B_25
     (OPEN-CALL ITERATIVE-DIV2 '1 IGNORE (O0 A0))
  TAG::B_28
     (OPEN-CALL ITERATIVE-DIV2 '1 IGNORE (O0 A0))
  TAG::B_31
     (OPEN-CALL ITERATIVE-DIV2 '1 IGNORE (O0 A0))
  TAG::B_37
     (ALU L+R-1 A1 A1 '0)
     (JUMP TAG::DO4140_14))



(defun test-2 (l)
  (do ((i 300. (1- i)))
      ((= i 0))
    (recursive-div2 l)
    (recursive-div2 l)
    (recursive-div2 l)
    (recursive-div2 l)))


(DEFKFUN TEST-2 (L)
  TAG::P_8
     (MOVE A1 '300)
  TAG::DO4141_14
     (ALU L-R GARBAGE A1 '0)
     (TEST BR-NOT-EQUAL)
     (BRANCH TAG::C_18)
  TAG::C_17
     (MOVE RETURN 'NIL CH-RETURN)
  TAG::C_18
     (OPEN-CALL RECURSIVE-DIV2 '1 IGNORE (O0 A0))
  TAG::B_25
     (OPEN-CALL RECURSIVE-DIV2 '1 IGNORE (O0 A0))
  TAG::B_28
     (OPEN-CALL RECURSIVE-DIV2 '1 IGNORE (O0 A0))
  TAG::B_31
     (OPEN-CALL RECURSIVE-DIV2 '1 IGNORE (O0 A0))
  TAG::B_37
     (ALU L+R-1 A1 A1 '0)
     (JUMP TAG::DO4141_14))




