diff options
| author | Warner Losh <imp@FreeBSD.org> | 2018-07-27 18:33:09 +0000 |
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 2018-07-27 18:33:09 +0000 |
| commit | 626930c2fd8a38debee0ea281da565f36ee15053 (patch) | |
| tree | ff4f59271a5d1bd0cc5cb4efb6f814e9769f9849 /lib/libc/arm | |
| parent | fb3f4b754943fd015272f4f40b134d0c17f522a5 (diff) | |
Notes
Diffstat (limited to 'lib/libc/arm')
| -rw-r--r-- | lib/libc/arm/string/memcpy.S | 4 | ||||
| -rw-r--r-- | lib/libc/arm/string/memcpy_xscale.S | 1788 |
2 files changed, 0 insertions, 1792 deletions
diff --git a/lib/libc/arm/string/memcpy.S b/lib/libc/arm/string/memcpy.S index 3628652681e0..150533b67112 100644 --- a/lib/libc/arm/string/memcpy.S +++ b/lib/libc/arm/string/memcpy.S @@ -2,8 +2,4 @@ #include <machine/asm.h> __FBSDID("$FreeBSD$"); -#if !defined(_ARM_ARCH_5E) || defined(_STANDALONE) #include "memcpy_arm.S" -#else -#include "memcpy_xscale.S" -#endif diff --git a/lib/libc/arm/string/memcpy_xscale.S b/lib/libc/arm/string/memcpy_xscale.S deleted file mode 100644 index ab01544fc176..000000000000 --- a/lib/libc/arm/string/memcpy_xscale.S +++ /dev/null @@ -1,1788 +0,0 @@ -/* $NetBSD: memcpy_xscale.S,v 1.1 2003/10/14 07:51:45 scw Exp $ */ - -/* - * Copyright 2003 Wasabi Systems, Inc. - * All rights reserved. - * - * Written by Steve C. Woodford for Wasabi Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed for the NetBSD Project by - * Wasabi Systems, Inc. - * 4. The name of Wasabi Systems, Inc. may not be used to endorse - * or promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include <machine/asm.h> -__FBSDID("$FreeBSD$"); - -.syntax unified - -/* LINTSTUB: Func: void *memcpy(void *dst, const void *src, size_t len) */ -ENTRY(memcpy) - pld [r1] - cmp r2, #0x0c - ble .Lmemcpy_short /* <= 12 bytes */ - mov r3, r0 /* We must not clobber r0 */ - - /* Word-align the destination buffer */ - ands ip, r3, #0x03 /* Already word aligned? */ - beq .Lmemcpy_wordaligned /* Yup */ - cmp ip, #0x02 - ldrb ip, [r1], #0x01 - sub r2, r2, #0x01 - strb ip, [r3], #0x01 - ldrble ip, [r1], #0x01 - suble r2, r2, #0x01 - strble ip, [r3], #0x01 - ldrblt ip, [r1], #0x01 - sublt r2, r2, #0x01 - strblt ip, [r3], #0x01 - - /* Destination buffer is now word aligned */ -.Lmemcpy_wordaligned: - ands ip, r1, #0x03 /* Is src also word-aligned? */ - bne .Lmemcpy_bad_align /* Nope. Things just got bad */ - - /* Quad-align the destination buffer */ - tst r3, #0x07 /* Already quad aligned? */ - ldrne ip, [r1], #0x04 - stmfd sp!, {r4-r9} /* Free up some registers */ - subne r2, r2, #0x04 - strne ip, [r3], #0x04 - - /* Destination buffer quad aligned, source is at least word aligned */ - subs r2, r2, #0x80 - blt .Lmemcpy_w_lessthan128 - - /* Copy 128 bytes at a time */ -.Lmemcpy_w_loop128: - ldr r4, [r1], #0x04 /* LD:00-03 */ - ldr r5, [r1], #0x04 /* LD:04-07 */ - pld [r1, #0x18] /* Prefetch 0x20 */ - ldr r6, [r1], #0x04 /* LD:08-0b */ - ldr r7, [r1], #0x04 /* LD:0c-0f */ - ldr r8, [r1], #0x04 /* LD:10-13 */ - ldr r9, [r1], #0x04 /* LD:14-17 */ - strd r4, [r3], #0x08 /* ST:00-07 */ - ldr r4, [r1], #0x04 /* LD:18-1b */ - ldr r5, [r1], #0x04 /* LD:1c-1f */ - strd r6, [r3], #0x08 /* ST:08-0f */ - ldr r6, [r1], #0x04 /* LD:20-23 */ - ldr r7, [r1], #0x04 /* LD:24-27 */ - pld [r1, #0x18] /* Prefetch 0x40 */ - strd r8, [r3], #0x08 /* ST:10-17 */ - ldr r8, [r1], #0x04 /* LD:28-2b */ - ldr r9, [r1], #0x04 /* LD:2c-2f */ - strd r4, [r3], #0x08 /* ST:18-1f */ - ldr r4, [r1], #0x04 /* LD:30-33 */ - ldr r5, [r1], #0x04 /* LD:34-37 */ - strd r6, [r3], #0x08 /* ST:20-27 */ - ldr r6, [r1], #0x04 /* LD:38-3b */ - ldr r7, [r1], #0x04 /* LD:3c-3f */ - strd r8, [r3], #0x08 /* ST:28-2f */ - ldr r8, [r1], #0x04 /* LD:40-43 */ - ldr r9, [r1], #0x04 /* LD:44-47 */ - pld [r1, #0x18] /* Prefetch 0x60 */ - strd r4, [r3], #0x08 /* ST:30-37 */ - ldr r4, [r1], #0x04 /* LD:48-4b */ - ldr r5, [r1], #0x04 /* LD:4c-4f */ - strd r6, [r3], #0x08 /* ST:38-3f */ - ldr r6, [r1], #0x04 /* LD:50-53 */ - ldr r7, [r1], #0x04 /* LD:54-57 */ - strd r8, [r3], #0x08 /* ST:40-47 */ - ldr r8, [r1], #0x04 /* LD:58-5b */ - ldr r9, [r1], #0x04 /* LD:5c-5f */ - strd r4, [r3], #0x08 /* ST:48-4f */ - ldr r4, [r1], #0x04 /* LD:60-63 */ - ldr r5, [r1], #0x04 /* LD:64-67 */ - pld [r1, #0x18] /* Prefetch 0x80 */ - strd r6, [r3], #0x08 /* ST:50-57 */ - ldr r6, [r1], #0x04 /* LD:68-6b */ - ldr r7, [r1], #0x04 /* LD:6c-6f */ - strd r8, [r3], #0x08 /* ST:58-5f */ - ldr r8, [r1], #0x04 /* LD:70-73 */ - ldr r9, [r1], #0x04 /* LD:74-77 */ - strd r4, [r3], #0x08 /* ST:60-67 */ - ldr r4, [r1], #0x04 /* LD:78-7b */ - ldr r5, [r1], #0x04 /* LD:7c-7f */ - strd r6, [r3], #0x08 /* ST:68-6f */ - strd r8, [r3], #0x08 /* ST:70-77 */ - subs r2, r2, #0x80 - strd r4, [r3], #0x08 /* ST:78-7f */ - bge .Lmemcpy_w_loop128 - -.Lmemcpy_w_lessthan128: - adds r2, r2, #0x80 /* Adjust for extra sub */ - ldmfdeq sp!, {r4-r9} - bxeq lr /* Return now if done */ - subs r2, r2, #0x20 - blt .Lmemcpy_w_lessthan32 - - /* Copy 32 bytes at a time */ -.Lmemcpy_w_loop32: - ldr r4, [r1], #0x04 - ldr r5, [r1], #0x04 - pld [r1, #0x18] - ldr r6, [r1], #0x04 - ldr r7, [r1], #0x04 - ldr r8, [r1], #0x04 - ldr r9, [r1], #0x04 - strd r4, [r3], #0x08 - ldr r4, [r1], #0x04 - ldr r5, [r1], #0x04 - strd r6, [r3], #0x08 - strd r8, [r3], #0x08 - subs r2, r2, #0x20 - strd r4, [r3], #0x08 - bge .Lmemcpy_w_loop32 - -.Lmemcpy_w_lessthan32: - adds r2, r2, #0x20 /* Adjust for extra sub */ - ldmfdeq sp!, {r4-r9} - bxeq lr /* Return now if done */ - - and r4, r2, #0x18 - rsbs r4, r4, #0x18 - addne pc, pc, r4, lsl #1 - nop - - /* At least 24 bytes remaining */ - ldr r4, [r1], #0x04 - ldr r5, [r1], #0x04 - sub r2, r2, #0x08 - strd r4, [r3], #0x08 - - /* At least 16 bytes remaining */ - ldr r4, [r1], #0x04 - ldr r5, [r1], #0x04 - sub r2, r2, #0x08 - strd r4, [r3], #0x08 - - /* At least 8 bytes remaining */ - ldr r4, [r1], #0x04 - ldr r5, [r1], #0x04 - subs r2, r2, #0x08 - strd r4, [r3], #0x08 - - /* Less than 8 bytes remaining */ - ldmfd sp!, {r4-r9} - bxeq lr /* Return now if done */ - subs r2, r2, #0x04 - ldrge ip, [r1], #0x04 - strge ip, [r3], #0x04 - bxeq lr /* Return now if done */ - addlt r2, r2, #0x04 - ldrb ip, [r1], #0x01 - cmp r2, #0x02 - ldrbge r2, [r1], #0x01 - strb ip, [r3], #0x01 - ldrbgt ip, [r1] - strbge r2, [r3], #0x01 - strbgt ip, [r3] - bx lr - - -/* - * At this point, it has not been possible to word align both buffers. - * The destination buffer is word aligned, but the source buffer is not. - */ -.Lmemcpy_bad_align: - stmfd sp!, {r4-r7} - bic r1, r1, #0x03 - cmp ip, #2 - ldr ip, [r1], #0x04 - bgt .Lmemcpy_bad3 - beq .Lmemcpy_bad2 - b .Lmemcpy_bad1 - -.Lmemcpy_bad1_loop16: -#ifdef __ARMEB__ - mov r4, ip, lsl #8 -#else - mov r4, ip, lsr #8 -#endif - ldr r5, [r1], #0x04 - pld [r1, #0x018] - ldr r6, [r1], #0x04 - ldr r7, [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 - mov r5, r5, lsr #8 - orr r5, r5, r6, lsl #24 - mov r6, r6, lsr #8 - orr r6, r6, r7, lsl #24 - mov r7, r7, lsr #8 - orr r7, r7, ip, lsl #24 -#endif - str r4, [r3], #0x04 - str r5, [r3], #0x04 - str r6, [r3], #0x04 - str r7, [r3], #0x04 -.Lmemcpy_bad1: - subs r2, r2, #0x10 - bge .Lmemcpy_bad1_loop16 - - adds r2, r2, #0x10 - ldmfdeq sp!, {r4-r7} - bxeq lr /* Return now if done */ - subs r2, r2, #0x04 - sublt r1, r1, #0x03 - blt .Lmemcpy_bad_done - -.Lmemcpy_bad1_loop4: -#ifdef __ARMEB__ - mov r4, ip, lsl #8 -#else - mov r4, ip, lsr #8 -#endif - ldr ip, [r1], #0x04 - subs r2, r2, #0x04 -#ifdef __ARMEB__ - orr r4, r4, ip, lsr #24 -#else - orr r4, r4, ip, lsl #24 -#endif - str r4, [r3], #0x04 - bge .Lmemcpy_bad1_loop4 - sub r1, r1, #0x03 - b .Lmemcpy_bad_done - -.Lmemcpy_bad2_loop16: -#ifdef __ARMEB__ - mov r4, ip, lsl #16 -#else - mov r4, ip, lsr #16 -#endif - ldr r5, [r1], #0x04 - pld [r1, #0x018] - ldr r6, [r1], #0x04 - ldr r7, [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 - mov r5, r5, lsr #16 - orr r5, r5, r6, lsl #16 - mov r6, r6, lsr #16 - orr r6, r6, r7, lsl #16 - mov r7, r7, lsr #16 - orr r7, r7, ip, lsl #16 -#endif - str r4, [r3], #0x04 - str r5, [r3], #0x04 - str r6, [r3], #0x04 - str r7, [r3], #0x04 -.Lmemcpy_bad2: - subs r2, r2, #0x10 - bge .Lmemcpy_bad2_loop16 - - adds r2, r2, #0x10 - ldmfdeq sp!, {r4-r7} - bxeq lr /* Return now if done */ - subs r2, r2, #0x04 - sublt r1, r1, #0x02 - blt .Lmemcpy_bad_done - -.Lmemcpy_bad2_loop4: -#ifdef __ARMEB__ - mov r4, ip, lsl #16 -#else - mov r4, ip, lsr #16 -#endif - ldr ip, [r1], #0x04 - subs r2, r2, #0x04 -#ifdef __ARMEB__ - orr r4, r4, ip, lsr #16 -#else - orr r4, r4, ip, lsl #16 -#endif - str r4, [r3], #0x04 - bge .Lmemcpy_bad2_loop4 - sub r1, r1, #0x02 - b .Lmemcpy_bad_done - -.Lmemcpy_bad3_loop16: -#ifdef __ARMEB__ - mov r4, ip, lsl #24 -#else - mov r4, ip, lsr #24 -#endif - ldr r5, [r1], #0x04 - pld [r1, #0x018] - ldr r6, [r1], #0x04 - ldr r7, [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 - mov r5, r5, lsr #24 - orr r5, r5, r6, lsl #8 - mov r6, r6, lsr #24 - orr r6, r6, r7, lsl #8 - mov r7, r7, lsr #24 - orr r7, r7, ip, lsl #8 -#endif - str r4, [r3], #0x04 - str r5, [r3], #0x04 - str r6, [r3], #0x04 - str r7, [r3], #0x04 -.Lmemcpy_bad3: - subs r2, r2, #0x10 - bge .Lmemcpy_bad3_loop16 - - adds r2, r2, #0x10 - ldmfdeq sp!, {r4-r7} - bxeq lr /* Return now if done */ - subs r2, r2, #0x04 - sublt r1, r1, #0x01 - blt .Lmemcpy_bad_done - -.Lmemcpy_bad3_loop4: -#ifdef __ARMEB__ - mov r4, ip, lsl #24 -#else - mov r4, ip, lsr #24 -#endif - ldr ip, [r1], #0x04 - subs r2, r2, #0x04 -#ifdef __ARMEB__ - orr r4, r4, ip, lsr #8 -#else - orr r4, r4, ip, lsl #8 -#endif - str r4, [r3], #0x04 - bge .Lmemcpy_bad3_loop4 - sub r1, r1, #0x01 - -.Lmemcpy_bad_done: - ldmfd sp!, {r4-r7} - adds r2, r2, #0x04 - bxeq lr - ldrb ip, [r1], #0x01 - cmp r2, #0x02 - ldrbge r2, [r1], #0x01 - strb ip, [r3], #0x01 - ldrbgt ip, [r1] - strbge r2, [r3], #0x01 - strbgt ip, [r3] - bx lr - - -/* - * Handle short copies (less than 16 bytes), possibly misaligned. - * Some of these are *very* common, thanks to the network stack, - * and so are handled specially. - */ -.Lmemcpy_short: -#ifndef _STANDALONE - add pc, pc, r2, lsl #2 - nop - bx lr /* 0x00 */ - b .Lmemcpy_bytewise /* 0x01 */ - b .Lmemcpy_bytewise /* 0x02 */ - b .Lmemcpy_bytewise /* 0x03 */ - b .Lmemcpy_4 /* 0x04 */ - b .Lmemcpy_bytewise /* 0x05 */ - b .Lmemcpy_6 /* 0x06 */ - b .Lmemcpy_bytewise /* 0x07 */ - b .Lmemcpy_8 /* 0x08 */ - b .Lmemcpy_bytewise /* 0x09 */ - b .Lmemcpy_bytewise /* 0x0a */ - b .Lmemcpy_bytewise /* 0x0b */ - b .Lmemcpy_c /* 0x0c */ -#endif -.Lmemcpy_bytewise: - mov r3, r0 /* We must not clobber r0 */ - ldrb ip, [r1], #0x01 -1: subs r2, r2, #0x01 - strb ip, [r3], #0x01 - ldrbne ip, [r1], #0x01 - bne 1b - bx lr - -#ifndef _STANDALONE -/****************************************************************************** - * Special case for 4 byte copies - */ -#define LMEMCPY_4_LOG2 6 /* 64 bytes */ -#define LMEMCPY_4_PAD .align LMEMCPY_4_LOG2 - LMEMCPY_4_PAD -.Lmemcpy_4: - and r2, r1, #0x03 - orr r2, r2, r0, lsl #2 - ands r2, r2, #0x0f - sub r3, pc, #0x14 - addne pc, r3, r2, lsl #LMEMCPY_4_LOG2 - -/* - * 0000: dst is 32-bit aligned, src is 32-bit aligned - */ - ldr r2, [r1] - str r2, [r0] - bx lr - LMEMCPY_4_PAD - -/* - * 0001: dst is 32-bit aligned, src is 8-bit aligned - */ - ldr r3, [r1, #-1] /* BE:r3 = x012 LE:r3 = 210x */ - 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 */ - orr r3, r3, r2, lsl #24 /* r3 = 3210 */ -#endif - str r3, [r0] - bx lr - LMEMCPY_4_PAD - -/* - * 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 r2, [r1] -#endif - orr r3, r2, r3, lsl #16 - str r3, [r0] - bx lr - LMEMCPY_4_PAD - -/* - * 0011: dst is 32-bit aligned, src is 8-bit aligned - */ - ldr r3, [r1, #-3] /* BE:r3 = xxx0 LE:r3 = 0xxx */ - 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 */ - orr r3, r3, r2, lsl #8 /* r3 = 3210 */ -#endif - str r3, [r0] - bx lr - LMEMCPY_4_PAD - -/* - * 0100: dst is 8-bit aligned, src is 32-bit aligned - */ - 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] - mov r3, r2, lsr #8 - mov r1, r2, lsr #24 - strb r1, [r0, #0x03] -#endif - strh r3, [r0, #0x01] - bx lr - LMEMCPY_4_PAD - -/* - * 0101: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldrh r3, [r1, #0x01] - ldrb r1, [r1, #0x03] - strb r2, [r0] - strh r3, [r0, #0x01] - strb r1, [r0, #0x03] - bx lr - LMEMCPY_4_PAD - -/* - * 0110: dst is 8-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ - 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] - mov r2, r2, lsr #8 /* r2 = ...1 */ - orr r2, r2, r3, lsl #8 /* r2 = .321 */ - mov r3, r3, lsr #8 /* r3 = ...3 */ -#endif - strh r2, [r0, #0x01] - strb r3, [r0, #0x03] - bx lr - LMEMCPY_4_PAD - -/* - * 0111: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldrh r3, [r1, #0x01] - ldrb r1, [r1, #0x03] - strb r2, [r0] - strh r3, [r0, #0x01] - strb r1, [r0, #0x03] - bx lr - LMEMCPY_4_PAD - -/* - * 1000: dst is 16-bit aligned, src is 32-bit aligned - */ - ldr r2, [r1] -#ifdef __ARMEB__ - strh r2, [r0, #0x02] - mov r3, r2, lsr #16 - strh r3, [r0] -#else - strh r2, [r0] - mov r3, r2, lsr #16 - strh r3, [r0, #0x02] -#endif - bx lr - LMEMCPY_4_PAD - -/* - * 1001: dst is 16-bit aligned, src is 8-bit aligned - */ - ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ - ldr r3, [r1, #3] /* BE:r3 = 3xxx LE:r3 = xxx3 */ - mov r1, r2, lsr #8 /* BE:r1 = .x01 LE:r1 = .210 */ - 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 */ - orr r2, r2, r3, lsl #8 /* r2 = xx32 */ -#endif - strh r2, [r0, #0x02] - bx lr - LMEMCPY_4_PAD - -/* - * 1010: dst is 16-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] - ldrh r3, [r1, #0x02] - strh r2, [r0] - strh r3, [r0, #0x02] - bx lr - LMEMCPY_4_PAD - -/* - * 1011: dst is 16-bit aligned, src is 8-bit aligned - */ - ldr r3, [r1, #1] /* BE:r3 = 123x LE:r3 = x321 */ - ldr r2, [r1, #-3] /* BE:r2 = xxx0 LE:r2 = 0xxx */ - mov r1, r3, lsr #8 /* BE:r1 = .123 LE:r1 = .x32 */ - 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. */ - orr r3, r3, r2, lsr #24 /* r3 = 3210 */ -#endif - strh r3, [r0] - bx lr - LMEMCPY_4_PAD - -/* - * 1100: dst is 8-bit aligned, src is 32-bit aligned - */ - 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] - mov r3, r2, lsr #8 - mov r1, r2, lsr #24 - strh r3, [r0, #0x01] - strb r1, [r0, #0x03] -#endif - bx lr - LMEMCPY_4_PAD - -/* - * 1101: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldrh r3, [r1, #0x01] - ldrb r1, [r1, #0x03] - strb r2, [r0] - strh r3, [r0, #0x01] - strb r1, [r0, #0x03] - bx lr - LMEMCPY_4_PAD - -/* - * 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 */ - 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 */ - strb r2, [r0] - mov r2, r2, lsr #8 /* r2 = ...1 */ - orr r2, r2, r3, lsl #8 /* r2 = .321 */ - strh r2, [r0, #0x01] - mov r3, r3, lsr #8 /* r3 = ...3 */ - strb r3, [r0, #0x03] -#endif - bx lr - LMEMCPY_4_PAD - -/* - * 1111: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldrh r3, [r1, #0x01] - ldrb r1, [r1, #0x03] - strb r2, [r0] - strh r3, [r0, #0x01] - strb r1, [r0, #0x03] - bx lr - LMEMCPY_4_PAD - - -/****************************************************************************** - * Special case for 6 byte copies - */ -#define LMEMCPY_6_LOG2 6 /* 64 bytes */ -#define LMEMCPY_6_PAD .align LMEMCPY_6_LOG2 - LMEMCPY_6_PAD -.Lmemcpy_6: - and r2, r1, #0x03 - orr r2, r2, r0, lsl #2 - ands r2, r2, #0x0f - sub r3, pc, #0x14 - addne pc, r3, r2, lsl #LMEMCPY_6_LOG2 - -/* - * 0000: dst is 32-bit aligned, src is 32-bit aligned - */ - ldr r2, [r1] - ldrh r3, [r1, #0x04] - str r2, [r0] - strh r3, [r0, #0x04] - bx lr - LMEMCPY_6_PAD - -/* - * 0001: dst is 32-bit aligned, src is 8-bit aligned - */ - ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ - 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 */ - orr r2, r2, r3, lsl #24 /* r2 = 3210 */ -#endif - mov r3, r3, lsr #8 /* BE:r3 = .345 LE:r3 = .x54 */ - str r2, [r0] - strh r3, [r0, #0x04] - bx lr - LMEMCPY_6_PAD - -/* - * 0010: dst is 32-bit aligned, src is 16-bit aligned - */ - ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ - 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 */ - orr r2, r2, r3, lsl #16 /* r2 = 3210 */ - str r2, [r0] - strh r1, [r0, #0x04] -#endif - bx lr - LMEMCPY_6_PAD - -/* - * 0011: dst is 32-bit aligned, src is 8-bit aligned - */ - ldr r2, [r1, #-3] /* BE:r2 = xxx0 LE:r2 = 0xxx */ - ldr r3, [r1, #1] /* BE:r3 = 1234 LE:r3 = 4321 */ - 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 */ - orr r2, r2, r3, lsl #8 /* r2 = 3210 */ - mov r1, r1, lsl #8 /* r1 = xx5. */ - orr r1, r1, r3, lsr #24 /* r1 = xx54 */ -#endif - str r2, [r0] - strh r1, [r0, #0x04] - bx lr - LMEMCPY_6_PAD - -/* - * 0100: dst is 8-bit aligned, src is 32-bit aligned - */ - ldr r3, [r1] /* BE:r3 = 0123 LE:r3 = 3210 */ - ldrh r2, [r1, #0x04] /* BE:r2 = ..45 LE:r2 = ..54 */ - mov r1, r3, lsr #8 /* BE:r1 = .012 LE:r1 = .321 */ - 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] - mov r3, r3, lsr #24 /* r3 = ...3 */ - orr r3, r3, r2, lsl #8 /* r3 = .543 */ - mov r2, r2, lsr #8 /* r2 = ...5 */ -#endif - strh r3, [r0, #0x03] - strb r2, [r0, #0x05] - bx lr - LMEMCPY_6_PAD - -/* - * 0101: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldrh r3, [r1, #0x01] - ldrh ip, [r1, #0x03] - ldrb r1, [r1, #0x05] - strb r2, [r0] - strh r3, [r0, #0x01] - strh ip, [r0, #0x03] - strb r1, [r0, #0x05] - bx lr - LMEMCPY_6_PAD - -/* - * 0110: dst is 8-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ - 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] - mov r3, r1, lsr #24 - strb r3, [r0, #0x05] - mov r3, r1, lsr #8 /* r3 = .543 */ - strh r3, [r0, #0x03] - mov r3, r2, lsr #8 /* r3 = ...1 */ - orr r3, r3, r1, lsl #8 /* r3 = 4321 */ - strh r3, [r0, #0x01] -#endif - bx lr - LMEMCPY_6_PAD - -/* - * 0111: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldrh r3, [r1, #0x01] - ldrh ip, [r1, #0x03] - ldrb r1, [r1, #0x05] - strb r2, [r0] - strh r3, [r0, #0x01] - strh ip, [r0, #0x03] - strb r1, [r0, #0x05] - bx lr - LMEMCPY_6_PAD - -/* - * 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 */ - ldr r3, [r1] /* r3 = 3210 */ - mov r2, r2, lsl #16 /* r2 = 54.. */ - orr r2, r2, r3, lsr #16 /* r2 = 5432 */ - strh r3, [r0] - str r2, [r0, #0x02] -#endif - bx lr - LMEMCPY_6_PAD - -/* - * 1001: dst is 16-bit aligned, src is 8-bit aligned - */ - ldr r3, [r1, #-1] /* BE:r3 = x012 LE:r3 = 210x */ - ldr r2, [r1, #3] /* BE:r2 = 345x LE:r2 = x543 */ - 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. */ - orr r2, r2, r3, lsr #24 /* r2 = 5432 */ -#endif - strh r1, [r0] - str r2, [r0, #0x02] - bx lr - LMEMCPY_6_PAD - -/* - * 1010: dst is 16-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] - ldr r3, [r1, #0x02] - strh r2, [r0] - str r3, [r0, #0x02] - bx lr - LMEMCPY_6_PAD - -/* - * 1011: dst is 16-bit aligned, src is 8-bit aligned - */ - ldrb r3, [r1] /* r3 = ...0 */ - ldr r2, [r1, #0x01] /* BE:r2 = 1234 LE:r2 = 4321 */ - 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 */ - mov r1, r1, lsl #24 /* r1 = 5... */ - orr r1, r1, r2, lsr #8 /* r1 = 5432 */ -#endif - strh r3, [r0] - str r1, [r0, #0x02] - bx lr - LMEMCPY_6_PAD - -/* - * 1100: dst is 8-bit aligned, src is 32-bit aligned - */ - ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ - 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] - mov r2, r2, lsr #8 /* r2 = .321 */ - orr r2, r2, r1, lsl #24 /* r2 = 4321 */ - mov r1, r1, lsr #8 /* r1 = ...5 */ -#endif - str r2, [r0, #0x01] - strb r1, [r0, #0x05] - bx lr - LMEMCPY_6_PAD - -/* - * 1101: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldrh r3, [r1, #0x01] - ldrh ip, [r1, #0x03] - ldrb r1, [r1, #0x05] - strb r2, [r0] - strh r3, [r0, #0x01] - strh ip, [r0, #0x03] - strb r1, [r0, #0x05] - bx lr - LMEMCPY_6_PAD - -/* - * 1110: dst is 8-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ - 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] - mov r2, r2, lsr #8 /* r2 = ...1 */ - orr r2, r2, r1, lsl #8 /* r2 = 4321 */ - mov r1, r1, lsr #24 /* r1 = ...5 */ -#endif - str r2, [r0, #0x01] - strb r1, [r0, #0x05] - bx lr - LMEMCPY_6_PAD - -/* - * 1111: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldr r3, [r1, #0x01] - ldrb r1, [r1, #0x05] - strb r2, [r0] - str r3, [r0, #0x01] - strb r1, [r0, #0x05] - bx lr - LMEMCPY_6_PAD - - -/****************************************************************************** - * Special case for 8 byte copies - */ -#define LMEMCPY_8_LOG2 6 /* 64 bytes */ -#define LMEMCPY_8_PAD .align LMEMCPY_8_LOG2 - LMEMCPY_8_PAD -.Lmemcpy_8: - and r2, r1, #0x03 - orr r2, r2, r0, lsl #2 - ands r2, r2, #0x0f - sub r3, pc, #0x14 - addne pc, r3, r2, lsl #LMEMCPY_8_LOG2 - -/* - * 0000: dst is 32-bit aligned, src is 32-bit aligned - */ - ldr r2, [r1] - ldr r3, [r1, #0x04] - str r2, [r0] - str r3, [r0, #0x04] - bx lr - LMEMCPY_8_PAD - -/* - * 0001: dst is 32-bit aligned, src is 8-bit aligned - */ - ldr r3, [r1, #-1] /* BE:r3 = x012 LE:r3 = 210x */ - ldr r2, [r1, #0x03] /* BE:r2 = 3456 LE:r2 = 6543 */ - 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 */ - orr r3, r3, r2, lsl #24 /* r3 = 3210 */ - mov r1, r1, lsl #24 /* r1 = 7... */ - orr r2, r1, r2, lsr #8 /* r2 = 7654 */ -#endif - str r3, [r0] - str r2, [r0, #0x04] - bx lr - LMEMCPY_8_PAD - -/* - * 0010: dst is 32-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ - ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ - 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 */ - mov r3, r3, lsr #16 /* r3 = ..54 */ - orr r3, r3, r1, lsl #16 /* r3 = 7654 */ -#endif - str r2, [r0] - str r3, [r0, #0x04] - bx lr - LMEMCPY_8_PAD - -/* - * 0011: dst is 32-bit aligned, src is 8-bit aligned - */ - ldrb r3, [r1] /* r3 = ...0 */ - ldr r2, [r1, #0x01] /* BE:r2 = 1234 LE:r2 = 4321 */ - 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 */ - mov r2, r2, lsr #24 /* r2 = ...4 */ - orr r2, r2, r1, lsl #8 /* r2 = 7654 */ -#endif - str r3, [r0] - str r2, [r0, #0x04] - bx lr - LMEMCPY_8_PAD - -/* - * 0100: dst is 8-bit aligned, src is 32-bit aligned - */ - ldr r3, [r1] /* BE:r3 = 0123 LE:r3 = 3210 */ - 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] - mov r1, r2, lsr #24 /* r1 = ...7 */ - strb r1, [r0, #0x07] - mov r1, r3, lsr #8 /* r1 = .321 */ - mov r3, r3, lsr #24 /* r3 = ...3 */ - orr r3, r3, r2, lsl #8 /* r3 = 6543 */ -#endif - strh r1, [r0, #0x01] - str r3, [r0, #0x03] - bx lr - LMEMCPY_8_PAD - -/* - * 0101: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldrh r3, [r1, #0x01] - ldr ip, [r1, #0x03] - ldrb r1, [r1, #0x07] - strb r2, [r0] - strh r3, [r0, #0x01] - str ip, [r0, #0x03] - strb r1, [r0, #0x07] - bx lr - LMEMCPY_8_PAD - -/* - * 0110: dst is 8-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ - ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ - 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 */ - mov ip, r1, lsr #8 /* ip = ...7 */ - strb ip, [r0, #0x07] /* 7 */ - mov ip, r2, lsr #8 /* ip = ...1 */ - orr ip, ip, r3, lsl #8 /* ip = 4321 */ - mov r3, r3, lsr #8 /* r3 = .543 */ - orr r3, r3, r1, lsl #24 /* r3 = 6543 */ -#endif - strh ip, [r0, #0x01] - str r3, [r0, #0x03] - bx lr - LMEMCPY_8_PAD - -/* - * 0111: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r3, [r1] /* r3 = ...0 */ - ldr ip, [r1, #0x01] /* BE:ip = 1234 LE:ip = 4321 */ - ldrh r2, [r1, #0x05] /* BE:r2 = ..56 LE:r2 = ..65 */ - ldrb r1, [r1, #0x07] /* r1 = ...7 */ - strb r3, [r0] - 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] - orr r2, r3, r2, lsl #16 /* r2 = 6543 */ -#endif - str r2, [r0, #0x03] - strb r1, [r0, #0x07] - bx lr - LMEMCPY_8_PAD - -/* - * 1000: dst is 16-bit aligned, src is 32-bit aligned - */ - ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ - ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ - 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] - orr r2, r1, r3, lsl #16 /* r2 = 5432 */ - mov r3, r3, lsr #16 /* r3 = ..76 */ -#endif - str r2, [r0, #0x02] - strh r3, [r0, #0x06] - bx lr - LMEMCPY_8_PAD - -/* - * 1001: dst is 16-bit aligned, src is 8-bit aligned - */ - ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ - ldr r3, [r1, #0x03] /* BE:r3 = 3456 LE:r3 = 6543 */ - ldrb ip, [r1, #0x07] /* ip = ...7 */ - mov r1, r2, lsr #8 /* BE:r1 = .x01 LE:r1 = .210 */ - 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 */ - orr r1, r1, r3, lsl #8 /* r1 = 5432 */ - mov r3, r3, lsr #24 /* r3 = ...6 */ - orr r3, r3, ip, lsl #8 /* r3 = ..76 */ -#endif - str r1, [r0, #0x02] - strh r3, [r0, #0x06] - bx lr - LMEMCPY_8_PAD - -/* - * 1010: dst is 16-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] - ldr ip, [r1, #0x02] - ldrh r3, [r1, #0x06] - strh r2, [r0] - str ip, [r0, #0x02] - strh r3, [r0, #0x06] - bx lr - LMEMCPY_8_PAD - -/* - * 1011: dst is 16-bit aligned, src is 8-bit aligned - */ - ldr r3, [r1, #0x05] /* BE:r3 = 567x LE:r3 = x765 */ - ldr r2, [r1, #0x01] /* BE:r2 = 1234 LE:r2 = 4321 */ - ldrb ip, [r1] /* ip = ...0 */ - mov r1, r3, lsr #8 /* BE:r1 = .567 LE:r1 = .x76 */ - 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... */ - orr r3, r3, r2, lsr #8 /* r3 = 5432 */ - orr r2, ip, r2, lsl #8 /* r2 = 3210 */ -#endif - str r3, [r0, #0x02] - strh r2, [r0] - bx lr - LMEMCPY_8_PAD - -/* - * 1100: dst is 8-bit aligned, src is 32-bit aligned - */ - ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ - ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ - mov r1, r3, lsr #8 /* BE:r1 = .456 LE:r1 = .765 */ - 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] - mov r1, r3, lsr #24 /* r1 = ...7 */ - strb r1, [r0, #0x07] - mov r2, r2, lsr #8 /* r2 = .321 */ - orr r2, r2, r3, lsl #24 /* r2 = 4321 */ - str r2, [r0, #0x01] -#endif - bx lr - LMEMCPY_8_PAD - -/* - * 1101: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r3, [r1] /* r3 = ...0 */ - ldrh r2, [r1, #0x01] /* BE:r2 = ..12 LE:r2 = ..21 */ - ldr ip, [r1, #0x03] /* BE:ip = 3456 LE:ip = 6543 */ - ldrb r1, [r1, #0x07] /* r1 = ...7 */ - strb r3, [r0] - 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] - orr r2, r2, ip, lsl #16 /* r2 = 4321 */ -#endif - str r2, [r0, #0x01] - strb r1, [r0, #0x07] - bx lr - LMEMCPY_8_PAD - -/* - * 1110: dst is 8-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ - ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ - 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] - mov ip, r2, lsr #8 /* ip = ...1 */ - orr ip, ip, r3, lsl #8 /* ip = 4321 */ - mov r2, r1, lsr #8 /* r2 = ...7 */ - strb r2, [r0, #0x07] - mov r1, r1, lsl #8 /* r1 = .76. */ - orr r1, r1, r3, lsr #24 /* r1 = .765 */ -#endif - str ip, [r0, #0x01] - strh r1, [r0, #0x05] - bx lr - LMEMCPY_8_PAD - -/* - * 1111: dst is 8-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] - ldr ip, [r1, #0x01] - ldrh r3, [r1, #0x05] - ldrb r1, [r1, #0x07] - strb r2, [r0] - str ip, [r0, #0x01] - strh r3, [r0, #0x05] - strb r1, [r0, #0x07] - bx lr - LMEMCPY_8_PAD - -/****************************************************************************** - * Special case for 12 byte copies - */ -#define LMEMCPY_C_LOG2 7 /* 128 bytes */ -#define LMEMCPY_C_PAD .align LMEMCPY_C_LOG2 - LMEMCPY_C_PAD -.Lmemcpy_c: - and r2, r1, #0x03 - orr r2, r2, r0, lsl #2 - ands r2, r2, #0x0f - sub r3, pc, #0x14 - addne pc, r3, r2, lsl #LMEMCPY_C_LOG2 - -/* - * 0000: dst is 32-bit aligned, src is 32-bit aligned - */ - ldr r2, [r1] - ldr r3, [r1, #0x04] - ldr r1, [r1, #0x08] - str r2, [r0] - str r3, [r0, #0x04] - str r1, [r0, #0x08] - bx lr - LMEMCPY_C_PAD - -/* - * 0001: dst is 32-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1, #0xb] /* r2 = ...B */ - ldr ip, [r1, #0x07] /* BE:ip = 789A LE:ip = A987 */ - ldr r3, [r1, #0x03] /* BE:r3 = 3456 LE:r3 = 6543 */ - 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... */ - orr r2, r2, ip, lsr #8 /* r2 = BA98 */ - str r2, [r0, #0x08] - mov r2, ip, lsl #24 /* r2 = 7... */ - orr r2, r2, r3, lsr #8 /* r2 = 7654 */ - mov r1, r1, lsr #8 /* r1 = .210 */ - orr r1, r1, r3, lsl #24 /* r1 = 3210 */ -#endif - str r2, [r0, #0x04] - str r1, [r0] - bx lr - LMEMCPY_C_PAD - -/* - * 0010: dst is 32-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ - ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ - ldr ip, [r1, #0x06] /* BE:ip = 6789 LE:ip = 9876 */ - 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 */ - str r2, [r0] - mov r3, r3, lsr #16 /* r3 = ..54 */ - orr r3, r3, ip, lsl #16 /* r3 = 7654 */ - mov r1, r1, lsl #16 /* r1 = BA.. */ - orr r1, r1, ip, lsr #16 /* r1 = BA98 */ -#endif - str r3, [r0, #0x04] - str r1, [r0, #0x08] - bx lr - LMEMCPY_C_PAD - -/* - * 0011: dst is 32-bit aligned, src is 8-bit aligned - */ - ldrb r2, [r1] /* r2 = ...0 */ - ldr r3, [r1, #0x01] /* BE:r3 = 1234 LE:r3 = 4321 */ - ldr ip, [r1, #0x05] /* BE:ip = 5678 LE:ip = 8765 */ - 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 */ - str r2, [r0] - mov r3, r3, lsr #24 /* r3 = ...4 */ - orr r3, r3, ip, lsl #8 /* r3 = 7654 */ - mov r1, r1, lsl #8 /* r1 = BA9. */ - orr r1, r1, ip, lsr #24 /* r1 = BA98 */ -#endif - str r3, [r0, #0x04] - str r1, [r0, #0x08] - bx lr - LMEMCPY_C_PAD - -/* - * 0100: dst is 8-bit aligned (byte 1), src is 32-bit aligned - */ - ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ - ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ - ldr ip, [r1, #0x08] /* BE:ip = 89AB LE:ip = BA98 */ - mov r1, r2, lsr #8 /* BE:r1 = .012 LE:r1 = .321 */ - 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] - mov r1, r2, lsr #24 /* r1 = ...3 */ - orr r2, r1, r3, lsl #8 /* r1 = 6543 */ - mov r1, r3, lsr #24 /* r1 = ...7 */ - orr r1, r1, ip, lsl #8 /* r1 = A987 */ - mov ip, ip, lsr #24 /* ip = ...B */ -#endif - str r2, [r0, #0x03] - str r1, [r0, #0x07] - strb ip, [r0, #0x0b] - bx lr - LMEMCPY_C_PAD - -/* - * 0101: dst is 8-bit aligned (byte 1), src is 8-bit aligned (byte 1) - */ - ldrb r2, [r1] - ldrh r3, [r1, #0x01] - ldr ip, [r1, #0x03] - strb r2, [r0] - ldr r2, [r1, #0x07] - ldrb r1, [r1, #0x0b] - strh r3, [r0, #0x01] - str ip, [r0, #0x03] - str r2, [r0, #0x07] - strb r1, [r0, #0x0b] - bx lr - LMEMCPY_C_PAD - -/* - * 0110: dst is 8-bit aligned (byte 1), src is 16-bit aligned - */ - ldrh r2, [r1] /* BE:r2 = ..01 LE:r2 = ..10 */ - ldr r3, [r1, #0x02] /* BE:r3 = 2345 LE:r3 = 5432 */ - ldr ip, [r1, #0x06] /* BE:ip = 6789 LE:ip = 9876 */ - ldrh r1, [r1, #0x0a] /* BE:r1 = ..AB LE:r1 = ..BA */ -#ifdef __ARMEB__ - mov r2, r2, ror #8 /* r2 = 1..0 */ - 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 */ - orr r2, r2, r3, lsl #8 /* r2 = 4321 */ - strh r2, [r0, #0x01] - mov r2, r3, lsr #8 /* r2 = .543 */ - orr r3, r2, ip, lsl #24 /* r3 = 6543 */ - mov r2, ip, lsr #8 /* r2 = .987 */ - orr r2, r2, r1, lsl #24 /* r2 = A987 */ - mov r1, r1, lsr #8 /* r1 = ...B */ -#endif - str r3, [r0, #0x03] - str r2, [r0, #0x07] - strb r1, [r0, #0x0b] - bx lr - LMEMCPY_C_PAD - -/* - * 0111: dst is 8-bit aligned (byte 1), src is 8-bit aligned (byte 3) - */ - ldrb r2, [r1] - ldr r3, [r1, #0x01] /* BE:r3 = 1234 LE:r3 = 4321 */ - ldr ip, [r1, #0x05] /* BE:ip = 5678 LE:ip = 8765 */ - ldr r1, [r1, #0x09] /* BE:r1 = 9ABx LE:r1 = xBA9 */ - 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] - mov r3, r3, lsr #16 /* r3 = ..43 */ - orr r3, r3, ip, lsl #16 /* r3 = 6543 */ - mov ip, ip, lsr #16 /* ip = ..87 */ - orr ip, ip, r1, lsl #16 /* ip = A987 */ - mov r1, r1, lsr #16 /* r1 = ..xB */ -#endif - str r3, [r0, #0x03] - str ip, [r0, #0x07] - strb r1, [r0, #0x0b] - bx lr - LMEMCPY_C_PAD - -/* - * 1000: dst is 16-bit aligned, src is 32-bit aligned - */ - ldr ip, [r1] /* BE:ip = 0123 LE:ip = 3210 */ - ldr r3, [r1, #0x04] /* BE:r3 = 4567 LE:r3 = 7654 */ - ldr r2, [r1, #0x08] /* BE:r2 = 89AB LE:r2 = BA98 */ - 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] - orr r1, r1, r3, lsl #16 /* r1 = 5432 */ - mov r3, r3, lsr #16 /* r3 = ..76 */ - orr r3, r3, r2, lsl #16 /* r3 = 9876 */ - mov r2, r2, lsr #16 /* r2 = ..BA */ -#endif - str r1, [r0, #0x02] - str r3, [r0, #0x06] - strh r2, [r0, #0x0a] - bx lr - LMEMCPY_C_PAD - -/* - * 1001: dst is 16-bit aligned, src is 8-bit aligned (byte 1) - */ - ldr r2, [r1, #-1] /* BE:r2 = x012 LE:r2 = 210x */ - ldr r3, [r1, #0x03] /* BE:r3 = 3456 LE:r3 = 6543 */ - mov ip, r2, lsr #8 /* BE:ip = .x01 LE:ip = .210 */ - strh ip, [r0] - ldr ip, [r1, #0x07] /* BE:ip = 789A LE:ip = A987 */ - 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 */ - orr r2, r2, r3, lsl #8 /* r2 = 5432 */ - mov r3, r3, lsr #24 /* r3 = ...6 */ - orr r3, r3, ip, lsl #8 /* r3 = 9876 */ - mov r1, r1, lsl #8 /* r1 = ..B. */ - orr r1, r1, ip, lsr #24 /* r1 = ..BA */ -#endif - str r2, [r0, #0x02] - str r3, [r0, #0x06] - strh r1, [r0, #0x0a] - bx lr - LMEMCPY_C_PAD - -/* - * 1010: dst is 16-bit aligned, src is 16-bit aligned - */ - ldrh r2, [r1] - ldr r3, [r1, #0x02] - ldr ip, [r1, #0x06] - ldrh r1, [r1, #0x0a] - strh r2, [r0] - str r3, [r0, #0x02] - str ip, [r0, #0x06] - strh r1, [r0, #0x0a] - bx lr - LMEMCPY_C_PAD - -/* - * 1011: dst is 16-bit aligned, src is 8-bit aligned (byte 3) - */ - ldr r2, [r1, #0x09] /* BE:r2 = 9ABx LE:r2 = xBA9 */ - ldr r3, [r1, #0x05] /* BE:r3 = 5678 LE:r3 = 8765 */ - mov ip, r2, lsr #8 /* BE:ip = .9AB LE:ip = .xBA */ - strh ip, [r0, #0x0a] - ldr ip, [r1, #0x01] /* BE:ip = 1234 LE:ip = 4321 */ - 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... */ - orr r2, r2, r3, lsr #8 /* r2 = 9876 */ - mov r3, r3, lsl #24 /* r3 = 5... */ - orr r3, r3, ip, lsr #8 /* r3 = 5432 */ - orr r1, r1, ip, lsl #8 /* r1 = 3210 */ -#endif - str r2, [r0, #0x06] - str r3, [r0, #0x02] - strh r1, [r0] - bx lr - LMEMCPY_C_PAD - -/* - * 1100: dst is 8-bit aligned (byte 3), src is 32-bit aligned - */ - ldr r2, [r1] /* BE:r2 = 0123 LE:r2 = 3210 */ - ldr ip, [r1, #0x04] /* BE:ip = 4567 LE:ip = 7654 */ - 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] - mov r3, r2, lsr #8 /* r3 = .321 */ - orr r3, r3, ip, lsl #24 /* r3 = 4321 */ - str r3, [r0, #0x01] - mov r3, ip, lsr #8 /* r3 = .765 */ - orr r3, r3, r1, lsl #24 /* r3 = 8765 */ - str r3, [r0, #0x05] - mov r1, r1, lsr #8 /* r1 = .BA9 */ - strh r1, [r0, #0x09] - mov r1, r1, lsr #16 /* r1 = ...B */ - strb r1, [r0, #0x0b] -#endif - bx lr - LMEMCPY_C_PAD - -/* - * 1101: dst is 8-bit aligned (byte 3), src is 8-bit aligned (byte 1) - */ - ldrb r2, [r1, #0x0b] /* r2 = ...B */ - ldr r3, [r1, #0x07] /* BE:r3 = 789A LE:r3 = A987 */ - ldr ip, [r1, #0x03] /* BE:ip = 3456 LE:ip = 6543 */ - ldr r1, [r1, #-1] /* BE:r1 = x012 LE:r1 = 210x */ - 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 */ - strh r2, [r0, #0x09] - mov r3, r3, lsl #16 /* r3 = 87.. */ - orr r3, r3, ip, lsr #16 /* r3 = 8765 */ - mov ip, ip, lsl #16 /* ip = 43.. */ - orr ip, ip, r1, lsr #16 /* ip = 4321 */ - mov r1, r1, lsr #8 /* r1 = .210 */ -#endif - str r3, [r0, #0x05] - str ip, [r0, #0x01] - strb r1, [r0] - bx lr - LMEMCPY_C_PAD - -/* - * 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 */ - ldr r3, [r1, #0x02] /* r3 = 5432 */ - ldr ip, [r1, #0x06] /* ip = 9876 */ - ldrh r1, [r1, #0x0a] /* r1 = ..BA */ - strb r2, [r0] - mov r2, r2, lsr #8 /* r2 = ...1 */ - orr r2, r2, r3, lsl #8 /* r2 = 4321 */ - mov r3, r3, lsr #24 /* r3 = ...5 */ - orr r3, r3, ip, lsl #8 /* r3 = 8765 */ - mov ip, ip, lsr #24 /* ip = ...9 */ - orr ip, ip, r1, lsl #8 /* ip = .BA9 */ - mov r1, r1, lsr #8 /* r1 = ...B */ - str r2, [r0, #0x01] - str r3, [r0, #0x05] - strh ip, [r0, #0x09] - strb r1, [r0, #0x0b] -#endif - bx lr - LMEMCPY_C_PAD - -/* - * 1111: dst is 8-bit aligned (byte 3), src is 8-bit aligned (byte 3) - */ - ldrb r2, [r1] - ldr r3, [r1, #0x01] - ldr ip, [r1, #0x05] - strb r2, [r0] - ldrh r2, [r1, #0x09] - ldrb r1, [r1, #0x0b] - str r3, [r0, #0x01] - str ip, [r0, #0x05] - strh r2, [r0, #0x09] - strb r1, [r0, #0x0b] - bx lr -#endif /* !_STANDALONE */ -END(memcpy) - - .section .note.GNU-stack,"",%progbits |
