diff options
Diffstat (limited to 'src/test_fibo.atk16')
| -rw-r--r-- | src/test_fibo.atk16 | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/test_fibo.atk16 b/src/test_fibo.atk16 new file mode 100644 index 0000000..7f1abb9 --- /dev/null +++ b/src/test_fibo.atk16 @@ -0,0 +1,47 @@ +@opt stack_pointer RG + +@label program + ; call fibo subroutine with parameter 10 + ldi RA 10 + csr fibo + hlt + +@label fibo + ; function fibo + ; parameters: + ; RA n : u16 + ; return value: + ; RA fibo(n) : u16 + + spu RB ; prelude + spu RC + + ldi RC 2 ; if n < 2, return n + sub RA RC RA + bri f_sign fibo_early + + spu RD ; prelude + spu RE + + ldi RE 1 ; constant 1 + ldi RB 0 ; a = 0 + ldi RC 1 ; b = 1 +@label fibo_loop + add RB RC RD ; v = a + b + mov RC RB ; a = b + mov RD RC ; b = v + sub RA RE RA ; n -= 1 + bri f_zero fibo_done ; loop while n > 0 + jpi fibo_loop + +@label fibo_early + spo RC + spo RB + rsr +@label fibo_done + ldr RD RA + spo RE + spo RD + spo RC + spo RB + rsr |
