Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/arm/string/memcpy_xscale.S
Show First 20 Lines • Show All 213 Lines • ▼ Show 20 Lines | .Lmemcpy_bad_align: | ||||
bic r1, r1, #0x03 | bic r1, r1, #0x03 | ||||
cmp ip, #2 | cmp ip, #2 | ||||
ldr ip, [r1], #0x04 | ldr ip, [r1], #0x04 | ||||
bgt .Lmemcpy_bad3 | bgt .Lmemcpy_bad3 | ||||
beq .Lmemcpy_bad2 | beq .Lmemcpy_bad2 | ||||
b .Lmemcpy_bad1 | b .Lmemcpy_bad1 | ||||
.Lmemcpy_bad1_loop16: | .Lmemcpy_bad1_loop16: | ||||
#ifdef __ARMEB__ | |||||
mov r4, ip, lsl #8 | |||||
#else | |||||
mov r4, ip, lsr #8 | mov r4, ip, lsr #8 | ||||
#endif | |||||
ldr r5, [r1], #0x04 | ldr r5, [r1], #0x04 | ||||
pld [r1, #0x018] | pld [r1, #0x018] | ||||
ldr r6, [r1], #0x04 | ldr r6, [r1], #0x04 | ||||
ldr r7, [r1], #0x04 | ldr r7, [r1], #0x04 | ||||
ldr ip, [r1], #0x04 | ldr ip, [r1], #0x04 | ||||
#ifdef __ARMEB__ | |||||
orr r4, r4, r5, lsr #24 | |||||
mov r5, r5, lsl #8 | |||||
orr r5, r5, r6, lsr #24 | |||||
mov r6, r6, lsl #8 | |||||
orr r6, r6, r7, lsr #24 | |||||
mov r7, r7, lsl #8 | |||||
orr r7, r7, ip, lsr #24 | |||||
#else | |||||
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, r6, lsl #24 | orr r5, r5, r6, lsl #24 | ||||
mov r6, r6, lsr #8 | mov r6, r6, lsr #8 | ||||
orr r6, r6, r7, lsl #24 | orr r6, r6, r7, lsl #24 | ||||
mov r7, r7, lsr #8 | mov r7, r7, lsr #8 | ||||
orr r7, r7, ip, lsl #24 | orr r7, r7, ip, lsl #24 | ||||
#endif | |||||
str r4, [r3], #0x04 | str r4, [r3], #0x04 | ||||
str r5, [r3], #0x04 | str r5, [r3], #0x04 | ||||
str r6, [r3], #0x04 | str r6, [r3], #0x04 | ||||
str r7, [r3], #0x04 | str r7, [r3], #0x04 | ||||
.Lmemcpy_bad1: | .Lmemcpy_bad1: | ||||
subs r2, r2, #0x10 | subs r2, r2, #0x10 | ||||
bge .Lmemcpy_bad1_loop16 | bge .Lmemcpy_bad1_loop16 | ||||
adds r2, r2, #0x10 | adds r2, r2, #0x10 | ||||
ldmfdeq sp!, {r4-r7} | ldmfdeq sp!, {r4-r7} | ||||
bxeq lr /* Return now if done */ | bxeq lr /* Return now if done */ | ||||
subs r2, r2, #0x04 | subs r2, r2, #0x04 | ||||
sublt r1, r1, #0x03 | sublt r1, r1, #0x03 | ||||
blt .Lmemcpy_bad_done | blt .Lmemcpy_bad_done | ||||
.Lmemcpy_bad1_loop4: | .Lmemcpy_bad1_loop4: | ||||
#ifdef __ARMEB__ | |||||
mov r4, ip, lsl #8 | |||||
#else | |||||
mov r4, ip, lsr #8 | mov r4, ip, lsr #8 | ||||
#endif | |||||
ldr ip, [r1], #0x04 | ldr ip, [r1], #0x04 | ||||
subs r2, r2, #0x04 | subs r2, r2, #0x04 | ||||
#ifdef __ARMEB__ | |||||
orr r4, r4, ip, lsr #24 | |||||
#else | |||||
orr r4, r4, ip, lsl #24 | orr r4, r4, ip, lsl #24 | ||||
#endif | |||||
str r4, [r3], #0x04 | str r4, [r3], #0x04 | ||||
bge .Lmemcpy_bad1_loop4 | bge .Lmemcpy_bad1_loop4 | ||||
sub r1, r1, #0x03 | sub r1, r1, #0x03 | ||||
b .Lmemcpy_bad_done | b .Lmemcpy_bad_done | ||||
.Lmemcpy_bad2_loop16: | .Lmemcpy_bad2_loop16: | ||||
#ifdef __ARMEB__ | |||||
mov r4, ip, lsl #16 | |||||
#else | |||||
mov r4, ip, lsr #16 | mov r4, ip, lsr #16 | ||||
#endif | |||||
ldr r5, [r1], #0x04 | ldr r5, [r1], #0x04 | ||||
pld [r1, #0x018] | pld [r1, #0x018] | ||||
ldr r6, [r1], #0x04 | ldr r6, [r1], #0x04 | ||||
ldr r7, [r1], #0x04 | ldr r7, [r1], #0x04 | ||||
ldr ip, [r1], #0x04 | ldr ip, [r1], #0x04 | ||||
#ifdef __ARMEB__ | |||||
orr r4, r4, r5, lsr #16 | |||||
mov r5, r5, lsl #16 | |||||
orr r5, r5, r6, lsr #16 | |||||
mov r6, r6, lsl #16 | |||||
orr r6, r6, r7, lsr #16 | |||||
mov r7, r7, lsl #16 | |||||
orr r7, r7, ip, lsr #16 | |||||
#else | |||||
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, r6, lsl #16 | orr r5, r5, r6, lsl #16 | ||||
mov r6, r6, lsr #16 | mov r6, r6, lsr #16 | ||||
orr r6, r6, r7, lsl #16 | orr r6, r6, r7, lsl #16 | ||||
mov r7, r7, lsr #16 | mov r7, r7, lsr #16 | ||||
orr r7, r7, ip, lsl #16 | orr r7, r7, ip, lsl #16 | ||||
#endif | |||||
str r4, [r3], #0x04 | str r4, [r3], #0x04 | ||||
str r5, [r3], #0x04 | str r5, [r3], #0x04 | ||||
str r6, [r3], #0x04 | str r6, [r3], #0x04 | ||||
str r7, [r3], #0x04 | str r7, [r3], #0x04 | ||||
.Lmemcpy_bad2: | .Lmemcpy_bad2: | ||||
subs r2, r2, #0x10 | subs r2, r2, #0x10 | ||||
bge .Lmemcpy_bad2_loop16 | bge .Lmemcpy_bad2_loop16 | ||||
adds r2, r2, #0x10 | adds r2, r2, #0x10 | ||||
ldmfdeq sp!, {r4-r7} | ldmfdeq sp!, {r4-r7} | ||||
bxeq lr /* Return now if done */ | bxeq lr /* Return now if done */ | ||||
subs r2, r2, #0x04 | subs r2, r2, #0x04 | ||||
sublt r1, r1, #0x02 | sublt r1, r1, #0x02 | ||||
blt .Lmemcpy_bad_done | blt .Lmemcpy_bad_done | ||||
.Lmemcpy_bad2_loop4: | .Lmemcpy_bad2_loop4: | ||||
#ifdef __ARMEB__ | |||||
mov r4, ip, lsl #16 | |||||
#else | |||||
mov r4, ip, lsr #16 | mov r4, ip, lsr #16 | ||||
#endif | |||||
ldr ip, [r1], #0x04 | ldr ip, [r1], #0x04 | ||||
subs r2, r2, #0x04 | subs r2, r2, #0x04 | ||||
#ifdef __ARMEB__ | |||||
orr r4, r4, ip, lsr #16 | |||||
#else | |||||
orr r4, r4, ip, lsl #16 | orr r4, r4, ip, lsl #16 | ||||
#endif | |||||
str r4, [r3], #0x04 | str r4, [r3], #0x04 | ||||
bge .Lmemcpy_bad2_loop4 | bge .Lmemcpy_bad2_loop4 | ||||
sub r1, r1, #0x02 | sub r1, r1, #0x02 | ||||
b .Lmemcpy_bad_done | b .Lmemcpy_bad_done | ||||
.Lmemcpy_bad3_loop16: | .Lmemcpy_bad3_loop16: | ||||
#ifdef __ARMEB__ | |||||
mov r4, ip, lsl #24 | |||||
#else | |||||
mov r4, ip, lsr #24 | mov r4, ip, lsr #24 | ||||
#endif | |||||
ldr r5, [r1], #0x04 | ldr r5, [r1], #0x04 | ||||
pld [r1, #0x018] | pld [r1, #0x018] | ||||
ldr r6, [r1], #0x04 | ldr r6, [r1], #0x04 | ||||
ldr r7, [r1], #0x04 | ldr r7, [r1], #0x04 | ||||
ldr ip, [r1], #0x04 | ldr ip, [r1], #0x04 | ||||
#ifdef __ARMEB__ | |||||
orr r4, r4, r5, lsr #8 | |||||
mov r5, r5, lsl #24 | |||||
orr r5, r5, r6, lsr #8 | |||||
mov r6, r6, lsl #24 | |||||
orr r6, r6, r7, lsr #8 | |||||
mov r7, r7, lsl #24 | |||||
orr r7, r7, ip, lsr #8 | |||||
#else | |||||
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, r6, lsl #8 | orr r5, r5, r6, lsl #8 | ||||
mov r6, r6, lsr #24 | mov r6, r6, lsr #24 | ||||
orr r6, r6, r7, lsl #8 | orr r6, r6, r7, lsl #8 | ||||
mov r7, r7, lsr #24 | mov r7, r7, lsr #24 | ||||
orr r7, r7, ip, lsl #8 | orr r7, r7, ip, lsl #8 | ||||
#endif | |||||
str r4, [r3], #0x04 | str r4, [r3], #0x04 | ||||
str r5, [r3], #0x04 | str r5, [r3], #0x04 | ||||
str r6, [r3], #0x04 | str r6, [r3], #0x04 | ||||
str r7, [r3], #0x04 | str r7, [r3], #0x04 | ||||
.Lmemcpy_bad3: | .Lmemcpy_bad3: | ||||
subs r2, r2, #0x10 | subs r2, r2, #0x10 | ||||
bge .Lmemcpy_bad3_loop16 | bge .Lmemcpy_bad3_loop16 | ||||
adds r2, r2, #0x10 | adds r2, r2, #0x10 | ||||
ldmfdeq sp!, {r4-r7} | ldmfdeq sp!, {r4-r7} | ||||
bxeq lr /* Return now if done */ | bxeq lr /* Return now if done */ | ||||
subs r2, r2, #0x04 | subs r2, r2, #0x04 | ||||
sublt r1, r1, #0x01 | sublt r1, r1, #0x01 | ||||
blt .Lmemcpy_bad_done | blt .Lmemcpy_bad_done | ||||
.Lmemcpy_bad3_loop4: | .Lmemcpy_bad3_loop4: | ||||
#ifdef __ARMEB__ | |||||
mov r4, ip, lsl #24 | |||||
#else | |||||
mov r4, ip, lsr #24 | mov r4, ip, lsr #24 | ||||
#endif | |||||
ldr ip, [r1], #0x04 | ldr ip, [r1], #0x04 | ||||
subs r2, r2, #0x04 | subs r2, r2, #0x04 | ||||
#ifdef __ARMEB__ | |||||
orr r4, r4, ip, lsr #8 | |||||
#else | |||||
orr r4, r4, ip, lsl #8 | orr r4, r4, ip, lsl #8 | ||||
#endif | |||||
str r4, [r3], #0x04 | str r4, [r3], #0x04 | ||||
bge .Lmemcpy_bad3_loop4 | bge .Lmemcpy_bad3_loop4 | ||||
sub r1, r1, #0x01 | sub r1, r1, #0x01 | ||||
.Lmemcpy_bad_done: | .Lmemcpy_bad_done: | ||||
ldmfd sp!, {r4-r7} | ldmfd sp!, {r4-r7} | ||||
adds r2, r2, #0x04 | adds r2, r2, #0x04 | ||||
bxeq lr | bxeq lr | ||||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | */ | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 0001: dst is 32-bit aligned, src is 8-bit aligned | * 0001: dst is 32-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1, #-1] /* BE:r3 = x012 LE:r3 = 210x */ | ldr r3, [r1, #-1] /* BE:r3 = x012 LE:r3 = 210x */ | ||||
ldr r2, [r1, #3] /* BE:r2 = 3xxx LE:r2 = xxx3 */ | ldr r2, [r1, #3] /* BE:r2 = 3xxx LE:r2 = xxx3 */ | ||||
#ifdef __ARMEB__ | |||||
mov r3, r3, lsl #8 /* r3 = 012. */ | |||||
orr r3, r3, r2, lsr #24 /* r3 = 0123 */ | |||||
#else | |||||
mov r3, r3, lsr #8 /* r3 = .210 */ | mov r3, r3, lsr #8 /* r3 = .210 */ | ||||
orr r3, r3, r2, lsl #24 /* r3 = 3210 */ | orr r3, r3, r2, lsl #24 /* r3 = 3210 */ | ||||
#endif | |||||
str r3, [r0] | str r3, [r0] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 0010: dst is 32-bit aligned, src is 16-bit aligned | * 0010: dst is 32-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
#ifdef __ARMEB__ | |||||
ldrh r3, [r1] | |||||
ldrh r2, [r1, #0x02] | |||||
#else | |||||
ldrh r3, [r1, #0x02] | ldrh r3, [r1, #0x02] | ||||
ldrh r2, [r1] | ldrh r2, [r1] | ||||
#endif | |||||
orr r3, r2, r3, lsl #16 | orr r3, r2, r3, lsl #16 | ||||
str r3, [r0] | str r3, [r0] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 0011: dst is 32-bit aligned, src is 8-bit aligned | * 0011: dst is 32-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1, #-3] /* BE:r3 = xxx0 LE:r3 = 0xxx */ | ldr r3, [r1, #-3] /* BE:r3 = xxx0 LE:r3 = 0xxx */ | ||||
ldr r2, [r1, #1] /* BE:r2 = 123x LE:r2 = x321 */ | ldr r2, [r1, #1] /* BE:r2 = 123x LE:r2 = x321 */ | ||||
#ifdef __ARMEB__ | |||||
mov r3, r3, lsl #24 /* r3 = 0... */ | |||||
orr r3, r3, r2, lsr #8 /* r3 = 0123 */ | |||||
#else | |||||
mov r3, r3, lsr #24 /* r3 = ...0 */ | mov r3, r3, lsr #24 /* r3 = ...0 */ | ||||
orr r3, r3, r2, lsl #8 /* r3 = 3210 */ | orr r3, r3, r2, lsl #8 /* r3 = 3210 */ | ||||
#endif | |||||
str r3, [r0] | str r3, [r0] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 0100: dst is 8-bit aligned, src is 32-bit aligned | * 0100: dst is 8-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1] | ldr r2, [r1] | ||||
#ifdef __ARMEB__ | |||||
strb r2, [r0, #0x03] | |||||
mov r3, r2, lsr #8 | |||||
mov r1, r2, lsr #24 | |||||
strb r1, [r0] | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r3, r2, lsr #8 | mov r3, r2, lsr #8 | ||||
mov r1, r2, lsr #24 | mov r1, r2, lsr #24 | ||||
strb r1, [r0, #0x03] | strb r1, [r0, #0x03] | ||||
#endif | |||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 0101: dst is 8-bit aligned, src is 8-bit aligned | * 0101: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r2, [r1] | ldrb r2, [r1] | ||||
ldrh r3, [r1, #0x01] | ldrh r3, [r1, #0x01] | ||||
ldrb r1, [r1, #0x03] | ldrb r1, [r1, #0x03] | ||||
strb r2, [r0] | strb r2, [r0] | ||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
strb r1, [r0, #0x03] | strb r1, [r0, #0x03] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 0110: dst is 8-bit aligned, src is 16-bit aligned | * 0110: dst is 8-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
ldrh r3, [r1, #0x02] /* LE:r3 = ..23 LE:r3 = ..32 */ | ldrh r3, [r1, #0x02] /* LE:r3 = ..23 LE:r3 = ..32 */ | ||||
#ifdef __ARMEB__ | |||||
mov r1, r2, lsr #8 /* r1 = ...0 */ | |||||
strb r1, [r0] | |||||
mov r2, r2, lsl #8 /* r2 = .01. */ | |||||
orr r2, r2, r3, lsr #8 /* r2 = .012 */ | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r2, r2, lsr #8 /* r2 = ...1 */ | mov r2, r2, lsr #8 /* r2 = ...1 */ | ||||
orr r2, r2, r3, lsl #8 /* r2 = .321 */ | orr r2, r2, r3, lsl #8 /* r2 = .321 */ | ||||
mov r3, r3, lsr #8 /* r3 = ...3 */ | mov r3, r3, lsr #8 /* r3 = ...3 */ | ||||
#endif | |||||
strh r2, [r0, #0x01] | strh r2, [r0, #0x01] | ||||
strb r3, [r0, #0x03] | strb r3, [r0, #0x03] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 0111: dst is 8-bit aligned, src is 8-bit aligned | * 0111: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r2, [r1] | ldrb r2, [r1] | ||||
ldrh r3, [r1, #0x01] | ldrh r3, [r1, #0x01] | ||||
ldrb r1, [r1, #0x03] | ldrb r1, [r1, #0x03] | ||||
strb r2, [r0] | strb r2, [r0] | ||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
strb r1, [r0, #0x03] | strb r1, [r0, #0x03] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 1000: dst is 16-bit aligned, src is 32-bit aligned | * 1000: dst is 16-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1] | ldr r2, [r1] | ||||
#ifdef __ARMEB__ | |||||
strh r2, [r0, #0x02] | |||||
mov r3, r2, lsr #16 | |||||
strh r3, [r0] | |||||
#else | |||||
strh r2, [r0] | strh r2, [r0] | ||||
mov r3, r2, lsr #16 | mov r3, r2, lsr #16 | ||||
strh r3, [r0, #0x02] | strh r3, [r0, #0x02] | ||||
#endif | |||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 1001: dst is 16-bit aligned, src is 8-bit aligned | * 1001: dst is 16-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ | ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ | ||||
ldr r3, [r1, #3] /* BE:r3 = 3xxx LE:r3 = xxx3 */ | ldr r3, [r1, #3] /* BE:r3 = 3xxx LE:r3 = xxx3 */ | ||||
mov r1, r2, lsr #8 /* BE:r1 = .x01 LE:r1 = .210 */ | mov r1, r2, lsr #8 /* BE:r1 = .x01 LE:r1 = .210 */ | ||||
strh r1, [r0] | strh r1, [r0] | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, lsl #8 /* r2 = 012. */ | |||||
orr r2, r2, r3, lsr #24 /* r2 = 0123 */ | |||||
#else | |||||
mov r2, r2, lsr #24 /* r2 = ...2 */ | mov r2, r2, lsr #24 /* r2 = ...2 */ | ||||
orr r2, r2, r3, lsl #8 /* r2 = xx32 */ | orr r2, r2, r3, lsl #8 /* r2 = xx32 */ | ||||
#endif | |||||
strh r2, [r0, #0x02] | strh r2, [r0, #0x02] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 1010: dst is 16-bit aligned, src is 16-bit aligned | * 1010: dst is 16-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] | ldrh r2, [r1] | ||||
ldrh r3, [r1, #0x02] | ldrh r3, [r1, #0x02] | ||||
strh r2, [r0] | strh r2, [r0] | ||||
strh r3, [r0, #0x02] | strh r3, [r0, #0x02] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 1011: dst is 16-bit aligned, src is 8-bit aligned | * 1011: dst is 16-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1, #1] /* BE:r3 = 123x LE:r3 = x321 */ | ldr r3, [r1, #1] /* BE:r3 = 123x LE:r3 = x321 */ | ||||
ldr r2, [r1, #-3] /* BE:r2 = xxx0 LE:r2 = 0xxx */ | ldr r2, [r1, #-3] /* BE:r2 = xxx0 LE:r2 = 0xxx */ | ||||
mov r1, r3, lsr #8 /* BE:r1 = .123 LE:r1 = .x32 */ | mov r1, r3, lsr #8 /* BE:r1 = .123 LE:r1 = .x32 */ | ||||
strh r1, [r0, #0x02] | strh r1, [r0, #0x02] | ||||
#ifdef __ARMEB__ | |||||
mov r3, r3, lsr #24 /* r3 = ...1 */ | |||||
orr r3, r3, r2, lsl #8 /* r3 = xx01 */ | |||||
#else | |||||
mov r3, r3, lsl #8 /* r3 = 321. */ | mov r3, r3, lsl #8 /* r3 = 321. */ | ||||
orr r3, r3, r2, lsr #24 /* r3 = 3210 */ | orr r3, r3, r2, lsr #24 /* r3 = 3210 */ | ||||
#endif | |||||
strh r3, [r0] | strh r3, [r0] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 1100: dst is 8-bit aligned, src is 32-bit aligned | * 1100: dst is 8-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ||||
#ifdef __ARMEB__ | |||||
strb r2, [r0, #0x03] | |||||
mov r3, r2, lsr #8 | |||||
mov r1, r2, lsr #24 | |||||
strh r3, [r0, #0x01] | |||||
strb r1, [r0] | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r3, r2, lsr #8 | mov r3, r2, lsr #8 | ||||
mov r1, r2, lsr #24 | mov r1, r2, lsr #24 | ||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
strb r1, [r0, #0x03] | strb r1, [r0, #0x03] | ||||
#endif | |||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 1101: dst is 8-bit aligned, src is 8-bit aligned | * 1101: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r2, [r1] | ldrb r2, [r1] | ||||
ldrh r3, [r1, #0x01] | ldrh r3, [r1, #0x01] | ||||
ldrb r1, [r1, #0x03] | ldrb r1, [r1, #0x03] | ||||
strb r2, [r0] | strb r2, [r0] | ||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
strb r1, [r0, #0x03] | strb r1, [r0, #0x03] | ||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 1110: dst is 8-bit aligned, src is 16-bit aligned | * 1110: dst is 8-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
#ifdef __ARMEB__ | |||||
ldrh r3, [r1, #0x02] /* BE:r3 = ..23 LE:r3 = ..32 */ | |||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
strb r3, [r0, #0x03] | |||||
mov r3, r3, lsr #8 /* r3 = ...2 */ | |||||
orr r3, r3, r2, lsl #8 /* r3 = ..12 */ | |||||
strh r3, [r0, #0x01] | |||||
mov r2, r2, lsr #8 /* r2 = ...0 */ | |||||
strb r2, [r0] | |||||
#else | |||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | |||||
ldrh r3, [r1, #0x02] /* BE:r3 = ..23 LE:r3 = ..32 */ | ldrh r3, [r1, #0x02] /* BE:r3 = ..23 LE:r3 = ..32 */ | ||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r2, r2, lsr #8 /* r2 = ...1 */ | mov r2, r2, lsr #8 /* r2 = ...1 */ | ||||
orr r2, r2, r3, lsl #8 /* r2 = .321 */ | orr r2, r2, r3, lsl #8 /* r2 = .321 */ | ||||
strh r2, [r0, #0x01] | strh r2, [r0, #0x01] | ||||
mov r3, r3, lsr #8 /* r3 = ...3 */ | mov r3, r3, lsr #8 /* r3 = ...3 */ | ||||
strb r3, [r0, #0x03] | strb r3, [r0, #0x03] | ||||
#endif | |||||
bx lr | bx lr | ||||
LMEMCPY_4_PAD | LMEMCPY_4_PAD | ||||
/* | /* | ||||
* 1111: dst is 8-bit aligned, src is 8-bit aligned | * 1111: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r2, [r1] | ldrb r2, [r1] | ||||
ldrh r3, [r1, #0x01] | ldrh r3, [r1, #0x01] | ||||
Show All 28 Lines | */ | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 0001: dst is 32-bit aligned, src is 8-bit aligned | * 0001: dst is 32-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ | ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ | ||||
ldr r3, [r1, #0x03] /* BE:r3 = 345x LE:r3 = x543 */ | ldr r3, [r1, #0x03] /* BE:r3 = 345x LE:r3 = x543 */ | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, lsl #8 /* r2 = 012. */ | |||||
orr r2, r2, r3, lsr #24 /* r2 = 0123 */ | |||||
#else | |||||
mov r2, r2, lsr #8 /* r2 = .210 */ | mov r2, r2, lsr #8 /* r2 = .210 */ | ||||
orr r2, r2, r3, lsl #24 /* r2 = 3210 */ | orr r2, r2, r3, lsl #24 /* r2 = 3210 */ | ||||
#endif | |||||
mov r3, r3, lsr #8 /* BE:r3 = .345 LE:r3 = .x54 */ | mov r3, r3, lsr #8 /* BE:r3 = .345 LE:r3 = .x54 */ | ||||
str r2, [r0] | str r2, [r0] | ||||
strh r3, [r0, #0x04] | strh r3, [r0, #0x04] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 0010: dst is 32-bit aligned, src is 16-bit aligned | * 0010: dst is 32-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
#ifdef __ARMEB__ | |||||
mov r1, r3, lsr #16 /* r1 = ..23 */ | |||||
orr r1, r1, r2, lsl #16 /* r1 = 0123 */ | |||||
str r1, [r0] | |||||
strh r3, [r0, #0x04] | |||||
#else | |||||
mov r1, r3, lsr #16 /* r1 = ..54 */ | mov r1, r3, lsr #16 /* r1 = ..54 */ | ||||
orr r2, r2, r3, lsl #16 /* r2 = 3210 */ | orr r2, r2, r3, lsl #16 /* r2 = 3210 */ | ||||
str r2, [r0] | str r2, [r0] | ||||
strh r1, [r0, #0x04] | strh r1, [r0, #0x04] | ||||
#endif | |||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 0011: dst is 32-bit aligned, src is 8-bit aligned | * 0011: dst is 32-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1, #-3] /* BE:r2 = xxx0 LE:r2 = 0xxx */ | ldr r2, [r1, #-3] /* BE:r2 = xxx0 LE:r2 = 0xxx */ | ||||
ldr r3, [r1, #1] /* BE:r3 = 1234 LE:r3 = 4321 */ | ldr r3, [r1, #1] /* BE:r3 = 1234 LE:r3 = 4321 */ | ||||
ldr r1, [r1, #5] /* BE:r1 = 5xxx LE:r3 = xxx5 */ | ldr r1, [r1, #5] /* BE:r1 = 5xxx LE:r3 = xxx5 */ | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, lsl #24 /* r2 = 0... */ | |||||
orr r2, r2, r3, lsr #8 /* r2 = 0123 */ | |||||
mov r3, r3, lsl #8 /* r3 = 234. */ | |||||
orr r1, r3, r1, lsr #24 /* r1 = 2345 */ | |||||
#else | |||||
mov r2, r2, lsr #24 /* r2 = ...0 */ | mov r2, r2, lsr #24 /* r2 = ...0 */ | ||||
orr r2, r2, r3, lsl #8 /* r2 = 3210 */ | orr r2, r2, r3, lsl #8 /* r2 = 3210 */ | ||||
mov r1, r1, lsl #8 /* r1 = xx5. */ | mov r1, r1, lsl #8 /* r1 = xx5. */ | ||||
orr r1, r1, r3, lsr #24 /* r1 = xx54 */ | orr r1, r1, r3, lsr #24 /* r1 = xx54 */ | ||||
#endif | |||||
str r2, [r0] | str r2, [r0] | ||||
strh r1, [r0, #0x04] | strh r1, [r0, #0x04] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 0100: dst is 8-bit aligned, src is 32-bit aligned | * 0100: dst is 8-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1] /* BE:r3 = 0123 LE:r3 = 3210 */ | ldr r3, [r1] /* BE:r3 = 0123 LE:r3 = 3210 */ | ||||
ldrh r2, [r1, #0x04] /* BE:r2 = ..45 LE:r2 = ..54 */ | ldrh r2, [r1, #0x04] /* BE:r2 = ..45 LE:r2 = ..54 */ | ||||
mov r1, r3, lsr #8 /* BE:r1 = .012 LE:r1 = .321 */ | mov r1, r3, lsr #8 /* BE:r1 = .012 LE:r1 = .321 */ | ||||
strh r1, [r0, #0x01] | strh r1, [r0, #0x01] | ||||
#ifdef __ARMEB__ | |||||
mov r1, r3, lsr #24 /* r1 = ...0 */ | |||||
strb r1, [r0] | |||||
mov r3, r3, lsl #8 /* r3 = 123. */ | |||||
orr r3, r3, r2, lsr #8 /* r3 = 1234 */ | |||||
#else | |||||
strb r3, [r0] | strb r3, [r0] | ||||
mov r3, r3, lsr #24 /* r3 = ...3 */ | mov r3, r3, lsr #24 /* r3 = ...3 */ | ||||
orr r3, r3, r2, lsl #8 /* r3 = .543 */ | orr r3, r3, r2, lsl #8 /* r3 = .543 */ | ||||
mov r2, r2, lsr #8 /* r2 = ...5 */ | mov r2, r2, lsr #8 /* r2 = ...5 */ | ||||
#endif | |||||
strh r3, [r0, #0x03] | strh r3, [r0, #0x03] | ||||
strb r2, [r0, #0x05] | strb r2, [r0, #0x05] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 0101: dst is 8-bit aligned, src is 8-bit aligned | * 0101: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r2, [r1] | ldrb r2, [r1] | ||||
ldrh r3, [r1, #0x01] | ldrh r3, [r1, #0x01] | ||||
ldrh ip, [r1, #0x03] | ldrh ip, [r1, #0x03] | ||||
ldrb r1, [r1, #0x05] | ldrb r1, [r1, #0x05] | ||||
strb r2, [r0] | strb r2, [r0] | ||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
strh ip, [r0, #0x03] | strh ip, [r0, #0x03] | ||||
strb r1, [r0, #0x05] | strb r1, [r0, #0x05] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 0110: dst is 8-bit aligned, src is 16-bit aligned | * 0110: dst is 8-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
ldr r1, [r1, #0x02] /* BE:r1 = 2345 LE:r1 = 5432 */ | ldr r1, [r1, #0x02] /* BE:r1 = 2345 LE:r1 = 5432 */ | ||||
#ifdef __ARMEB__ | |||||
mov r3, r2, lsr #8 /* r3 = ...0 */ | |||||
strb r3, [r0] | |||||
strb r1, [r0, #0x05] | |||||
mov r3, r1, lsr #8 /* r3 = .234 */ | |||||
strh r3, [r0, #0x03] | |||||
mov r3, r2, lsl #8 /* r3 = .01. */ | |||||
orr r3, r3, r1, lsr #24 /* r3 = .012 */ | |||||
strh r3, [r0, #0x01] | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r3, r1, lsr #24 | mov r3, r1, lsr #24 | ||||
strb r3, [r0, #0x05] | strb r3, [r0, #0x05] | ||||
mov r3, r1, lsr #8 /* r3 = .543 */ | mov r3, r1, lsr #8 /* r3 = .543 */ | ||||
strh r3, [r0, #0x03] | strh r3, [r0, #0x03] | ||||
mov r3, r2, lsr #8 /* r3 = ...1 */ | mov r3, r2, lsr #8 /* r3 = ...1 */ | ||||
orr r3, r3, r1, lsl #8 /* r3 = 4321 */ | orr r3, r3, r1, lsl #8 /* r3 = 4321 */ | ||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
#endif | |||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 0111: dst is 8-bit aligned, src is 8-bit aligned | * 0111: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r2, [r1] | ldrb r2, [r1] | ||||
ldrh r3, [r1, #0x01] | ldrh r3, [r1, #0x01] | ||||
ldrh ip, [r1, #0x03] | ldrh ip, [r1, #0x03] | ||||
ldrb r1, [r1, #0x05] | ldrb r1, [r1, #0x05] | ||||
strb r2, [r0] | strb r2, [r0] | ||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
strh ip, [r0, #0x03] | strh ip, [r0, #0x03] | ||||
strb r1, [r0, #0x05] | strb r1, [r0, #0x05] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 1000: dst is 16-bit aligned, src is 32-bit aligned | * 1000: dst is 16-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
#ifdef __ARMEB__ | |||||
ldr r2, [r1] /* r2 = 0123 */ | |||||
ldrh r3, [r1, #0x04] /* r3 = ..45 */ | |||||
mov r1, r2, lsr #16 /* r1 = ..01 */ | |||||
orr r3, r3, r2, lsl#16 /* r3 = 2345 */ | |||||
strh r1, [r0] | |||||
str r3, [r0, #0x02] | |||||
#else | |||||
ldrh r2, [r1, #0x04] /* r2 = ..54 */ | ldrh r2, [r1, #0x04] /* r2 = ..54 */ | ||||
ldr r3, [r1] /* r3 = 3210 */ | ldr r3, [r1] /* r3 = 3210 */ | ||||
mov r2, r2, lsl #16 /* r2 = 54.. */ | mov r2, r2, lsl #16 /* r2 = 54.. */ | ||||
orr r2, r2, r3, lsr #16 /* r2 = 5432 */ | orr r2, r2, r3, lsr #16 /* r2 = 5432 */ | ||||
strh r3, [r0] | strh r3, [r0] | ||||
str r2, [r0, #0x02] | str r2, [r0, #0x02] | ||||
#endif | |||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 1001: dst is 16-bit aligned, src is 8-bit aligned | * 1001: dst is 16-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1, #-1] /* BE:r3 = x012 LE:r3 = 210x */ | ldr r3, [r1, #-1] /* BE:r3 = x012 LE:r3 = 210x */ | ||||
ldr r2, [r1, #3] /* BE:r2 = 345x LE:r2 = x543 */ | ldr r2, [r1, #3] /* BE:r2 = 345x LE:r2 = x543 */ | ||||
mov r1, r3, lsr #8 /* BE:r1 = .x01 LE:r1 = .210 */ | mov r1, r3, lsr #8 /* BE:r1 = .x01 LE:r1 = .210 */ | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, lsr #8 /* r2 = .345 */ | |||||
orr r2, r2, r3, lsl #24 /* r2 = 2345 */ | |||||
#else | |||||
mov r2, r2, lsl #8 /* r2 = 543. */ | mov r2, r2, lsl #8 /* r2 = 543. */ | ||||
orr r2, r2, r3, lsr #24 /* r2 = 5432 */ | orr r2, r2, r3, lsr #24 /* r2 = 5432 */ | ||||
#endif | |||||
strh r1, [r0] | strh r1, [r0] | ||||
str r2, [r0, #0x02] | str r2, [r0, #0x02] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 1010: dst is 16-bit aligned, src is 16-bit aligned | * 1010: dst is 16-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] | ldrh r2, [r1] | ||||
ldr r3, [r1, #0x02] | ldr r3, [r1, #0x02] | ||||
strh r2, [r0] | strh r2, [r0] | ||||
str r3, [r0, #0x02] | str r3, [r0, #0x02] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 1011: dst is 16-bit aligned, src is 8-bit aligned | * 1011: dst is 16-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r3, [r1] /* r3 = ...0 */ | ldrb r3, [r1] /* r3 = ...0 */ | ||||
ldr r2, [r1, #0x01] /* BE:r2 = 1234 LE:r2 = 4321 */ | ldr r2, [r1, #0x01] /* BE:r2 = 1234 LE:r2 = 4321 */ | ||||
ldrb r1, [r1, #0x05] /* r1 = ...5 */ | ldrb r1, [r1, #0x05] /* r1 = ...5 */ | ||||
#ifdef __ARMEB__ | |||||
mov r3, r3, lsl #8 /* r3 = ..0. */ | |||||
orr r3, r3, r2, lsr #24 /* r3 = ..01 */ | |||||
orr r1, r1, r2, lsl #8 /* r1 = 2345 */ | |||||
#else | |||||
orr r3, r3, r2, lsl #8 /* r3 = 3210 */ | orr r3, r3, r2, lsl #8 /* r3 = 3210 */ | ||||
mov r1, r1, lsl #24 /* r1 = 5... */ | mov r1, r1, lsl #24 /* r1 = 5... */ | ||||
orr r1, r1, r2, lsr #8 /* r1 = 5432 */ | orr r1, r1, r2, lsr #8 /* r1 = 5432 */ | ||||
#endif | |||||
strh r3, [r0] | strh r3, [r0] | ||||
str r1, [r0, #0x02] | str r1, [r0, #0x02] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 1100: dst is 8-bit aligned, src is 32-bit aligned | * 1100: dst is 8-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ||||
ldrh r1, [r1, #0x04] /* BE:r1 = ..45 LE:r1 = ..54 */ | ldrh r1, [r1, #0x04] /* BE:r1 = ..45 LE:r1 = ..54 */ | ||||
#ifdef __ARMEB__ | |||||
mov r3, r2, lsr #24 /* r3 = ...0 */ | |||||
strb r3, [r0] | |||||
mov r2, r2, lsl #8 /* r2 = 123. */ | |||||
orr r2, r2, r1, lsr #8 /* r2 = 1234 */ | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r2, r2, lsr #8 /* r2 = .321 */ | mov r2, r2, lsr #8 /* r2 = .321 */ | ||||
orr r2, r2, r1, lsl #24 /* r2 = 4321 */ | orr r2, r2, r1, lsl #24 /* r2 = 4321 */ | ||||
mov r1, r1, lsr #8 /* r1 = ...5 */ | mov r1, r1, lsr #8 /* r1 = ...5 */ | ||||
#endif | |||||
str r2, [r0, #0x01] | str r2, [r0, #0x01] | ||||
strb r1, [r0, #0x05] | strb r1, [r0, #0x05] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 1101: dst is 8-bit aligned, src is 8-bit aligned | * 1101: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r2, [r1] | ldrb r2, [r1] | ||||
ldrh r3, [r1, #0x01] | ldrh r3, [r1, #0x01] | ||||
ldrh ip, [r1, #0x03] | ldrh ip, [r1, #0x03] | ||||
ldrb r1, [r1, #0x05] | ldrb r1, [r1, #0x05] | ||||
strb r2, [r0] | strb r2, [r0] | ||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
strh ip, [r0, #0x03] | strh ip, [r0, #0x03] | ||||
strb r1, [r0, #0x05] | strb r1, [r0, #0x05] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 1110: dst is 8-bit aligned, src is 16-bit aligned | * 1110: dst is 8-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
ldr r1, [r1, #0x02] /* BE:r1 = 2345 LE:r1 = 5432 */ | ldr r1, [r1, #0x02] /* BE:r1 = 2345 LE:r1 = 5432 */ | ||||
#ifdef __ARMEB__ | |||||
mov r3, r2, lsr #8 /* r3 = ...0 */ | |||||
strb r3, [r0] | |||||
mov r2, r2, lsl #24 /* r2 = 1... */ | |||||
orr r2, r2, r1, lsr #8 /* r2 = 1234 */ | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r2, r2, lsr #8 /* r2 = ...1 */ | mov r2, r2, lsr #8 /* r2 = ...1 */ | ||||
orr r2, r2, r1, lsl #8 /* r2 = 4321 */ | orr r2, r2, r1, lsl #8 /* r2 = 4321 */ | ||||
mov r1, r1, lsr #24 /* r1 = ...5 */ | mov r1, r1, lsr #24 /* r1 = ...5 */ | ||||
#endif | |||||
str r2, [r0, #0x01] | str r2, [r0, #0x01] | ||||
strb r1, [r0, #0x05] | strb r1, [r0, #0x05] | ||||
bx lr | bx lr | ||||
LMEMCPY_6_PAD | LMEMCPY_6_PAD | ||||
/* | /* | ||||
* 1111: dst is 8-bit aligned, src is 8-bit aligned | * 1111: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
Show All 31 Lines | */ | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 0001: dst is 32-bit aligned, src is 8-bit aligned | * 0001: dst is 32-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1, #-1] /* BE:r3 = x012 LE:r3 = 210x */ | ldr r3, [r1, #-1] /* BE:r3 = x012 LE:r3 = 210x */ | ||||
ldr r2, [r1, #0x03] /* BE:r2 = 3456 LE:r2 = 6543 */ | ldr r2, [r1, #0x03] /* BE:r2 = 3456 LE:r2 = 6543 */ | ||||
ldrb r1, [r1, #0x07] /* r1 = ...7 */ | ldrb r1, [r1, #0x07] /* r1 = ...7 */ | ||||
#ifdef __ARMEB__ | |||||
mov r3, r3, lsl #8 /* r3 = 012. */ | |||||
orr r3, r3, r2, lsr #24 /* r3 = 0123 */ | |||||
orr r2, r1, r2, lsl #8 /* r2 = 4567 */ | |||||
#else | |||||
mov r3, r3, lsr #8 /* r3 = .210 */ | mov r3, r3, lsr #8 /* r3 = .210 */ | ||||
orr r3, r3, r2, lsl #24 /* r3 = 3210 */ | orr r3, r3, r2, lsl #24 /* r3 = 3210 */ | ||||
mov r1, r1, lsl #24 /* r1 = 7... */ | mov r1, r1, lsl #24 /* r1 = 7... */ | ||||
orr r2, r1, r2, lsr #8 /* r2 = 7654 */ | orr r2, r1, r2, lsr #8 /* r2 = 7654 */ | ||||
#endif | |||||
str r3, [r0] | str r3, [r0] | ||||
str r2, [r0, #0x04] | str r2, [r0, #0x04] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 0010: dst is 32-bit aligned, src is 16-bit aligned | * 0010: dst is 32-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ||||
ldrh r1, [r1, #0x06] /* BE:r1 = ..67 LE:r1 = ..76 */ | ldrh r1, [r1, #0x06] /* BE:r1 = ..67 LE:r1 = ..76 */ | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, lsl #16 /* r2 = 01.. */ | |||||
orr r2, r2, r3, lsr #16 /* r2 = 0123 */ | |||||
orr r3, r1, r3, lsl #16 /* r3 = 4567 */ | |||||
#else | |||||
orr r2, r2, r3, lsl #16 /* r2 = 3210 */ | orr r2, r2, r3, lsl #16 /* r2 = 3210 */ | ||||
mov r3, r3, lsr #16 /* r3 = ..54 */ | mov r3, r3, lsr #16 /* r3 = ..54 */ | ||||
orr r3, r3, r1, lsl #16 /* r3 = 7654 */ | orr r3, r3, r1, lsl #16 /* r3 = 7654 */ | ||||
#endif | |||||
str r2, [r0] | str r2, [r0] | ||||
str r3, [r0, #0x04] | str r3, [r0, #0x04] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 0011: dst is 32-bit aligned, src is 8-bit aligned | * 0011: dst is 32-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r3, [r1] /* r3 = ...0 */ | ldrb r3, [r1] /* r3 = ...0 */ | ||||
ldr r2, [r1, #0x01] /* BE:r2 = 1234 LE:r2 = 4321 */ | ldr r2, [r1, #0x01] /* BE:r2 = 1234 LE:r2 = 4321 */ | ||||
ldr r1, [r1, #0x05] /* BE:r1 = 567x LE:r1 = x765 */ | ldr r1, [r1, #0x05] /* BE:r1 = 567x LE:r1 = x765 */ | ||||
#ifdef __ARMEB__ | |||||
mov r3, r3, lsl #24 /* r3 = 0... */ | |||||
orr r3, r3, r2, lsr #8 /* r3 = 0123 */ | |||||
mov r2, r2, lsl #24 /* r2 = 4... */ | |||||
orr r2, r2, r1, lsr #8 /* r2 = 4567 */ | |||||
#else | |||||
orr r3, r3, r2, lsl #8 /* r3 = 3210 */ | orr r3, r3, r2, lsl #8 /* r3 = 3210 */ | ||||
mov r2, r2, lsr #24 /* r2 = ...4 */ | mov r2, r2, lsr #24 /* r2 = ...4 */ | ||||
orr r2, r2, r1, lsl #8 /* r2 = 7654 */ | orr r2, r2, r1, lsl #8 /* r2 = 7654 */ | ||||
#endif | |||||
str r3, [r0] | str r3, [r0] | ||||
str r2, [r0, #0x04] | str r2, [r0, #0x04] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 0100: dst is 8-bit aligned, src is 32-bit aligned | * 0100: dst is 8-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1] /* BE:r3 = 0123 LE:r3 = 3210 */ | ldr r3, [r1] /* BE:r3 = 0123 LE:r3 = 3210 */ | ||||
ldr r2, [r1, #0x04] /* BE:r2 = 4567 LE:r2 = 7654 */ | ldr r2, [r1, #0x04] /* BE:r2 = 4567 LE:r2 = 7654 */ | ||||
#ifdef __ARMEB__ | |||||
mov r1, r3, lsr #24 /* r1 = ...0 */ | |||||
strb r1, [r0] | |||||
mov r1, r3, lsr #8 /* r1 = .012 */ | |||||
strb r2, [r0, #0x07] | |||||
mov r3, r3, lsl #24 /* r3 = 3... */ | |||||
orr r3, r3, r2, lsr #8 /* r3 = 3456 */ | |||||
#else | |||||
strb r3, [r0] | strb r3, [r0] | ||||
mov r1, r2, lsr #24 /* r1 = ...7 */ | mov r1, r2, lsr #24 /* r1 = ...7 */ | ||||
strb r1, [r0, #0x07] | strb r1, [r0, #0x07] | ||||
mov r1, r3, lsr #8 /* r1 = .321 */ | mov r1, r3, lsr #8 /* r1 = .321 */ | ||||
mov r3, r3, lsr #24 /* r3 = ...3 */ | mov r3, r3, lsr #24 /* r3 = ...3 */ | ||||
orr r3, r3, r2, lsl #8 /* r3 = 6543 */ | orr r3, r3, r2, lsl #8 /* r3 = 6543 */ | ||||
#endif | |||||
strh r1, [r0, #0x01] | strh r1, [r0, #0x01] | ||||
str r3, [r0, #0x03] | str r3, [r0, #0x03] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 0101: dst is 8-bit aligned, src is 8-bit aligned | * 0101: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
Show All 9 Lines | */ | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 0110: dst is 8-bit aligned, src is 16-bit aligned | * 0110: dst is 8-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ||||
ldrh r1, [r1, #0x06] /* BE:r1 = ..67 LE:r1 = ..76 */ | ldrh r1, [r1, #0x06] /* BE:r1 = ..67 LE:r1 = ..76 */ | ||||
#ifdef __ARMEB__ | |||||
mov ip, r2, lsr #8 /* ip = ...0 */ | |||||
strb ip, [r0] | |||||
mov ip, r2, lsl #8 /* ip = .01. */ | |||||
orr ip, ip, r3, lsr #24 /* ip = .012 */ | |||||
strb r1, [r0, #0x07] | |||||
mov r3, r3, lsl #8 /* r3 = 345. */ | |||||
orr r3, r3, r1, lsr #8 /* r3 = 3456 */ | |||||
#else | |||||
strb r2, [r0] /* 0 */ | strb r2, [r0] /* 0 */ | ||||
mov ip, r1, lsr #8 /* ip = ...7 */ | mov ip, r1, lsr #8 /* ip = ...7 */ | ||||
strb ip, [r0, #0x07] /* 7 */ | strb ip, [r0, #0x07] /* 7 */ | ||||
mov ip, r2, lsr #8 /* ip = ...1 */ | mov ip, r2, lsr #8 /* ip = ...1 */ | ||||
orr ip, ip, r3, lsl #8 /* ip = 4321 */ | orr ip, ip, r3, lsl #8 /* ip = 4321 */ | ||||
mov r3, r3, lsr #8 /* r3 = .543 */ | mov r3, r3, lsr #8 /* r3 = .543 */ | ||||
orr r3, r3, r1, lsl #24 /* r3 = 6543 */ | orr r3, r3, r1, lsl #24 /* r3 = 6543 */ | ||||
#endif | |||||
strh ip, [r0, #0x01] | strh ip, [r0, #0x01] | ||||
str r3, [r0, #0x03] | str r3, [r0, #0x03] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 0111: dst is 8-bit aligned, src is 8-bit aligned | * 0111: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r3, [r1] /* r3 = ...0 */ | ldrb r3, [r1] /* r3 = ...0 */ | ||||
ldr ip, [r1, #0x01] /* BE:ip = 1234 LE:ip = 4321 */ | ldr ip, [r1, #0x01] /* BE:ip = 1234 LE:ip = 4321 */ | ||||
ldrh r2, [r1, #0x05] /* BE:r2 = ..56 LE:r2 = ..65 */ | ldrh r2, [r1, #0x05] /* BE:r2 = ..56 LE:r2 = ..65 */ | ||||
ldrb r1, [r1, #0x07] /* r1 = ...7 */ | ldrb r1, [r1, #0x07] /* r1 = ...7 */ | ||||
strb r3, [r0] | strb r3, [r0] | ||||
mov r3, ip, lsr #16 /* BE:r3 = ..12 LE:r3 = ..43 */ | mov r3, ip, lsr #16 /* BE:r3 = ..12 LE:r3 = ..43 */ | ||||
#ifdef __ARMEB__ | |||||
strh r3, [r0, #0x01] | |||||
orr r2, r2, ip, lsl #16 /* r2 = 3456 */ | |||||
#else | |||||
strh ip, [r0, #0x01] | strh ip, [r0, #0x01] | ||||
orr r2, r3, r2, lsl #16 /* r2 = 6543 */ | orr r2, r3, r2, lsl #16 /* r2 = 6543 */ | ||||
#endif | |||||
str r2, [r0, #0x03] | str r2, [r0, #0x03] | ||||
strb r1, [r0, #0x07] | strb r1, [r0, #0x07] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 1000: dst is 16-bit aligned, src is 32-bit aligned | * 1000: dst is 16-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ||||
ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ | ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ | ||||
mov r1, r2, lsr #16 /* BE:r1 = ..01 LE:r1 = ..32 */ | mov r1, r2, lsr #16 /* BE:r1 = ..01 LE:r1 = ..32 */ | ||||
#ifdef __ARMEB__ | |||||
strh r1, [r0] | |||||
mov r1, r3, lsr #16 /* r1 = ..45 */ | |||||
orr r2, r1 ,r2, lsl #16 /* r2 = 2345 */ | |||||
#else | |||||
strh r2, [r0] | strh r2, [r0] | ||||
orr r2, r1, r3, lsl #16 /* r2 = 5432 */ | orr r2, r1, r3, lsl #16 /* r2 = 5432 */ | ||||
mov r3, r3, lsr #16 /* r3 = ..76 */ | mov r3, r3, lsr #16 /* r3 = ..76 */ | ||||
#endif | |||||
str r2, [r0, #0x02] | str r2, [r0, #0x02] | ||||
strh r3, [r0, #0x06] | strh r3, [r0, #0x06] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 1001: dst is 16-bit aligned, src is 8-bit aligned | * 1001: dst is 16-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ | ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ | ||||
ldr r3, [r1, #0x03] /* BE:r3 = 3456 LE:r3 = 6543 */ | ldr r3, [r1, #0x03] /* BE:r3 = 3456 LE:r3 = 6543 */ | ||||
ldrb ip, [r1, #0x07] /* ip = ...7 */ | ldrb ip, [r1, #0x07] /* ip = ...7 */ | ||||
mov r1, r2, lsr #8 /* BE:r1 = .x01 LE:r1 = .210 */ | mov r1, r2, lsr #8 /* BE:r1 = .x01 LE:r1 = .210 */ | ||||
strh r1, [r0] | strh r1, [r0] | ||||
#ifdef __ARMEB__ | |||||
mov r1, r2, lsl #24 /* r1 = 2... */ | |||||
orr r1, r1, r3, lsr #8 /* r1 = 2345 */ | |||||
orr r3, ip, r3, lsl #8 /* r3 = 4567 */ | |||||
#else | |||||
mov r1, r2, lsr #24 /* r1 = ...2 */ | mov r1, r2, lsr #24 /* r1 = ...2 */ | ||||
orr r1, r1, r3, lsl #8 /* r1 = 5432 */ | orr r1, r1, r3, lsl #8 /* r1 = 5432 */ | ||||
mov r3, r3, lsr #24 /* r3 = ...6 */ | mov r3, r3, lsr #24 /* r3 = ...6 */ | ||||
orr r3, r3, ip, lsl #8 /* r3 = ..76 */ | orr r3, r3, ip, lsl #8 /* r3 = ..76 */ | ||||
#endif | |||||
str r1, [r0, #0x02] | str r1, [r0, #0x02] | ||||
strh r3, [r0, #0x06] | strh r3, [r0, #0x06] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 1010: dst is 16-bit aligned, src is 16-bit aligned | * 1010: dst is 16-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
Show All 9 Lines | |||||
/* | /* | ||||
* 1011: dst is 16-bit aligned, src is 8-bit aligned | * 1011: dst is 16-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1, #0x05] /* BE:r3 = 567x LE:r3 = x765 */ | ldr r3, [r1, #0x05] /* BE:r3 = 567x LE:r3 = x765 */ | ||||
ldr r2, [r1, #0x01] /* BE:r2 = 1234 LE:r2 = 4321 */ | ldr r2, [r1, #0x01] /* BE:r2 = 1234 LE:r2 = 4321 */ | ||||
ldrb ip, [r1] /* ip = ...0 */ | ldrb ip, [r1] /* ip = ...0 */ | ||||
mov r1, r3, lsr #8 /* BE:r1 = .567 LE:r1 = .x76 */ | mov r1, r3, lsr #8 /* BE:r1 = .567 LE:r1 = .x76 */ | ||||
strh r1, [r0, #0x06] | strh r1, [r0, #0x06] | ||||
#ifdef __ARMEB__ | |||||
mov r3, r3, lsr #24 /* r3 = ...5 */ | |||||
orr r3, r3, r2, lsl #8 /* r3 = 2345 */ | |||||
mov r2, r2, lsr #24 /* r2 = ...1 */ | |||||
orr r2, r2, ip, lsl #8 /* r2 = ..01 */ | |||||
#else | |||||
mov r3, r3, lsl #24 /* r3 = 5... */ | mov r3, r3, lsl #24 /* r3 = 5... */ | ||||
orr r3, r3, r2, lsr #8 /* r3 = 5432 */ | orr r3, r3, r2, lsr #8 /* r3 = 5432 */ | ||||
orr r2, ip, r2, lsl #8 /* r2 = 3210 */ | orr r2, ip, r2, lsl #8 /* r2 = 3210 */ | ||||
#endif | |||||
str r3, [r0, #0x02] | str r3, [r0, #0x02] | ||||
strh r2, [r0] | strh r2, [r0] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 1100: dst is 8-bit aligned, src is 32-bit aligned | * 1100: dst is 8-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ | ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ | ||||
ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ||||
mov r1, r3, lsr #8 /* BE:r1 = .456 LE:r1 = .765 */ | mov r1, r3, lsr #8 /* BE:r1 = .456 LE:r1 = .765 */ | ||||
strh r1, [r0, #0x05] | strh r1, [r0, #0x05] | ||||
#ifdef __ARMEB__ | |||||
strb r3, [r0, #0x07] | |||||
mov r1, r2, lsr #24 /* r1 = ...0 */ | |||||
strb r1, [r0] | |||||
mov r2, r2, lsl #8 /* r2 = 123. */ | |||||
orr r2, r2, r3, lsr #24 /* r2 = 1234 */ | |||||
str r2, [r0, #0x01] | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r1, r3, lsr #24 /* r1 = ...7 */ | mov r1, r3, lsr #24 /* r1 = ...7 */ | ||||
strb r1, [r0, #0x07] | strb r1, [r0, #0x07] | ||||
mov r2, r2, lsr #8 /* r2 = .321 */ | mov r2, r2, lsr #8 /* r2 = .321 */ | ||||
orr r2, r2, r3, lsl #24 /* r2 = 4321 */ | orr r2, r2, r3, lsl #24 /* r2 = 4321 */ | ||||
str r2, [r0, #0x01] | str r2, [r0, #0x01] | ||||
#endif | |||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 1101: dst is 8-bit aligned, src is 8-bit aligned | * 1101: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r3, [r1] /* r3 = ...0 */ | ldrb r3, [r1] /* r3 = ...0 */ | ||||
ldrh r2, [r1, #0x01] /* BE:r2 = ..12 LE:r2 = ..21 */ | ldrh r2, [r1, #0x01] /* BE:r2 = ..12 LE:r2 = ..21 */ | ||||
ldr ip, [r1, #0x03] /* BE:ip = 3456 LE:ip = 6543 */ | ldr ip, [r1, #0x03] /* BE:ip = 3456 LE:ip = 6543 */ | ||||
ldrb r1, [r1, #0x07] /* r1 = ...7 */ | ldrb r1, [r1, #0x07] /* r1 = ...7 */ | ||||
strb r3, [r0] | strb r3, [r0] | ||||
mov r3, ip, lsr #16 /* BE:r3 = ..34 LE:r3 = ..65 */ | mov r3, ip, lsr #16 /* BE:r3 = ..34 LE:r3 = ..65 */ | ||||
#ifdef __ARMEB__ | |||||
strh ip, [r0, #0x05] | |||||
orr r2, r3, r2, lsl #16 /* r2 = 1234 */ | |||||
#else | |||||
strh r3, [r0, #0x05] | strh r3, [r0, #0x05] | ||||
orr r2, r2, ip, lsl #16 /* r2 = 4321 */ | orr r2, r2, ip, lsl #16 /* r2 = 4321 */ | ||||
#endif | |||||
str r2, [r0, #0x01] | str r2, [r0, #0x01] | ||||
strb r1, [r0, #0x07] | strb r1, [r0, #0x07] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 1110: dst is 8-bit aligned, src is 16-bit aligned | * 1110: dst is 8-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ||||
ldrh r1, [r1, #0x06] /* BE:r1 = ..67 LE:r1 = ..76 */ | ldrh r1, [r1, #0x06] /* BE:r1 = ..67 LE:r1 = ..76 */ | ||||
#ifdef __ARMEB__ | |||||
mov ip, r2, lsr #8 /* ip = ...0 */ | |||||
strb ip, [r0] | |||||
mov ip, r2, lsl #24 /* ip = 1... */ | |||||
orr ip, ip, r3, lsr #8 /* ip = 1234 */ | |||||
strb r1, [r0, #0x07] | |||||
mov r1, r1, lsr #8 /* r1 = ...6 */ | |||||
orr r1, r1, r3, lsl #8 /* r1 = 3456 */ | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov ip, r2, lsr #8 /* ip = ...1 */ | mov ip, r2, lsr #8 /* ip = ...1 */ | ||||
orr ip, ip, r3, lsl #8 /* ip = 4321 */ | orr ip, ip, r3, lsl #8 /* ip = 4321 */ | ||||
mov r2, r1, lsr #8 /* r2 = ...7 */ | mov r2, r1, lsr #8 /* r2 = ...7 */ | ||||
strb r2, [r0, #0x07] | strb r2, [r0, #0x07] | ||||
mov r1, r1, lsl #8 /* r1 = .76. */ | mov r1, r1, lsl #8 /* r1 = .76. */ | ||||
orr r1, r1, r3, lsr #24 /* r1 = .765 */ | orr r1, r1, r3, lsr #24 /* r1 = .765 */ | ||||
#endif | |||||
str ip, [r0, #0x01] | str ip, [r0, #0x01] | ||||
strh r1, [r0, #0x05] | strh r1, [r0, #0x05] | ||||
bx lr | bx lr | ||||
LMEMCPY_8_PAD | LMEMCPY_8_PAD | ||||
/* | /* | ||||
* 1111: dst is 8-bit aligned, src is 8-bit aligned | * 1111: dst is 8-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
Show All 35 Lines | |||||
/* | /* | ||||
* 0001: dst is 32-bit aligned, src is 8-bit aligned | * 0001: dst is 32-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r2, [r1, #0xb] /* r2 = ...B */ | ldrb r2, [r1, #0xb] /* r2 = ...B */ | ||||
ldr ip, [r1, #0x07] /* BE:ip = 789A LE:ip = A987 */ | ldr ip, [r1, #0x07] /* BE:ip = 789A LE:ip = A987 */ | ||||
ldr r3, [r1, #0x03] /* BE:r3 = 3456 LE:r3 = 6543 */ | ldr r3, [r1, #0x03] /* BE:r3 = 3456 LE:r3 = 6543 */ | ||||
ldr r1, [r1, #-1] /* BE:r1 = x012 LE:r1 = 210x */ | ldr r1, [r1, #-1] /* BE:r1 = x012 LE:r1 = 210x */ | ||||
#ifdef __ARMEB__ | |||||
orr r2, r2, ip, lsl #8 /* r2 = 89AB */ | |||||
str r2, [r0, #0x08] | |||||
mov r2, ip, lsr #24 /* r2 = ...7 */ | |||||
orr r2, r2, r3, lsl #8 /* r2 = 4567 */ | |||||
mov r1, r1, lsl #8 /* r1 = 012. */ | |||||
orr r1, r1, r3, lsr #24 /* r1 = 0123 */ | |||||
#else | |||||
mov r2, r2, lsl #24 /* r2 = B... */ | mov r2, r2, lsl #24 /* r2 = B... */ | ||||
orr r2, r2, ip, lsr #8 /* r2 = BA98 */ | orr r2, r2, ip, lsr #8 /* r2 = BA98 */ | ||||
str r2, [r0, #0x08] | str r2, [r0, #0x08] | ||||
mov r2, ip, lsl #24 /* r2 = 7... */ | mov r2, ip, lsl #24 /* r2 = 7... */ | ||||
orr r2, r2, r3, lsr #8 /* r2 = 7654 */ | orr r2, r2, r3, lsr #8 /* r2 = 7654 */ | ||||
mov r1, r1, lsr #8 /* r1 = .210 */ | mov r1, r1, lsr #8 /* r1 = .210 */ | ||||
orr r1, r1, r3, lsl #24 /* r1 = 3210 */ | orr r1, r1, r3, lsl #24 /* r1 = 3210 */ | ||||
#endif | |||||
str r2, [r0, #0x04] | str r2, [r0, #0x04] | ||||
str r1, [r0] | str r1, [r0] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 0010: dst is 32-bit aligned, src is 16-bit aligned | * 0010: dst is 32-bit aligned, src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ||||
ldr ip, [r1, #0x06] /* BE:ip = 6789 LE:ip = 9876 */ | ldr ip, [r1, #0x06] /* BE:ip = 6789 LE:ip = 9876 */ | ||||
ldrh r1, [r1, #0x0a] /* BE:r1 = ..AB LE:r1 = ..BA */ | ldrh r1, [r1, #0x0a] /* BE:r1 = ..AB LE:r1 = ..BA */ | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, lsl #16 /* r2 = 01.. */ | |||||
orr r2, r2, r3, lsr #16 /* r2 = 0123 */ | |||||
str r2, [r0] | |||||
mov r3, r3, lsl #16 /* r3 = 45.. */ | |||||
orr r3, r3, ip, lsr #16 /* r3 = 4567 */ | |||||
orr r1, r1, ip, lsl #16 /* r1 = 89AB */ | |||||
#else | |||||
orr r2, r2, r3, lsl #16 /* r2 = 3210 */ | orr r2, r2, r3, lsl #16 /* r2 = 3210 */ | ||||
str r2, [r0] | str r2, [r0] | ||||
mov r3, r3, lsr #16 /* r3 = ..54 */ | mov r3, r3, lsr #16 /* r3 = ..54 */ | ||||
orr r3, r3, ip, lsl #16 /* r3 = 7654 */ | orr r3, r3, ip, lsl #16 /* r3 = 7654 */ | ||||
mov r1, r1, lsl #16 /* r1 = BA.. */ | mov r1, r1, lsl #16 /* r1 = BA.. */ | ||||
orr r1, r1, ip, lsr #16 /* r1 = BA98 */ | orr r1, r1, ip, lsr #16 /* r1 = BA98 */ | ||||
#endif | |||||
str r3, [r0, #0x04] | str r3, [r0, #0x04] | ||||
str r1, [r0, #0x08] | str r1, [r0, #0x08] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 0011: dst is 32-bit aligned, src is 8-bit aligned | * 0011: dst is 32-bit aligned, src is 8-bit aligned | ||||
*/ | */ | ||||
ldrb r2, [r1] /* r2 = ...0 */ | ldrb r2, [r1] /* r2 = ...0 */ | ||||
ldr r3, [r1, #0x01] /* BE:r3 = 1234 LE:r3 = 4321 */ | ldr r3, [r1, #0x01] /* BE:r3 = 1234 LE:r3 = 4321 */ | ||||
ldr ip, [r1, #0x05] /* BE:ip = 5678 LE:ip = 8765 */ | ldr ip, [r1, #0x05] /* BE:ip = 5678 LE:ip = 8765 */ | ||||
ldr r1, [r1, #0x09] /* BE:r1 = 9ABx LE:r1 = xBA9 */ | ldr r1, [r1, #0x09] /* BE:r1 = 9ABx LE:r1 = xBA9 */ | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, lsl #24 /* r2 = 0... */ | |||||
orr r2, r2, r3, lsr #8 /* r2 = 0123 */ | |||||
str r2, [r0] | |||||
mov r3, r3, lsl #24 /* r3 = 4... */ | |||||
orr r3, r3, ip, lsr #8 /* r3 = 4567 */ | |||||
mov r1, r1, lsr #8 /* r1 = .9AB */ | |||||
orr r1, r1, ip, lsl #24 /* r1 = 89AB */ | |||||
#else | |||||
orr r2, r2, r3, lsl #8 /* r2 = 3210 */ | orr r2, r2, r3, lsl #8 /* r2 = 3210 */ | ||||
str r2, [r0] | str r2, [r0] | ||||
mov r3, r3, lsr #24 /* r3 = ...4 */ | mov r3, r3, lsr #24 /* r3 = ...4 */ | ||||
orr r3, r3, ip, lsl #8 /* r3 = 7654 */ | orr r3, r3, ip, lsl #8 /* r3 = 7654 */ | ||||
mov r1, r1, lsl #8 /* r1 = BA9. */ | mov r1, r1, lsl #8 /* r1 = BA9. */ | ||||
orr r1, r1, ip, lsr #24 /* r1 = BA98 */ | orr r1, r1, ip, lsr #24 /* r1 = BA98 */ | ||||
#endif | |||||
str r3, [r0, #0x04] | str r3, [r0, #0x04] | ||||
str r1, [r0, #0x08] | str r1, [r0, #0x08] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 0100: dst is 8-bit aligned (byte 1), src is 32-bit aligned | * 0100: dst is 8-bit aligned (byte 1), src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ||||
ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ | ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ | ||||
ldr ip, [r1, #0x08] /* BE:ip = 89AB LE:ip = BA98 */ | ldr ip, [r1, #0x08] /* BE:ip = 89AB LE:ip = BA98 */ | ||||
mov r1, r2, lsr #8 /* BE:r1 = .012 LE:r1 = .321 */ | mov r1, r2, lsr #8 /* BE:r1 = .012 LE:r1 = .321 */ | ||||
strh r1, [r0, #0x01] | strh r1, [r0, #0x01] | ||||
#ifdef __ARMEB__ | |||||
mov r1, r2, lsr #24 /* r1 = ...0 */ | |||||
strb r1, [r0] | |||||
mov r1, r2, lsl #24 /* r1 = 3... */ | |||||
orr r2, r1, r3, lsr #8 /* r1 = 3456 */ | |||||
mov r1, r3, lsl #24 /* r1 = 7... */ | |||||
orr r1, r1, ip, lsr #8 /* r1 = 789A */ | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r1, r2, lsr #24 /* r1 = ...3 */ | mov r1, r2, lsr #24 /* r1 = ...3 */ | ||||
orr r2, r1, r3, lsl #8 /* r1 = 6543 */ | orr r2, r1, r3, lsl #8 /* r1 = 6543 */ | ||||
mov r1, r3, lsr #24 /* r1 = ...7 */ | mov r1, r3, lsr #24 /* r1 = ...7 */ | ||||
orr r1, r1, ip, lsl #8 /* r1 = A987 */ | orr r1, r1, ip, lsl #8 /* r1 = A987 */ | ||||
mov ip, ip, lsr #24 /* ip = ...B */ | mov ip, ip, lsr #24 /* ip = ...B */ | ||||
#endif | |||||
str r2, [r0, #0x03] | str r2, [r0, #0x03] | ||||
str r1, [r0, #0x07] | str r1, [r0, #0x07] | ||||
strb ip, [r0, #0x0b] | strb ip, [r0, #0x0b] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 0101: dst is 8-bit aligned (byte 1), src is 8-bit aligned (byte 1) | * 0101: dst is 8-bit aligned (byte 1), src is 8-bit aligned (byte 1) | ||||
Show All 13 Lines | |||||
/* | /* | ||||
* 0110: dst is 8-bit aligned (byte 1), src is 16-bit aligned | * 0110: dst is 8-bit aligned (byte 1), src is 16-bit aligned | ||||
*/ | */ | ||||
ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ | ||||
ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ | ||||
ldr ip, [r1, #0x06] /* BE:ip = 6789 LE:ip = 9876 */ | ldr ip, [r1, #0x06] /* BE:ip = 6789 LE:ip = 9876 */ | ||||
ldrh r1, [r1, #0x0a] /* BE:r1 = ..AB LE:r1 = ..BA */ | ldrh r1, [r1, #0x0a] /* BE:r1 = ..AB LE:r1 = ..BA */ | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, ror #8 /* r2 = 1..0 */ | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r2, r2, lsr #16 /* r2 = ..1. */ | |||||
orr r2, r2, r3, lsr #24 /* r2 = ..12 */ | |||||
strh r2, [r0, #0x01] | |||||
mov r2, r3, lsl #8 /* r2 = 345. */ | |||||
orr r3, r2, ip, lsr #24 /* r3 = 3456 */ | |||||
mov r2, ip, lsl #8 /* r2 = 789. */ | |||||
orr r2, r2, r1, lsr #8 /* r2 = 789A */ | |||||
#else | |||||
strb r2, [r0] | |||||
mov r2, r2, lsr #8 /* r2 = ...1 */ | mov r2, r2, lsr #8 /* r2 = ...1 */ | ||||
orr r2, r2, r3, lsl #8 /* r2 = 4321 */ | orr r2, r2, r3, lsl #8 /* r2 = 4321 */ | ||||
strh r2, [r0, #0x01] | strh r2, [r0, #0x01] | ||||
mov r2, r3, lsr #8 /* r2 = .543 */ | mov r2, r3, lsr #8 /* r2 = .543 */ | ||||
orr r3, r2, ip, lsl #24 /* r3 = 6543 */ | orr r3, r2, ip, lsl #24 /* r3 = 6543 */ | ||||
mov r2, ip, lsr #8 /* r2 = .987 */ | mov r2, ip, lsr #8 /* r2 = .987 */ | ||||
orr r2, r2, r1, lsl #24 /* r2 = A987 */ | orr r2, r2, r1, lsl #24 /* r2 = A987 */ | ||||
mov r1, r1, lsr #8 /* r1 = ...B */ | mov r1, r1, lsr #8 /* r1 = ...B */ | ||||
#endif | |||||
str r3, [r0, #0x03] | str r3, [r0, #0x03] | ||||
str r2, [r0, #0x07] | str r2, [r0, #0x07] | ||||
strb r1, [r0, #0x0b] | strb r1, [r0, #0x0b] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 0111: dst is 8-bit aligned (byte 1), src is 8-bit aligned (byte 3) | * 0111: dst is 8-bit aligned (byte 1), src is 8-bit aligned (byte 3) | ||||
*/ | */ | ||||
ldrb r2, [r1] | ldrb r2, [r1] | ||||
ldr r3, [r1, #0x01] /* BE:r3 = 1234 LE:r3 = 4321 */ | ldr r3, [r1, #0x01] /* BE:r3 = 1234 LE:r3 = 4321 */ | ||||
ldr ip, [r1, #0x05] /* BE:ip = 5678 LE:ip = 8765 */ | ldr ip, [r1, #0x05] /* BE:ip = 5678 LE:ip = 8765 */ | ||||
ldr r1, [r1, #0x09] /* BE:r1 = 9ABx LE:r1 = xBA9 */ | ldr r1, [r1, #0x09] /* BE:r1 = 9ABx LE:r1 = xBA9 */ | ||||
strb r2, [r0] | strb r2, [r0] | ||||
#ifdef __ARMEB__ | |||||
mov r2, r3, lsr #16 /* r2 = ..12 */ | |||||
strh r2, [r0, #0x01] | |||||
mov r3, r3, lsl #16 /* r3 = 34.. */ | |||||
orr r3, r3, ip, lsr #16 /* r3 = 3456 */ | |||||
mov ip, ip, lsl #16 /* ip = 78.. */ | |||||
orr ip, ip, r1, lsr #16 /* ip = 789A */ | |||||
mov r1, r1, lsr #8 /* r1 = .9AB */ | |||||
#else | |||||
strh r3, [r0, #0x01] | strh r3, [r0, #0x01] | ||||
mov r3, r3, lsr #16 /* r3 = ..43 */ | mov r3, r3, lsr #16 /* r3 = ..43 */ | ||||
orr r3, r3, ip, lsl #16 /* r3 = 6543 */ | orr r3, r3, ip, lsl #16 /* r3 = 6543 */ | ||||
mov ip, ip, lsr #16 /* ip = ..87 */ | mov ip, ip, lsr #16 /* ip = ..87 */ | ||||
orr ip, ip, r1, lsl #16 /* ip = A987 */ | orr ip, ip, r1, lsl #16 /* ip = A987 */ | ||||
mov r1, r1, lsr #16 /* r1 = ..xB */ | mov r1, r1, lsr #16 /* r1 = ..xB */ | ||||
#endif | |||||
str r3, [r0, #0x03] | str r3, [r0, #0x03] | ||||
str ip, [r0, #0x07] | str ip, [r0, #0x07] | ||||
strb r1, [r0, #0x0b] | strb r1, [r0, #0x0b] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 1000: dst is 16-bit aligned, src is 32-bit aligned | * 1000: dst is 16-bit aligned, src is 32-bit aligned | ||||
*/ | */ | ||||
ldr ip, [r1] /* BE:ip = 0123 LE:ip = 3210 */ | ldr ip, [r1] /* BE:ip = 0123 LE:ip = 3210 */ | ||||
ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ | ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ | ||||
ldr r2, [r1, #0x08] /* BE:r2 = 89AB LE:r2 = BA98 */ | ldr r2, [r1, #0x08] /* BE:r2 = 89AB LE:r2 = BA98 */ | ||||
mov r1, ip, lsr #16 /* BE:r1 = ..01 LE:r1 = ..32 */ | mov r1, ip, lsr #16 /* BE:r1 = ..01 LE:r1 = ..32 */ | ||||
#ifdef __ARMEB__ | |||||
strh r1, [r0] | |||||
mov r1, ip, lsl #16 /* r1 = 23.. */ | |||||
orr r1, r1, r3, lsr #16 /* r1 = 2345 */ | |||||
mov r3, r3, lsl #16 /* r3 = 67.. */ | |||||
orr r3, r3, r2, lsr #16 /* r3 = 6789 */ | |||||
#else | |||||
strh ip, [r0] | strh ip, [r0] | ||||
orr r1, r1, r3, lsl #16 /* r1 = 5432 */ | orr r1, r1, r3, lsl #16 /* r1 = 5432 */ | ||||
mov r3, r3, lsr #16 /* r3 = ..76 */ | mov r3, r3, lsr #16 /* r3 = ..76 */ | ||||
orr r3, r3, r2, lsl #16 /* r3 = 9876 */ | orr r3, r3, r2, lsl #16 /* r3 = 9876 */ | ||||
mov r2, r2, lsr #16 /* r2 = ..BA */ | mov r2, r2, lsr #16 /* r2 = ..BA */ | ||||
#endif | |||||
str r1, [r0, #0x02] | str r1, [r0, #0x02] | ||||
str r3, [r0, #0x06] | str r3, [r0, #0x06] | ||||
strh r2, [r0, #0x0a] | strh r2, [r0, #0x0a] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 1001: dst is 16-bit aligned, src is 8-bit aligned (byte 1) | * 1001: dst is 16-bit aligned, src is 8-bit aligned (byte 1) | ||||
*/ | */ | ||||
ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ | ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ | ||||
ldr r3, [r1, #0x03] /* BE:r3 = 3456 LE:r3 = 6543 */ | ldr r3, [r1, #0x03] /* BE:r3 = 3456 LE:r3 = 6543 */ | ||||
mov ip, r2, lsr #8 /* BE:ip = .x01 LE:ip = .210 */ | mov ip, r2, lsr #8 /* BE:ip = .x01 LE:ip = .210 */ | ||||
strh ip, [r0] | strh ip, [r0] | ||||
ldr ip, [r1, #0x07] /* BE:ip = 789A LE:ip = A987 */ | ldr ip, [r1, #0x07] /* BE:ip = 789A LE:ip = A987 */ | ||||
ldrb r1, [r1, #0x0b] /* r1 = ...B */ | ldrb r1, [r1, #0x0b] /* r1 = ...B */ | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, lsl #24 /* r2 = 2... */ | |||||
orr r2, r2, r3, lsr #8 /* r2 = 2345 */ | |||||
mov r3, r3, lsl #24 /* r3 = 6... */ | |||||
orr r3, r3, ip, lsr #8 /* r3 = 6789 */ | |||||
orr r1, r1, ip, lsl #8 /* r1 = 89AB */ | |||||
#else | |||||
mov r2, r2, lsr #24 /* r2 = ...2 */ | mov r2, r2, lsr #24 /* r2 = ...2 */ | ||||
orr r2, r2, r3, lsl #8 /* r2 = 5432 */ | orr r2, r2, r3, lsl #8 /* r2 = 5432 */ | ||||
mov r3, r3, lsr #24 /* r3 = ...6 */ | mov r3, r3, lsr #24 /* r3 = ...6 */ | ||||
orr r3, r3, ip, lsl #8 /* r3 = 9876 */ | orr r3, r3, ip, lsl #8 /* r3 = 9876 */ | ||||
mov r1, r1, lsl #8 /* r1 = ..B. */ | mov r1, r1, lsl #8 /* r1 = ..B. */ | ||||
orr r1, r1, ip, lsr #24 /* r1 = ..BA */ | orr r1, r1, ip, lsr #24 /* r1 = ..BA */ | ||||
#endif | |||||
str r2, [r0, #0x02] | str r2, [r0, #0x02] | ||||
str r3, [r0, #0x06] | str r3, [r0, #0x06] | ||||
strh r1, [r0, #0x0a] | strh r1, [r0, #0x0a] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 1010: dst is 16-bit aligned, src is 16-bit aligned | * 1010: dst is 16-bit aligned, src is 16-bit aligned | ||||
Show All 13 Lines | |||||
* 1011: dst is 16-bit aligned, src is 8-bit aligned (byte 3) | * 1011: dst is 16-bit aligned, src is 8-bit aligned (byte 3) | ||||
*/ | */ | ||||
ldr r2, [r1, #0x09] /* BE:r2 = 9ABx LE:r2 = xBA9 */ | ldr r2, [r1, #0x09] /* BE:r2 = 9ABx LE:r2 = xBA9 */ | ||||
ldr r3, [r1, #0x05] /* BE:r3 = 5678 LE:r3 = 8765 */ | ldr r3, [r1, #0x05] /* BE:r3 = 5678 LE:r3 = 8765 */ | ||||
mov ip, r2, lsr #8 /* BE:ip = .9AB LE:ip = .xBA */ | mov ip, r2, lsr #8 /* BE:ip = .9AB LE:ip = .xBA */ | ||||
strh ip, [r0, #0x0a] | strh ip, [r0, #0x0a] | ||||
ldr ip, [r1, #0x01] /* BE:ip = 1234 LE:ip = 4321 */ | ldr ip, [r1, #0x01] /* BE:ip = 1234 LE:ip = 4321 */ | ||||
ldrb r1, [r1] /* r1 = ...0 */ | ldrb r1, [r1] /* r1 = ...0 */ | ||||
#ifdef __ARMEB__ | |||||
mov r2, r2, lsr #24 /* r2 = ...9 */ | |||||
orr r2, r2, r3, lsl #8 /* r2 = 6789 */ | |||||
mov r3, r3, lsr #24 /* r3 = ...5 */ | |||||
orr r3, r3, ip, lsl #8 /* r3 = 2345 */ | |||||
mov r1, r1, lsl #8 /* r1 = ..0. */ | |||||
orr r1, r1, ip, lsr #24 /* r1 = ..01 */ | |||||
#else | |||||
mov r2, r2, lsl #24 /* r2 = 9... */ | mov r2, r2, lsl #24 /* r2 = 9... */ | ||||
orr r2, r2, r3, lsr #8 /* r2 = 9876 */ | orr r2, r2, r3, lsr #8 /* r2 = 9876 */ | ||||
mov r3, r3, lsl #24 /* r3 = 5... */ | mov r3, r3, lsl #24 /* r3 = 5... */ | ||||
orr r3, r3, ip, lsr #8 /* r3 = 5432 */ | orr r3, r3, ip, lsr #8 /* r3 = 5432 */ | ||||
orr r1, r1, ip, lsl #8 /* r1 = 3210 */ | orr r1, r1, ip, lsl #8 /* r1 = 3210 */ | ||||
#endif | |||||
str r2, [r0, #0x06] | str r2, [r0, #0x06] | ||||
str r3, [r0, #0x02] | str r3, [r0, #0x02] | ||||
strh r1, [r0] | strh r1, [r0] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 1100: dst is 8-bit aligned (byte 3), src is 32-bit aligned | * 1100: dst is 8-bit aligned (byte 3), src is 32-bit aligned | ||||
*/ | */ | ||||
ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ | ||||
ldr ip, [r1, #0x04] /* BE:ip = 4567 LE:ip = 7654 */ | ldr ip, [r1, #0x04] /* BE:ip = 4567 LE:ip = 7654 */ | ||||
ldr r1, [r1, #0x08] /* BE:r1 = 89AB LE:r1 = BA98 */ | ldr r1, [r1, #0x08] /* BE:r1 = 89AB LE:r1 = BA98 */ | ||||
#ifdef __ARMEB__ | |||||
mov r3, r2, lsr #24 /* r3 = ...0 */ | |||||
strb r3, [r0] | |||||
mov r2, r2, lsl #8 /* r2 = 123. */ | |||||
orr r2, r2, ip, lsr #24 /* r2 = 1234 */ | |||||
str r2, [r0, #0x01] | |||||
mov r2, ip, lsl #8 /* r2 = 567. */ | |||||
orr r2, r2, r1, lsr #24 /* r2 = 5678 */ | |||||
str r2, [r0, #0x05] | |||||
mov r2, r1, lsr #8 /* r2 = ..9A */ | |||||
strh r2, [r0, #0x09] | |||||
strb r1, [r0, #0x0b] | |||||
#else | |||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r3, r2, lsr #8 /* r3 = .321 */ | mov r3, r2, lsr #8 /* r3 = .321 */ | ||||
orr r3, r3, ip, lsl #24 /* r3 = 4321 */ | orr r3, r3, ip, lsl #24 /* r3 = 4321 */ | ||||
str r3, [r0, #0x01] | str r3, [r0, #0x01] | ||||
mov r3, ip, lsr #8 /* r3 = .765 */ | mov r3, ip, lsr #8 /* r3 = .765 */ | ||||
orr r3, r3, r1, lsl #24 /* r3 = 8765 */ | orr r3, r3, r1, lsl #24 /* r3 = 8765 */ | ||||
str r3, [r0, #0x05] | str r3, [r0, #0x05] | ||||
mov r1, r1, lsr #8 /* r1 = .BA9 */ | mov r1, r1, lsr #8 /* r1 = .BA9 */ | ||||
strh r1, [r0, #0x09] | strh r1, [r0, #0x09] | ||||
mov r1, r1, lsr #16 /* r1 = ...B */ | mov r1, r1, lsr #16 /* r1 = ...B */ | ||||
strb r1, [r0, #0x0b] | strb r1, [r0, #0x0b] | ||||
#endif | |||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 1101: dst is 8-bit aligned (byte 3), src is 8-bit aligned (byte 1) | * 1101: dst is 8-bit aligned (byte 3), src is 8-bit aligned (byte 1) | ||||
*/ | */ | ||||
ldrb r2, [r1, #0x0b] /* r2 = ...B */ | ldrb r2, [r1, #0x0b] /* r2 = ...B */ | ||||
ldr r3, [r1, #0x07] /* BE:r3 = 789A LE:r3 = A987 */ | ldr r3, [r1, #0x07] /* BE:r3 = 789A LE:r3 = A987 */ | ||||
ldr ip, [r1, #0x03] /* BE:ip = 3456 LE:ip = 6543 */ | ldr ip, [r1, #0x03] /* BE:ip = 3456 LE:ip = 6543 */ | ||||
ldr r1, [r1, #-1] /* BE:r1 = x012 LE:r1 = 210x */ | ldr r1, [r1, #-1] /* BE:r1 = x012 LE:r1 = 210x */ | ||||
strb r2, [r0, #0x0b] | strb r2, [r0, #0x0b] | ||||
#ifdef __ARMEB__ | |||||
strh r3, [r0, #0x09] | |||||
mov r3, r3, lsr #16 /* r3 = ..78 */ | |||||
orr r3, r3, ip, lsl #16 /* r3 = 5678 */ | |||||
mov ip, ip, lsr #16 /* ip = ..34 */ | |||||
orr ip, ip, r1, lsl #16 /* ip = 1234 */ | |||||
mov r1, r1, lsr #16 /* r1 = ..x0 */ | |||||
#else | |||||
mov r2, r3, lsr #16 /* r2 = ..A9 */ | mov r2, r3, lsr #16 /* r2 = ..A9 */ | ||||
strh r2, [r0, #0x09] | strh r2, [r0, #0x09] | ||||
mov r3, r3, lsl #16 /* r3 = 87.. */ | mov r3, r3, lsl #16 /* r3 = 87.. */ | ||||
orr r3, r3, ip, lsr #16 /* r3 = 8765 */ | orr r3, r3, ip, lsr #16 /* r3 = 8765 */ | ||||
mov ip, ip, lsl #16 /* ip = 43.. */ | mov ip, ip, lsl #16 /* ip = 43.. */ | ||||
orr ip, ip, r1, lsr #16 /* ip = 4321 */ | orr ip, ip, r1, lsr #16 /* ip = 4321 */ | ||||
mov r1, r1, lsr #8 /* r1 = .210 */ | mov r1, r1, lsr #8 /* r1 = .210 */ | ||||
#endif | |||||
str r3, [r0, #0x05] | str r3, [r0, #0x05] | ||||
str ip, [r0, #0x01] | str ip, [r0, #0x01] | ||||
strb r1, [r0] | strb r1, [r0] | ||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 1110: dst is 8-bit aligned (byte 3), src is 16-bit aligned | * 1110: dst is 8-bit aligned (byte 3), src is 16-bit aligned | ||||
*/ | */ | ||||
#ifdef __ARMEB__ | |||||
ldrh r2, [r1, #0x0a] /* r2 = ..AB */ | |||||
ldr ip, [r1, #0x06] /* ip = 6789 */ | |||||
ldr r3, [r1, #0x02] /* r3 = 2345 */ | |||||
ldrh r1, [r1] /* r1 = ..01 */ | |||||
strb r2, [r0, #0x0b] | |||||
mov r2, r2, lsr #8 /* r2 = ...A */ | |||||
orr r2, r2, ip, lsl #8 /* r2 = 789A */ | |||||
mov ip, ip, lsr #8 /* ip = .678 */ | |||||
orr ip, ip, r3, lsl #24 /* ip = 5678 */ | |||||
mov r3, r3, lsr #8 /* r3 = .234 */ | |||||
orr r3, r3, r1, lsl #24 /* r3 = 1234 */ | |||||
mov r1, r1, lsr #8 /* r1 = ...0 */ | |||||
strb r1, [r0] | |||||
str r3, [r0, #0x01] | |||||
str ip, [r0, #0x05] | |||||
strh r2, [r0, #0x09] | |||||
#else | |||||
ldrh r2, [r1] /* r2 = ..10 */ | ldrh r2, [r1] /* r2 = ..10 */ | ||||
ldr r3, [r1, #0x02] /* r3 = 5432 */ | ldr r3, [r1, #0x02] /* r3 = 5432 */ | ||||
ldr ip, [r1, #0x06] /* ip = 9876 */ | ldr ip, [r1, #0x06] /* ip = 9876 */ | ||||
ldrh r1, [r1, #0x0a] /* r1 = ..BA */ | ldrh r1, [r1, #0x0a] /* r1 = ..BA */ | ||||
strb r2, [r0] | strb r2, [r0] | ||||
mov r2, r2, lsr #8 /* r2 = ...1 */ | mov r2, r2, lsr #8 /* r2 = ...1 */ | ||||
orr r2, r2, r3, lsl #8 /* r2 = 4321 */ | orr r2, r2, r3, lsl #8 /* r2 = 4321 */ | ||||
mov r3, r3, lsr #24 /* r3 = ...5 */ | mov r3, r3, lsr #24 /* r3 = ...5 */ | ||||
orr r3, r3, ip, lsl #8 /* r3 = 8765 */ | orr r3, r3, ip, lsl #8 /* r3 = 8765 */ | ||||
mov ip, ip, lsr #24 /* ip = ...9 */ | mov ip, ip, lsr #24 /* ip = ...9 */ | ||||
orr ip, ip, r1, lsl #8 /* ip = .BA9 */ | orr ip, ip, r1, lsl #8 /* ip = .BA9 */ | ||||
mov r1, r1, lsr #8 /* r1 = ...B */ | mov r1, r1, lsr #8 /* r1 = ...B */ | ||||
str r2, [r0, #0x01] | str r2, [r0, #0x01] | ||||
str r3, [r0, #0x05] | str r3, [r0, #0x05] | ||||
strh ip, [r0, #0x09] | strh ip, [r0, #0x09] | ||||
strb r1, [r0, #0x0b] | strb r1, [r0, #0x0b] | ||||
#endif | |||||
bx lr | bx lr | ||||
LMEMCPY_C_PAD | LMEMCPY_C_PAD | ||||
/* | /* | ||||
* 1111: dst is 8-bit aligned (byte 3), src is 8-bit aligned (byte 3) | * 1111: dst is 8-bit aligned (byte 3), src is 8-bit aligned (byte 3) | ||||
*/ | */ | ||||
ldrb r2, [r1] | ldrb r2, [r1] | ||||
ldr r3, [r1, #0x01] | ldr r3, [r1, #0x01] | ||||
Show All 13 Lines |