mirror of
https://github.com/pret/pmd-red.git
synced 2024-11-30 16:30:24 +00:00
99a038284b
This decision was made to reduce the complexity of using .include whilst juggling with tools/scaninc and tools/preproc: - tools/scaninc doesn't apply the proper search rules for .include (it assumes #include behavior). In particular, it doesn't consider paths starting from $PWD, and doesn't scan the included files as a result. - .include had to be processed before #include by preproc in many cases, as code was being included that had to be preprocessed by CPP (think of #define). This contradicts standard GCC behavior. To make include paths consistent across the asm/ data/ and src/ directories, the following files were moved: - constants/ → include/asm/constants/ - asm/macros/ → include/asm/macros/ - asm/macros.inc → include/asm/macros.inc - include/macros/m4a.inc → include/asm/macros/m4a.inc As part of the necessary changes for this to work, the scaninc method in the makefile was improved to generate .d files that don't choke when files are missing.
230 lines
3.3 KiB
ArmAsm
230 lines
3.3 KiB
ArmAsm
#include "asm/constants/gba_constants.inc"
|
|
#include "asm/macros.inc"
|
|
|
|
.syntax unified
|
|
|
|
.text
|
|
|
|
thumb_func_start DoCreateSubHeap
|
|
DoCreateSubHeap:
|
|
push {r4,lr}
|
|
sub sp, 0x8
|
|
adds r2, r1, 0
|
|
ldr r4, [r0]
|
|
adds r1, r4, 0
|
|
adds r1, 0x1C
|
|
str r1, [sp]
|
|
ldr r0, [r0, 0x4]
|
|
subs r0, 0x1C
|
|
str r0, [sp, 0x4]
|
|
adds r0, r4, 0
|
|
mov r1, sp
|
|
bl InitSubHeap
|
|
adds r0, r4, 0
|
|
add sp, 0x8
|
|
pop {r4}
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end DoCreateSubHeap
|
|
|
|
thumb_func_start xxx_unused_memory_free
|
|
xxx_unused_memory_free:
|
|
push {r4-r7,lr}
|
|
adds r4, r0, 0
|
|
cmp r4, 0
|
|
beq _08003504
|
|
movs r1, 0
|
|
ldr r0, [r4, 0xC]
|
|
cmp r0, 0x1
|
|
bne _080034A2
|
|
ldr r0, [r4, 0x8]
|
|
ldr r0, [r0, 0x4]
|
|
cmp r0, 0
|
|
bne _080034A2
|
|
movs r1, 0x1
|
|
_080034A2:
|
|
cmp r1, 0
|
|
beq _08003504
|
|
movs r0, 0
|
|
mov r12, r0
|
|
movs r3, 0
|
|
ldr r6, =gHeapCount
|
|
ldr r0, [r6]
|
|
cmp r12, r0
|
|
bge _080034F2
|
|
ldr r5, =gHeapDescriptorList
|
|
adds r1, r6, 0
|
|
adds r7, r5, 0
|
|
movs r2, 0
|
|
_080034BC:
|
|
adds r0, r2, r5
|
|
ldr r0, [r0]
|
|
cmp r0, r4
|
|
bne _080034E8
|
|
ldr r0, [r1]
|
|
subs r0, 0x1
|
|
str r0, [r1]
|
|
cmp r3, r0
|
|
bge _080034F8
|
|
ldr r1, =gHeapCount
|
|
adds r2, r7
|
|
_080034D2:
|
|
ldr r0, [r2, 0x4]
|
|
stm r2!, {r0}
|
|
adds r3, 0x1
|
|
ldr r0, [r1]
|
|
cmp r3, r0
|
|
blt _080034D2
|
|
b _080034F8
|
|
.align 2, 0
|
|
.pool
|
|
_080034E8:
|
|
adds r2, 0x4
|
|
adds r3, 0x1
|
|
ldr r0, [r6]
|
|
cmp r3, r0
|
|
blt _080034BC
|
|
_080034F2:
|
|
mov r0, r12
|
|
cmp r0, 0
|
|
beq _08003504
|
|
_080034F8:
|
|
ldr r0, [r4, 0x4]
|
|
cmp r0, 0
|
|
beq _08003504
|
|
adds r1, r4, 0
|
|
bl DoFree
|
|
_08003504:
|
|
pop {r4-r7}
|
|
pop {r0}
|
|
bx r0
|
|
thumb_func_end xxx_unused_memory_free
|
|
|
|
thumb_func_start DoAlloc
|
|
DoAlloc:
|
|
push {lr}
|
|
movs r3, 0x80
|
|
lsls r3, 1
|
|
orrs r3, r2
|
|
adds r2, r3, 0
|
|
bl _LocateSet
|
|
pop {r1}
|
|
bx r1
|
|
thumb_func_end DoAlloc
|
|
|
|
thumb_func_start DoFree
|
|
DoFree:
|
|
push {r4-r7,lr}
|
|
mov r7, r8
|
|
push {r7}
|
|
adds r4, r0, 0
|
|
cmp r4, 0
|
|
bne _0800352E
|
|
ldr r4, =gMainHeapDescriptor
|
|
_0800352E:
|
|
cmp r1, 0
|
|
beq _080035E4
|
|
movs r0, 0
|
|
mov r8, r0
|
|
ldr r3, [r4, 0x8]
|
|
mov r12, r3
|
|
ldr r3, [r4, 0xC]
|
|
cmp r8, r3
|
|
bge _080035E4
|
|
movs r2, 0
|
|
_08003542:
|
|
mov r5, r12
|
|
ldr r0, [r5, 0xC]
|
|
cmp r0, r1
|
|
bne _080035D8
|
|
str r2, [r5]
|
|
str r2, [r5, 0x4]
|
|
str r2, [r5, 0x14]
|
|
str r2, [r5, 0x8]
|
|
ldr r0, [r4, 0xC]
|
|
subs r0, 0x1
|
|
cmp r8, r0
|
|
bge _08003592
|
|
mov r2, r12
|
|
adds r2, 0x18
|
|
ldr r0, [r2, 0x4]
|
|
cmp r0, 0
|
|
bne _08003592
|
|
ldr r0, [r5, 0x10]
|
|
ldr r1, [r2, 0x10]
|
|
adds r0, r1
|
|
str r0, [r5, 0x10]
|
|
ldr r0, [r4, 0xC]
|
|
subs r0, 0x1
|
|
str r0, [r4, 0xC]
|
|
mov r3, r8
|
|
adds r3, 0x1
|
|
cmp r3, r0
|
|
bge _08003592
|
|
_0800357A:
|
|
adds r0, r2, 0
|
|
adds r1, r2, 0
|
|
adds r1, 0x18
|
|
ldm r1!, {r5-r7}
|
|
stm r0!, {r5-r7}
|
|
ldm r1!, {r5-r7}
|
|
stm r0!, {r5-r7}
|
|
adds r3, 0x1
|
|
adds r2, 0x18
|
|
ldr r0, [r4, 0xC]
|
|
cmp r3, r0
|
|
blt _0800357A
|
|
_08003592:
|
|
mov r6, r8
|
|
cmp r6, 0
|
|
ble _080035E4
|
|
mov r2, r12
|
|
subs r2, 0x18
|
|
ldr r0, [r2, 0x4]
|
|
cmp r0, 0
|
|
bne _080035E4
|
|
ldr r0, [r2, 0x10]
|
|
mov r7, r12
|
|
ldr r1, [r7, 0x10]
|
|
adds r0, r1
|
|
str r0, [r2, 0x10]
|
|
ldr r0, [r4, 0xC]
|
|
subs r0, 0x1
|
|
str r0, [r4, 0xC]
|
|
mov r2, r12
|
|
mov r3, r8
|
|
cmp r3, r0
|
|
bge _080035E4
|
|
_080035BA:
|
|
adds r0, r2, 0
|
|
adds r1, r2, 0
|
|
adds r1, 0x18
|
|
ldm r1!, {r5-r7}
|
|
stm r0!, {r5-r7}
|
|
ldm r1!, {r5-r7}
|
|
stm r0!, {r5-r7}
|
|
adds r3, 0x1
|
|
adds r2, 0x18
|
|
ldr r0, [r4, 0xC]
|
|
cmp r3, r0
|
|
blt _080035BA
|
|
b _080035E4
|
|
.align 2, 0
|
|
.pool
|
|
_080035D8:
|
|
movs r0, 0x1
|
|
add r8, r0
|
|
movs r5, 0x18
|
|
add r12, r5
|
|
cmp r8, r3
|
|
blt _08003542
|
|
_080035E4:
|
|
pop {r3}
|
|
mov r8, r3
|
|
pop {r4-r7}
|
|
pop {r0}
|
|
bx r0
|
|
thumb_func_end DoFree
|
|
|
|
.align 2,0
|