-
Notifications
You must be signed in to change notification settings - Fork 9
/
runtime_armv7.S
103 lines (79 loc) · 2.13 KB
/
runtime_armv7.S
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
################################################################################
# Compiler Construction - Minimal Lambda Language
################################################################################
################################################################################
# main
################################################################################
.text
.global main
main:
stmfd sp!, {lr}
.global _lambda_main
bl _lambda_main
ldmfd sp!, {pc}
################################################################################
# __builtin_input_int
################################################################################
.text
.global __builtin_input_int
__builtin_input_int:
stmfd sp!, {r0, fp, lr}
# Allocate a word to store the result of scanf.
sub sp, sp, #4
# Invoke scanf.
ldr r0, =scanf_format
mov r1, sp
bl scanf
# Load the result.
ldr r1, [sp]
# Deallocate the word.
add sp, sp, #4
ldmfd sp!, {r0, fp, pc}
.data
scanf_format:
.string "%d"
.data
.p2align 2
.global __builtin_input_int_closure
.word 0
__builtin_input_int_closure:
.word __builtin_input_int
################################################################################
# __builtin_print_int
################################################################################
.text
.global __builtin_print_int
__builtin_print_int:
stmfd sp!, {r0, fp, lr}
# Invoke printf.
ldr r0, =printf_format
ldr r1, [sp, #12]
bl printf
eor r1, r1, r1
ldmfd sp!, {r0, fp, lr}
add sp, sp, #4
mov pc, lr
.data
printf_format:
.string "%d\n"
.data
.global __builtin_print_int_closure
.word 0
__builtin_print_int_closure:
.word __builtin_print_int
################################################################################
# __builtin_print_int
################################################################################
.text
.global __builtin_allocate
__builtin_allocate:
stmfd sp!, {r0, fp, lr}
add r0, r1, #2
lsl r0, r0, #2
push {r1}
bl malloc
pop {r1}
add r1, r1, #1
str r1, [r0]
add r1, r0, #4
ldmfd sp!, {r0, fp, pc}