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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
.include "include/uskel.s"
.include "include/listops.s"
.include "include/intops.s"
.include "include/io.s"
.include "include/main_exit.s"
# | lag1 | lag2 | -> cont
.thunkcode fibs
# next value
pushq 030(%rbp)
pushq 020(%rbp)
pushq $2
pushq $plus
mov %rsp, %r11
# fib call with the next value
push %r11
pushq 030(%rbp)
pushq $2
pushq $fibs
mov %rsp, %r12
# cons list with lag1
push %r12
push 020(%rbp)
pushq $1
pushq $LIST_code
mov %rsp, %r13
# replace self with IND
mov %r13, 010(%rbp)
movq $IND_code, 0(%rbp)
mov %rsi, %rbp
mov %r13, %rsi
enter_rbp
# || -> cont
.thunkcode fibs0
pushq $1
pushq $INT_code
mov %rsp, %r12
pushq $0
pushq $INT_code
mov %rsp, %r11
push %r12
push %r11
pushq $2
pushq $fibs
enter %rsp
.thunkcode main
pushq $0
pushq $fibs0
mov %rsp, %r12
pushq $20
pushq $INT_code
mov %rsp, %r11
push %r12
push %r11
pushq $2
pushq $list_int_index
mov %rsp, %r11
push %r11
pushq $1
pushq $print
mov %rsp, %r11
push %rsi
pushq $1
pushq $main_exit
mov %rsp, %rsi
enter %r11
|