summaryrefslogtreecommitdiff
path: root/asm/libstdc++/mem_funcs.s
blob: 426d2cbee4c7e46b9edcbf59386dcc703653b6f0 (plain)
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global __copy_longs_aligned
__copy_longs_aligned:
/* 801CA3E4 001C6044  7C 03 00 D0 */	neg r0, r3
/* 801CA3E8 001C6048  38 84 FF FF */	addi r4, r4, -1
/* 801CA3EC 001C604C  54 06 07 BF */	clrlwi. r6, r0, 0x1e
/* 801CA3F0 001C6050  38 63 FF FF */	addi r3, r3, -1
/* 801CA3F4 001C6054  41 82 00 18 */	beq lbl_801CA40C
/* 801CA3F8 001C6058  7C A6 28 50 */	subf r5, r6, r5
lbl_801CA3FC:
/* 801CA3FC 001C605C  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CA400 001C6060  34 C6 FF FF */	addic. r6, r6, -1
/* 801CA404 001C6064  9C 03 00 01 */	stbu r0, 1(r3)
/* 801CA408 001C6068  40 82 FF F4 */	bne lbl_801CA3FC
lbl_801CA40C:
/* 801CA40C 001C606C  54 A6 D9 7F */	rlwinm. r6, r5, 0x1b, 5, 0x1f
/* 801CA410 001C6070  38 E4 FF FD */	addi r7, r4, -3
/* 801CA414 001C6074  38 83 FF FD */	addi r4, r3, -3
/* 801CA418 001C6078  41 82 00 4C */	beq lbl_801CA464
lbl_801CA41C:
/* 801CA41C 001C607C  80 67 00 04 */	lwz r3, 4(r7)
/* 801CA420 001C6080  34 C6 FF FF */	addic. r6, r6, -1
/* 801CA424 001C6084  80 07 00 08 */	lwz r0, 8(r7)
/* 801CA428 001C6088  90 64 00 04 */	stw r3, 4(r4)
/* 801CA42C 001C608C  80 67 00 0C */	lwz r3, 0xc(r7)
/* 801CA430 001C6090  90 04 00 08 */	stw r0, 8(r4)
/* 801CA434 001C6094  80 07 00 10 */	lwz r0, 0x10(r7)
/* 801CA438 001C6098  90 64 00 0C */	stw r3, 0xc(r4)
/* 801CA43C 001C609C  80 67 00 14 */	lwz r3, 0x14(r7)
/* 801CA440 001C60A0  90 04 00 10 */	stw r0, 0x10(r4)
/* 801CA444 001C60A4  80 07 00 18 */	lwz r0, 0x18(r7)
/* 801CA448 001C60A8  90 64 00 14 */	stw r3, 0x14(r4)
/* 801CA44C 001C60AC  80 67 00 1C */	lwz r3, 0x1c(r7)
/* 801CA450 001C60B0  90 04 00 18 */	stw r0, 0x18(r4)
/* 801CA454 001C60B4  84 07 00 20 */	lwzu r0, 0x20(r7)
/* 801CA458 001C60B8  90 64 00 1C */	stw r3, 0x1c(r4)
/* 801CA45C 001C60BC  94 04 00 20 */	stwu r0, 0x20(r4)
/* 801CA460 001C60C0  40 82 FF BC */	bne lbl_801CA41C
lbl_801CA464:
/* 801CA464 001C60C4  54 A3 F7 7F */	rlwinm. r3, r5, 0x1e, 0x1d, 0x1f
/* 801CA468 001C60C8  41 82 00 14 */	beq lbl_801CA47C
lbl_801CA46C:
/* 801CA46C 001C60CC  84 07 00 04 */	lwzu r0, 4(r7)
/* 801CA470 001C60D0  34 63 FF FF */	addic. r3, r3, -1
/* 801CA474 001C60D4  94 04 00 04 */	stwu r0, 4(r4)
/* 801CA478 001C60D8  40 82 FF F4 */	bne lbl_801CA46C
lbl_801CA47C:
/* 801CA47C 001C60DC  54 A5 07 BF */	clrlwi. r5, r5, 0x1e
/* 801CA480 001C60E0  38 C7 00 03 */	addi r6, r7, 3
/* 801CA484 001C60E4  38 64 00 03 */	addi r3, r4, 3
/* 801CA488 001C60E8  4D 82 00 20 */	beqlr
lbl_801CA48C:
/* 801CA48C 001C60EC  8C 06 00 01 */	lbzu r0, 1(r6)
/* 801CA490 001C60F0  34 A5 FF FF */	addic. r5, r5, -1
/* 801CA494 001C60F4  9C 03 00 01 */	stbu r0, 1(r3)
/* 801CA498 001C60F8  40 82 FF F4 */	bne lbl_801CA48C
/* 801CA49C 001C60FC  4E 80 00 20 */	blr

.global __copy_longs_rev_aligned
__copy_longs_rev_aligned:
/* 801CA4A0 001C6100  7C E3 2A 14 */	add r7, r3, r5
/* 801CA4A4 001C6104  7C C4 2A 14 */	add r6, r4, r5
/* 801CA4A8 001C6108  54 E3 07 BF */	clrlwi. r3, r7, 0x1e
/* 801CA4AC 001C610C  41 82 00 18 */	beq lbl_801CA4C4
/* 801CA4B0 001C6110  7C A3 28 50 */	subf r5, r3, r5
lbl_801CA4B4:
/* 801CA4B4 001C6114  8C 06 FF FF */	lbzu r0, -1(r6)
/* 801CA4B8 001C6118  34 63 FF FF */	addic. r3, r3, -1
/* 801CA4BC 001C611C  9C 07 FF FF */	stbu r0, -1(r7)
/* 801CA4C0 001C6120  40 82 FF F4 */	bne lbl_801CA4B4
lbl_801CA4C4:
/* 801CA4C4 001C6124  54 A4 D9 7F */	rlwinm. r4, r5, 0x1b, 5, 0x1f
/* 801CA4C8 001C6128  41 82 00 4C */	beq lbl_801CA514
lbl_801CA4CC:
/* 801CA4CC 001C612C  80 66 FF FC */	lwz r3, -4(r6)
/* 801CA4D0 001C6130  34 84 FF FF */	addic. r4, r4, -1
/* 801CA4D4 001C6134  80 06 FF F8 */	lwz r0, -8(r6)
/* 801CA4D8 001C6138  90 67 FF FC */	stw r3, -4(r7)
/* 801CA4DC 001C613C  80 66 FF F4 */	lwz r3, -0xc(r6)
/* 801CA4E0 001C6140  90 07 FF F8 */	stw r0, -8(r7)
/* 801CA4E4 001C6144  80 06 FF F0 */	lwz r0, -0x10(r6)
/* 801CA4E8 001C6148  90 67 FF F4 */	stw r3, -0xc(r7)
/* 801CA4EC 001C614C  80 66 FF EC */	lwz r3, -0x14(r6)
/* 801CA4F0 001C6150  90 07 FF F0 */	stw r0, -0x10(r7)
/* 801CA4F4 001C6154  80 06 FF E8 */	lwz r0, -0x18(r6)
/* 801CA4F8 001C6158  90 67 FF EC */	stw r3, -0x14(r7)
/* 801CA4FC 001C615C  80 66 FF E4 */	lwz r3, -0x1c(r6)
/* 801CA500 001C6160  90 07 FF E8 */	stw r0, -0x18(r7)
/* 801CA504 001C6164  84 06 FF E0 */	lwzu r0, -0x20(r6)
/* 801CA508 001C6168  90 67 FF E4 */	stw r3, -0x1c(r7)
/* 801CA50C 001C616C  94 07 FF E0 */	stwu r0, -0x20(r7)
/* 801CA510 001C6170  40 82 FF BC */	bne lbl_801CA4CC
lbl_801CA514:
/* 801CA514 001C6174  54 A3 F7 7F */	rlwinm. r3, r5, 0x1e, 0x1d, 0x1f
/* 801CA518 001C6178  41 82 00 14 */	beq lbl_801CA52C
lbl_801CA51C:
/* 801CA51C 001C617C  84 06 FF FC */	lwzu r0, -4(r6)
/* 801CA520 001C6180  34 63 FF FF */	addic. r3, r3, -1
/* 801CA524 001C6184  94 07 FF FC */	stwu r0, -4(r7)
/* 801CA528 001C6188  40 82 FF F4 */	bne lbl_801CA51C
lbl_801CA52C:
/* 801CA52C 001C618C  54 A5 07 BF */	clrlwi. r5, r5, 0x1e
/* 801CA530 001C6190  4D 82 00 20 */	beqlr
lbl_801CA534:
/* 801CA534 001C6194  8C 06 FF FF */	lbzu r0, -1(r6)
/* 801CA538 001C6198  34 A5 FF FF */	addic. r5, r5, -1
/* 801CA53C 001C619C  9C 07 FF FF */	stbu r0, -1(r7)
/* 801CA540 001C61A0  40 82 FF F4 */	bne lbl_801CA534
/* 801CA544 001C61A4  4E 80 00 20 */	blr

.global __copy_longs_unaligned
__copy_longs_unaligned:
/* 801CA548 001C61A8  7C 03 00 D0 */	neg r0, r3
/* 801CA54C 001C61AC  39 04 FF FF */	addi r8, r4, -1
/* 801CA550 001C61B0  54 06 07 BF */	clrlwi. r6, r0, 0x1e
/* 801CA554 001C61B4  38 63 FF FF */	addi r3, r3, -1
/* 801CA558 001C61B8  41 82 00 18 */	beq lbl_801CA570
/* 801CA55C 001C61BC  7C A6 28 50 */	subf r5, r6, r5
lbl_801CA560:
/* 801CA560 001C61C0  8C 08 00 01 */	lbzu r0, 1(r8)
/* 801CA564 001C61C4  34 C6 FF FF */	addic. r6, r6, -1
/* 801CA568 001C61C8  9C 03 00 01 */	stbu r0, 1(r3)
/* 801CA56C 001C61CC  40 82 FF F4 */	bne lbl_801CA560
lbl_801CA570:
/* 801CA570 001C61D0  38 08 00 01 */	addi r0, r8, 1
/* 801CA574 001C61D4  38 C3 FF FD */	addi r6, r3, -3
/* 801CA578 001C61D8  54 09 07 BE */	clrlwi r9, r0, 0x1e
/* 801CA57C 001C61DC  54 A7 E8 FE */	srwi r7, r5, 3
/* 801CA580 001C61E0  7D 09 40 50 */	subf r8, r9, r8
/* 801CA584 001C61E4  54 0A 1E F8 */	rlwinm r10, r0, 3, 0x1b, 0x1c
/* 801CA588 001C61E8  84 88 00 01 */	lwzu r4, 1(r8)
/* 801CA58C 001C61EC  21 6A 00 20 */	subfic r11, r10, 0x20
lbl_801CA590:
/* 801CA590 001C61F0  80 68 00 04 */	lwz r3, 4(r8)
/* 801CA594 001C61F4  7C 84 50 30 */	slw r4, r4, r10
/* 801CA598 001C61F8  34 E7 FF FF */	addic. r7, r7, -1
/* 801CA59C 001C61FC  7C 60 5C 30 */	srw r0, r3, r11
/* 801CA5A0 001C6200  7C 63 50 30 */	slw r3, r3, r10
/* 801CA5A4 001C6204  7C 80 03 78 */	or r0, r4, r0
/* 801CA5A8 001C6208  90 06 00 04 */	stw r0, 4(r6)
/* 801CA5AC 001C620C  84 88 00 08 */	lwzu r4, 8(r8)
/* 801CA5B0 001C6210  7C 80 5C 30 */	srw r0, r4, r11
/* 801CA5B4 001C6214  7C 60 03 78 */	or r0, r3, r0
/* 801CA5B8 001C6218  94 06 00 08 */	stwu r0, 8(r6)
/* 801CA5BC 001C621C  40 82 FF D4 */	bne lbl_801CA590
/* 801CA5C0 001C6220  54 A0 07 7B */	rlwinm. r0, r5, 0, 0x1d, 0x1d
/* 801CA5C4 001C6224  41 82 00 18 */	beq lbl_801CA5DC
/* 801CA5C8 001C6228  84 08 00 04 */	lwzu r0, 4(r8)
/* 801CA5CC 001C622C  7C 83 50 30 */	slw r3, r4, r10
/* 801CA5D0 001C6230  7C 00 5C 30 */	srw r0, r0, r11
/* 801CA5D4 001C6234  7C 60 03 78 */	or r0, r3, r0
/* 801CA5D8 001C6238  94 06 00 04 */	stwu r0, 4(r6)
lbl_801CA5DC:
/* 801CA5DC 001C623C  54 A5 07 BF */	clrlwi. r5, r5, 0x1e
/* 801CA5E0 001C6240  38 88 00 03 */	addi r4, r8, 3
/* 801CA5E4 001C6244  38 66 00 03 */	addi r3, r6, 3
/* 801CA5E8 001C6248  4D 82 00 20 */	beqlr
/* 801CA5EC 001C624C  20 09 00 04 */	subfic r0, r9, 4
/* 801CA5F0 001C6250  7C 80 20 50 */	subf r4, r0, r4
lbl_801CA5F4:
/* 801CA5F4 001C6254  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CA5F8 001C6258  34 A5 FF FF */	addic. r5, r5, -1
/* 801CA5FC 001C625C  9C 03 00 01 */	stbu r0, 1(r3)
/* 801CA600 001C6260  40 82 FF F4 */	bne lbl_801CA5F4
/* 801CA604 001C6264  4E 80 00 20 */	blr

.global __copy_longs_rev_unaligned
__copy_longs_rev_unaligned:
/* 801CA608 001C6268  7D 63 2A 14 */	add r11, r3, r5
/* 801CA60C 001C626C  7D 44 2A 14 */	add r10, r4, r5
/* 801CA610 001C6270  55 63 07 BF */	clrlwi. r3, r11, 0x1e
/* 801CA614 001C6274  41 82 00 18 */	beq lbl_801CA62C
/* 801CA618 001C6278  7C A3 28 50 */	subf r5, r3, r5
lbl_801CA61C:
/* 801CA61C 001C627C  8C 0A FF FF */	lbzu r0, -1(r10)
/* 801CA620 001C6280  34 63 FF FF */	addic. r3, r3, -1
/* 801CA624 001C6284  9C 0B FF FF */	stbu r0, -1(r11)
/* 801CA628 001C6288  40 82 FF F4 */	bne lbl_801CA61C
lbl_801CA62C:
/* 801CA62C 001C628C  55 48 1E F8 */	rlwinm r8, r10, 3, 0x1b, 0x1c
/* 801CA630 001C6290  55 47 07 BE */	clrlwi r7, r10, 0x1e
/* 801CA634 001C6294  21 28 00 20 */	subfic r9, r8, 0x20
/* 801CA638 001C6298  54 A6 E8 FE */	srwi r6, r5, 3
/* 801CA63C 001C629C  20 07 00 04 */	subfic r0, r7, 4
/* 801CA640 001C62A0  7D 4A 02 14 */	add r10, r10, r0
/* 801CA644 001C62A4  84 8A FF FC */	lwzu r4, -4(r10)
lbl_801CA648:
/* 801CA648 001C62A8  80 0A FF FC */	lwz r0, -4(r10)
/* 801CA64C 001C62AC  7C 83 4C 30 */	srw r3, r4, r9
/* 801CA650 001C62B0  34 C6 FF FF */	addic. r6, r6, -1
/* 801CA654 001C62B4  7C 04 40 30 */	slw r4, r0, r8
/* 801CA658 001C62B8  7C 00 4C 30 */	srw r0, r0, r9
/* 801CA65C 001C62BC  7C 83 1B 78 */	or r3, r4, r3
/* 801CA660 001C62C0  90 6B FF FC */	stw r3, -4(r11)
/* 801CA664 001C62C4  84 8A FF F8 */	lwzu r4, -8(r10)
/* 801CA668 001C62C8  7C 83 40 30 */	slw r3, r4, r8
/* 801CA66C 001C62CC  7C 60 03 78 */	or r0, r3, r0
/* 801CA670 001C62D0  94 0B FF F8 */	stwu r0, -8(r11)
/* 801CA674 001C62D4  40 82 FF D4 */	bne lbl_801CA648
/* 801CA678 001C62D8  54 A0 07 7B */	rlwinm. r0, r5, 0, 0x1d, 0x1d
/* 801CA67C 001C62DC  41 82 00 18 */	beq lbl_801CA694
/* 801CA680 001C62E0  84 6A FF FC */	lwzu r3, -4(r10)
/* 801CA684 001C62E4  7C 80 4C 30 */	srw r0, r4, r9
/* 801CA688 001C62E8  7C 63 40 30 */	slw r3, r3, r8
/* 801CA68C 001C62EC  7C 60 03 78 */	or r0, r3, r0
/* 801CA690 001C62F0  94 0B FF FC */	stwu r0, -4(r11)
lbl_801CA694:
/* 801CA694 001C62F4  54 A5 07 BF */	clrlwi. r5, r5, 0x1e
/* 801CA698 001C62F8  4D 82 00 20 */	beqlr
/* 801CA69C 001C62FC  7D 4A 3A 14 */	add r10, r10, r7
lbl_801CA6A0:
/* 801CA6A0 001C6300  8C 0A FF FF */	lbzu r0, -1(r10)
/* 801CA6A4 001C6304  34 A5 FF FF */	addic. r5, r5, -1
/* 801CA6A8 001C6308  9C 0B FF FF */	stbu r0, -1(r11)
/* 801CA6AC 001C630C  40 82 FF F4 */	bne lbl_801CA6A0
/* 801CA6B0 001C6310  4E 80 00 20 */	blr