Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/lib/asm/bcopy.s
7858 views
1
.set noat // allow manual use of $at
2
.set noreorder // don't insert nops after branches
3
.set gp=64
4
5
#include "macros.inc"
6
7
8
.section .text, "ax"
9
10
glabel bcopy
11
beqz $a2, .L80323A4C
12
move $a3, $a1
13
beq $a0, $a1, .L80323A4C
14
slt $at, $a1, $a0
15
bnezl $at, .L80323A14
16
slti $at, $a2, 0x10
17
add $v0, $a0, $a2
18
slt $at, $a1, $v0
19
beql $at, $zero, .L80323A14
20
slti $at, $a2, 0x10
21
b .L80323B78
22
slti $at, $a2, 0x10
23
slti $at, $a2, 0x10
24
.L80323A14:
25
bnez $at, .L80323A2C
26
nop
27
andi $v0, $a0, 3
28
andi $v1, $a1, 3
29
beq $v0, $v1, .L80323A54
30
nop
31
.L80323A2C:
32
beqz $a2, .L80323A4C
33
nop
34
addu $v1, $a0, $a2
35
.L80323A38:
36
lb $v0, ($a0)
37
addiu $a0, $a0, 1
38
addiu $a1, $a1, 1
39
bne $a0, $v1, .L80323A38
40
sb $v0, -1($a1)
41
.L80323A4C:
42
jr $ra
43
move $v0, $a3
44
45
.L80323A54:
46
beqz $v0, .L80323AB8
47
li $at, 1
48
beq $v0, $at, .L80323A9C
49
li $at, 2
50
beql $v0, $at, .L80323A88
51
lh $v0, ($a0)
52
lb $v0, ($a0)
53
addiu $a0, $a0, 1
54
addiu $a1, $a1, 1
55
addiu $a2, $a2, -1
56
b .L80323AB8
57
sb $v0, -1($a1)
58
lh $v0, ($a0)
59
.L80323A88:
60
addiu $a0, $a0, 2
61
addiu $a1, $a1, 2
62
addiu $a2, $a2, -2
63
b .L80323AB8
64
sh $v0, -2($a1)
65
.L80323A9C:
66
lb $v0, ($a0)
67
lh $v1, 1($a0)
68
addiu $a0, $a0, 3
69
addiu $a1, $a1, 3
70
addiu $a2, $a2, -3
71
sb $v0, -3($a1)
72
sh $v1, -2($a1)
73
.L80323AB8:
74
slti $at, $a2, 0x20
75
bnezl $at, .L80323B18
76
slti $at, $a2, 0x10
77
lw $v0, ($a0)
78
lw $v1, 4($a0)
79
lw $t0, 8($a0)
80
lw $t1, 0xc($a0)
81
lw $t2, 0x10($a0)
82
lw $t3, 0x14($a0)
83
lw $t4, 0x18($a0)
84
lw $t5, 0x1c($a0)
85
addiu $a0, $a0, 0x20
86
addiu $a1, $a1, 0x20
87
addiu $a2, $a2, -0x20
88
sw $v0, -0x20($a1)
89
sw $v1, -0x1c($a1)
90
sw $t0, -0x18($a1)
91
sw $t1, -0x14($a1)
92
sw $t2, -0x10($a1)
93
sw $t3, -0xc($a1)
94
sw $t4, -8($a1)
95
b .L80323AB8
96
sw $t5, -4($a1)
97
.L80323B14:
98
slti $at, $a2, 0x10
99
.L80323B18:
100
bnezl $at, .L80323B54
101
slti $at, $a2, 4
102
lw $v0, ($a0)
103
lw $v1, 4($a0)
104
lw $t0, 8($a0)
105
lw $t1, 0xc($a0)
106
addiu $a0, $a0, 0x10
107
addiu $a1, $a1, 0x10
108
addiu $a2, $a2, -0x10
109
sw $v0, -0x10($a1)
110
sw $v1, -0xc($a1)
111
sw $t0, -8($a1)
112
b .L80323B14
113
sw $t1, -4($a1)
114
.L80323B50:
115
slti $at, $a2, 4
116
.L80323B54:
117
bnez $at, .L80323A2C
118
nop
119
lw $v0, ($a0)
120
addiu $a0, $a0, 4
121
addiu $a1, $a1, 4
122
addiu $a2, $a2, -4
123
b .L80323B50
124
sw $v0, -4($a1)
125
slti $at, $a2, 0x10
126
.L80323B78:
127
add $a0, $a0, $a2
128
bnez $at, .L80323B94
129
add $a1, $a1, $a2
130
andi $v0, $a0, 3
131
andi $v1, $a1, 3
132
beq $v0, $v1, .L80323BC4
133
nop
134
.L80323B94:
135
beqz $a2, .L80323A4C
136
nop
137
addiu $a0, $a0, -1
138
addiu $a1, $a1, -1
139
subu $v1, $a0, $a2
140
.L80323BA8:
141
lb $v0, ($a0)
142
addiu $a0, $a0, -1
143
addiu $a1, $a1, -1
144
bne $a0, $v1, .L80323BA8
145
sb $v0, 1($a1)
146
jr $ra
147
move $v0, $a3
148
149
.L80323BC4:
150
beqz $v0, .L80323C28
151
li $at, 3
152
beq $v0, $at, .L80323C0C
153
li $at, 2
154
beql $v0, $at, .L80323BF8
155
lh $v0, -2($a0)
156
lb $v0, -1($a0)
157
addiu $a0, $a0, -1
158
addiu $a1, $a1, -1
159
addiu $a2, $a2, -1
160
b .L80323C28
161
sb $v0, ($a1)
162
lh $v0, -2($a0)
163
.L80323BF8:
164
addiu $a0, $a0, -2
165
addiu $a1, $a1, -2
166
addiu $a2, $a2, -2
167
b .L80323C28
168
sh $v0, ($a1)
169
.L80323C0C:
170
lb $v0, -1($a0)
171
lh $v1, -3($a0)
172
addiu $a0, $a0, -3
173
addiu $a1, $a1, -3
174
addiu $a2, $a2, -3
175
sb $v0, 2($a1)
176
sh $v1, ($a1)
177
.L80323C28:
178
slti $at, $a2, 0x20
179
bnezl $at, .L80323C88
180
slti $at, $a2, 0x10
181
lw $v0, -4($a0)
182
lw $v1, -8($a0)
183
lw $t0, -0xc($a0)
184
lw $t1, -0x10($a0)
185
lw $t2, -0x14($a0)
186
lw $t3, -0x18($a0)
187
lw $t4, -0x1c($a0)
188
lw $t5, -0x20($a0)
189
addiu $a0, $a0, -0x20
190
addiu $a1, $a1, -0x20
191
addiu $a2, $a2, -0x20
192
sw $v0, 0x1c($a1)
193
sw $v1, 0x18($a1)
194
sw $t0, 0x14($a1)
195
sw $t1, 0x10($a1)
196
sw $t2, 0xc($a1)
197
sw $t3, 8($a1)
198
sw $t4, 4($a1)
199
b .L80323C28
200
sw $t5, ($a1)
201
.L80323C84:
202
slti $at, $a2, 0x10
203
.L80323C88:
204
bnezl $at, .L80323CC4
205
slti $at, $a2, 4
206
lw $v0, -4($a0)
207
lw $v1, -8($a0)
208
lw $t0, -0xc($a0)
209
lw $t1, -0x10($a0)
210
addiu $a0, $a0, -0x10
211
addiu $a1, $a1, -0x10
212
addiu $a2, $a2, -0x10
213
sw $v0, 0xc($a1)
214
sw $v1, 8($a1)
215
sw $t0, 4($a1)
216
b .L80323C84
217
sw $t1, ($a1)
218
.L80323CC0:
219
slti $at, $a2, 4
220
.L80323CC4:
221
bnez $at, .L80323B94
222
nop
223
lw $v0, -4($a0)
224
addiu $a0, $a0, -4
225
addiu $a1, $a1, -4
226
addiu $a2, $a2, -4
227
b .L80323CC0
228
sw $v0, ($a1)
229
nop
230
nop
231
nop
232
233
234