summaryrefslogtreecommitdiff
path: root/asm/MSL_C/MSL_Common/mem.s
blob: 4d333aeae6c79b70e43acbae568720cd0bb620f4 (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
.include "macros.inc"

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

.global memmove
memmove:
/* 801CA274 001C5ED4  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801CA278 001C5ED8  7C 08 02 A6 */	mflr r0
/* 801CA27C 001C5EDC  7C 66 22 78 */	xor r6, r3, r4
/* 801CA280 001C5EE0  28 05 00 20 */	cmplwi r5, 0x20
/* 801CA284 001C5EE4  90 01 00 14 */	stw r0, 0x14(r1)
/* 801CA288 001C5EE8  7C C0 00 34 */	cntlzw r0, r6
/* 801CA28C 001C5EEC  7C 60 00 30 */	slw r0, r3, r0
/* 801CA290 001C5EF0  93 E1 00 0C */	stw r31, 0xc(r1)
/* 801CA294 001C5EF4  7C 7F 1B 78 */	mr r31, r3
/* 801CA298 001C5EF8  54 07 0F FE */	srwi r7, r0, 0x1f
/* 801CA29C 001C5EFC  41 80 00 40 */	blt lbl_801CA2DC
/* 801CA2A0 001C5F00  54 C0 07 BF */	clrlwi. r0, r6, 0x1e
/* 801CA2A4 001C5F04  41 82 00 1C */	beq lbl_801CA2C0
/* 801CA2A8 001C5F08  2C 07 00 00 */	cmpwi r7, 0
/* 801CA2AC 001C5F0C  40 82 00 0C */	bne lbl_801CA2B8
/* 801CA2B0 001C5F10  48 00 02 99 */	bl __copy_longs_unaligned
/* 801CA2B4 001C5F14  48 00 00 20 */	b lbl_801CA2D4
lbl_801CA2B8:
/* 801CA2B8 001C5F18  48 00 03 51 */	bl __copy_longs_rev_unaligned
/* 801CA2BC 001C5F1C  48 00 00 18 */	b lbl_801CA2D4
lbl_801CA2C0:
/* 801CA2C0 001C5F20  2C 07 00 00 */	cmpwi r7, 0
/* 801CA2C4 001C5F24  40 82 00 0C */	bne lbl_801CA2D0
/* 801CA2C8 001C5F28  48 00 01 1D */	bl __copy_longs_aligned
/* 801CA2CC 001C5F2C  48 00 00 08 */	b lbl_801CA2D4
lbl_801CA2D0:
/* 801CA2D0 001C5F30  48 00 01 D1 */	bl __copy_longs_rev_aligned
lbl_801CA2D4:
/* 801CA2D4 001C5F34  7F E3 FB 78 */	mr r3, r31
/* 801CA2D8 001C5F38  48 00 00 54 */	b lbl_801CA32C
lbl_801CA2DC:
/* 801CA2DC 001C5F3C  2C 07 00 00 */	cmpwi r7, 0
/* 801CA2E0 001C5F40  40 82 00 28 */	bne lbl_801CA308
/* 801CA2E4 001C5F44  38 84 FF FF */	addi r4, r4, -1
/* 801CA2E8 001C5F48  38 63 FF FF */	addi r3, r3, -1
/* 801CA2EC 001C5F4C  38 A5 00 01 */	addi r5, r5, 1
/* 801CA2F0 001C5F50  48 00 00 0C */	b lbl_801CA2FC
lbl_801CA2F4:
/* 801CA2F4 001C5F54  8C 04 00 01 */	lbzu r0, 1(r4)
/* 801CA2F8 001C5F58  9C 03 00 01 */	stbu r0, 1(r3)
lbl_801CA2FC:
/* 801CA2FC 001C5F5C  34 A5 FF FF */	addic. r5, r5, -1
/* 801CA300 001C5F60  40 82 FF F4 */	bne lbl_801CA2F4
/* 801CA304 001C5F64  48 00 00 24 */	b lbl_801CA328
lbl_801CA308:
/* 801CA308 001C5F68  7C 84 2A 14 */	add r4, r4, r5
/* 801CA30C 001C5F6C  7C 63 2A 14 */	add r3, r3, r5
/* 801CA310 001C5F70  38 A5 00 01 */	addi r5, r5, 1
/* 801CA314 001C5F74  48 00 00 0C */	b lbl_801CA320
lbl_801CA318:
/* 801CA318 001C5F78  8C 04 FF FF */	lbzu r0, -1(r4)
/* 801CA31C 001C5F7C  9C 03 FF FF */	stbu r0, -1(r3)
lbl_801CA320:
/* 801CA320 001C5F80  34 A5 FF FF */	addic. r5, r5, -1
/* 801CA324 001C5F84  40 82 FF F4 */	bne lbl_801CA318
lbl_801CA328:
/* 801CA328 001C5F88  7F E3 FB 78 */	mr r3, r31
lbl_801CA32C:
/* 801CA32C 001C5F8C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801CA330 001C5F90  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 801CA334 001C5F94  7C 08 03 A6 */	mtlr r0
/* 801CA338 001C5F98  38 21 00 10 */	addi r1, r1, 0x10
/* 801CA33C 001C5F9C  4E 80 00 20 */	blr

.global memchr
memchr:
/* 801CA340 001C5FA0  54 84 06 3E */	clrlwi r4, r4, 0x18
/* 801CA344 001C5FA4  38 63 FF FF */	addi r3, r3, -1
/* 801CA348 001C5FA8  38 A5 00 01 */	addi r5, r5, 1
/* 801CA34C 001C5FAC  48 00 00 10 */	b lbl_801CA35C
lbl_801CA350:
/* 801CA350 001C5FB0  8C 03 00 01 */	lbzu r0, 1(r3)
/* 801CA354 001C5FB4  7C 00 20 40 */	cmplw r0, r4
/* 801CA358 001C5FB8  4D 82 00 20 */	beqlr
lbl_801CA35C:
/* 801CA35C 001C5FBC  34 A5 FF FF */	addic. r5, r5, -1
/* 801CA360 001C5FC0  40 82 FF F0 */	bne lbl_801CA350
/* 801CA364 001C5FC4  38 60 00 00 */	li r3, 0
/* 801CA368 001C5FC8  4E 80 00 20 */	blr

.global __memrchr
__memrchr:
/* 801CA36C 001C5FCC  7C 63 2A 14 */	add r3, r3, r5
/* 801CA370 001C5FD0  54 84 06 3E */	clrlwi r4, r4, 0x18
/* 801CA374 001C5FD4  38 A5 00 01 */	addi r5, r5, 1
/* 801CA378 001C5FD8  48 00 00 10 */	b lbl_801CA388
lbl_801CA37C:
/* 801CA37C 001C5FDC  8C 03 FF FF */	lbzu r0, -1(r3)
/* 801CA380 001C5FE0  7C 00 20 40 */	cmplw r0, r4
/* 801CA384 001C5FE4  4D 82 00 20 */	beqlr
lbl_801CA388:
/* 801CA388 001C5FE8  34 A5 FF FF */	addic. r5, r5, -1
/* 801CA38C 001C5FEC  40 82 FF F0 */	bne lbl_801CA37C
/* 801CA390 001C5FF0  38 60 00 00 */	li r3, 0
/* 801CA394 001C5FF4  4E 80 00 20 */	blr

.global memcmp
memcmp:
/* 801CA398 001C5FF8  38 E4 FF FF */	addi r7, r4, -1
/* 801CA39C 001C5FFC  38 C3 FF FF */	addi r6, r3, -1
/* 801CA3A0 001C6000  38 85 00 01 */	addi r4, r5, 1
/* 801CA3A4 001C6004  48 00 00 30 */	b lbl_801CA3D4
lbl_801CA3A8:
/* 801CA3A8 001C6008  8C 66 00 01 */	lbzu r3, 1(r6)
/* 801CA3AC 001C600C  8C 07 00 01 */	lbzu r0, 1(r7)
/* 801CA3B0 001C6010  7C 03 00 40 */	cmplw r3, r0
/* 801CA3B4 001C6014  41 82 00 20 */	beq lbl_801CA3D4
/* 801CA3B8 001C6018  88 86 00 00 */	lbz r4, 0(r6)
/* 801CA3BC 001C601C  38 60 00 01 */	li r3, 1
/* 801CA3C0 001C6020  88 07 00 00 */	lbz r0, 0(r7)
/* 801CA3C4 001C6024  7C 04 00 40 */	cmplw r4, r0
/* 801CA3C8 001C6028  4C 80 00 20 */	bgelr
/* 801CA3CC 001C602C  38 60 FF FF */	li r3, -1
/* 801CA3D0 001C6030  4E 80 00 20 */	blr
lbl_801CA3D4:
/* 801CA3D4 001C6034  34 84 FF FF */	addic. r4, r4, -1
/* 801CA3D8 001C6038  40 82 FF D0 */	bne lbl_801CA3A8
/* 801CA3DC 001C603C  38 60 00 00 */	li r3, 0
/* 801CA3E0 001C6040  4E 80 00 20 */	blr