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

  1. namespace path ::tcl::mathop
  2.  
  3. interp recursionlimit {} 120000
  4.  
  5. proc fib {n} {
  6. ::tcl::unsupported::assemble {
  7. load n ;# n
  8. dup ;# n n
  9. push 1 ;# n n 1
  10. gt ;# n n>1
  11. jumpFalse done ;# n
  12.  
  13. push 1 ;# n 1
  14. sub ;# n-1
  15. push fib ;# n-1 fib
  16. dup ;# n-1 fib fib
  17. over 2 ;# n-1 fib fib n-1
  18. invokeStk 2 ;# n-1 fib fib(n-1)
  19.  
  20. reverse 3 ;# fib(n-1) fib n-1
  21. push 1 ;# fib(n-1) fib n-1 1
  22. sub ;# fib(n-1) fib n-2
  23. invokeStk 2 ;# fib(n-1) fib(n-2)
  24.  
  25. add ;# fib(n)
  26.  
  27. label done ;# result
  28. }
  29. }
  30. puts [time {set result [fib 34]}]
  31. puts "fib(34) = $result"