split MSL_Common_strtoul.s

This commit is contained in:
red031000 2025-02-24 18:30:03 +00:00
parent b44fba0656
commit cb87c94469
No known key found for this signature in database
GPG Key ID: D27E50C050AE0CE1
13 changed files with 847 additions and 832 deletions

View File

@ -0,0 +1,742 @@
.include "asm/macros.inc"
.include "MSL_Common_strtoul.inc"
.include "global.inc"
.text
arm_func_start __strtoul
__strtoul: ; 0x020EAE78
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
ldr r4, [sp, #0x38]
movs sb, r0
ldr r0, [sp, #0x34]
str r4, [sp, #0x38]
mov r4, #0
str r0, [sp, #0x34]
ldr r0, [sp, #0x38]
str r1, [sp]
str r4, [r0]
mov r0, r4
str r0, [sp, #4]
ldr r0, [sp, #0x34]
mov r1, r4
str r1, [r0]
ldr r0, [sp, #0x30]
str r4, [sp, #8]
mov r8, r2
mov r7, r3
mov r5, r4
mov sl, r4
str r0, [sp, #0x30]
mov r4, #1
bmi _020EAEF8
cmp sb, #1
beq _020EAEF8
cmp sb, #0x24
bgt _020EAEF8
ldr r0, [sp]
cmp r0, #1
bge _020EAF00
_020EAEF8:
mov r4, #0x40
b _020EAF1C
_020EAF00:
ldr r1, [sp, #8]
mov r0, r7
mov r3, r1
mov r2, r1
add r5, r3, #1
blx r8
mov r6, r0
_020EAF1C:
cmp sb, #0
beq _020EAF34
mov r1, sb
mvn r0, #0
bl _u32_div_f
str r0, [sp, #4]
_020EAF34:
mvn fp, #0
b _020EB1F4
_020EAF3C:
cmp r4, #8
bgt _020EAF74
cmp r4, #0
addge pc, pc, r4, lsl #2
b _020EB1F4
_020EAF50: ; jump table
b _020EB1F4 ; case 0
b _020EAF80 ; case 1
b _020EB02C ; case 2
b _020EB1F4 ; case 3
b _020EB068 ; case 4
b _020EB1F4 ; case 5
b _020EB1F4 ; case 6
b _020EB1F4 ; case 7
b _020EB0A8 ; case 8
_020EAF74:
cmp r4, #0x10
beq _020EB0A8
b _020EB1F4
_020EAF80:
cmp r6, #0
blt _020EAF90
cmp r6, #0x80
blt _020EAF98
_020EAF90:
mov r0, #0
b _020EAFA8
_020EAF98:
ldr r0, _020EB258 ; =__msl_digit
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #0x100
_020EAFA8:
cmp r0, #0
beq _020EAFD4
mov r1, #0
mov r0, r7
mov r2, r1
blx r8
mov r6, r0
ldr r0, [sp, #8]
add r0, r0, #1
str r0, [sp, #8]
b _020EB1F4
_020EAFD4:
cmp r6, #0x2b
bne _020EAFF8
mov r1, #0
mov r0, r7
mov r2, r1
add r5, r5, #1
blx r8
mov r6, r0
b _020EB024
_020EAFF8:
cmp r6, #0x2d
bne _020EB024
mov r1, #0
mov r0, r7
mov r2, r1
add r5, r5, #1
blx r8
mov r6, r0
ldr r0, [sp, #0x34]
mov r1, #1
str r1, [r0]
_020EB024:
mov r4, #2
b _020EB1F4
_020EB02C:
cmp sb, #0
cmpne sb, #0x10
bne _020EB060
cmp r6, #0x30
bne _020EB060
mov r1, #0
mov r0, r7
mov r2, r1
mov r4, #4
add r5, r5, #1
blx r8
mov r6, r0
b _020EB1F4
_020EB060:
mov r4, #8
b _020EB1F4
_020EB068:
cmp r6, #0x58
cmpne r6, #0x78
bne _020EB098
mov r1, #0
mov r0, r7
mov r2, r1
mov sb, #0x10
mov r4, #8
add r5, r5, #1
blx r8
mov r6, r0
b _020EB1F4
_020EB098:
cmp sb, #0
moveq sb, #8
mov r4, #0x10
b _020EB1F4
_020EB0A8:
ldr r0, [sp, #4]
cmp sb, #0
moveq sb, #0xa
cmp r0, #0
bne _020EB0CC
mov r0, fp
mov r1, sb
bl _u32_div_f
str r0, [sp, #4]
_020EB0CC:
cmp r6, #0
blt _020EB0DC
cmp r6, #0x80
blt _020EB0E4
_020EB0DC:
mov r0, #0
b _020EB0F4
_020EB0E4:
ldr r0, _020EB258 ; =__msl_digit
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #8
_020EB0F4:
cmp r0, #0
beq _020EB11C
sub r6, r6, #0x30
cmp r6, sb
blt _020EB1A4
cmp r4, #0x10
moveq r4, #0x20
movne r4, #0x40
add r6, r6, #0x30
b _020EB1F4
_020EB11C:
cmp r6, #0
blt _020EB12C
cmp r6, #0x80
blt _020EB134
_020EB12C:
mov r0, #0
b _020EB144
_020EB134:
ldr r0, _020EB258 ; =__msl_digit
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #1
_020EB144:
cmp r0, #0
beq _020EB178
cmp r6, #0
blt _020EB15C
cmp r6, #0x80
blt _020EB164
_020EB15C:
mov r0, r6
b _020EB16C
_020EB164:
ldr r0, _020EB25C ; =__upper_mapC
ldrb r0, [r0, r6]
_020EB16C:
sub r0, r0, #0x37
cmp r0, sb
blt _020EB188
_020EB178:
cmp r4, #0x10
moveq r4, #0x20
movne r4, #0x40
b _020EB1F4
_020EB188:
cmp r6, #0
blt _020EB1A0
cmp r6, #0x80
bge _020EB1A0
ldr r0, _020EB25C ; =__upper_mapC
ldrb r6, [r0, r6]
_020EB1A0:
sub r6, r6, #0x37
_020EB1A4:
ldr r0, [sp, #4]
mov r4, #0x10
cmp sl, r0
ldrhi r0, [sp, #0x38]
movhi r1, #1
strhi r1, [r0]
mul r0, sl, sb
mov sl, r0
sub r0, fp, r0
cmp r6, r0
ldrhi r0, [sp, #0x38]
movhi r1, #1
strhi r1, [r0]
mov r1, #0
mov r0, r7
mov r2, r1
add sl, sl, r6
add r5, r5, #1
blx r8
mov r6, r0
_020EB1F4:
ldr r0, [sp]
cmp r5, r0
bgt _020EB210
cmp r6, fp
beq _020EB210
tst r4, #0x60
beq _020EAF3C
_020EB210:
tst r4, #0x34
bne _020EB228
ldr r0, [sp, #0x30]
mov sl, #0
str sl, [r0]
b _020EB23C
_020EB228:
ldr r0, [sp, #8]
sub r1, r5, #1
add r1, r1, r0
ldr r0, [sp, #0x30]
str r1, [r0]
_020EB23C:
mov r0, r7
mov r1, r6
mov r2, #1
blx r8
mov r0, sl
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020EB258: .word __msl_digit
_020EB25C: .word __upper_mapC
arm_func_end __strtoul
arm_func_start __strtoull
__strtoull: ; 0x020EB260
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #0x20
ldr r4, [sp, #0x48]
movs sb, r0
ldr r0, [sp, #0x44]
str r4, [sp, #0x48]
mov r4, #0
str r0, [sp, #0x44]
ldr r0, [sp, #0x48]
str r1, [sp]
str r4, [r0]
mov r0, r4
str r0, [sp, #0x10]
str r0, [sp, #0x14]
str r0, [sp, #0xc]
ldr r0, [sp, #0x44]
mov r1, r4
str r1, [r0]
ldr r0, [sp, #0x40]
str r4, [sp, #0x18]
mov sl, r2
str r3, [sp, #4]
mov r6, r4
mov r7, r4
str r0, [sp, #0x40]
mov r5, #1
bmi _020EB2E8
cmp sb, #1
beq _020EB2E8
cmp sb, #0x24
bgt _020EB2E8
ldr r0, [sp]
cmp r0, #1
bge _020EB2F0
_020EB2E8:
mov r5, #0x40
b _020EB304
_020EB2F0:
mov r0, r3
mov r2, r4
add r6, r1, #1
blx sl
mov r8, r0
_020EB304:
cmp sb, #0
beq _020EB328
mvn r0, #0
mov r1, r0
mov r3, sb, asr #0x1f
mov r2, sb
bl _ll_udiv
mov r7, r0
str r1, [sp, #0xc]
_020EB328:
mvn r0, #0
str r0, [sp, #0x1c]
mov r4, #0
b _020EB650
_020EB338:
cmp r5, #8
bgt _020EB370
cmp r5, #0
addge pc, pc, r5, lsl #2
b _020EB650
_020EB34C: ; jump table
b _020EB650 ; case 0
b _020EB37C ; case 1
b _020EB428 ; case 2
b _020EB650 ; case 3
b _020EB464 ; case 4
b _020EB650 ; case 5
b _020EB650 ; case 6
b _020EB650 ; case 7
b _020EB4A4 ; case 8
_020EB370:
cmp r5, #0x10
beq _020EB4A4
b _020EB650
_020EB37C:
cmp r8, #0
blt _020EB38C
cmp r8, #0x80
blt _020EB394
_020EB38C:
mov r0, #0
b _020EB3A4
_020EB394:
ldr r0, _020EB6C4 ; =__msl_digit
mov r1, r8, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #0x100
_020EB3A4:
cmp r0, #0
beq _020EB3D0
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
blx sl
mov r8, r0
ldr r0, [sp, #0x18]
add r0, r0, #1
str r0, [sp, #0x18]
b _020EB650
_020EB3D0:
cmp r8, #0x2b
bne _020EB3F4
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
add r6, r6, #1
blx sl
mov r8, r0
b _020EB420
_020EB3F4:
cmp r8, #0x2d
bne _020EB420
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
add r6, r6, #1
blx sl
mov r8, r0
ldr r0, [sp, #0x44]
mov r1, #1
str r1, [r0]
_020EB420:
mov r5, #2
b _020EB650
_020EB428:
cmp sb, #0
cmpne sb, #0x10
bne _020EB45C
cmp r8, #0x30
bne _020EB45C
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
mov r5, #4
add r6, r6, #1
blx sl
mov r8, r0
b _020EB650
_020EB45C:
mov r5, #8
b _020EB650
_020EB464:
cmp r8, #0x58
cmpne r8, #0x78
bne _020EB494
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
mov sb, #0x10
mov r5, #8
add r6, r6, #1
blx sl
mov r8, r0
b _020EB650
_020EB494:
cmp sb, #0
moveq sb, #8
mov r5, #0x10
b _020EB650
_020EB4A4:
ldr r1, [sp, #0xc]
mov r0, #0
cmp sb, #0
moveq sb, #0xa
cmp r1, r0
cmpeq r7, r4
bne _020EB4DC
ldr r0, [sp, #0x1c]
mov r3, sb, asr #0x1f
mov r1, r0
mov r2, sb
bl _ll_udiv
mov r7, r0
str r1, [sp, #0xc]
_020EB4DC:
cmp r8, #0
blt _020EB4EC
cmp r8, #0x80
blt _020EB4F4
_020EB4EC:
mov r0, #0
b _020EB504
_020EB4F4:
ldr r0, _020EB6C4 ; =__msl_digit
mov r1, r8, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #8
_020EB504:
cmp r0, #0
beq _020EB52C
sub r8, r8, #0x30
cmp r8, sb
blt _020EB5B4
cmp r5, #0x10
moveq r5, #0x20
movne r5, #0x40
add r8, r8, #0x30
b _020EB650
_020EB52C:
cmp r8, #0
blt _020EB53C
cmp r8, #0x80
blt _020EB544
_020EB53C:
mov r0, #0
b _020EB554
_020EB544:
ldr r0, _020EB6C4 ; =__msl_digit
mov r1, r8, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #1
_020EB554:
cmp r0, #0
beq _020EB588
cmp r8, #0
blt _020EB56C
cmp r8, #0x80
blt _020EB574
_020EB56C:
mov r0, r8
b _020EB57C
_020EB574:
ldr r0, _020EB6C8 ; =__upper_mapC
ldrb r0, [r0, r8]
_020EB57C:
sub r0, r0, #0x37
cmp r0, sb
blt _020EB598
_020EB588:
cmp r5, #0x10
moveq r5, #0x20
movne r5, #0x40
b _020EB650
_020EB598:
cmp r8, #0
blt _020EB5B0
cmp r8, #0x80
bge _020EB5B0
ldr r0, _020EB6C8 ; =__upper_mapC
ldrb r8, [r0, r8]
_020EB5B0:
sub r8, r8, #0x37
_020EB5B4:
ldr r1, [sp, #0x14]
ldr r0, [sp, #0xc]
ldr r3, [sp, #0x10]
cmp r1, r0
ldr r0, [sp, #0x10]
mov r5, sb, asr #0x1f
cmpeq r0, r7
ldrhi r0, [sp, #0x48]
movhi r1, #1
strhi r1, [r0]
umull r0, r1, r3, sb
mla r1, r3, r5, r1
ldr r3, [sp, #0x14]
str r0, [sp, #0x10]
mla r1, r3, sb, r1
ldr r3, [sp, #0x1c]
mov r2, r8, asr #0x1f
subs r3, r3, r0
ldr r0, [sp, #0x1c]
str r1, [sp, #0x14]
sbc r0, r0, r1
cmp r2, r0
cmpeq r8, r3
ldrhi r0, [sp, #0x48]
movhi r1, #1
strhi r1, [r0]
ldr r0, [sp, #0x10]
mov r1, #0
adds r0, r0, r8
str r0, [sp, #0x10]
ldr r0, [sp, #0x14]
mov r5, #0x10
adc r0, r0, r2
str r0, [sp, #0x14]
ldr r0, [sp, #4]
mov r2, r1
add r6, r6, #1
blx sl
mov r8, r0
_020EB650:
ldr r0, [sp]
cmp r6, r0
bgt _020EB670
ldr r0, [sp, #0x1c]
cmp r8, r0
beq _020EB670
tst r5, #0x60
beq _020EB338
_020EB670:
tst r5, #0x34
bne _020EB690
mov r0, #0
str r0, [sp, #0x10]
str r0, [sp, #0x14]
mov r1, r0
ldr r0, [sp, #0x40]
b _020EB6A0
_020EB690:
ldr r0, [sp, #0x18]
sub r1, r6, #1
add r1, r1, r0
ldr r0, [sp, #0x40]
_020EB6A0:
str r1, [r0]
ldr r0, [sp, #4]
mov r1, r8
mov r2, #1
blx sl
ldr r0, [sp, #0x10]
ldr r1, [sp, #0x14]
add sp, sp, #0x20
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_020EB6C4: .word __msl_digit
_020EB6C8: .word __upper_mapC
arm_func_end __strtoull
arm_func_start strtoul
strtoul: ; 0x020EB6CC
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #0x20
mov r5, r0
mov lr, #0
mov r0, r2
mov r4, r1
add r2, sp, #0x1c
str r5, [sp, #0xc]
str lr, [sp, #0x10]
str r2, [sp]
add r1, sp, #0x18
str r1, [sp, #4]
add ip, sp, #0x14
ldr r2, _020EB75C ; =__StringRead
add r3, sp, #0xc
sub r1, lr, #0x80000001
str ip, [sp, #8]
bl __strtoul
cmp r4, #0
ldrne r1, [sp, #0x1c]
addne r1, r5, r1
strne r1, [r4]
ldr r1, [sp, #0x14]
cmp r1, #0
beq _020EB748
ldr r0, _020EB760 ; =errno
mov r1, #0x22
str r1, [r0]
add sp, sp, #0x20
mvn r0, #0
ldmia sp!, {r3, r4, r5, pc}
_020EB748:
ldr r1, [sp, #0x18]
cmp r1, #0
rsbne r0, r0, #0
add sp, sp, #0x20
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020EB75C: .word __StringRead
_020EB760: .word errno
arm_func_end strtoul
arm_func_start strtol
strtol: ; 0x020EB764
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #0x20
mov r5, r0
mov lr, #0
mov r0, r2
mov r4, r1
add r2, sp, #0x1c
str r5, [sp, #0xc]
str lr, [sp, #0x10]
str r2, [sp]
add r1, sp, #0x18
str r1, [sp, #4]
add ip, sp, #0x14
ldr r2, _020EB824 ; =__StringRead
add r3, sp, #0xc
sub r1, lr, #0x80000001
str ip, [sp, #8]
bl __strtoul
cmp r4, #0
ldrne r1, [sp, #0x1c]
addne r1, r5, r1
strne r1, [r4]
ldr r1, [sp, #0x14]
cmp r1, #0
bne _020EB7F0
ldr r2, [sp, #0x18]
cmp r2, #0
bne _020EB7E0
mvn r1, #0x80000000
cmp r0, r1
bhi _020EB7F0
_020EB7E0:
cmp r2, #0
beq _020EB814
cmp r0, #0x80000000
bls _020EB814
_020EB7F0:
ldr r0, [sp, #0x18]
ldr r1, _020EB828 ; =errno
mov r2, #0x22
cmp r0, #0
movne r0, #0x80000000
str r2, [r1]
add sp, sp, #0x20
mvneq r0, #0x80000000
ldmia sp!, {r3, r4, r5, pc}
_020EB814:
cmp r2, #0
rsbne r0, r0, #0
add sp, sp, #0x20
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020EB824: .word __StringRead
_020EB828: .word errno
arm_func_end strtol
arm_func_start atol
atol: ; 0x020EB82C
ldr ip, _020EB83C ; =strtol
mov r1, #0
mov r2, #0xa
bx ip
.align 2, 0
_020EB83C: .word strtol
arm_func_end atol
exception __strtoul, 0x03E9, 0x0060FF00
exception __strtoull, 0x046D, 0x00807F00
exception strtoul, 0x0099, 0x00600300
exception strtol, 0x00C9, 0x00600300
exception atol, 0x0015, 0x00000000

View File

@ -0,0 +1,8 @@
#include <nitro/fs/overlay.h>
#pragma once
.public _u32_div_f
.public __msl_digit
.public __upper_mapC
.public _ll_udiv
.public __StringRead
.public errno

View File

@ -144,7 +144,7 @@
.public atod
.public strtoul
.public strtol
.public atoi
.public atol
.public wcslen
.public strnicmp
.public _dadd

View File

@ -189,7 +189,7 @@
.public memcmp
.public strlen
.public strncpy
.public atoi
.public atol
.public swprintf
.public _ll_udiv
.public _ull_mod

View File

@ -48,7 +48,7 @@
.public strchr
.public strspn
.public strstr
.public atoi
.public atol
.public _ll_udiv
.public _u32_div_f
.public __msl_digit

View File

@ -32,7 +32,7 @@
.public strstr
.public strtoul
.public strtol
.public atoi
.public atol
.public strnicmp
.public _s32_div_f
.public _u32_div_f

View File

@ -728,7 +728,7 @@ _021E8508:
ldr r0, [r0, #0x314]
ldr r1, _021E8778 ; =ov00_022164C8
bl ov00_021EA1CC
bl atoi
bl atol
ldr r1, _021E8774 ; =errno
ldr r1, [r1]
cmp r1, #0x22
@ -1766,7 +1766,7 @@ ov00_021E9350: ; 0x021E9350
strb r1, [r6]
bl OS_LockMutex
add r0, r8, r7
bl atoi
bl atol
add r1, r5, #0x1000
add r2, r5, #0x218
str r0, [r1, #0xa30]
@ -2460,7 +2460,7 @@ _021E9D5C:
cmp r4, #0
beq _021E9DC0
mov r0, r4
bl atoi
bl atol
add r1, r5, #0x1100
strh r0, [r1, #0x34]
_021E9DC0:
@ -3217,7 +3217,7 @@ _021EA7FC:
ldr r0, [r5, #0x14]
ldr r1, _021EB4F8 ; =ov00_022169F0
bl ov00_021EA1CC
bl atoi
bl atol
mov r6, r0
ldr r0, _021EB4FC ; =errno
ldr r0, [r0]
@ -3709,7 +3709,7 @@ _021EAF10:
ldr r0, [r5, #0x14]
ldr r1, _021EB4F8 ; =ov00_022169F0
bl ov00_021EA1CC
bl atoi
bl atol
mov r6, r0
ldr r0, _021EB4FC ; =errno
ldr r0, [r0]
@ -3760,7 +3760,7 @@ _021EAFA0:
b _021EB490
_021EAFD4:
add r0, sp, #0x2c
bl atoi
bl atol
ldr r1, _021EB4FC ; =errno
ldr r1, [r1]
cmp r1, #0x22
@ -3925,7 +3925,7 @@ _021EB234:
mov r1, #0
strb r1, [sl, r0]
mov r0, sl
bl atoi
bl atol
ldr r1, _021EB4FC ; =errno
ldr r1, [r1]
cmp r1, #0x22
@ -4218,7 +4218,7 @@ ov00_021EB5B0: ; 0x021EB5B0
strb r2, [sp, #0x16]
strb r2, [sp, #0x19]
str r2, [r1]
bl atoi
bl atol
ldr r1, _021EB7C0 ; =errno
str r0, [sp, #0x2c]
ldr r1, [r1]
@ -4250,7 +4250,7 @@ _021EB6CC:
mov r2, #0
add r0, sp, #5
str r2, [r1]
bl atoi
bl atol
ldr r1, _021EB7C0 ; =errno
str r0, [sp, #0x34]
ldr r0, [r1]
@ -4259,7 +4259,7 @@ _021EB6CC:
mov r2, #0
add r0, sp, #0x11
str r2, [r1]
bl atoi
bl atol
ldr r1, _021EB7C0 ; =errno
str r0, [sp, #0x20]
ldr r0, [r1]
@ -4268,7 +4268,7 @@ _021EB6CC:
mov r2, #0
add r0, sp, #0x14
str r2, [r1]
bl atoi
bl atol
ldr r1, _021EB7C0 ; =errno
str r0, [sp, #0x24]
ldr r0, [r1]
@ -4277,7 +4277,7 @@ _021EB6CC:
mov r2, #0
add r0, sp, #0x17
str r2, [r1]
bl atoi
bl atol
ldr r1, _021EB7C0 ; =errno
str r0, [sp, #0x28]
ldr r0, [r1]
@ -4645,7 +4645,7 @@ _021EBC40:
mov r0, #0
ldmia sp!, {r3, r4, pc}
_021EBC6C:
bl atoi
bl atol
ldr r1, _021EBDEC ; =errno
mov r2, r0
ldr r0, [r1]
@ -4683,7 +4683,7 @@ _021EBCC0:
ldmia sp!, {r3, r4, pc}
_021EBCF4:
add r0, sp, #0
bl atoi
bl atol
ldr r1, _021EBDEC ; =errno
mov r2, r0
ldr r0, [r1]
@ -29886,7 +29886,7 @@ _02200D10:
cmp r0, #0
beq _02200DB8
add r0, r0, #4
bl atoi
bl atol
mov r5, r0
mov r0, r4
mov r1, fp
@ -30193,7 +30193,7 @@ ov00_02201134: ; 0x02201134
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_02201198:
add r0, sp, #0x138
bl atoi
bl atol
mov r4, r0
ldr r1, _02201AB0 ; =ov00_022182A0
add r2, sp, #0x138
@ -30216,7 +30216,7 @@ _02201198:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_022011F0:
add r0, sp, #0x138
bl atoi
bl atol
mov r6, r0
ldr r1, _02201AB4 ; =ov00_022182A4
add r2, sp, #0x138
@ -30226,7 +30226,7 @@ _022011F0:
cmp r0, #0
beq _02201224
add r0, sp, #0x138
bl atoi
bl atol
b _0220122C
_02201224:
mov r0, #0
@ -30530,7 +30530,7 @@ _0220163C:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_02201688:
add r0, sp, #0x28
bl atoi
bl atol
str r0, [r7, #4]
ldr r0, [r7, #8]
bl ov00_021EC3D8
@ -30591,16 +30591,16 @@ _02201754:
moveq r0, #0
beq _022017CC
add r0, sp, #0x28
bl atoi
bl atol
mov r5, r0
add r0, sp, #0x28
bl atoi
bl atol
mov fp, r0
add r0, sp, #0x28
bl atoi
bl atol
mov r4, r0
add r0, sp, #0x28
bl atoi
bl atol
mov r1, r4, lsr #0x18
mov r0, r0, lsr #8
mov r2, fp, lsl #8
@ -30623,7 +30623,7 @@ _022017CC:
moveq r0, #0
beq _0220181C
add r0, sp, #0x28
bl atoi
bl atol
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
mov r1, r0, asr #8
@ -30726,7 +30726,7 @@ _02201938:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_02201974:
add r0, r0, #3
bl atoi
bl atol
mov r4, r0
ldr r1, _02201AE0 ; =ov00_022182F0
add r0, sp, #0x138
@ -31816,7 +31816,7 @@ ov00_022027FC: ; 0x022027FC
moveq r0, #3
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
add r0, sp, #0
bl atoi
bl atol
str r0, [r7]
ldr r0, [r6]
ldr r1, _02202934 ; =ov00_022185AC
@ -31828,7 +31828,7 @@ ov00_022027FC: ; 0x022027FC
moveq r0, #3
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
add r0, sp, #0
bl atoi
bl atol
ldr r2, [r6]
add r1, r0, #1
sub r2, r4, r2
@ -33110,7 +33110,7 @@ _02203AB8:
cmp r0, #0
beq _02203AEC
add r0, sp, #0xa0
bl atoi
bl atol
str r0, [r5, #0x1a0]
_02203AEC:
ldr r1, _022040D4 ; =ov00_02218A08
@ -33246,7 +33246,7 @@ _02203C90:
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_02203CD8:
add r0, sp, #0xa0
bl atoi
bl atol
str r0, [r5, #0x19c]
ldr r1, _022040F0 ; =ov00_02218964
add r2, sp, #0xa0
@ -33268,7 +33268,7 @@ _02203CD8:
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_02203D2C:
add r0, sp, #0xa0
bl atoi
bl atol
str r0, [r5, #0x1a0]
mov r0, r8
mov r1, r4
@ -33318,7 +33318,7 @@ _02203DA0:
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_02203DE8:
add r0, sp, #0xa0
bl atoi
bl atol
str r0, [r5, #0x198]
ldr r1, _022040E8 ; =ov00_02218958
add r2, sp, #0xa0
@ -33340,7 +33340,7 @@ _02203DE8:
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_02203E3C:
add r0, sp, #0xa0
bl atoi
bl atol
str r0, [r5, #0x19c]
ldr r1, _022040F0 ; =ov00_02218964
add r2, sp, #0xa0
@ -33362,7 +33362,7 @@ _02203E3C:
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_02203E90:
add r0, sp, #0xa0
bl atoi
bl atol
str r0, [r5, #0x1a0]
ldr r1, _022040FC ; =ov00_0221893C
add r2, sp, #0x18
@ -34110,7 +34110,7 @@ _022048C4:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_0220490C:
add r0, sp, #0xec
bl atoi
bl atol
mov sb, r0
cmp sb, #0
bgt _02204934
@ -34204,7 +34204,7 @@ _0220495C:
streq r0, [sp, #0x190]
beq _02204A88
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x190]
_02204A88:
ldr r2, [sp, #0x18c]
@ -34283,7 +34283,7 @@ _02204B58:
b _02204BD8
_02204BA8:
add r0, sp, #0xec
bl atoi
bl atol
add r5, sp, #0x234
mov r1, r0
add r2, sp, #0x22c
@ -34325,7 +34325,7 @@ _02204C24:
streq r0, [sp, #0x23c]
beq _02204C54
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x23c]
_02204C54:
ldr r2, [sp, #0x240]
@ -34347,7 +34347,7 @@ _02204C54:
streq r0, [sp, #0x244]
beq _02204CA8
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x244]
_02204CA8:
ldr r1, _0220503C ; =ov00_02218C78
@ -34360,7 +34360,7 @@ _02204CA8:
streq r0, [sp, #0x248]
beq _02204CD8
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x248]
_02204CD8:
ldr r1, _02205040 ; =ov00_02218C80
@ -34373,7 +34373,7 @@ _02204CD8:
streq r0, [sp, #0x24c]
beq _02204D08
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x24c]
_02204D08:
ldr r1, _02205044 ; =ov00_02218C88
@ -34386,7 +34386,7 @@ _02204D08:
streq r0, [sp, #0x250]
beq _02204D38
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x250]
_02204D38:
ldr r1, _02205048 ; =ov00_02218C90
@ -34399,7 +34399,7 @@ _02204D38:
streq r0, [sp, #0x254]
beq _02204D68
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x254]
_02204D68:
ldr r1, _0220504C ; =ov00_02218C98
@ -34412,7 +34412,7 @@ _02204D68:
streq r0, [sp, #0x258]
beq _02204D98
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x258]
_02204D98:
ldr r1, _02205050 ; =ov00_02218CA0
@ -34425,7 +34425,7 @@ _02204D98:
streq r0, [sp, #0x25c]
beq _02204DC8
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x25c]
_02204DC8:
ldr r1, _02205054 ; =ov00_02218CA8
@ -34438,7 +34438,7 @@ _02204DC8:
streq r0, [sp, #0x260]
beq _02204DF8
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x260]
_02204DF8:
ldr r1, _02205058 ; =ov00_02218CB0
@ -34451,7 +34451,7 @@ _02204DF8:
streq r0, [sp, #0x264]
beq _02204E28
add r0, sp, #0xec
bl atoi
bl atol
str r0, [sp, #0x264]
_02204E28:
ldr r1, _0220505C ; =ov00_02218CB8
@ -35338,7 +35338,7 @@ _02205A74:
ldmia sp!, {r4, r5, r6, pc}
_02205AA4:
mov r0, r5
bl atoi
bl atol
mov r2, r0
ldr r1, _02205E0C ; =0x0000070D
mov r0, r6
@ -35349,7 +35349,7 @@ _02205AA4:
ldmia sp!, {r4, r5, r6, pc}
_02205ACC:
mov r0, r5
bl atoi
bl atol
mov r2, r0
ldr r1, _02205E10 ; =0x0000070E
mov r0, r6
@ -35373,7 +35373,7 @@ _02205AF4:
ldmia sp!, {r4, r5, r6, pc}
_02205B24:
mov r0, r5
bl atoi
bl atol
mov r2, r0
mov r0, r6
mov r1, #0x710
@ -35397,7 +35397,7 @@ _02205B4C:
ldmia sp!, {r4, r5, r6, pc}
_02205B7C:
mov r0, r5
bl atoi
bl atol
mov r2, r0
ldr r1, _02205E1C ; =0x00000712
mov r0, r6
@ -35408,7 +35408,7 @@ _02205B7C:
ldmia sp!, {r4, r5, r6, pc}
_02205BA4:
mov r0, r5
bl atoi
bl atol
mov r2, r0
ldr r1, _02205E20 ; =0x00000714
mov r0, r6
@ -35419,7 +35419,7 @@ _02205BA4:
ldmia sp!, {r4, r5, r6, pc}
_02205BCC:
mov r0, r5
bl atoi
bl atol
mov r2, r0
ldr r1, _02205E24 ; =0x00000715
mov r0, r6
@ -36625,7 +36625,7 @@ _02206C2C:
ldmia sp!, {r4, r5, r6, r7, pc}
_02206C94:
add r0, sp, #0x71
bl atoi
bl atol
mov r7, r0
ldr r0, [r5, #0x18]
ldr r1, _02206DF0 ; =ov00_02219034
@ -37776,7 +37776,7 @@ _02207C00:
ldmia sp!, {r4, r5, r6, pc}
_02207C48:
add r0, sp, #0x10
bl atoi
bl atol
ldr r2, [r4, #0xc]
ldr r1, [r4, #0x10]
mov r6, r0
@ -39013,7 +39013,7 @@ _02208D8C:
mov r2, #0xac
bl memset
mov r0, r5
bl atoi
bl atol
str r0, [r7, r8]
mov r8, #0
_02208DC0:
@ -39562,7 +39562,7 @@ _0220959C:
mov r0, #1
str r0, [r7, #0x24]
mov r0, r5
bl atoi
bl atol
str r0, [r8, sb]
mov r8, #0
_022095D8:
@ -39603,7 +39603,7 @@ _0220964C:
cmp r0, #0
bne _02209670
mov r0, r5
bl atoi
bl atol
str r0, [r7, #0x24]
b _022096A0
_02209670:
@ -39691,7 +39691,7 @@ _02209718:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_022097A4:
add r0, sp, #0x90
bl atoi
bl atol
movs r4, r0
beq _022097C4
ldr r0, [sp, #0x28]
@ -39719,7 +39719,7 @@ _022097C4:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_0220980C:
add r0, sp, #0x90
bl atoi
bl atol
mov r5, r0
_02209818:
mov r0, #8
@ -39784,7 +39784,7 @@ _02209874:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_02209900:
add r0, sp, #0x90
bl atoi
bl atol
movs r4, r0
ldrne r0, [sp, #0x28]
ldr r1, _02209F9C ; =ov00_02219648
@ -39813,7 +39813,7 @@ _02209964:
b _02209978
_0220996C:
add r0, sp, #0x90
bl atoi
bl atol
mov r5, r0
_02209978:
mov r0, #8
@ -39947,7 +39947,7 @@ _02209B34:
mov r0, r5
add r1, r1, #1
str r1, [fp, #4]
bl atoi
bl atol
str r0, [r8, sb]
mov r8, #0
_02209B78:
@ -40116,7 +40116,7 @@ _02209D60:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
_02209DD8:
add r0, sp, #0x90
bl atoi
bl atol
str r0, [r8, #4]
mov r0, r0, lsl #2
bl ov00_021EC3A8
@ -40576,7 +40576,7 @@ ov00_0220A3C8: ; 0x0220A3C8
cmp r0, #0
beq _0220A420
add r0, sp, #0
bl atoi
bl atol
str r0, [r4, #0x418]
_0220A420:
ldr r1, _0220A498 ; =ov00_022197A4
@ -41689,12 +41689,12 @@ ov00_0220B26C: ; 0x0220B26C
ldr r1, _0220B30C ; =ov00_0221994C
mov r6, r0
bl ov00_0220B15C
bl atoi
bl atol
mov r5, r0
ldr r1, _0220B310 ; =ov00_02219954
mov r0, r6
bl ov00_0220B15C
bl atoi
bl atol
mov r4, r0
ldr r1, _0220B314 ; =ov00_02219958
mov r0, r6
@ -41737,12 +41737,12 @@ ov00_0220B31C: ; 0x0220B31C
ldr r1, _0220B39C ; =ov00_02219960
mov r5, r0
bl ov00_0220B15C
bl atoi
bl atol
mov r4, r0
ldr r1, _0220B3A0 ; =ov00_02219954
mov r0, r5
bl ov00_0220B15C
bl atoi
bl atol
mov r1, r0
mov r0, #3
mov r2, #0
@ -41778,22 +41778,22 @@ ov00_0220B3A8: ; 0x0220B3A8
ldr r1, _0220B470 ; =ov00_02219968
mov r4, r0
bl ov00_0220B15C
bl atoi
bl atol
mov r7, r0
ldr r1, _0220B474 ; =ov00_02219954
mov r0, r4
bl ov00_0220B15C
bl atoi
bl atol
mov r6, r0
ldr r1, _0220B478 ; =ov00_02219970
mov r0, r4
bl ov00_0220B15C
bl atoi
bl atol
mov r5, r0
ldr r1, _0220B47C ; =ov00_02219974
mov r0, r4
bl ov00_0220B15C
bl atoi
bl atol
mov r8, r0
mov r1, r6
mov r2, r5
@ -41807,7 +41807,7 @@ ov00_0220B3A8: ; 0x0220B3A8
ldr r1, _0220B480 ; =ov00_02219978
mov r0, r4
bl ov00_0220B15C
bl atoi
bl atol
mov r6, r0
ldr r1, _0220B484 ; =ov00_02219980
mov r0, r4
@ -41839,22 +41839,22 @@ ov00_0220B48C: ; 0x0220B48C
ldr r1, _0220B514 ; =ov00_02219988
mov r7, r0
bl ov00_0220B15C
bl atoi
bl atol
mov r6, r0
ldr r1, _0220B518 ; =ov00_02219970
mov r0, r7
bl ov00_0220B15C
bl atoi
bl atol
mov r5, r0
ldr r1, _0220B51C ; =ov00_02219954
mov r0, r7
bl ov00_0220B15C
bl atoi
bl atol
mov r4, r0
ldr r1, _0220B520 ; =ov00_02219974
mov r0, r7
bl ov00_0220B15C
bl atoi
bl atol
mov r1, r4
mov r4, r0
mov r2, r5
@ -46997,7 +46997,7 @@ _0220F898:
bne _0220F874
_0220F8B4:
add r0, r5, #1
bl atoi
bl atol
cmp r0, #0
blt _0220F8D0
ldr r1, _0220F954 ; =0x0000FFFF
@ -51006,7 +51006,7 @@ _02212E2C:
mov r0, r4
ldmia sp!, {r4, r5, r6, pc}
_02212E34:
bl atoi
bl atol
ldmia sp!, {r4, r5, r6, pc}
.balign 4, 0
_02212E3C: .word ov00_0221A514

View File

@ -13804,7 +13804,7 @@ _022321C0:
blt _022321C0
_022321DC:
add r0, sp, #0
bl atoi
bl atol
cmp r0, r4
movge r0, #1
movlt r0, #0
@ -24470,7 +24470,7 @@ _0223AAA4:
blt _0223AAA4
_0223AAC0:
mov r0, r6
bl atoi
bl atol
strb r0, [sb, r7]
add r7, r7, #1
cmp r7, #4

View File

@ -3179,7 +3179,7 @@ _0221EA9C:
bne _0221EB18
add r4, r4, #1
mov r0, r4
bl atoi
bl atol
strh r0, [r5, #0x20]
ldrh r0, [r5, #0x20]
cmp r0, #0
@ -4542,7 +4542,7 @@ _0221FD84:
b _0221FE74
_0221FDB4:
mov r0, r8
bl atoi
bl atol
str r0, [sl, #0x104]
_0221FDC0:
ldr r1, _0221FEA4 ; =ov38_02225D04

View File

@ -16053,7 +16053,7 @@ _0223EEF8:
movs r0, r0, lsr #0x1f
addeq r0, r1, #1
ldrne r0, [r1, #8]
bl atoi
bl atol
movs r4, r0
bne _0223EF40
add r0, sp, #0x6c
@ -20396,7 +20396,7 @@ _02242A80:
movs r0, r0, lsr #0x1f
addeq r0, r1, #0xd
ldrne r0, [r1, #0x14]
bl atoi
bl atol
movs r4, r0
add r0, sp, #0xc
bne _02242AB8
@ -30191,7 +30191,7 @@ _0224B05C:
cmpne r0, #0
streq r7, [sb, #0x1c]
beq _0224B0DC
bl atoi
bl atol
str r0, [sb, #0x1c]
b _0224B0DC
_0224B080:
@ -33616,7 +33616,7 @@ _0224E05C:
bl memcpy
ldr r0, [sb, #0x20]
ldr r0, [r0, #8]
bl atoi
bl atol
ldr r1, [sb, #0x20]
mov r5, r0
ldr r0, [r1, #0xc]
@ -34447,7 +34447,7 @@ _0224EC44:
ldmneia sp!, {r3, r4, r5, r6, pc}
ldr r0, [r5, #0x20]
ldr r0, [r0, #4]
bl atoi
bl atol
ldr r1, [r5, #0x20]
mov r5, r0
ldr r6, [r1, #8]
@ -34504,11 +34504,11 @@ _0224ED10:
ldmltia sp!, {r3, r4, r5, pc}
ldr r0, [r4, #0x20]
ldr r0, [r0, #4]
bl atoi
bl atol
str r0, [r5, #0x8ac]
ldr r0, [r4, #0x20]
ldr r0, [r0, #8]
bl atoi
bl atol
str r0, [r5, #0x8b0]
ldr r0, [r5, #0x10]
cmp r0, #0
@ -35081,7 +35081,7 @@ _0224F4D4:
ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
ldr r0, [r5, #0x20]
ldr r0, [r0, #4]
bl atoi
bl atol
ldr r2, [r5, #0x20]
ldr r1, [r4, #4]
ldr r5, [r2, #8]

View File

@ -42,7 +42,7 @@
.public atod
.public strtoul
.public strtol
.public atoi
.public atol
.public swprintf
.public wcslen
.public pow

View File

@ -24,737 +24,6 @@ __global_destructor_chain: ; 0x021E58E8
; MSL_C_NITRO_Ai_LE.a
arm_func_start __strtoul
__strtoul: ; 0x020EAE78
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
ldr r4, [sp, #0x38]
movs sb, r0
ldr r0, [sp, #0x34]
str r4, [sp, #0x38]
mov r4, #0
str r0, [sp, #0x34]
ldr r0, [sp, #0x38]
str r1, [sp]
str r4, [r0]
mov r0, r4
str r0, [sp, #4]
ldr r0, [sp, #0x34]
mov r1, r4
str r1, [r0]
ldr r0, [sp, #0x30]
str r4, [sp, #8]
mov r8, r2
mov r7, r3
mov r5, r4
mov sl, r4
str r0, [sp, #0x30]
mov r4, #1
bmi _020EAEF8
cmp sb, #1
beq _020EAEF8
cmp sb, #0x24
bgt _020EAEF8
ldr r0, [sp]
cmp r0, #1
bge _020EAF00
_020EAEF8:
mov r4, #0x40
b _020EAF1C
_020EAF00:
ldr r1, [sp, #8]
mov r0, r7
mov r3, r1
mov r2, r1
add r5, r3, #1
blx r8
mov r6, r0
_020EAF1C:
cmp sb, #0
beq _020EAF34
mov r1, sb
mvn r0, #0
bl _u32_div_f
str r0, [sp, #4]
_020EAF34:
mvn fp, #0
b _020EB1F4
_020EAF3C:
cmp r4, #8
bgt _020EAF74
cmp r4, #0
addge pc, pc, r4, lsl #2
b _020EB1F4
_020EAF50: ; jump table
b _020EB1F4 ; case 0
b _020EAF80 ; case 1
b _020EB02C ; case 2
b _020EB1F4 ; case 3
b _020EB068 ; case 4
b _020EB1F4 ; case 5
b _020EB1F4 ; case 6
b _020EB1F4 ; case 7
b _020EB0A8 ; case 8
_020EAF74:
cmp r4, #0x10
beq _020EB0A8
b _020EB1F4
_020EAF80:
cmp r6, #0
blt _020EAF90
cmp r6, #0x80
blt _020EAF98
_020EAF90:
mov r0, #0
b _020EAFA8
_020EAF98:
ldr r0, _020EB258 ; =__msl_digit
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #0x100
_020EAFA8:
cmp r0, #0
beq _020EAFD4
mov r1, #0
mov r0, r7
mov r2, r1
blx r8
mov r6, r0
ldr r0, [sp, #8]
add r0, r0, #1
str r0, [sp, #8]
b _020EB1F4
_020EAFD4:
cmp r6, #0x2b
bne _020EAFF8
mov r1, #0
mov r0, r7
mov r2, r1
add r5, r5, #1
blx r8
mov r6, r0
b _020EB024
_020EAFF8:
cmp r6, #0x2d
bne _020EB024
mov r1, #0
mov r0, r7
mov r2, r1
add r5, r5, #1
blx r8
mov r6, r0
ldr r0, [sp, #0x34]
mov r1, #1
str r1, [r0]
_020EB024:
mov r4, #2
b _020EB1F4
_020EB02C:
cmp sb, #0
cmpne sb, #0x10
bne _020EB060
cmp r6, #0x30
bne _020EB060
mov r1, #0
mov r0, r7
mov r2, r1
mov r4, #4
add r5, r5, #1
blx r8
mov r6, r0
b _020EB1F4
_020EB060:
mov r4, #8
b _020EB1F4
_020EB068:
cmp r6, #0x58
cmpne r6, #0x78
bne _020EB098
mov r1, #0
mov r0, r7
mov r2, r1
mov sb, #0x10
mov r4, #8
add r5, r5, #1
blx r8
mov r6, r0
b _020EB1F4
_020EB098:
cmp sb, #0
moveq sb, #8
mov r4, #0x10
b _020EB1F4
_020EB0A8:
ldr r0, [sp, #4]
cmp sb, #0
moveq sb, #0xa
cmp r0, #0
bne _020EB0CC
mov r0, fp
mov r1, sb
bl _u32_div_f
str r0, [sp, #4]
_020EB0CC:
cmp r6, #0
blt _020EB0DC
cmp r6, #0x80
blt _020EB0E4
_020EB0DC:
mov r0, #0
b _020EB0F4
_020EB0E4:
ldr r0, _020EB258 ; =__msl_digit
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #8
_020EB0F4:
cmp r0, #0
beq _020EB11C
sub r6, r6, #0x30
cmp r6, sb
blt _020EB1A4
cmp r4, #0x10
moveq r4, #0x20
movne r4, #0x40
add r6, r6, #0x30
b _020EB1F4
_020EB11C:
cmp r6, #0
blt _020EB12C
cmp r6, #0x80
blt _020EB134
_020EB12C:
mov r0, #0
b _020EB144
_020EB134:
ldr r0, _020EB258 ; =__msl_digit
mov r1, r6, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #1
_020EB144:
cmp r0, #0
beq _020EB178
cmp r6, #0
blt _020EB15C
cmp r6, #0x80
blt _020EB164
_020EB15C:
mov r0, r6
b _020EB16C
_020EB164:
ldr r0, _020EB25C ; =__upper_mapC
ldrb r0, [r0, r6]
_020EB16C:
sub r0, r0, #0x37
cmp r0, sb
blt _020EB188
_020EB178:
cmp r4, #0x10
moveq r4, #0x20
movne r4, #0x40
b _020EB1F4
_020EB188:
cmp r6, #0
blt _020EB1A0
cmp r6, #0x80
bge _020EB1A0
ldr r0, _020EB25C ; =__upper_mapC
ldrb r6, [r0, r6]
_020EB1A0:
sub r6, r6, #0x37
_020EB1A4:
ldr r0, [sp, #4]
mov r4, #0x10
cmp sl, r0
ldrhi r0, [sp, #0x38]
movhi r1, #1
strhi r1, [r0]
mul r0, sl, sb
mov sl, r0
sub r0, fp, r0
cmp r6, r0
ldrhi r0, [sp, #0x38]
movhi r1, #1
strhi r1, [r0]
mov r1, #0
mov r0, r7
mov r2, r1
add sl, sl, r6
add r5, r5, #1
blx r8
mov r6, r0
_020EB1F4:
ldr r0, [sp]
cmp r5, r0
bgt _020EB210
cmp r6, fp
beq _020EB210
tst r4, #0x60
beq _020EAF3C
_020EB210:
tst r4, #0x34
bne _020EB228
ldr r0, [sp, #0x30]
mov sl, #0
str sl, [r0]
b _020EB23C
_020EB228:
ldr r0, [sp, #8]
sub r1, r5, #1
add r1, r1, r0
ldr r0, [sp, #0x30]
str r1, [r0]
_020EB23C:
mov r0, r7
mov r1, r6
mov r2, #1
blx r8
mov r0, sl
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_020EB258: .word __msl_digit
_020EB25C: .word __upper_mapC
arm_func_end __strtoul
arm_func_start __strtoull
__strtoull: ; 0x020EB260
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #0x20
ldr r4, [sp, #0x48]
movs sb, r0
ldr r0, [sp, #0x44]
str r4, [sp, #0x48]
mov r4, #0
str r0, [sp, #0x44]
ldr r0, [sp, #0x48]
str r1, [sp]
str r4, [r0]
mov r0, r4
str r0, [sp, #0x10]
str r0, [sp, #0x14]
str r0, [sp, #0xc]
ldr r0, [sp, #0x44]
mov r1, r4
str r1, [r0]
ldr r0, [sp, #0x40]
str r4, [sp, #0x18]
mov sl, r2
str r3, [sp, #4]
mov r6, r4
mov r7, r4
str r0, [sp, #0x40]
mov r5, #1
bmi _020EB2E8
cmp sb, #1
beq _020EB2E8
cmp sb, #0x24
bgt _020EB2E8
ldr r0, [sp]
cmp r0, #1
bge _020EB2F0
_020EB2E8:
mov r5, #0x40
b _020EB304
_020EB2F0:
mov r0, r3
mov r2, r4
add r6, r1, #1
blx sl
mov r8, r0
_020EB304:
cmp sb, #0
beq _020EB328
mvn r0, #0
mov r1, r0
mov r3, sb, asr #0x1f
mov r2, sb
bl _ll_udiv
mov r7, r0
str r1, [sp, #0xc]
_020EB328:
mvn r0, #0
str r0, [sp, #0x1c]
mov r4, #0
b _020EB650
_020EB338:
cmp r5, #8
bgt _020EB370
cmp r5, #0
addge pc, pc, r5, lsl #2
b _020EB650
_020EB34C: ; jump table
b _020EB650 ; case 0
b _020EB37C ; case 1
b _020EB428 ; case 2
b _020EB650 ; case 3
b _020EB464 ; case 4
b _020EB650 ; case 5
b _020EB650 ; case 6
b _020EB650 ; case 7
b _020EB4A4 ; case 8
_020EB370:
cmp r5, #0x10
beq _020EB4A4
b _020EB650
_020EB37C:
cmp r8, #0
blt _020EB38C
cmp r8, #0x80
blt _020EB394
_020EB38C:
mov r0, #0
b _020EB3A4
_020EB394:
ldr r0, _020EB6C4 ; =__msl_digit
mov r1, r8, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #0x100
_020EB3A4:
cmp r0, #0
beq _020EB3D0
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
blx sl
mov r8, r0
ldr r0, [sp, #0x18]
add r0, r0, #1
str r0, [sp, #0x18]
b _020EB650
_020EB3D0:
cmp r8, #0x2b
bne _020EB3F4
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
add r6, r6, #1
blx sl
mov r8, r0
b _020EB420
_020EB3F4:
cmp r8, #0x2d
bne _020EB420
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
add r6, r6, #1
blx sl
mov r8, r0
ldr r0, [sp, #0x44]
mov r1, #1
str r1, [r0]
_020EB420:
mov r5, #2
b _020EB650
_020EB428:
cmp sb, #0
cmpne sb, #0x10
bne _020EB45C
cmp r8, #0x30
bne _020EB45C
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
mov r5, #4
add r6, r6, #1
blx sl
mov r8, r0
b _020EB650
_020EB45C:
mov r5, #8
b _020EB650
_020EB464:
cmp r8, #0x58
cmpne r8, #0x78
bne _020EB494
mov r1, #0
ldr r0, [sp, #4]
mov r2, r1
mov sb, #0x10
mov r5, #8
add r6, r6, #1
blx sl
mov r8, r0
b _020EB650
_020EB494:
cmp sb, #0
moveq sb, #8
mov r5, #0x10
b _020EB650
_020EB4A4:
ldr r1, [sp, #0xc]
mov r0, #0
cmp sb, #0
moveq sb, #0xa
cmp r1, r0
cmpeq r7, r4
bne _020EB4DC
ldr r0, [sp, #0x1c]
mov r3, sb, asr #0x1f
mov r1, r0
mov r2, sb
bl _ll_udiv
mov r7, r0
str r1, [sp, #0xc]
_020EB4DC:
cmp r8, #0
blt _020EB4EC
cmp r8, #0x80
blt _020EB4F4
_020EB4EC:
mov r0, #0
b _020EB504
_020EB4F4:
ldr r0, _020EB6C4 ; =__msl_digit
mov r1, r8, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #8
_020EB504:
cmp r0, #0
beq _020EB52C
sub r8, r8, #0x30
cmp r8, sb
blt _020EB5B4
cmp r5, #0x10
moveq r5, #0x20
movne r5, #0x40
add r8, r8, #0x30
b _020EB650
_020EB52C:
cmp r8, #0
blt _020EB53C
cmp r8, #0x80
blt _020EB544
_020EB53C:
mov r0, #0
b _020EB554
_020EB544:
ldr r0, _020EB6C4 ; =__msl_digit
mov r1, r8, lsl #1
ldrh r0, [r0, r1]
and r0, r0, #1
_020EB554:
cmp r0, #0
beq _020EB588
cmp r8, #0
blt _020EB56C
cmp r8, #0x80
blt _020EB574
_020EB56C:
mov r0, r8
b _020EB57C
_020EB574:
ldr r0, _020EB6C8 ; =__upper_mapC
ldrb r0, [r0, r8]
_020EB57C:
sub r0, r0, #0x37
cmp r0, sb
blt _020EB598
_020EB588:
cmp r5, #0x10
moveq r5, #0x20
movne r5, #0x40
b _020EB650
_020EB598:
cmp r8, #0
blt _020EB5B0
cmp r8, #0x80
bge _020EB5B0
ldr r0, _020EB6C8 ; =__upper_mapC
ldrb r8, [r0, r8]
_020EB5B0:
sub r8, r8, #0x37
_020EB5B4:
ldr r1, [sp, #0x14]
ldr r0, [sp, #0xc]
ldr r3, [sp, #0x10]
cmp r1, r0
ldr r0, [sp, #0x10]
mov r5, sb, asr #0x1f
cmpeq r0, r7
ldrhi r0, [sp, #0x48]
movhi r1, #1
strhi r1, [r0]
umull r0, r1, r3, sb
mla r1, r3, r5, r1
ldr r3, [sp, #0x14]
str r0, [sp, #0x10]
mla r1, r3, sb, r1
ldr r3, [sp, #0x1c]
mov r2, r8, asr #0x1f
subs r3, r3, r0
ldr r0, [sp, #0x1c]
str r1, [sp, #0x14]
sbc r0, r0, r1
cmp r2, r0
cmpeq r8, r3
ldrhi r0, [sp, #0x48]
movhi r1, #1
strhi r1, [r0]
ldr r0, [sp, #0x10]
mov r1, #0
adds r0, r0, r8
str r0, [sp, #0x10]
ldr r0, [sp, #0x14]
mov r5, #0x10
adc r0, r0, r2
str r0, [sp, #0x14]
ldr r0, [sp, #4]
mov r2, r1
add r6, r6, #1
blx sl
mov r8, r0
_020EB650:
ldr r0, [sp]
cmp r6, r0
bgt _020EB670
ldr r0, [sp, #0x1c]
cmp r8, r0
beq _020EB670
tst r5, #0x60
beq _020EB338
_020EB670:
tst r5, #0x34
bne _020EB690
mov r0, #0
str r0, [sp, #0x10]
str r0, [sp, #0x14]
mov r1, r0
ldr r0, [sp, #0x40]
b _020EB6A0
_020EB690:
ldr r0, [sp, #0x18]
sub r1, r6, #1
add r1, r1, r0
ldr r0, [sp, #0x40]
_020EB6A0:
str r1, [r0]
ldr r0, [sp, #4]
mov r1, r8
mov r2, #1
blx sl
ldr r0, [sp, #0x10]
ldr r1, [sp, #0x14]
add sp, sp, #0x20
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc}
.align 2, 0
_020EB6C4: .word __msl_digit
_020EB6C8: .word __upper_mapC
arm_func_end __strtoull
arm_func_start strtoul
strtoul: ; 0x020EB6CC
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #0x20
mov r5, r0
mov lr, #0
mov r0, r2
mov r4, r1
add r2, sp, #0x1c
str r5, [sp, #0xc]
str lr, [sp, #0x10]
str r2, [sp]
add r1, sp, #0x18
str r1, [sp, #4]
add ip, sp, #0x14
ldr r2, _020EB75C ; =__StringRead
add r3, sp, #0xc
sub r1, lr, #0x80000001
str ip, [sp, #8]
bl __strtoul
cmp r4, #0
ldrne r1, [sp, #0x1c]
addne r1, r5, r1
strne r1, [r4]
ldr r1, [sp, #0x14]
cmp r1, #0
beq _020EB748
ldr r0, _020EB760 ; =errno
mov r1, #0x22
str r1, [r0]
add sp, sp, #0x20
mvn r0, #0
ldmia sp!, {r3, r4, r5, pc}
_020EB748:
ldr r1, [sp, #0x18]
cmp r1, #0
rsbne r0, r0, #0
add sp, sp, #0x20
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020EB75C: .word __StringRead
_020EB760: .word errno
arm_func_end strtoul
arm_func_start strtol
strtol: ; 0x020EB764
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #0x20
mov r5, r0
mov lr, #0
mov r0, r2
mov r4, r1
add r2, sp, #0x1c
str r5, [sp, #0xc]
str lr, [sp, #0x10]
str r2, [sp]
add r1, sp, #0x18
str r1, [sp, #4]
add ip, sp, #0x14
ldr r2, _020EB824 ; =__StringRead
add r3, sp, #0xc
sub r1, lr, #0x80000001
str ip, [sp, #8]
bl __strtoul
cmp r4, #0
ldrne r1, [sp, #0x1c]
addne r1, r5, r1
strne r1, [r4]
ldr r1, [sp, #0x14]
cmp r1, #0
bne _020EB7F0
ldr r2, [sp, #0x18]
cmp r2, #0
bne _020EB7E0
mvn r1, #0x80000000
cmp r0, r1
bhi _020EB7F0
_020EB7E0:
cmp r2, #0
beq _020EB814
cmp r0, #0x80000000
bls _020EB814
_020EB7F0:
ldr r0, [sp, #0x18]
ldr r1, _020EB828 ; =errno
mov r2, #0x22
cmp r0, #0
movne r0, #0x80000000
str r2, [r1]
add sp, sp, #0x20
mvneq r0, #0x80000000
ldmia sp!, {r3, r4, r5, pc}
_020EB814:
cmp r2, #0
rsbne r0, r0, #0
add sp, sp, #0x20
ldmia sp!, {r3, r4, r5, pc}
.align 2, 0
_020EB824: .word __StringRead
_020EB828: .word errno
arm_func_end strtol
arm_func_start atoi
atoi: ; 0x020EB82C
ldr ip, _020EB83C ; =strtol
mov r1, #0
mov r2, #0xa
bx ip
.align 2, 0
_020EB83C: .word strtol
arm_func_end atoi
arm_func_start fwide
fwide: ; 0x020EB840
cmp r0, #0
@ -12330,11 +11599,6 @@ _02111848:
.word _ZSt9dthandlerv
.word _ZSt9duhandlerv
exception __strtoul, 0x03E9, 0x0060FF00
exception __strtoull, 0x046D, 0x00807F00
exception strtoul, 0x0099, 0x00600300
exception strtol, 0x00C9, 0x00600300
exception atoi, 0x0015, 0x00000000
exception wmemcpy, 0x0011, 0x00000000
exception long2str__wprintf, 0x0251, 0x0090FF20
exception longlong2str__wprintf, 0x0301, 0x00A0FF20

View File

@ -435,6 +435,7 @@ Static main
Object lib/MSL_C/asm/MSL_Common_signal.o
Object lib/MSL_C/asm/MSL_Common_string.o
Object lib/MSL_C/asm/MSL_Common_strtold.o
Object lib/MSL_C/asm/MSL_Common_strtoul.o
Object lib/asm/msl.o
}