Posted to tcl by kbk at Tue Aug 21 01:47:14 GMT 2012view pretty

namespace path ::tcl::mathop

interp recursionlimit {} 120000

proc fib {n} {
    ::tcl::unsupported::assemble {
	load n			;# n
	dup			;# n n
	push 1			;# n n 1
	gt			;# n n>1
	jumpFalse done		;# n

	push 1			;# n 1
	sub			;# n-1
	push fib		;# n-1 fib
	dup			;# n-1 fib fib
	over 2			;# n-1 fib fib n-1
	invokeStk 2		;# n-1 fib fib(n-1)

	reverse 3		;# fib(n-1) fib n-1
	push 1			;# fib(n-1) fib n-1 1
	sub			;# fib(n-1) fib n-2
	invokeStk 2		;# fib(n-1) fib(n-2)

	add			;# fib(n)

      label done		;# result
    }
}
puts [time {set result [fib 34]}]
puts "fib(34) = $result"