Contents    Page-10    Prev    Next    Page+10    Index   

Loop Unrolling Code

The code to accomplish loop unrolling is simple:


(defn unrollb [code ivar n nmax codelst]
  (if (>= n nmax)
      (cons 'do (reverse codelst))
      (unrollb code ivar (+ n 1) nmax
        (cons (subst n ivar code) codelst) )))

(defn unroll [loopcode]
  (unrollb (third loopcode)           ; code
           (get (second loopcode) 0)  ; i
           0
           (get (second loopcode) 1)  ; nmax
           '()))


(unroll '(dotimes [i 3]
           (println (get arr i))) )

(do (println (get arr 0))
    (println (get arr 1))
    (println (get arr 2)))