blob: 7f1abb90eacf657a7e1ffdf9b3b1b157af316fa0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
|