pokeheartgold/lib/MSL_C/asm/MSL_Common_wprintf.s
2025-02-26 02:19:51 +00:00

2358 lines
40 KiB
ArmAsm

.include "asm/macros.inc"
.include "MSL_Common_wprintf.inc"
.include "global.inc"
.data
wstr$6DE4: ; 0x02111364
; L"0x0p0"
.short 0x0030, 0x0078, 0x0030, 0x0070, 0x0030, 0x0000
wstr$6DF0: ; 0x02111370
; L"-INF"
.short 0x002D, 0x0049, 0x004E, 0x0046, 0x0000, 0x0000
wstr$6DFC: ; 0x0211137C
; L"-inf"
.short 0x002D, 0x0069, 0x006E, 0x0066, 0x0000, 0x0000
wstr$6E08: ; 0x02111388
; L"INF"
.short 0x0049, 0x004E, 0x0046, 0x0000
wstr$6E10: ; 0x02111390
; L"inf"
.short 0x0069, 0x006E, 0x0066, 0x0000
wstr$6E18: ; 0x02111398
; L"-NAN"
.short 0x002D, 0x004E, 0x0041, 0x004E, 0x0000, 0x0000
wstr$6E24: ; 0x021113A4
; L"-nan"
.short 0x002D, 0x006E, 0x0061, 0x006E, 0x0000, 0x0000
wstr$6E30: ; 0x021113B0
; L"NAN"
.short 0x004E, 0x0041, 0x004E, 0x0000
wstr$6E38: ; 0x021113B8
.short 0x006E, 0x0061, 0x006E, 0x0000
buff_ptr$6E40: ; 0x021113C0
.short 0x0000, 0x0000
strptr$6E44: ; 0x021113C4
.asciz ""
.text
arm_func_start parse_format__wide
parse_format__wide: ; 0x020EB8EC
stmdb sp!, {r4, r5, r6, r7, r8, lr}
sub sp, sp, #0x10
ldrh r3, [r0, #2]
mov r4, #0
mov r5, #1
mov lr, r2
strb r5, [sp]
strb r4, [sp, #1]
strb r4, [sp, #2]
strb r4, [sp, #3]
strb r4, [sp, #4]
str r4, [sp, #8]
str r4, [sp, #0xc]
cmp r3, #0x25
add ip, r0, #2
bne _020EB948
add r0, sp, #0
strh r3, [sp, #6]
ldmia r0, {r0, r1, r2, r3}
stmia lr, {r0, r1, r2, r3}
add sp, sp, #0x10
add r0, ip, #2
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_020EB948:
mov r2, #2
mov r0, r4
mov r5, r2
mov r6, r4
mov r7, #1
_020EB95C:
mov r8, r7
cmp r3, #0x2b
bgt _020EB98C
bge _020EB9B4
cmp r3, #0x23
bgt _020EB9E4
cmp r3, #0x20
blt _020EB9E4
beq _020EB9BC
cmp r3, #0x23
beq _020EB9CC
b _020EB9E4
_020EB98C:
cmp r3, #0x30
bgt _020EB9E4
cmp r3, #0x2d
blt _020EB9E4
beq _020EB9AC
cmp r3, #0x30
beq _020EB9D4
b _020EB9E4
_020EB9AC:
strb r6, [sp]
b _020EB9E8
_020EB9B4:
strb r7, [sp, #1]
b _020EB9E8
_020EB9BC:
ldrb r4, [sp, #1]
cmp r4, #1
strneb r5, [sp, #1]
b _020EB9E8
_020EB9CC:
strb r7, [sp, #3]
b _020EB9E8
_020EB9D4:
ldrb r4, [sp]
cmp r4, #0
strneb r2, [sp]
b _020EB9E8
_020EB9E4:
mov r8, r0
_020EB9E8:
cmp r8, #0
ldrneh r3, [ip, #2]!
bne _020EB95C
cmp r3, #0x2a
bne _020EBA30
ldr r0, [r1]
add r0, r0, #4
str r0, [r1]
ldr r0, [r0, #-4]
str r0, [sp, #8]
cmp r0, #0
bge _020EBA28
rsb r0, r0, #0
mov r2, #0
strb r2, [sp]
str r0, [sp, #8]
_020EBA28:
ldrh r3, [ip, #2]!
b _020EBA74
_020EBA30:
mov r2, #0
ldr r5, _020EBE58 ; =__wctype_mapC
mov r0, #0xa
b _020EBA54
_020EBA40:
ldr r4, [sp, #8]
sub r3, r3, #0x30
mla r6, r4, r0, r3
ldrh r3, [ip, #2]!
str r6, [sp, #8]
_020EBA54:
cmp r3, #0x80
movhs r4, r2
bhs _020EBA6C
mov r4, r3, lsl #1
ldrh r4, [r5, r4]
and r4, r4, #8
_020EBA6C:
cmp r4, #0
bne _020EBA40
_020EBA74:
ldr r2, [sp, #8]
ldr r0, _020EBE5C ; =0x000001FD
cmp r2, r0
ble _020EBAA4
ldr r1, _020EBE60 ; =0x0000FFFF
add r0, sp, #0
strh r1, [sp, #6]
ldmia r0, {r0, r1, r2, r3}
stmia lr, {r0, r1, r2, r3}
add sp, sp, #0x10
add r0, ip, #2
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_020EBAA4:
cmp r3, #0x2e
bne _020EBB2C
ldrh r3, [ip, #2]!
mov r0, #1
strb r0, [sp, #2]
cmp r3, #0x2a
bne _020EBAE8
ldr r0, [r1]
add r0, r0, #4
str r0, [r1]
ldr r0, [r0, #-4]
ldrh r3, [ip, #2]!
str r0, [sp, #0xc]
cmp r0, #0
movlt r0, #0
strltb r0, [sp, #2]
b _020EBB2C
_020EBAE8:
mov r1, #0
ldr r4, _020EBE58 ; =__wctype_mapC
mov r0, #0xa
b _020EBB0C
_020EBAF8:
ldr r2, [sp, #0xc]
sub r3, r3, #0x30
mla r5, r2, r0, r3
ldrh r3, [ip, #2]!
str r5, [sp, #0xc]
_020EBB0C:
cmp r3, #0x80
movhs r2, r1
bhs _020EBB24
mov r2, r3, lsl #1
ldrh r2, [r4, r2]
and r2, r2, #8
_020EBB24:
cmp r2, #0
bne _020EBAF8
_020EBB2C:
cmp r3, #0x6c
mov r0, #1
bgt _020EBB64
cmp r3, #0x68
blt _020EBB58
beq _020EBB80
cmp r3, #0x6a
beq _020EBBCC
cmp r3, #0x6c
beq _020EBB9C
b _020EBBF0
_020EBB58:
cmp r3, #0x4c
beq _020EBBC0
b _020EBBF0
_020EBB64:
cmp r3, #0x74
bgt _020EBB74
beq _020EBBD8
b _020EBBF0
_020EBB74:
cmp r3, #0x7a
beq _020EBBE4
b _020EBBF0
_020EBB80:
ldrh r1, [ip, #2]
mov r2, #2
strb r2, [sp, #4]
cmp r1, #0x68
streqb r0, [sp, #4]
ldreqh r3, [ip, #2]!
b _020EBBF4
_020EBB9C:
ldrh r1, [ip, #2]
mov r2, #3
strb r2, [sp, #4]
cmp r1, #0x6c
bne _020EBBF4
mov r1, #4
strb r1, [sp, #4]
ldrh r3, [ip, #2]!
b _020EBBF4
_020EBBC0:
mov r1, #9
strb r1, [sp, #4]
b _020EBBF4
_020EBBCC:
mov r1, #6
strb r1, [sp, #4]
b _020EBBF4
_020EBBD8:
mov r1, #8
strb r1, [sp, #4]
b _020EBBF4
_020EBBE4:
mov r1, #7
strb r1, [sp, #4]
b _020EBBF4
_020EBBF0:
mov r0, #0
_020EBBF4:
cmp r0, #0
ldrneh r3, [ip, #2]!
strh r3, [sp, #6]
cmp r3, #0x61
bgt _020EBC48
bge _020EBD2C
cmp r3, #0x47
bgt _020EBC3C
subs r0, r3, #0x41
addpl pc, pc, r0, lsl #2
b _020EBE38
_020EBC20: ; jump table
b _020EBD2C ; case 0
b _020EBE38 ; case 1
b _020EBE38 ; case 2
b _020EBE38 ; case 3
b _020EBD74 ; case 4
b _020EBCF4 ; case 5
b _020EBD64 ; case 6
_020EBC3C:
cmp r3, #0x58
beq _020EBCBC
b _020EBE38
_020EBC48:
cmp r3, #0x63
bgt _020EBC58
beq _020EBDD4
b _020EBE38
_020EBC58:
sub r0, r3, #0x64
cmp r0, #0x14
addls pc, pc, r0, lsl #2
b _020EBE38
_020EBC68: ; jump table
b _020EBCBC ; case 0
b _020EBD74 ; case 1
b _020EBCF4 ; case 2
b _020EBD64 ; case 3
b _020EBE38 ; case 4
b _020EBCBC ; case 5
b _020EBE38 ; case 6
b _020EBE38 ; case 7
b _020EBE38 ; case 8
b _020EBE38 ; case 9
b _020EBE24 ; case 10
b _020EBCBC ; case 11
b _020EBDB0 ; case 12
b _020EBE38 ; case 13
b _020EBE38 ; case 14
b _020EBE00 ; case 15
b _020EBE38 ; case 16
b _020EBCBC ; case 17
b _020EBE38 ; case 18
b _020EBE38 ; case 19
b _020EBCBC ; case 20
_020EBCBC:
ldrb r0, [sp, #4]
cmp r0, #9
moveq r0, #4
streqb r0, [sp, #4]
ldrb r0, [sp, #2]
cmp r0, #0
moveq r0, #1
streq r0, [sp, #0xc]
beq _020EBE40
ldrb r0, [sp]
cmp r0, #2
moveq r0, #1
streqb r0, [sp]
b _020EBE40
_020EBCF4:
ldrb r0, [sp, #4]
cmp r0, #2
cmpne r0, #6
cmpne r0, #7
cmpne r0, #8
cmpne r0, #4
ldreq r0, _020EBE60 ; =0x0000FFFF
streqh r0, [sp, #6]
beq _020EBE40
ldrb r0, [sp, #2]
cmp r0, #0
moveq r0, #6
streq r0, [sp, #0xc]
b _020EBE40
_020EBD2C:
ldrb r0, [sp, #2]
cmp r0, #0
moveq r0, #0xd
streq r0, [sp, #0xc]
ldrb r0, [sp, #4]
cmp r0, #2
cmpne r0, #6
cmpne r0, #7
cmpne r0, #8
cmpne r0, #4
cmpne r0, #1
ldreq r0, _020EBE60 ; =0x0000FFFF
streqh r0, [sp, #6]
b _020EBE40
_020EBD64:
ldr r0, [sp, #0xc]
cmp r0, #0
moveq r0, #1
streq r0, [sp, #0xc]
_020EBD74:
ldrb r0, [sp, #4]
cmp r0, #2
cmpne r0, #6
cmpne r0, #7
cmpne r0, #8
cmpne r0, #4
cmpne r0, #1
ldreq r0, _020EBE60 ; =0x0000FFFF
streqh r0, [sp, #6]
beq _020EBE40
ldrb r0, [sp, #2]
cmp r0, #0
moveq r0, #6
streq r0, [sp, #0xc]
b _020EBE40
_020EBDB0:
mov r3, #3
mov r2, #1
mov r1, #0x78
mov r0, #8
strb r3, [sp, #4]
strb r2, [sp, #3]
strh r1, [sp, #6]
str r0, [sp, #0xc]
b _020EBE40
_020EBDD4:
ldrb r1, [sp, #4]
cmp r1, #3
moveq r0, #5
streqb r0, [sp, #4]
beq _020EBE40
ldrb r0, [sp, #2]
cmp r0, #0
cmpeq r1, #0
ldrne r0, _020EBE60 ; =0x0000FFFF
strneh r0, [sp, #6]
b _020EBE40
_020EBE00:
ldrb r0, [sp, #4]
cmp r0, #3
moveq r0, #5
streqb r0, [sp, #4]
beq _020EBE40
cmp r0, #0
ldrne r0, _020EBE60 ; =0x0000FFFF
strneh r0, [sp, #6]
b _020EBE40
_020EBE24:
ldrb r0, [sp, #4]
cmp r0, #9
moveq r0, #4
streqb r0, [sp, #4]
b _020EBE40
_020EBE38:
ldr r0, _020EBE60 ; =0x0000FFFF
strh r0, [sp, #6]
_020EBE40:
add r0, sp, #0
ldmia r0, {r0, r1, r2, r3}
stmia lr, {r0, r1, r2, r3}
add r0, ip, #2
add sp, sp, #0x10
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_020EBE58: .word __wctype_mapC
_020EBE5C: .word 0x000001FD
_020EBE60: .word 0x0000FFFF
arm_func_end parse_format__wide
arm_func_start long2str__wide
long2str__wide: ; 0x020EBE64
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x10
movs sl, r0
mov r0, #0
mov r5, r1
str r0, [sp, #0xc]
ldr r7, [sp, #0x4c]
mov r6, r0
strh r0, [r5, #-2]!
ldrb r0, [sp, #0x43]
str r1, [sp]
ldrh r8, [sp, #0x46]
str r0, [sp, #4]
ldr r0, [sp, #0x48]
ldrb fp, [sp, #0x41]
str r0, [sp, #8]
cmpeq r7, #0
bne _020EBED8
ldr r0, [sp, #4]
cmp r0, #0
beq _020EBEC4
cmp r8, #0x6f
beq _020EBED8
_020EBEC4:
add sp, sp, #0x10
mov r0, r5
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
_020EBED8:
cmp r8, #0x69
bgt _020EBF00
bge _020EBF34
cmp r8, #0x58
bgt _020EBEF4
beq _020EBF60
b _020EBF68
_020EBEF4:
cmp r8, #0x64
beq _020EBF34
b _020EBF68
_020EBF00:
cmp r8, #0x6f
bgt _020EBF14
moveq r4, #8
moveq fp, #0
b _020EBF68
_020EBF14:
cmp r8, #0x78
bgt _020EBF68
cmp r8, #0x75
blt _020EBF68
beq _020EBF54
cmp r8, #0x78
beq _020EBF60
b _020EBF68
_020EBF34:
cmp sl, #0
mov r4, #0xa
bge _020EBF68
mov r0, #1
cmp sl, #0x80000000
rsbne sl, sl, #0
str r0, [sp, #0xc]
b _020EBF68
_020EBF54:
mov r4, #0xa
mov fp, #0
b _020EBF68
_020EBF60:
mov r4, #0x10
mov fp, #0
_020EBF68:
mov r0, sl
mov r1, r4
bl _u32_div_f
mov sb, r1
mov r0, sl
mov r1, r4
bl _u32_div_f
cmp sb, #0xa
mov sl, r0
addlt sb, sb, #0x30
blt _020EBFA0
cmp r8, #0x78
addeq sb, sb, #0x57
addne sb, sb, #0x37
_020EBFA0:
cmp sl, #0
strh sb, [r5, #-2]!
add r6, r6, #1
bne _020EBF68
cmp r4, #8
bne _020EBFD4
ldr r0, [sp, #4]
cmp r0, #0
ldrneh r0, [r5]
cmpne r0, #0x30
movne r0, #0x30
strneh r0, [r5, #-2]!
addne r6, r6, #1
_020EBFD4:
ldrb r0, [sp, #0x40]
cmp r0, #2
bne _020EC008
ldr r0, [sp, #0xc]
ldr r7, [sp, #8]
cmp r0, #0
cmpeq fp, #0
subne r7, r7, #1
cmp r4, #0x10
bne _020EC008
ldr r0, [sp, #4]
cmp r0, #0
subne r7, r7, #2
_020EC008:
ldr r0, [sp]
ldr r1, _020EC0B0 ; =0x000001FD
sub r0, r0, r5
add r0, r0, r0, lsr #31
add r0, r7, r0, asr #1
cmp r0, r1
addgt sp, sp, #0x10
movgt r0, #0
ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
addgt sp, sp, #0x10
bxgt lr
cmp r6, r7
bge _020EC050
mov r0, #0x30
_020EC040:
add r6, r6, #1
cmp r6, r7
strh r0, [r5, #-2]!
blt _020EC040
_020EC050:
cmp r4, #0x10
bne _020EC06C
ldr r0, [sp, #4]
cmp r0, #0
movne r0, #0x30
strneh r8, [r5, #-2]
strneh r0, [r5, #-4]!
_020EC06C:
ldr r0, [sp, #0xc]
cmp r0, #0
movne r0, #0x2d
strneh r0, [r5, #-2]!
bne _020EC09C
cmp fp, #1
moveq r0, #0x2b
streqh r0, [r5, #-2]!
beq _020EC09C
cmp fp, #2
moveq r0, #0x20
streqh r0, [r5, #-2]!
_020EC09C:
mov r0, r5
add sp, sp, #0x10
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
_020EC0B0: .word 0x000001FD
arm_func_end long2str__wide
arm_func_start longlong2str__wide
longlong2str__wide: ; 0x020EC0B4
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x1c
mov sb, r1
mov r1, #0
mov sl, r0
mov r8, r2
mov r0, r1
strh r0, [r8, #-2]!
ldr r0, [sp, #0x58]
cmp sb, #0
str r0, [sp, #0x14]
ldrb r0, [sp, #0x4f]
cmpeq sl, #0
str r2, [sp]
str r0, [sp, #4]
ldrh r0, [sp, #0x52]
str r1, [sp, #0x18]
mov fp, r1
str r0, [sp, #8]
ldr r0, [sp, #0x54]
str r0, [sp, #0xc]
ldrb r0, [sp, #0x4d]
str r0, [sp, #0x10]
ldreq r0, [sp, #0x14]
cmpeq r0, #0
bne _020EC14C
ldr r0, [sp, #4]
cmp r0, #0
beq _020EC138
ldr r0, [sp, #8]
cmp r0, #0x6f
beq _020EC14C
_020EC138:
add sp, sp, #0x1c
mov r0, r8
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
_020EC14C:
ldr r0, [sp, #8]
cmp r0, #0x69
bgt _020EC178
bge _020EC1A8
cmp r0, #0x58
bgt _020EC16C
beq _020EC1FC
b _020EC208
_020EC16C:
cmp r0, #0x64
beq _020EC1A8
b _020EC208
_020EC178:
cmp r0, #0x6f
bgt _020EC188
beq _020EC1DC
b _020EC208
_020EC188:
cmp r0, #0x78
bgt _020EC208
cmp r0, #0x75
blt _020EC208
beq _020EC1EC
cmp r0, #0x78
beq _020EC1FC
b _020EC208
_020EC1A8:
subs r0, sl, #0
sbcs r0, sb, #0
mov r7, #0xa
mov r6, #0
bge _020EC208
cmp sb, #0x80000000
cmpeq sl, r6
beq _020EC1D0
rsbs sl, sl, #0
rsc sb, sb, #0
_020EC1D0:
mov r0, #1
str r0, [sp, #0x18]
b _020EC208
_020EC1DC:
mov r6, #0
str r6, [sp, #0x10]
mov r7, #8
b _020EC208
_020EC1EC:
mov r6, #0
str r6, [sp, #0x10]
mov r7, #0xa
b _020EC208
_020EC1FC:
mov r6, #0
str r6, [sp, #0x10]
mov r7, #0x10
_020EC208:
mov r4, #0
_020EC20C:
mov r0, sl
mov r1, sb
mov r2, r7
mov r3, r6
bl _ull_mod
mov r5, r0
mov r0, sl
mov r1, sb
mov r2, r7
mov r3, r6
bl _ll_udiv
mov sl, r0
cmp r5, #0xa
mov sb, r1
addlt r0, r5, #0x30
blt _020EC25C
ldr r0, [sp, #8]
cmp r0, #0x78
addeq r0, r5, #0x57
addne r0, r5, #0x37
_020EC25C:
strh r0, [r8, #-2]!
mov r0, #0
cmp sb, r0
cmpeq sl, r4
add fp, fp, #1
bne _020EC20C
cmp r6, #0
cmpeq r7, #8
bne _020EC29C
ldr r0, [sp, #4]
cmp r0, #0
ldrneh r0, [r8]
cmpne r0, #0x30
movne r0, #0x30
strneh r0, [r8, #-2]!
addne fp, fp, #1
_020EC29C:
ldrb r0, [sp, #0x4c]
cmp r0, #2
bne _020EC2EC
ldr r0, [sp, #0xc]
str r0, [sp, #0x14]
ldr r0, [sp, #0x18]
cmp r0, #0
ldreq r0, [sp, #0x10]
cmpeq r0, #0
ldrne r0, [sp, #0x14]
subne r0, r0, #1
strne r0, [sp, #0x14]
cmp r6, #0
cmpeq r7, #0x10
bne _020EC2EC
ldr r0, [sp, #4]
cmp r0, #0
ldrne r0, [sp, #0x14]
subne r0, r0, #2
strne r0, [sp, #0x14]
_020EC2EC:
ldr r0, [sp]
ldr r2, _020EC3B0 ; =0x000001FD
sub r0, r0, r8
add r1, r0, r0, lsr #31
ldr r0, [sp, #0x14]
add r0, r0, r1, asr #1
cmp r0, r2
addgt sp, sp, #0x1c
movgt r0, #0
ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
addgt sp, sp, #0x10
bxgt lr
ldr r0, [sp, #0x14]
cmp fp, r0
bge _020EC340
mov r1, #0x30
_020EC32C:
ldr r0, [sp, #0x14]
add fp, fp, #1
cmp fp, r0
strh r1, [r8, #-2]!
blt _020EC32C
_020EC340:
cmp r6, #0
cmpeq r7, #0x10
bne _020EC368
ldr r0, [sp, #4]
cmp r0, #0
beq _020EC368
ldr r0, [sp, #8]
mov r1, #0x30
strh r0, [r8, #-2]
strh r1, [r8, #-4]!
_020EC368:
ldr r0, [sp, #0x18]
cmp r0, #0
movne r0, #0x2d
strneh r0, [r8, #-2]!
bne _020EC39C
ldr r0, [sp, #0x10]
cmp r0, #1
moveq r0, #0x2b
streqh r0, [r8, #-2]!
beq _020EC39C
cmp r0, #2
moveq r0, #0x20
streqh r0, [r8, #-2]!
_020EC39C:
mov r0, r8
add sp, sp, #0x1c
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
_020EC3B0: .word 0x000001FD
arm_func_end longlong2str__wide
arm_func_start double2hex__wide
double2hex__wide: ; 0x020EC3B4
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #0x44
ldr r7, [sp, #0x80]
ldr r0, _020EC720 ; =0x000001FD
mov r8, r2
cmp r7, r0
ldrh r6, [sp, #0x7a]
ldrb r5, [sp, #0x77]
ldrb r4, [sp, #0x75]
ldr r1, [sp, #0x68]
ldr r2, [sp, #0x6c]
addgt sp, sp, #0x44
movgt r0, #0
ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
addgt sp, sp, #0x10
bxgt lr
mov sl, #0
mov sb, #0x20
add r0, sp, #8
add r3, sp, #0xc
strb sl, [sp, #8]
strh sb, [sp, #0xa]
bl __num2dec
ldr r0, [sp, #0x68]
ldr r1, [sp, #0x6c]
bl fabs
mov r2, r0
mov r0, sl
mov r3, r1
mov r1, r0
bl _deq
bne _020EC45C
sub r4, r8, #0xc
ldr r1, _020EC724 ; =wstr$6DE4
mov r0, r4
bl wcscpy
add sp, sp, #0x44
mov r0, r4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
add sp, sp, #0x10
bx lr
_020EC45C:
ldrb r0, [sp, #0x11]
cmp r0, #0x49
bne _020EC4DC
ldrsb r0, [sp, #0xc]
cmp r0, #0
beq _020EC4A0
cmp r6, #0x41
sub r4, r8, #0xa
bne _020EC490
ldr r1, _020EC728 ; =wstr$6DF0
mov r0, r4
bl wcscpy
b _020EC4C8
_020EC490:
ldr r1, _020EC72C ; =wstr$6DFC
mov r0, r4
bl wcscpy
b _020EC4C8
_020EC4A0:
cmp r6, #0x41
sub r4, r8, #8
bne _020EC4BC
ldr r1, _020EC730 ; =wstr$6E08
mov r0, r4
bl wcscpy
b _020EC4C8
_020EC4BC:
ldr r1, _020EC734 ; =wstr$6E10
mov r0, r4
bl wcscpy
_020EC4C8:
add sp, sp, #0x44
mov r0, r4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
add sp, sp, #0x10
bx lr
_020EC4DC:
cmp r0, #0x4e
bne _020EC558
ldrsb r0, [sp, #0xc]
cmp r0, #0
beq _020EC51C
cmp r6, #0x41
sub r4, r8, #0xa
bne _020EC50C
ldr r1, _020EC738 ; =wstr$6E18
mov r0, r4
bl wcscpy
b _020EC544
_020EC50C:
ldr r1, _020EC73C ; =wstr$6E24
mov r0, r4
bl wcscpy
b _020EC544
_020EC51C:
cmp r6, #0x41
sub r4, r8, #8
bne _020EC538
ldr r1, _020EC740 ; =wstr$6E30
mov r0, r4
bl wcscpy
b _020EC544
_020EC538:
ldr r1, _020EC744 ; =wstr$6E38
mov r0, r4
bl wcscpy
_020EC544:
add sp, sp, #0x44
mov r0, r4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
add sp, sp, #0x10
bx lr
_020EC558:
mov r3, sl
mov r1, #1
mov r0, #0x64
add sb, sp, #0x68
strb r1, [sp, #0x34]
strb r1, [sp, #0x35]
strb r3, [sp, #0x36]
strb r3, [sp, #0x37]
strb r3, [sp, #0x38]
str r3, [sp, #0x3c]
str r1, [sp, #0x40]
strh r0, [sp, #0x3a]
_020EC588:
rsb r1, r3, #7
ldrsb r2, [sb, r3]
ldrsb r0, [sb, r1]
strb r0, [sb, r3]
add r3, r3, #1
strb r2, [sb, r1]
cmp r3, #4
blt _020EC588
ldrb r0, [sp, #0x69]
ldrb r1, [sp, #0x68]
ldr sb, _020EC748 ; =0x000007FF
mov r0, r0, lsl #0x11
orr r1, r0, r1, lsl #25
add r0, sp, #0x34
and lr, sb, r1, lsr #21
sub ip, sp, #8
ldmia r0, {r0, r1, r2, r3}
stmia ip, {r0, r1, r2, r3}
rsb r0, sb, #0x400
mov r1, r8
add r0, lr, r0
ldmia ip, {r2, r3}
bl long2str__wide
cmp r6, #0x61
moveq r1, #0x70
movne r1, #0x50
strh r1, [r0, #-2]!
mov r1, r7, lsl #2
mov lr, r7
cmp r7, #1
add r8, r1, #0xb
add ip, sp, #0x68
blt _020EC698
mov sb, #0x30
_020EC610:
cmp r8, #0x40
bge _020EC680
ldrb r1, [ip, r8, asr #3]
and r2, r8, #7
rsb r3, r2, #7
mov r2, r1, asr r3
sub sl, r8, #4
bic r1, r8, #7
bic sl, sl, #7
cmp r1, sl
add sl, ip, r8, asr #3
and r1, r2, #0xff
beq _020EC654
ldrb r2, [sl, #-1]
mov r2, r2, lsl #8
orr r1, r1, r2, asr r3
and r1, r1, #0xff
_020EC654:
and r1, r1, #0xf
cmp r1, #0xa
addlo r1, r1, #0x30
andlo r1, r1, #0xff
blo _020EC684
cmp r6, #0x61
addeq r1, r1, #0x57
andeq r1, r1, #0xff
addne r1, r1, #0x37
andne r1, r1, #0xff
b _020EC684
_020EC680:
mov r1, sb
_020EC684:
sub lr, lr, #1
cmp lr, #1
strh r1, [r0, #-2]!
sub r8, r8, #4
bge _020EC610
_020EC698:
cmp r7, #0
cmpeq r5, #0
movne r1, #0x2e
strneh r1, [r0, #-2]!
mov r1, #0x31
strh r1, [r0, #-2]
cmp r6, #0x61
moveq r1, #0x78
movne r1, #0x58
strh r1, [r0, #-4]!
mov r1, #0x30
strh r1, [r0, #-2]!
ldrsb r1, [sp, #0xc]
cmp r1, #0
movne r1, #0x2d
strneh r1, [r0, #-2]!
addne sp, sp, #0x44
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
addne sp, sp, #0x10
bxne lr
cmp r4, #1
moveq r1, #0x2b
streqh r1, [r0, #-2]!
addeq sp, sp, #0x44
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
addeq sp, sp, #0x10
bxeq lr
cmp r4, #2
moveq r1, #0x20
streqh r1, [r0, #-2]!
add sp, sp, #0x44
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
_020EC720: .word 0x000001FD
_020EC724: .word wstr$6DE4
_020EC728: .word wstr$6DF0
_020EC72C: .word wstr$6DFC
_020EC730: .word wstr$6E08
_020EC734: .word wstr$6E10
_020EC738: .word wstr$6E18
_020EC73C: .word wstr$6E24
_020EC740: .word wstr$6E30
_020EC744: .word wstr$6E38
_020EC748: .word 0x000007FF
arm_func_end double2hex__wide
arm_func_start round_decimal__wide
round_decimal__wide: ; 0x020EC74C
stmdb sp!, {r4, lr}
cmp r1, #0
bge _020EC774
_020EC758:
mov r1, #0
strh r1, [r0, #2]
mov r1, #1
strb r1, [r0, #4]
mov r1, #0x30
strb r1, [r0, #5]
ldmia sp!, {r4, pc}
_020EC774:
ldrb lr, [r0, #4]
cmp r1, lr
ldmgeia sp!, {r4, pc}
add ip, r0, #5
add r2, ip, r1
add r2, r2, #1
ldrsb r3, [r2, #-1]!
sub r3, r3, #0x30
mov r3, r3, lsl #0x18
mov r3, r3, asr #0x18
cmp r3, #5
bne _020EC7D4
add ip, ip, lr
_020EC7A8:
sub ip, ip, #1
cmp ip, r2
bls _020EC7C0
ldrsb r3, [ip]
cmp r3, #0x30
beq _020EC7A8
_020EC7C0:
cmp ip, r2
ldreqsb r3, [r2, #-1]
andeq r4, r3, #1
movne r4, #1
b _020EC7DC
_020EC7D4:
movgt r4, #1
movle r4, #0
_020EC7DC:
cmp r1, #0
beq _020EC838
mov ip, #0
mov lr, #1
_020EC7EC:
ldrsb r3, [r2, #-1]!
sub r3, r3, #0x30
add r3, r3, r4
mov r3, r3, lsl #0x18
mov r3, r3, asr #0x18
cmp r3, #9
movgt r4, lr
movle r4, ip
cmp r4, #0
bne _020EC81C
cmp r3, #0
bne _020EC824
_020EC81C:
sub r1, r1, #1
b _020EC830
_020EC824:
add r3, r3, #0x30
strb r3, [r2]
b _020EC838
_020EC830:
cmp r1, #0
bne _020EC7EC
_020EC838:
cmp r4, #0
beq _020EC860
ldrsh r3, [r0, #2]
mov r2, #1
mov r1, #0x31
add r3, r3, #1
strh r3, [r0, #2]
strb r2, [r0, #4]
strb r1, [r0, #5]
ldmia sp!, {r4, pc}
_020EC860:
cmp r1, #0
beq _020EC758
strb r1, [r0, #4]
ldmia sp!, {r4, pc}
arm_func_end round_decimal__wide
arm_func_start float2str__wide
float2str__wide: ; 0x020EC870
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x22c
mov sl, r0
add r0, sp, #0x250
ldr r7, [sp, #0x268]
ldr r3, _020ECE90 ; =0x000001FD
ldrh r6, [r0, #0x12]
cmp r7, r3
ldrb r5, [sp, #0x25f]
ldrb r4, [sp, #0x25d]
mov r8, r1
mov sb, r2
addgt sp, sp, #0x22c
movgt r0, #0
ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
addgt sp, sp, #0x10
bxgt lr
mov ip, #0
mov fp, #0x20
add r0, sp, #0
add r3, sp, #4
mov r1, sl
mov r2, r8
strb ip, [sp]
strh fp, [sp, #2]
bl __num2dec
ldrb r0, [sp, #8]
add r1, sp, #9
add r0, r1, r0
b _020EC904
_020EC8EC:
ldrb r2, [sp, #8]
ldrsh r1, [sp, #6]
sub r2, r2, #1
add r1, r1, #1
strb r2, [sp, #8]
strh r1, [sp, #6]
_020EC904:
ldrb r1, [sp, #8]
cmp r1, #1
bls _020EC91C
ldrsb r1, [r0, #-1]!
cmp r1, #0x30
beq _020EC8EC
_020EC91C:
ldrb r0, [sp, #9]
cmp r0, #0x30
beq _020EC93C
cmp r0, #0x49
beq _020EC948
cmp r0, #0x4e
beq _020ECA00
b _020ECAAC
_020EC93C:
mov r0, #0
strh r0, [sp, #6]
b _020ECAAC
_020EC948:
mov r2, #0
mov r0, sl
mov r1, r8
mov r3, r2
bl _dls
bhs _020EC9A8
cmp r6, #0x80
sub r4, sb, #0xa
movhs r0, #0
bhs _020EC980
ldr r0, _020ECE94 ; =__wctype_mapC
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #0x200
_020EC980:
cmp r0, #0
beq _020EC998
ldr r1, _020ECE98 ; =wstr$6DF0
mov r0, r4
bl wcscpy
b _020EC9EC
_020EC998:
ldr r1, _020ECE9C ; =wstr$6DFC
mov r0, r4
bl wcscpy
b _020EC9EC
_020EC9A8:
cmp r6, #0x80
sub r4, sb, #8
movhs r0, #0
bhs _020EC9C8
ldr r0, _020ECE94 ; =__wctype_mapC
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #0x200
_020EC9C8:
cmp r0, #0
beq _020EC9E0
ldr r1, _020ECEA0 ; =wstr$6E08
mov r0, r4
bl wcscpy
b _020EC9EC
_020EC9E0:
ldr r1, _020ECEA4 ; =wstr$6E10
mov r0, r4
bl wcscpy
_020EC9EC:
add sp, sp, #0x22c
mov r0, r4
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
_020ECA00:
ldrsb r0, [sp, #4]
cmp r0, #0
beq _020ECA54
cmp r6, #0x80
sub r4, sb, #0xa
movhs r0, #0
bhs _020ECA2C
ldr r0, _020ECE94 ; =__wctype_mapC
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #0x200
_020ECA2C:
cmp r0, #0
beq _020ECA44
ldr r1, _020ECEA8 ; =wstr$6E18
mov r0, r4
bl wcscpy
b _020ECA98
_020ECA44:
ldr r1, _020ECEAC ; =wstr$6E24
mov r0, r4
bl wcscpy
b _020ECA98
_020ECA54:
cmp r6, #0x80
sub r4, sb, #8
movhs r0, #0
bhs _020ECA74
ldr r0, _020ECE94 ; =__wctype_mapC
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #0x200
_020ECA74:
cmp r0, #0
beq _020ECA8C
ldr r1, _020ECEB0 ; =wstr$6E30
mov r0, r4
bl wcscpy
b _020ECA98
_020ECA8C:
ldr r1, _020ECEB4 ; =wstr$6E38
mov r0, r4
bl wcscpy
_020ECA98:
add sp, sp, #0x22c
mov r0, r4
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
_020ECAAC:
ldrb r1, [sp, #8]
ldrsh r2, [sp, #6]
add r0, sp, #0x200
sub r1, r1, #1
add r0, r0, #0x2a
add r1, r2, r1
sub r8, r0, #1
strh r1, [sp, #6]
mov r0, #0
strb r0, [r8]
cmp r6, #0x65
bgt _020ECB08
bge _020ECB94
cmp r6, #0x47
bgt _020ECE54
cmp r6, #0x45
blt _020ECE54
beq _020ECB94
cmp r6, #0x46
beq _020ECCE0
cmp r6, #0x47
beq _020ECB20
b _020ECE54
_020ECB08:
cmp r6, #0x66
bgt _020ECB18
beq _020ECCE0
b _020ECE54
_020ECB18:
cmp r6, #0x67
bne _020ECE54
_020ECB20:
ldrb r0, [sp, #8]
cmp r0, r7
ble _020ECB38
add r0, sp, #4
mov r1, r7
bl round_decimal__wide
_020ECB38:
ldrsh r2, [sp, #6]
mvn r0, #3
cmp r2, r0
blt _020ECB50
cmp r2, r7
blt _020ECB70
_020ECB50:
cmp r5, #0
ldreqb r0, [sp, #8]
subne r7, r7, #1
subeq r7, r0, #1
cmp r6, #0x67
moveq r6, #0x65
movne r6, #0x45
b _020ECB94
_020ECB70:
cmp r5, #0
addne r0, r2, #1
subne r7, r7, r0
bne _020ECCE0
ldrb r1, [sp, #8]
add r0, r2, #1
subs r7, r1, r0
movmi r7, #0
b _020ECCE0
_020ECB94:
ldrb r0, [sp, #8]
add r1, r7, #1
cmp r0, r1
ble _020ECBAC
add r0, sp, #4
bl round_decimal__wide
_020ECBAC:
ldrsh lr, [sp, #6]
mov fp, #0x2b
mov sl, #0
cmp lr, #0
rsblt lr, lr, #0
movlt fp, #0x2d
ldr r3, _020ECEB8 ; =0x66666667
mov r0, #0xa
b _020ECC00
_020ECBD0:
mov r1, lr, lsr #0x1f
smull r2, ip, r3, lr
add ip, r1, ip, asr #2
smull r1, r2, r0, ip
sub ip, lr, r1
add r1, ip, #0x30
strb r1, [r8, #-1]!
mov r2, lr
smull r1, lr, r3, r2
mov r1, r2, lsr #0x1f
add lr, r1, lr, asr #2
add sl, sl, #1
_020ECC00:
cmp lr, #0
bne _020ECBD0
cmp sl, #2
blt _020ECBD0
add r0, sp, #0x2a
strb fp, [r8, #-1]
strb r6, [r8, #-2]!
sub r1, r0, r8
ldr r0, _020ECE90 ; =0x000001FD
add r1, r1, r7
cmp r1, r0
addgt sp, sp, #0x22c
movgt r0, #0
ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
addgt sp, sp, #0x10
bxgt lr
ldrb r1, [sp, #8]
add r0, r7, #1
cmp r1, r0
bge _020ECC70
add r0, r7, #2
sub r0, r0, r1
subs r1, r0, #1
beq _020ECC70
mov r0, #0x30
_020ECC64:
strb r0, [r8, #-1]!
subs r1, r1, #1
bne _020ECC64
_020ECC70:
ldrb r1, [sp, #8]
add r0, sp, #9
add r2, r0, r1
subs r1, r1, #1
beq _020ECC94
_020ECC84:
ldrsb r0, [r2, #-1]!
subs r1, r1, #1
strb r0, [r8, #-1]!
bne _020ECC84
_020ECC94:
cmp r7, #0
cmpeq r5, #0
movne r0, #0x2e
strneb r0, [r8, #-1]!
ldrb r0, [sp, #9]
strb r0, [r8, #-1]!
ldrsb r0, [sp, #4]
cmp r0, #0
movne r0, #0x2d
strneb r0, [r8, #-1]!
bne _020ECE54
cmp r4, #1
moveq r0, #0x2b
streqb r0, [r8, #-1]!
beq _020ECE54
cmp r4, #2
moveq r0, #0x20
streqb r0, [r8, #-1]!
b _020ECE54
_020ECCE0:
ldrsh r3, [sp, #6]
ldrb r2, [sp, #8]
sub r0, r2, r3
subs r1, r0, #1
movmi r1, #0
cmp r1, r7
ble _020ECD20
sub r1, r1, r7
add r0, sp, #4
sub r1, r2, r1
bl round_decimal__wide
ldrsh r3, [sp, #6]
ldrb r2, [sp, #8]
sub r0, r2, r3
subs r1, r0, #1
movmi r1, #0
_020ECD20:
adds r0, r3, #1
movmi r0, #0
ldr r3, _020ECE90 ; =0x000001FD
add r6, r0, r1
cmp r6, r3
addgt sp, sp, #0x22c
movgt r0, #0
ldmgtia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
addgt sp, sp, #0x10
bxgt lr
add r3, sp, #9
sub r6, r7, r1
cmp r6, #0
add r2, r3, r2
mov sl, #0
ble _020ECD74
mov r3, #0x30
_020ECD64:
add sl, sl, #1
cmp sl, r6
strb r3, [r8, #-1]!
blt _020ECD64
_020ECD74:
mov r6, #0
b _020ECD88
_020ECD7C:
ldrsb r3, [r2, #-1]!
add r6, r6, #1
strb r3, [r8, #-1]!
_020ECD88:
cmp r6, r1
ldrltb r3, [sp, #8]
cmplt r6, r3
blt _020ECD7C
cmp r6, r1
bge _020ECDB4
mov r3, #0x30
_020ECDA4:
add r6, r6, #1
cmp r6, r1
strb r3, [r8, #-1]!
blt _020ECDA4
_020ECDB4:
cmp r7, #0
cmpeq r5, #0
movne r1, #0x2e
strneb r1, [r8, #-1]!
cmp r0, #0
beq _020ECE1C
ldrb r1, [sp, #8]
mov r5, #0
sub r1, r0, r1
cmp r1, #0
ble _020ECDFC
mov r3, #0x30
_020ECDE4:
strb r3, [r8, #-1]!
ldrb r1, [sp, #8]
add r5, r5, #1
sub r1, r0, r1
cmp r5, r1
blt _020ECDE4
_020ECDFC:
cmp r5, r0
bge _020ECE24
_020ECE04:
ldrsb r1, [r2, #-1]!
add r5, r5, #1
cmp r5, r0
strb r1, [r8, #-1]!
blt _020ECE04
b _020ECE24
_020ECE1C:
mov r0, #0x30
strb r0, [r8, #-1]!
_020ECE24:
ldrsb r0, [sp, #4]
cmp r0, #0
movne r0, #0x2d
strneb r0, [r8, #-1]!
bne _020ECE54
cmp r4, #1
moveq r0, #0x2b
streqb r0, [r8, #-1]!
beq _020ECE54
cmp r4, #2
moveq r0, #0x20
streqb r0, [r8, #-1]!
_020ECE54:
mov r0, r8
bl strlen
sub r1, sb, r0, lsl #1
mov r0, r8
sub r4, r1, #2
bl strlen
mov r2, r0
mov r0, r4
mov r1, r8
bl mbstowcs
mov r0, r4
add sp, sp, #0x22c
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
_020ECE90: .word 0x000001FD
_020ECE94: .word __wctype_mapC
_020ECE98: .word wstr$6DF0
_020ECE9C: .word wstr$6DFC
_020ECEA0: .word wstr$6E08
_020ECEA4: .word wstr$6E10
_020ECEA8: .word wstr$6E18
_020ECEAC: .word wstr$6E24
_020ECEB0: .word wstr$6E30
_020ECEB4: .word wstr$6E38
_020ECEB8: .word 0x66666667
arm_func_end float2str__wide
arm_func_start __wpformatter
__wpformatter: ; 0x020ECEBC
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x430
mov r3, #0x20
mov fp, r2
strh r3, [sp, #0x1c]
ldrh r2, [fp]
mov sb, r0
mov r8, r1
cmp r2, #0
mov r4, #0
beq _020ED78C
_020ECEEC:
mov r0, fp
mov r1, #0x25
bl wcschr
str r0, [sp, #0xc]
cmp r0, #0
bne _020ECF40
mov r0, fp
bl wcslen
movs r2, r0
add r4, r4, r2
beq _020ED78C
mov r0, r8
mov r1, fp
blx sb
cmp r0, #0
bne _020ED78C
add sp, sp, #0x430
mvn r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
_020ECF40:
sub r0, r0, fp
add r0, r0, r0, lsr #31
movs r2, r0, asr #1
add r4, r4, r2
beq _020ECF78
mov r0, r8
mov r1, fp
blx sb
cmp r0, #0
addeq sp, sp, #0x430
mvneq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
addeq sp, sp, #0x10
bxeq lr
_020ECF78:
add r1, sp, #0x400
ldr r0, [sp, #0xc]
add r1, r1, #0x64
add r2, sp, #0x20
bl parse_format__wide
ldrh r1, [sp, #0x26]
mov fp, r0
cmp r1, #0x61
bgt _020ECFE8
bge _020ED354
cmp r1, #0x47
bgt _020ECFDC
subs r0, r1, #0x41
addpl pc, pc, r0, lsl #2
b _020ECFD0
_020ECFB4: ; jump table
b _020ED354 ; case 0
b _020ED5F8 ; case 1
b _020ED5F8 ; case 2
b _020ED5F8 ; case 3
b _020ED2E4 ; case 4
b _020ED2E4 ; case 5
b _020ED2E4 ; case 6
_020ECFD0:
cmp r1, #0x25
beq _020ED5E4
b _020ED5F8
_020ECFDC:
cmp r1, #0x58
beq _020ED1A8
b _020ED5F8
_020ECFE8:
cmp r1, #0x75
bgt _020ED050
subs r0, r1, #0x64
addpl pc, pc, r0, lsl #2
b _020ED044
_020ECFFC: ; jump table
b _020ED06C ; case 0
b _020ED2E4 ; case 1
b _020ED2E4 ; case 2
b _020ED2E4 ; case 3
b _020ED5F8 ; case 4
b _020ED06C ; case 5
b _020ED5F8 ; case 6
b _020ED5F8 ; case 7
b _020ED5F8 ; case 8
b _020ED5F8 ; case 9
b _020ED500 ; case 10
b _020ED1A8 ; case 11
b _020ED5F8 ; case 12
b _020ED5F8 ; case 13
b _020ED5F8 ; case 14
b _020ED3C4 ; case 15
b _020ED5F8 ; case 16
b _020ED1A8 ; case 17
_020ED044:
cmp r1, #0x63
beq _020ED58C
b _020ED5F8
_020ED050:
cmp r1, #0x78
bgt _020ED060
beq _020ED1A8
b _020ED5F8
_020ED060:
ldr r0, _020ED7A0 ; =0x0000FFFF
cmp r1, r0
b _020ED5F8
_020ED06C:
ldrb r0, [sp, #0x24]
cmp r0, #3
bne _020ED08C
ldr r1, [sp, #0x464]
add r1, r1, #4
str r1, [sp, #0x464]
ldr sl, [r1, #-4]
b _020ED124
_020ED08C:
cmp r0, #4
bne _020ED0B4
ldr r1, [sp, #0x464]
add r2, r1, #8
str r2, [sp, #0x464]
ldr r1, [r2, #-8]
str r1, [sp, #0x10]
ldr r1, [r2, #-4]
str r1, [sp, #0x14]
b _020ED124
_020ED0B4:
cmp r0, #6
bne _020ED0DC
ldr r1, [sp, #0x464]
add r2, r1, #8
str r2, [sp, #0x464]
ldr r1, [r2, #-8]
str r1, [sp, #0x10]
ldr r1, [r2, #-4]
str r1, [sp, #0x14]
b _020ED124
_020ED0DC:
cmp r0, #7
bne _020ED0F8
ldr r1, [sp, #0x464]
add r1, r1, #4
str r1, [sp, #0x464]
ldr sl, [r1, #-4]
b _020ED124
_020ED0F8:
cmp r0, #8
bne _020ED114
ldr r1, [sp, #0x464]
add r1, r1, #4
str r1, [sp, #0x464]
ldr sl, [r1, #-4]
b _020ED124
_020ED114:
ldr r1, [sp, #0x464]
add r1, r1, #4
str r1, [sp, #0x464]
ldr sl, [r1, #-4]
_020ED124:
cmp r0, #2
moveq r1, sl, lsl #0x10
moveq sl, r1, asr #0x10
cmp r0, #4
cmpne r0, #6
add r0, sp, #0x20
bne _020ED16C
sub r5, sp, #4
ldmia r0, {r0, r1, r2, r3}
stmia r5, {r0, r1, r2, r3}
ldr r3, [r5]
ldr r0, [sp, #0x10]
ldr r1, [sp, #0x14]
add r2, sp, #0x430
bl longlong2str__wide
movs r6, r0
beq _020ED5F8
b _020ED190
_020ED16C:
sub r5, sp, #8
ldmia r0, {r0, r1, r2, r3}
stmia r5, {r0, r1, r2, r3}
add r1, sp, #0x430
mov r0, sl
ldmia r5, {r2, r3}
bl long2str__wide
movs r6, r0
beq _020ED5F8
_020ED190:
add r0, sp, #0x400
add r0, r0, #0x2e
sub r0, r0, r6
add r0, r0, r0, lsr #31
mov r7, r0, asr #1
b _020ED644
_020ED1A8:
ldrb r0, [sp, #0x24]
cmp r0, #3
bne _020ED1C8
ldr r1, [sp, #0x464]
add r1, r1, #4
str r1, [sp, #0x464]
ldr sl, [r1, #-4]
b _020ED260
_020ED1C8:
cmp r0, #4
bne _020ED1F0
ldr r1, [sp, #0x464]
add r2, r1, #8
str r2, [sp, #0x464]
ldr r1, [r2, #-8]
str r1, [sp, #0x10]
ldr r1, [r2, #-4]
str r1, [sp, #0x14]
b _020ED260
_020ED1F0:
cmp r0, #6
bne _020ED218
ldr r1, [sp, #0x464]
add r2, r1, #8
str r2, [sp, #0x464]
ldr r1, [r2, #-8]
str r1, [sp, #0x10]
ldr r1, [r2, #-4]
str r1, [sp, #0x14]
b _020ED260
_020ED218:
cmp r0, #7
bne _020ED234
ldr r1, [sp, #0x464]
add r1, r1, #4
str r1, [sp, #0x464]
ldr sl, [r1, #-4]
b _020ED260
_020ED234:
cmp r0, #8
bne _020ED250
ldr r1, [sp, #0x464]
add r1, r1, #4
str r1, [sp, #0x464]
ldr sl, [r1, #-4]
b _020ED260
_020ED250:
ldr r1, [sp, #0x464]
add r1, r1, #4
str r1, [sp, #0x464]
ldr sl, [r1, #-4]
_020ED260:
cmp r0, #2
moveq r1, sl, lsl #0x10
moveq sl, r1, lsr #0x10
cmp r0, #4
cmpne r0, #6
add r0, sp, #0x20
bne _020ED2A8
sub r5, sp, #4
ldmia r0, {r0, r1, r2, r3}
stmia r5, {r0, r1, r2, r3}
ldr r3, [r5]
ldr r0, [sp, #0x10]
ldr r1, [sp, #0x14]
add r2, sp, #0x430
bl longlong2str__wide
movs r6, r0
beq _020ED5F8
b _020ED2CC
_020ED2A8:
sub r5, sp, #8
ldmia r0, {r0, r1, r2, r3}
stmia r5, {r0, r1, r2, r3}
add r1, sp, #0x430
mov r0, sl
ldmia r5, {r2, r3}
bl long2str__wide
movs r6, r0
beq _020ED5F8
_020ED2CC:
add r0, sp, #0x400
add r0, r0, #0x2e
sub r0, r0, r6
add r0, r0, r0, lsr #31
mov r7, r0, asr #1
b _020ED644
_020ED2E4:
ldrb r0, [sp, #0x24]
cmp r0, #9
ldrne r0, [sp, #0x464]
addne r0, r0, #8
strne r0, [sp, #0x464]
bne _020ED308
ldr r0, [sp, #0x464]
add r0, r0, #8
str r0, [sp, #0x464]
_020ED308:
ldr r7, [r0, #-8]
ldr r6, [r0, #-4]
add r0, sp, #0x20
sub r5, sp, #4
ldmia r0, {r0, r1, r2, r3}
stmia r5, {r0, r1, r2, r3}
ldr r3, [r5]
mov r0, r7
mov r1, r6
add r2, sp, #0x430
bl float2str__wide
movs r6, r0
beq _020ED5F8
add r0, sp, #0x400
add r0, r0, #0x2e
sub r0, r0, r6
add r0, r0, r0, lsr #31
mov r7, r0, asr #1
b _020ED644
_020ED354:
ldrb r0, [sp, #0x24]
cmp r0, #9
ldrne r0, [sp, #0x464]
addne r0, r0, #8
strne r0, [sp, #0x464]
bne _020ED378
ldr r0, [sp, #0x464]
add r0, r0, #8
str r0, [sp, #0x464]
_020ED378:
ldr r7, [r0, #-8]
ldr r6, [r0, #-4]
add r0, sp, #0x20
sub r5, sp, #4
ldmia r0, {r0, r1, r2, r3}
stmia r5, {r0, r1, r2, r3}
ldr r3, [r5]
mov r0, r7
mov r1, r6
add r2, sp, #0x430
bl double2hex__wide
movs r6, r0
beq _020ED5F8
add r0, sp, #0x400
add r0, r0, #0x2e
sub r0, r0, r6
add r0, r0, r0, lsr #31
mov r7, r0, asr #1
b _020ED644
_020ED3C4:
ldrb r0, [sp, #0x24]
cmp r0, #5
bne _020ED460
ldr r0, [sp, #0x464]
add r0, r0, #4
str r0, [sp, #0x464]
ldr r6, [r0, #-4]
ldrb r0, [sp, #0x23]
cmp r6, #0
ldreq r6, _020ED7A4 ; =buff_ptr$6E40
cmp r0, #0
beq _020ED418
ldrh r1, [r6], #2
ldrb r0, [sp, #0x22]
and r7, r1, #0xff
cmp r0, #0
beq _020ED644
ldr r0, [sp, #0x2c]
cmp r7, r0
movgt r7, r0
b _020ED644
_020ED418:
ldrb r0, [sp, #0x22]
cmp r0, #0
beq _020ED450
ldr r7, [sp, #0x2c]
mov r0, r6
mov r2, r7
mov r1, #0
bl wmemchr
cmp r0, #0
beq _020ED644
sub r0, r0, r6
add r0, r0, r0, lsr #31
mov r7, r0, asr #1
b _020ED644
_020ED450:
mov r0, r6
bl wcslen
mov r7, r0
b _020ED644
_020ED460:
ldr r0, [sp, #0x464]
add r0, r0, #4
str r0, [sp, #0x464]
ldr r5, [r0, #-4]
ldrb r0, [sp, #0x23]
cmp r5, #0
ldreq r5, _020ED7A8 ; =strptr$6E44
cmp r0, #0
beq _020ED4A8
ldrh r1, [r6]
ldrb r0, [sp, #0x22]
and r6, r1, #0xff
cmp r0, #0
beq _020ED4E0
ldr r0, [sp, #0x2c]
cmp r6, r0
movgt r6, r0
b _020ED4E0
_020ED4A8:
ldrb r0, [sp, #0x22]
cmp r0, #0
beq _020ED4D4
ldr r6, [sp, #0x2c]
mov r0, r5
mov r2, r6
mov r1, #0
bl memchr
cmp r0, #0
subne r6, r0, r5
b _020ED4E0
_020ED4D4:
mov r0, r5
bl strlen
mov r6, r0
_020ED4E0:
add r0, sp, #0x30
mov r1, r5
mov r2, r6
bl mbstowcs
movs r7, r0
bmi _020ED5F8
add r6, sp, #0x30
b _020ED644
_020ED500:
ldr r1, [sp, #0x464]
ldrb r0, [sp, #0x24]
add r1, r1, #4
str r1, [sp, #0x464]
ldr r6, [r1, #-4]
cmp r0, #8
addls pc, pc, r0, lsl #2
b _020ED780
_020ED520: ; jump table
b _020ED544 ; case 0
b _020ED780 ; case 1
b _020ED54C ; case 2
b _020ED554 ; case 3
b _020ED57C ; case 4
b _020ED780 ; case 5
b _020ED55C ; case 6
b _020ED56C ; case 7
b _020ED574 ; case 8
_020ED544:
str r4, [r6]
b _020ED780
_020ED54C:
strh r4, [r6]
b _020ED780
_020ED554:
str r4, [r6]
b _020ED780
_020ED55C:
str r4, [r6]
mov r0, r4, asr #0x1f
str r0, [r6, #4]
b _020ED780
_020ED56C:
str r4, [r6]
b _020ED780
_020ED574:
str r4, [r6]
b _020ED780
_020ED57C:
str r4, [r6]
mov r0, r4, asr #0x1f
str r0, [r6, #4]
b _020ED780
_020ED58C:
ldrb r0, [sp, #0x24]
add r6, sp, #0x30
cmp r0, #5
bne _020ED5B8
ldr r0, [sp, #0x464]
mov r7, #1
add r0, r0, #4
str r0, [sp, #0x464]
ldr r0, [r0, #-4]
strh r0, [r6]
b _020ED644
_020ED5B8:
ldr r0, [sp, #0x464]
add r1, sp, #0x18
add r0, r0, #4
str r0, [sp, #0x464]
ldr r3, [r0, #-4]
mov r0, r6
mov r2, #1
strb r3, [sp, #0x18]
bl mbtowc
mov r7, r0
b _020ED644
_020ED5E4:
mov r0, #0x25
strh r0, [sp, #0x30]
add r6, sp, #0x30
mov r7, #1
b _020ED644
_020ED5F8:
ldr r0, [sp, #0xc]
bl wcslen
movs r5, r0
beq _020ED630
ldr r1, [sp, #0xc]
mov r0, r8
mov r2, r5
blx sb
cmp r0, #0
addeq sp, sp, #0x430
mvneq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
addeq sp, sp, #0x10
bxeq lr
_020ED630:
add sp, sp, #0x430
add r0, r4, r5
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
_020ED644:
ldrb r0, [sp, #0x20]
mov r5, r7
cmp r0, #0
beq _020ED6F4
cmp r0, #2
moveq r1, #0x30
movne r1, #0x20
strh r1, [sp, #0x1c]
ldrh r0, [r6]
cmp r0, #0x2b
cmpne r0, #0x2d
cmpne r0, #0x20
bne _020ED6B0
cmp r1, #0x30
bne _020ED6B0
mov r0, r8
mov r1, r6
mov r2, #1
blx sb
cmp r0, #0
addeq sp, sp, #0x430
mvneq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
addeq sp, sp, #0x10
bxeq lr
add r6, r6, #2
sub r7, r7, #1
_020ED6B0:
ldr r0, [sp, #0x28]
cmp r5, r0
bge _020ED6F4
_020ED6BC:
mov r0, r8
add r1, sp, #0x1c
mov r2, #1
blx sb
cmp r0, #0
addeq sp, sp, #0x430
mvneq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
addeq sp, sp, #0x10
bxeq lr
ldr r0, [sp, #0x28]
add r5, r5, #1
cmp r5, r0
blt _020ED6BC
_020ED6F4:
cmp r7, #0
beq _020ED724
mov r0, r8
mov r1, r6
mov r2, r7
blx sb
cmp r0, #0
addeq sp, sp, #0x430
mvneq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
addeq sp, sp, #0x10
bxeq lr
_020ED724:
ldrb r0, [sp, #0x20]
cmp r0, #0
bne _020ED77C
ldr r0, [sp, #0x28]
cmp r5, r0
bge _020ED77C
mov r7, #0x20
_020ED740:
mov r0, r8
add r1, sp, #0x1a
mov r2, #1
strh r7, [sp, #0x1a]
blx sb
cmp r0, #0
addeq sp, sp, #0x430
mvneq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
addeq sp, sp, #0x10
bxeq lr
ldr r0, [sp, #0x28]
add r5, r5, #1
cmp r5, r0
blt _020ED740
_020ED77C:
add r4, r4, r5
_020ED780:
ldrh r0, [fp]
cmp r0, #0
bne _020ECEEC
_020ED78C:
mov r0, r4
add sp, sp, #0x430
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
_020ED7A0: .word 0x0000FFFF
_020ED7A4: .word buff_ptr$6E40
_020ED7A8: .word strptr$6E44
arm_func_end __wpformatter
arm_func_start __wStringWrite
__wStringWrite: ; 0x020ED7AC
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
ldr r3, [r4, #8]
mov r5, r2
ldr r2, [r4, #4]
add r0, r3, r5
cmp r0, r2
ldr r0, [r4]
subhi r5, r2, r3
mov r2, r5
add r0, r0, r3, lsl #1
bl wmemcpy
ldr r1, [r4, #8]
add r1, r1, r5
str r1, [r4, #8]
ldmia sp!, {r3, r4, r5, pc}
arm_func_end __wStringWrite
arm_func_start swprintf
swprintf: ; 0x020ED7EC
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, lr}
add r3, sp, #0x10
bic r3, r3, #3
ldr r2, [sp, #0x10]
add r3, r3, #4
bl vswprintf
ldmia sp!, {r3, lr}
add sp, sp, #0x10
bx lr
arm_func_end swprintf
arm_func_start vswprintf
vswprintf: ; 0x020ED814
stmdb sp!, {r4, r5, lr}
sub sp, sp, #0xc
mov r5, r0
mov r4, r1
mov ip, #0
ldr r0, _020ED880 ; =__wStringWrite
add r1, sp, #0
str r5, [sp]
str r4, [sp, #4]
str ip, [sp, #8]
bl __wpformatter
cmp r0, #0
addlt sp, sp, #0xc
ldmltia sp!, {r4, r5, pc}
cmp r0, r4
bhs _020ED868
mov r1, r0, lsl #1
mov r2, #0
add sp, sp, #0xc
strh r2, [r5, r1]
ldmia sp!, {r4, r5, pc}
_020ED868:
mov r1, #0
add r0, r5, r4, lsl #1
strh r1, [r0, #-2]
sub r0, r1, #1
add sp, sp, #0xc
ldmia sp!, {r4, r5, pc}
.align 2, 0
_020ED880: .word __wStringWrite
arm_func_end vswprintf
exception long2str__wide, 0x0251, 0x0090FF20
exception longlong2str__wide, 0x0301, 0x00A0FF20
exception double2hex__wide, 0x0399, 0x00F07F20
exception float2str__wide, 0x064C, float2str__wide_exception
exception __wpformatter, 0x08F0, __wpformatter_exception
exception __wStringWrite, 0x0041, 0x00200300
exception swprintf, 0x0029, 0x00300020
exception vswprintf, 0x0071, 0x00300300
.section .exception,4,1,2
float2str__wide_exception: ; 0x020F4F9C
.byte 0x20, 0xFF, 0x09, 0x60, 0x00, 0x00, 0x00, 0x00
__wpformatter_exception: ; 0x020F4FA4
.byte 0x20, 0xFF, 0x11, 0x68, 0x00, 0x00, 0x00, 0x00