pokediamond/arm9/asm/MSL_Common_printf.s
2023-05-24 09:15:59 +01:00

2584 lines
45 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.data
.global UNK_02106DA0
UNK_02106DA0: ; 0x02106DA0
.byte 0x30, 0x78, 0x30, 0x70, 0x30, 0x00, 0x00, 0x00
.size UNK_02106DA0,.-UNK_02106DA0
.global UNK_02106DA8
UNK_02106DA8: ; 0x02106DA8
.asciz "-INF"
.size UNK_02106DA8,.-UNK_02106DA8
.balign 4, 0
.global UNK_02106DB0
UNK_02106DB0: ; 0x02106DB0
.asciz "-inf"
.size UNK_02106DB0,.-UNK_02106DB0
.balign 4, 0
.global UNK_02106DB8
UNK_02106DB8: ; 0x02106DB8
.asciz "INF"
.size UNK_02106DB8,.-UNK_02106DB8
.balign 4, 0
.global UNK_02106DBC
UNK_02106DBC: ; 0x02106DBC
.asciz "inf"
.size UNK_02106DBC,.-UNK_02106DBC
.balign 4, 0
.global UNK_02106DC0
UNK_02106DC0: ; 0x02106DC0
.asciz "-NAN"
.size UNK_02106DC0,.-UNK_02106DC0
.balign 4, 0
.global UNK_02106DC8
UNK_02106DC8: ; 0x02106DC8
.asciz "-nan"
.size UNK_02106DC8,.-UNK_02106DC8
.balign 4, 0
.global UNK_02106DD0
UNK_02106DD0: ; 0x02106DD0
.asciz "NAN"
.size UNK_02106DD0,.-UNK_02106DD0
.balign 4, 0
.global UNK_02106DD4
UNK_02106DD4: ; 0x02106DD4
.asciz "nan"
.size UNK_02106DD4,.-UNK_02106DD4
.balign 4, 0
.global UNK_02106DD8
UNK_02106DD8: ; 0x02106DD8
.byte 0x00, 0x00, 0x00, 0x00
.size UNK_02106DD8,.-UNK_02106DD8
.global UNK_02106DDC
UNK_02106DDC: ; 0x02106DDC
.byte 0x00, 0x00, 0x00, 0x00
.size UNK_02106DDC,.-UNK_02106DDC
.text
arm_func_start parse_format
parse_format: ; 0x020DF600
stmdb sp!, {r4-r8,lr}
sub sp, sp, #0x10
ldrsb r3, [r0, #0x1]
mov r4, #0x0
mov r5, #0x1
mov lr, r2
strb r5, [sp, #0x0]
strb r4, [sp, #0x1]
strb r4, [sp, #0x2]
strb r4, [sp, #0x3]
strb r4, [sp, #0x4]
str r4, [sp, #0x8]
str r4, [sp, #0xc]
cmp r3, #0x25
add r12, r0, #0x1
bne _020DF65C
add r0, sp, #0x0
strb r3, [sp, #0x5]
ldmia r0, {r0-r3}
stmia lr, {r0-r3}
add sp, sp, #0x10
add r0, r12, #0x1
ldmia sp!, {r4-r8,pc}
_020DF65C:
mov r2, #0x2
mov r0, r4
mov r5, r2
mov r6, r4
mov r7, #0x1
_020DF670:
mov r8, r7
cmp r3, #0x2b
bgt _020DF6A0
bge _020DF6C8
cmp r3, #0x23
bgt _020DF6F8
cmp r3, #0x20
blt _020DF6F8
beq _020DF6D0
cmp r3, #0x23
beq _020DF6E0
b _020DF6F8
_020DF6A0:
cmp r3, #0x30
bgt _020DF6F8
cmp r3, #0x2d
blt _020DF6F8
beq _020DF6C0
cmp r3, #0x30
beq _020DF6E8
b _020DF6F8
_020DF6C0:
strb r6, [sp, #0x0]
b _020DF6FC
_020DF6C8:
strb r7, [sp, #0x1]
b _020DF6FC
_020DF6D0:
ldrb r4, [sp, #0x1]
cmp r4, #0x1
strneb r5, [sp, #0x1]
b _020DF6FC
_020DF6E0:
strb r7, [sp, #0x3]
b _020DF6FC
_020DF6E8:
ldrb r4, [sp, #0x0]
cmp r4, #0x0
strneb r2, [sp, #0x0]
b _020DF6FC
_020DF6F8:
mov r8, r0
_020DF6FC:
cmp r8, #0x0
ldrnesb r3, [r12, #0x1]!
bne _020DF670
cmp r3, #0x2a
bne _020DF744
ldr r0, [r1, #0x0]
add r0, r0, #0x4
str r0, [r1, #0x0]
ldr r0, [r0, #-0x4]
str r0, [sp, #0x8]
cmp r0, #0x0
bge _020DF73C
rsb r0, r0, #0x0
mov r2, #0x0
strb r2, [sp, #0x0]
str r0, [sp, #0x8]
_020DF73C:
ldrsb r3, [r12, #0x1]!
b _020DF794
_020DF744:
ldr r4, _020DFB88 ; =__msl_digit
mov r5, #0x0
mov r0, #0xa
b _020DF768
_020DF754:
ldr r2, [sp, #0x8]
sub r3, r3, #0x30
mla r6, r2, r0, r3
ldrsb r3, [r12, #0x1]!
str r6, [sp, #0x8]
_020DF768:
cmp r3, #0x0
blt _020DF778
cmp r3, #0x80
blt _020DF780
_020DF778:
mov r2, r5
b _020DF78C
_020DF780:
mov r2, r3, lsl #0x1
ldrh r2, [r4, r2]
and r2, r2, #0x8
_020DF78C:
cmp r2, #0x0
bne _020DF754
_020DF794:
ldr r2, [sp, #0x8]
ldr r0, _020DFB8C ; =0x000001FD
cmp r2, r0
ble _020DF7C4
mov r1, #0xff
add r0, sp, #0x0
strb r1, [sp, #0x5]
ldmia r0, {r0-r3}
stmia lr, {r0-r3}
add sp, sp, #0x10
add r0, r12, #0x1
ldmia sp!, {r4-r8,pc}
_020DF7C4:
cmp r3, #0x2e
bne _020DF858
ldrsb r3, [r12, #0x1]!
mov r0, #0x1
strb r0, [sp, #0x2]
cmp r3, #0x2a
bne _020DF808
ldr r0, [r1, #0x0]
add r0, r0, #0x4
str r0, [r1, #0x0]
ldr r0, [r0, #-0x4]
ldrsb r3, [r12, #0x1]!
str r0, [sp, #0xc]
cmp r0, #0x0
movlt r0, #0x0
strltb r0, [sp, #0x2]
b _020DF858
_020DF808:
ldr r2, _020DFB88 ; =__msl_digit
mov r4, #0x0
mov r0, #0xa
b _020DF82C
_020DF818:
ldr r1, [sp, #0xc]
sub r3, r3, #0x30
mla r5, r1, r0, r3
ldrsb r3, [r12, #0x1]!
str r5, [sp, #0xc]
_020DF82C:
cmp r3, #0x0
blt _020DF83C
cmp r3, #0x80
blt _020DF844
_020DF83C:
mov r1, r4
b _020DF850
_020DF844:
mov r1, r3, lsl #0x1
ldrh r1, [r2, r1]
and r1, r1, #0x8
_020DF850:
cmp r1, #0x0
bne _020DF818
_020DF858:
cmp r3, #0x6c
mov r0, #0x1
bgt _020DF890
cmp r3, #0x68
blt _020DF884
beq _020DF8AC
cmp r3, #0x6a
beq _020DF8F8
cmp r3, #0x6c
beq _020DF8C8
b _020DF91C
_020DF884:
cmp r3, #0x4c
beq _020DF8EC
b _020DF91C
_020DF890:
cmp r3, #0x74
bgt _020DF8A0
beq _020DF904
b _020DF91C
_020DF8A0:
cmp r3, #0x7a
beq _020DF910
b _020DF91C
_020DF8AC:
ldrsb r1, [r12, #0x1]
mov r2, #0x2
strb r2, [sp, #0x4]
cmp r1, #0x68
streqb r0, [sp, #0x4]
ldreqsb r3, [r12, #0x1]!
b _020DF920
_020DF8C8:
ldrsb r1, [r12, #0x1]
mov r2, #0x3
strb r2, [sp, #0x4]
cmp r1, #0x6c
bne _020DF920
mov r1, #0x4
strb r1, [sp, #0x4]
ldrsb r3, [r12, #0x1]!
b _020DF920
_020DF8EC:
mov r1, #0x9
strb r1, [sp, #0x4]
b _020DF920
_020DF8F8:
mov r1, #0x6
strb r1, [sp, #0x4]
b _020DF920
_020DF904:
mov r1, #0x8
strb r1, [sp, #0x4]
b _020DF920
_020DF910:
mov r1, #0x7
strb r1, [sp, #0x4]
b _020DF920
_020DF91C:
mov r0, #0x0
_020DF920:
cmp r0, #0x0
ldrnesb r3, [r12, #0x1]!
strb r3, [sp, #0x5]
cmp r3, #0x61
bgt _020DF974
bge _020DFA5C
cmp r3, #0x47
bgt _020DF968
subs r0, r3, #0x41
addpl pc, pc, r0, lsl #0x2
b _020DFB68
b _020DFA5C ; case 65
b _020DFB68 ; case 66
b _020DFB68 ; case 67
b _020DFB68 ; case 68
b _020DFAA4 ; case 69
b _020DFA24 ; case 70
b _020DFA94 ; case 71
_020DF968:
cmp r3, #0x58
beq _020DF9E8
b _020DFB68
_020DF974:
cmp r3, #0x63
bgt _020DF984
beq _020DFB04
b _020DFB68
_020DF984:
sub r0, r3, #0x64
cmp r0, #0x14
addls pc, pc, r0, lsl #0x2
b _020DFB68
b _020DF9E8 ; case 100
b _020DFAA4 ; case 101
b _020DFA24 ; case 102
b _020DFA94 ; case 103
b _020DFB68 ; case 104
b _020DF9E8 ; case 105
b _020DFB68 ; case 106
b _020DFB68 ; case 107
b _020DFB68 ; case 108
b _020DFB68 ; case 109
b _020DFB54 ; case 110
b _020DF9E8 ; case 111
b _020DFAE0 ; case 112
b _020DFB68 ; case 113
b _020DFB68 ; case 114
b _020DFB30 ; case 115
b _020DFB68 ; case 116
b _020DF9E8 ; case 117
b _020DFB68 ; case 118
b _020DFB68 ; case 119
b _020DF9E8 ; case 120
_020DF9E8:
ldrb r0, [sp, #0x4]
cmp r0, #0x9
moveq r0, #0xff
streqb r0, [sp, #0x5]
beq _020DFB70
ldrb r0, [sp, #0x2]
cmp r0, #0x0
moveq r0, #0x1
streq r0, [sp, #0xc]
beq _020DFB70
ldrb r0, [sp, #0x0]
cmp r0, #0x2
moveq r0, #0x1
streqb r0, [sp, #0x0]
b _020DFB70
_020DFA24:
ldrb r0, [sp, #0x4]
cmp r0, #0x2
cmpne r0, #0x6
cmpne r0, #0x7
cmpne r0, #0x8
cmpne r0, #0x4
moveq r0, #0xff
streqb r0, [sp, #0x5]
beq _020DFB70
ldrb r0, [sp, #0x2]
cmp r0, #0x0
moveq r0, #0x6
streq r0, [sp, #0xc]
b _020DFB70
_020DFA5C:
ldrb r0, [sp, #0x2]
cmp r0, #0x0
moveq r0, #0xd
streq r0, [sp, #0xc]
ldrb r0, [sp, #0x4]
cmp r0, #0x2
cmpne r0, #0x6
cmpne r0, #0x7
cmpne r0, #0x8
cmpne r0, #0x4
cmpne r0, #0x1
moveq r0, #0xff
streqb r0, [sp, #0x5]
b _020DFB70
_020DFA94:
ldr r0, [sp, #0xc]
cmp r0, #0x0
moveq r0, #0x1
streq r0, [sp, #0xc]
_020DFAA4:
ldrb r0, [sp, #0x4]
cmp r0, #0x2
cmpne r0, #0x6
cmpne r0, #0x7
cmpne r0, #0x8
cmpne r0, #0x4
cmpne r0, #0x1
moveq r0, #0xff
streqb r0, [sp, #0x5]
beq _020DFB70
ldrb r0, [sp, #0x2]
cmp r0, #0x0
moveq r0, #0x6
streq r0, [sp, #0xc]
b _020DFB70
_020DFAE0:
mov r3, #0x78
mov r2, #0x1
mov r1, #0x3
mov r0, #0x8
strb r3, [sp, #0x5]
strb r2, [sp, #0x3]
strb r1, [sp, #0x4]
str r0, [sp, #0xc]
b _020DFB70
_020DFB04:
ldrb r1, [sp, #0x4]
cmp r1, #0x3
moveq r0, #0x5
streqb r0, [sp, #0x4]
beq _020DFB70
ldrb r0, [sp, #0x2]
cmp r0, #0x0
cmpeq r1, #0x0
movne r0, #0xff
strneb r0, [sp, #0x5]
b _020DFB70
_020DFB30:
ldrb r0, [sp, #0x4]
cmp r0, #0x3
moveq r0, #0x5
streqb r0, [sp, #0x4]
beq _020DFB70
cmp r0, #0x0
movne r0, #0xff
strneb r0, [sp, #0x5]
b _020DFB70
_020DFB54:
ldrb r0, [sp, #0x4]
cmp r0, #0x9
moveq r0, #0xff
streqb r0, [sp, #0x5]
b _020DFB70
_020DFB68:
mov r0, #0xff
strb r0, [sp, #0x5]
_020DFB70:
add r0, sp, #0x0
ldmia r0, {r0-r3}
stmia lr, {r0-r3}
add r0, r12, #0x1
add sp, sp, #0x10
ldmia sp!, {r4-r8,pc}
.balign 4
_020DFB88: .word __msl_digit
_020DFB8C: .word 0x000001FD
arm_func_end parse_format
arm_func_start long2str
long2str: ; 0x020DFB90
stmdb sp!, {r0-r3}
stmdb sp!, {r3-r11,lr}
sub sp, sp, #0x10
movs r10, r0
mov r0, #0x0
mov r5, r1
str r0, [sp, #0xc]
ldr r7, [sp, #0x4c]
mov r6, r0
strb r0, [r5, #-0x1]!
ldrb r0, [sp, #0x43]
str r1, [sp, #0x0]
ldrb r8, [sp, #0x45]
str r0, [sp, #0x4]
ldr r0, [sp, #0x48]
ldrb r11, [sp, #0x41]
str r0, [sp, #0x8]
cmpeq r7, #0x0
bne _020DFC04
ldr r0, [sp, #0x4]
cmp r0, #0x0
beq _020DFBF0
cmp r8, #0x6f
beq _020DFC04
_020DFBF0:
add sp, sp, #0x10
mov r0, r5
ldmia sp!, {r3-r11,lr}
add sp, sp, #0x10
bx lr
_020DFC04:
cmp r8, #0x69
bgt _020DFC2C
bge _020DFC60
cmp r8, #0x58
bgt _020DFC20
beq _020DFC8C
b _020DFC94
_020DFC20:
cmp r8, #0x64
beq _020DFC60
b _020DFC94
_020DFC2C:
cmp r8, #0x6f
bgt _020DFC40
moveq r4, #0x8
moveq r11, #0x0
b _020DFC94
_020DFC40:
cmp r8, #0x78
bgt _020DFC94
cmp r8, #0x75
blt _020DFC94
beq _020DFC80
cmp r8, #0x78
beq _020DFC8C
b _020DFC94
_020DFC60:
cmp r10, #0x0
mov r4, #0xa
bge _020DFC94
mov r0, #0x1
cmp r10, #0x80000000
rsbne r10, r10, #0x0
str r0, [sp, #0xc]
b _020DFC94
_020DFC80:
mov r4, #0xa
mov r11, #0x0
b _020DFC94
_020DFC8C:
mov r4, #0x10
mov r11, #0x0
_020DFC94:
mov r0, r10
mov r1, r4
bl _u32_div_f
mov r9, r1
mov r0, r10
mov r1, r4
bl _u32_div_f
cmp r9, #0xa
mov r10, r0
addlt r9, r9, #0x30
blt _020DFCCC
cmp r8, #0x78
addeq r9, r9, #0x57
addne r9, r9, #0x37
_020DFCCC:
cmp r10, #0x0
strb r9, [r5, #-0x1]!
add r6, r6, #0x1
bne _020DFC94
cmp r4, #0x8
bne _020DFD00
ldr r0, [sp, #0x4]
cmp r0, #0x0
ldrnesb r0, [r5, #0x0]
cmpne r0, #0x30
movne r0, #0x30
strneb r0, [r5, #-0x1]!
addne r6, r6, #0x1
_020DFD00:
ldrb r0, [sp, #0x40]
cmp r0, #0x2
bne _020DFD34
ldr r0, [sp, #0xc]
ldr r7, [sp, #0x8]
cmp r0, #0x0
cmpeq r11, #0x0
subne r7, r7, #0x1
cmp r4, #0x10
bne _020DFD34
ldr r0, [sp, #0x4]
cmp r0, #0x0
subne r7, r7, #0x2
_020DFD34:
ldr r0, [sp, #0x0]
sub r1, r0, r5
ldr r0, _020DFDD8 ; =0x000001FD
add r1, r7, r1
cmp r1, r0
addgt sp, sp, #0x10
movgt r0, #0x0
ldmgtia sp!, {r3-r11,lr}
addgt sp, sp, #0x10
bxgt lr
cmp r6, r7
bge _020DFD78
mov r0, #0x30
_020DFD68:
add r6, r6, #0x1
cmp r6, r7
strb r0, [r5, #-0x1]!
blt _020DFD68
_020DFD78:
cmp r4, #0x10
bne _020DFD94
ldr r0, [sp, #0x4]
cmp r0, #0x0
movne r0, #0x30
strneb r8, [r5, #-0x1]
strneb r0, [r5, #-0x2]!
_020DFD94:
ldr r0, [sp, #0xc]
cmp r0, #0x0
movne r0, #0x2d
strneb r0, [r5, #-0x1]!
bne _020DFDC4
cmp r11, #0x1
moveq r0, #0x2b
streqb r0, [r5, #-0x1]!
beq _020DFDC4
cmp r11, #0x2
moveq r0, #0x20
streqb r0, [r5, #-0x1]!
_020DFDC4:
mov r0, r5
add sp, sp, #0x10
ldmia sp!, {r3-r11,lr}
add sp, sp, #0x10
bx lr
.balign 4
_020DFDD8: .word 0x000001FD
arm_func_end long2str
arm_func_start longlong2str
longlong2str: ; 0x020DFDDC
stmdb sp!, {r0-r3}
stmdb sp!, {r3-r11,lr}
sub sp, sp, #0x18
mov r9, r1
mov r1, #0x0
mov r10, r0
mov r6, r2
mov r0, r1
strb r0, [r6, #-0x1]!
ldr r0, [sp, #0x58]
cmp r9, #0x0
str r0, [sp, #0x10]
ldrb r0, [sp, #0x4f]
cmpeq r10, #0x0
str r2, [sp, #0x0]
str r0, [sp, #0x4]
ldr r0, [sp, #0x54]
str r1, [sp, #0x14]
str r0, [sp, #0x8]
ldrb r0, [sp, #0x4d]
mov r7, r1
ldrb r8, [sp, #0x51]
str r0, [sp, #0xc]
ldreq r0, [sp, #0x10]
cmpeq r0, #0x0
bne _020DFE6C
ldr r0, [sp, #0x4]
cmp r0, #0x0
beq _020DFE58
cmp r8, #0x6f
beq _020DFE6C
_020DFE58:
add sp, sp, #0x18
mov r0, r6
ldmia sp!, {r3-r11,lr}
add sp, sp, #0x10
bx lr
_020DFE6C:
cmp r8, #0x69
bgt _020DFE94
bge _020DFEC4
cmp r8, #0x58
bgt _020DFE88
beq _020DFF18
b _020DFF24
_020DFE88:
cmp r8, #0x64
beq _020DFEC4
b _020DFF24
_020DFE94:
cmp r8, #0x6f
bgt _020DFEA4
beq _020DFEF8
b _020DFF24
_020DFEA4:
cmp r8, #0x78
bgt _020DFF24
cmp r8, #0x75
blt _020DFF24
beq _020DFF08
cmp r8, #0x78
beq _020DFF18
b _020DFF24
_020DFEC4:
subs r0, r10, #0x0
sbcs r0, r9, #0x0
mov r11, #0xa
mov r5, #0x0
bge _020DFF24
cmp r9, #0x80000000
cmpeq r10, r5
beq _020DFEEC
rsbs r10, r10, #0x0
rsc r9, r9, #0x0
_020DFEEC:
mov r0, #0x1
str r0, [sp, #0x14]
b _020DFF24
_020DFEF8:
mov r5, #0x0
str r5, [sp, #0xc]
mov r11, #0x8
b _020DFF24
_020DFF08:
mov r5, #0x0
str r5, [sp, #0xc]
mov r11, #0xa
b _020DFF24
_020DFF18:
mov r5, #0x0
str r5, [sp, #0xc]
mov r11, #0x10
_020DFF24:
mov r0, r10
mov r1, r9
mov r2, r11
mov r3, r5
bl _ull_mod
mov r4, r0
mov r0, r10
mov r1, r9
mov r2, r11
mov r3, r5
bl _ll_udiv
mov r10, r0
cmp r4, #0xa
mov r9, r1
addlt r0, r4, #0x30
blt _020DFF70
cmp r8, #0x78
addeq r0, r4, #0x57
addne r0, r4, #0x37
_020DFF70:
strb r0, [r6, #-0x1]!
mov r0, #0x0
cmp r9, r0
cmpeq r10, r0
add r7, r7, #0x1
bne _020DFF24
cmp r5, #0x0
cmpeq r11, #0x8
bne _020DFFB0
ldr r0, [sp, #0x4]
cmp r0, #0x0
ldrnesb r0, [r6, #0x0]
cmpne r0, #0x30
movne r0, #0x30
strneb r0, [r6, #-0x1]!
addne r7, r7, #0x1
_020DFFB0:
ldrb r0, [sp, #0x4c]
cmp r0, #0x2
bne _020E0000
ldr r0, [sp, #0x8]
str r0, [sp, #0x10]
ldr r0, [sp, #0x14]
cmp r0, #0x0
ldreq r0, [sp, #0xc]
cmpeq r0, #0x0
ldrne r0, [sp, #0x10]
subne r0, r0, #0x1
strne r0, [sp, #0x10]
cmp r5, #0x0
cmpeq r11, #0x10
bne _020E0000
ldr r0, [sp, #0x4]
cmp r0, #0x0
ldrne r0, [sp, #0x10]
subne r0, r0, #0x2
strne r0, [sp, #0x10]
_020E0000:
ldr r0, [sp, #0x0]
ldr r1, _020E00B8 ; =0x000001FD
sub r2, r0, r6
ldr r0, [sp, #0x10]
add r0, r0, r2
cmp r0, r1
addgt sp, sp, #0x18
movgt r0, #0x0
ldmgtia sp!, {r3-r11,lr}
addgt sp, sp, #0x10
bxgt lr
ldr r0, [sp, #0x10]
cmp r7, r0
bge _020E0050
mov r1, #0x30
_020E003C:
ldr r0, [sp, #0x10]
add r7, r7, #0x1
cmp r7, r0
strb r1, [r6, #-0x1]!
blt _020E003C
_020E0050:
cmp r5, #0x0
cmpeq r11, #0x10
bne _020E0070
ldr r0, [sp, #0x4]
cmp r0, #0x0
movne r0, #0x30
strneb r8, [r6, #-0x1]
strneb r0, [r6, #-0x2]!
_020E0070:
ldr r0, [sp, #0x14]
cmp r0, #0x0
movne r0, #0x2d
strneb r0, [r6, #-0x1]!
bne _020E00A4
ldr r0, [sp, #0xc]
cmp r0, #0x1
moveq r0, #0x2b
streqb r0, [r6, #-0x1]!
beq _020E00A4
cmp r0, #0x2
moveq r0, #0x20
streqb r0, [r6, #-0x1]!
_020E00A4:
mov r0, r6
add sp, sp, #0x18
ldmia sp!, {r3-r11,lr}
add sp, sp, #0x10
bx lr
.balign 4
_020E00B8: .word 0x000001FD
arm_func_end longlong2str
arm_func_start double2hex
double2hex: ; 0x020E00BC
stmdb sp!, {r0-r3}
stmdb sp!, {r3-r10,lr}
sub sp, sp, #0x44
ldr r7, [sp, #0x80]
ldr r0, _020E056C ; =0x000001FD
mov r8, r2
cmp r7, r0
ldrb r6, [sp, #0x79]
ldrb r5, [sp, #0x77]
ldrb r4, [sp, #0x75]
ldr r1, [sp, #0x68]
ldr r2, [sp, #0x6c]
addgt sp, sp, #0x44
movgt r0, #0x0
ldmgtia sp!, {r3-r10,lr}
addgt sp, sp, #0x10
bxgt lr
mov r10, #0x0
mov r9, #0x20
add r0, sp, #0x8
add r3, sp, #0xc
strb r10, [sp, #0x8]
strh r9, [sp, #0xa]
bl __num2dec_internal2
ldr r0, [sp, #0x68]
ldr r1, [sp, #0x6c]
bl fabs
mov r2, r0
mov r0, r10
mov r3, r1
mov r1, r0
bl _deq
bne _020E0188
ldr r3, _020E0570 ; =UNK_02106DA0
sub r0, r8, #0x6
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
add sp, sp, #0x44
strb r2, [r8, #-0x6]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldrb r2, [r3, #0x4]
ldrb r1, [r3, #0x5]
strb r2, [r0, #0x4]
strb r1, [r0, #0x5]
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
_020E0188:
ldrb r0, [sp, #0x11]
cmp r0, #0x49
bne _020E0298
ldrsb r0, [sp, #0xc]
cmp r0, #0x0
beq _020E0224
cmp r6, #0x41
sub r0, r8, #0x5
bne _020E01E8
ldr r3, _020E0574 ; =UNK_02106DA8
add sp, sp, #0x44
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldrb r1, [r3, #0x4]
strb r1, [r0, #0x4]
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
_020E01E8:
ldr r3, _020E0578 ; =UNK_02106DB0
add sp, sp, #0x44
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldrb r1, [r3, #0x4]
strb r1, [r0, #0x4]
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
_020E0224:
cmp r6, #0x41
sub r0, r8, #0x4
bne _020E0264
ldr r3, _020E057C ; =UNK_02106DB8
add sp, sp, #0x44
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
_020E0264:
ldr r3, _020E0580 ; =UNK_02106DBC
add sp, sp, #0x44
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
_020E0298:
cmp r0, #0x4e
bne _020E03A4
ldrsb r0, [sp, #0xc]
cmp r0, #0x0
beq _020E0330
cmp r6, #0x41
sub r0, r8, #0x5
bne _020E02F4
ldr r3, _020E0584 ; =UNK_02106DC0
add sp, sp, #0x44
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldrb r1, [r3, #0x4]
strb r1, [r0, #0x4]
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
_020E02F4:
ldr r3, _020E0588 ; =UNK_02106DC8
add sp, sp, #0x44
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldrb r1, [r3, #0x4]
strb r1, [r0, #0x4]
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
_020E0330:
cmp r6, #0x41
sub r0, r8, #0x4
bne _020E0370
ldr r3, _020E058C ; =UNK_02106DD0
add sp, sp, #0x44
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
_020E0370:
ldr r3, _020E0590 ; =UNK_02106DD4
add sp, sp, #0x44
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
_020E03A4:
mov r3, r10
mov r1, #0x1
mov r0, #0x64
add r9, 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]
strb r0, [sp, #0x39]
_020E03D4:
rsb r1, r3, #0x7
ldrsb r2, [r9, r3]
ldrsb r0, [r9, r1]
strb r0, [r9, r3]
add r3, r3, #0x1
strb r2, [r9, r1]
cmp r3, #0x4
blt _020E03D4
ldrb r0, [sp, #0x69]
ldrb r1, [sp, #0x68]
ldr sb, _020E0594 ; =0x000007FF
mov r0, r0, lsl #0x11
orr r1, r0, r1, lsl #0x19
add r0, sp, #0x34
and lr, r9, r1, lsr #0x15
sub r12, sp, #0x8
ldmia r0, {r0-r3}
stmia r12, {r0-r3}
rsb r0, r9, #0x400
mov r1, r8
add r0, lr, r0
ldmia r12, {r2-r3}
bl long2str
cmp r6, #0x61
moveq r1, #0x70
movne r1, #0x50
strb r1, [r0, #-0x1]!
mov r1, r7, lsl #0x2
mov lr, r7
cmp r7, #0x1
add r8, r1, #0xb
add r12, sp, #0x68
blt _020E04E4
mov r9, #0x30
_020E045C:
cmp r8, #0x40
bge _020E04CC
ldrb r1, [r12, r8, asr #0x3]
and r2, r8, #0x7
rsb r3, r2, #0x7
mov r2, r1, asr r3
sub r10, r8, #0x4
bic r1, r8, #0x7
bic r10, r10, #0x7
cmp r1, r10
add r10, r12, r8, asr #0x3
and r1, r2, #0xff
beq _020E04A0
ldrb r2, [r10, #-0x1]
mov r2, r2, lsl #0x8
orr r1, r1, r2, asr r3
and r1, r1, #0xff
_020E04A0:
and r1, r1, #0xf
cmp r1, #0xa
addcc r1, r1, #0x30
andcc r1, r1, #0xff
blo _020E04D0
cmp r6, #0x61
addeq r1, r1, #0x57
andeq r1, r1, #0xff
addne r1, r1, #0x37
andne r1, r1, #0xff
b _020E04D0
_020E04CC:
mov r1, r9
_020E04D0:
sub lr, lr, #0x1
cmp lr, #0x1
strb r1, [r0, #-0x1]!
sub r8, r8, #0x4
bge _020E045C
_020E04E4:
cmp r7, #0x0
cmpeq r5, #0x0
movne r1, #0x2e
strneb r1, [r0, #-0x1]!
mov r1, #0x31
strb r1, [r0, #-0x1]
cmp r6, #0x61
moveq r1, #0x78
movne r1, #0x58
strb r1, [r0, #-0x2]!
mov r1, #0x30
strb r1, [r0, #-0x1]!
ldrsb r1, [sp, #0xc]
cmp r1, #0x0
movne r1, #0x2d
strneb r1, [r0, #-0x1]!
addne sp, sp, #0x44
ldmneia sp!, {r3-r10,lr}
addne sp, sp, #0x10
bxne lr
cmp r4, #0x1
moveq r1, #0x2b
streqb r1, [r0, #-0x1]!
addeq sp, sp, #0x44
ldmeqia sp!, {r3-r10,lr}
addeq sp, sp, #0x10
bxeq lr
cmp r4, #0x2
moveq r1, #0x20
streqb r1, [r0, #-0x1]!
add sp, sp, #0x44
ldmia sp!, {r3-r10,lr}
add sp, sp, #0x10
bx lr
.balign 4
_020E056C: .word 0x000001FD
_020E0570: .word UNK_02106DA0
_020E0574: .word UNK_02106DA8
_020E0578: .word UNK_02106DB0
_020E057C: .word UNK_02106DB8
_020E0580: .word UNK_02106DBC
_020E0584: .word UNK_02106DC0
_020E0588: .word UNK_02106DC8
_020E058C: .word UNK_02106DD0
_020E0590: .word UNK_02106DD4
_020E0594: .word 0x000007FF
arm_func_end double2hex
arm_func_start round_decimal
round_decimal: ; 0x020E0598
stmdb sp!, {r4,lr}
cmp r1, #0x0
bge _020E05C0
_020E05A4:
mov r1, #0x0
strh r1, [r0, #0x2]
mov r1, #0x1
strb r1, [r0, #0x4]
mov r1, #0x30
strb r1, [r0, #0x5]
ldmia sp!, {r4,pc}
_020E05C0:
ldrb lr, [r0, #0x4]
cmp r1, lr
ldmgeia sp!, {r4,pc}
add r12, r0, #0x5
add r2, r12, r1
add r2, r2, #0x1
ldrsb r3, [r2, #-0x1]!
sub r3, r3, #0x30
mov r3, r3, lsl #0x18
mov r3, r3, asr #0x18
cmp r3, #0x5
bne _020E0620
add r12, r12, lr
_020E05F4:
sub r12, r12, #0x1
cmp r12, r2
bls _020E060C
ldrsb r3, [r12, #0x0]
cmp r3, #0x30
beq _020E05F4
_020E060C:
cmp r12, r2
ldreqsb r3, [r2, #-0x1]
andeq r4, r3, #0x1
movne r4, #0x1
b _020E0628
_020E0620:
movgt r4, #0x1
movle r4, #0x0
_020E0628:
cmp r1, #0x0
beq _020E0684
mov r12, #0x0
mov lr, #0x1
_020E0638:
ldrsb r3, [r2, #-0x1]!
sub r3, r3, #0x30
add r3, r3, r4
mov r3, r3, lsl #0x18
mov r3, r3, asr #0x18
cmp r3, #0x9
movgt r4, lr
movle r4, r12
cmp r4, #0x0
bne _020E0668
cmp r3, #0x0
bne _020E0670
_020E0668:
sub r1, r1, #0x1
b _020E067C
_020E0670:
add r3, r3, #0x30
strb r3, [r2, #0x0]
b _020E0684
_020E067C:
cmp r1, #0x0
bne _020E0638
_020E0684:
cmp r4, #0x0
beq _020E06AC
ldrsh r3, [r0, #0x2]
mov r2, #0x1
mov r1, #0x31
add r3, r3, #0x1
strh r3, [r0, #0x2]
strb r2, [r0, #0x4]
strb r1, [r0, #0x5]
ldmia sp!, {r4,pc}
_020E06AC:
cmp r1, #0x0
beq _020E05A4
strb r1, [r0, #0x4]
ldmia sp!, {r4,pc}
arm_func_end round_decimal
arm_func_start float2str
float2str: ; 0x020E06BC
stmdb sp!, {r0-r3}
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x2c
ldr r7, [sp, #0x68]
ldr r3, _020E0DF4 ; =0x000001FD
ldrb r6, [sp, #0x61]
ldrb r5, [sp, #0x5f]
ldrb r4, [sp, #0x5d]
cmp r7, r3
mov r10, r0
mov r8, r1
mov r9, r2
addgt sp, sp, #0x2c
movgt r0, #0x0
ldmgtia sp!, {r4-r11,lr}
addgt sp, sp, #0x10
bxgt lr
mov r12, #0x0
mov r11, #0x20
add r0, sp, #0x0
add r3, sp, #0x4
mov r1, r10
mov r2, r8
strb r12, [sp, #0x0]
strh r11, [sp, #0x2]
bl __num2dec_internal2
ldrb r0, [sp, #0x8]
add r1, sp, #0x9
add r0, r1, r0
b _020E074C
_020E0734:
ldrb r2, [sp, #0x8]
ldrsh r1, [sp, #0x6]
sub r2, r2, #0x1
add r1, r1, #0x1
strb r2, [sp, #0x8]
strh r1, [sp, #0x6]
_020E074C:
ldrb r1, [sp, #0x8]
cmp r1, #0x1
bls _020E0764
ldrsb r1, [r0, #-0x1]!
cmp r1, #0x30
beq _020E0734
_020E0764:
ldrb r0, [sp, #0x9]
cmp r0, #0x30
beq _020E0784
cmp r0, #0x49
beq _020E0790
cmp r0, #0x4e
beq _020E08F0
b _020E0A44
_020E0784:
mov r0, #0x0
strh r0, [sp, #0x6]
b _020E0A44
_020E0790:
mov r2, #0x0
mov r0, r10
mov r1, r8
mov r3, r2
bl _dls
bhs _020E0854
cmp r6, #0x0
sub r0, r9, #0x5
blt _020E07BC
cmp r6, #0x80
blt _020E07C4
_020E07BC:
mov r1, #0x0
b _020E07D4
_020E07C4:
ldr r1, _020E0DF8 ; =__msl_digit
mov r2, r6, lsl #0x1
ldrh r1, [r1, r2]
and r1, r1, #0x200
_020E07D4:
cmp r1, #0x0
beq _020E0818
ldr r3, _020E0DFC ; =UNK_02106DA8
add sp, sp, #0x2c
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldrb r1, [r3, #0x4]
strb r1, [r0, #0x4]
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E0818:
ldr r3, _020E0E00 ; =UNK_02106DB0
add sp, sp, #0x2c
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldrb r1, [r3, #0x4]
strb r1, [r0, #0x4]
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E0854:
cmp r6, #0x0
sub r0, r9, #0x4
blt _020E0868
cmp r6, #0x80
blt _020E0870
_020E0868:
mov r1, #0x0
b _020E0880
_020E0870:
ldr r1, _020E0DF8 ; =__msl_digit
mov r2, r6, lsl #0x1
ldrh r1, [r1, r2]
and r1, r1, #0x200
_020E0880:
cmp r1, #0x0
beq _020E08BC
ldr r3, _020E0E04 ; =UNK_02106DB8
add sp, sp, #0x2c
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E08BC:
ldr r3, _020E0E08 ; =UNK_02106DBC
add sp, sp, #0x2c
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E08F0:
ldrsb r0, [sp, #0x4]
cmp r0, #0x0
beq _020E09A8
cmp r6, #0x0
sub r0, r9, #0x5
blt _020E0910
cmp r6, #0x80
blt _020E0918
_020E0910:
mov r1, #0x0
b _020E0928
_020E0918:
ldr r1, _020E0DF8 ; =__msl_digit
mov r2, r6, lsl #0x1
ldrh r1, [r1, r2]
and r1, r1, #0x200
_020E0928:
cmp r1, #0x0
beq _020E096C
ldr r3, _020E0E0C ; =UNK_02106DC0
add sp, sp, #0x2c
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldrb r1, [r3, #0x4]
strb r1, [r0, #0x4]
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E096C:
ldr r3, _020E0E10 ; =UNK_02106DC8
add sp, sp, #0x2c
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldrb r1, [r3, #0x4]
strb r1, [r0, #0x4]
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E09A8:
cmp r6, #0x0
sub r0, r9, #0x4
blt _020E09BC
cmp r6, #0x80
blt _020E09C4
_020E09BC:
mov r1, #0x0
b _020E09D4
_020E09C4:
ldr r1, _020E0DF8 ; =__msl_digit
mov r2, r6, lsl #0x1
ldrh r1, [r1, r2]
and r1, r1, #0x200
_020E09D4:
cmp r1, #0x0
beq _020E0A10
ldr r3, _020E0E14 ; =UNK_02106DD0
add sp, sp, #0x2c
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E0A10:
ldr r3, _020E0E18 ; =UNK_02106DD4
add sp, sp, #0x2c
ldrb r2, [r3, #0x0]
ldrb r1, [r3, #0x1]
strb r2, [r0, #0x0]
strb r1, [r0, #0x1]
ldrb r2, [r3, #0x2]
ldrb r1, [r3, #0x3]
strb r2, [r0, #0x2]
strb r1, [r0, #0x3]
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E0A44:
ldrb r0, [sp, #0x8]
ldrsh r1, [sp, #0x6]
sub r8, r9, #0x1
sub r0, r0, #0x1
add r0, r1, r0
strh r0, [sp, #0x6]
mov r0, #0x0
strb r0, [r8, #0x0]
cmp r6, #0x65
bgt _020E0A98
bge _020E0B24
cmp r6, #0x47
bgt _020E0DE0
cmp r6, #0x45
blt _020E0DE0
beq _020E0B24
cmp r6, #0x46
beq _020E0C6C
cmp r6, #0x47
beq _020E0AB0
b _020E0DE0
_020E0A98:
cmp r6, #0x66
bgt _020E0AA8
beq _020E0C6C
b _020E0DE0
_020E0AA8:
cmp r6, #0x67
bne _020E0DE0
_020E0AB0:
ldrb r0, [sp, #0x8]
cmp r0, r7
ble _020E0AC8
add r0, sp, #0x4
mov r1, r7
bl round_decimal
_020E0AC8:
ldrsh r2, [sp, #0x6]
mvn r0, #0x3
cmp r2, r0
blt _020E0AE0
cmp r2, r7
blt _020E0B00
_020E0AE0:
cmp r5, #0x0
ldreqb r0, [sp, #0x8]
subne r7, r7, #0x1
subeq r7, r0, #0x1
cmp r6, #0x67
moveq r6, #0x65
movne r6, #0x45
b _020E0B24
_020E0B00:
cmp r5, #0x0
addne r0, r2, #0x1
subne r7, r7, r0
bne _020E0C6C
ldrb r1, [sp, #0x8]
add r0, r2, #0x1
subs r7, r1, r0
movmi r7, #0x0
b _020E0C6C
_020E0B24:
ldrb r0, [sp, #0x8]
add r1, r7, #0x1
cmp r0, r1
ble _020E0B3C
add r0, sp, #0x4
bl round_decimal
_020E0B3C:
ldrsh lr, [sp, #0x6]
mov r11, #0x2b
mov r10, #0x0
cmp lr, #0x0
rsblt lr, lr, #0x0
movlt r11, #0x2d
ldr r3, _020E0E1C ; =0x66666667
mov r0, #0xa
b _020E0B90
_020E0B60:
mov r1, lr, lsr #0x1f
smull r2, r12, r3, lr
add r12, r1, r12, asr #0x2
smull r1, r2, r0, r12
sub r12, lr, r1
add r1, r12, #0x30
strb r1, [r8, #-0x1]!
mov r2, lr
smull r1, lr, r3, r2
mov r1, r2, lsr #0x1f
add lr, r1, lr, asr #0x2
add r10, r10, #0x1
_020E0B90:
cmp lr, #0x0
bne _020E0B60
cmp r10, #0x2
blt _020E0B60
strb r11, [r8, #-0x1]
strb r6, [r8, #-0x2]!
sub r1, r9, r8
ldr r0, _020E0DF4 ; =0x000001FD
add r1, r7, r1
cmp r1, r0
addgt sp, sp, #0x2c
movgt r0, #0x0
ldmgtia sp!, {r4-r11,lr}
addgt sp, sp, #0x10
bxgt lr
ldrb r1, [sp, #0x8]
add r0, r7, #0x1
cmp r1, r0
bge _020E0BFC
add r0, r7, #0x2
sub r0, r0, r1
subs r1, r0, #0x1
beq _020E0BFC
mov r0, #0x30
_020E0BF0:
strb r0, [r8, #-0x1]!
subs r1, r1, #0x1
bne _020E0BF0
_020E0BFC:
ldrb r1, [sp, #0x8]
add r0, sp, #0x9
add r2, r0, r1
subs r1, r1, #0x1
beq _020E0C20
_020E0C10:
ldrsb r0, [r2, #-0x1]!
subs r1, r1, #0x1
strb r0, [r8, #-0x1]!
bne _020E0C10
_020E0C20:
cmp r7, #0x0
cmpeq r5, #0x0
movne r0, #0x2e
strneb r0, [r8, #-0x1]!
ldrb r0, [sp, #0x9]
strb r0, [r8, #-0x1]!
ldrsb r0, [sp, #0x4]
cmp r0, #0x0
movne r0, #0x2d
strneb r0, [r8, #-0x1]!
bne _020E0DE0
cmp r4, #0x1
moveq r0, #0x2b
streqb r0, [r8, #-0x1]!
beq _020E0DE0
cmp r4, #0x2
moveq r0, #0x20
streqb r0, [r8, #-0x1]!
b _020E0DE0
_020E0C6C:
ldrsh r3, [sp, #0x6]
ldrb r2, [sp, #0x8]
sub r0, r2, r3
subs r1, r0, #0x1
movmi r1, #0x0
cmp r1, r7
ble _020E0CAC
sub r1, r1, r7
add r0, sp, #0x4
sub r1, r2, r1
bl round_decimal
ldrsh r3, [sp, #0x6]
ldrb r2, [sp, #0x8]
sub r0, r2, r3
subs r1, r0, #0x1
movmi r1, #0x0
_020E0CAC:
adds r0, r3, #0x1
movmi r0, #0x0
ldr r3, _020E0DF4 ; =0x000001FD
add r6, r0, r1
cmp r6, r3
addgt sp, sp, #0x2c
movgt r0, #0x0
ldmgtia sp!, {r4-r11,lr}
addgt sp, sp, #0x10
bxgt lr
add r3, sp, #0x9
sub r6, r7, r1
cmp r6, #0x0
add r2, r3, r2
mov r9, #0x0
ble _020E0D00
mov r3, #0x30
_020E0CF0:
add r9, r9, #0x1
cmp r9, r6
strb r3, [r8, #-0x1]!
blt _020E0CF0
_020E0D00:
mov r6, #0x0
b _020E0D14
_020E0D08:
ldrsb r3, [r2, #-0x1]!
add r6, r6, #0x1
strb r3, [r8, #-0x1]!
_020E0D14:
cmp r6, r1
ldrltb r3, [sp, #0x8]
cmplt r6, r3
blt _020E0D08
cmp r6, r1
bge _020E0D40
mov r3, #0x30
_020E0D30:
add r6, r6, #0x1
cmp r6, r1
strb r3, [r8, #-0x1]!
blt _020E0D30
_020E0D40:
cmp r7, #0x0
cmpeq r5, #0x0
movne r1, #0x2e
strneb r1, [r8, #-0x1]!
cmp r0, #0x0
beq _020E0DA8
ldrb r1, [sp, #0x8]
mov r5, #0x0
sub r1, r0, r1
cmp r1, #0x0
ble _020E0D88
mov r3, #0x30
_020E0D70:
strb r3, [r8, #-0x1]!
ldrb r1, [sp, #0x8]
add r5, r5, #0x1
sub r1, r0, r1
cmp r5, r1
blt _020E0D70
_020E0D88:
cmp r5, r0
bge _020E0DB0
_020E0D90:
ldrsb r1, [r2, #-0x1]!
add r5, r5, #0x1
cmp r5, r0
strb r1, [r8, #-0x1]!
blt _020E0D90
b _020E0DB0
_020E0DA8:
mov r0, #0x30
strb r0, [r8, #-0x1]!
_020E0DB0:
ldrsb r0, [sp, #0x4]
cmp r0, #0x0
movne r0, #0x2d
strneb r0, [r8, #-0x1]!
bne _020E0DE0
cmp r4, #0x1
moveq r0, #0x2b
streqb r0, [r8, #-0x1]!
beq _020E0DE0
cmp r4, #0x2
moveq r0, #0x20
streqb r0, [r8, #-0x1]!
_020E0DE0:
mov r0, r8
add sp, sp, #0x2c
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
.balign 4
_020E0DF4: .word 0x000001FD
_020E0DF8: .word __msl_digit
_020E0DFC: .word UNK_02106DA8
_020E0E00: .word UNK_02106DB0
_020E0E04: .word UNK_02106DB8
_020E0E08: .word UNK_02106DBC
_020E0E0C: .word UNK_02106DC0
_020E0E10: .word UNK_02106DC8
_020E0E14: .word UNK_02106DD0
_020E0E18: .word UNK_02106DD4
_020E0E1C: .word 0x66666667
arm_func_end float2str
arm_func_start __pformatter
__pformatter:
stmdb sp!, {r0-r3}
stmdb sp!, {r4-r11,lr}
sub sp, sp, #0x22c
mov r3, #0x20
mov r11, r2
strb r3, [sp, #0x19]
ldrsb r2, [r11, #0x0]
mov r9, r0
mov r8, r1
cmp r2, #0x0
mov r10, #0x0
beq _020E1628
_020E0E50:
mov r0, r11
mov r1, #0x25
bl strchr
str r0, [sp, #0xc]
cmp r0, #0x0
bne _020E0EA4
mov r0, r11
bl strlen
movs r2, r0
add r10, r10, r2
beq _020E1628
mov r0, r8
mov r1, r11
blx r9
cmp r0, #0x0
bne _020E1628
add sp, sp, #0x22c
mvn r0, #0x0
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E0EA4:
subs r2, r0, r11
add r10, r10, r2
beq _020E0ED4
mov r0, r8
mov r1, r11
blx r9
cmp r0, #0x0
addeq sp, sp, #0x22c
mvneq r0, #0x0
ldmeqia sp!, {r4-r11,lr}
addeq sp, sp, #0x10
bxeq lr
_020E0ED4:
ldr r0, [sp, #0xc]
add r1, sp, #0x25c
add r2, sp, #0x1c
bl parse_format
ldrb r1, [sp, #0x21]
mov r11, r0
cmp r1, #0x61
bgt _020E0F40
bge _020E12A4
cmp r1, #0x47
bgt _020E0F34
subs r0, r1, #0x41
addpl pc, pc, r0, lsl #0x2
b _020E0F28
b _020E12A4 ; case 65
b _020E148C ; case 66
b _020E148C ; case 67
b _020E148C ; case 68
b _020E123C ; case 69
b _020E123C ; case 70
b _020E123C ; case 71
_020E0F28:
cmp r1, #0x25
beq _020E1478
b _020E148C
_020E0F34:
cmp r1, #0x58
beq _020E1100
b _020E148C
_020E0F40:
cmp r1, #0x75
bgt _020E0FA8
subs r0, r1, #0x64
addpl pc, pc, r0, lsl #0x2
b _020E0F9C
b _020E0FC0 ; case 100
b _020E123C ; case 101
b _020E123C ; case 102
b _020E123C ; case 103
b _020E148C ; case 104
b _020E0FC0 ; case 105
b _020E148C ; case 106
b _020E148C ; case 107
b _020E148C ; case 108
b _020E148C ; case 109
b _020E13CC ; case 110
b _020E1100 ; case 111
b _020E148C ; case 112
b _020E148C ; case 113
b _020E148C ; case 114
b _020E130C ; case 115
b _020E148C ; case 116
b _020E1100 ; case 117
_020E0F9C:
cmp r1, #0x63
beq _020E1458
b _020E148C
_020E0FA8:
cmp r1, #0x78
bgt _020E0FB8
beq _020E1100
b _020E148C
_020E0FB8:
cmp r1, #0xff
b _020E148C
_020E0FC0:
ldrb r0, [sp, #0x20]
cmp r0, #0x3
bne _020E0FE0
ldr r1, [sp, #0x25c]
add r1, r1, #0x4
str r1, [sp, #0x25c]
ldr r5, [r1, #-0x4]
b _020E1078
_020E0FE0:
cmp r0, #0x4
bne _020E1008
ldr r1, [sp, #0x25c]
add r2, r1, #0x8
str r2, [sp, #0x25c]
ldr r1, [r2, #-0x8]
str r1, [sp, #0x10]
ldr r1, [r2, #-0x4]
str r1, [sp, #0x14]
b _020E1078
_020E1008:
cmp r0, #0x6
bne _020E1030
ldr r1, [sp, #0x25c]
add r2, r1, #0x8
str r2, [sp, #0x25c]
ldr r1, [r2, #-0x8]
str r1, [sp, #0x10]
ldr r1, [r2, #-0x4]
str r1, [sp, #0x14]
b _020E1078
_020E1030:
cmp r0, #0x7
bne _020E104C
ldr r1, [sp, #0x25c]
add r1, r1, #0x4
str r1, [sp, #0x25c]
ldr r5, [r1, #-0x4]
b _020E1078
_020E104C:
cmp r0, #0x8
bne _020E1068
ldr r1, [sp, #0x25c]
add r1, r1, #0x4
str r1, [sp, #0x25c]
ldr r5, [r1, #-0x4]
b _020E1078
_020E1068:
ldr r1, [sp, #0x25c]
add r1, r1, #0x4
str r1, [sp, #0x25c]
ldr r5, [r1, #-0x4]
_020E1078:
cmp r0, #0x2
moveq r1, r5, lsl #0x10
moveq r5, r1, asr #0x10
cmp r0, #0x1
moveq r1, r5, lsl #0x18
moveq r5, r1, asr #0x18
cmp r0, #0x4
cmpne r0, #0x6
add r0, sp, #0x1c
bne _020E10CC
sub r4, sp, #0x4
ldmia r0, {r0-r3}
stmia r4, {r0-r3}
ldr r3, [r4, #0x0]
ldr r0, [sp, #0x10]
ldr r1, [sp, #0x14]
add r2, sp, #0x22c
bl longlong2str
movs r7, r0
beq _020E148C
b _020E10F0
_020E10CC:
sub r4, sp, #0x8
ldmia r0, {r0-r3}
stmia r4, {r0-r3}
add r1, sp, #0x22c
mov r0, r5
ldmia r4, {r2-r3}
bl long2str
movs r7, r0
beq _020E148C
_020E10F0:
add r0, sp, #0x200
add r0, r0, #0x2b
sub r6, r0, r7
b _020E14D8
_020E1100:
ldrb r0, [sp, #0x20]
cmp r0, #0x3
bne _020E1120
ldr r1, [sp, #0x25c]
add r1, r1, #0x4
str r1, [sp, #0x25c]
ldr r5, [r1, #-0x4]
b _020E11B8
_020E1120:
cmp r0, #0x4
bne _020E1148
ldr r1, [sp, #0x25c]
add r2, r1, #0x8
str r2, [sp, #0x25c]
ldr r1, [r2, #-0x8]
str r1, [sp, #0x10]
ldr r1, [r2, #-0x4]
str r1, [sp, #0x14]
b _020E11B8
_020E1148:
cmp r0, #0x6
bne _020E1170
ldr r1, [sp, #0x25c]
add r2, r1, #0x8
str r2, [sp, #0x25c]
ldr r1, [r2, #-0x8]
str r1, [sp, #0x10]
ldr r1, [r2, #-0x4]
str r1, [sp, #0x14]
b _020E11B8
_020E1170:
cmp r0, #0x7
bne _020E118C
ldr r1, [sp, #0x25c]
add r1, r1, #0x4
str r1, [sp, #0x25c]
ldr r5, [r1, #-0x4]
b _020E11B8
_020E118C:
cmp r0, #0x8
bne _020E11A8
ldr r1, [sp, #0x25c]
add r1, r1, #0x4
str r1, [sp, #0x25c]
ldr r5, [r1, #-0x4]
b _020E11B8
_020E11A8:
ldr r1, [sp, #0x25c]
add r1, r1, #0x4
str r1, [sp, #0x25c]
ldr r5, [r1, #-0x4]
_020E11B8:
cmp r0, #0x2
moveq r1, r5, lsl #0x10
moveq r5, r1, lsr #0x10
cmp r0, #0x1
andeq r5, r5, #0xff
cmp r0, #0x4
cmpne r0, #0x6
add r0, sp, #0x1c
bne _020E1208
sub r4, sp, #0x4
ldmia r0, {r0-r3}
stmia r4, {r0-r3}
ldr r3, [r4, #0x0]
ldr r0, [sp, #0x10]
ldr r1, [sp, #0x14]
add r2, sp, #0x22c
bl longlong2str
movs r7, r0
beq _020E148C
b _020E122C
_020E1208:
sub r4, sp, #0x8
ldmia r0, {r0-r3}
stmia r4, {r0-r3}
add r1, sp, #0x22c
mov r0, r5
ldmia r4, {r2-r3}
bl long2str
movs r7, r0
beq _020E148C
_020E122C:
add r0, sp, #0x200
add r0, r0, #0x2b
sub r6, r0, r7
b _020E14D8
_020E123C:
ldrb r0, [sp, #0x20]
cmp r0, #0x9
ldrne r0, [sp, #0x25c]
addne r0, r0, #0x8
strne r0, [sp, #0x25c]
bne _020E1260
ldr r0, [sp, #0x25c]
add r0, r0, #0x8
str r0, [sp, #0x25c]
_020E1260:
ldr r7, [r0, #-0x8]
ldr r6, [r0, #-0x4]
add r0, sp, #0x1c
sub r4, sp, #0x4
ldmia r0, {r0-r3}
stmia r4, {r0-r3}
ldr r3, [r4, #0x0]
mov r0, r7
mov r1, r6
add r2, sp, #0x22c
bl float2str
movs r7, r0
beq _020E148C
add r0, sp, #0x200
add r0, r0, #0x2b
sub r6, r0, r7
b _020E14D8
_020E12A4:
ldrb r0, [sp, #0x20]
cmp r0, #0x9
ldrne r0, [sp, #0x25c]
addne r0, r0, #0x8
strne r0, [sp, #0x25c]
bne _020E12C8
ldr r0, [sp, #0x25c]
add r0, r0, #0x8
str r0, [sp, #0x25c]
_020E12C8:
ldr r7, [r0, #-0x8]
ldr r6, [r0, #-0x4]
add r0, sp, #0x1c
sub r4, sp, #0x4
ldmia r0, {r0-r3}
stmia r4, {r0-r3}
ldr r3, [r4, #0x0]
mov r0, r7
mov r1, r6
add r2, sp, #0x22c
bl double2hex
movs r7, r0
beq _020E148C
add r0, sp, #0x200
add r0, r0, #0x2b
sub r6, r0, r7
b _020E14D8
_020E130C:
ldrb r0, [sp, #0x20]
cmp r0, #0x5
bne _020E134C
ldr r0, [sp, #0x25c]
mov r2, #0x200
add r0, r0, #0x4
str r0, [sp, #0x25c]
ldr r1, [r0, #-0x4]
add r0, sp, #0x2c
cmp r1, #0x0
ldreq r1, _020E163C ; =UNK_02106DD8
bl wcstombs
cmp r0, #0x0
blt _020E148C
add r7, sp, #0x2c
b _020E135C
_020E134C:
ldr r0, [sp, #0x25c]
add r0, r0, #0x4
str r0, [sp, #0x25c]
ldr r7, [r0, #-0x4]
_020E135C:
ldrb r0, [sp, #0x1f]
cmp r7, #0x0
ldreq r7, _020E1640 ; =UNK_02106DDC
cmp r0, #0x0
beq _020E1390
ldrb r0, [sp, #0x1e]
ldrb r6, [r7], #0x1
cmp r0, #0x0
beq _020E14D8
ldr r0, [sp, #0x28]
cmp r6, r0
movgt r6, r0
b _020E14D8
_020E1390:
ldrb r0, [sp, #0x1e]
cmp r0, #0x0
beq _020E13BC
ldr r6, [sp, #0x28]
mov r0, r7
mov r2, r6
mov r1, #0x0
bl memchr
cmp r0, #0x0
subne r6, r0, r7
b _020E14D8
_020E13BC:
mov r0, r7
bl strlen
mov r6, r0
b _020E14D8
_020E13CC:
ldr r1, [sp, #0x25c]
ldrb r0, [sp, #0x20]
add r1, r1, #0x4
str r1, [sp, #0x25c]
ldr r1, [r1, #-0x4]
cmp r0, #0x8
addls pc, pc, r0, lsl #0x2
b _020E161C
b _020E1410 ; case 0
b _020E161C ; case 1
b _020E1418 ; case 2
b _020E1420 ; case 3
b _020E1448 ; case 4
b _020E161C ; case 5
b _020E1428 ; case 6
b _020E1438 ; case 7
b _020E1440 ; case 8
_020E1410:
str r10, [r1, #0x0]
b _020E161C
_020E1418:
strh r10, [r1, #0x0]
b _020E161C
_020E1420:
str r10, [r1, #0x0]
b _020E161C
_020E1428:
str r10, [r1, #0x0]
mov r0, r10, asr #0x1f
str r0, [r1, #0x4]
b _020E161C
_020E1438:
str r10, [r1, #0x0]
b _020E161C
_020E1440:
str r10, [r1, #0x0]
b _020E161C
_020E1448:
str r10, [r1, #0x0]
mov r0, r10, asr #0x1f
str r0, [r1, #0x4]
b _020E161C
_020E1458:
ldr r0, [sp, #0x25c]
add r7, sp, #0x2c
add r0, r0, #0x4
str r0, [sp, #0x25c]
ldr r0, [r0, #-0x4]
mov r6, #0x1
strb r0, [sp, #0x2c]
b _020E14D8
_020E1478:
mov r0, #0x25
strb r0, [sp, #0x2c]
add r7, sp, #0x2c
mov r6, #0x1
b _020E14D8
_020E148C:
ldr r0, [sp, #0xc]
bl strlen
movs r4, r0
beq _020E14C4
ldr r1, [sp, #0xc]
mov r0, r8
mov r2, r4
blx r9
cmp r0, #0x0
addeq sp, sp, #0x22c
mvneq r0, #0x0
ldmeqia sp!, {r4-r11,lr}
addeq sp, sp, #0x10
bxeq lr
_020E14C4:
add sp, sp, #0x22c
add r0, r10, r4
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
_020E14D8:
ldrb r0, [sp, #0x1c]
mov r4, r6
cmp r0, #0x0
beq _020E158C
cmp r0, #0x2
moveq r0, #0x30
movne r0, #0x20
strb r0, [sp, #0x19]
ldrsb r0, [r7, #0x0]
cmp r0, #0x2b
cmpne r0, #0x2d
cmpne r0, #0x20
bne _020E1548
ldrsb r0, [sp, #0x19]
cmp r0, #0x30
bne _020E1548
mov r0, r8
mov r1, r7
mov r2, #0x1
blx r9
cmp r0, #0x0
addeq sp, sp, #0x22c
mvneq r0, #0x0
ldmeqia sp!, {r4-r11,lr}
addeq sp, sp, #0x10
bxeq lr
add r7, r7, #0x1
sub r6, r6, #0x1
_020E1548:
ldr r0, [sp, #0x24]
cmp r4, r0
bge _020E158C
_020E1554:
mov r0, r8
add r1, sp, #0x19
mov r2, #0x1
blx r9
cmp r0, #0x0
addeq sp, sp, #0x22c
mvneq r0, #0x0
ldmeqia sp!, {r4-r11,lr}
addeq sp, sp, #0x10
bxeq lr
ldr r0, [sp, #0x24]
add r4, r4, #0x1
cmp r4, r0
blt _020E1554
_020E158C:
cmp r6, #0x0
beq _020E15BC
mov r0, r8
mov r1, r7
mov r2, r6
blx r9
cmp r0, #0x0
addeq sp, sp, #0x22c
mvneq r0, #0x0
ldmeqia sp!, {r4-r11,lr}
addeq sp, sp, #0x10
bxeq lr
_020E15BC:
ldrb r0, [sp, #0x1c]
cmp r0, #0x0
bne _020E1618
ldr r0, [sp, #0x24]
cmp r4, r0
bge _020E1618
mov r6, #0x20
add r7, sp, #0x18
_020E15DC:
mov r0, r8
mov r1, r7
mov r2, #0x1
strb r6, [sp, #0x18]
blx r9
cmp r0, #0x0
addeq sp, sp, #0x22c
mvneq r0, #0x0
ldmeqia sp!, {r4-r11,lr}
addeq sp, sp, #0x10
bxeq lr
ldr r0, [sp, #0x24]
add r4, r4, #0x1
cmp r4, r0
blt _020E15DC
_020E1618:
add r10, r10, r4
_020E161C:
ldrsb r0, [r11, #0x0]
cmp r0, #0x0
bne _020E0E50
_020E1628:
mov r0, r10
add sp, sp, #0x22c
ldmia sp!, {r4-r11,lr}
add sp, sp, #0x10
bx lr
.balign 4
_020E163C: .word UNK_02106DD8
_020E1640: .word UNK_02106DDC
arm_func_end __pformatter
arm_func_start __FileWrite
__FileWrite: ; 0x020E1644
stmdb sp!, {r3-r5,lr}
mov r5, r0
mov r0, r1
mov r3, r5
mov r1, #0x1
mov r4, r2
bl __fwrite
cmp r4, r0
movne r5, #0x0
mov r0, r5
ldmia sp!, {r3-r5,pc}
arm_func_end __FileWrite
arm_func_start __StringWrite
__StringWrite: ; 0x020E1670
stmdb sp!, {r3-r5,lr}
mov r4, r0
ldr r3, [r4, #0x8]
mov r5, r2
ldr r2, [r4, #0x4]
add r0, r3, r5
cmp r0, r2
ldr r0, [r4, #0x0]
subhi r5, r2, r3
mov r2, r5
add r0, r0, r3
bl memcpy
ldr r1, [r4, #0x8]
mov r0, #0x1
add r1, r1, r5
str r1, [r4, #0x8]
ldmia sp!, {r3-r5,pc}
arm_func_end __StringWrite
arm_func_start printf
printf: ; 0x020E16B4
stmdb sp!, {r0-r3}
stmdb sp!, {r4,lr}
ldr r0, _020E17B4 ; =__files + 0x4C
mvn r1, #0x0
bl fwide
cmp r0, #0x0
mvnge r0, #0x0
ldmgeia sp!, {r4,lr}
addge sp, sp, #0x10
bxge lr
ldr r0, _020E17B8 ; =__cs + 0x48
bl OS_TryLockMutex
cmp r0, #0x0
bne _020E1710
ldr r0, _020E17BC ; =OSi_ThreadInfo
ldr r1, _020E17C0 ; =__cs_id
ldr r2, [r0, #0x4]
ldr r0, _020E17C4 ; =__cs_ref
ldr r3, [r2, #0x6c]
mov r2, #0x1
str r3, [r1, #0xc]
str r2, [r0, #0xc]
b _020E1768
_020E1710:
ldr r0, _020E17BC ; =OSi_ThreadInfo
ldr r1, _020E17C0 ; =__cs_id
ldr r0, [r0, #0x4]
ldr r1, [r1, #0xc]
ldr r0, [r0, #0x6c]
cmp r1, r0
bne _020E1740
ldr r0, _020E17C4 ; =__cs_ref
ldr r1, [r0, #0xc]
add r1, r1, #0x1
str r1, [r0, #0xc]
b _020E1768
_020E1740:
ldr r0, _020E17B8 ; =__cs + 0x48
bl OS_LockMutex
ldr r0, _020E17BC ; =OSi_ThreadInfo
ldr r1, _020E17C0 ; =__cs_id
ldr r2, [r0, #0x4]
ldr r0, _020E17C4 ; =__cs_ref
ldr r3, [r2, #0x6c]
mov r2, #0x1
str r3, [r1, #0xc]
str r2, [r0, #0xc]
_020E1768:
add r0, sp, #0x8
bic r3, r0, #0x3
ldr r2, [sp, #0x8]
ldr r0, _020E17C8 ; =__FileWrite
ldr r1, _020E17B4 ; =__files + 0x4C
add r3, r3, #0x4
bl __pformatter
ldr r1, _020E17C4 ; =__cs_ref
mov r4, r0
ldr r0, [r1, #0xc]
subs r0, r0, #0x1
str r0, [r1, #0xc]
bne _020E17A4
ldr r0, _020E17B8 ; =__cs + 0x48
bl OS_UnlockMutex
_020E17A4:
mov r0, r4
ldmia sp!, {r4,lr}
add sp, sp, #0x10
bx lr
.balign 4
_020E17B4: .word __files + 0x4C
_020E17B8: .word __cs + 0x48
_020E17BC: .word OSi_ThreadInfo
_020E17C0: .word __cs_id
_020E17C4: .word __cs_ref
_020E17C8: .word __FileWrite
arm_func_end printf
arm_func_start vsnprintf
vsnprintf: ; 0x020E17CC
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0xc
mov r5, r0
mov r4, r1
mov r12, #0x0
ldr r0, _020E1830 ; =__StringWrite
add r1, sp, #0x0
str r5, [sp, #0x0]
str r4, [sp, #0x4]
str r12, [sp, #0x8]
bl __pformatter
cmp r5, #0x0
addeq sp, sp, #0xc
ldmeqia sp!, {r4-r5,pc}
cmp r0, r4
movcc r1, #0x0
addcc sp, sp, #0xc
strccb r1, [r5, r0]
ldmccia sp!, {r4-r5,pc}
cmp r4, #0x0
addne r1, r5, r4
movne r2, #0x0
strneb r2, [r1, #-0x1]
add sp, sp, #0xc
ldmia sp!, {r4-r5,pc}
.balign 4
_020E1830: .word __StringWrite
arm_func_end vsnprintf
arm_func_start snprintf
snprintf: ; 0x020E1834
stmdb sp!, {r0-r3}
stmdb sp!, {r3,lr}
add r3, sp, #0x10
bic r3, r3, #0x3
ldr r2, [sp, #0x10]
add r3, r3, #0x4
bl vsnprintf
ldmia sp!, {r3,lr}
add sp, sp, #0x10
bx lr
arm_func_end snprintf
arm_func_start sprintf
sprintf: ; 0x020E185C
stmdb sp!, {r0-r3}
stmdb sp!, {r3,lr}
add r1, sp, #0xc
bic r1, r1, #0x3
add r3, r1, #0x4
ldr r2, [sp, #0xc]
mvn r1, #0x0
bl vsnprintf
ldmia sp!, {r3,lr}
add sp, sp, #0x10
bx lr
arm_func_end sprintf
exception long2str, 589, 0x0090FF20
exception longlong2str, 737, 0x00A0FF20
exception double2hex, 1245, 0x00F07F20
exception float2str, 1893, 0x00C0FF20
exception __pformatter, 2084, UNK_020EC710
exception __FileWrite, 45, 0x00200300
exception __StringWrite, 69, 0x00200300
exception printf, 281, 0x00300120
exception vsnprintf, 105, 0x00300300
exception snprintf, 41, 0x00300020
exception sprintf, 45, 0x00300020
.section .exception,8
UNK_020EC710: ; 0x020EC710
.byte 0x20, 0xFF, 0x09, 0x60
.balign 8