From cb87c94469c54aac982bf465df746bd4cc61ba69 Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 24 Feb 2025 18:30:03 +0000 Subject: [PATCH] split MSL_Common_strtoul.s --- lib/MSL_C/asm/MSL_Common_strtoul.s | 742 ++++++++++++++++++ lib/MSL_C/asm/include/MSL_Common_strtoul.inc | 8 + lib/NitroDWC/asm/include/overlay_00_arm.inc | 2 +- lib/NitroDWC/asm/include/overlay_13_arm_2.inc | 2 +- lib/NitroDWC/asm/include/overlay_38_arm.inc | 2 +- lib/NitroDWC/asm/include/overlay_45_arm.inc | 2 +- lib/NitroDWC/asm/overlay_00_arm.s | 158 ++-- lib/NitroDWC/asm/overlay_13_arm_2.s | 4 +- lib/NitroDWC/asm/overlay_38_arm.s | 4 +- lib/NitroDWC/asm/overlay_45_arm.s | 16 +- lib/asm/include/msl.inc | 2 +- lib/asm/msl.s | 736 ----------------- main.lsf | 1 + 13 files changed, 847 insertions(+), 832 deletions(-) create mode 100644 lib/MSL_C/asm/MSL_Common_strtoul.s create mode 100644 lib/MSL_C/asm/include/MSL_Common_strtoul.inc diff --git a/lib/MSL_C/asm/MSL_Common_strtoul.s b/lib/MSL_C/asm/MSL_Common_strtoul.s new file mode 100644 index 000000000..f4379d8c5 --- /dev/null +++ b/lib/MSL_C/asm/MSL_Common_strtoul.s @@ -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 diff --git a/lib/MSL_C/asm/include/MSL_Common_strtoul.inc b/lib/MSL_C/asm/include/MSL_Common_strtoul.inc new file mode 100644 index 000000000..ebbe46d52 --- /dev/null +++ b/lib/MSL_C/asm/include/MSL_Common_strtoul.inc @@ -0,0 +1,8 @@ +#include +#pragma once +.public _u32_div_f +.public __msl_digit +.public __upper_mapC +.public _ll_udiv +.public __StringRead +.public errno diff --git a/lib/NitroDWC/asm/include/overlay_00_arm.inc b/lib/NitroDWC/asm/include/overlay_00_arm.inc index 607dbb988..2b8b4ba3a 100644 --- a/lib/NitroDWC/asm/include/overlay_00_arm.inc +++ b/lib/NitroDWC/asm/include/overlay_00_arm.inc @@ -144,7 +144,7 @@ .public atod .public strtoul .public strtol -.public atoi +.public atol .public wcslen .public strnicmp .public _dadd diff --git a/lib/NitroDWC/asm/include/overlay_13_arm_2.inc b/lib/NitroDWC/asm/include/overlay_13_arm_2.inc index fa251e632..1ec6bb1bb 100644 --- a/lib/NitroDWC/asm/include/overlay_13_arm_2.inc +++ b/lib/NitroDWC/asm/include/overlay_13_arm_2.inc @@ -189,7 +189,7 @@ .public memcmp .public strlen .public strncpy -.public atoi +.public atol .public swprintf .public _ll_udiv .public _ull_mod diff --git a/lib/NitroDWC/asm/include/overlay_38_arm.inc b/lib/NitroDWC/asm/include/overlay_38_arm.inc index 9d19d49e0..96ab4989d 100644 --- a/lib/NitroDWC/asm/include/overlay_38_arm.inc +++ b/lib/NitroDWC/asm/include/overlay_38_arm.inc @@ -48,7 +48,7 @@ .public strchr .public strspn .public strstr -.public atoi +.public atol .public _ll_udiv .public _u32_div_f .public __msl_digit diff --git a/lib/NitroDWC/asm/include/overlay_45_arm.inc b/lib/NitroDWC/asm/include/overlay_45_arm.inc index 84c8fcc40..6de975131 100644 --- a/lib/NitroDWC/asm/include/overlay_45_arm.inc +++ b/lib/NitroDWC/asm/include/overlay_45_arm.inc @@ -32,7 +32,7 @@ .public strstr .public strtoul .public strtol -.public atoi +.public atol .public strnicmp .public _s32_div_f .public _u32_div_f diff --git a/lib/NitroDWC/asm/overlay_00_arm.s b/lib/NitroDWC/asm/overlay_00_arm.s index dac6c55b4..dae10c622 100644 --- a/lib/NitroDWC/asm/overlay_00_arm.s +++ b/lib/NitroDWC/asm/overlay_00_arm.s @@ -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 diff --git a/lib/NitroDWC/asm/overlay_13_arm_2.s b/lib/NitroDWC/asm/overlay_13_arm_2.s index 5280ca346..333e611b6 100644 --- a/lib/NitroDWC/asm/overlay_13_arm_2.s +++ b/lib/NitroDWC/asm/overlay_13_arm_2.s @@ -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 diff --git a/lib/NitroDWC/asm/overlay_38_arm.s b/lib/NitroDWC/asm/overlay_38_arm.s index 988e902e0..132a230ee 100644 --- a/lib/NitroDWC/asm/overlay_38_arm.s +++ b/lib/NitroDWC/asm/overlay_38_arm.s @@ -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 diff --git a/lib/NitroDWC/asm/overlay_45_arm.s b/lib/NitroDWC/asm/overlay_45_arm.s index 398def87e..ab5eb100e 100644 --- a/lib/NitroDWC/asm/overlay_45_arm.s +++ b/lib/NitroDWC/asm/overlay_45_arm.s @@ -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] diff --git a/lib/asm/include/msl.inc b/lib/asm/include/msl.inc index 3c54564eb..fc9fbcb92 100644 --- a/lib/asm/include/msl.inc +++ b/lib/asm/include/msl.inc @@ -42,7 +42,7 @@ .public atod .public strtoul .public strtol -.public atoi +.public atol .public swprintf .public wcslen .public pow diff --git a/lib/asm/msl.s b/lib/asm/msl.s index 8b2f4294b..4e302fe9a 100644 --- a/lib/asm/msl.s +++ b/lib/asm/msl.s @@ -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 diff --git a/main.lsf b/main.lsf index 5354fe45b..f0431c11b 100644 --- a/main.lsf +++ b/main.lsf @@ -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 }