require 'jit'
fib = nil
signature = JIT::Type.create_signature(
:CDECL,
:INT,
[ :INT ])
fib = JIT::Function.build(signature) do |f|
n = f.param(0)
a = f.value(:INT, 0)
b = f.value(:INT, 1)
c = f.value(:INT, 1)
i = f.value(:INT, 0)
f.while{ i < n }.do {
c.store(a + b)
a.store(b)
b.store(c)
i.store(i + 1)
}.end
f.return(c)
end
values = (0...10).collect { |x| fib.apply(x) }
p values #=> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]