summaryrefslogtreecommitdiff
path: root/arm9/asm/MSL_Common_qsort.s
blob: edfc142b508578cf52f948b767b6b0b316550bf9 (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
	.include "asm/macros.inc"
	.include "global.inc"

	.text

	arm_func_start qsort
qsort: ; 0x020E1888
	stmdb sp!, {r3-r11,lr}
	sub sp, sp, #0x10
	mov r9, r1
	cmp r9, #0x2
	mov r10, r0
	mov r8, r2
	mov r7, r3
	addcc sp, sp, #0x10
	ldmccia sp!, {r3-r11,pc}
	mov r0, r9, lsr #0x1
	add r11, r0, #0x1
	sub r0, r11, #0x1
	mla r0, r8, r0, r10
	sub r2, r9, #0x1
	str r0, [sp, #0xc]
	mla r0, r8, r2, r10
	str r0, [sp, #0x8]
	mul r0, r11, r8
	mvn r1, #0x0
	str r0, [sp, #0x4]
	mul r0, r8, r1
	str r0, [sp, #0x0]
_020E18E0:
	cmp r11, #0x1
	bls _020E1908
	ldr r0, [sp, #0x4]
	sub r11, r11, #0x1
	sub r0, r0, r8
	str r0, [sp, #0x4]
	ldr r0, [sp, #0xc]
	sub r0, r0, r8
	str r0, [sp, #0xc]
	b _020E1950
_020E1908:
	mov r2, r8
	ldr r4, [sp, #0x8]
	ldr r3, [sp, #0xc]
	cmp r8, #0x0
	beq _020E1934
_020E191C:
	ldrsb r0, [r4, #0x0]
	ldrsb r1, [r3, #0x0]
	subs r2, r2, #0x1
	strb r0, [r3], #0x1
	strb r1, [r4], #0x1
	bne _020E191C
_020E1934:
	sub r9, r9, #0x1
	cmp r9, #0x1
	addeq sp, sp, #0x10
	ldmeqia sp!, {r3-r11,pc}
	ldr r0, [sp, #0x8]
	sub r0, r0, r8
	str r0, [sp, #0x8]
_020E1950:
	ldr r1, [sp, #0x4]
	ldr r0, [sp, #0x0]
	mov r4, r11
	add r0, r1, r0
	cmp r9, r11, lsl #0x1
	add r5, r10, r0
	blo _020E18E0
_020E196C:
	mov r4, r4, lsl #0x1
	sub r0, r4, #0x1
	mov r6, r5
	mla r5, r8, r0, r10
	cmp r9, r4
	bls _020E199C
	mov r0, r5
	add r1, r5, r8
	blx r7
	cmp r0, #0x0
	addlt r4, r4, #0x1
	addlt r5, r5, r8
_020E199C:
	mov r0, r6
	mov r1, r5
	blx r7
	cmp r0, #0x0
	bge _020E18E0
	mov r2, r8
	mov r3, r5
	cmp r8, #0x0
	beq _020E19D8
_020E19C0:
	ldrsb r1, [r6, #0x0]
	ldrsb r0, [r3, #0x0]
	subs r2, r2, #0x1
	strb r0, [r6], #0x1
	strb r1, [r3], #0x1
	bne _020E19C0
_020E19D8:
	cmp r9, r4, lsl #0x1
	bhs _020E196C
	b _020E18E0
	add sp, sp, #0x10
	ldmia sp!, {r3-r11,pc}
	arm_func_end qsort

	.section .exceptix,4

	.word qsort
	.short 357
	.word 0x0070FF00