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

(defun listn (n)
  (if (not (= 0 n))
      (cons n (listn (1- n)))))

(defvar 18l (listn 18.))
(defvar 12l (listn 12.))
(defvar  6l (listn 6.))

(defun mas (x y z)
  (if (not (shorterp y x))
      z
    (mas (mas (cdr x)
	      y z)
	 (mas (cdr y)
	      z x)
	 (mas (cdr z)
	      x y))))


(DEFKFUN MAS (X Y Z)
  TAG::MAS_4
         (MOVE O0 A1 CH-OPEN)
         (KCALL SHORTERP '2 A3 (O1 A0))
  TAG::C_37
         (ALU L-R NOOP-NO-OVERFLOW-TRAP A3 'NIL BW-32)
         (TEST BR-EQUAL)
         (BRANCH TAG::C_7)
  TAG::C_8
         (TAIL-OPEN)
         (KOPEN)
         (OPEN-CALL KWRAP::CDR '1 O0 (O0 A0))
  TAG::C_13
         (MOVE O1 A1)
         (KCALL MAS '3 O0 (O2 A2))
  TAG::C_28
         (KOPEN)
         (OPEN-CALL KWRAP::CDR '1 O0 (O0 A1))
  TAG::C_17
         (MOVE O1 A2)
         (KCALL MAS '3 O1 (O2 A0))
  TAG::C_26
         (KOPEN)
         (OPEN-CALL KWRAP::CDR '1 O0 (O0 A2))
  TAG::C_21
         (MOVE O1 A0)
         (KCALL MAS '3 O2 (O2 A1))
  TAG::C_24
         (TAIL-CALL MAS '3)
  TAG::C_7
         (MOVE RETURN A2 CH-RETURN))

(defun shorterp (x y)
  (and y (or (null x)
	     (shorterp (cdr x)
		       (cdr y)))))

(DEFKFUN SHORTERP (X Y)
  TAG::SHORTERP_5
         (ALU L-R NOOP-NO-OVERFLOW-TRAP A1 'NIL BW-32)
         (TEST BR-EQUAL)
         (BRANCH TAG::C_27)
  TAG::C_8
         (ALU L-R NOOP-NO-OVERFLOW-TRAP A0 'NIL BW-32)
         (TEST BR-NOT-EQUAL)
         (BRANCH TAG::C_13)
  TAG::C_30
         (MOVE RETURN 'T CH-RETURN)
  TAG::C_13
         (TAIL-OPEN)
         (OPEN-CALL KWRAP::CDR '1 O0 (O0 A0))
  TAG::C_21
         (OPEN-CALL KWRAP::CDR '1 O1 (O0 A1))
  TAG::C_19
         (TAIL-CALL SHORTERP '2)
  TAG::C_27
         (MOVE RETURN 'NIL CH-RETURN))