;;; -*- Mode:LISP; Package:KBUG; Base:10; Readtable:ZL -*- (defun add (a b) (if (zerop a) b (add (1- a) (1+ b)))) (defafun add (a b) ADD_3 (MOVEI R0 (QUOTE 0)) (ALU L-R NOP-NO-OVERFLOW-TRAP A0 R0 BW-24) (TEST BR-NOT-EQUAL) (BRANCH C_7 NIL) C_6 (RETURN A1) C_7 (ALU R-1 O0 A0 A0 BW-24 CH-TAIL-OPEN) (ALU R+1 O1 A0 A1 BW-24) (TAIL-CALL ADD1 (QUOTE 2) NIL)) (defafun add1 (a b) ADD_3 (MOVEI R0 (QUOTE 0)) (ALU L-R NOP-NO-OVERFLOW-TRAP A0 R0 BW-24) (TEST BR-NOT-EQUAL) (BRANCH C_7 NIL) C_6 (RETURN A1) C_7 (ALU R-1 O0 A0 A0 BW-24 CH-OPEN) (ALU R+1 O1 A0 A1 BW-24) (KCALL ADD (QUOTE 2) a3 NIL) (nop) (return a3)) (defafun test-add () loop (alu r+1 (%register g0 0 0) (%register g0 0 0) (%register g0 0 0)) (alu-field field-not memory-control (%register g0 0 0) memory-control hw:%%memory-control-leds) (MOVEI O0 '11 CH-OPEN) (MOVEI O1 '13) (MOVEI O2 '4) (KCALL add 3 a0 NIL) here (unconditional-branch here ()))