mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-08 03:34:24 -05:00
340 lines
5.9 KiB
C
340 lines
5.9 KiB
C
#include "MI_memory.h"
|
|
#include "function_target.h"
|
|
|
|
ARM_FUNC asm void MIi_CpuClear16(register u16 data, register void *destp, register u32 size)
|
|
{
|
|
mov r3, #0
|
|
|
|
_020CE1CC:
|
|
cmp r3, r2
|
|
strlth r0, [r1, r3]
|
|
addlt r3, r3, #2
|
|
blt _020CE1CC
|
|
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MIi_CpuCopy16(register const void *srcp, register void *destp, register u32 size)
|
|
{
|
|
mov r12, #0
|
|
|
|
_020CE1CC:
|
|
cmp r12, r2
|
|
ldrlth r3, [r0, r12]
|
|
strlth r3, [r1, r12]
|
|
addlt r12, r12, #2
|
|
blt _020CE1CC
|
|
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MIi_CpuClear32(register u32 data, register void *destp, register u32 size)
|
|
{
|
|
add r12, r1, r2
|
|
|
|
_020CE200:
|
|
cmp r1, r12
|
|
stmltia r1!, {r0}
|
|
blt _020CE200
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MIi_CpuCopy32(register const void *srcp, register void *destp, register u32 size)
|
|
{
|
|
add r12, r1, r2
|
|
|
|
_020CE214:
|
|
cmp r1, r12
|
|
ldmltia r0!, {r2}
|
|
stmltia r1!, {r2}
|
|
blt _020CE214
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MIi_CpuSend32(register const void *srcp, volatile void *destp, u32 size)
|
|
{
|
|
add r12, r0, r2
|
|
|
|
_020CE22C:
|
|
cmp r0, r12
|
|
ldmltia r0!, {r2}
|
|
strlt r2, [r1]
|
|
blt _020CE22C
|
|
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MIi_CpuClearFast(register u32 data, register void *destp, register u32 size)
|
|
{
|
|
stmfd sp!, {r4-r9}
|
|
|
|
add r9, r1, r2
|
|
mov r12, r2, lsr #5
|
|
add r12, r1, r12, lsl #5
|
|
|
|
mov r2, r0
|
|
mov r3, r2
|
|
mov r4, r2
|
|
mov r5, r2
|
|
mov r6, r2
|
|
mov r7, r2
|
|
mov r8, r2
|
|
|
|
_020CE26C:
|
|
cmp r1, r12
|
|
stmltia r1!, {r0, r2-r8}
|
|
blt _020CE26C
|
|
_020CE278:
|
|
cmp r1, r9
|
|
stmltia r1!, {r0}
|
|
blt _020CE278
|
|
|
|
ldmfd sp!, {r4-r9}
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MIi_CpuCopyFast(register const void *srcp, register void *destp, register u32 size)
|
|
{
|
|
stmfd sp!, {r4-r10}
|
|
|
|
add r10, r1, r2
|
|
mov r12, r2, lsr #5
|
|
add r12, r1, r12, lsl #5
|
|
|
|
_020CE29C:
|
|
cmp r1, r12
|
|
ldmltia r0!, {r2-r9}
|
|
stmltia r1!, {r2-r9}
|
|
blt _020CE29C
|
|
_020CE2AC:
|
|
cmp r1, r10
|
|
ldmltia r0!, {r2}
|
|
stmltia r1!, {r2}
|
|
blt _020CE2AC
|
|
|
|
ldmfd sp!, {r4-r10}
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MI_Copy32B(register const void *pSrc, register void *pDest)
|
|
{
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3}
|
|
stmia r1!, {r2, r3}
|
|
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MI_Copy36B(register const void *pSrc, register void *pDest)
|
|
{
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MI_Copy48B(register const void *pSrc, register void *pDest)
|
|
{
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MI_Copy64B(register const void *pSrc, register void *pDest)
|
|
{
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0!, {r2, r3, r12}
|
|
stmia r1!, {r2, r3, r12}
|
|
ldmia r0, {r0, r2, r3, r12}
|
|
stmia r1!, {r0, r2, r3, r12}
|
|
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MI_CpuFill8(register void *dstp, register u8 data, register u32 size)
|
|
{
|
|
cmp r2, #0
|
|
bxeq lr
|
|
|
|
tst r0, #1
|
|
beq _020CE378
|
|
ldrh r12, [r0, #-1]
|
|
and r12, r12, #0x00ff
|
|
orr r3, r12, r1, lsl #8
|
|
strh r3, [r0, #-1]
|
|
add r0, r0, #1
|
|
subs r2, r2, #1
|
|
bxeq lr
|
|
|
|
_020CE378:
|
|
cmp r2, #2
|
|
bcc _020CE3C0
|
|
orr r1, r1, r1, lsl #8
|
|
tst r0, #2
|
|
beq _020CE398
|
|
strh r1, [r0], #2
|
|
subs r2, r2, #2
|
|
bxeq lr
|
|
|
|
_020CE398:
|
|
orr r1, r1, r1, lsl #16
|
|
bics r3, r2, #3
|
|
beq _020CE3B8
|
|
sub r2, r2, r3
|
|
add r12, r3, r0
|
|
|
|
_020CE3AC:
|
|
str r1, [r0], #4
|
|
cmp r0, r12
|
|
bcc _020CE3AC
|
|
|
|
_020CE3B8:
|
|
tst r2, #2
|
|
strneh r1, [r0], #2
|
|
|
|
_020CE3C0:
|
|
tst r2, #1
|
|
bxeq lr
|
|
ldrh r3, [r0]
|
|
and r3, r3, #0xff00
|
|
and r1, r1, #0x00ff
|
|
orr r1, r1, r3
|
|
strh r1, [r0]
|
|
bx lr
|
|
}
|
|
|
|
ARM_FUNC asm void MI_CpuCopy8(register const void *srcp, register void *dstp, register u32 size)
|
|
{
|
|
cmp r2, #0
|
|
bxeq lr
|
|
|
|
tst r1, #1
|
|
beq _020CE420
|
|
ldrh r12, [r1, #-1]
|
|
and r12, r12, #0x00ff
|
|
tst r0, #1
|
|
ldrneh r3, [r0, #-1]
|
|
movne r3, r3, lsr #8
|
|
ldreqh r3, [r0]
|
|
orr r3, r12, r3, lsl #8
|
|
strh r3, [r1, #-1]
|
|
add r0, r0, #1
|
|
add r1, r1, #1
|
|
subs r2, r2, #1
|
|
bxeq lr
|
|
|
|
_020CE420:
|
|
eor r12, r1, r0
|
|
tst r12, #1
|
|
beq _020CE474
|
|
|
|
bic r0, r0, #1
|
|
ldrh r12, [r0], #2
|
|
mov r3, r12, lsr #8
|
|
subs r2, r2, #2
|
|
bcc _020CE458
|
|
|
|
_020CE440:
|
|
ldrh r12, [r0], #2
|
|
orr r12, r3, r12, lsl #8
|
|
strh r12, [r1], #2
|
|
mov r3, r12, lsr #16
|
|
subs r2, r2, #2
|
|
bcs _020CE440
|
|
|
|
_020CE458:
|
|
tst r2, #1
|
|
bxeq lr
|
|
ldrh r12, [r1]
|
|
and r12, r12, #0xff00
|
|
orr r12, r12, r3
|
|
strh r12, [r1]
|
|
bx lr
|
|
|
|
_020CE474:
|
|
tst r12, #2
|
|
beq _020CE4A0
|
|
|
|
bics r3, r2, #1
|
|
beq _020CE4EC
|
|
sub r2, r2, r3
|
|
add r12, r3, r1
|
|
|
|
_020CE48C:
|
|
ldrh r3, [r0], #2
|
|
strh r3, [r1], #2
|
|
cmp r1, r12
|
|
bcc _020CE48C
|
|
b _020CE4EC
|
|
|
|
_020CE4A0:
|
|
cmp r2, #2
|
|
bcc _020CE4EC
|
|
tst r1, #2
|
|
beq _020CE4C0
|
|
ldrh r3, [r0], #2
|
|
strh r3, [r1], #2
|
|
subs r2, r2, #2
|
|
bxeq lr
|
|
|
|
_020CE4C0:
|
|
bics r3, r2, #3
|
|
beq _020CE4E0
|
|
sub r2, r2, r3
|
|
add r12, r3, r1
|
|
|
|
_020CE4D0:
|
|
ldr r3, [r0], #4
|
|
str r3, [r1], #4
|
|
cmp r1, r12
|
|
bcc _020CE4D0
|
|
|
|
_020CE4E0:
|
|
tst r2, #2
|
|
ldrneh r3, [r0], #2
|
|
strneh r3, [r1], #2
|
|
|
|
_020CE4EC:
|
|
tst r2, #1
|
|
bxeq lr
|
|
ldrh r2, [r1]
|
|
ldrh r0, [r0]
|
|
and r2, r2, #0xff00
|
|
and r0, r0, #0x00ff
|
|
orr r0, r2, r0
|
|
strh r0, [r1]
|
|
|
|
bx lr
|
|
}
|
|
|
|
THUMB_FUNC asm void MI_Zero36B(register void *pDest)
|
|
{
|
|
mov r1, #0
|
|
mov r2, #0
|
|
mov r3, #0
|
|
stmia r0!, {r1, r2, r3}
|
|
stmia r0!, {r1, r2, r3}
|
|
stmia r0!, {r1, r2, r3}
|
|
|
|
bx lr
|
|
}
|