memstub/wrapper_bx.s
2025-03-23 11:49:01 +07:00

119 lines
2.2 KiB
ArmAsm

p_assign_mem:
b mem_init /* Startup - 00 */
p_malloc:
b lwmem_malloc /* Malloc - 04 */
p_memcpy:
b memcpy /* Memcpy - 08 */
p_free:
b lwmem_free /* Free - 0c */
p_memset:
b memset /* Memset - 10 */
p_calloc:
b lwmem_calloc /* Calloc - 14 */
p_realloc:
b lwmem_realloc /* Realloc - 18 */
p_memmove:
b memmove /* Memmove - 1c */
p_exit:
b p_exit /* Exit - 20 */
.thumb_func
malloc_thumb:
push {R4-R7, LR} /* save registers */
blx p_malloc
pop {R4-R7, PC} /* restore registers and return */
memcpy_thumb:
push {R4-R7, LR} /* save registers */
blx p_memcpy
pop {R4-R7, PC} /* restore registers and return */
free_thumb:
push {R4-R7, LR} /* save registers */
blx p_free
pop {R4-R7, PC} /* restore registers and return */
mmemset_thumb:
push {R4-R7, LR} /* save registers */
blx p_memset
pop {R4-R7, PC} /* restore registers and return */
calloc_thumb:
push {R4-R7, LR} /* save registers */
blx p_calloc
pop {R4-R7, PC} /* restore registers and return */
realloc_thumb:
push {R4-R7, LR} /* save registers */
blx p_realloc
pop {R4-R7, PC} /* restore registers and return */
exit_thumb:
push {R4-R7, LR} /* save registers */
blx p_exit
pop {R4-R7, PC} /* restore registers and return */
.arm
mem_init:
mov r0, #0
adr r0, mem_init_regs
/* ldr r0, [r0] */
b lwmem_assignmem
mem_init_regs:
.word 0xa0000000
.word 0x00800000
.word 0x00000000
.word 0x00000000
.ascii "Memstub (c) 2025 Wrapper"
.global null_function
null_function:
mov pc, lr
.global memcpy
memcpy:
mov r12, r0
memcpy_loop:
subs r2, r2, #1
bmi memcpy_end
ldrb r3, [r1], #1
strb r3, [r0], #1
b memcpy_loop
memcpy_end:
mov r0, r12
bx lr
.global memset
memset:
mov r12, r0
memset_loop:
subs r2, r2, #1
bmi memset_end
strb r1, [r0], #1
b memset_loop
memset_end:
mov r0, r12
bx lr
.global memmove
memmove:
mov r12, r0
cmp r0, r1
ble .fw
add r3, r1, r2
cmp r0, r3
bgt .fw
@ copying the memory in reverse order
add r0, r0, r2
add r1, r1, r2
.bw:
subs r2, r2, #1
bmi .ret
ldrb r3, [r1, #-1]!
strb r3, [r0, #-1]!
b .bw
.fw:
subs r2, r2, #1
bmi .ret
ldrb r3, [r1], #1
strb r3, [r0], #1
b .fw
.ret:
mov r0, r12
bx lr
.ascii "ASM ENDS HERE."