cutil/arch/ARMv7.S

95 lines
1.3 KiB
ArmAsm

.globl hw_bswap16
.globl hw_bswap32
.globl hw_bswap64
.globl _cu_memcpy
.globl _cu_memmove
.globl _cu_memcmp
.globl _cu_memset
.globl cu_memzero
.globl cu_memtest
.globl cu_va_start
.globl cu_va_arg
.text
.align 16
hw_bswap16:
rev r0, r0
mov r0, r0, lsr #16
bx lr
hw_bswap32:
rev r0, r0
bx lr
hw_bswap64:
rev r2, r0
rev r0, r1
mov r0, r2
bx lr
_cu_memcpy:
// r0 - dst, r1 - src, r2 - size
str r4, [sp, #-4]!
mov r3, r2, lsr #2
tst r3, r3
beq .cpy1_
.cpy4:
ldr r4, [r1], #4
str r4, [r0], #4
subs r3, r3, #1
bne .cpy4
.cpy1_:
ands r3, r2, #3
beq .cpy0
.cpy1:
ldrb r4, [r1], #1
strb r4, [r0], #1
subs r3, r3, #1
bne .cpy1
.cpy0:
ldr r4, [sp], #4
bx lr
_cu_memmove:
// r0 - dst, r1 - src, r2 - size
cmp r0, r1
beq .move0
blt .less1
add r0, r0, r2
add r1, r1, r2
sub r0, r0, #1
sub r1, r1, #1
.greater1:
ldrb r3, [r1], #-1
strb r3, [r0], #-1
subs r2, r2, #1
bne .greater1
b .move0
.less1:
ldrb r3, [r1], #1
strb r3, [r0], #1
subs r2, r2, #1
bne .less1
.move0:
bx lr
_cu_memcmp:
bx lr
_cu_memset:
bx lr
cu_memzero:
bx lr
cu_memtest:
bx lr
cu_va_start:
bx lr
cu_va_arg:
bx lr