diff --git a/Makefile b/Makefile index d67648afe..b27b273a8 100644 --- a/Makefile +++ b/Makefile @@ -61,6 +61,7 @@ asm/libagbbackup.o \ asm/librtc.o \ asm/librfu.o \ asm/libagbsyscall.o \ +asm/libgcc.o \ asm/libc.o DATA_ASM_OBJS := data/data1.o data/data2.o diff --git a/asm/dma3_manager.s b/asm/dma3_manager.s index 15c4fbc89..6be63dabb 100644 --- a/asm/dma3_manager.s +++ b/asm/dma3_manager.s @@ -1,4 +1,5 @@ .include "asm/macros.s" + .include "constants/gba_constants.s" .syntax unified diff --git a/asm/libgcc.s b/asm/libgcc.s new file mode 100644 index 000000000..976bc5dc9 --- /dev/null +++ b/asm/libgcc.s @@ -0,0 +1,5033 @@ + .include "asm/macros.s" + .include "constants/constants.s" + + .syntax unified + + .text + + thumb_func_start _call_via_r0 +_call_via_r0: @ 82E70D0 + bx r0 + mov r8, r8 + thumb_func_end _call_via_r0 + + thumb_func_start _call_via_r1 +_call_via_r1: @ 82E70D4 + bx r1 + mov r8, r8 + thumb_func_end _call_via_r1 + + thumb_func_start _call_via_r2 +_call_via_r2: @ 82E70D8 + bx r2 + mov r8, r8 + thumb_func_end _call_via_r2 + + thumb_func_start _call_via_r3 +_call_via_r3: @ 82E70DC + bx r3 + mov r8, r8 + thumb_func_end _call_via_r3 + + thumb_func_start _call_via_r4 +_call_via_r4: @ 82E70E0 + bx r4 + mov r8, r8 + thumb_func_end _call_via_r4 + + thumb_func_start _call_via_r5 +_call_via_r5: @ 82E70E4 + bx r5 + mov r8, r8 + thumb_func_end _call_via_r5 + + thumb_func_start _call_via_r6 +_call_via_r6: @ 82E70E8 + bx r6 + mov r8, r8 + thumb_func_end _call_via_r6 + + thumb_func_start _call_via_r7 +_call_via_r7: @ 82E70EC + bx r7 + mov r8, r8 + thumb_func_end _call_via_r7 + + thumb_func_start _call_via_r8 +_call_via_r8: @ 82E70F0 + bx r8 + mov r8, r8 + thumb_func_end _call_via_r8 + + thumb_func_start _call_via_r9 +_call_via_r9: @ 82E70F4 + bx r9 + mov r8, r8 + thumb_func_end _call_via_r9 + + thumb_func_start _call_via_sl +_call_via_sl: @ 82E70F8 + bx r10 + mov r8, r8 + thumb_func_end _call_via_sl + + thumb_func_start _call_via_fp +_call_via_fp: @ 82E70FC + bx r11 + mov r8, r8 + thumb_func_end _call_via_fp + + thumb_func_start _call_via_ip +_call_via_ip: @ 82E7100 + bx r12 + mov r8, r8 + thumb_func_end _call_via_ip + + thumb_func_start _call_via_sp +_call_via_sp: @ 82E7104 + bx sp + mov r8, r8 + thumb_func_end _call_via_sp + + thumb_func_start _call_via_lr +_call_via_lr: @ 82E7108 + bx lr + mov r8, r8 + thumb_func_end _call_via_lr + + thumb_func_start __divdi3 +__divdi3: @ 82E710C + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x34 + movs r4, 0 + str r4, [sp] + adds r5, r1, 0 + adds r4, r0, 0 + cmp r5, 0 + bge _082E713C + ldr r0, [sp] + mvns r0, r0 + str r0, [sp] + negs r0, r4 + adds r6, r0, 0 + negs r1, r5 + cmp r0, 0 + beq _082E7136 + subs r1, 0x1 +_082E7136: + adds r7, r1, 0 + adds r5, r7, 0 + adds r4, r6, 0 +_082E713C: + cmp r3, 0 + bge _082E7158 + ldr r1, [sp] + mvns r1, r1 + str r1, [sp] + negs r0, r2 + str r0, [sp, 0x4] + negs r2, r3 + cmp r0, 0 + beq _082E7152 + subs r2, 0x1 +_082E7152: + str r2, [sp, 0x8] + ldr r2, [sp, 0x4] + ldr r3, [sp, 0x8] +_082E7158: + adds r7, r2, 0 + adds r6, r3, 0 + mov r10, r4 + mov r8, r5 + cmp r6, 0 + beq _082E7166 + b _082E73B4 +_082E7166: + cmp r7, r8 + bls _082E7240 + ldr r0, _082E717C + cmp r7, r0 + bhi _082E7180 + movs r1, 0 + cmp r7, 0xFF + bls _082E718A + movs r1, 0x8 + b _082E718A + .align 2, 0 +_082E717C: .4byte 0x0000ffff +_082E7180: + ldr r0, _082E7234 + movs r1, 0x18 + cmp r7, r0 + bhi _082E718A + movs r1, 0x10 +_082E718A: + ldr r0, _082E7238 + lsrs r2, r1 + adds r0, r2, r0 + ldrb r0, [r0] + adds r0, r1 + movs r1, 0x20 + subs r2, r1, r0 + cmp r2, 0 + beq _082E71B2 + lsls r7, r2 + mov r3, r8 + lsls r3, r2 + subs r1, r2 + mov r0, r10 + lsrs r0, r1 + orrs r3, r0 + mov r8, r3 + mov r4, r10 + lsls r4, r2 + mov r10, r4 +_082E71B2: + lsrs r0, r7, 16 + mov r9, r0 + ldr r1, _082E723C + ands r1, r7 + str r1, [sp, 0xC] + mov r0, r8 + mov r1, r9 + bl __umodsi3 + adds r4, r0, 0 + mov r0, r8 + mov r1, r9 + bl __udivsi3 + adds r6, r0, 0 + ldr r3, [sp, 0xC] + adds r2, r6, 0 + muls r2, r3 + lsls r4, 16 + mov r1, r10 + lsrs r0, r1, 16 + orrs r4, r0 + cmp r4, r2 + bcs _082E71F2 + subs r6, 0x1 + adds r4, r7 + cmp r4, r7 + bcc _082E71F2 + cmp r4, r2 + bcs _082E71F2 + subs r6, 0x1 + adds r4, r7 +_082E71F2: + subs r4, r2 + adds r0, r4, 0 + mov r1, r9 + bl __umodsi3 + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, r9 + bl __udivsi3 + adds r1, r0, 0 + ldr r3, [sp, 0xC] + adds r2, r1, 0 + muls r2, r3 + lsls r5, 16 + ldr r0, _082E723C + mov r4, r10 + ands r4, r0 + orrs r5, r4 + cmp r5, r2 + bcs _082E722A + subs r1, 0x1 + adds r5, r7 + cmp r5, r7 + bcc _082E722A + cmp r5, r2 + bcs _082E722A + subs r1, 0x1 +_082E722A: + lsls r6, 16 + orrs r6, r1 + movs r0, 0 + str r0, [sp, 0x10] + b _082E750A + .align 2, 0 +_082E7234: .4byte 0x00ffffff +_082E7238: .4byte gUnknown_089A3270 +_082E723C: .4byte 0x0000ffff +_082E7240: + cmp r2, 0 + bne _082E724E + movs r0, 0x1 + movs r1, 0 + bl __udivsi3 + adds r7, r0, 0 +_082E724E: + adds r1, r7, 0 + ldr r0, _082E7260 + cmp r7, r0 + bhi _082E7264 + movs r2, 0 + cmp r7, 0xFF + bls _082E726E + movs r2, 0x8 + b _082E726E + .align 2, 0 +_082E7260: .4byte 0x0000ffff +_082E7264: + ldr r0, _082E728C + movs r2, 0x18 + cmp r7, r0 + bhi _082E726E + movs r2, 0x10 +_082E726E: + ldr r0, _082E7290 + lsrs r1, r2 + adds r0, r1, r0 + ldrb r0, [r0] + adds r0, r2 + movs r1, 0x20 + subs r2, r1, r0 + cmp r2, 0 + bne _082E7294 + mov r1, r8 + subs r1, r7 + mov r8, r1 + movs r2, 0x1 + str r2, [sp, 0x10] + b _082E7332 + .align 2, 0 +_082E728C: .4byte 0x00ffffff +_082E7290: .4byte gUnknown_089A3270 +_082E7294: + subs r1, r2 + lsls r7, r2 + mov r5, r8 + lsrs r5, r1 + mov r3, r8 + lsls r3, r2 + mov r0, r10 + lsrs r0, r1 + orrs r3, r0 + mov r8, r3 + mov r4, r10 + lsls r4, r2 + mov r10, r4 + lsrs r0, r7, 16 + mov r9, r0 + ldr r1, _082E73B0 + ands r1, r7 + str r1, [sp, 0x14] + adds r0, r5, 0 + mov r1, r9 + bl __umodsi3 + adds r4, r0, 0 + adds r0, r5, 0 + mov r1, r9 + bl __udivsi3 + adds r6, r0, 0 + ldr r2, [sp, 0x14] + adds r1, r6, 0 + muls r1, r2 + lsls r4, 16 + mov r3, r8 + lsrs r0, r3, 16 + orrs r4, r0 + cmp r4, r1 + bcs _082E72EE + subs r6, 0x1 + adds r4, r7 + cmp r4, r7 + bcc _082E72EE + cmp r4, r1 + bcs _082E72EE + subs r6, 0x1 + adds r4, r7 +_082E72EE: + subs r4, r1 + adds r0, r4, 0 + mov r1, r9 + bl __umodsi3 + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, r9 + bl __udivsi3 + adds r2, r0, 0 + ldr r4, [sp, 0x14] + adds r1, r2, 0 + muls r1, r4 + lsls r5, 16 + ldr r0, _082E73B0 + mov r3, r8 + ands r3, r0 + orrs r5, r3 + cmp r5, r1 + bcs _082E7328 + subs r2, 0x1 + adds r5, r7 + cmp r5, r7 + bcc _082E7328 + cmp r5, r1 + bcs _082E7328 + subs r2, 0x1 + adds r5, r7 +_082E7328: + lsls r6, 16 + orrs r6, r2 + str r6, [sp, 0x10] + subs r1, r5, r1 + mov r8, r1 +_082E7332: + lsrs r4, r7, 16 + mov r9, r4 + ldr r0, _082E73B0 + ands r0, r7 + str r0, [sp, 0x18] + mov r0, r8 + mov r1, r9 + bl __umodsi3 + adds r4, r0, 0 + mov r0, r8 + mov r1, r9 + bl __udivsi3 + adds r6, r0, 0 + ldr r1, [sp, 0x18] + adds r2, r6, 0 + muls r2, r1 + lsls r4, 16 + mov r3, r10 + lsrs r0, r3, 16 + orrs r4, r0 + cmp r4, r2 + bcs _082E7372 + subs r6, 0x1 + adds r4, r7 + cmp r4, r7 + bcc _082E7372 + cmp r4, r2 + bcs _082E7372 + subs r6, 0x1 + adds r4, r7 +_082E7372: + subs r4, r2 + adds r0, r4, 0 + mov r1, r9 + bl __umodsi3 + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, r9 + bl __udivsi3 + adds r1, r0, 0 + ldr r4, [sp, 0x18] + adds r2, r1, 0 + muls r2, r4 + lsls r5, 16 + ldr r0, _082E73B0 + mov r3, r10 + ands r3, r0 + orrs r5, r3 + cmp r5, r2 + bcs _082E73AA + subs r1, 0x1 + adds r5, r7 + cmp r5, r7 + bcc _082E73AA + cmp r5, r2 + bcs _082E73AA + subs r1, 0x1 +_082E73AA: + lsls r6, 16 + orrs r6, r1 + b _082E750A + .align 2, 0 +_082E73B0: .4byte 0x0000ffff +_082E73B4: + cmp r6, r8 + bls _082E73C0 + movs r6, 0 + movs r4, 0 + str r4, [sp, 0x10] + b _082E750A +_082E73C0: + adds r1, r6, 0 + ldr r0, _082E73D4 + cmp r6, r0 + bhi _082E73D8 + movs r2, 0 + cmp r6, 0xFF + bls _082E73E2 + movs r2, 0x8 + b _082E73E2 + .align 2, 0 +_082E73D4: .4byte 0x0000ffff +_082E73D8: + ldr r0, _082E7404 + movs r2, 0x18 + cmp r6, r0 + bhi _082E73E2 + movs r2, 0x10 +_082E73E2: + ldr r0, _082E7408 + lsrs r1, r2 + adds r0, r1, r0 + ldrb r0, [r0] + adds r0, r2 + movs r1, 0x20 + subs r2, r1, r0 + cmp r2, 0 + bne _082E7410 + cmp r8, r6 + bhi _082E73FC + cmp r10, r7 + bcc _082E740C +_082E73FC: + movs r6, 0x1 + mov r1, r10 + b _082E7504 + .align 2, 0 +_082E7404: .4byte 0x00ffffff +_082E7408: .4byte gUnknown_089A3270 +_082E740C: + movs r6, 0 + b _082E7506 +_082E7410: + subs r1, r2 + lsls r6, r2 + adds r0, r7, 0 + lsrs r0, r1 + orrs r6, r0 + lsls r7, r2 + mov r5, r8 + lsrs r5, r1 + mov r3, r8 + lsls r3, r2 + mov r0, r10 + lsrs r0, r1 + orrs r3, r0 + mov r8, r3 + mov r4, r10 + lsls r4, r2 + mov r10, r4 + lsrs r0, r6, 16 + mov r9, r0 + ldr r1, _082E753C + ands r1, r6 + str r1, [sp, 0x1C] + adds r0, r5, 0 + mov r1, r9 + bl __umodsi3 + adds r4, r0, 0 + adds r0, r5, 0 + mov r1, r9 + bl __udivsi3 + adds r3, r0, 0 + ldr r2, [sp, 0x1C] + adds r1, r3, 0 + muls r1, r2 + lsls r4, 16 + mov r2, r8 + lsrs r0, r2, 16 + orrs r4, r0 + cmp r4, r1 + bcs _082E7472 + subs r3, 0x1 + adds r4, r6 + cmp r4, r6 + bcc _082E7472 + cmp r4, r1 + bcs _082E7472 + subs r3, 0x1 + adds r4, r6 +_082E7472: + subs r4, r1 + adds r0, r4, 0 + mov r1, r9 + str r3, [sp, 0x30] + bl __umodsi3 + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, r9 + bl __udivsi3 + adds r2, r0, 0 + ldr r4, [sp, 0x1C] + adds r1, r2, 0 + muls r1, r4 + lsls r5, 16 + ldr r0, _082E753C + mov r4, r8 + ands r4, r0 + orrs r5, r4 + ldr r3, [sp, 0x30] + cmp r5, r1 + bcs _082E74B0 + subs r2, 0x1 + adds r5, r6 + cmp r5, r6 + bcc _082E74B0 + cmp r5, r1 + bcs _082E74B0 + subs r2, 0x1 + adds r5, r6 +_082E74B0: + lsls r6, r3, 16 + orrs r6, r2 + subs r1, r5, r1 + mov r8, r1 + ldr r0, _082E753C + mov r9, r0 + adds r1, r6, 0 + ands r1, r0 + lsrs r3, r6, 16 + adds r0, r7, 0 + mov r2, r9 + ands r0, r2 + lsrs r2, r7, 16 + adds r5, r1, 0 + muls r5, r0 + adds r4, r1, 0 + muls r4, r2 + adds r1, r3, 0 + muls r1, r0 + muls r3, r2 + lsrs r0, r5, 16 + adds r4, r0 + adds r4, r1 + cmp r4, r1 + bcs _082E74E8 + movs r0, 0x80 + lsls r0, 9 + adds r3, r0 +_082E74E8: + lsrs r0, r4, 16 + adds r3, r0 + mov r1, r9 + ands r4, r1 + lsls r0, r4, 16 + ands r5, r1 + adds r1, r0, r5 + cmp r3, r8 + bhi _082E7502 + cmp r3, r8 + bne _082E7506 + cmp r1, r10 + bls _082E7506 +_082E7502: + subs r6, 0x1 +_082E7504: + subs r0, r1, r7 +_082E7506: + movs r2, 0 + str r2, [sp, 0x10] +_082E750A: + str r6, [sp, 0x20] + ldr r3, [sp, 0x10] + str r3, [sp, 0x24] + ldr r1, [sp, 0x20] + ldr r2, [sp, 0x24] + ldr r4, [sp] + cmp r4, 0 + beq _082E752C + negs r0, r1 + str r0, [sp, 0x28] + negs r1, r2 + cmp r0, 0 + beq _082E7526 + subs r1, 0x1 +_082E7526: + str r1, [sp, 0x2C] + ldr r1, [sp, 0x28] + ldr r2, [sp, 0x2C] +_082E752C: + adds r0, r1, 0 + adds r1, r2, 0 + add sp, 0x34 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7,pc} + .align 2, 0 +_082E753C: .4byte 0x0000ffff + thumb_func_end __divdi3 + + thumb_func_start __divsi3 +@ int __divsi3(int dividend, int divisor) +__divsi3: @ 82E7540 + cmp r1, 0 + beq _082E75C8 + push {r4} + adds r4, r0, 0 + eors r4, r1 + mov r12, r4 + movs r3, 0x1 + movs r2, 0 + cmp r1, 0 + bpl _082E7556 + negs r1, r1 +_082E7556: + cmp r0, 0 + bpl _082E755C + negs r0, r0 +_082E755C: + cmp r0, r1 + bcc _082E75BA + movs r4, 0x1 + lsls r4, 28 +_082E7564: + cmp r1, r4 + bcs _082E7572 + cmp r1, r0 + bcs _082E7572 + lsls r1, 4 + lsls r3, 4 + b _082E7564 +_082E7572: + lsls r4, 3 +_082E7574: + cmp r1, r4 + bcs _082E7582 + cmp r1, r0 + bcs _082E7582 + lsls r1, 1 + lsls r3, 1 + b _082E7574 +_082E7582: + cmp r0, r1 + bcc _082E758A + subs r0, r1 + orrs r2, r3 +_082E758A: + lsrs r4, r1, 1 + cmp r0, r4 + bcc _082E7596 + subs r0, r4 + lsrs r4, r3, 1 + orrs r2, r4 +_082E7596: + lsrs r4, r1, 2 + cmp r0, r4 + bcc _082E75A2 + subs r0, r4 + lsrs r4, r3, 2 + orrs r2, r4 +_082E75A2: + lsrs r4, r1, 3 + cmp r0, r4 + bcc _082E75AE + subs r0, r4 + lsrs r4, r3, 3 + orrs r2, r4 +_082E75AE: + cmp r0, 0 + beq _082E75BA + lsrs r3, 4 + beq _082E75BA + lsrs r1, 4 + b _082E7582 +_082E75BA: + adds r0, r2, 0 + mov r4, r12 + cmp r4, 0 + bpl _082E75C4 + negs r0, r0 +_082E75C4: + pop {r4} + mov pc, lr +_082E75C8: + push {lr} + bl nullsub_1 + movs r0, 0 + pop {pc} + thumb_func_end __divsi3 + + thumb_func_start nullsub_1 +nullsub_1: @ 82E75D4 + mov pc, lr + thumb_func_end nullsub_1 + + thumb_func_start __fixunsdfsi +__fixunsdfsi: @ 82E75D8 + push {r4,r5,lr} + adds r5, r1, 0 + adds r4, r0, 0 + ldr r3, _082E75F8 + ldr r2, _082E75F4 + bl __gedf2 + cmp r0, 0 + bge _082E75FC + adds r1, r5, 0 + adds r0, r4, 0 + bl __fixdfsi + b _082E7612 + .align 2, 0 +_082E75F4: .4byte 0x41e00000 +_082E75F8: .4byte 0x00000000 +_082E75FC: + ldr r3, _082E7618 + ldr r2, _082E7614 + adds r1, r5, 0 + adds r0, r4, 0 + bl __adddf3 + bl __fixdfsi + movs r1, 0x80 + lsls r1, 24 + adds r0, r1 +_082E7612: + pop {r4,r5,pc} + .align 2, 0 +_082E7614: .4byte 0xc1e00000 +_082E7618: .4byte 0x00000000 + thumb_func_end __fixunsdfsi + + thumb_func_start __fixunssfsi +__fixunssfsi: @ 82E761C + push {r4,lr} + adds r4, r0, 0 + ldr r1, _082E7634 + bl __gesf2 + cmp r0, 0 + bge _082E7638 + adds r0, r4, 0 + bl __fixsfsi + b _082E764A + .align 2, 0 +_082E7634: .4byte 0x4f000000 +_082E7638: + ldr r1, _082E764C + adds r0, r4, 0 + bl __addsf3 + bl __fixsfsi + movs r1, 0x80 + lsls r1, 24 + adds r0, r1 +_082E764A: + pop {r4,pc} + .align 2, 0 +_082E764C: .4byte 0xcf000000 + thumb_func_end __fixunssfsi + + thumb_func_start __modsi3 +__modsi3: @ 82E7650 + movs r3, 0x1 + cmp r1, 0 + beq _082E7714 + bpl _082E765A + negs r1, r1 +_082E765A: + push {r4} + push {r0} + cmp r0, 0 + bpl _082E7664 + negs r0, r0 +_082E7664: + cmp r0, r1 + bcc _082E7708 + movs r4, 0x1 + lsls r4, 28 +_082E766C: + cmp r1, r4 + bcs _082E767A + cmp r1, r0 + bcs _082E767A + lsls r1, 4 + lsls r3, 4 + b _082E766C +_082E767A: + lsls r4, 3 +_082E767C: + cmp r1, r4 + bcs _082E768A + cmp r1, r0 + bcs _082E768A + lsls r1, 1 + lsls r3, 1 + b _082E767C +_082E768A: + movs r2, 0 + cmp r0, r1 + bcc _082E7692 + subs r0, r1 +_082E7692: + lsrs r4, r1, 1 + cmp r0, r4 + bcc _082E76A4 + subs r0, r4 + mov r12, r3 + movs r4, 0x1 + rors r3, r4 + orrs r2, r3 + mov r3, r12 +_082E76A4: + lsrs r4, r1, 2 + cmp r0, r4 + bcc _082E76B6 + subs r0, r4 + mov r12, r3 + movs r4, 0x2 + rors r3, r4 + orrs r2, r3 + mov r3, r12 +_082E76B6: + lsrs r4, r1, 3 + cmp r0, r4 + bcc _082E76C8 + subs r0, r4 + mov r12, r3 + movs r4, 0x3 + rors r3, r4 + orrs r2, r3 + mov r3, r12 +_082E76C8: + mov r12, r3 + cmp r0, 0 + beq _082E76D6 + lsrs r3, 4 + beq _082E76D6 + lsrs r1, 4 + b _082E768A +_082E76D6: + movs r4, 0xE + lsls r4, 28 + ands r2, r4 + beq _082E7708 + mov r3, r12 + movs r4, 0x3 + rors r3, r4 + tst r2, r3 + beq _082E76EC + lsrs r4, r1, 3 + adds r0, r4 +_082E76EC: + mov r3, r12 + movs r4, 0x2 + rors r3, r4 + tst r2, r3 + beq _082E76FA + lsrs r4, r1, 2 + adds r0, r4 +_082E76FA: + mov r3, r12 + movs r4, 0x1 + rors r3, r4 + tst r2, r3 + beq _082E7708 + lsrs r4, r1, 1 + adds r0, r4 +_082E7708: + pop {r4} + cmp r4, 0 + bpl _082E7710 + negs r0, r0 +_082E7710: + pop {r4} + mov pc, lr +_082E7714: + push {lr} + bl nullsub_1 + movs r0, 0 + pop {pc} + thumb_func_end __modsi3 + + thumb_func_start __muldi3 +__muldi3: @ 82E7720 + push {r4-r7,lr} + sub sp, 0x10 + str r0, [sp] + str r1, [sp, 0x4] + str r2, [sp, 0x8] + str r3, [sp, 0xC] + ldr r3, [sp] + ldr r0, _082E778C + mov r12, r0 + adds r2, r3, 0 + ands r2, r0 + lsrs r3, 16 + ldr r1, [sp, 0x8] + adds r0, r1, 0 + mov r4, r12 + ands r0, r4 + lsrs r1, 16 + adds r5, r2, 0 + muls r5, r0 + adds r4, r2, 0 + muls r4, r1 + adds r2, r3, 0 + muls r2, r0 + muls r3, r1 + lsrs r0, r5, 16 + adds r4, r0 + adds r4, r2 + cmp r4, r2 + bcs _082E7760 + movs r0, 0x80 + lsls r0, 9 + adds r3, r0 +_082E7760: + lsrs r0, r4, 16 + adds r7, r3, r0 + mov r1, r12 + ands r4, r1 + lsls r0, r4, 16 + ands r5, r1 + adds r6, r0, 0 + orrs r6, r5 + adds r1, r7, 0 + adds r0, r6, 0 + ldr r3, [sp] + ldr r4, [sp, 0xC] + adds r2, r3, 0 + muls r2, r4 + ldr r5, [sp, 0x4] + ldr r4, [sp, 0x8] + adds r3, r5, 0 + muls r3, r4 + adds r2, r3 + adds r1, r7, r2 + add sp, 0x10 + pop {r4-r7,pc} + .align 2, 0 +_082E778C: .4byte 0x0000ffff + thumb_func_end __muldi3 + + thumb_func_start __udivdi3 +__udivdi3: @ 82E7790 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x20 + adds r7, r2, 0 + adds r6, r3, 0 + mov r10, r0 + mov r8, r1 + cmp r6, 0 + beq _082E77AA + b _082E79F8 +_082E77AA: + cmp r7, r8 + bls _082E7884 + ldr r0, _082E77C0 + cmp r7, r0 + bhi _082E77C4 + movs r1, 0 + cmp r7, 0xFF + bls _082E77CE + movs r1, 0x8 + b _082E77CE + .align 2, 0 +_082E77C0: .4byte 0x0000ffff +_082E77C4: + ldr r0, _082E7878 + movs r1, 0x18 + cmp r7, r0 + bhi _082E77CE + movs r1, 0x10 +_082E77CE: + ldr r0, _082E787C + lsrs r2, r1 + adds r0, r2, r0 + ldrb r0, [r0] + adds r0, r1 + movs r1, 0x20 + subs r2, r1, r0 + cmp r2, 0 + beq _082E77FA + lsls r7, r2 + mov r0, r8 + lsls r0, r2 + mov r8, r0 + subs r1, r2 + mov r0, r10 + lsrs r0, r1 + mov r1, r8 + orrs r1, r0 + mov r8, r1 + mov r3, r10 + lsls r3, r2 + mov r10, r3 +_082E77FA: + lsrs r4, r7, 16 + mov r9, r4 + ldr r0, _082E7880 + ands r0, r7 + str r0, [sp] + mov r0, r8 + mov r1, r9 + bl __umodsi3 + adds r4, r0, 0 + mov r0, r8 + mov r1, r9 + bl __udivsi3 + adds r6, r0, 0 + ldr r1, [sp] + adds r2, r6, 0 + muls r2, r1 + lsls r4, 16 + mov r3, r10 + lsrs r0, r3, 16 + orrs r4, r0 + cmp r4, r2 + bcs _082E783A + subs r6, 0x1 + adds r4, r7 + cmp r4, r7 + bcc _082E783A + cmp r4, r2 + bcs _082E783A + subs r6, 0x1 + adds r4, r7 +_082E783A: + subs r4, r2 + adds r0, r4, 0 + mov r1, r9 + bl __umodsi3 + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, r9 + bl __udivsi3 + adds r1, r0, 0 + ldr r4, [sp] + adds r2, r1, 0 + muls r2, r4 + lsls r5, 16 + ldr r0, _082E7880 + mov r3, r10 + ands r3, r0 + orrs r5, r3 + cmp r5, r2 + bcs _082E7872 + subs r1, 0x1 + adds r5, r7 + cmp r5, r7 + bcc _082E7872 + cmp r5, r2 + bcs _082E7872 + subs r1, 0x1 +_082E7872: + lsls r6, 16 + orrs r6, r1 + b _082E79FE + .align 2, 0 +_082E7878: .4byte 0x00ffffff +_082E787C: .4byte gUnknown_089A3370 +_082E7880: .4byte 0x0000ffff +_082E7884: + cmp r2, 0 + bne _082E7892 + movs r0, 0x1 + movs r1, 0 + bl __udivsi3 + adds r7, r0, 0 +_082E7892: + adds r1, r7, 0 + ldr r0, _082E78A4 + cmp r7, r0 + bhi _082E78A8 + movs r2, 0 + cmp r7, 0xFF + bls _082E78B2 + movs r2, 0x8 + b _082E78B2 + .align 2, 0 +_082E78A4: .4byte 0x0000ffff +_082E78A8: + ldr r0, _082E78D0 + movs r2, 0x18 + cmp r7, r0 + bhi _082E78B2 + movs r2, 0x10 +_082E78B2: + ldr r0, _082E78D4 + lsrs r1, r2 + adds r0, r1, r0 + ldrb r0, [r0] + adds r0, r2 + movs r1, 0x20 + subs r2, r1, r0 + cmp r2, 0 + bne _082E78D8 + mov r0, r8 + subs r0, r7 + mov r8, r0 + movs r1, 0x1 + str r1, [sp, 0x4] + b _082E7976 + .align 2, 0 +_082E78D0: .4byte 0x00ffffff +_082E78D4: .4byte gUnknown_089A3370 +_082E78D8: + subs r1, r2 + lsls r7, r2 + mov r5, r8 + lsrs r5, r1 + mov r3, r8 + lsls r3, r2 + mov r0, r10 + lsrs r0, r1 + orrs r3, r0 + mov r8, r3 + mov r4, r10 + lsls r4, r2 + mov r10, r4 + lsrs r0, r7, 16 + mov r9, r0 + ldr r1, _082E79F4 + ands r1, r7 + str r1, [sp, 0x8] + adds r0, r5, 0 + mov r1, r9 + bl __umodsi3 + adds r4, r0, 0 + adds r0, r5, 0 + mov r1, r9 + bl __udivsi3 + adds r6, r0, 0 + ldr r2, [sp, 0x8] + adds r1, r6, 0 + muls r1, r2 + lsls r4, 16 + mov r3, r8 + lsrs r0, r3, 16 + orrs r4, r0 + cmp r4, r1 + bcs _082E7932 + subs r6, 0x1 + adds r4, r7 + cmp r4, r7 + bcc _082E7932 + cmp r4, r1 + bcs _082E7932 + subs r6, 0x1 + adds r4, r7 +_082E7932: + subs r4, r1 + adds r0, r4, 0 + mov r1, r9 + bl __umodsi3 + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, r9 + bl __udivsi3 + adds r2, r0, 0 + ldr r4, [sp, 0x8] + adds r1, r2, 0 + muls r1, r4 + lsls r5, 16 + ldr r0, _082E79F4 + mov r3, r8 + ands r3, r0 + orrs r5, r3 + cmp r5, r1 + bcs _082E796C + subs r2, 0x1 + adds r5, r7 + cmp r5, r7 + bcc _082E796C + cmp r5, r1 + bcs _082E796C + subs r2, 0x1 + adds r5, r7 +_082E796C: + lsls r6, 16 + orrs r6, r2 + str r6, [sp, 0x4] + subs r1, r5, r1 + mov r8, r1 +_082E7976: + lsrs r4, r7, 16 + mov r9, r4 + ldr r0, _082E79F4 + ands r0, r7 + str r0, [sp, 0xC] + mov r0, r8 + mov r1, r9 + bl __umodsi3 + adds r4, r0, 0 + mov r0, r8 + mov r1, r9 + bl __udivsi3 + adds r6, r0, 0 + ldr r1, [sp, 0xC] + adds r2, r6, 0 + muls r2, r1 + lsls r4, 16 + mov r3, r10 + lsrs r0, r3, 16 + orrs r4, r0 + cmp r4, r2 + bcs _082E79B6 + subs r6, 0x1 + adds r4, r7 + cmp r4, r7 + bcc _082E79B6 + cmp r4, r2 + bcs _082E79B6 + subs r6, 0x1 + adds r4, r7 +_082E79B6: + subs r4, r2 + adds r0, r4, 0 + mov r1, r9 + bl __umodsi3 + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, r9 + bl __udivsi3 + adds r1, r0, 0 + ldr r4, [sp, 0xC] + adds r2, r1, 0 + muls r2, r4 + lsls r5, 16 + ldr r0, _082E79F4 + mov r3, r10 + ands r3, r0 + orrs r5, r3 + cmp r5, r2 + bcs _082E79EE + subs r1, 0x1 + adds r5, r7 + cmp r5, r7 + bcc _082E79EE + cmp r5, r2 + bcs _082E79EE + subs r1, 0x1 +_082E79EE: + lsls r6, 16 + orrs r6, r1 + b _082E7B4E + .align 2, 0 +_082E79F4: .4byte 0x0000ffff +_082E79F8: + cmp r6, r8 + bls _082E7A04 + movs r6, 0 +_082E79FE: + movs r4, 0 + str r4, [sp, 0x4] + b _082E7B4E +_082E7A04: + adds r1, r6, 0 + ldr r0, _082E7A18 + cmp r6, r0 + bhi _082E7A1C + movs r2, 0 + cmp r6, 0xFF + bls _082E7A26 + movs r2, 0x8 + b _082E7A26 + .align 2, 0 +_082E7A18: .4byte 0x0000ffff +_082E7A1C: + ldr r0, _082E7A48 + movs r2, 0x18 + cmp r6, r0 + bhi _082E7A26 + movs r2, 0x10 +_082E7A26: + ldr r0, _082E7A4C + lsrs r1, r2 + adds r0, r1, r0 + ldrb r0, [r0] + adds r0, r2 + movs r1, 0x20 + subs r2, r1, r0 + cmp r2, 0 + bne _082E7A54 + cmp r8, r6 + bhi _082E7A40 + cmp r10, r7 + bcc _082E7A50 +_082E7A40: + movs r6, 0x1 + mov r1, r10 + b _082E7B48 + .align 2, 0 +_082E7A48: .4byte 0x00ffffff +_082E7A4C: .4byte gUnknown_089A3370 +_082E7A50: + movs r6, 0 + b _082E7B4A +_082E7A54: + subs r1, r2 + lsls r6, r2 + adds r0, r7, 0 + lsrs r0, r1 + orrs r6, r0 + lsls r7, r2 + mov r5, r8 + lsrs r5, r1 + mov r3, r8 + lsls r3, r2 + mov r0, r10 + lsrs r0, r1 + orrs r3, r0 + mov r8, r3 + mov r4, r10 + lsls r4, r2 + mov r10, r4 + lsrs r0, r6, 16 + mov r9, r0 + ldr r1, _082E7B64 + ands r1, r6 + str r1, [sp, 0x10] + adds r0, r5, 0 + mov r1, r9 + bl __umodsi3 + adds r4, r0, 0 + adds r0, r5, 0 + mov r1, r9 + bl __udivsi3 + adds r3, r0, 0 + ldr r2, [sp, 0x10] + adds r1, r3, 0 + muls r1, r2 + lsls r4, 16 + mov r2, r8 + lsrs r0, r2, 16 + orrs r4, r0 + cmp r4, r1 + bcs _082E7AB6 + subs r3, 0x1 + adds r4, r6 + cmp r4, r6 + bcc _082E7AB6 + cmp r4, r1 + bcs _082E7AB6 + subs r3, 0x1 + adds r4, r6 +_082E7AB6: + subs r4, r1 + adds r0, r4, 0 + mov r1, r9 + str r3, [sp, 0x1C] + bl __umodsi3 + adds r5, r0, 0 + adds r0, r4, 0 + mov r1, r9 + bl __udivsi3 + adds r2, r0, 0 + ldr r4, [sp, 0x10] + adds r1, r2, 0 + muls r1, r4 + lsls r5, 16 + ldr r0, _082E7B64 + mov r4, r8 + ands r4, r0 + orrs r5, r4 + ldr r3, [sp, 0x1C] + cmp r5, r1 + bcs _082E7AF4 + subs r2, 0x1 + adds r5, r6 + cmp r5, r6 + bcc _082E7AF4 + cmp r5, r1 + bcs _082E7AF4 + subs r2, 0x1 + adds r5, r6 +_082E7AF4: + lsls r6, r3, 16 + orrs r6, r2 + subs r1, r5, r1 + mov r8, r1 + ldr r0, _082E7B64 + mov r9, r0 + adds r1, r6, 0 + ands r1, r0 + lsrs r3, r6, 16 + adds r0, r7, 0 + mov r2, r9 + ands r0, r2 + lsrs r2, r7, 16 + adds r5, r1, 0 + muls r5, r0 + adds r4, r1, 0 + muls r4, r2 + adds r1, r3, 0 + muls r1, r0 + muls r3, r2 + lsrs r0, r5, 16 + adds r4, r0 + adds r4, r1 + cmp r4, r1 + bcs _082E7B2C + movs r0, 0x80 + lsls r0, 9 + adds r3, r0 +_082E7B2C: + lsrs r0, r4, 16 + adds r3, r0 + mov r1, r9 + ands r4, r1 + lsls r0, r4, 16 + ands r5, r1 + adds r1, r0, r5 + cmp r3, r8 + bhi _082E7B46 + cmp r3, r8 + bne _082E7B4A + cmp r1, r10 + bls _082E7B4A +_082E7B46: + subs r6, 0x1 +_082E7B48: + subs r0, r1, r7 +_082E7B4A: + movs r2, 0 + str r2, [sp, 0x4] +_082E7B4E: + str r6, [sp, 0x14] + ldr r3, [sp, 0x4] + str r3, [sp, 0x18] + ldr r0, [sp, 0x14] + ldr r1, [sp, 0x18] + add sp, 0x20 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7,pc} + .align 2, 0 +_082E7B64: .4byte 0x0000ffff + thumb_func_end __udivdi3 + + thumb_func_start __udivsi3 +@ unsigned int __udivsi3(unsigned int dividend, unsigned int divisor) +__udivsi3: @ 82E7B68 + cmp r1, 0 + beq _082E7BD6 + movs r3, 0x1 + movs r2, 0 + push {r4} + cmp r0, r1 + bcc _082E7BD0 + movs r4, 0x1 + lsls r4, 28 +_082E7B7A: + cmp r1, r4 + bcs _082E7B88 + cmp r1, r0 + bcs _082E7B88 + lsls r1, 4 + lsls r3, 4 + b _082E7B7A +_082E7B88: + lsls r4, 3 +_082E7B8A: + cmp r1, r4 + bcs _082E7B98 + cmp r1, r0 + bcs _082E7B98 + lsls r1, 1 + lsls r3, 1 + b _082E7B8A +_082E7B98: + cmp r0, r1 + bcc _082E7BA0 + subs r0, r1 + orrs r2, r3 +_082E7BA0: + lsrs r4, r1, 1 + cmp r0, r4 + bcc _082E7BAC + subs r0, r4 + lsrs r4, r3, 1 + orrs r2, r4 +_082E7BAC: + lsrs r4, r1, 2 + cmp r0, r4 + bcc _082E7BB8 + subs r0, r4 + lsrs r4, r3, 2 + orrs r2, r4 +_082E7BB8: + lsrs r4, r1, 3 + cmp r0, r4 + bcc _082E7BC4 + subs r0, r4 + lsrs r4, r3, 3 + orrs r2, r4 +_082E7BC4: + cmp r0, 0 + beq _082E7BD0 + lsrs r3, 4 + beq _082E7BD0 + lsrs r1, 4 + b _082E7B98 +_082E7BD0: + adds r0, r2, 0 + pop {r4} + mov pc, lr +_082E7BD6: + push {lr} + bl nullsub_1 + movs r0, 0 + pop {pc} + thumb_func_end __udivsi3 + + thumb_func_start __umodsi3 +@ unsigned int __umodsi3(unsigned int dividend, unsigned int divisor) +__umodsi3: @ 82E7BE0 + cmp r1, 0 + beq _082E7C96 + movs r3, 0x1 + cmp r0, r1 + bcs _082E7BEC + mov pc, lr +_082E7BEC: + push {r4} + movs r4, 0x1 + lsls r4, 28 +_082E7BF2: + cmp r1, r4 + bcs _082E7C00 + cmp r1, r0 + bcs _082E7C00 + lsls r1, 4 + lsls r3, 4 + b _082E7BF2 +_082E7C00: + lsls r4, 3 +_082E7C02: + cmp r1, r4 + bcs _082E7C10 + cmp r1, r0 + bcs _082E7C10 + lsls r1, 1 + lsls r3, 1 + b _082E7C02 +_082E7C10: + movs r2, 0 + cmp r0, r1 + bcc _082E7C18 + subs r0, r1 +_082E7C18: + lsrs r4, r1, 1 + cmp r0, r4 + bcc _082E7C2A + subs r0, r4 + mov r12, r3 + movs r4, 0x1 + rors r3, r4 + orrs r2, r3 + mov r3, r12 +_082E7C2A: + lsrs r4, r1, 2 + cmp r0, r4 + bcc _082E7C3C + subs r0, r4 + mov r12, r3 + movs r4, 0x2 + rors r3, r4 + orrs r2, r3 + mov r3, r12 +_082E7C3C: + lsrs r4, r1, 3 + cmp r0, r4 + bcc _082E7C4E + subs r0, r4 + mov r12, r3 + movs r4, 0x3 + rors r3, r4 + orrs r2, r3 + mov r3, r12 +_082E7C4E: + mov r12, r3 + cmp r0, 0 + beq _082E7C5C + lsrs r3, 4 + beq _082E7C5C + lsrs r1, 4 + b _082E7C10 +_082E7C5C: + movs r4, 0xE + lsls r4, 28 + ands r2, r4 + bne _082E7C68 + pop {r4} + mov pc, lr +_082E7C68: + mov r3, r12 + movs r4, 0x3 + rors r3, r4 + tst r2, r3 + beq _082E7C76 + lsrs r4, r1, 3 + adds r0, r4 +_082E7C76: + mov r3, r12 + movs r4, 0x2 + rors r3, r4 + tst r2, r3 + beq _082E7C84 + lsrs r4, r1, 2 + adds r0, r4 +_082E7C84: + mov r3, r12 + movs r4, 0x1 + rors r3, r4 + tst r2, r3 + beq _082E7C92 + lsrs r4, r1, 1 + adds r0, r4 +_082E7C92: + pop {r4} + mov pc, lr +_082E7C96: + push {lr} + bl nullsub_1 + movs r0, 0 + pop {pc} + thumb_func_end __umodsi3 + + thumb_func_start __pack_d +__pack_d: @ 82E7CA0 + push {r4-r7,lr} + sub sp, 0x8 + adds r1, r0, 0 + ldr r4, [r1, 0xC] + ldr r5, [r1, 0x10] + ldr r7, [r1, 0x4] + movs r6, 0 + movs r2, 0 + ldr r0, [r1] + cmp r0, 0x1 + bhi _082E7CB8 + movs r2, 0x1 +_082E7CB8: + cmp r2, 0 + beq _082E7CD8 + ldr r6, _082E7CCC + ldr r2, _082E7CD0 + ldr r3, _082E7CD4 + adds r0, r4, 0 + adds r1, r5, 0 + orrs r1, r3 + b _082E7D90 + .align 2, 0 +_082E7CCC: .4byte 0x000007ff +_082E7CD0: .4byte 0x00000000 +_082E7CD4: .4byte 0x00080000 +_082E7CD8: + movs r2, 0 + cmp r0, 0x4 + bne _082E7CE0 + movs r2, 0x1 +_082E7CE0: + cmp r2, 0 + bne _082E7D2C + movs r2, 0 + cmp r0, 0x2 + bne _082E7CEC + movs r2, 0x1 +_082E7CEC: + cmp r2, 0 + beq _082E7CF6 + movs r4, 0 + movs r5, 0 + b _082E7D94 +_082E7CF6: + adds r0, r5, 0 + orrs r0, r4 + cmp r0, 0 + beq _082E7D94 + ldr r2, [r1, 0x8] + ldr r0, _082E7D14 + cmp r2, r0 + bge _082E7D26 + subs r2, r0, r2 + cmp r2, 0x38 + ble _082E7D18 + movs r4, 0 + movs r5, 0 + b _082E7D86 + .align 2, 0 +_082E7D14: .4byte 0xfffffc02 +_082E7D18: + adds r1, r5, 0 + adds r0, r4, 0 + bl __lshrdi3 + adds r5, r1, 0 + adds r4, r0, 0 + b _082E7D86 +_082E7D26: + ldr r0, _082E7D34 + cmp r2, r0 + ble _082E7D3C +_082E7D2C: + ldr r6, _082E7D38 + movs r4, 0 + movs r5, 0 + b _082E7D94 + .align 2, 0 +_082E7D34: .4byte 0x000003ff +_082E7D38: .4byte 0x000007ff +_082E7D3C: + ldr r0, _082E7D64 + adds r6, r2, r0 + movs r0, 0xFF + adds r1, r4, 0 + ands r1, r0 + movs r2, 0 + cmp r1, 0x80 + bne _082E7D68 + cmp r2, 0 + bne _082E7D68 + adds r0, 0x1 + adds r1, r4, 0 + ands r1, r0 + adds r0, r2, 0 + orrs r0, r1 + cmp r0, 0 + beq _082E7D70 + movs r0, 0x80 + movs r1, 0 + b _082E7D6C + .align 2, 0 +_082E7D64: .4byte 0x000003ff +_082E7D68: + movs r0, 0x7F + movs r1, 0 +_082E7D6C: + adds r4, r0 + adcs r5, r1 +_082E7D70: + ldr r0, _082E7DD4 + cmp r5, r0 + bls _082E7D86 + lsls r3, r5, 31 + lsrs r2, r4, 1 + adds r0, r3, 0 + orrs r0, r2 + lsrs r1, r5, 1 + adds r5, r1, 0 + adds r4, r0, 0 + adds r6, 0x1 +_082E7D86: + lsls r3, r5, 24 + lsrs r2, r4, 8 + adds r0, r3, 0 + orrs r0, r2 + lsrs r1, r5, 8 +_082E7D90: + adds r5, r1, 0 + adds r4, r0, 0 +_082E7D94: + str r4, [sp] + ldr r2, _082E7DD8 + ands r2, r5 + ldr r0, [sp, 0x4] + ldr r1, _082E7DDC + ands r0, r1 + orrs r0, r2 + str r0, [sp, 0x4] + mov r2, sp + ldr r1, _082E7DE0 + adds r0, r1, 0 + ands r6, r0 + lsls r1, r6, 4 + ldr r0, _082E7DE4 + ldrh r3, [r2, 0x6] + ands r0, r3 + orrs r0, r1 + strh r0, [r2, 0x6] + lsls r1, r7, 7 + movs r0, 0x7F + ldrb r3, [r2, 0x7] + ands r0, r3 + orrs r0, r1 + strb r0, [r2, 0x7] + ldr r1, [sp] + ldr r0, [sp, 0x4] + str r0, [sp] + str r1, [sp, 0x4] + ldr r0, [sp] + ldr r1, [sp, 0x4] + add sp, 0x8 + pop {r4-r7,pc} + .align 2, 0 +_082E7DD4: .4byte 0x1fffffff +_082E7DD8: .4byte 0x000fffff +_082E7DDC: .4byte 0xfff00000 +_082E7DE0: .4byte 0x000007ff +_082E7DE4: .4byte 0xffff800f + thumb_func_end __pack_d + + thumb_func_start __unpack_d +__unpack_d: @ 82E7DE8 + push {r4-r7,lr} + sub sp, 0x8 + adds r2, r0, 0 + adds r6, r1, 0 + ldr r1, [r2, 0x4] + str r1, [sp] + ldr r0, [r2] + str r0, [sp, 0x4] + mov r2, sp + adds r4, r1, 0 + lsls r0, 12 + lsrs r5, r0, 12 + ldrh r3, [r2, 0x6] + lsls r0, r3, 17 + lsrs r3, r0, 21 + ldrb r2, [r2, 0x7] + lsrs r0, r2, 7 + str r0, [r6, 0x4] + cmp r3, 0 + bne _082E7E5C + orrs r1, r5 + cmp r1, 0 + bne _082E7E1C + movs r0, 0x2 + str r0, [r6] + b _082E7EB0 +_082E7E1C: + ldr r0, _082E7E54 + str r0, [r6, 0x8] + lsrs r3, r4, 24 + lsls r2, r5, 8 + adds r1, r3, 0 + orrs r1, r2 + lsls r0, r4, 8 + adds r5, r1, 0 + adds r4, r0, 0 + movs r0, 0x3 + str r0, [r6] + ldr r0, _082E7E58 + cmp r5, r0 + bhi _082E7E8C + adds r7, r0, 0 +_082E7E3A: + lsrs r3, r4, 31 + lsls r2, r5, 1 + adds r1, r3, 0 + orrs r1, r2 + lsls r0, r4, 1 + adds r5, r1, 0 + adds r4, r0, 0 + ldr r0, [r6, 0x8] + subs r0, 0x1 + str r0, [r6, 0x8] + cmp r5, r7 + bls _082E7E3A + b _082E7E8C + .align 2, 0 +_082E7E54: .4byte 0xfffffc02 +_082E7E58: .4byte 0x0fffffff +_082E7E5C: + ldr r0, _082E7E70 + cmp r3, r0 + bne _082E7E92 + orrs r1, r5 + cmp r1, 0 + bne _082E7E74 + movs r0, 0x4 + str r0, [r6] + b _082E7EB0 + .align 2, 0 +_082E7E70: .4byte 0x000007ff +_082E7E74: + movs r2, 0x80 + lsls r2, 12 + movs r0, 0 + adds r1, r5, 0 + ands r1, r2 + orrs r1, r0 + cmp r1, 0 + beq _082E7E8A + movs r0, 0x1 + str r0, [r6] + b _082E7E8C +_082E7E8A: + str r1, [r6] +_082E7E8C: + str r4, [r6, 0xC] + str r5, [r6, 0x10] + b _082E7EB0 +_082E7E92: + ldr r1, _082E7EB4 + adds r0, r3, r1 + str r0, [r6, 0x8] + movs r0, 0x3 + str r0, [r6] + lsrs r3, r4, 24 + lsls r2, r5, 8 + adds r1, r3, 0 + orrs r1, r2 + lsls r0, r4, 8 + ldr r2, _082E7EB8 + ldr r3, _082E7EBC + orrs r1, r3 + str r0, [r6, 0xC] + str r1, [r6, 0x10] +_082E7EB0: + add sp, 0x8 + pop {r4-r7,pc} + .align 2, 0 +_082E7EB4: .4byte 0xfffffc01 +_082E7EB8: .4byte 0x00000000 +_082E7EBC: .4byte 0x10000000 + thumb_func_end __unpack_d + + thumb_func_start __fpadd_parts_d +__fpadd_parts_d: @ 82E7EC0 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0xC + adds r3, r0, 0 + adds r4, r1, 0 + mov r10, r2 + movs r0, 0 + ldr r2, [r3] + cmp r2, 0x1 + bhi _082E7EDC + movs r0, 0x1 +_082E7EDC: + cmp r0, 0 + beq _082E7EE4 +_082E7EE0: + adds r0, r3, 0 + b _082E811C +_082E7EE4: + movs r1, 0 + ldr r0, [r4] + cmp r0, 0x1 + bhi _082E7EEE + movs r1, 0x1 +_082E7EEE: + cmp r1, 0 + bne _082E7F66 + movs r1, 0 + cmp r2, 0x4 + bne _082E7EFA + movs r1, 0x1 +_082E7EFA: + cmp r1, 0 + beq _082E7F1C + movs r1, 0 + cmp r0, 0x4 + bne _082E7F06 + movs r1, 0x1 +_082E7F06: + cmp r1, 0 + beq _082E7EE0 + ldr r1, [r3, 0x4] + ldr r0, [r4, 0x4] + cmp r1, r0 + beq _082E7EE0 + ldr r0, _082E7F18 + b _082E811C + .align 2, 0 +_082E7F18: .4byte 0x03001a80 +_082E7F1C: + movs r1, 0 + cmp r0, 0x4 + bne _082E7F24 + movs r1, 0x1 +_082E7F24: + cmp r1, 0 + bne _082E7F66 + movs r1, 0 + cmp r0, 0x2 + bne _082E7F30 + movs r1, 0x1 +_082E7F30: + cmp r1, 0 + beq _082E7F58 + movs r0, 0 + cmp r2, 0x2 + bne _082E7F3C + movs r0, 0x1 +_082E7F3C: + cmp r0, 0 + beq _082E7EE0 + mov r1, r10 + adds r0, r3, 0 + ldm r0!, {r2,r5,r6} + stm r1!, {r2,r5,r6} + ldm r0!, {r2,r5} + stm r1!, {r2,r5} + ldr r0, [r3, 0x4] + ldr r1, [r4, 0x4] + ands r0, r1 + mov r6, r10 + str r0, [r6, 0x4] + b _082E811A +_082E7F58: + movs r1, 0 + ldr r0, [r3] + cmp r0, 0x2 + bne _082E7F62 + movs r1, 0x1 +_082E7F62: + cmp r1, 0 + beq _082E7F6A +_082E7F66: + adds r0, r4, 0 + b _082E811C +_082E7F6A: + ldr r0, [r3, 0x8] + mov r9, r0 + ldr r1, [r4, 0x8] + mov r8, r1 + ldr r6, [r3, 0xC] + ldr r7, [r3, 0x10] + ldr r0, [r4, 0xC] + ldr r1, [r4, 0x10] + str r0, [sp] + str r1, [sp, 0x4] + mov r1, r9 + mov r2, r8 + subs r0, r1, r2 + cmp r0, 0 + bge _082E7F8A + negs r0, r0 +_082E7F8A: + cmp r0, 0x3F + bgt _082E8008 + ldr r3, [r3, 0x4] + mov r12, r3 + ldr r4, [r4, 0x4] + str r4, [sp, 0x8] + cmp r9, r8 + ble _082E7FD4 + mov r3, r9 + mov r4, r8 + subs r3, r4 + mov r8, r3 +_082E7FA2: + movs r5, 0x1 + negs r5, r5 + add r8, r5 + ldr r2, [sp] + movs r0, 0x1 + ands r2, r0 + movs r3, 0 + ldr r1, [sp, 0x4] + lsls r5, r1, 31 + ldr r0, [sp] + lsrs r4, r0, 1 + adds r0, r5, 0 + orrs r0, r4 + adds r4, r1, 0 + lsrs r1, r4, 1 + adds r5, r2, 0 + orrs r5, r0 + str r5, [sp] + adds r4, r3, 0 + orrs r4, r1 + str r4, [sp, 0x4] + mov r5, r8 + cmp r5, 0 + bne _082E7FA2 + mov r8, r9 +_082E7FD4: + cmp r8, r9 + ble _082E8024 + mov r0, r8 + mov r1, r9 + subs r0, r1 + mov r9, r0 +_082E7FE0: + movs r2, 0x1 + negs r2, r2 + add r9, r2 + movs r2, 0x1 + ands r2, r6 + movs r3, 0 + lsls r5, r7, 31 + lsrs r4, r6, 1 + adds r0, r5, 0 + orrs r0, r4 + lsrs r1, r7, 1 + adds r6, r2, 0 + orrs r6, r0 + adds r7, r3, 0 + orrs r7, r1 + mov r3, r9 + cmp r3, 0 + bne _082E7FE0 + mov r9, r8 + b _082E8024 +_082E8008: + cmp r9, r8 + ble _082E8016 + movs r0, 0 + movs r1, 0 + str r0, [sp] + str r1, [sp, 0x4] + b _082E801C +_082E8016: + mov r9, r8 + movs r6, 0 + movs r7, 0 +_082E801C: + ldr r3, [r3, 0x4] + mov r12, r3 + ldr r4, [r4, 0x4] + str r4, [sp, 0x8] +_082E8024: + ldr r1, [sp, 0x8] + cmp r12, r1 + beq _082E80CC + mov r2, r12 + cmp r2, 0 + beq _082E8046 + adds r1, r7, 0 + adds r0, r6, 0 + bl __negdi2 + adds r3, r1, 0 + adds r2, r0, 0 + ldr r4, [sp] + ldr r5, [sp, 0x4] + adds r2, r4 + adcs r3, r5 + b _082E8052 +_082E8046: + adds r3, r7, 0 + adds r2, r6, 0 + ldr r0, [sp] + ldr r1, [sp, 0x4] + subs r2, r0 + sbcs r3, r1 +_082E8052: + cmp r3, 0 + blt _082E8068 + movs r0, 0 + mov r1, r10 + str r0, [r1, 0x4] + mov r4, r9 + str r4, [r1, 0x8] + mov r5, r10 + str r2, [r5, 0xC] + str r3, [r5, 0x10] + b _082E8080 +_082E8068: + movs r0, 0x1 + mov r6, r10 + str r0, [r6, 0x4] + mov r0, r9 + str r0, [r6, 0x8] + adds r1, r3, 0 + adds r0, r2, 0 + bl __negdi2 + mov r2, r10 + str r0, [r2, 0xC] + str r1, [r2, 0x10] +_082E8080: + mov r4, r10 + ldr r2, [r4, 0xC] + ldr r3, [r4, 0x10] + movs r0, 0x1 + negs r0, r0 + asrs r1, r0, 31 +_082E808C: + adds r2, r0 + adcs r3, r1 + ldr r0, _082E80C8 + cmp r3, r0 + bhi _082E80E4 + cmp r3, r0 + bne _082E80A2 + movs r0, 0x2 + negs r0, r0 + cmp r2, r0 + bhi _082E80E4 +_082E80A2: + mov r5, r10 + ldr r0, [r5, 0xC] + ldr r1, [r5, 0x10] + lsrs r3, r0, 31 + lsls r2, r1, 1 + adds r1, r3, 0 + orrs r1, r2 + lsls r0, 1 + mov r6, r10 + str r0, [r6, 0xC] + str r1, [r6, 0x10] + ldr r2, [r6, 0x8] + subs r2, 0x1 + str r2, [r6, 0x8] + movs r2, 0x1 + negs r2, r2 + asrs r3, r2, 31 + b _082E808C + .align 2, 0 +_082E80C8: .4byte 0x0fffffff +_082E80CC: + mov r0, r12 + mov r1, r10 + str r0, [r1, 0x4] + mov r2, r9 + str r2, [r1, 0x8] + ldr r3, [sp] + ldr r4, [sp, 0x4] + adds r6, r3 + adcs r7, r4 + mov r4, r10 + str r6, [r4, 0xC] + str r7, [r4, 0x10] +_082E80E4: + movs r0, 0x3 + mov r5, r10 + str r0, [r5] + ldr r1, [r5, 0x10] + ldr r0, _082E8128 + cmp r1, r0 + bls _082E811A + ldr r4, [r5, 0xC] + ldr r5, [r5, 0x10] + movs r2, 0x1 + adds r0, r4, 0 + ands r0, r2 + movs r1, 0 + lsls r6, r5, 31 + mov r8, r6 + lsrs r6, r4, 1 + mov r2, r8 + orrs r2, r6 + lsrs r3, r5, 1 + orrs r0, r2 + orrs r1, r3 + mov r2, r10 + str r0, [r2, 0xC] + str r1, [r2, 0x10] + ldr r0, [r2, 0x8] + adds r0, 0x1 + str r0, [r2, 0x8] +_082E811A: + mov r0, r10 +_082E811C: + add sp, 0xC + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7,pc} + .align 2, 0 +_082E8128: .4byte 0x1fffffff + thumb_func_end __fpadd_parts_d + + thumb_func_start __adddf3 +@ double __adddf3(double arg_a, double arg_b) +__adddf3: @ 82E812C + push {r4,lr} + sub sp, 0x4C + str r0, [sp, 0x3C] + str r1, [sp, 0x40] + str r2, [sp, 0x44] + str r3, [sp, 0x48] + add r0, sp, 0x3C + mov r1, sp + bl __unpack_d + add r0, sp, 0x44 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + add r2, sp, 0x28 + mov r0, sp + adds r1, r4, 0 + bl __fpadd_parts_d + bl __pack_d + add sp, 0x4C + pop {r4,pc} + thumb_func_end __adddf3 + + thumb_func_start __subdf3 +__subdf3: @ 82E815C + push {r4,lr} + sub sp, 0x4C + str r0, [sp, 0x3C] + str r1, [sp, 0x40] + str r2, [sp, 0x44] + str r3, [sp, 0x48] + add r0, sp, 0x3C + mov r1, sp + bl __unpack_d + add r0, sp, 0x44 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + ldr r0, [r4, 0x4] + movs r1, 0x1 + eors r0, r1 + str r0, [r4, 0x4] + add r2, sp, 0x28 + mov r0, sp + adds r1, r4, 0 + bl __fpadd_parts_d + bl __pack_d + add sp, 0x4C + pop {r4,pc} + thumb_func_end __subdf3 + + thumb_func_start __muldf3 +__muldf3: @ 82E8194 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x74 + str r0, [sp, 0x3C] + str r1, [sp, 0x40] + str r2, [sp, 0x44] + str r3, [sp, 0x48] + add r0, sp, 0x3C + mov r1, sp + bl __unpack_d + add r0, sp, 0x44 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + mov r8, sp + add r0, sp, 0x28 + mov r10, r0 + movs r0, 0 + ldr r1, [sp] + cmp r1, 0x1 + bhi _082E81CA + movs r0, 0x1 +_082E81CA: + cmp r0, 0 + bne _082E822E + movs r2, 0 + ldr r0, [sp, 0x14] + cmp r0, 0x1 + bhi _082E81D8 + movs r2, 0x1 +_082E81D8: + cmp r2, 0 + beq _082E81E0 + ldr r0, [sp, 0x4] + b _082E8250 +_082E81E0: + movs r2, 0 + cmp r1, 0x4 + bne _082E81E8 + movs r2, 0x1 +_082E81E8: + cmp r2, 0 + beq _082E81FA + movs r1, 0 + cmp r0, 0x2 + bne _082E81F4 + movs r1, 0x1 +_082E81F4: + cmp r1, 0 + bne _082E8212 + b _082E822E +_082E81FA: + movs r2, 0 + cmp r0, 0x4 + bne _082E8202 + movs r2, 0x1 +_082E8202: + cmp r2, 0 + beq _082E8222 + movs r0, 0 + cmp r1, 0x2 + bne _082E820E + movs r0, 0x1 +_082E820E: + cmp r0, 0 + beq _082E821C +_082E8212: + ldr r0, _082E8218 + b _082E841A + .align 2, 0 +_082E8218: .4byte 0x03001a80 +_082E821C: + mov r1, r8 + ldr r0, [r1, 0x4] + b _082E8250 +_082E8222: + movs r2, 0 + cmp r1, 0x2 + bne _082E822A + movs r2, 0x1 +_082E822A: + cmp r2, 0 + beq _082E8240 +_082E822E: + ldr r0, [sp, 0x4] + ldr r1, [sp, 0x18] + eors r0, r1 + negs r1, r0 + orrs r1, r0 + lsrs r1, 31 + str r1, [sp, 0x4] + mov r0, sp + b _082E841A +_082E8240: + movs r1, 0 + cmp r0, 0x2 + bne _082E8248 + movs r1, 0x1 +_082E8248: + cmp r1, 0 + beq _082E8260 + mov r2, r8 + ldr r0, [r2, 0x4] +_082E8250: + ldr r1, [sp, 0x18] + eors r0, r1 + negs r1, r0 + orrs r1, r0 + lsrs r1, 31 + str r1, [sp, 0x18] + adds r0, r4, 0 + b _082E841A +_082E8260: + mov r4, r8 + ldr r0, [r4, 0xC] + ldr r1, [r4, 0x10] + adds r6, r0, 0 + movs r7, 0 + str r1, [sp, 0x4C] + movs r5, 0 + str r5, [sp, 0x50] + ldr r0, [sp, 0x20] + ldr r1, [sp, 0x24] + adds r4, r0, 0 + str r1, [sp, 0x54] + movs r0, 0 + str r0, [sp, 0x58] + adds r1, r5, 0 + adds r0, r4, 0 + adds r3, r7, 0 + adds r2, r6, 0 + bl __muldi3 + str r0, [sp, 0x5C] + str r1, [sp, 0x60] + ldr r0, [sp, 0x54] + ldr r1, [sp, 0x58] + adds r3, r7, 0 + adds r2, r6, 0 + bl __muldi3 + adds r7, r1, 0 + adds r6, r0, 0 + adds r1, r5, 0 + adds r0, r4, 0 + ldr r2, [sp, 0x4C] + ldr r3, [sp, 0x50] + bl __muldi3 + adds r5, r1, 0 + adds r4, r0, 0 + ldr r0, [sp, 0x54] + ldr r1, [sp, 0x58] + ldr r2, [sp, 0x4C] + ldr r3, [sp, 0x50] + bl __muldi3 + str r0, [sp, 0x64] + str r1, [sp, 0x68] + movs r1, 0 + movs r2, 0 + str r1, [sp, 0x6C] + str r2, [sp, 0x70] + adds r3, r7, 0 + adds r2, r6, 0 + adds r2, r4 + adcs r3, r5 + cmp r7, r3 + bhi _082E82D8 + cmp r7, r3 + bne _082E82E0 + cmp r6, r2 + bls _082E82E0 +_082E82D8: + ldr r5, _082E8430 + ldr r4, _082E842C + str r4, [sp, 0x6C] + str r5, [sp, 0x70] +_082E82E0: + adds r1, r2, 0 + movs r6, 0 + adds r7, r1, 0 + ldr r0, [sp, 0x5C] + ldr r1, [sp, 0x60] + adds r6, r0 + adcs r7, r1 + cmp r1, r7 + bhi _082E82FC + ldr r1, [sp, 0x60] + cmp r1, r7 + bne _082E830C + cmp r0, r6 + bls _082E830C +_082E82FC: + movs r0, 0x1 + movs r1, 0 + ldr r4, [sp, 0x6C] + ldr r5, [sp, 0x70] + adds r4, r0 + adcs r5, r1 + str r4, [sp, 0x6C] + str r5, [sp, 0x70] +_082E830C: + adds r0, r3, 0 + adds r2, r0, 0 + movs r3, 0 + adds r5, r3, 0 + adds r4, r2, 0 + ldr r0, [sp, 0x64] + ldr r1, [sp, 0x68] + adds r4, r0 + adcs r5, r1 + ldr r1, [sp, 0x6C] + ldr r2, [sp, 0x70] + adds r4, r1 + adcs r5, r2 + mov r0, r8 + ldr r2, [r0, 0x8] + ldr r0, [sp, 0x1C] + adds r2, r0 + str r2, [sp, 0x30] + mov r0, r8 + ldr r1, [r0, 0x4] + ldr r0, [sp, 0x18] + eors r1, r0 + negs r0, r1 + orrs r0, r1 + lsrs r0, 31 + str r0, [sp, 0x2C] + adds r2, 0x4 + str r2, [sp, 0x30] + ldr r0, _082E8434 + cmp r5, r0 + bls _082E838E + movs r1, 0x1 + mov r9, r1 + mov r8, r0 + mov r12, r2 +_082E8352: + movs r2, 0x1 + add r12, r2 + mov r0, r9 + ands r0, r4 + cmp r0, 0 + beq _082E8378 + lsls r3, r7, 31 + lsrs r2, r6, 1 + adds r0, r3, 0 + orrs r0, r2 + lsrs r1, r7, 1 + adds r7, r1, 0 + adds r6, r0, 0 + adds r0, r6, 0 + movs r1, 0x80 + lsls r1, 24 + orrs r1, r7 + adds r7, r1, 0 + adds r6, r0, 0 +_082E8378: + lsls r3, r5, 31 + lsrs r2, r4, 1 + adds r0, r3, 0 + orrs r0, r2 + lsrs r1, r5, 1 + adds r5, r1, 0 + adds r4, r0, 0 + cmp r5, r8 + bhi _082E8352 + mov r0, r12 + str r0, [sp, 0x30] +_082E838E: + ldr r0, _082E8438 + cmp r5, r0 + bhi _082E83E0 + movs r1, 0x80 + lsls r1, 24 + mov r9, r1 + mov r8, r0 + ldr r2, [sp, 0x30] + mov r12, r2 +_082E83A0: + movs r0, 0x1 + negs r0, r0 + add r12, r0 + lsrs r3, r4, 31 + lsls r2, r5, 1 + adds r1, r3, 0 + orrs r1, r2 + lsls r0, r4, 1 + adds r5, r1, 0 + adds r4, r0, 0 + movs r0, 0 + mov r1, r9 + ands r1, r7 + orrs r0, r1 + cmp r0, 0 + beq _082E83CA + movs r0, 0x1 + orrs r0, r4 + adds r1, r5, 0 + adds r5, r1, 0 + adds r4, r0, 0 +_082E83CA: + lsrs r3, r6, 31 + lsls r2, r7, 1 + adds r1, r3, 0 + orrs r1, r2 + lsls r0, r6, 1 + adds r7, r1, 0 + adds r6, r0, 0 + cmp r5, r8 + bls _082E83A0 + mov r1, r12 + str r1, [sp, 0x30] +_082E83E0: + movs r0, 0xFF + adds r1, r4, 0 + ands r1, r0 + movs r2, 0 + cmp r1, 0x80 + bne _082E840E + cmp r2, 0 + bne _082E840E + adds r0, 0x1 + adds r1, r4, 0 + ands r1, r0 + adds r0, r2, 0 + orrs r0, r1 + cmp r0, 0 + bne _082E8406 + adds r0, r7, 0 + orrs r0, r6 + cmp r0, 0 + beq _082E840E +_082E8406: + movs r0, 0x80 + movs r1, 0 + adds r4, r0 + adcs r5, r1 +_082E840E: + str r4, [sp, 0x34] + str r5, [sp, 0x38] + movs r0, 0x3 + mov r2, r10 + str r0, [r2] + add r0, sp, 0x28 +_082E841A: + bl __pack_d + add sp, 0x74 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7,pc} + .align 2, 0 +_082E842C: .4byte 0x00000000 +_082E8430: .4byte 0x00000001 +_082E8434: .4byte 0x1fffffff +_082E8438: .4byte 0x0fffffff + thumb_func_end __muldf3 + + thumb_func_start __divdf3 +__divdf3: @ 82E843C + push {r4-r7,lr} + sub sp, 0x48 + str r0, [sp, 0x28] + str r1, [sp, 0x2C] + str r2, [sp, 0x30] + str r3, [sp, 0x34] + add r0, sp, 0x28 + mov r1, sp + bl __unpack_d + add r0, sp, 0x30 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + mov r12, sp + movs r0, 0 + ldr r3, [sp] + cmp r3, 0x1 + bhi _082E8466 + movs r0, 0x1 +_082E8466: + cmp r0, 0 + beq _082E846E + mov r1, sp + b _082E85B0 +_082E846E: + movs r0, 0 + ldr r2, [sp, 0x14] + adds r5, r2, 0 + cmp r2, 0x1 + bhi _082E847A + movs r0, 0x1 +_082E847A: + cmp r0, 0 + beq _082E8482 + adds r1, r4, 0 + b _082E85B0 +_082E8482: + ldr r0, [sp, 0x4] + ldr r1, [sp, 0x18] + eors r0, r1 + str r0, [sp, 0x4] + movs r0, 0 + cmp r3, 0x4 + bne _082E8492 + movs r0, 0x1 +_082E8492: + cmp r0, 0 + bne _082E84A2 + movs r4, 0 + cmp r3, 0x2 + bne _082E849E + movs r4, 0x1 +_082E849E: + cmp r4, 0 + beq _082E84B4 +_082E84A2: + mov r1, r12 + ldr r0, [r1] + cmp r0, r5 + beq _082E84AC + b _082E85B0 +_082E84AC: + ldr r1, _082E84B0 + b _082E85B0 + .align 2, 0 +_082E84B0: .4byte 0x03001a80 +_082E84B4: + movs r0, 0 + cmp r2, 0x4 + bne _082E84BC + movs r0, 0x1 +_082E84BC: + cmp r0, 0 + beq _082E84CE + movs r0, 0 + movs r1, 0 + str r0, [sp, 0xC] + str r1, [sp, 0x10] + str r4, [sp, 0x8] + mov r1, sp + b _082E85B0 +_082E84CE: + movs r0, 0 + cmp r2, 0x2 + bne _082E84D6 + movs r0, 0x1 +_082E84D6: + cmp r0, 0 + beq _082E84E2 + movs r0, 0x4 + mov r2, r12 + str r0, [r2] + b _082E85AE +_082E84E2: + mov r3, r12 + ldr r1, [r3, 0x8] + ldr r0, [sp, 0x1C] + subs r6, r1, r0 + str r6, [r3, 0x8] + ldr r4, [r3, 0xC] + ldr r5, [r3, 0x10] + ldr r0, [sp, 0x20] + ldr r1, [sp, 0x24] + str r0, [sp, 0x38] + str r1, [sp, 0x3C] + cmp r1, r5 + bhi _082E8506 + ldr r1, [sp, 0x3C] + cmp r1, r5 + bne _082E851A + cmp r0, r4 + bls _082E851A +_082E8506: + lsrs r3, r4, 31 + lsls r2, r5, 1 + adds r1, r3, 0 + orrs r1, r2 + lsls r0, r4, 1 + adds r5, r1, 0 + adds r4, r0, 0 + subs r0, r6, 0x1 + mov r2, r12 + str r0, [r2, 0x8] +_082E851A: + ldr r7, _082E85C0 + ldr r6, _082E85BC + movs r0, 0 + movs r1, 0 + str r0, [sp, 0x40] + str r1, [sp, 0x44] +_082E8526: + ldr r1, [sp, 0x3C] + cmp r1, r5 + bhi _082E854A + cmp r1, r5 + bne _082E8536 + ldr r2, [sp, 0x38] + cmp r2, r4 + bhi _082E854A +_082E8536: + ldr r0, [sp, 0x40] + orrs r0, r6 + ldr r1, [sp, 0x44] + orrs r1, r7 + str r0, [sp, 0x40] + str r1, [sp, 0x44] + ldr r0, [sp, 0x38] + ldr r1, [sp, 0x3C] + subs r4, r0 + sbcs r5, r1 +_082E854A: + lsls r3, r7, 31 + lsrs r2, r6, 1 + adds r0, r3, 0 + orrs r0, r2 + lsrs r1, r7, 1 + adds r7, r1, 0 + adds r6, r0, 0 + lsrs r3, r4, 31 + lsls r2, r5, 1 + adds r1, r3, 0 + orrs r1, r2 + lsls r0, r4, 1 + adds r5, r1, 0 + adds r4, r0, 0 + adds r0, r7, 0 + orrs r0, r6 + cmp r0, 0 + bne _082E8526 + movs r0, 0xFF + ldr r1, [sp, 0x40] + ands r1, r0 + movs r2, 0 + cmp r1, 0x80 + bne _082E85A4 + cmp r2, 0 + bne _082E85A4 + adds r0, 0x1 + ldr r1, [sp, 0x40] + ands r1, r0 + adds r0, r2, 0 + orrs r0, r1 + cmp r0, 0 + bne _082E8594 + adds r0, r5, 0 + orrs r0, r4 + cmp r0, 0 + beq _082E85A4 +_082E8594: + movs r0, 0x80 + movs r1, 0 + ldr r2, [sp, 0x40] + ldr r3, [sp, 0x44] + adds r2, r0 + adcs r3, r1 + str r2, [sp, 0x40] + str r3, [sp, 0x44] +_082E85A4: + ldr r0, [sp, 0x40] + ldr r1, [sp, 0x44] + mov r2, r12 + str r0, [r2, 0xC] + str r1, [r2, 0x10] +_082E85AE: + mov r1, r12 +_082E85B0: + adds r0, r1, 0 + bl __pack_d + add sp, 0x48 + pop {r4-r7,pc} + .align 2, 0 +_082E85BC: .4byte 0x00000000 +_082E85C0: .4byte 0x10000000 + thumb_func_end __divdf3 + + thumb_func_start __fpcmp_parts_d +__fpcmp_parts_d: @ 82E85C4 + push {r4-r6,lr} + adds r5, r0, 0 + adds r6, r1, 0 + movs r0, 0 + ldr r1, [r5] + cmp r1, 0x1 + bhi _082E85D4 + movs r0, 0x1 +_082E85D4: + cmp r0, 0 + bne _082E85E6 + movs r0, 0 + ldr r2, [r6] + cmp r2, 0x1 + bhi _082E85E2 + movs r0, 0x1 +_082E85E2: + cmp r0, 0 + beq _082E85EA +_082E85E6: + movs r0, 0x1 + b _082E86C0 +_082E85EA: + movs r0, 0 + cmp r1, 0x4 + bne _082E85F2 + movs r0, 0x1 +_082E85F2: + cmp r0, 0 + beq _082E860A + movs r0, 0 + cmp r2, 0x4 + bne _082E85FE + movs r0, 0x1 +_082E85FE: + cmp r0, 0 + beq _082E860A + ldr r0, [r6, 0x4] + ldr r1, [r5, 0x4] + subs r0, r1 + b _082E86C0 +_082E860A: + movs r1, 0 + ldr r0, [r5] + cmp r0, 0x4 + bne _082E8614 + movs r1, 0x1 +_082E8614: + cmp r1, 0 + bne _082E8662 + movs r1, 0 + cmp r2, 0x4 + bne _082E8620 + movs r1, 0x1 +_082E8620: + cmp r1, 0 + beq _082E8632 +_082E8624: + ldr r0, [r6, 0x4] + movs r1, 0x1 + negs r1, r1 + cmp r0, 0 + beq _082E866C + movs r1, 0x1 + b _082E866C +_082E8632: + movs r1, 0 + cmp r0, 0x2 + bne _082E863A + movs r1, 0x1 +_082E863A: + cmp r1, 0 + beq _082E864A + movs r1, 0 + cmp r2, 0x2 + bne _082E8646 + movs r1, 0x1 +_082E8646: + cmp r1, 0 + bne _082E86BE +_082E864A: + movs r1, 0 + cmp r0, 0x2 + bne _082E8652 + movs r1, 0x1 +_082E8652: + cmp r1, 0 + bne _082E8624 + movs r0, 0 + cmp r2, 0x2 + bne _082E865E + movs r0, 0x1 +_082E865E: + cmp r0, 0 + beq _082E8670 +_082E8662: + ldr r0, [r5, 0x4] + movs r1, 0x1 + cmp r0, 0 + beq _082E866C + subs r1, 0x2 +_082E866C: + adds r0, r1, 0 + b _082E86C0 +_082E8670: + ldr r0, [r6, 0x4] + ldr r4, [r5, 0x4] + cmp r4, r0 + beq _082E8682 +_082E8678: + movs r0, 0x1 + cmp r4, 0 + beq _082E86C0 + subs r0, 0x2 + b _082E86C0 +_082E8682: + ldr r1, [r5, 0x8] + ldr r0, [r6, 0x8] + cmp r1, r0 + bgt _082E8678 + cmp r1, r0 + bge _082E869A +_082E868E: + movs r0, 0x1 + negs r0, r0 + cmp r4, 0 + beq _082E86C0 + movs r0, 0x1 + b _082E86C0 +_082E869A: + ldr r3, [r5, 0x10] + ldr r2, [r6, 0x10] + cmp r3, r2 + bhi _082E8678 + cmp r3, r2 + bne _082E86AE + ldr r1, [r5, 0xC] + ldr r0, [r6, 0xC] + cmp r1, r0 + bhi _082E8678 +_082E86AE: + cmp r2, r3 + bhi _082E868E + cmp r2, r3 + bne _082E86BE + ldr r1, [r6, 0xC] + ldr r0, [r5, 0xC] + cmp r1, r0 + bhi _082E868E +_082E86BE: + movs r0, 0 +_082E86C0: + pop {r4-r6,pc} + thumb_func_end __fpcmp_parts_d + + thumb_func_start __cmpdf2 +__cmpdf2: @ 82E86C4 + push {r4,lr} + sub sp, 0x38 + str r0, [sp, 0x28] + str r1, [sp, 0x2C] + str r2, [sp, 0x30] + str r3, [sp, 0x34] + add r0, sp, 0x28 + mov r1, sp + bl __unpack_d + add r0, sp, 0x30 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_d + add sp, 0x38 + pop {r4,pc} + thumb_func_end __cmpdf2 + + thumb_func_start __eqdf2 +__eqdf2: @ 82E86F0 + push {r4,lr} + sub sp, 0x38 + str r0, [sp, 0x28] + str r1, [sp, 0x2C] + str r2, [sp, 0x30] + str r3, [sp, 0x34] + add r0, sp, 0x28 + mov r1, sp + bl __unpack_d + add r0, sp, 0x30 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E8718 + movs r1, 0x1 +_082E8718: + cmp r1, 0 + bne _082E872A + movs r1, 0 + ldr r0, [sp, 0x14] + cmp r0, 0x1 + bhi _082E8726 + movs r1, 0x1 +_082E8726: + cmp r1, 0 + beq _082E872E +_082E872A: + movs r0, 0x1 + b _082E8736 +_082E872E: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_d +_082E8736: + add sp, 0x38 + pop {r4,pc} + thumb_func_end __eqdf2 + + thumb_func_start __nedf2 +__nedf2: @ 82E873C + push {r4,lr} + sub sp, 0x38 + str r0, [sp, 0x28] + str r1, [sp, 0x2C] + str r2, [sp, 0x30] + str r3, [sp, 0x34] + add r0, sp, 0x28 + mov r1, sp + bl __unpack_d + add r0, sp, 0x30 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E8764 + movs r1, 0x1 +_082E8764: + cmp r1, 0 + bne _082E8776 + movs r1, 0 + ldr r0, [sp, 0x14] + cmp r0, 0x1 + bhi _082E8772 + movs r1, 0x1 +_082E8772: + cmp r1, 0 + beq _082E877A +_082E8776: + movs r0, 0x1 + b _082E8782 +_082E877A: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_d +_082E8782: + add sp, 0x38 + pop {r4,pc} + thumb_func_end __nedf2 + + thumb_func_start __gtdf2 +__gtdf2: @ 82E8788 + push {r4,lr} + sub sp, 0x38 + str r0, [sp, 0x28] + str r1, [sp, 0x2C] + str r2, [sp, 0x30] + str r3, [sp, 0x34] + add r0, sp, 0x28 + mov r1, sp + bl __unpack_d + add r0, sp, 0x30 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E87B0 + movs r1, 0x1 +_082E87B0: + cmp r1, 0 + bne _082E87C2 + movs r1, 0 + ldr r0, [sp, 0x14] + cmp r0, 0x1 + bhi _082E87BE + movs r1, 0x1 +_082E87BE: + cmp r1, 0 + beq _082E87C8 +_082E87C2: + movs r0, 0x1 + negs r0, r0 + b _082E87D0 +_082E87C8: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_d +_082E87D0: + add sp, 0x38 + pop {r4,pc} + thumb_func_end __gtdf2 + + thumb_func_start __gedf2 +@ int __gedf2(double arg_a, double arg_b) +__gedf2: @ 82E87D4 + push {r4,lr} + sub sp, 0x38 + str r0, [sp, 0x28] + str r1, [sp, 0x2C] + str r2, [sp, 0x30] + str r3, [sp, 0x34] + add r0, sp, 0x28 + mov r1, sp + bl __unpack_d + add r0, sp, 0x30 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E87FC + movs r1, 0x1 +_082E87FC: + cmp r1, 0 + bne _082E880E + movs r1, 0 + ldr r0, [sp, 0x14] + cmp r0, 0x1 + bhi _082E880A + movs r1, 0x1 +_082E880A: + cmp r1, 0 + beq _082E8814 +_082E880E: + movs r0, 0x1 + negs r0, r0 + b _082E881C +_082E8814: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_d +_082E881C: + add sp, 0x38 + pop {r4,pc} + thumb_func_end __gedf2 + + thumb_func_start __ltdf2 +__ltdf2: @ 82E8820 + push {r4,lr} + sub sp, 0x38 + str r0, [sp, 0x28] + str r1, [sp, 0x2C] + str r2, [sp, 0x30] + str r3, [sp, 0x34] + add r0, sp, 0x28 + mov r1, sp + bl __unpack_d + add r0, sp, 0x30 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E8848 + movs r1, 0x1 +_082E8848: + cmp r1, 0 + bne _082E885A + movs r1, 0 + ldr r0, [sp, 0x14] + cmp r0, 0x1 + bhi _082E8856 + movs r1, 0x1 +_082E8856: + cmp r1, 0 + beq _082E885E +_082E885A: + movs r0, 0x1 + b _082E8866 +_082E885E: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_d +_082E8866: + add sp, 0x38 + pop {r4,pc} + thumb_func_end __ltdf2 + + thumb_func_start __ledf2 +__ledf2: @ 82E886C + push {r4,lr} + sub sp, 0x38 + str r0, [sp, 0x28] + str r1, [sp, 0x2C] + str r2, [sp, 0x30] + str r3, [sp, 0x34] + add r0, sp, 0x28 + mov r1, sp + bl __unpack_d + add r0, sp, 0x30 + add r4, sp, 0x14 + adds r1, r4, 0 + bl __unpack_d + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E8894 + movs r1, 0x1 +_082E8894: + cmp r1, 0 + bne _082E88A6 + movs r1, 0 + ldr r0, [sp, 0x14] + cmp r0, 0x1 + bhi _082E88A2 + movs r1, 0x1 +_082E88A2: + cmp r1, 0 + beq _082E88AA +_082E88A6: + movs r0, 0x1 + b _082E88B2 +_082E88AA: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_d +_082E88B2: + add sp, 0x38 + pop {r4,pc} + thumb_func_end __ledf2 + + thumb_func_start __floatsidf +__floatsidf: @ 82E88B8 + push {r4,r5,lr} + sub sp, 0x14 + adds r2, r0, 0 + movs r0, 0x3 + str r0, [sp] + lsrs r1, r2, 31 + str r1, [sp, 0x4] + cmp r2, 0 + bne _082E88D0 + movs r0, 0x2 + str r0, [sp] + b _082E8926 +_082E88D0: + movs r0, 0x3C + str r0, [sp, 0x8] + cmp r1, 0 + beq _082E88F6 + movs r0, 0x80 + lsls r0, 24 + cmp r2, r0 + bne _082E88F0 + ldr r1, _082E88EC + ldr r0, _082E88E8 + b _082E892C + .align 2, 0 +_082E88E8: .4byte 0xc1e00000 +_082E88EC: .4byte 0x00000000 +_082E88F0: + negs r0, r2 + asrs r1, r0, 31 + b _082E88FA +_082E88F6: + adds r0, r2, 0 + asrs r1, r2, 31 +_082E88FA: + str r0, [sp, 0xC] + str r1, [sp, 0x10] + ldr r0, [sp, 0x10] + ldr r1, _082E8930 + cmp r0, r1 + bhi _082E8926 + adds r5, r1, 0 + ldr r4, [sp, 0x8] +_082E890A: + ldr r0, [sp, 0xC] + ldr r1, [sp, 0x10] + lsrs r3, r0, 31 + lsls r2, r1, 1 + adds r1, r3, 0 + orrs r1, r2 + lsls r0, 1 + str r0, [sp, 0xC] + str r1, [sp, 0x10] + subs r4, 0x1 + ldr r0, [sp, 0x10] + cmp r0, r5 + bls _082E890A + str r4, [sp, 0x8] +_082E8926: + mov r0, sp + bl __pack_d +_082E892C: + add sp, 0x14 + pop {r4,r5,pc} + .align 2, 0 +_082E8930: .4byte 0x0fffffff + thumb_func_end __floatsidf + + thumb_func_start __fixdfsi +@ int __fixdfsi(double arg_a) +__fixdfsi: @ 82E8934 + push {lr} + sub sp, 0x1C + str r0, [sp, 0x14] + str r1, [sp, 0x18] + add r0, sp, 0x14 + mov r1, sp + bl __unpack_d + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x2 + bne _082E894E + movs r1, 0x1 +_082E894E: + cmp r1, 0 + bne _082E8982 + movs r1, 0 + cmp r0, 0x1 + bhi _082E895A + movs r1, 0x1 +_082E895A: + cmp r1, 0 + bne _082E8982 + movs r1, 0 + cmp r0, 0x4 + bne _082E8966 + movs r1, 0x1 +_082E8966: + cmp r1, 0 + beq _082E897C +_082E896A: + ldr r0, [sp, 0x4] + ldr r1, _082E8978 + cmp r0, 0 + beq _082E89A0 + adds r1, 0x1 + b _082E89A0 + .align 2, 0 +_082E8978: .4byte 0x7fffffff +_082E897C: + ldr r0, [sp, 0x8] + cmp r0, 0 + bge _082E8986 +_082E8982: + movs r0, 0 + b _082E89A2 +_082E8986: + cmp r0, 0x1E + bgt _082E896A + movs r2, 0x3C + subs r2, r0 + ldr r0, [sp, 0xC] + ldr r1, [sp, 0x10] + bl __lshrdi3 + adds r1, r0, 0 + ldr r0, [sp, 0x4] + cmp r0, 0 + beq _082E89A0 + negs r1, r1 +_082E89A0: + adds r0, r1, 0 +_082E89A2: + add sp, 0x1C + pop {pc} + thumb_func_end __fixdfsi + + thumb_func_start __negdf2 +__negdf2: @ 82E89A8 + push {lr} + sub sp, 0x1C + str r0, [sp, 0x14] + str r1, [sp, 0x18] + add r0, sp, 0x14 + mov r1, sp + bl __unpack_d + movs r1, 0 + ldr r0, [sp, 0x4] + cmp r0, 0 + bne _082E89C2 + movs r1, 0x1 +_082E89C2: + str r1, [sp, 0x4] + mov r0, sp + bl __pack_d + add sp, 0x1C + pop {pc} + thumb_func_end __negdf2 + + thumb_func_start __make_dp +__make_dp: @ 82E89D0 + sub sp, 0x4 + push {r4,lr} + sub sp, 0x14 + str r3, [sp, 0x1C] + ldr r3, [sp, 0x1C] + ldr r4, [sp, 0x20] + str r0, [sp] + str r1, [sp, 0x4] + str r2, [sp, 0x8] + str r3, [sp, 0xC] + str r4, [sp, 0x10] + mov r0, sp + bl __pack_d + add sp, 0x14 + pop {r4} + pop {r3} + add sp, 0x4 + bx r3 + thumb_func_end __make_dp + + thumb_func_start __truncdfsf2 +__truncdfsf2: @ 82E89F8 + push {r4,r5,lr} + sub sp, 0x1C + str r0, [sp, 0x14] + str r1, [sp, 0x18] + add r0, sp, 0x14 + mov r1, sp + bl __unpack_d + ldr r2, [sp, 0xC] + ldr r3, [sp, 0x10] + lsls r5, r3, 2 + lsrs r4, r2, 30 + adds r0, r5, 0 + orrs r0, r4 + adds r5, r0, 0 + ldr r4, _082E8A38 + adds r0, r2, 0 + ands r0, r4 + movs r1, 0 + orrs r0, r1 + cmp r0, 0 + beq _082E8A28 + movs r0, 0x1 + orrs r5, r0 +_082E8A28: + ldr r0, [sp] + ldr r1, [sp, 0x4] + ldr r2, [sp, 0x8] + adds r3, r5, 0 + bl __make_fp + add sp, 0x1C + pop {r4,r5,pc} + .align 2, 0 +_082E8A38: .4byte 0x3fffffff + thumb_func_end __truncdfsf2 + + thumb_func_start __pack_f +__pack_f: @ 82E8A3C + push {r4-r6,lr} + ldr r2, [r0, 0xC] + ldr r6, [r0, 0x4] + movs r5, 0 + movs r1, 0 + ldr r3, [r0] + cmp r3, 0x1 + bhi _082E8A4E + movs r1, 0x1 +_082E8A4E: + cmp r1, 0 + beq _082E8A5C + movs r5, 0xFF + movs r0, 0x80 + lsls r0, 13 + orrs r2, r0 + b _082E8AC2 +_082E8A5C: + movs r1, 0 + cmp r3, 0x4 + bne _082E8A64 + movs r1, 0x1 +_082E8A64: + cmp r1, 0 + bne _082E8A98 + movs r1, 0 + cmp r3, 0x2 + bne _082E8A70 + movs r1, 0x1 +_082E8A70: + cmp r1, 0 + beq _082E8A78 + movs r2, 0 + b _082E8AC2 +_082E8A78: + cmp r2, 0 + beq _082E8AC2 + ldr r0, [r0, 0x8] + movs r3, 0x7E + negs r3, r3 + cmp r0, r3 + bge _082E8A94 + subs r0, r3, r0 + cmp r0, 0x19 + ble _082E8A90 + movs r2, 0 + b _082E8AC0 +_082E8A90: + lsrs r2, r0 + b _082E8AC0 +_082E8A94: + cmp r0, 0x7F + ble _082E8A9E +_082E8A98: + movs r5, 0xFF + movs r2, 0 + b _082E8AC2 +_082E8A9E: + adds r5, r0, 0 + adds r5, 0x7F + movs r0, 0x7F + ands r0, r2 + cmp r0, 0x40 + bne _082E8AB6 + movs r0, 0x80 + ands r0, r2 + cmp r0, 0 + beq _082E8AB8 + adds r2, 0x40 + b _082E8AB8 +_082E8AB6: + adds r2, 0x3F +_082E8AB8: + cmp r2, 0 + bge _082E8AC0 + lsrs r2, 1 + adds r5, 0x1 +_082E8AC0: + lsrs r2, 7 +_082E8AC2: + ldr r0, _082E8AE4 + ands r2, r0 + ldr r0, _082E8AE8 + ands r4, r0 + orrs r4, r2 + movs r0, 0xFF + ands r5, r0 + lsls r1, r5, 23 + ldr r0, _082E8AEC + ands r4, r0 + orrs r4, r1 + lsls r1, r6, 31 + ldr r0, _082E8AF0 + ands r4, r0 + orrs r4, r1 + adds r0, r4, 0 + pop {r4-r6,pc} + .align 2, 0 +_082E8AE4: .4byte 0x007fffff +_082E8AE8: .4byte 0xff800000 +_082E8AEC: .4byte 0x807fffff +_082E8AF0: .4byte 0x7fffffff + thumb_func_end __pack_f + + thumb_func_start __unpack_f +__unpack_f: @ 82E8AF4 + push {r4,lr} + adds r3, r1, 0 + ldr r0, [r0] + lsls r1, r0, 9 + lsrs r2, r1, 9 + lsls r1, r0, 1 + lsrs r1, 24 + lsrs r0, 31 + str r0, [r3, 0x4] + cmp r1, 0 + bne _082E8B38 + cmp r2, 0 + bne _082E8B14 + movs r0, 0x2 + str r0, [r3] + b _082E8B6C +_082E8B14: + adds r4, r1, 0 + subs r4, 0x7E + str r4, [r3, 0x8] + lsls r2, 7 + movs r0, 0x3 + str r0, [r3] + ldr r1, _082E8B34 + cmp r2, r1 + bhi _082E8B54 + adds r0, r4, 0 +_082E8B28: + lsls r2, 1 + subs r0, 0x1 + cmp r2, r1 + bls _082E8B28 + str r0, [r3, 0x8] + b _082E8B54 + .align 2, 0 +_082E8B34: .4byte 0x3fffffff +_082E8B38: + cmp r1, 0xFF + bne _082E8B58 + cmp r2, 0 + bne _082E8B46 + movs r0, 0x4 + str r0, [r3] + b _082E8B6C +_082E8B46: + movs r0, 0x80 + lsls r0, 13 + ands r0, r2 + cmp r0, 0 + beq _082E8B52 + movs r0, 0x1 +_082E8B52: + str r0, [r3] +_082E8B54: + str r2, [r3, 0xC] + b _082E8B6C +_082E8B58: + adds r0, r1, 0 + subs r0, 0x7F + str r0, [r3, 0x8] + movs r0, 0x3 + str r0, [r3] + lsls r0, r2, 7 + movs r1, 0x80 + lsls r1, 23 + orrs r0, r1 + str r0, [r3, 0xC] +_082E8B6C: + pop {r4,pc} + thumb_func_end __unpack_f + + thumb_func_start __fpadd_parts_f +__fpadd_parts_f: @ 82E8B70 + push {r4-r7,lr} + mov r7, r8 + push {r7} + adds r6, r0, 0 + adds r7, r1, 0 + adds r5, r2, 0 + movs r0, 0 + ldr r2, [r6] + cmp r2, 0x1 + bhi _082E8B86 + movs r0, 0x1 +_082E8B86: + cmp r0, 0 + beq _082E8B8E +_082E8B8A: + adds r0, r6, 0 + b _082E8CE4 +_082E8B8E: + movs r1, 0 + ldr r0, [r7] + cmp r0, 0x1 + bhi _082E8B98 + movs r1, 0x1 +_082E8B98: + cmp r1, 0 + bne _082E8C0C + movs r1, 0 + cmp r2, 0x4 + bne _082E8BA4 + movs r1, 0x1 +_082E8BA4: + cmp r1, 0 + beq _082E8BC4 + movs r1, 0 + cmp r0, 0x4 + bne _082E8BB0 + movs r1, 0x1 +_082E8BB0: + cmp r1, 0 + beq _082E8B8A + ldr r1, [r6, 0x4] + ldr r0, [r7, 0x4] + cmp r1, r0 + beq _082E8B8A + ldr r0, _082E8BC0 + b _082E8CE4 + .align 2, 0 +_082E8BC0: .4byte 0x03001a98 +_082E8BC4: + movs r1, 0 + cmp r0, 0x4 + bne _082E8BCC + movs r1, 0x1 +_082E8BCC: + cmp r1, 0 + bne _082E8C0C + movs r1, 0 + cmp r0, 0x2 + bne _082E8BD8 + movs r1, 0x1 +_082E8BD8: + cmp r1, 0 + beq _082E8BFE + movs r0, 0 + cmp r2, 0x2 + bne _082E8BE4 + movs r0, 0x1 +_082E8BE4: + cmp r0, 0 + beq _082E8B8A + adds r1, r5, 0 + adds r0, r6, 0 + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldr r0, [r0] + str r0, [r1] + ldr r0, [r6, 0x4] + ldr r1, [r7, 0x4] + ands r0, r1 + str r0, [r5, 0x4] + b _082E8CE2 +_082E8BFE: + movs r1, 0 + ldr r0, [r6] + cmp r0, 0x2 + bne _082E8C08 + movs r1, 0x1 +_082E8C08: + cmp r1, 0 + beq _082E8C10 +_082E8C0C: + adds r0, r7, 0 + b _082E8CE4 +_082E8C10: + ldr r1, [r6, 0x8] + ldr r3, [r7, 0x8] + ldr r2, [r6, 0xC] + ldr r4, [r7, 0xC] + subs r0, r1, r3 + cmp r0, 0 + bge _082E8C20 + negs r0, r0 +_082E8C20: + cmp r0, 0x1F + bgt _082E8C64 + ldr r6, [r6, 0x4] + ldr r7, [r7, 0x4] + mov r8, r7 + cmp r1, r3 + ble _082E8C46 + movs r7, 0x1 + mov r12, r7 + subs r3, r1, r3 +_082E8C34: + subs r3, 0x1 + adds r0, r4, 0 + mov r7, r12 + ands r0, r7 + lsrs r4, 1 + orrs r4, r0 + cmp r3, 0 + bne _082E8C34 + adds r3, r1, 0 +_082E8C46: + cmp r3, r1 + ble _082E8C76 + movs r0, 0x1 + mov r12, r0 + subs r1, r3, r1 +_082E8C50: + subs r1, 0x1 + adds r0, r2, 0 + mov r7, r12 + ands r0, r7 + lsrs r2, 1 + orrs r2, r0 + cmp r1, 0 + bne _082E8C50 + adds r1, r3, 0 + b _082E8C76 +_082E8C64: + cmp r1, r3 + ble _082E8C6C + movs r4, 0 + b _082E8C70 +_082E8C6C: + adds r1, r3, 0 + movs r2, 0 +_082E8C70: + ldr r6, [r6, 0x4] + ldr r7, [r7, 0x4] + mov r8, r7 +_082E8C76: + cmp r6, r8 + beq _082E8CC0 + cmp r6, 0 + beq _082E8C82 + subs r3, r4, r2 + b _082E8C84 +_082E8C82: + subs r3, r2, r4 +_082E8C84: + cmp r3, 0 + blt _082E8C92 + movs r0, 0 + str r0, [r5, 0x4] + str r1, [r5, 0x8] + str r3, [r5, 0xC] + b _082E8C9C +_082E8C92: + movs r0, 0x1 + str r0, [r5, 0x4] + str r1, [r5, 0x8] + negs r0, r3 + str r0, [r5, 0xC] +_082E8C9C: + ldr r1, [r5, 0xC] + subs r0, r1, 0x1 + ldr r2, _082E8CBC + cmp r0, r2 + bhi _082E8CC8 +_082E8CA6: + lsls r0, r1, 1 + str r0, [r5, 0xC] + ldr r1, [r5, 0x8] + subs r1, 0x1 + str r1, [r5, 0x8] + adds r1, r0, 0 + subs r0, r1, 0x1 + cmp r0, r2 + bls _082E8CA6 + b _082E8CC8 + .align 2, 0 +_082E8CBC: .4byte 0x3ffffffe +_082E8CC0: + str r6, [r5, 0x4] + str r1, [r5, 0x8] + adds r0, r2, r4 + str r0, [r5, 0xC] +_082E8CC8: + movs r0, 0x3 + str r0, [r5] + ldr r1, [r5, 0xC] + cmp r1, 0 + bge _082E8CE2 + movs r0, 0x1 + ands r0, r1 + lsrs r1, 1 + orrs r0, r1 + str r0, [r5, 0xC] + ldr r0, [r5, 0x8] + adds r0, 0x1 + str r0, [r5, 0x8] +_082E8CE2: + adds r0, r5, 0 +_082E8CE4: + pop {r3} + mov r8, r3 + pop {r4-r7,pc} + thumb_func_end __fpadd_parts_f + + thumb_func_start __addsf3 +__addsf3: @ 82E8CEC + push {r4,lr} + sub sp, 0x38 + str r0, [sp, 0x30] + str r1, [sp, 0x34] + add r0, sp, 0x30 + mov r1, sp + bl __unpack_f + add r0, sp, 0x34 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + add r2, sp, 0x20 + mov r0, sp + adds r1, r4, 0 + bl __fpadd_parts_f + bl __pack_f + add sp, 0x38 + pop {r4,pc} + thumb_func_end __addsf3 + + thumb_func_start __subsf3 +__subsf3: @ 82E8D18 + push {r4,lr} + sub sp, 0x38 + str r0, [sp, 0x30] + str r1, [sp, 0x34] + add r0, sp, 0x30 + mov r1, sp + bl __unpack_f + add r0, sp, 0x34 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + ldr r0, [r4, 0x4] + movs r1, 0x1 + eors r0, r1 + str r0, [r4, 0x4] + add r2, sp, 0x20 + mov r0, sp + adds r1, r4, 0 + bl __fpadd_parts_f + bl __pack_f + add sp, 0x38 + pop {r4,pc} + thumb_func_end __subsf3 + + thumb_func_start __mulsf3 +__mulsf3: @ 82E8D4C + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + sub sp, 0x38 + str r0, [sp, 0x30] + str r1, [sp, 0x34] + add r0, sp, 0x30 + mov r1, sp + bl __unpack_f + add r0, sp, 0x34 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + mov r7, sp + add r0, sp, 0x20 + mov r8, r0 + movs r0, 0 + ldr r1, [sp] + mov r9, r8 + cmp r1, 0x1 + bhi _082E8D7E + movs r0, 0x1 +_082E8D7E: + cmp r0, 0 + bne _082E8DDC + movs r2, 0 + ldr r0, [sp, 0x10] + cmp r0, 0x1 + bhi _082E8D8C + movs r2, 0x1 +_082E8D8C: + cmp r2, 0 + beq _082E8D94 + ldr r0, [sp, 0x4] + b _082E8DFC +_082E8D94: + movs r2, 0 + cmp r1, 0x4 + bne _082E8D9C + movs r2, 0x1 +_082E8D9C: + cmp r2, 0 + beq _082E8DAE + movs r1, 0 + cmp r0, 0x2 + bne _082E8DA8 + movs r1, 0x1 +_082E8DA8: + cmp r1, 0 + bne _082E8DC6 + b _082E8DDC +_082E8DAE: + movs r2, 0 + cmp r0, 0x4 + bne _082E8DB6 + movs r2, 0x1 +_082E8DB6: + cmp r2, 0 + beq _082E8DD0 + movs r0, 0 + cmp r1, 0x2 + bne _082E8DC2 + movs r0, 0x1 +_082E8DC2: + cmp r0, 0 + beq _082E8DFA +_082E8DC6: + ldr r0, _082E8DCC + b _082E8E9E + .align 2, 0 +_082E8DCC: .4byte 0x03001a98 +_082E8DD0: + movs r2, 0 + cmp r1, 0x2 + bne _082E8DD8 + movs r2, 0x1 +_082E8DD8: + cmp r2, 0 + beq _082E8DEE +_082E8DDC: + ldr r0, [sp, 0x4] + ldr r1, [sp, 0x14] + eors r0, r1 + negs r1, r0 + orrs r1, r0 + lsrs r1, 31 + str r1, [sp, 0x4] + mov r0, sp + b _082E8E9E +_082E8DEE: + movs r1, 0 + cmp r0, 0x2 + bne _082E8DF6 + movs r1, 0x1 +_082E8DF6: + cmp r1, 0 + beq _082E8E0C +_082E8DFA: + ldr r0, [r7, 0x4] +_082E8DFC: + ldr r1, [sp, 0x14] + eors r0, r1 + negs r1, r0 + orrs r1, r0 + lsrs r1, 31 + str r1, [sp, 0x14] + adds r0, r4, 0 + b _082E8E9E +_082E8E0C: + ldr r0, [r7, 0xC] + movs r1, 0 + ldr r2, [sp, 0x1C] + movs r3, 0 + bl __muldi3 + adds r2, r1, 0 + adds r5, r2, 0 + adds r6, r0, 0 + ldr r4, [r7, 0x8] + ldr r0, [sp, 0x18] + adds r4, r0 + str r4, [sp, 0x28] + ldr r1, [r7, 0x4] + ldr r0, [sp, 0x14] + eors r1, r0 + negs r0, r1 + orrs r0, r1 + lsrs r0, 31 + str r0, [sp, 0x24] + adds r4, 0x2 + str r4, [sp, 0x28] + cmp r2, 0 + bge _082E8E58 + movs r2, 0x1 + movs r1, 0x80 + lsls r1, 24 +_082E8E42: + adds r4, 0x1 + adds r0, r5, 0 + ands r0, r2 + cmp r0, 0 + beq _082E8E50 + lsrs r6, 1 + orrs r6, r1 +_082E8E50: + lsrs r5, 1 + cmp r5, 0 + blt _082E8E42 + str r4, [sp, 0x28] +_082E8E58: + ldr r0, _082E8EAC + cmp r5, r0 + bhi _082E8E7E + movs r4, 0x80 + lsls r4, 24 + movs r3, 0x1 + adds r2, r0, 0 + ldr r1, [sp, 0x28] +_082E8E68: + subs r1, 0x1 + lsls r5, 1 + adds r0, r6, 0 + ands r0, r4 + cmp r0, 0 + beq _082E8E76 + orrs r5, r3 +_082E8E76: + lsls r6, 1 + cmp r5, r2 + bls _082E8E68 + str r1, [sp, 0x28] +_082E8E7E: + movs r0, 0x7F + ands r0, r5 + cmp r0, 0x40 + bne _082E8E94 + movs r0, 0x80 + ands r0, r5 + cmp r0, 0 + bne _082E8E92 + cmp r6, 0 + beq _082E8E94 +_082E8E92: + adds r5, 0x40 +_082E8E94: + str r5, [sp, 0x2C] + movs r0, 0x3 + mov r1, r8 + str r0, [r1] + mov r0, r9 +_082E8E9E: + bl __pack_f + add sp, 0x38 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7,pc} + .align 2, 0 +_082E8EAC: .4byte 0x3fffffff + thumb_func_end __mulsf3 + + thumb_func_start __divsf3 +__divsf3: @ 82E8EB0 + push {r4-r6,lr} + sub sp, 0x28 + str r0, [sp, 0x20] + str r1, [sp, 0x24] + add r0, sp, 0x20 + mov r1, sp + bl __unpack_f + add r0, sp, 0x24 + add r5, sp, 0x10 + adds r1, r5, 0 + bl __unpack_f + mov r4, sp + movs r0, 0 + ldr r3, [sp] + cmp r3, 0x1 + bhi _082E8ED6 + movs r0, 0x1 +_082E8ED6: + cmp r0, 0 + beq _082E8EDE + mov r1, sp + b _082E8F90 +_082E8EDE: + movs r0, 0 + ldr r2, [sp, 0x10] + adds r6, r2, 0 + cmp r2, 0x1 + bhi _082E8EEA + movs r0, 0x1 +_082E8EEA: + cmp r0, 0 + beq _082E8EF2 + adds r1, r5, 0 + b _082E8F90 +_082E8EF2: + ldr r0, [sp, 0x4] + ldr r1, [sp, 0x14] + eors r0, r1 + str r0, [sp, 0x4] + movs r0, 0 + cmp r3, 0x4 + bne _082E8F02 + movs r0, 0x1 +_082E8F02: + cmp r0, 0 + bne _082E8F12 + movs r0, 0 + cmp r3, 0x2 + bne _082E8F0E + movs r0, 0x1 +_082E8F0E: + cmp r0, 0 + beq _082E8F24 +_082E8F12: + ldr r0, [r4] + adds r1, r4, 0 + cmp r0, r6 + bne _082E8F90 + ldr r1, _082E8F20 + b _082E8F90 + .align 2, 0 +_082E8F20: .4byte 0x03001a98 +_082E8F24: + movs r1, 0 + cmp r2, 0x4 + bne _082E8F2C + movs r1, 0x1 +_082E8F2C: + cmp r1, 0 + beq _082E8F38 + str r0, [sp, 0xC] + str r0, [sp, 0x8] + mov r1, sp + b _082E8F90 +_082E8F38: + movs r0, 0 + cmp r2, 0x2 + bne _082E8F40 + movs r0, 0x1 +_082E8F40: + cmp r0, 0 + beq _082E8F4A + movs r0, 0x4 + str r0, [r4] + b _082E8F8E +_082E8F4A: + ldr r1, [r4, 0x8] + ldr r0, [sp, 0x18] + subs r0, r1, r0 + str r0, [r4, 0x8] + ldr r2, [r4, 0xC] + ldr r3, [sp, 0x1C] + cmp r2, r3 + bcs _082E8F60 + lsls r2, 1 + subs r0, 0x1 + str r0, [r4, 0x8] +_082E8F60: + movs r0, 0x80 + lsls r0, 23 + movs r1, 0 +_082E8F66: + cmp r2, r3 + bcc _082E8F6E + orrs r1, r0 + subs r2, r3 +_082E8F6E: + lsrs r0, 1 + lsls r2, 1 + cmp r0, 0 + bne _082E8F66 + movs r0, 0x7F + ands r0, r1 + cmp r0, 0x40 + bne _082E8F8C + movs r0, 0x80 + ands r0, r1 + cmp r0, 0 + bne _082E8F8A + cmp r2, 0 + beq _082E8F8C +_082E8F8A: + adds r1, 0x40 +_082E8F8C: + str r1, [r4, 0xC] +_082E8F8E: + adds r1, r4, 0 +_082E8F90: + adds r0, r1, 0 + bl __pack_f + add sp, 0x28 + pop {r4-r6,pc} + thumb_func_end __divsf3 + + thumb_func_start __fpcmp_parts_f +__fpcmp_parts_f: @ 82E8F9C + push {r4,lr} + adds r4, r0, 0 + movs r0, 0 + ldr r2, [r4] + cmp r2, 0x1 + bhi _082E8FAA + movs r0, 0x1 +_082E8FAA: + cmp r0, 0 + bne _082E8FBC + movs r0, 0 + ldr r3, [r1] + cmp r3, 0x1 + bhi _082E8FB8 + movs r0, 0x1 +_082E8FB8: + cmp r0, 0 + beq _082E8FC0 +_082E8FBC: + movs r0, 0x1 + b _082E907E +_082E8FC0: + movs r0, 0 + cmp r2, 0x4 + bne _082E8FC8 + movs r0, 0x1 +_082E8FC8: + cmp r0, 0 + beq _082E8FE0 + movs r0, 0 + cmp r3, 0x4 + bne _082E8FD4 + movs r0, 0x1 +_082E8FD4: + cmp r0, 0 + beq _082E8FE0 + ldr r0, [r1, 0x4] + ldr r1, [r4, 0x4] + subs r0, r1 + b _082E907E +_082E8FE0: + movs r2, 0 + ldr r0, [r4] + cmp r0, 0x4 + bne _082E8FEA + movs r2, 0x1 +_082E8FEA: + cmp r2, 0 + bne _082E9038 + movs r2, 0 + cmp r3, 0x4 + bne _082E8FF6 + movs r2, 0x1 +_082E8FF6: + cmp r2, 0 + beq _082E9008 +_082E8FFA: + ldr r0, [r1, 0x4] + movs r1, 0x1 + negs r1, r1 + cmp r0, 0 + beq _082E9042 + movs r1, 0x1 + b _082E9042 +_082E9008: + movs r2, 0 + cmp r0, 0x2 + bne _082E9010 + movs r2, 0x1 +_082E9010: + cmp r2, 0 + beq _082E9020 + movs r2, 0 + cmp r3, 0x2 + bne _082E901C + movs r2, 0x1 +_082E901C: + cmp r2, 0 + bne _082E907C +_082E9020: + movs r2, 0 + cmp r0, 0x2 + bne _082E9028 + movs r2, 0x1 +_082E9028: + cmp r2, 0 + bne _082E8FFA + movs r0, 0 + cmp r3, 0x2 + bne _082E9034 + movs r0, 0x1 +_082E9034: + cmp r0, 0 + beq _082E9046 +_082E9038: + ldr r0, [r4, 0x4] + movs r1, 0x1 + cmp r0, 0 + beq _082E9042 + subs r1, 0x2 +_082E9042: + adds r0, r1, 0 + b _082E907E +_082E9046: + ldr r3, [r4, 0x4] + ldr r0, [r1, 0x4] + cmp r3, r0 + beq _082E9058 +_082E904E: + movs r0, 0x1 + cmp r3, 0 + beq _082E907E + subs r0, 0x2 + b _082E907E +_082E9058: + ldr r2, [r4, 0x8] + ldr r0, [r1, 0x8] + cmp r2, r0 + bgt _082E904E + cmp r2, r0 + bge _082E9070 +_082E9064: + movs r0, 0x1 + negs r0, r0 + cmp r3, 0 + beq _082E907E + movs r0, 0x1 + b _082E907E +_082E9070: + ldr r0, [r4, 0xC] + ldr r1, [r1, 0xC] + cmp r0, r1 + bhi _082E904E + cmp r0, r1 + bcc _082E9064 +_082E907C: + movs r0, 0 +_082E907E: + pop {r4,pc} + thumb_func_end __fpcmp_parts_f + + thumb_func_start __cmpsf2 +__cmpsf2: @ 82E9080 + push {r4,lr} + sub sp, 0x28 + str r0, [sp, 0x20] + str r1, [sp, 0x24] + add r0, sp, 0x20 + mov r1, sp + bl __unpack_f + add r0, sp, 0x24 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_f + add sp, 0x28 + pop {r4,pc} + thumb_func_end __cmpsf2 + + thumb_func_start __eqsf2 +__eqsf2: @ 82E90A8 + push {r4,lr} + sub sp, 0x28 + str r0, [sp, 0x20] + str r1, [sp, 0x24] + add r0, sp, 0x20 + mov r1, sp + bl __unpack_f + add r0, sp, 0x24 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E90CC + movs r1, 0x1 +_082E90CC: + cmp r1, 0 + bne _082E90DE + movs r1, 0 + ldr r0, [sp, 0x10] + cmp r0, 0x1 + bhi _082E90DA + movs r1, 0x1 +_082E90DA: + cmp r1, 0 + beq _082E90E2 +_082E90DE: + movs r0, 0x1 + b _082E90EA +_082E90E2: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_f +_082E90EA: + add sp, 0x28 + pop {r4,pc} + thumb_func_end __eqsf2 + + thumb_func_start __nesf2 +__nesf2: @ 82E90F0 + push {r4,lr} + sub sp, 0x28 + str r0, [sp, 0x20] + str r1, [sp, 0x24] + add r0, sp, 0x20 + mov r1, sp + bl __unpack_f + add r0, sp, 0x24 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E9114 + movs r1, 0x1 +_082E9114: + cmp r1, 0 + bne _082E9126 + movs r1, 0 + ldr r0, [sp, 0x10] + cmp r0, 0x1 + bhi _082E9122 + movs r1, 0x1 +_082E9122: + cmp r1, 0 + beq _082E912A +_082E9126: + movs r0, 0x1 + b _082E9132 +_082E912A: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_f +_082E9132: + add sp, 0x28 + pop {r4,pc} + thumb_func_end __nesf2 + + thumb_func_start __gtsf2 +__gtsf2: @ 82E9138 + push {r4,lr} + sub sp, 0x28 + str r0, [sp, 0x20] + str r1, [sp, 0x24] + add r0, sp, 0x20 + mov r1, sp + bl __unpack_f + add r0, sp, 0x24 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E915C + movs r1, 0x1 +_082E915C: + cmp r1, 0 + bne _082E916E + movs r1, 0 + ldr r0, [sp, 0x10] + cmp r0, 0x1 + bhi _082E916A + movs r1, 0x1 +_082E916A: + cmp r1, 0 + beq _082E9174 +_082E916E: + movs r0, 0x1 + negs r0, r0 + b _082E917C +_082E9174: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_f +_082E917C: + add sp, 0x28 + pop {r4,pc} + thumb_func_end __gtsf2 + + thumb_func_start __gesf2 +__gesf2: @ 82E9180 + push {r4,lr} + sub sp, 0x28 + str r0, [sp, 0x20] + str r1, [sp, 0x24] + add r0, sp, 0x20 + mov r1, sp + bl __unpack_f + add r0, sp, 0x24 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E91A4 + movs r1, 0x1 +_082E91A4: + cmp r1, 0 + bne _082E91B6 + movs r1, 0 + ldr r0, [sp, 0x10] + cmp r0, 0x1 + bhi _082E91B2 + movs r1, 0x1 +_082E91B2: + cmp r1, 0 + beq _082E91BC +_082E91B6: + movs r0, 0x1 + negs r0, r0 + b _082E91C4 +_082E91BC: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_f +_082E91C4: + add sp, 0x28 + pop {r4,pc} + thumb_func_end __gesf2 + + thumb_func_start __ltsf2 +__ltsf2: @ 82E91C8 + push {r4,lr} + sub sp, 0x28 + str r0, [sp, 0x20] + str r1, [sp, 0x24] + add r0, sp, 0x20 + mov r1, sp + bl __unpack_f + add r0, sp, 0x24 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E91EC + movs r1, 0x1 +_082E91EC: + cmp r1, 0 + bne _082E91FE + movs r1, 0 + ldr r0, [sp, 0x10] + cmp r0, 0x1 + bhi _082E91FA + movs r1, 0x1 +_082E91FA: + cmp r1, 0 + beq _082E9202 +_082E91FE: + movs r0, 0x1 + b _082E920A +_082E9202: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_f +_082E920A: + add sp, 0x28 + pop {r4,pc} + thumb_func_end __ltsf2 + + thumb_func_start __lesf2 +__lesf2: @ 82E9210 + push {r4,lr} + sub sp, 0x28 + str r0, [sp, 0x20] + str r1, [sp, 0x24] + add r0, sp, 0x20 + mov r1, sp + bl __unpack_f + add r0, sp, 0x24 + add r4, sp, 0x10 + adds r1, r4, 0 + bl __unpack_f + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x1 + bhi _082E9234 + movs r1, 0x1 +_082E9234: + cmp r1, 0 + bne _082E9246 + movs r1, 0 + ldr r0, [sp, 0x10] + cmp r0, 0x1 + bhi _082E9242 + movs r1, 0x1 +_082E9242: + cmp r1, 0 + beq _082E924A +_082E9246: + movs r0, 0x1 + b _082E9252 +_082E924A: + mov r0, sp + adds r1, r4, 0 + bl __fpcmp_parts_f +_082E9252: + add sp, 0x28 + pop {r4,pc} + thumb_func_end __lesf2 + + thumb_func_start __floatsisf +__floatsisf: @ 82E9258 + push {lr} + sub sp, 0x10 + adds r1, r0, 0 + movs r0, 0x3 + str r0, [sp] + lsrs r2, r1, 31 + str r2, [sp, 0x4] + cmp r1, 0 + bne _082E9270 + movs r0, 0x2 + str r0, [sp] + b _082E92A8 +_082E9270: + movs r0, 0x1E + str r0, [sp, 0x8] + cmp r2, 0 + beq _082E928E + movs r0, 0x80 + lsls r0, 24 + cmp r1, r0 + bne _082E9288 + ldr r0, _082E9284 + b _082E92AE + .align 2, 0 +_082E9284: .4byte 0xcf000000 +_082E9288: + negs r0, r1 + str r0, [sp, 0xC] + b _082E9290 +_082E928E: + str r1, [sp, 0xC] +_082E9290: + ldr r2, [sp, 0xC] + ldr r3, _082E92B4 + cmp r2, r3 + bhi _082E92A8 + ldr r1, [sp, 0x8] +_082E929A: + lsls r0, r2, 1 + subs r1, 0x1 + adds r2, r0, 0 + cmp r0, r3 + bls _082E929A + str r1, [sp, 0x8] + str r0, [sp, 0xC] +_082E92A8: + mov r0, sp + bl __pack_f +_082E92AE: + add sp, 0x10 + pop {pc} + .align 2, 0 +_082E92B4: .4byte 0x3fffffff + thumb_func_end __floatsisf + + thumb_func_start __fixsfsi +__fixsfsi: @ 82E92B8 + push {lr} + sub sp, 0x14 + str r0, [sp, 0x10] + add r0, sp, 0x10 + mov r1, sp + bl __unpack_f + movs r1, 0 + ldr r0, [sp] + cmp r0, 0x2 + bne _082E92D0 + movs r1, 0x1 +_082E92D0: + cmp r1, 0 + bne _082E9302 + movs r1, 0 + cmp r0, 0x1 + bhi _082E92DC + movs r1, 0x1 +_082E92DC: + cmp r1, 0 + bne _082E9302 + movs r1, 0 + cmp r0, 0x4 + bne _082E92E8 + movs r1, 0x1 +_082E92E8: + cmp r1, 0 + beq _082E92FC +_082E92EC: + ldr r0, [sp, 0x4] + ldr r1, _082E92F8 + cmp r0, 0 + beq _082E931A + adds r1, 0x1 + b _082E931A + .align 2, 0 +_082E92F8: .4byte 0x7fffffff +_082E92FC: + ldr r1, [sp, 0x8] + cmp r1, 0 + bge _082E9306 +_082E9302: + movs r0, 0 + b _082E931C +_082E9306: + cmp r1, 0x1E + bgt _082E92EC + movs r0, 0x1E + subs r0, r1 + ldr r1, [sp, 0xC] + lsrs r1, r0 + ldr r0, [sp, 0x4] + cmp r0, 0 + beq _082E931A + negs r1, r1 +_082E931A: + adds r0, r1, 0 +_082E931C: + add sp, 0x14 + pop {pc} + thumb_func_end __fixsfsi + + thumb_func_start __negsf2 +__negsf2: @ 82E9320 + push {lr} + sub sp, 0x14 + str r0, [sp, 0x10] + add r0, sp, 0x10 + mov r1, sp + bl __unpack_f + movs r1, 0 + ldr r0, [sp, 0x4] + cmp r0, 0 + bne _082E9338 + movs r1, 0x1 +_082E9338: + str r1, [sp, 0x4] + mov r0, sp + bl __pack_f + add sp, 0x14 + pop {pc} + thumb_func_end __negsf2 + + thumb_func_start __make_fp +__make_fp: @ 82E9344 + push {lr} + sub sp, 0x10 + str r0, [sp] + str r1, [sp, 0x4] + str r2, [sp, 0x8] + str r3, [sp, 0xC] + mov r0, sp + bl __pack_f + add sp, 0x10 + pop {pc} + thumb_func_end __make_fp + + thumb_func_start __extendsfdf2 +__extendsfdf2: @ 82E935C + push {r4-r6,lr} + sub sp, 0x18 + str r0, [sp, 0x14] + add r0, sp, 0x14 + add r1, sp, 0x4 + bl __unpack_f + ldr r0, [sp, 0x4] + ldr r1, [sp, 0x8] + ldr r2, [sp, 0xC] + ldr r3, [sp, 0x10] + movs r4, 0 + lsrs r6, r3, 2 + lsls r5, r4, 30 + adds r4, r6, 0 + orrs r4, r5 + lsls r3, 30 + str r4, [sp] + bl __make_dp + add sp, 0x18 + pop {r4-r6,pc} + thumb_func_end __extendsfdf2 + + thumb_func_start __lshrdi3 +__lshrdi3: @ 82E9388 + push {r4-r6,lr} + adds r6, r1, 0 + adds r5, r0, 0 + cmp r2, 0 + beq _082E93B8 + movs r0, 0x20 + subs r0, r2 + cmp r0, 0 + bgt _082E93A4 + movs r4, 0 + negs r0, r0 + adds r3, r6, 0 + lsrs r3, r0 + b _082E93B4 +_082E93A4: + adds r1, r6, 0 + lsls r1, r0 + adds r4, r6, 0 + lsrs r4, r2 + adds r0, r5, 0 + lsrs r0, r2 + adds r3, r0, 0 + orrs r3, r1 +_082E93B4: + adds r1, r4, 0 + adds r0, r3, 0 +_082E93B8: + pop {r4-r6,pc} + thumb_func_end __lshrdi3 + + thumb_func_start __negdi2 +__negdi2: @ 82E93BC + push {r4,lr} + negs r2, r0 + adds r3, r2, 0 + negs r1, r1 + cmp r2, 0 + beq _082E93CA + subs r1, 0x1 +_082E93CA: + adds r4, r1, 0 + adds r1, r4, 0 + adds r0, r3, 0 + pop {r4,pc} + thumb_func_end __negdi2 + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/librtc.s b/asm/librtc.s index 6bfc89922..f19734d61 100644 --- a/asm/librtc.s +++ b/asm/librtc.s @@ -1134,7 +1134,7 @@ _082E29E8: RTC_SetReadWriteInternal: @ 82E29F0 push {r7,lr} mov r7, sp - ldr r0, =GPIOPortReadWrite + ldr r0, =GPIOPortReadEnable movs r1, 0x1 strh r1, [r0] pop {r7} @@ -1148,7 +1148,7 @@ RTC_SetReadWriteInternal: @ 82E29F0 RTC_SetReadOnlyInternal: @ 82E2A04 push {r7,lr} mov r7, sp - ldr r0, =GPIOPortReadWrite + ldr r0, =GPIOPortReadEnable movs r1, 0 strh r1, [r0] pop {r7} diff --git a/asm/rom_header.s b/asm/rom_header.s index e03b9ceb3..1cef6393c 100644 --- a/asm/rom_header.s +++ b/asm/rom_header.s @@ -1,9 +1,30 @@ + .global RomHeaderNintendoLogo RomHeaderNintendoLogo: - .incbin "base_emerald.gba", 0x4, 0xA0 - 0x4 + .byte 0x24,0xff,0xae,0x51,0x69,0x9a,0xa2,0x21 + .byte 0x3d,0x84,0x82,0x0a,0x84,0xe4,0x09,0xad + .byte 0x11,0x24,0x8b,0x98,0xc0,0x81,0x7f,0x21 + .byte 0xa3,0x52,0xbe,0x19,0x93,0x09,0xce,0x20 + .byte 0x10,0x46,0x4a,0x4a,0xf8,0x27,0x31,0xec + .byte 0x58,0xc7,0xe8,0x33,0x82,0xe3,0xce,0xbf + .byte 0x85,0xf4,0xdf,0x94,0xce,0x4b,0x09,0xc1 + .byte 0x94,0x56,0x8a,0xc0,0x13,0x72,0xa7,0xfc + .byte 0x9f,0x84,0x4d,0x73,0xa3,0xca,0x9a,0x61 + .byte 0x58,0x97,0xa3,0x27,0xfc,0x03,0x98,0x76 + .byte 0x23,0x1d,0xc7,0x61,0x03,0x04,0xae,0x56 + .byte 0xbf,0x38,0x84,0x00,0x40,0xa7,0x0e,0xfd + .byte 0xff,0x52,0xfe,0x03,0x6f,0x95,0x30,0xf1 + .byte 0x97,0xfb,0xc0,0x85,0x60,0xd6,0x80,0x25 + .byte 0xa9,0x63,0xbe,0x03,0x01,0x4e,0x38,0xe2 + .byte 0xf9,0xa2,0x34,0xff,0xbb,0x3e,0x03,0x44 + .byte 0x78,0x00,0x90,0xcb,0x88,0x11,0x3a,0x94 + .byte 0x65,0xc0,0x7c,0x63,0x87,0xf0,0x3c,0xaf + .byte 0xd6,0x25,0xe4,0x8b,0x38,0x0a,0xac,0x72 + .byte 0x21,0xd4,0xf8,0x07 RomHeaderGameTitle: .ascii "POKEMON EMER" + .global RomHeaderGameCode RomHeaderGameCode: .ascii "BPEE" @@ -24,6 +45,7 @@ RomHeaderReserved1: .byte 0 .endr + .global RomHeaderSoftwareVersion RomHeaderSoftwareVersion: .byte 0 diff --git a/data/data2.s b/data/data2.s index ff86b7fcc..6a05ae24a 100644 --- a/data/data2.s +++ b/data/data2.s @@ -12348,11 +12348,11 @@ gUnknown_089A6550:: @ 89A6550 gMultiBootProgram_BerryGlitchFix_Start:: @ 89A6610 .incbin "base_emerald.gba", 0x9a6610, 0x3b34 -gMultiBootProgram_BerryGlitchFix_End: +gMultiBootProgram_BerryGlitchFix_End:: gMultiBootProgram_PokemonColosseum_Start:: @ 89AA144 .incbin "base_emerald.gba", 0x9aa144, 0x28000 -gMultiBootProgram_PokemonColosseum_End: +gMultiBootProgram_PokemonColosseum_End:: zero_fill 0x8B00000 - 0x89D2144 diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index e01b13c4e..1ef639793 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -341,7 +341,7 @@ // I/O registers -#define REG_DISPCNT (*(vu32 *)REG_ADDR_DISPCNT) +#define REG_DISPCNT (*(vu16 *)REG_ADDR_DISPCNT) #define REG_DISPSTAT (*(vu16 *)REG_ADDR_DISPSTAT) #define REG_VCOUNT (*(vu16 *)REG_ADDR_VCOUNT) diff --git a/ld_script.txt b/ld_script.txt index 8be7d561b..96baa25b3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -61,20 +61,7 @@ SECTIONS { asm/librtc.o(.text); asm/librfu.o(.text); asm/libagbsyscall.o(.text); - tools/agbcc/lib/libgcc.a:_call_via_rX.o(.text); - tools/agbcc/lib/libgcc.a:_divsi3.o(.text); - tools/agbcc/lib/libgcc.a:_dvmd_tls.o(.text); - tools/agbcc/lib/libgcc.a:_fixunsdfsi.o(.text); - tools/agbcc/lib/libgcc.a:_fixunssfsi.o(.text); - tools/agbcc/lib/libgcc.a:_modsi3.o(.text); - tools/agbcc/lib/libgcc.a:_muldi3.o(.text); - tools/agbcc/lib/libgcc.a:_udivdi3.o(.text); - tools/agbcc/lib/libgcc.a:_udivsi3.o(.text); - tools/agbcc/lib/libgcc.a:_umodsi3.o(.text); - tools/agbcc/lib/libgcc.a:dp-bit.o(.text); - tools/agbcc/lib/libgcc.a:fp-bit.o(.text); - tools/agbcc/lib/libgcc.a:_lshrdi3.o(.text); - tools/agbcc/lib/libgcc.a:_negdi2.o(.text); + asm/libgcc.o(.text); asm/libc.o(.text); } =0 diff --git a/src/gpu_regs.c b/src/gpu_regs.c index b5abec9fa..e2eb77240 100644 --- a/src/gpu_regs.c +++ b/src/gpu_regs.c @@ -63,7 +63,7 @@ void SetGpuReg(u8 regOffset, u16 value) u16 vcount; GPU_REG_BUF(regOffset) = value; - vcount = REG_VCOUNT; + vcount = REG_VCOUNT & 0xFF; if ((vcount >= 161 && vcount <= 225) || (REG_DISPCNT & DISPCNT_FORCED_BLANK)) {