aboutsummaryrefslogtreecommitdiffstats
path: root/src/test_fibo.atk16
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-04-10 17:30:25 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2023-04-10 17:30:25 +0300
commit56fd37c60eb0d58ed4762340ddc85b74347bcd71 (patch)
treed4d6362cb591ddb9658536d831f8c4433089189f /src/test_fibo.atk16
parent16b4fbd209d71bdb1a066bacd03a9ccd1cf3d16c (diff)
Do stuff
Diffstat (limited to 'src/test_fibo.atk16')
-rw-r--r--src/test_fibo.atk1619
1 files changed, 9 insertions, 10 deletions
diff --git a/src/test_fibo.atk16 b/src/test_fibo.atk16
index 7f1abb9..a03f14b 100644
--- a/src/test_fibo.atk16
+++ b/src/test_fibo.atk16
@@ -1,9 +1,12 @@
@opt stack_pointer RG
+@opt csr_scratch RF
+
+@use ext_std:*
@label program
; call fibo subroutine with parameter 10
ldi RA 10
- csr fibo
+ csi fibo
hlt
@label fibo
@@ -13,24 +16,21 @@
; return value:
; RA fibo(n) : u16
- spu RB ; prelude
+ spu RB ; prelude
spu RC
- ldi RC 2 ; if n < 2, return n
- sub RA RC RA
+ subi RA 2 RA ; if n < 2, return n
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
+ dec RA ; n -= 1
bri f_zero fibo_done ; loop while n > 0
jpi fibo_loop
@@ -39,9 +39,8 @@
spo RB
rsr
@label fibo_done
- ldr RD RA
- spo RE
- spo RD
+ mov RD RA
+ spo RD ; restore registers
spo RC
spo RB
rsr