📄 memcpy.c
字号:
//==========================================================================//// memcpy.c//// memcpy() routine for coldfire////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================/* INCLUDES */#include <cyg/infra/cyg_type.h> /* Common type definitions */#include <stddef.h> /* Compiler defns such as size_t, NULL etc. *//* EXPORTED SYMBOLS */externC void *memcpy( void * s1, const void * s2, size_t n ) __attribute__((alias("_memcpy")));/* FUNCTIONS */void *_memcpy( void * s1, const void * s2, size_t n ){ char * dst = (char *) s1; const char * src = (const char *) s2; long longwords; int_t rem_bytes; int_t loops; int_t loop_index; /* Don't worry about alignment on the coldfire. Most large */ /* structures should be aligned anyway. */ longwords = (long)(n / 4); rem_bytes = n % 4; loops = (int_t)(longwords / 32); loop_index = (int_t)(longwords % 32); switch (loop_index) { do { *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 31: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 30: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 29: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 28: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 27: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 26: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 25: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 24: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 23: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 22: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 21: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 20: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 19: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 18: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 17: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 16: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 15: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 14: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 13: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 12: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 11: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 10: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 9: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 8: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 7: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 6: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 5: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 4: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 3: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 2: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 1: *((cyg_uint32*)dst)++ = *((cyg_uint32*)src)++; case 0: ; /* Keep compiler from complaining. */ } while (--loops >= 0); } /* Clean up the remaining bytes. */ while (--rem_bytes >= 0) { *dst++ = *src++; } return s1;} /* _memcpy() *//* EOF memcpy.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -