Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/arm/string/memcpy_arm.S
Show First 20 Lines • Show All 164 Lines • ▼ Show 20 Lines | .Lmemcpy_srcul: | ||||
bgt .Lmemcpy_srcul3 | bgt .Lmemcpy_srcul3 | ||||
beq .Lmemcpy_srcul2 | beq .Lmemcpy_srcul2 | ||||
cmp r2, #0x0c | cmp r2, #0x0c | ||||
blt .Lmemcpy_srcul1loop4 | blt .Lmemcpy_srcul1loop4 | ||||
sub r2, r2, #0x0c | sub r2, r2, #0x0c | ||||
stmdb sp!, {r4, r5} | stmdb sp!, {r4, r5} | ||||
.Lmemcpy_srcul1loop16: | .Lmemcpy_srcul1loop16: | ||||
#ifdef __ARMEB__ | |||||
mov r3, lr, lsl #8 | |||||
#else | |||||
mov r3, lr, lsr #8 | mov r3, lr, lsr #8 | ||||
#endif | |||||
ldmia r1!, {r4, r5, r12, lr} | ldmia r1!, {r4, r5, r12, lr} | ||||
#ifdef __ARMEB__ | |||||
orr r3, r3, r4, lsr #24 | |||||
mov r4, r4, lsl #8 | |||||
orr r4, r4, r5, lsr #24 | |||||
mov r5, r5, lsl #8 | |||||
orr r5, r5, r12, lsr #24 | |||||
mov r12, r12, lsl #8 | |||||
orr r12, r12, lr, lsr #24 | |||||
#else | |||||
orr r3, r3, r4, lsl #24 | orr r3, r3, r4, lsl #24 | ||||
mov r4, r4, lsr #8 | mov r4, r4, lsr #8 | ||||
orr r4, r4, r5, lsl #24 | orr r4, r4, r5, lsl #24 | ||||
mov r5, r5, lsr #8 | mov r5, r5, lsr #8 | ||||
orr r5, r5, r12, lsl #24 | orr r5, r5, r12, lsl #24 | ||||
mov r12, r12, lsr #8 | mov r12, r12, lsr #8 | ||||
orr r12, r12, lr, lsl #24 | orr r12, r12, lr, lsl #24 | ||||
#endif | |||||
stmia r0!, {r3-r5, r12} | stmia r0!, {r3-r5, r12} | ||||
subs r2, r2, #0x10 | subs r2, r2, #0x10 | ||||
bge .Lmemcpy_srcul1loop16 | bge .Lmemcpy_srcul1loop16 | ||||
ldmia sp!, {r4, r5} | ldmia sp!, {r4, r5} | ||||
adds r2, r2, #0x0c | adds r2, r2, #0x0c | ||||
blt .Lmemcpy_srcul1l4 | blt .Lmemcpy_srcul1l4 | ||||
.Lmemcpy_srcul1loop4: | .Lmemcpy_srcul1loop4: | ||||
#ifdef __ARMEB__ | |||||
mov r12, lr, lsl #8 | |||||
#else | |||||
mov r12, lr, lsr #8 | mov r12, lr, lsr #8 | ||||
#endif | |||||
ldr lr, [r1], #4 | ldr lr, [r1], #4 | ||||
#ifdef __ARMEB__ | |||||
orr r12, r12, lr, lsr #24 | |||||
#else | |||||
orr r12, r12, lr, lsl #24 | orr r12, r12, lr, lsl #24 | ||||
#endif | |||||
str r12, [r0], #4 | str r12, [r0], #4 | ||||
subs r2, r2, #4 | subs r2, r2, #4 | ||||
bge .Lmemcpy_srcul1loop4 | bge .Lmemcpy_srcul1loop4 | ||||
.Lmemcpy_srcul1l4: | .Lmemcpy_srcul1l4: | ||||
sub r1, r1, #3 | sub r1, r1, #3 | ||||
b .Lmemcpy_l4 | b .Lmemcpy_l4 | ||||
.Lmemcpy_srcul2: | .Lmemcpy_srcul2: | ||||
cmp r2, #0x0c | cmp r2, #0x0c | ||||
blt .Lmemcpy_srcul2loop4 | blt .Lmemcpy_srcul2loop4 | ||||
sub r2, r2, #0x0c | sub r2, r2, #0x0c | ||||
stmdb sp!, {r4, r5} | stmdb sp!, {r4, r5} | ||||
.Lmemcpy_srcul2loop16: | .Lmemcpy_srcul2loop16: | ||||
#ifdef __ARMEB__ | |||||
mov r3, lr, lsl #16 | |||||
#else | |||||
mov r3, lr, lsr #16 | mov r3, lr, lsr #16 | ||||
#endif | |||||
ldmia r1!, {r4, r5, r12, lr} | ldmia r1!, {r4, r5, r12, lr} | ||||
#ifdef __ARMEB__ | |||||
orr r3, r3, r4, lsr #16 | |||||
mov r4, r4, lsl #16 | |||||
orr r4, r4, r5, lsr #16 | |||||
mov r5, r5, lsl #16 | |||||
orr r5, r5, r12, lsr #16 | |||||
mov r12, r12, lsl #16 | |||||
orr r12, r12, lr, lsr #16 | |||||
#else | |||||
orr r3, r3, r4, lsl #16 | orr r3, r3, r4, lsl #16 | ||||
mov r4, r4, lsr #16 | mov r4, r4, lsr #16 | ||||
orr r4, r4, r5, lsl #16 | orr r4, r4, r5, lsl #16 | ||||
mov r5, r5, lsr #16 | mov r5, r5, lsr #16 | ||||
orr r5, r5, r12, lsl #16 | orr r5, r5, r12, lsl #16 | ||||
mov r12, r12, lsr #16 | mov r12, r12, lsr #16 | ||||
orr r12, r12, lr, lsl #16 | orr r12, r12, lr, lsl #16 | ||||
#endif | |||||
stmia r0!, {r3-r5, r12} | stmia r0!, {r3-r5, r12} | ||||
subs r2, r2, #0x10 | subs r2, r2, #0x10 | ||||
bge .Lmemcpy_srcul2loop16 | bge .Lmemcpy_srcul2loop16 | ||||
ldmia sp!, {r4, r5} | ldmia sp!, {r4, r5} | ||||
adds r2, r2, #0x0c | adds r2, r2, #0x0c | ||||
blt .Lmemcpy_srcul2l4 | blt .Lmemcpy_srcul2l4 | ||||
.Lmemcpy_srcul2loop4: | .Lmemcpy_srcul2loop4: | ||||
#ifdef __ARMEB__ | |||||
mov r12, lr, lsl #16 | |||||
#else | |||||
mov r12, lr, lsr #16 | mov r12, lr, lsr #16 | ||||
#endif | |||||
ldr lr, [r1], #4 | ldr lr, [r1], #4 | ||||
#ifdef __ARMEB__ | |||||
orr r12, r12, lr, lsr #16 | |||||
#else | |||||
orr r12, r12, lr, lsl #16 | orr r12, r12, lr, lsl #16 | ||||
#endif | |||||
str r12, [r0], #4 | str r12, [r0], #4 | ||||
subs r2, r2, #4 | subs r2, r2, #4 | ||||
bge .Lmemcpy_srcul2loop4 | bge .Lmemcpy_srcul2loop4 | ||||
.Lmemcpy_srcul2l4: | .Lmemcpy_srcul2l4: | ||||
sub r1, r1, #2 | sub r1, r1, #2 | ||||
b .Lmemcpy_l4 | b .Lmemcpy_l4 | ||||
.Lmemcpy_srcul3: | .Lmemcpy_srcul3: | ||||
cmp r2, #0x0c | cmp r2, #0x0c | ||||
blt .Lmemcpy_srcul3loop4 | blt .Lmemcpy_srcul3loop4 | ||||
sub r2, r2, #0x0c | sub r2, r2, #0x0c | ||||
stmdb sp!, {r4, r5} | stmdb sp!, {r4, r5} | ||||
.Lmemcpy_srcul3loop16: | .Lmemcpy_srcul3loop16: | ||||
#ifdef __ARMEB__ | |||||
mov r3, lr, lsl #24 | |||||
#else | |||||
mov r3, lr, lsr #24 | mov r3, lr, lsr #24 | ||||
#endif | |||||
ldmia r1!, {r4, r5, r12, lr} | ldmia r1!, {r4, r5, r12, lr} | ||||
#ifdef __ARMEB__ | |||||
orr r3, r3, r4, lsr #8 | |||||
mov r4, r4, lsl #24 | |||||
orr r4, r4, r5, lsr #8 | |||||
mov r5, r5, lsl #24 | |||||
orr r5, r5, r12, lsr #8 | |||||
mov r12, r12, lsl #24 | |||||
orr r12, r12, lr, lsr #8 | |||||
#else | |||||
orr r3, r3, r4, lsl #8 | orr r3, r3, r4, lsl #8 | ||||
mov r4, r4, lsr #24 | mov r4, r4, lsr #24 | ||||
orr r4, r4, r5, lsl #8 | orr r4, r4, r5, lsl #8 | ||||
mov r5, r5, lsr #24 | mov r5, r5, lsr #24 | ||||
orr r5, r5, r12, lsl #8 | orr r5, r5, r12, lsl #8 | ||||
mov r12, r12, lsr #24 | mov r12, r12, lsr #24 | ||||
orr r12, r12, lr, lsl #8 | orr r12, r12, lr, lsl #8 | ||||
#endif | |||||
stmia r0!, {r3-r5, r12} | stmia r0!, {r3-r5, r12} | ||||
subs r2, r2, #0x10 | subs r2, r2, #0x10 | ||||
bge .Lmemcpy_srcul3loop16 | bge .Lmemcpy_srcul3loop16 | ||||
ldmia sp!, {r4, r5} | ldmia sp!, {r4, r5} | ||||
adds r2, r2, #0x0c | adds r2, r2, #0x0c | ||||
blt .Lmemcpy_srcul3l4 | blt .Lmemcpy_srcul3l4 | ||||
.Lmemcpy_srcul3loop4: | .Lmemcpy_srcul3loop4: | ||||
#ifdef __ARMEB__ | |||||
mov r12, lr, lsl #24 | |||||
#else | |||||
mov r12, lr, lsr #24 | mov r12, lr, lsr #24 | ||||
#endif | |||||
ldr lr, [r1], #4 | ldr lr, [r1], #4 | ||||
#ifdef __ARMEB__ | |||||
orr r12, r12, lr, lsr #8 | |||||
#else | |||||
orr r12, r12, lr, lsl #8 | orr r12, r12, lr, lsl #8 | ||||
#endif | |||||
str r12, [r0], #4 | str r12, [r0], #4 | ||||
subs r2, r2, #4 | subs r2, r2, #4 | ||||
bge .Lmemcpy_srcul3loop4 | bge .Lmemcpy_srcul3loop4 | ||||
.Lmemcpy_srcul3l4: | .Lmemcpy_srcul3l4: | ||||
sub r1, r1, #1 | sub r1, r1, #1 | ||||
b .Lmemcpy_l4 | b .Lmemcpy_l4 | ||||
END(memcpy) | END(memcpy) | ||||
.section .note.GNU-stack,"",%progbits | .section .note.GNU-stack,"",%progbits |