Ported libc from pokeruby
This commit is contained in:
213
asm/libc.s
213
asm/libc.s
@@ -1,213 +0,0 @@
|
||||
.include "asm/macros.s"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start memcpy
|
||||
@ void *memcpy(void *dest, void *src, int size)
|
||||
memcpy: @ 82E93D4
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
adds r4, r5, 0
|
||||
adds r3, r1, 0
|
||||
cmp r2, 0xF
|
||||
bls _082E9414
|
||||
adds r0, r3, 0
|
||||
orrs r0, r5
|
||||
movs r1, 0x3
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _082E9414
|
||||
adds r1, r5, 0
|
||||
_082E93EE:
|
||||
ldm r3!, {r0}
|
||||
stm r1!, {r0}
|
||||
ldm r3!, {r0}
|
||||
stm r1!, {r0}
|
||||
ldm r3!, {r0}
|
||||
stm r1!, {r0}
|
||||
ldm r3!, {r0}
|
||||
stm r1!, {r0}
|
||||
subs r2, 0x10
|
||||
cmp r2, 0xF
|
||||
bhi _082E93EE
|
||||
cmp r2, 0x3
|
||||
bls _082E9412
|
||||
_082E9408:
|
||||
ldm r3!, {r0}
|
||||
stm r1!, {r0}
|
||||
subs r2, 0x4
|
||||
cmp r2, 0x3
|
||||
bhi _082E9408
|
||||
_082E9412:
|
||||
adds r4, r1, 0
|
||||
_082E9414:
|
||||
subs r2, 0x1
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r2, r0
|
||||
beq _082E942E
|
||||
adds r1, r0, 0
|
||||
_082E9420:
|
||||
ldrb r0, [r3]
|
||||
strb r0, [r4]
|
||||
adds r3, 0x1
|
||||
adds r4, 0x1
|
||||
subs r2, 0x1
|
||||
cmp r2, r1
|
||||
bne _082E9420
|
||||
_082E942E:
|
||||
adds r0, r5, 0
|
||||
pop {r4,r5,pc}
|
||||
thumb_func_end memcpy
|
||||
|
||||
thumb_func_start memset
|
||||
@ void *memset(void *dest, char c, int size)
|
||||
memset: @ 82E9434
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
adds r4, r1, 0
|
||||
adds r3, r5, 0
|
||||
cmp r2, 0x3
|
||||
bls _082E947A
|
||||
movs r0, 0x3
|
||||
ands r0, r5
|
||||
cmp r0, 0
|
||||
bne _082E947A
|
||||
adds r1, r5, 0
|
||||
movs r0, 0xFF
|
||||
ands r4, r0
|
||||
lsls r3, r4, 8
|
||||
orrs r3, r4
|
||||
lsls r0, r3, 16
|
||||
orrs r3, r0
|
||||
cmp r2, 0xF
|
||||
bls _082E946E
|
||||
_082E945A:
|
||||
stm r1!, {r3}
|
||||
stm r1!, {r3}
|
||||
stm r1!, {r3}
|
||||
stm r1!, {r3}
|
||||
subs r2, 0x10
|
||||
cmp r2, 0xF
|
||||
bhi _082E945A
|
||||
b _082E946E
|
||||
_082E946A:
|
||||
stm r1!, {r3}
|
||||
subs r2, 0x4
|
||||
_082E946E:
|
||||
cmp r2, 0x3
|
||||
bhi _082E946A
|
||||
adds r3, r1, 0
|
||||
b _082E947A
|
||||
_082E9476:
|
||||
strb r4, [r3]
|
||||
adds r3, 0x1
|
||||
_082E947A:
|
||||
adds r0, r2, 0
|
||||
subs r2, 0x1
|
||||
cmp r0, 0
|
||||
bne _082E9476
|
||||
adds r0, r5, 0
|
||||
pop {r4,r5,pc}
|
||||
thumb_func_end memset
|
||||
|
||||
thumb_func_start strcmp
|
||||
@ int strcmp(char *s1, char *s2)
|
||||
strcmp: @ 82E9488
|
||||
push {r4,r5,lr}
|
||||
adds r2, r0, 0
|
||||
adds r3, r1, 0
|
||||
orrs r0, r3
|
||||
movs r1, 0x3
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _082E94CE
|
||||
ldr r1, [r2]
|
||||
ldr r0, [r3]
|
||||
cmp r1, r0
|
||||
bne _082E94CE
|
||||
ldr r5, _082E94B4
|
||||
ldr r4, _082E94B8
|
||||
_082E94A4:
|
||||
ldr r1, [r2]
|
||||
adds r0, r1, r5
|
||||
bics r0, r1
|
||||
ands r0, r4
|
||||
cmp r0, 0
|
||||
beq _082E94BC
|
||||
movs r0, 0
|
||||
b _082E94E0
|
||||
.align 2, 0
|
||||
_082E94B4: .4byte 0xfefefeff
|
||||
_082E94B8: .4byte 0x80808080
|
||||
_082E94BC:
|
||||
adds r2, 0x4
|
||||
adds r3, 0x4
|
||||
ldr r1, [r2]
|
||||
ldr r0, [r3]
|
||||
cmp r1, r0
|
||||
beq _082E94A4
|
||||
b _082E94CE
|
||||
_082E94CA:
|
||||
adds r2, 0x1
|
||||
adds r3, 0x1
|
||||
_082E94CE:
|
||||
ldrb r0, [r2]
|
||||
cmp r0, 0
|
||||
beq _082E94DA
|
||||
ldrb r1, [r3]
|
||||
cmp r0, r1
|
||||
beq _082E94CA
|
||||
_082E94DA:
|
||||
ldrb r2, [r2]
|
||||
ldrb r3, [r3]
|
||||
subs r0, r2, r3
|
||||
_082E94E0:
|
||||
pop {r4,r5,pc}
|
||||
thumb_func_end strcmp
|
||||
|
||||
thumb_func_start strcat
|
||||
strcat: @ 82E94E4
|
||||
push {r4-r6,lr}
|
||||
adds r6, r0, 0
|
||||
adds r3, r6, 0
|
||||
adds r2, r1, 0
|
||||
adds r0, r2, 0
|
||||
orrs r0, r6
|
||||
movs r1, 0x3
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _082E951C
|
||||
ldr r1, [r2]
|
||||
ldr r5, _082E9504
|
||||
adds r0, r1, r5
|
||||
bics r0, r1
|
||||
ldr r4, _082E9508
|
||||
b _082E9516
|
||||
.align 2, 0
|
||||
_082E9504: .4byte 0xfefefeff
|
||||
_082E9508: .4byte 0x80808080
|
||||
_082E950C:
|
||||
ldm r2!, {r0}
|
||||
stm r3!, {r0}
|
||||
ldr r1, [r2]
|
||||
adds r0, r1, r5
|
||||
bics r0, r1
|
||||
_082E9516:
|
||||
ands r0, r4
|
||||
cmp r0, 0
|
||||
beq _082E950C
|
||||
_082E951C:
|
||||
ldrb r0, [r2]
|
||||
strb r0, [r3]
|
||||
lsls r0, 24
|
||||
adds r2, 0x1
|
||||
adds r3, 0x1
|
||||
cmp r0, 0
|
||||
bne _082E951C
|
||||
adds r0, r6, 0
|
||||
pop {r4-r6,pc}
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
||||
@@ -2523,7 +2523,7 @@ task00_link_test: @ 800A850
|
||||
sub sp, 0x20
|
||||
ldr r1, =gUnknown_082ED1E4
|
||||
mov r0, sp
|
||||
bl strcat
|
||||
bl strcpy
|
||||
mov r0, sp
|
||||
movs r1, 0x5
|
||||
movs r2, 0x2
|
||||
|
||||
Reference in New Issue
Block a user