diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-09 18:26:25 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-04-09 18:28:28 +0300 |
| commit | 5b6637fb92c54b8f367ec8751f53f6f238d8dbed (patch) | |
| tree | 11f1e11690504606db9879b7d282f5955f1ea225 /src/test_fibo.atk16 | |
| parent | 5ab9865fa6ed343ae0cffefb81b20af2e533e36f (diff) | |
Remake ALU
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 |
