-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathmultiple_results.asm
98 lines (77 loc) · 1.45 KB
/
multiple_results.asm
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
# demonstrates multiple return values
# ========================================
# function with 5 return values
.fun multi NORMAL [U32 U32 U32 U32 U32] = [U32 U32]
.reg U32 [a b add sub mul div mod]
.bbl start
poparg a
poparg b
add add = a b
sub sub = a b
mul mul = a b
div div = a b
rem mod = a b
pusharg mod
pusharg div
pusharg mul
pusharg sub
pusharg add
ret
# function with heterogeneous return values
.fun hetero NORMAL [S8 S16 S32 U8 U16 U32] = []
.bbl start
pusharg 0:U32
pusharg 1:U16
pusharg 2:U8
pusharg -3:S32
pusharg -4:S16
pusharg -5:S8
ret
# ========================================
.fun main NORMAL [S32] = []
.reg U32 [a s m d M x y]
.bbl start
pusharg 6:U32
pusharg 70:U32
bsr multi
poparg a
poparg s
poparg m
poparg d
poparg M
pusharg a
bsr print_u_ln
pusharg s
bsr print_u_ln
pusharg m
bsr print_u_ln
pusharg d
bsr print_u_ln
pusharg M
bsr print_u_ln
###
bsr hetero
poparg s8:S8
poparg s16:S16
poparg s32:S32
poparg u8:U8
poparg u16:U16
poparg u32:U32
conv ss:S32 s8
pusharg ss
bsr print_d_ln
conv ss s16
pusharg ss
bsr print_d_ln
pusharg s32
bsr print_d_ln
conv uu:U32 u8
pusharg uu
bsr print_u_ln
conv uu u16
pusharg uu
bsr print_u_ln
pusharg u32
bsr print_u_ln
pusharg 0:S32
ret