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

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

.global qsort
qsort:
/* 801CCBCC 001C882C  94 21 FF C0 */	stwu r1, -0x40(r1)
/* 801CCBD0 001C8830  7C 08 02 A6 */	mflr r0
/* 801CCBD4 001C8834  28 04 00 02 */	cmplwi r4, 2
/* 801CCBD8 001C8838  90 01 00 44 */	stw r0, 0x44(r1)
/* 801CCBDC 001C883C  BE 61 00 0C */	stmw r19, 0xc(r1)
/* 801CCBE0 001C8840  7C 7B 1B 78 */	mr r27, r3
/* 801CCBE4 001C8844  7C BC 2B 78 */	mr r28, r5
/* 801CCBE8 001C8848  7C DD 33 78 */	mr r29, r6
/* 801CCBEC 001C884C  41 80 01 3C */	blt lbl_801CCD28
/* 801CCBF0 001C8850  54 87 F8 7E */	srwi r7, r4, 1
/* 801CCBF4 001C8854  54 A0 08 3C */	slwi r0, r5, 1
/* 801CCBF8 001C8858  3B E7 00 01 */	addi r31, r7, 1
/* 801CCBFC 001C885C  38 C4 FF FF */	addi r6, r4, -1
/* 801CCC00 001C8860  38 FF FF FF */	addi r7, r31, -1
/* 801CCC04 001C8864  7C 9E 23 78 */	mr r30, r4
/* 801CCC08 001C8868  7C 85 39 D6 */	mullw r4, r5, r7
/* 801CCC0C 001C886C  7F 20 28 50 */	subf r25, r0, r5
/* 801CCC10 001C8870  7C 05 31 D6 */	mullw r0, r5, r6
/* 801CCC14 001C8874  7E E3 22 14 */	add r23, r3, r4
/* 801CCC18 001C8878  7F 5F 29 D6 */	mullw r26, r31, r5
/* 801CCC1C 001C887C  7E C3 02 14 */	add r22, r3, r0
lbl_801CCC20:
/* 801CCC20 001C8880  28 1F 00 01 */	cmplwi r31, 1
/* 801CCC24 001C8884  40 81 00 14 */	ble lbl_801CCC38
/* 801CCC28 001C8888  7F 5C D0 50 */	subf r26, r28, r26
/* 801CCC2C 001C888C  7E FC B8 50 */	subf r23, r28, r23
/* 801CCC30 001C8890  3B FF FF FF */	addi r31, r31, -1
/* 801CCC34 001C8894  48 00 00 40 */	b lbl_801CCC74
lbl_801CCC38:
/* 801CCC38 001C8898  38 76 FF FF */	addi r3, r22, -1
/* 801CCC3C 001C889C  38 97 FF FF */	addi r4, r23, -1
/* 801CCC40 001C88A0  38 BC 00 01 */	addi r5, r28, 1
/* 801CCC44 001C88A4  48 00 00 18 */	b lbl_801CCC5C
lbl_801CCC48:
/* 801CCC48 001C88A8  88 C4 00 01 */	lbz r6, 1(r4)
/* 801CCC4C 001C88AC  88 03 00 01 */	lbz r0, 1(r3)
/* 801CCC50 001C88B0  7C C6 07 74 */	extsb r6, r6
/* 801CCC54 001C88B4  9C 04 00 01 */	stbu r0, 1(r4)
/* 801CCC58 001C88B8  9C C3 00 01 */	stbu r6, 1(r3)
lbl_801CCC5C:
/* 801CCC5C 001C88BC  34 A5 FF FF */	addic. r5, r5, -1
/* 801CCC60 001C88C0  40 82 FF E8 */	bne lbl_801CCC48
/* 801CCC64 001C88C4  3B DE FF FF */	addi r30, r30, -1
/* 801CCC68 001C88C8  28 1E 00 01 */	cmplwi r30, 1
/* 801CCC6C 001C88CC  41 82 00 BC */	beq lbl_801CCD28
/* 801CCC70 001C88D0  7E DC B0 50 */	subf r22, r28, r22
lbl_801CCC74:
/* 801CCC74 001C88D4  7C 1A CA 14 */	add r0, r26, r25
/* 801CCC78 001C88D8  7F F8 FB 78 */	mr r24, r31
/* 801CCC7C 001C88DC  7E 9B 02 14 */	add r20, r27, r0
/* 801CCC80 001C88E0  48 00 00 98 */	b lbl_801CCD18
lbl_801CCC84:
/* 801CCC84 001C88E4  57 18 08 3C */	slwi r24, r24, 1
/* 801CCC88 001C88E8  7E 95 A3 78 */	mr r21, r20
/* 801CCC8C 001C88EC  38 18 FF FF */	addi r0, r24, -1
/* 801CCC90 001C88F0  7C 1C 01 D6 */	mullw r0, r28, r0
/* 801CCC94 001C88F4  7C 18 F0 40 */	cmplw r24, r30
/* 801CCC98 001C88F8  7E 9B 02 14 */	add r20, r27, r0
/* 801CCC9C 001C88FC  40 80 00 2C */	bge lbl_801CCCC8
/* 801CCCA0 001C8900  7E 74 E2 14 */	add r19, r20, r28
/* 801CCCA4 001C8904  7F AC EB 78 */	mr r12, r29
/* 801CCCA8 001C8908  7E 83 A3 78 */	mr r3, r20
/* 801CCCAC 001C890C  7E 64 9B 78 */	mr r4, r19
/* 801CCCB0 001C8910  7D 89 03 A6 */	mtctr r12
/* 801CCCB4 001C8914  4E 80 04 21 */	bctrl
/* 801CCCB8 001C8918  2C 03 00 00 */	cmpwi r3, 0
/* 801CCCBC 001C891C  40 80 00 0C */	bge lbl_801CCCC8
/* 801CCCC0 001C8920  7E 74 9B 78 */	mr r20, r19
/* 801CCCC4 001C8924  3B 18 00 01 */	addi r24, r24, 1
lbl_801CCCC8:
/* 801CCCC8 001C8928  7F AC EB 78 */	mr r12, r29
/* 801CCCCC 001C892C  7E A3 AB 78 */	mr r3, r21
/* 801CCCD0 001C8930  7E 84 A3 78 */	mr r4, r20
/* 801CCCD4 001C8934  7D 89 03 A6 */	mtctr r12
/* 801CCCD8 001C8938  4E 80 04 21 */	bctrl
/* 801CCCDC 001C893C  2C 03 00 00 */	cmpwi r3, 0
/* 801CCCE0 001C8940  40 80 FF 40 */	bge lbl_801CCC20
/* 801CCCE4 001C8944  38 74 FF FF */	addi r3, r20, -1
/* 801CCCE8 001C8948  38 95 FF FF */	addi r4, r21, -1
/* 801CCCEC 001C894C  38 BC 00 01 */	addi r5, r28, 1
/* 801CCCF0 001C8950  48 00 00 20 */	b lbl_801CCD10
lbl_801CCCF4:
/* 801CCCF4 001C8954  88 C4 00 01 */	lbz r6, 1(r4)
/* 801CCCF8 001C8958  88 03 00 01 */	lbz r0, 1(r3)
/* 801CCCFC 001C895C  7C C6 07 74 */	extsb r6, r6
/* 801CCD00 001C8960  98 04 00 01 */	stb r0, 1(r4)
/* 801CCD04 001C8964  38 84 00 01 */	addi r4, r4, 1
/* 801CCD08 001C8968  98 C3 00 01 */	stb r6, 1(r3)
/* 801CCD0C 001C896C  38 63 00 01 */	addi r3, r3, 1
lbl_801CCD10:
/* 801CCD10 001C8970  34 A5 FF FF */	addic. r5, r5, -1
/* 801CCD14 001C8974  40 82 FF E0 */	bne lbl_801CCCF4
lbl_801CCD18:
/* 801CCD18 001C8978  57 00 08 3C */	slwi r0, r24, 1
/* 801CCD1C 001C897C  7C 00 F0 40 */	cmplw r0, r30
/* 801CCD20 001C8980  40 81 FF 64 */	ble lbl_801CCC84
/* 801CCD24 001C8984  4B FF FE FC */	b lbl_801CCC20
lbl_801CCD28:
/* 801CCD28 001C8988  BA 61 00 0C */	lmw r19, 0xc(r1)
/* 801CCD2C 001C898C  80 01 00 44 */	lwz r0, 0x44(r1)
/* 801CCD30 001C8990  7C 08 03 A6 */	mtlr r0
/* 801CCD34 001C8994  38 21 00 40 */	addi r1, r1, 0x40
/* 801CCD38 001C8998  4E 80 00 20 */	blr