-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplayground.asm
More file actions
131 lines (131 loc) · 1.6 KB
/
playground.asm
File metadata and controls
131 lines (131 loc) · 1.6 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
.macro PushImm ($number)
li a0, $number
sw a0, (sp)
addi sp, sp, -4
.end_macro
.macro Pop %reg
lw %reg, 4(sp)
addi sp, sp, 4
.end_macro
.macro Push %reg
sw %reg, (sp)
addi sp, sp, -4
.end_macro
.macro PlusMacro
Pop t1
Pop a0
add a0, a0, t1
Push a0
.end_macro
.macro MinusMacro
Pop t1
Pop a0
sub a0, a0, t1
Push a0
.end_macro
.macro DivMacro
Pop t1
Pop a0
div a0, a0, t1
Push a0
.end_macro
.macro TimesMacro
Pop t1
Pop a0
mul a0, a0, t1
Push a0
.end_macro
.macro GtrMacro
Pop t1
Pop a0
sgt a0, a0, t1
Push a0
.end_macro
.macro LessMacro
Pop t1
Pop a0
slt a0, a0, t1
Push a0
.end_macro
.macro EqMacro
Pop t1
Pop a0
sub t1, a0, t1
seqz a0, t1
Push a0
.end_macro
.macro GtrEqMacro
Pop t1
Pop a0
sub t1, a0, t1
sgtz a0, t1
seqz t1, t1
or a0, t1, a0
Push a0
.end_macro
.macro LessEqMacro
Pop t1
Pop a0
sub t1, t1, a0
sgtz a0, t1
seqz t1, t1
or a0, t1, a0
Push a0
.end_macro
.macro AndMacro
Pop t1
Pop a0
and a0, a0, t1
Push a0
.end_macro
.macro OrMacro
Pop t1
Pop a0
or a0, a0, t1
Push a0
.end_macro
.macro XorMacro
Pop t1
Pop a0
xor a0, a0, t1
Push a0
.end_macro
.macro JumpMacro %label
lw a0, 4(sp)
addi sp, sp, 4
bgtz a0, %label
.end_macro
.text
b main_label
fun_label:
lw a0, -4(fp) #load arg
Push a0
lw a0, -8(fp) #load arg
Push a0
EqMacro
JumpMacro label_1
PushImm 0
b label_2
label_1:
PushImm 8
PushImm 2
DivMacro
label_2:
ret
main_label:
sw ra, 0(sp) #AR start
addi sp, sp, -4
sw sp, 0(sp)
addi sp, sp, -4
sw fp, 0(sp)
addi sp, sp, -4
PushImm 1
PushImm 1
PushImm 3
mv fp, sp
addi fp, fp, 16
jal fun_label #AR finish
lw sp, 4(fp) #restoring SP
lw ra, 4(sp) #restoring ra
sw a0, 4(sp) #store ret val
lw fp, 0(fp) #restoring FP