aboutsummaryrefslogtreecommitdiffstats
path: root/src/test_fibo.atk16
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-04-09 18:26:25 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2023-04-09 18:28:28 +0300
commit5b6637fb92c54b8f367ec8751f53f6f238d8dbed (patch)
tree11f1e11690504606db9879b7d282f5955f1ea225 /src/test_fibo.atk16
parent5ab9865fa6ed343ae0cffefb81b20af2e533e36f (diff)
Remake ALU
Diffstat (limited to 'src/test_fibo.atk16')
-rw-r--r--src/test_fibo.atk1647
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