![]() |
|
|||
File indexing completed on 2025-05-11 08:23:56
0001 /* SPDX-License-Identifier: BSD-2-Clause */ 0002 0003 /** 0004 * @file 0005 * 0006 * @ingroup mpc55xx_asm 0007 * 0008 * @brief Memory copy functions. 0009 */ 0010 0011 /* 0012 * Copyright (c) 2008 embedded brains GmbH & Co. KG 0013 * Redistribution and use in source and binary forms, with or without 0014 * modification, are permitted provided that the following conditions 0015 * are met: 0016 * 1. Redistributions of source code must retain the above copyright 0017 * notice, this list of conditions and the following disclaimer. 0018 * 2. Redistributions in binary form must reproduce the above copyright 0019 * notice, this list of conditions and the following disclaimer in the 0020 * documentation and/or other materials provided with the distribution. 0021 * 0022 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 0023 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 0024 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 0025 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 0026 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 0027 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 0028 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 0029 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 0030 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 0031 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 0032 * POSSIBILITY OF SUCH DAMAGE. 0033 */ 0034 0035 #include <libcpu/powerpc-utility.h> 0036 #include <bspopts.h> 0037 0038 .section ".bsp_start_text", "ax" 0039 0040 /** 0041 * @fn int mpc55xx_copy_8( const void *src, void *dest, size_t n) 0042 * 0043 * @brief Copy @a n bytes from @a src to @a dest with 8 byte reads and writes. 0044 * 0045 * The memory areas should not overlap. The addresses @a src and @a dest have 0046 * to be aligned on 8 byte boundaries. The size @a n must be evenly divisible by 8. 0047 * The SPE operations @b evxor, @b evlddx and @b evstddx will be used. 0048 */ 0049 #if ((MPC55XX_CHIP_TYPE>=5510) && (MPC55XX_CHIP_TYPE<=5517)) 0050 GLOBAL_FUNCTION mpc55xx_copy_8 0051 #endif /* ((MPC55XX_CHIP_TYPE>=5510) && (MPC55XX_CHIP_TYPE<=5517)) */ 0052 GLOBAL_FUNCTION mpc55xx_copy_4 0053 /* Loop counter = data size / 4 */ 0054 srwi. r5, r5, 2 0055 beqlr 0056 mtctr r5 0057 xor r5,r5,r5 0058 copy_data4: 0059 lwzx r6, r5, r3 0060 stwx r6, r5, r4 0061 addi r5, r5, 4 0062 bdnz copy_data4 0063 0064 /* Return */ 0065 blr 0066 0067 #if !((MPC55XX_CHIP_TYPE>=5510) && (MPC55XX_CHIP_TYPE<=5517)) 0068 /** 0069 * @fn int mpc55xx_copy_8( const void *src, void *dest, size_t n) 0070 * 0071 * @brief Copy @a n bytes from @a src to @a dest with 8 byte reads and writes. 0072 * 0073 * The memory areas should not overlap. The addresses @a src and @a dest have 0074 * to be aligned on 8 byte boundaries. The size @a n must be evenly divisible by 8. 0075 * The SPE operations @b evxor, @b evlddx and @b evstddx will be used. 0076 */ 0077 GLOBAL_FUNCTION mpc55xx_copy_8 0078 /* Loop counter = data size / 8 */ 0079 srwi. r5, r5, 3 0080 beqlr 0081 mtctr r5 0082 0083 /* Set offset */ 0084 evxor r5, r5, r5 0085 0086 copy_data: 0087 evlddx r6, r3, r5 0088 evstddx r6, r4, r5 0089 addi r5, r5, 8 0090 bdnz copy_data 0091 0092 /* Return */ 0093 blr 0094 #endif /*!((MPC55XX_CHIP_TYPE>=5510) && (MPC55XX_CHIP_TYPE<=5517))*/
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |